doom4ster
2017-03-16 f7a5517638c169c5f8d47339afbc6cfac2e08f5e
CB_IMGPSScanImp.pas
@@ -404,6 +404,8 @@
    FFileSizeLimit:integer;//匯入單一檔案大小限  依業務別決定  以KB為單位  預設5*1024kb
    FCaseNoLength:integer;//案件編號長度檢查  依業務別決定   無預設  一定要傳入
    FImgDelete:string; // Y/N  有權限可在補件時刪除影像
    FIsExternal:string;//Y/N
    FCheck_main_form:string; //Y/N
    ////////傳入參數///////
    //********Http參數********
@@ -479,6 +481,8 @@
    NowShowFileList : TStringlist;  //目前顯示的影像清單
    NowSelectFileList : TStringlist; //目前被點選的影像清單
    GuideFormIDList : TStringlist; //要當導引頁表單清單
    LastInitFormidList:TStringList;
    LastAddFormidList:TstringList;
    //********清單區********
    //********顯示區********
@@ -820,6 +824,8 @@
    procedure PaintEvent(Sender: TObject);
    function GetCurrentVersionNo: String;
    procedure initParameter;
    procedure LastInitFormidListCreate(path:string);
    function checkFormCodeIsCustom(path,formcode:string):boolean;
  protected
    { Protected declarations }
    procedure DefinePropertyPages(DefinePropertyPage: TDefinePropertyPage); override;
@@ -935,6 +941,10 @@
    procedure Set_scancolor(const Value: WideString); safecall;
    function Get_imgdelete: WideString; safecall;
    procedure Set_imgdelete(const Value: WideString); safecall;
    function Get_check_main_form: WideString; safecall;
    function Get_isExternal: WideString; safecall;
    procedure Set_check_main_form(const Value: WideString); safecall;
    procedure Set_isExternal(const Value: WideString); safecall;
  public
    { Public declarations }
    procedure Initialize; override;
@@ -1544,6 +1554,9 @@
  Cust_DocNoList.Free; //自行定義文件名稱
  IN_WH_DocNoList.Free; //入庫的文件清單
  GuideFormIDList.Free; //要當導引頁表單清單
  LastInitFormidList.Free;
  LastAddFormidList.Free;
  //********清單區********
  if FEvents <> nil then FEvents.OnDestroy;
end;
@@ -3355,13 +3368,14 @@
      Showmessage(Format(_Msg('FormID:%s尚未註冊'),[SampleFormID]));
      Panel1.Enabled := True;
      Panel2.Enabled := True;
      DataLoading(false,false);
      Exit;
    end;
    SampleAnchorMode := FormID2Anchor(SampleFormID);
    Panel1.Enabled := False;
    Panel2.Enabled := False;
//ShowMessage('AAAAA');
    Try
      StatrTwainScan;
    Except
@@ -3635,8 +3649,8 @@
  str:='';
  for I := 1 to 11 do // 看 OMRErrInfo 的內容
  begin
  str:=str+BoolToStr(OMRErrInfo[i].Display)+','
          +BoolToStr(OMRErrInfo[i].Ignore)+','+OMRErrInfo[i].Info+','
  str:=str+BoolToStr(OMRErrInfo[i].Display,true)+','
          +BoolToStr(OMRErrInfo[i].Ignore,true)+','+OMRErrInfo[i].Info+','
          +OMRErrInfo[i].Mode+#10#13;
  end;
  ShowMessage('OMRErrInfo='+str);
@@ -5269,20 +5283,21 @@
  S : TStringlist;
  FormCode,iPage : String;
begin
  Count := 1;
  Count := 0;
  S := TStringlist.Create;
  try
    S.LoadFromFile(ImageSavePath+CaseID+'\upload\Context.dat');
    for I := 0 to pages-1 do
    for I := 1 to pages do //從0到pages-1  改成 1到pages 20170316 這樣可以修改檢核的頁數問題
    begin
      iPage := Add_Zoo(i,2);
      for n := 0 to S.Count - 1 do
      begin
        FormCode := FileName2FormCode(S.Strings[n]);
        //Showmessage('1:'+version+','+FormCode2Version(FormCode)+','+DocNo+','+FormCode2DocNo(FormCode)+','+iPage+','+FormCode2Page(FormCode));
//Showmessage('1:'+version+','+FormCode2Version(FormCode)+','+DocNo+','+FormCode2DocNo(FormCode)+','+iPage+','+FormCode2Page(FormCode));
        if (version = FormCode2Version(FormCode)) and (DocNo = FormCode2DocNo(FormCode)) and (ipage = FormCode2Page(FormCode)) then
        begin
          //Showmessage(inttostr(Count+1));
//Showmessage(version+','+DocNo+',iPage='+iPage);
//Showmessage(inttostr(Count+1));
          Inc(Count);
          Break;   //找到了...離開
        end;
@@ -5455,6 +5470,13 @@
  Doc_Data,Doc_Data1 : String;
  In_Doc1,In_Doc2 : String;
  AttachYN : String; //是否有附件 Y:有 N:沒有
  ST1,ST2:TStringList;
  str1,str2:String;
  must_formidStr :string;
  last_add_formidstr :string;
  casepath:String;
  filesizeInt:integer;
begin
  Result := True;
  TransName := CaseID;
@@ -5500,13 +5522,75 @@
//ShowMessage('DDDDDDDDDD');
  //LoanDoc := 'Y';
  //產生遮罩影像
  if FWork_No = 'CW' then
    HaveMask := Case2Mask(Path,MaskPath);
//  if FWork_No = 'CW' then
//    HaveMask := Case2Mask(Path,MaskPath);
  //產生遮罩影像
 // S := S +#13+'5-->'+ Timetostr(now);
  ///////必要formid 20170315 start  //////////////////////////////
  must_formidStr:='';
  last_add_formidstr:='';
  ST1:=TStringList.Create;
  ST1.LoadFromFile(path+'FormCode_Name.dat');
//ShowMessage(ST1.Text);
  ST2:=TStringList.Create;
//ShowMessage('壓縮前');
  for I := 0 to ST1.Count - 1 do
  begin
    if (Pos('_',St1.Strings[i])<>1) and (Pos('_',St1.Strings[i])<>-11) then
    begin
      str1:=Copy(ST1.Strings[i],1,Pos('_',St1.Strings[i])-1);
      if ST2.IndexOf(str1) = -1 then
      begin
        ST2.Add(str1);
        must_formidStr:= must_formidStr+str1+'@#,';
      end;
    end;
  end;
  must_formidStr:=Copy(must_formidStr,1,Length(must_formidStr)-3) ;
  for I := 0 to LastInitFormidList.Count - 1 do
  begin
    if ST2.IndexOf(LastInitFormidList.Strings[i]) <> -1 then
    begin
      ST2.Delete(ST2.IndexOf(LastInitFormidList.Strings[i]));
    end;
  end;
  for I := 0 to ST2.Count - 1 do
  begin
    if i <> ST2.Count then
    begin
      last_add_formidstr:=last_add_formidstr+ST2.Strings[i]+'@#,';
    end
    else
    begin
      last_add_formidstr:=last_add_formidstr+ST2.Strings[i]
    end;
  end;
  ST1.Free;
  ST2.Free;
  ///////必要formid 20170315 end //////////////////////////
  ///保留外部影像  start///////////////////////////////
  casepath:= Copy(Path,1,pos('Upload',path)-1);
//ShowMessage('casepath='+casepath);
//FIsExternal:='Y';
  if (FMode='ESCAN') and (FIsExternal='Y') then
  begin
    if FileExists(casepath+'Download\FirstImg.zip') then
    begin
      CopyFile(PWChar(casepath+'Download\FirstImg.zip'),PWChar(path+'FirstImg.zip'),false);
    end
    else
    begin
      CopyFile(PWChar(casepath+'Download\'+CaseID+'.zip'),PWChar(path+'FirstImg.zip'),false);
    end;
  end;
  ///保留外部影像  end///////////////////////////////
  //file_size 計算  就先不做 20170316
  filesizeInt:=0;
  //////壓檔/////
  ZipMainFile(Path,Path,'Img.zip');
  if HaveMask then
@@ -5521,9 +5605,13 @@
  +'&doc_data='+HTTPEncode(UTF8Encode(Doc_Data))
  +'&doc_data1='+HTTPEncode(UTF8Encode(Doc_Data1))
  +'&attach='+AttachYN
  +'&file_size='+IntToStr(filesizeInt)
  +'&must_formid='+must_formidStr  //擁有的 formid
  +'&last_add_formid='+last_add_formidstr   //當次新加的 formid
  +'&in_doc1='+HTTPEncode(UTF8Encode(In_Doc1))
  +'&in_doc2='+HTTPEncode(UTF8Encode(In_Doc2));
//ShowMessage('SendData='+SendData);
//exit;
  if not upFile(HTTPSClient,FUrl,'service/imgpsc/IMGPSC02/caseupload',SendData,'file',Path+'Img.zip',FReWrite,Memo1,False) then
  begin
    Showmessage(Format(_Msg('傳送案件編號(%s)檔案時,網路發生錯誤!!'+_Msg('錯誤代碼:')),[CaseID])+Inttostr(HttpError.HttpErrorCode)+' '+HttpError.HttpReason);
@@ -5782,7 +5870,7 @@
  EnCodeDateTime := En_DecryptionStr_Base64('E',ServerDate+GetBalance2Time(Balance),Mpskey);
  ///service/slic/SLIC04/case?data=&verify=&case_no=&file=
  SendData := 'data='+HTTPEncode(UTF8Encode(FData))+'&verify='+FVerify+'&case_no='+CaseID+'&file=';
ShowMessage(SendData);
//ShowMessage(SendData);
  if not dnFile_Get(HTTPSClient,Furl,'service/imgpsc/IMGPSC04/case',SendData,Path+CaseID+'.zip',FReWrite,Memo1,False,DownImgStatus) then
  begin
    HttpErrStr := _Msg('錯誤代碼:')+Inttostr(HttpError.HttpErrorCode)+' '+HttpError.HttpReason;
@@ -5801,7 +5889,7 @@
    Result := False;
    Exit;
  end;
ShowMessage('sssss');
//ShowMessage('sssss');
  AttPath := Path + 'AttFile\';
  if FileExists(Path+CaseID+'.zip') then
  begin
@@ -6362,6 +6450,27 @@
      Break;
    end;
  end;
end;
function TCB_IMGPSScanX.checkFormCodeIsCustom(path, formcode: string): boolean;
var
  i:integer;
  ini : Tmeminifile;
  str1:String;
begin
//ShowMessage(path);
  ini := Tmeminifile.Create(Path+'CustomDocNo.ini');
  str1:=ini.ReadString(Copy(formcode,1,8),'FormID','');
//ShowMessage('str1'+str1);
  if str1 = formcode then
  begin
    Result:=True;
  end
  else
  begin
    Result := False;
  end;
end;
Function TCB_IMGPSScanX.CheckCaseID_OK:Boolean;  //檢查是否有未配號的案件
@@ -7016,6 +7125,12 @@
      ZipfileList.Add(SoPath+'In_Wh.dat');
    if FileExists(SoPath+'UseCase.ini') then
      ZipfileList.Add(SoPath+'UseCase.ini');
    if FileExists(SoPath+'FirstImg.zip') then//20170315 加的
    begin
      ZipfileList.Add(SoPath+'FirstImg.zip');
    end;
    ExeCuteZip(DePath+ZipName,SoPath,ZipFileList,False,False);
    //Showmessage('111');
@@ -7972,6 +8087,30 @@
  iDocNoList.Free;
  OldCaseInfoForm.Free;
  end;
end;
procedure TCB_IMGPSScanX.LastInitFormidListCreate(path: string);
var
  i:integer;
  ST1:TStringList;
  str1:string;
begin
//ShowMessage('path='+path);
  ST1:=TStringList.Create;
  ST1.LoadFromFile(path+'FormCode_Name.dat');
  for I := 0 to ST1.Count - 1 do
  begin
    if (Pos('_',St1.Strings[i])<>1) and (Pos('_',St1.Strings[i])<>-11) then
    begin
      str1:=Copy(ST1.Strings[i],1,Pos('_',St1.Strings[i])-1);
      if LastInitFormidList.IndexOf(str1) = -1 then
      begin
        LastInitFormidList.Add(str1);
      end;
    end;
  end;
  ST1.Free;
end;
procedure TCB_IMGPSScanX.LoadImgFile;  //載入新件及替換件
@@ -10365,15 +10504,20 @@
        begin
        end;
//ShowMessage('MainFormID='+MainFormID);
        if MainFormID = ''then
        begin
          //20131203 yuu說不檢查這個,先拿掉
          {if FMode <> 'SSCAN' then  //簽署章件會換主FormID,先跳過
          //20131203 yuu說不檢查這個,先拿掉   20170315 楷琳說未歸類要擋
          if FCheck_main_form='Y' then
          begin
            ErrStr:=_Msg('找不到分案文件');   //找不到主文件
            OMRErr2ini(CaseID,ErrStr,'','','','','','',False,False,True);
            CaseOk := false;
          end;}
            if (FMode <> 'SSCAN') then  //簽署章件會換主FormID,先跳過
            begin
              ErrStr:=_Msg('找不到分案文件');   //找不到主文件
              OMRErr2ini(CaseID,ErrStr,'','','','','','',False,False,True);
              CaseOk := false;
            end;
          end;
        end
        Else
        begin
@@ -10471,10 +10615,12 @@
        end }
        /////未註冊文件/////
        //////停用文件//
        {Else} IF ModeNeedCheck(OMRErrInfo[9].Mode,FMode) and (not FormIDExists(FormCode,True,0)) then  //有停用的文件
        {Else} IF ModeNeedCheck(OMRErrInfo[9].Mode,FMode) and (not FormIDExists(FormCode,True,0)) and (not checkFormCodeIsCustom(ImageSavePath + CaseID+'\upload\',FormCode)) then  //有停用的文件
        begin
//ShowMessage('AAAA');
          ErrStr:=Format(OMRErrInfo[9].Info,[FormCode2FormName(CaseID,FormCode)]);   //有停用文件
          OMRErr2ini(CaseID,ErrStr,'','','','','','',False,OMRErrInfo[9].Ignore,OMRErrInfo[9].Display);
//ShowMessage('ErrStr='+ErrStr);
          if OMRErrInfo[9].Display then
            CaseOk := false;
        end;
@@ -12785,7 +12931,7 @@
  PageLVclear := True;
  InitialOk := False;
  FMode := 'DSCAN' ;
  //FMode := 'DSCAN' ;
  //FIs_In_Wh := 'Y';
  if FIs_In_Wh = 'Y' then
    AttName := 'Attach'  //入庫附件
@@ -12886,6 +13032,8 @@
  Cust_DocNoList := TStringlist.Create; //自行定義的文件名稱
  IN_WH_DocNoList := TStringlist.Create; //入庫的文件清單
  GuideFormIDList := TStringlist.Create; //要當導引頁表單清單
  LastInitFormidList :=TStringList.Create;
  LastAddFormidList := TStringList.Create;
  //********清單區********
  ShowText := _Msg('資料載入中,請稍候');
@@ -13057,6 +13205,7 @@
//        //LoadImgFile;
//      end;
      Create_Cust_DocDir(FCaseID); //產生外面傳入的文件
      LastInitFormidListCreate(ImageSavePath+FCaseID+'\Download\');
    end;
  end;
@@ -13188,12 +13337,6 @@
      s.Free;
      end;
    end;}
    //*******DOC必要文件檢核應該寫在這邊 START 20170222 ************
    //DocDir.dat 會含有DOC列表  所以上傳前要給檢查  有沒有少必要的DOC
    //並檢查 DOC 中 有沒有影像
    //*******DOC必要文件檢核應該寫在這邊 END************
    if (FMode = 'NSCAN') then
    begin
      /////訊問是否可上傳/////
@@ -13269,6 +13412,13 @@
  LoadImgFile;
  if (FMode = 'ESCAN') and (SuccessCount = 1) then
  begin
    if FEvents <> nil Then
    begin
      FEvents.OnClosePage;
    end;
  end;
  if (FMode = 'DSCAN') and (SuccessCount = 1) then
  begin
    if FEvents <> nil Then
    begin
@@ -14086,7 +14236,27 @@
procedure TCB_IMGPSScanX.Set_imgdelete(const Value: WideString);
begin
  FImgDelete:=Value;
end;
function TCB_IMGPSScanX.Get_check_main_form: WideString;
begin
end;
function TCB_IMGPSScanX.Get_isExternal: WideString;
begin
end;
procedure TCB_IMGPSScanX.Set_check_main_form(const Value: WideString);
begin
  FCheck_main_form := Value;
end;
procedure TCB_IMGPSScanX.Set_isExternal(const Value: WideString);
begin
  FIsExternal:=Value;
end;
initialization