From 0756bf12d10cf1b7f78c571de0a9ad69cbaeb7ca Mon Sep 17 00:00:00 2001
From: curtis <curtis@i-mps.com>
Date: 星期一, 30 三月 2026 14:24:17 +0800
Subject: [PATCH] fix: 更新內部引用方法參照

---
 reassemble/CB_IMGPSScanImp.prUpload.pas |  800 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 800 insertions(+), 0 deletions(-)

diff --git a/reassemble/CB_IMGPSScanImp.prUpload.pas b/reassemble/CB_IMGPSScanImp.prUpload.pas
new file mode 100644
index 0000000..a53a342
--- /dev/null
+++ b/reassemble/CB_IMGPSScanImp.prUpload.pas
@@ -0,0 +1,800 @@
+{ ==============================================================================
+  方法名稱:CreateCaseNeedData
+  引用相依:FileExists, LoadFromFile, SaveToFile
+  方法描述:掃描案件目錄下的 Context.dat 影像清單,自動推導並產生該案件所需的 Doc
+            Dir.dat、CaseDocNo.dat 及份數清單,用於修復或重建案件結構。
+============================================================================== }
+Procedure  TCB_IMGPSScanX.CreateCaseNeedData(Path:String);
+var
+  FileList,DocNoList,CaseDocNoList,CaseDocNo_CopiesList : TStringlist;
+  i,n : Integer;
+  Docno : String;
+  Exists : Boolean;
+begin
+  FileList := TStringlist.Create;
+  DocNoList := TStringlist.Create;
+  CaseDocNoList := TStringlist.Create;
+  CaseDocNo_CopiesList := TStringlist.Create;
+  try
+    if FileExists(Path+'Context.dat') then
+    begin
+      FileList.LoadFromFile(Path+'Context.dat');
+      for i := 0 to FileList.Count - 1 do
+      begin
+        Docno := FormCode2DocNo(FileName2FormCode(FileList.Strings[i]));
+//ShowMessage('Docno='+Docno);
+        DocNoList.Add(DocNo);
+        Exists := False;
+        for n := 0 to CaseDocNoList.Count - 1 do
+        begin
+          if Docno = CaseDocNoList.Strings[n] then
+            Exists := True;
+        end;
+        if not Exists then
+        begin
+          CaseDocNoList.Add(DocNo);
+          CaseDocNo_CopiesList.Add('1');
+        end;
+      end;
+//ShowMessage('CreateCaseNeedData  DocNoList='+DocNoList.Text);
+      DocNoList.SaveToFile(Path+'DocDir.dat');
+      CaseDocNoList.SaveToFile(Path+'CaseDocNo.dat');
+      CaseDocNo_CopiesList.SaveToFile(Path+'CaseDocNo_Copies.dat')
+    end;
+
+  finally
+  FileList.Free;
+  DocNoList.Free;
+  CaseDocNoList.Free;
+  CaseDocNo_CopiesList.Free;
+  end;
+end;
+
+
+{ ==============================================================================
+  方法名稱:Case2upload
+  引用相依:CopyFile, DirectoryExists, FileExists, LoadFromFile, SaveToFile, Str
+            2Dir, _DelTree
+  方法描述:準備案件上傳用的資料夾結構。將分散在各文件子目錄下的影像檔案複製到單
+            一的 Upload 目錄下並重新編號檔名,同時產生彙整後的索引檔與附件。
+============================================================================== }
+Procedure TCB_IMGPSScanX.Case2upload(CaseID:String);
+var
+  i,n:Integer;
+  OldPath,NewPath,DocDir : String;
+  OldFile,NewFile,AttFile : String;
+  DocNoList,FileList:TStringlist;
+  iFileList,iFile_DocNoList :TStringlist;
+  iDocDirList : TStringlist;
+  iAttFileList : TStringlist;
+begin
+  DocNoList := TStringlist.Create;
+  FileList := TStringlist.Create;
+  iFileList := TStringlist.Create;
+  iFile_DocNoList := TStringlist.Create;
+  iDocDirList := TStringlist.Create;
+  iAttFileList := TStringlist.Create;
+  try
+    OldPath := ImageSavePath+CaseID+'\';
+    NewPath := ImageSavePath+CaseID+'\Upload\';
+    if DirectoryExists(NewPath) then
+      _DelTree(NewPath);
+    str2dir(NewPath);
+    CopyFile(PWideChar(OldPath+'CaseDocNo.dat'),PWideChar(NewPath+'CaseDocNo.dat'),False);
+    CopyFile(PWideChar(OldPath+'CaseDocNo_Copies.dat'),PWideChar(NewPath+'CaseDocNo_Copies.dat'),False);
+    CopyFile(PWideChar(OldPath+'CustomDocNo.ini'),PWideChar(NewPath+'CustomDocNo.ini'),False);
+    CopyFile(PWideChar(OldPath+'CaseIndex.dat'),PWideChar(NewPath+'CaseIndex.dat'),False);
+    CopyFile(PWideChar(OldPath+'In_Wh.dat'),PWideChar(NewPath+'In_Wh.dat'),False);
+    CopyFile(PWideChar(OldPath+'UseCase.ini'),PWideChar(NewPath+'UseCase.ini'),False);
+
+    if FileExists(OldPath+'CaseDocNo.dat') then
+    begin
+      DocNoList.LoadFromFile(OldPath+'CaseDocNo.dat');
+    end
+    else
+    begin
+      DocNoList.SaveToFile(OldPath+'CaseDocNo.dat');
+      CopyFile(PWideChar(OldPath+'CaseDocNo.dat'),PWideChar(NewPath+'CaseDocNo.dat'),False);
+    end;
+
+    for i := 0 to DocNoList.Count-1 do
+    begin
+      DocDir := DocNoList.Strings[i];
+      OldPath := ImageSavePath+CaseID+'\'+ DocDir+'\';
+
+      FileList.Clear;
+      if FileExists(OldPath+'Context.dat') then
+      begin
+        FileList.LoadFromFile(OldPath+'Context.dat');
+        for n := 0 to FileList.Count - 1 do
+        begin
+          OldFile := FileList.Strings[n];
+          NewFile := Add_Zoo(iFileList.Count+1,3)+FileName2NoQuene_Filename(OldFile);
+          CopyFile(PWideChar(OldPath+OldFile),PWideChar(NewPath+NewFile),False);
+          iFileList.Add(NewFile);
+          iFile_DocNoList.Add(DocNoDir2DocNo(DocDir));
+          iDocDirList.Add(DocDir);
+        end;
+      end;
+    end;
+    if DirectoryExists(ImageSavePath+CaseID+'\Attach') then
+    begin
+      DocDir := 'Attach';
+      OldPath := ImageSavePath+CaseID+'\'+ DocDir+'\';
+
+      FileList.Clear;
+      if FileExists(OldPath+'Context.dat') then
+      begin
+        FileList.LoadFromFile(OldPath+'Context.dat');
+        for n := 0 to FileList.Count - 1 do
+        begin
+          OldFile := FileList.Strings[n];
+          NewFile := Add_Zoo(iFileList.Count+1,3)+FileName2NoQuene_Filename(OldFile);
+          CopyFile(PWideChar(OldPath+OldFile),PWideChar(NewPath+NewFile),False);
+          iFileList.Add(NewFile);
+          iFile_DocNoList.Add(DocNoDir2DocNo(DocDir));
+          iDocDirList.Add(DocDir);
+        end;
+      end;
+    end;
+
+    if DirectoryExists(ImageSavePath+CaseID+'\S_Attach') then
+    begin
+      DocDir := 'S_Attach';
+      OldPath := ImageSavePath+CaseID+'\'+ DocDir+'\';
+
+      FileList.Clear;
+      if FileExists(OldPath+'Context.dat') then
+      begin
+        FileList.LoadFromFile(OldPath+'Context.dat');
+        for n := 0 to FileList.Count - 1 do
+        begin
+          OldFile := FileList.Strings[n];
+          NewFile := Add_Zoo(iFileList.Count+1,3)+FileName2NoQuene_Filename(OldFile);
+          CopyFile(PWideChar(OldPath+OldFile),PWideChar(NewPath+NewFile),False);
+          iFileList.Add(NewFile);
+          iFile_DocNoList.Add(DocNoDir2DocNo(DocDir));
+          iDocDirList.Add(DocDir);
+        end;
+      end;
+    end;
+    OldPath := ImageSavePath+CaseID+'\';
+    if FileExists(OldPath+'AttContext.dat') then
+    begin
+      iAttFileList.LoadFromFile(OldPath+'AttContext.dat');
+      for n := 0 to iAttFileList.Count - 1 do
+      begin
+        AttFile := iAttFileList.Strings[n];
+        CopyFile(PWideChar(OldPath+AttFile),PWideChar(NewPath+AttFile),False);
+      end;
+      iAttFileList.SaveToFile(NewPath+'AttContext.dat');
+    end;
+
+
+    iFileList.SaveToFile(NewPath+'Context.dat');
+    iFile_DocNoList.SaveToFile(NewPath+'Context_DocNo.dat');
+    iDocDirList.SaveToFile(NewPath+'DocDir.dat');
+
+  finally
+  iFileList.Free;
+  iAttFileList.Free;
+  iFile_DocNoList.Free;
+  DocNoList.Free;
+  FileList.Free;
+  end;
+end;
+
+
+{ ==============================================================================
+  方法名稱:Download2Case
+  引用相依:CopyFile, DirectoryExists, FileExists, LoadFromFile, SaveToFile
+  方法描述:將下載或匯入的案件結構還原回本系統的多層級目錄結構。包含建立文件子目
+            錄、檔案複製並重新編號、以及重建各類索引與份數設定檔。
+============================================================================== }
+Procedure TCB_IMGPSScanX.Download2Case(SoDir,DeDir:String);
+var
+  i,n : Integer;
+  DocDir:String;
+  OldFile,NewFile,AttFile:String;
+  DocNoList,FileList : TStringlist;
+  iFileList,iFile_DocDirList :TStringlist;
+  iAttFileList :TStringlist;
+  AA,AA2,AA3,AA4:Boolean;
+begin
+
+  if (not FileExists(SoDir+'CaseDocNo.dat')) or (not FileExists(SoDir+'DocDir.dat')) then   //截畫面會沒這些檔
+  begin
+//ShowMessage('產生必要的文字檔');
+    CreateCaseNeedData(SoDir);   //產生必要的文字檔
+  end;
+
+  AA:=CopyFile(PWideChar(SoDir+'CaseDocNo.dat'),PWideChar(DeDir+'CaseDocNo.dat'),False);
+  AA2:=CopyFile(PWideChar(SoDir+'CaseDocNo_Copies.dat'),PWideChar(DeDir+'CaseDocNo_Copies.dat'),False);
+  AA3:=CopyFile(PWideChar(SoDir+'CustomDocNo.ini'),PWideChar(DeDir+'CustomDocNo.ini'),False);
+  AA4:=CopyFile(PWideChar(SoDir+'UseCase.ini'),PWideChar(DeDir+'UseCase.ini'),False);
+//ShowMessage(BoolToStr(AA)+#10#13+BoolToStr(AA2)+#10#13+BoolToStr(AA3)+#10#13+BoolToStr(AA4));
+  if FileExists(SoDir+'DocDir.dat') then     //20170222 新加
+  begin
+    CopyFile(PWideChar(SoDir+'DocDir.dat'),PWideChar(DeDir+'DocDir.dat'),False);
+  end;
+
+
+  DocNoList := TStringlist.Create;
+  FileList := TStringlist.Create;
+  iFileList := TStringlist.Create;
+  iFile_DocDirList := TStringlist.Create;
+  iAttFileList := TStringlist.Create;
+  try
+    //if Not FileExists(SoDir+'Context.dat') then  Exit;
+    //iFileList.LoadFromFile(SoDir+'Context.dat');
+    //if iFileList.Count = 0 then Exit;
+    if FileExists(SoDir+'Context.dat') then
+      iFileList.LoadFromFile(SoDir+'Context.dat');
+    if FileExists(SoDir+'DocDir.dat') then
+      iFile_DocDirList.LoadFromFile(SoDir+'DocDir.dat');
+    if iFileList.Count <> iFile_DocDirList.Count then
+    begin
+      for i := 0 to iFileList.Count - 1 do
+      begin
+        if i > iFile_DocDirList.Count -1 then
+        begin
+          iFile_DocDirList.Add(FormCode2DocNo(FileName2FormCode(iFileList.Strings[i])));
+        end;
+      end;
+    end;
+    if FileExists(SoDir+'CaseDocNo.dat') then
+      DocNoList.LoadFromFile(SoDir+'CaseDocNo.dat');
+    if FileExists(DeDir+'CaseDocNo_Copies.dat') then
+      CaseDocNo_CopiesList.LoadFromFile(DeDir+'CaseDocNo_Copies.dat');
+    {for i := 0 to DocNoList.Count - 1 do
+    begin
+      DocDir := DocNoList.Strings[i];
+      MkDir(DeDir+DocDir);
+    end;}
+//ShowMessage('DocNoList='+DocNoList.Text);
+
+    for i := DocNoList.Count - 1 downto 0 do
+    begin
+      DocDir := DocNoList.Strings[i];
+      if not DirectoryExists(DeDir+DocDir) then
+      begin
+        MkDir(DeDir+DocDir);
+        if not FileExists(DeDir+DocDir+'\Context.dat') then
+          StringtoFile('',DeDir+DocDir+'\Context.dat');
+      end
+      else
+      begin
+//ShowMessage('GGG');
+        DocNoList.Delete(i);
+        DocNoList.SaveToFile(DeDir+'CaseDocNo.dat');
+        if i <= CaseDocNo_CopiesList.Count-1  then
+        begin
+//ShowMessage('KKKK');
+          CaseDocNo_CopiesList.Delete(i);
+          CaseDocNo_CopiesList.SaveToFile(DeDir+'CaseDocNo_Copies.dat');
+        end;
+      end;
+    end;
+  //20170221 先註解起來  因為他在補充掃瞄時好像會有顯示的問題
+
+    for i := 0 to iFileList.Count - 1 do
+    begin
+      OldFile := iFileList.Strings[i];
+      DocDir := iFile_DocDirList.Strings[i];
+      if (DocDir = 'Attach') or (DocDir = 'S_Attach') then
+      begin
+        if not DirectoryExists(DeDir+DocDir) then
+          MkDir(DeDir+DocDir);
+      end;
+
+      FileList.Clear;
+      if FileExists(DeDir+DocDir+'\Context.dat') then
+      begin
+        FileList.LoadFromFile(DeDir+DocDir+'\Context.dat');
+      end;
+      NewFile := Add_Zoo(FileList.Count+1,3)+FileName2NoQuene_Filename(OldFile);
+      CopyFile(PWideChar(SoDir+OldFile),PWideChar(DeDir+DocDir+'\'+NewFile),False);
+      FileList.Add(NewFile);
+      FileList.SaveToFile(DeDir+DocDir+'\Context.dat');
+    end;
+
+    for i := DocNoList.Count -1 downto 0 do
+    begin
+      if (DocNoList.Strings[i] = 'Attach') or (DocNoList.Strings[i] = 'S_Attach') then
+      begin
+        DocNoList.Delete(i);
+        DocNoList.SaveToFile(DeDir+'CaseDocNo.dat');
+      end;
+    end;
+
+    {if (DocNoList.Count > 0) and ((DocNoList.Strings[DocNoList.Count-1] = 'Attach') or (DocNoList.Strings[DocNoList.Count-1] = 'S_Attach')) then
+    begin
+      DocNoList.Delete(DocNoList.Count-1);
+      DocNoList.SaveToFile(DeDir+'CaseDocNo.dat');
+    end; }
+    CaseDocNo_CopiesList.Clear;
+
+    if FileExists(DeDir+'CaseDocNo_Copies.dat') then
+      CaseDocNo_CopiesList.LoadFromFile(DeDir+'CaseDocNo_Copies.dat');
+    if DocNoList.Count > CaseDocNo_CopiesList.Count then
+    begin
+      for i := 0 to DocNoList.Count - 1 do
+      begin
+        if i > CaseDocNo_CopiesList.Count-1 then
+        begin
+          CaseDocNo_CopiesList.Add('1');
+          //CaseDocNo_CopiesList.SaveToFile(DeDir+'CaseDocNo_Copies.dat');
+        end;
+      end;
+    end;
+    CaseDocNo_CopiesList.SaveToFile(DeDir+'CaseDocNo_Copies.dat');
+    {if (not FileExists(DeDir+'CaseDocNo_Copies.dat') then
+    begin
+      CaseDocNo_CopiesList.Free;
+      for i := 0 to DocNoList.Count - 1 do
+      begin
+        CaseDocNo_CopiesList.Add('1');
+        CaseDocNo_CopiesList.SaveToFile(DeDir+'CaseDocNo_Copies.dat');
+      end;
+    end;}
+    if FileExists(SoDir+'AttContext.dat') then
+    begin
+      iAttFileList.LoadFromFile(SoDir+'AttContext.dat');
+      for i := 0 to iAttFileList.Count - 1 do
+      begin
+        AttFile := iAttFileList.Strings[i];
+        CopyFile(PWideChar(SoDir+AttFile),PWideChar(DeDir+AttFile),False);
+      end;
+      iAttFileList.SaveToFile(DeDir+'AttContext.dat');
+    end;
+
+
+    if FMode='ESCAN' then
+    begin
+      InitExistImgList(DeDir);
+    end;
+
+
+  finally
+  iFileList.Free;
+  FileList.Free;
+  DocNoList.Free;
+  iFile_DocDirList.Free;
+  end;
+end;
+
+
+{ ==============================================================================
+  方法名稱:GetCaseFormID
+  引用相依:LoadFromFile
+  方法描述:從案件目錄的 Context.dat 檔案中搜尋並回傳該案件的主表單代碼(FormID)。
+            程序會遍歷影像清單,提取各檔案的表單代碼,並排除特定的分案頁代碼,直到
+            找到符合條件的主表單代碼為止。
+============================================================================== }
+Function TCB_IMGPSScanX.GetCaseFormID(Path:String):String;  //取案件的主FormID
+var i,n : Integer;
+    FileFormID : String;
+begin
+  Result := '';
+  ContextList.LoadFromFile(Path+'Context.dat');
+  for I := 0 to ContextList.Count - 1 do
+  begin
+    FileFormID := FileName2FormCode(ContextList.Strings[i]);
+
+    if DivPageFormIDList.IndexOf(FileFormID)<>-1 then //20170509 跳過分案頁的formid
+    begin
+      Continue;
+    end;
+    if FindDivFormCode(FileFormID) then
+    begin
+      Result := FileFormID;
+      Break;
+    end;
+  end;
+end;
+
+
+{ ==============================================================================
+  方法名稱:CreateFormID_FormName
+  引用相依:SaveToFile
+  方法描述:遍歷 ContextList,提取每個檔案的表單代號與名稱並格式化為「代號_名稱」,
+            最後存成 FormCode_Name.dat 供上傳使用。
+============================================================================== }
+Procedure TCB_IMGPSScanX.CreateFormID_FormName(Path,CaseID:String);  //產生FormID_FormName.dat
+var i : Integer;
+    S : TStringlist;
+    FormID : String;
+    FormName : String;
+begin
+  S := TStringlist.Create;
+  try
+    for I := 0 to ContextList.Count - 1 do
+    begin
+      FormID := FileName2FormCode(ContextList.Strings[i]);
+      FormName := FormCode2FormName(CaseID,FormID);
+      S.Add(FormID+'_'+FormName);
+    end;
+    S.SaveToFile(Path + 'FormCode_Name.dat',TEnCoding.UTF8);
+  finally
+  S.Free;
+  end;
+end;
+
+
+{ ==============================================================================
+  方法名稱:CreateDocNo_DocName
+  引用相依:SaveToFile
+  方法描述:產生包含文件代號與名稱的對應檔 DocNo_Name.dat。首先執行案件內文件去重
+            ,接著遍歷 CaseDocNoList 取得對應名稱,針對不需分組的文件會在名稱前加
+            上星號標記,最後將結果以 UTF-8 編碼儲存。
+============================================================================== }
+Procedure TCB_IMGPSScanX.CreateDocNo_DocName(Path,CaseID:String);  //產生DocNo_DocName.dat
+var
+  i : Integer;
+  S : TStringlist;
+  Doc_Name : String;
+begin
+  S := TStringlist.Create;
+  try
+    DistinctDocNoinCase(Path);
+    for i := 0 to CaseDocNoList.Count - 1 do
+    begin
+      Doc_Name := CaseDocNoList.Strings[i]+'_'+DocNo2DocName(CaseID,CaseDocNoList.Strings[i]);
+      if not DocnoNeedGroup(CaseDocNoList.Strings[i]) Then  //不用分組的加*號給智豪
+        Doc_Name := '*'+Doc_Name;
+      S.Add(Doc_Name);
+    end;
+    S.SaveToFile(Path+'DocNo_Name.dat',TEnCoding.UTF8);
+  finally
+  S.Free;
+  end;
+end;
+
+
+{ ==============================================================================
+  方法名稱:CreateIn_WH
+  引用相依:FileExists, LoadFromFile, SaveToFile
+  方法描述:產生在席文件清單檔 In_Wh.dat。讀取案件的文件目錄清單後,比對全域的在席
+            文件清單(IN_WH_DocNoList),若文件代號匹配或屬於特定系統目錄(ZZZZZ),則
+            將其加入清單並儲存,用於標記需留存實體的文件。
+============================================================================== }
+Procedure TCB_IMGPSScanX.CreateIn_WH(CaseID:String);  //產生In_WH.dat
+var
+  i,n : Integer;
+  DocDirList,In_WH_List : TStringlist;
+  iDocNo : String;
+begin
+  DocDirList := TStringlist.Create;
+  In_WH_List := TStringlist.Create;
+  try
+    if FileExists(ImageSavePath+CaseID+'\CaseDocNo.dat') then
+      DocDirList.LoadFromFile(ImageSavePath+CaseID+'\CaseDocNo.dat');
+    for i := 0 to DocDirList.Count - 1 do
+    begin
+      iDocNo := DocNoDir2DocNo(DocDirList.Strings[i]);
+      for n := 0 to IN_WH_DocNoList.Count - 1 do
+      begin
+        if (iDocNo = IN_WH_DocNoList.Strings[n]) or (Copy(iDocNo,1,5)='ZZZZZ') then
+        begin
+          In_WH_List.Add(DocDirList.Strings[i]);
+          Break;
+        end;
+      end;
+    end;
+    In_WH_List.SaveToFile(ImageSavePath+CaseID+'\In_Wh.dat');
+
+  finally
+  DocDirList.Free;
+  In_WH_List.Free;
+  end;
+end;
+
+
+{ ==============================================================================
+  方法名稱:CreateDocNo_Info
+  引用相依:FileExists, LoadFromFile
+  方法描述:產生案件內標準文件(非自訂)的彙總資訊字串。方法讀取 CaseDocNo.dat,針對
+            每個非 'ZZZZZ' 開頭的文件編號,計算其在案件中的總份數、累計總頁數,並檢
+            查編輯狀態(異動旗標)。結果以「編號[Tab]份數[Tab]頁數[Tab]狀態」的格式逐
+            行組成,作為案件上傳時與伺服器比對資料完整性的核心依據。
+============================================================================== }
+Function TCB_IMGPSScanX.CreateDocNo_Info(CaseID:String):String; //產生 DocNo[tab]份數[tab]總頁數[tab]是否異動[換行]DocNo[tab]份數[tab]總頁數[tab]是否異動
+var
+  i,n : Integer;
+  DocDirList,DocDir_CopiesList,FileList,C_DocNoList : TStringlist;
+  DocNo,iDocDir,iDocNo,iEdit:String;
+  icopys,ipages : integer;
+  S,S1 : TStringlist;
+  Str : String;
+begin
+  DocDirList := TStringlist.Create;
+  DocDir_CopiesList := TStringlist.Create;
+  FileList := TStringlist.Create;
+  C_DocNoList := TStringlist.Create;
+  try
+    Str := '';
+    if Not FileExists(ImageSavePath+CaseID+'\CaseDocNo.dat') then Exit;
+
+    DocDirList.LoadFromFile(ImageSavePath+CaseID+'\CaseDocNo.dat');
+
+    if DocDirList.Count =0 then exit;//20170222 新加
+
+
+    DocDir_CopiesList.LoadFromFile(ImageSavePath+CaseID+'\CaseDocNo_Copies.dat');
+    while DocDirList.Count > 0 do
+    begin
+      iDocDir := DocDirList.Strings[0];
+      DocNo := DocNoDir2DocNo(iDocDir);
+      if Copy(iDocDir,1,5) <> 'ZZZZZ' then   //不為自定文件
+      begin
+        //icopys := 1;
+        icopys := GetDocNoCount(CaseID,DocNo);
+        ipages := GetDocDir_Page(CaseID,iDocDir);
+        iEdit := GetDocNoEdit(CaseID,DocNo,'');
+        for i := DocDirList.Count - 1 downto 1 do
+        begin
+          iDocDir := DocDirList.Strings[i];
+          iDocNo := DocNoDir2DocNo(iDocDir);
+          if iDocNo = DocNo then
+          begin
+            //inc(icopys);
+            ipages := ipages + GetDocDir_Page(CaseID,iDocDir);
+            DocDirList.Delete(i);
+          end;
+        end;
+        if str = '' then
+          Str := Format('%s'+#9+'%d'+#9+'%d'+#9+'%s',[DocNo,iCopys,iPages,iEdit])
+        else
+          Str := Str+#13#10+ Format('%s'+#9+'%d'+#9+'%d'+#9+'%s',[DocNo,iCopys,iPages,iEdit]);
+      end;
+      DocDirList.Delete(0);
+    end;
+
+
+  finally
+  DocDirList.Free;
+  DocDir_CopiesList.Free;
+  FileList.Free;
+  C_DocNoList.Free;
+  end;
+  Result := Str;
+
+  {S := TStringlist.Create;
+  S1 := TStringlist.Create;
+  try
+    S.LoadFromFile(Path+'Context.dat');
+    S1.LoadFromFile(Path+'Context_DocNo.dat');
+    for i := 0 to CaseDocNoList.Count - 1 do
+    begin
+      iDocNo := CaseDocNoList.Strings[i];
+      iCopys := GetDocNo_Count(Path,iDocNo);
+      iPages := GetDocNo_Page(Path,iDocNo);
+      if str = '' then
+        Str := Format('%s,%d,%d',[iDocNo,iCopys,iPages])
+      else
+        Str := Str+';'+ Format('%s,%d,%d',[iDocNo,iCopys,iPages]);
+    end;
+    Result := Str;
+
+  finally
+  S.Free;
+  S1.Free;
+  end; }
+end;
+
+
+{ ==============================================================================
+  方法名稱:CreateCustDocNo_Info
+  引用相依:FileExists, LoadFromFile
+  方法描述:產生案件內自訂文件的彙總資訊字串。方法專門處理代碼開頭為 'ZZZZZ' 的文
+            件目錄,透過 GetCustomDocName 取得使用者定義的文件名稱,並彙整其總份數
+            、總頁數與編輯異動狀態。最終格式與標準文件一致,但首位欄位改為顯示自訂
+            名稱,確保自訂類別的文件也能正確被伺服器識別與儲存。
+============================================================================== }
+Function TCB_IMGPSScanX.CreateCustDocNo_Info(CaseID:String):String; //產生自訂文件 DocName[tab]份數[tab]總頁數[tab]是否異動[#13#10]DocName[tab]份數[tab]總頁數[tab]是否異動
+var
+  i,n : Integer;
+  DocDirList,FileList : TStringlist;
+  DocNo,DocName,iDocDir,iDocNo,iEdit:String;
+  icopys,ipages : integer;
+  S,S1 : TStringlist;
+  Str : String;
+begin
+  DocDirList := TStringlist.Create;
+  FileList := TStringlist.Create;
+  try
+    Str := '';
+    if Not FileExists(ImageSavePath+CaseID+'\CaseDocNo.dat') then Exit;
+    DocDirList.LoadFromFile(ImageSavePath+CaseID+'\CaseDocNo.dat');
+//ShowMessage(DocDirList.Text);
+    while DocDirList.Count > 0 do
+    begin
+      iDocDir := DocDirList.Strings[0];
+      DocNo := DocNoDir2DocNo(iDocDir);
+      if Copy(iDocDir,1,5) = 'ZZZZZ' then   //是自定文件
+      begin
+        //icopys := 1;
+        DocName := GetCustomDocName(ImageSavePath+CaseID+'\',DocNo);
+        icopys := GetDocNoCount(CaseID,DocNo);
+        ipages := GetDocDir_Page(CaseID,iDocDir);
+        iEdit := GetDocNoEdit(CaseID,DocNo,DocName);
+        for i := DocDirList.Count - 1 downto 1 do
+        begin
+          iDocDir := DocDirList.Strings[i];
+          iDocNo := DocNoDir2DocNo(iDocDir);
+          if iDocNo = DocNo then
+          begin
+            //inc(icopys);
+            ipages := ipages + GetDocDir_Page(CaseID,iDocDir);
+            DocDirList.Delete(i);
+          end;
+        end;
+        DocName := GetCustomDocName(ImageSavePath+CaseID+'\',DocNo);
+        if str = '' then
+          Str := Format('%s'+#9+'%d'+#9+'%d'+#9+'%s',[DocName,iCopys,iPages,iEdit])
+        else
+          Str := Str+#13#10+ Format('%s'+#9+'%d'+#9+'%d'+#9+'%s',[DocName,iCopys,iPages,iEdit]);
+      end;
+      DocDirList.Delete(0);
+    end;
+  finally
+  DocDirList.Free;
+  FileList.Free;
+  end;
+  Result := Str;
+end;
+
+
+{ ==============================================================================
+  方法名稱:CreateDocnoFrom_Info
+  引用相依:FileExists, LoadFromFile
+  方法描述:產生被引進的保管袋文件詳細資訊字串。程序遍歷案件的文件目錄,排除自定義
+            文件後,取得各文件的份數、總頁數、異動狀態及來源案件編號(UseCase)。若同
+            一文件來自多個目錄,則會累加數據,最後產出以 Tab 分隔的文件資訊清單。
+============================================================================== }
+Function TCB_IMGPSScanX.CreateDocnoFrom_Info(CaseID:String):String; //產生被引進的保管袋文件資訊  Docno[tab]份數[tab]案件編號#13#10Docno[tab]份數[tab]案件編號
+var
+  i,n : Integer;
+  DocDirList,DocDir_CopiesList,FileList : TStringlist;
+  DocNo,iDocDir,iDocNo,iEdit:String;
+  FromCaseID : string;
+  icopys,ipages : integer;
+  S,S1 : TStringlist;
+  Str : String;
+begin
+  DocDirList := TStringlist.Create;
+  DocDir_CopiesList := TStringlist.Create;
+  FileList := TStringlist.Create;
+  try
+    Str := '';
+    if Not FileExists(ImageSavePath+CaseID+'\CaseDocNo.dat') then Exit;
+    DocDirList.LoadFromFile(ImageSavePath+CaseID+'\CaseDocNo.dat');
+
+    if DocDirList.Count=0 then exit;//20170222 新加
+
+
+    DocDir_CopiesList.LoadFromFile(ImageSavePath+CaseID+'\CaseDocNo_Copies.dat');
+    while DocDirList.Count > 0 do
+    begin
+      iDocDir := DocDirList.Strings[0];
+      DocNo := DocNoDir2DocNo(iDocDir);
+      if (Copy(iDocDir,1,5) <> 'ZZZZZ') then   //不為自定文件
+      begin
+        //icopys := 1;
+        //icopys := GetDocNoCount(CaseID,DocNo);
+        icopys := GetDocDirCopies(CaseID,iDocDir);
+        ipages := GetDocDir_Page(CaseID,iDocDir);
+        iEdit := GetDocNoEdit(CaseID,DocNo,'');
+        FromCaseID := GetUseCase('F',ImageSavePath+CaseID+'\',iDocDir);
+        if FromCaseID <> '' then
+        begin
+          for i := DocDirList.Count - 1 downto 1 do
+          begin
+            iDocDir := DocDirList.Strings[i];
+            iDocNo := DocNoDir2DocNo(iDocDir);
+            if (iDocNo = DocNo) and (GetUseCase('F',ImageSavePath+CaseID+'\',iDocDir)<>'') then
+            begin
+              FromCaseID := GetUseCase('F',ImageSavePath+CaseID+'\',iDocDir);
+              //inc(icopys);
+              icopys := icopys + GetDocDirCopies(CaseID,iDocDir);
+              ipages := ipages + GetDocDir_Page(CaseID,iDocDir);
+              DocDirList.Delete(i);
+            end;
+          end;
+          if str = '' then
+            Str := Format('%s'+#9+'%d'+#9+'%s',[DocNo,iCopys,FromCaseID])
+          else
+            Str := Str+#13#10+ Format('%s'+#9+'%d'+#9+'%s',[DocNo,iCopys,FromCaseID]);
+        end;
+      end;
+      DocDirList.Delete(0);
+    end;
+  finally
+  DocDirList.Free;
+  DocDir_CopiesList.Free;
+  FileList.Free;
+  end;
+  Result := Str;
+end;
+
+
+{ ==============================================================================
+  方法名稱:CreateCustDocNoFrom_Info
+  引用相依:FileExists, LoadFromFile
+  方法描述:產出自定義文件的引進資訊字串。專門處理前綴為 "ZZZZZ" 的目錄,提取自定
+            義文件名稱、份數及來源案件。與保管袋文件類似,會執行重複合併並統計總頁
+            數,最後產出格式化的資訊字串。
+============================================================================== }
+Function TCB_IMGPSScanX.CreateCustDocNoFrom_Info(CaseID:String):String; //產生被引進的自定文件資訊  Docno[tab]份數[tab]案件編號#13#10Docno[tab]份數[tab]案件編號
+var
+  i,n : Integer;
+  DocDirList,FileList : TStringlist;
+  DocNo,DocName,iDocDir,iDocNo,iEdit:String;
+  FromCaseID : string;
+  icopys,ipages : integer;
+  S,S1 : TStringlist;
+  Str : String;
+begin
+  DocDirList := TStringlist.Create;
+  FileList := TStringlist.Create;
+  try
+    Str := '';
+    if Not FileExists(ImageSavePath+CaseID+'\CaseDocNo.dat') then Exit;
+    DocDirList.LoadFromFile(ImageSavePath+CaseID+'\CaseDocNo.dat');
+    while DocDirList.Count > 0 do
+    begin
+      iDocDir := DocDirList.Strings[0];
+      DocNo := DocNoDir2DocNo(iDocDir);
+      if Copy(iDocDir,1,5) = 'ZZZZZ' then   //是自定文件
+      begin
+        //icopys := 1;
+        //icopys := GetDocNoCount(CaseID,DocNo);
+        icopys := GetDocDirCopies(CaseID,iDocDir);
+        ipages := GetDocDir_Page(CaseID,iDocDir);
+        iEdit := GetDocNoEdit(CaseID,DocNo,DocName);
+        FromCaseID := GetUseCase('F',ImageSavePath+CaseID+'\',iDocDir);
+        if FromCaseID <> '' then
+        begin
+          for i := DocDirList.Count - 1 downto 1 do
+          begin
+            iDocDir := DocDirList.Strings[i];
+            iDocNo := DocNoDir2DocNo(iDocDir);
+            if (iDocNo = DocNo) and (GetUseCase('F',ImageSavePath+CaseID+'\',iDocDir)<>'') then
+            begin
+              FromCaseID := GetUseCase('F',DisplayPath,iDocDir);
+              //inc(icopys);
+              ipages := ipages + GetDocDir_Page(CaseID,iDocDir);
+              DocDirList.Delete(i);
+            end;
+          end;
+          DocName := GetCustomDocName(ImageSavePath+CaseID+'\',DocNo);
+          if str = '' then
+            Str := Format('%s'+#9+'%d'+#9+'%s',[DocName,iCopys,FromCaseID])
+          else
+            Str := Str+#13#10+ Format('%s'+#9+'%d'+#9+'%s',[DocName,iCopys,FromCaseID]);
+        end;
+      end;
+      DocDirList.Delete(0);
+    end;
+  finally
+  DocDirList.Free;
+  FileList.Free;
+  end;
+  Result := Str;
+end;
+
+
+{ ==============================================================================
+  方法名稱:CreateAttach_Info
+  引用相依:
+  方法描述:判斷案件是否存在附加電子檔。透過檢查附加檔案目錄的總頁數是否大於 0,回
+            傳 "Y" 或 "N"。
+============================================================================== }
+Function TCB_IMGPSScanX.CreateAttach_Info(CaseID:String):String; //產生是否有Attach Y:有 N:沒有
+begin
+  Result := 'N';
+  if GetDocDir_Page(CaseID,AttName) > 0 Then
+    Result := 'Y';
+end;
+
+

--
Gitblit v1.8.0