function TCB_IMGPSScanX.Get_HelpFile: WideString;
|
begin
|
Result := WideString(HelpFile);
|
end;
|
|
procedure TCB_IMGPSScanX.Set_HelpFile(const Value: WideString);
|
begin
|
HelpFile := string(Value);
|
end;
|
|
function TCB_IMGPSScanX.DocNoIsExistImg(DocNopath:String):boolean;
|
var
|
i:integer;
|
ST:TStringList;
|
begin
|
Result:=False;
|
ST:=TStringList.Create;
|
if FileExists(DocNopath+'\Context.dat') then /////20190319 Hong 當有空的Docno目錄時會掛掉,增加這行
|
ST.loadFromfile(DocNopath+'\Context.dat');
|
for I := 0 to ST.Count - 1 do
|
begin
|
if ISExistImg(DocNopath+ST.Strings[i]) then
|
begin
|
|
Result:=False;
|
Exit;
|
Break;
|
end;
|
end;
|
Result:=True;
|
|
|
end;
|
|
procedure TCB_IMGPSScanX.HTTPSClientCertificateValidate(Sender: TObject;
|
X509Certificate: TElX509Certificate; var Validate: Boolean);
|
begin
|
Validate := True;
|
end;
|
|
procedure TCB_IMGPSScanX.HTTPSClientRedirection(Sender: TObject;
|
const OldURL: string; var NewURL: string; var AllowRedirection: Boolean);
|
begin
|
AllowRedirection := True;
|
end;
|
|
Function TCB_IMGPSScanX.GetServerDate : Boolean;
|
begin
|
Result := False; // http://192.168.0.101:8080/fbnp/servlet/CWC01?act=getservertime
|
If not ProcessServlet_Get(HTTPSClient,FURL+'service/imgpsc/IMGPSC01/servertimeforocx','',FReWrite,Memo1,False) Then
|
begin
|
HttpErrStr := _Msg('錯誤代碼:')+inttostr(HttpError.HttpErrorCode)+','+HttpError.HttpReason;
|
Result := False;
|
Exit;
|
end;
|
IF memo1.Lines.Strings[0] = '1' Then
|
begin
|
HttpErrStr := _Msg('錯誤原因:')+memo1.Lines.Strings[1];
|
Result := False;
|
Exit;
|
end
|
Else IF memo1.Lines.Strings[0] = '0' Then
|
begin
|
ServerDate := memo1.Lines.Strings[1];
|
ServerTime := Copy(ServerDate,9,6);
|
ServerDate := Copy(ServerDate,1,8);
|
Balance := GetBalance(ServerTime); //Server 跟Local的時間差
|
Result := True;
|
end
|
Else if Pos('<script type="text/javascript" src="scripts/CW00/login.js"></script>',Memo1.Lines.Text) > 0 then
|
begin
|
HttpErrStr := _Msg('錯誤原因:')+_Msg('閒置過久或被登出,請重新登入');
|
Result := False;
|
Exit;
|
end;
|
|
end;
|
|
Function TCB_IMGPSScanX.GetSetInf1 : Boolean; //取系統設定資訊Mode1 DOC_INF
|
Var
|
ColumeStr : String;
|
S : TStringlist;
|
EnCodeDateTime : String;
|
begin
|
//SELECT %s FROM DOC_INF WHERE WORK_NO = '%s' ORDER BY DOC_TYPE, DOC_NO, DOC_VERSION"
|
|
Result := False; // http://192.168.0.101:8080/fbnp/servlet/CWC01?act=getservertime
|
EnCodeDateTime := En_DecryptionStr_Base64('E',ServerDate+GetBalance2Time(Balance),Mpskey);
|
|
ColumeStr := 'WORK_NO,DOC_NO,DOC_U_DESC,DOC_TYPE,DOC_VERSION,FORM_PAGES,START_DATE,STOP_DATE,IS_DOC_DIV,IS_IN_WH';
|
//If not ProcessServlet(HTTPSClient,FURL+'servlet/CWC02 ','checktime='+EnCodeDateTime+'&mode=1&col='+Doc_Inf_Colume+'&workno='+FWork_No,FReWrite.Text,Memo1) Then
|
|
If not ProcessServlet_Get(HTTPSClient,FURL+'service/imgpsc/IMGPSC01/tables','checktime='+EnCodeDateTime+'&mode=1&col='+En_DecryptionStr_Base64('E',ColumeStr,Mpskey)+'&work_no='+FWork_No,FReWrite,Memo1,False) Then
|
begin
|
HttpErrStr := _Msg('錯誤代碼:')+inttostr(HttpError.HttpErrorCode)+','+HttpError.HttpReason;
|
Result := False;
|
Exit;
|
end;
|
|
IF memo1.Lines.Strings[0] = '1' Then
|
begin
|
HttpErrStr := _Msg('錯誤原因:')+memo1.Lines.Strings[1];
|
Result := False;
|
Exit;
|
end
|
Else IF memo1.Lines.Strings[0] = '0' Then
|
begin
|
S := TStringlist.Create;
|
S.Text := Memo1.Lines.Text;
|
SetSQLData(ColumeStr,S,Doc_Inf_List);
|
S.Free;
|
Result := True;
|
end
|
Else if Pos('<script type="text/javascript" src="scripts/CW00/login.js"></script>',Memo1.Lines.Text) > 0 then
|
begin
|
HttpErrStr := _Msg('錯誤原因:')+_Msg('閒置過久或被登出,請重新登入');
|
Result := False;
|
Exit;
|
end;
|
end;
|
|
Function TCB_IMGPSScanX.GetSetInf2 : Boolean; //取系統設定資訊Mode2 DM_FORM_INF
|
var
|
ColumeStr : String;
|
S : TStringlist;
|
EnCodeDateTime : String;
|
begin
|
//SELECT %s FROM DM_FORM_INF
|
Result := False; // http://192.168.0.101:8080/fbnp/servlet/CWC01?act=getservertime
|
EnCodeDateTime := En_DecryptionStr_Base64('E',ServerDate+GetBalance2Time(Balance),Mpskey);
|
ColumeStr := 'WORK_NO,MAIN_FORM_ID,DOC_VERSION,DEPE_FORM_ID,MUTEX_FORM_ID';
|
//If not ProcessServlet(HTTPSClient,FURL+'servlet/CWC02 ','checktime='+EnCodeDateTime+'&mode=2&col='+ColumeStr+'&workno='+FWork_No,FReWrite.Text,Memo1) Then
|
If not ProcessServlet_Get(HTTPSClient,FURL+'service/imgpsc/IMGPSC01/tables','checktime='+EnCodeDateTime+'&mode=2&col='+En_DecryptionStr_Base64('E',ColumeStr,Mpskey)+'&work_no='+FWork_No,FReWrite,Memo1,False) Then
|
begin
|
HttpErrStr := _Msg('錯誤代碼:')+inttostr(HttpError.HttpErrorCode)+','+HttpError.HttpReason;
|
Result := False;
|
Exit;
|
end;
|
IF memo1.Lines.Strings[0] = '1' Then
|
begin
|
HttpErrStr := _Msg('錯誤原因:')+memo1.Lines.Strings[1];
|
Result := False;
|
Exit;
|
end
|
Else IF memo1.Lines.Strings[0] = '0' Then
|
begin
|
S := TStringlist.Create;
|
S.Text := Memo1.Lines.Text;
|
SetSQLData(ColumeStr,S,DM_FORM_INF_List);
|
S.Free;
|
Result := True;
|
end
|
Else if Pos('<script type="text/javascript" src="scripts/CW00/login.js"></script>',Memo1.Lines.Text) > 0 then
|
begin
|
HttpErrStr := _Msg('錯誤原因:')+_Msg('閒置過久或被登出,請重新登入');
|
Result := False;
|
Exit;
|
end;
|
end;
|
|
Function TCB_IMGPSScanX.GetSetInf3 : Boolean; //取系統設定資訊mode3 FORM_INF
|
var
|
ColumeStr : String;
|
S : TStringlist;
|
EnCodeDateTime : String;
|
begin
|
//SELECT distinct %s FROM FORM_INF T1 LEFT JOIN DOC_INF T2 ON T2.DOC_NO = T1.DOC_NO AND T1.DOC_VERSION = T2.DOC_VERSION AND T1.WORK_NO = T2.WORK_NO WHERE T2.IS_USE = 'Y' AND T2.WORK_NO = %s
|
Result := False; // http://192.168.0.101:8080/fbnp/servlet/CWC01?act=getservertime
|
EnCodeDateTime := En_DecryptionStr_Base64('E',ServerDate+GetBalance2Time(Balance),Mpskey);
|
//ColumeStr := 'T1.WORK_NO,T1.FORM_ID,T1.DOC_KIND,T1.DOC_NO,T1.DOC_VERSION,T1.FORM_NAME,T1.FORM_DESC,T1.DIVISION,T1.ANCHOR,T1.MAX_PAGE,T1.FORM_HEIGHT,T1.FORM_WIDTH,T1.MERGE_IMAGE,T1.CC_FORM_ID,T1.CC_MERGE_FORMID,T2.DOC_TYPE'; {T1.CC_FORM_ID,T1.CC_MERGE_FORMID,}
|
ColumeStr := 'T1.WORK_NO,T1.FORM_ID,T1.DOC_NO,T1.DOC_VERSION,T1.FORM_NAME,T1.FORM_DESC,T1.DIVISION,T1.ANCHOR,T1.MAX_PAGE,T1.FORM_HEIGHT,T1.FORM_WIDTH,T1.IS_PRINT,T2.DOC_TYPE'; {T1.CC_FORM_ID,T1.CC_MERGE_FORMID,}
|
//If not ProcessServlet(HTTPSClient,FURL+'servlet/CWC02 ','checktime='+EnCodeDateTime+'&mode=3&col='+ColumeStr+'&workno='+FWork_No,FReWrite.Text,Memo1) Then
|
If not ProcessServlet_Get(HTTPSClient,FURL+'service/imgpsc/IMGPSC01/tables','checktime='+EnCodeDateTime+'&mode=3&col='+En_DecryptionStr_Base64('E',ColumeStr,Mpskey)+'&work_no='+FWork_No,FReWrite,Memo1,False) Then
|
begin
|
HttpErrStr := _Msg('錯誤代碼:')+inttostr(HttpError.HttpErrorCode)+','+HttpError.HttpReason;
|
Result := False;
|
Exit;
|
end;
|
IF memo1.Lines.Strings[0] = '1' Then
|
begin
|
HttpErrStr := _Msg('錯誤原因:')+memo1.Lines.Strings[1];
|
Result := False;
|
Exit;
|
end
|
Else IF memo1.Lines.Strings[0] = '0' Then
|
begin
|
S := TStringlist.Create;
|
S.Text := Memo1.Lines.Text;
|
SetSQLData(ColumeStr,S,FORM_INF_List);
|
S.Free;
|
Result := True;
|
end
|
Else if Pos('<script type="text/javascript" src="scripts/CW00/login.js"></script>',Memo1.Lines.Text) > 0 then
|
begin
|
HttpErrStr := _Msg('錯誤原因:')+_Msg('閒置過久或被登出,請重新登入');
|
Result := False;
|
Exit;
|
end;
|
end;
|
|
Function TCB_IMGPSScanX.GetSetInf4 : Boolean; //取系統設定資訊mode4 CHECK_RULE_INF
|
var
|
ColumeStr : String;
|
S : TStringlist;
|
EnCodeDateTime : String;
|
begin
|
//SELECT %s FROM CHECK_RULE_INF WHERE CHECK_TYPE = 'S'
|
|
Result := False; // http://192.168.0.101:8080/fbnp/servlet/CWC01?act=getservertime
|
EnCodeDateTime := En_DecryptionStr_Base64('E',ServerDate+GetBalance2Time(Balance),Mpskey);
|
ColumeStr := 'WORK_NO,CHECK_NO,CHECK_RULE_DESC,MESG_SHOW_TYPE,MESG_DISP_TYPE,CHECK_MESG,SCAN_MODE';
|
//If not ProcessServlet(HTTPSClient,FURL+'servlet/CWC02 ','checktime='+EnCodeDateTime+'&mode=4&col='+ColumeStr+'&workno='+FWork_No,FReWrite.Text,Memo1) Then
|
If not ProcessServlet_Get(HTTPSClient,FURL+'service/imgpsc/IMGPSC01/tables','checktime='+EnCodeDateTime+'&mode=4&col='+En_DecryptionStr_Base64('E',ColumeStr,Mpskey)+'&work_no='+FWork_No,FReWrite,Memo1,False) Then
|
begin
|
HttpErrStr := _Msg('錯誤代碼:')+inttostr(HttpError.HttpErrorCode)+','+HttpError.HttpReason;
|
Result := False;
|
Exit;
|
end;
|
IF memo1.Lines.Strings[0] = '1' Then
|
begin
|
HttpErrStr := _Msg('錯誤原因:')+memo1.Lines.Strings[1];
|
Result := False;
|
Exit;
|
end
|
Else IF memo1.Lines.Strings[0] = '0' Then
|
begin
|
S := TStringlist.Create;
|
S.Text := Memo1.Lines.Text;
|
SetSQLData(ColumeStr,S,CHECK_RULE_INF_List);
|
S.Free;
|
Result := True;
|
end
|
Else if Pos('<script type="text/javascript" src="scripts/CW00/login.js"></script>',Memo1.Lines.Text) > 0 then
|
begin
|
HttpErrStr := _Msg('錯誤原因:')+_Msg('閒置過久或被登出,請重新登入');
|
Result := False;
|
Exit;
|
end;
|
CheckRule2OMRErrInfo;
|
end;
|
|
Function TCB_IMGPSScanX.GetSetInf5 : Boolean; //取系統設定資訊mode5 MEMO_INF
|
var
|
ColumeStr : String;
|
S : TStringlist;
|
EnCodeDateTime : String;
|
begin
|
//SELECT %s FROM MEMO_INF T1 LEFT JOIN MEMO_TYPE_INF T2 ON T2.MEMO_TYPE_NO = T1.MEMO_TYPE WHERE T1.MEMO_SOURCE = '01'
|
Result := False; // http://192.168.0.101:8080/fbnp/servlet/CWC01?act=getservertime
|
EnCodeDateTime := En_DecryptionStr_Base64('E',ServerDate+GetBalance2Time(Balance),Mpskey);
|
ColumeStr := 'T1.WORK_NO,T1.MEMO_TYPE,T1.MEMO_CONTENT,T2.MEMO_TYPE_NAME';
|
//If not ProcessServlet(HTTPSClient,FURL+'servlet/CWC02 ','checktime='+EnCodeDateTime+'&mode=5&col='+ColumeStr+'&workno='+FWork_No,FReWrite.Text,Memo1) Then
|
If not ProcessServlet_Get(HTTPSClient,FURL+'service/imgpsc/IMGPSC01/tables','checktime='+EnCodeDateTime+'&mode=5&col='+En_DecryptionStr_Base64('E',ColumeStr,Mpskey)+'&work_no='+FWork_No,FReWrite,Memo1,False) Then
|
begin
|
HttpErrStr := _Msg('錯誤代碼:')+inttostr(HttpError.HttpErrorCode)+','+HttpError.HttpReason;
|
Result := False;
|
Exit;
|
end;
|
IF memo1.Lines.Strings[0] = '1' Then
|
begin
|
HttpErrStr := _Msg('錯誤原因:')+memo1.Lines.Strings[1];
|
Result := False;
|
Exit;
|
end
|
Else IF memo1.Lines.Strings[0] = '0' Then
|
begin
|
S := TStringlist.Create;
|
S.Text := Memo1.Lines.Text;
|
SetSQLData(ColumeStr,S,MEMO_INF_List);
|
S.Free;
|
Result := True;
|
end
|
Else if Pos('<script type="text/javascript" src="scripts/CW00/login.js"></script>',Memo1.Lines.Text) > 0 then
|
begin
|
HttpErrStr := _Msg('錯誤原因:')+_Msg('閒置過久或被登出,請重新登入');
|
Result := False;
|
Exit;
|
end;
|
end;
|
|
Function TCB_IMGPSScanX.GetSetInf6 : Boolean; //取系統設定資訊mode5 WORK_INF
|
var
|
ColumeStr : String;
|
S : TStringlist;
|
EnCodeDateTime : String;
|
begin
|
//SELECT %s FROM WORK_INF
|
|
Result := False; // http://192.168.0.101:8080/fbnp/servlet/CWC01?act=getservertime
|
EnCodeDateTime := En_DecryptionStr_Base64('E',ServerDate+GetBalance2Time(Balance),Mpskey);
|
ColumeStr := 'WORK_NO,PARA_NO,PARA_CONTENT';
|
//If not ProcessServlet(HTTPSClient,FURL+'servlet/CWC02 ','checktime='+EnCodeDateTime+'&mode=5&col='+ColumeStr+'&workno='+FWork_No,FReWrite.Text,Memo1) Then
|
If not ProcessServlet_Get(HTTPSClient,FURL+'service/imgpsc/IMGPSC01/tables','checktime='+EnCodeDateTime+'&mode=6&col='+En_DecryptionStr_Base64('E',ColumeStr,Mpskey)+'&work_no='+FWork_No,FReWrite,Memo1,False) Then
|
begin
|
HttpErrStr := _Msg('錯誤代碼:')+inttostr(HttpError.HttpErrorCode)+','+HttpError.HttpReason;
|
Result := False;
|
Exit;
|
end;
|
IF memo1.Lines.Strings[0] = '1' Then
|
begin
|
HttpErrStr := _Msg('錯誤原因:')+memo1.Lines.Strings[1];
|
Result := False;
|
Exit;
|
end
|
Else IF memo1.Lines.Strings[0] = '0' Then
|
begin
|
S := TStringlist.Create;
|
S.Text := Memo1.Lines.Text;
|
SetSQLData(ColumeStr,S,WORK_INF_List);
|
S.Free;
|
Result := True;
|
end
|
Else if Pos('<script type="text/javascript" src="scripts/CW00/login.js"></script>',Memo1.Lines.Text) > 0 then
|
begin
|
HttpErrStr := _Msg('錯誤原因:')+_Msg('閒置過久或被登出,請重新登入');
|
Result := False;
|
Exit;
|
end;
|
end;
|
|
Function TCB_IMGPSScanX.GetSetInf7 : Boolean; //取系統設定資訊mode5 LASTEST_FORM_INF
|
var
|
ColumeStr : String;
|
S : TStringlist;
|
EnCodeDateTime : String;
|
begin
|
//SELECT FORM_ID,DOC_NO,DOC_VERSION FROM FORM_INF WHERE (DOC_NO,DOC_VERSION) in (SELECT DOC_NO, MAX(DOC_VERSION) FROM FORM_INF GROUP BY DOC_NO) ORDER BY DOC_NO
|
|
Result := False; // http://192.168.0.101:8080/fbnp/servlet/CWC01?act=getservertime
|
EnCodeDateTime := En_DecryptionStr_Base64('E',ServerDate+GetBalance2Time(Balance),Mpskey);
|
ColumeStr := 'FORM_ID,DOC_NO';
|
//If not ProcessServlet(HTTPSClient,FURL+'servlet/CWC02 ','checktime='+EnCodeDateTime+'&mode=5&col='+ColumeStr+'&workno='+FWork_No,FReWrite.Text,Memo1) Then
|
If not ProcessServlet_Get(HTTPSClient,FURL+'service/imgpsc/IMGPSC01/tables','checktime='+EnCodeDateTime+'&mode=7&col='+En_DecryptionStr_Base64('E',ColumeStr,Mpskey)+'&work_no='+FWork_No,FReWrite,Memo1,False) Then
|
begin
|
HttpErrStr := _Msg('錯誤代碼:')+inttostr(HttpError.HttpErrorCode)+','+HttpError.HttpReason;
|
Result := False;
|
Exit;
|
end;
|
IF memo1.Lines.Strings[0] = '1' Then
|
begin
|
HttpErrStr := _Msg('錯誤原因:')+memo1.Lines.Strings[1];
|
Result := False;
|
Exit;
|
end
|
Else IF memo1.Lines.Strings[0] = '0' Then
|
begin
|
S := TStringlist.Create;
|
S.Text := Memo1.Lines.Text;
|
SetSQLData(ColumeStr,S,LASTEST_FORM_INF_List);
|
S.Free;
|
Result := True;
|
end
|
Else if Pos('<script type="text/javascript" src="scripts/CW00/login.js"></script>',Memo1.Lines.Text) > 0 then
|
begin
|
HttpErrStr := _Msg('錯誤原因:')+_Msg('閒置過久或被登出,請重新登入');
|
Result := False;
|
Exit;
|
end;
|
end;
|
|
Procedure TCB_IMGPSScanX.SetIn_WH_DocNo; //將要入庫的DocNo抽出來另存入list裡
|
var
|
i : Integer;
|
begin
|
for i := 1 to Doc_Inf_List.Count - 1 do
|
begin
|
|
if GetSQLData(Doc_Inf_List,'IS_IN_WH',i) = 'Y' then
|
IN_WH_DocNoList.Add(GetSQLData(Doc_Inf_List,'DOC_NO',i));
|
end;
|
{Showmessage(IN_WH_DocNoList.Text);
|
StringtoFile(IN_WH_DocNoList.Text,'D:\121.txt');}
|
end;
|
|
Function TCB_IMGPSScanX.DeleteDocNoFile(Path,DocNo:String):Boolean; //刪除指定DocNo文件
|
var
|
i: Integer;
|
FName : String;
|
begin
|
Result := False;
|
for i := ContextList.Count - 1 downto 0 do
|
begin
|
FName := ContextList.Strings[i];
|
If DocNo = FormCode2DocNo(FileName2FormCode(FName)) then
|
begin
|
DeleteFile(Path+FName);
|
ContextList.Delete(i);
|
Context_DocnoList.Delete(i);
|
Result := True; //有刪到指定文件
|
end;
|
end;
|
ContextList.SaveToFile(Path+'Context.dat');
|
Context_DocnoList.SaveToFile(Path+'Context_DocNo.dat');
|
ReSortFileName(Path);
|
ContextList.LoadFromFile(Path+'Context.dat');
|
Context_DocnoList.LoadFromFile(Path+'Context_DocNo.dat');
|
if FileExists(Path+'CustomDocNo.dat') then
|
Cust_DocNoList.LoadFromFile(Path+'CustomDocNo.dat');
|
end;
|
|
Procedure TCB_IMGPSScanX.DeleteShowFile(Path:String); //刪除顯示中的影像
|
var
|
i : Integer;
|
DelFile : String;
|
begin
|
for i := 0 to NowShowFileList.Count - 1 do
|
begin
|
DelFile := NowShowFileList.Strings[i];
|
DeleteFile(Path+DelFile);
|
SetContextList('D',-1,NowCaseno,NowDocNo,DelFile);
|
end;
|
|
end;
|
|
Function TCB_IMGPSScanX.GetDataDocNoPage(MainDocNo,MainVersion:String):Integer; //取記錄的文件_版本頁數
|
var
|
P : String;
|
begin
|
Result := 0;
|
If FindSQLData(Doc_Inf_List,'FORM_PAGES','DOC_NO,DOC_VERSION',MainDocNo+','+MainVersion,0,FindResult) Then
|
begin
|
P := GetFindResult('FORM_PAGES');
|
if P <> '' then
|
Result := strtoint(P)
|
else
|
Result := 0;
|
end;
|
end;
|
|
Function TCB_IMGPSScanX.CheckCaseDocNoPage(CaseID,DocNo,Version:String;Pages:Integer):Integer; //取案件裡的文件_版本頁數
|
var
|
i,n,Count : integer;
|
S, S2 : TStringlist;
|
FormCode,iPage : String;
|
docInt,tempInt:integer;
|
v,v2:integer;
|
begin
|
Count := 0;
|
docInt:=0;
|
tempInt:=0;
|
S := TStringlist.Create;
|
S2 := TStringlist.Create;
|
//ShowMessage('page='+IntToStr(Pages));
|
try
|
S.LoadFromFile(ImageSavePath+CaseID+'\upload\Context.dat');
|
S2.LoadFromFile(ImageSavePath+CaseID+'\upload\DocDir.dat'); //2017 1220 改成只承認第一份的
|
|
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
|
if (FWH_category='N') and (FIs_In_Wh='Y') then
|
begin
|
if ISExistImg(ImageSavePath+CaseID+'\upload\'+S.Strings[n]) then
|
begin
|
Continue;
|
end;
|
end;
|
|
if (Length(S2.Strings[n])>8) and (Pos(DocNo,S2.Strings[n])<>0) then //2017 1220 改成只承認第一份的
|
begin
|
//LogFile1.LogToFile(logTimeString+'有進'+docno+','+S2.Strings[n]+IntToStr(Pos(DocNo,S2.Strings[n])));
|
v:=Pos('(',S2.Strings[n]);
|
v2:=Pos(')',S2.Strings[n]);
|
tempInt:=StrToInt(Copy(S2.Strings[n],v+1,v2-v-1));
|
|
if docInt=0 then
|
begin
|
docInt:=tempInt;
|
end;
|
if docInt<>tempInt then
|
begin
|
//LogFile1.LogToFile(logTimeString+'docInt='+IntToStr(docInt)+',tempInt='+IntToStr(tempInt));
|
Result := Count;
|
Break;
|
end;
|
end;
|
|
FormCode := FileName2FormCode(S.Strings[n]);
|
//LogFile1.LogToFile(logTimeString+'S.Strings[n]='+S.Strings[n]);
|
//Showmessage('1:'+version+','+FormCode2Version(FormCode)+','+DocNo+','+FormCode2DocNo(FormCode)+','+iPage+','+FormCode2Page(FormCode));
|
//LogFile1.LogToFile(logTimeString+'FormCode='+FormCode);
|
LogFile1.LogToFile(logTimeString+'CheckCaseDocNoPage caseno='+CaseID+','+version+','+FormCode2Version(FormCode)+','+DocNo+','+FormCode2DocNo(FormCode)+','+iPage+','+FormCode2Page(FormCode));
|
//ShowMessage(DocNo+','+IntToStr(docInt)+','+IntToStr(tempInt));
|
//LogFile1.LogToFile(logTimeString+'FormCode='+FormCode);
|
if (version = FormCode2Version(FormCode)) and (DocNo = FormCode2DocNo(FormCode)) and (ipage = FormCode2Page(FormCode)) then
|
begin
|
LogFile1.LogToFile(logTimeString+'CheckCaseDocNoPage caseno='+CaseID+','+version+','+FormCode2Version(FormCode)+','+DocNo+','+FormCode2DocNo(FormCode)+','+iPage+','+FormCode2Page(FormCode));
|
//Showmessage(version+','+DocNo+',iPage='+iPage);
|
//Showmessage(inttostr(Count+1));
|
Inc(Count);
|
Break; //找到了...離開
|
end;
|
end;
|
end;
|
finally
|
S.Free;
|
S2.free;
|
end;
|
Result := Count;
|
end;
|
|
Function TCB_IMGPSScanX.TransCaseID(Path,CaseID:String;MainCase:Boolean):Boolean; //傳送案件
|
Var
|
i,n,v: Integer;
|
ZipFileList : TStringlist;
|
UpFormID:String;
|
pages : Integer;
|
TransName : String;
|
MaskPath : String;
|
HaveMask : Boolean;
|
S : String;
|
SendData:String;
|
Doc_Data,Doc_Data1 : String;
|
In_Doc1,In_Doc2 : String;
|
AttachYN : String; //是否有附件 Y:有 N:沒有
|
|
ST1,ST2,ST3:TStringList;
|
str1,str2:String;
|
must_formidStr :string;
|
last_add_formidstr :string;
|
ScanListStr:String;
|
casepath:String;
|
filesizeInt:integer;
|
case_page:string;
|
Fname:String;
|
FileRec:TSearchrec;
|
begin
|
Result := True;
|
TransName := CaseID;
|
MaskPath := Path+'MaskImg\';
|
if fileExists(Path+'Context.dat') then
|
begin
|
ContextList.LoadFromFile(Path+'Context.dat');
|
Context_DocnoList.LoadFromFile(Path+'Context_DocNo.dat');
|
end;
|
|
if FileExists(Path+'CustomDocNo.dat') then
|
Cust_DocNoList.LoadFromFile(Path+'CustomDocNo.dat');
|
|
Pages := ContextList.Count;
|
case_page:=IntToStr(pages);
|
if (FMode = 'NSCAN') or (FMode = 'ESCAN') or (FMode = 'ASCAN') or (FMode = 'DSCAN') or (FMode = 'SSCAN') or (FMode = 'MSCAN') or (FMode = 'RI_SCAN') or (FMode = 'RSCAN') then
|
begin
|
//Showmessage('1');
|
UpformID := GetCaseFormID(Path);
|
{if UpformID = '' then //20131213 yuu說不管主form
|
begin
|
Showmessage(_msg('取不到主FormID!!'));
|
Result := False;
|
DataLoading(False,False);
|
Exit;
|
end;}
|
end;
|
|
CaseResort2Scanlist(Path); //檔名照設定排序產生scanlist.dat
|
//CaseResort(Path); //檔名照設定排序
|
CreateFormID_FormName(Path,CaseID); //產生FormID_FormName.dat
|
CreateDocNo_DocName(Path,CaseID); //產生DocNo_Name.dat
|
Doc_Data := CreateDocNo_Info(CaseID); //產生保管袋文件 Docno,份數,頁數;Docno,份數,頁數 的回傳字串
|
Doc_Data1 := CreateCustDocNo_Info(CaseID); //產生自定文件 Docname,份數,頁數;Docno,份數,頁數 的回傳字串
|
In_Doc1 := CreateDocnoFrom_Info(CaseID); //產生被引進的保管袋文件資訊 Docno[tab]份數[tab]案件編號#13#10Docno[tab]份數[tab]案件編號
|
In_Doc2 := CreateCustDocNoFrom_Info(CaseID); //產生被引進的自定文件資訊 Docno[tab]份數[tab]案件編號#13#10Docno[tab]份數[tab]案件編號
|
AttachYN := CreateAttach_Info(CaseID); //是否還有附件 Y:有 N:沒有
|
ReadCaseIndex(Path);
|
//LoanDoc := 'Y';
|
//產生遮罩影像
|
// 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);
|
//ShowMessage(LastInitFormidList.Text);
|
ST2:=TStringList.Create;
|
ST3:=TStringlist.Create;
|
|
for I := 0 to ST1.Count - 1 do
|
begin
|
if (Pos('_',St1.Strings[i])<>1) and (Pos('_',St1.Strings[i])<>-1) then
|
begin
|
str1:=Copy(ST1.Strings[i],1,Pos('_',St1.Strings[i])-1);
|
ST2.Add(str1);
|
must_formidStr:= must_formidStr+str1+'@#,';
|
end;
|
end;
|
must_formidStr:=Copy(must_formidStr,1,Length(must_formidStr)-3) ;
|
//ShowMessage('must_formidStr='+must_formidStr);
|
//ShowMessage('AST2='+ST2.Text);
|
|
|
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;
|
//ShowMessage('BST2='+ST2.Text);
|
for I := 0 to ST2.Count - 1 do
|
begin
|
last_add_formidstr:=last_add_formidstr+ST2.Strings[i]+'@#,';
|
end;
|
last_add_formidstr:=Copy(last_add_formidstr,1,Length(last_add_formidstr)-3) ;
|
|
ST3.LoadFromFile(path+'scanlist.dat');
|
for I := 0 to ST3.Count - 1 do
|
begin
|
if ScanListStr = '' then
|
ScanListStr := FileName2FormCode(ST3.Strings[i])
|
else
|
ScanListStr := Format('%s,%s',[ScanListStr,FileName2FormCode(ST3.Strings[i])]);
|
end;
|
|
ST1.Free;
|
ST2.Free;
|
ST3.Free;
|
//ShowMessage('last_add_formidstr='+last_add_formidstr);
|
///////必要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
|
ZipMaskFile(Path,MaskPath,Path,'MaskImg.zip'); //有遮罩設定的才產生
|
/////壓檔////
|
///檢查上傳的zip大小////
|
FName :=Path+ 'Img.zip';
|
|
FindFirst(FName, faAnyfile, FileRec);
|
|
//FMaxUploadSize
|
//ShowMessage(IntToStr(FileRec.Size));
|
//Result:=False;
|
//exit; //目前上傳檔案大小為xxMB,已超過50MB,無法上傳 %.3f ,[FileRec.Size / 1048576]
|
If FileRec.Size > StrtoInt(FMaxUploadSize) * 1048576 Then // 檢查檔案大小
|
Begin
|
ShowMessage(Format(_Msg('%s目前上傳檔案大小為%.3fMB,已超過%sMB,無法上傳'),[caseid,FileRec.Size / 1048576,FMaxUploadSize]));
|
//ShowMessage(Format('%s目前上傳檔案大小為%.3fMB,已超過'+FMaxUploadSize+'MB,無法上傳',[caseid,FileRec.Size / 1048576]) );
|
FindClose(FileRec);
|
Result := False;
|
Exit;
|
End;
|
FindClose(FileRec);
|
///檢查上傳的zip大小////
|
//ShowMessage('last_add_formidstr='+last_add_formidstr);
|
if not GetftpInfo(CaseID,'upload') then //取案件上傳方式
|
begin
|
//Showmessage(_Msg()Inttostr(HttpError.HttpErrorCode)+' '+HttpError.HttpReason+'.');
|
DownFileErrStr := _Msg('取案件上傳資訊失敗!!')+HttpErrStr;
|
Result := False;
|
Exit;
|
end;
|
SendData:='data='+HTTPEncode(UTF8Encode(FData))
|
+'&verify='+FVerify
|
+'&form_id='+UpformID
|
+'&loan_doc='+Case_loandoc
|
+'&case_no='+TransName
|
+'&doc_data='+HTTPEncode(UTF8Encode(Doc_Data))
|
+'&doc_data1='+HTTPEncode(UTF8Encode(Doc_Data1))
|
+'&attach='+AttachYN
|
+'&case_page='+case_page
|
+'&file_size='+IntToStr(filesizeInt)
|
+'&must_formid='+must_formidStr //擁有的 formid
|
+'&last_add_formid='+last_add_formidstr //當次新加的 formid
|
+'&form_code='+ScanListStr //scanlist.dat 表單代號
|
+'&ftp_image_path='+FFtpExtraPath //加傳FTP目錄 HTTP上傳時會是空白
|
+'&in_doc1='+HTTPEncode(UTF8Encode(In_Doc1))
|
+'&in_doc2='+HTTPEncode(UTF8Encode(In_Doc2));
|
|
case TransMode of
|
tsHttp :
|
begin
|
////上傳/////
|
ShowText := CaseID+_Msg('資料上傳中(Http),請稍候');
|
DataLoading(True,True);
|
if not upFile(HTTPSClient,FUrl,'service/imgpsc/IMGPSC02/caseupload',SendData,'file',Path+'Img.zip',FReWrite,Memo1,False) then
|
begin
|
Showmessage(Inttostr(HttpError.HttpErrorCode)+' '+HttpError.HttpReason+'.');
|
Result := False;
|
Exit;
|
end;
|
if memo1.Lines.Strings[0] = '1' then
|
begin
|
Showmessage(Format(_Msg('')+_Msg(''),[CaseID])+memo1.Lines.Strings[1]+'。');
|
Result := False;
|
Exit;
|
end
|
Else if Pos('<script type="text/javascript" src="scripts/IMGPS00/login.js"></script>',Memo1.Lines.Text) > 0 then
|
begin
|
Showmessage(Format(_Msg('')+_Msg('')+_Msg('閒置過久或被登出,請重新登入'),[CaseID]));
|
Result := False;
|
Exit;
|
end;
|
////上傳////
|
end;
|
tsFtp :
|
begin
|
ShowText := CaseID+_Msg('資料上傳中(Ftp),請稍候');
|
DataLoading(True,True);
|
SetFtpInfo;
|
try
|
if not IIS_Ftp.FtpsConnect then
|
begin
|
Showmessage(Format('無法連上Ftp主機,錯誤原因:%s',[FtpErrReason]));
|
Result := False;
|
Exit;
|
end;
|
if not IIS_Ftp.FtpsToMain(FFtpExtraPath,CaseID+'.zip',Path+'Img.zip',display1) then
|
begin
|
Showmessage(Format(_msg('上傳案件(%s)時,發生錯誤,錯誤原因:%s'),[CaseID,FtpErrStr]));
|
Result := False;
|
Exit;
|
end;
|
|
if not FtpCaseComplete(SendData) then //Ftp上傳後通知完成
|
begin
|
Showmessage(Format(_Msg('通知案件(%s)Ftp上傳完成時,發生錯誤!!'),[CaseID])+HttpErrStr);
|
Result := False;
|
Exit;
|
end;
|
finally
|
IIS_Ftp.FtpsClose;
|
end;
|
end;
|
|
end;
|
|
|
if FMode = 'ESCAN' then //上傳舊件引入檔案 //20140616 原本先搬舊件再搬新件,改為先搬新件再搬舊件
|
begin
|
if not TransOldCaseFile(ImageSavePath+CaseID+'\') then
|
begin
|
Result := False;
|
Exit;
|
end;
|
end;
|
// 呼叫Server完成 /////
|
{If not CaseComplete(Path,CaseID,MainCase) Then
|
begin
|
Showmessage(_Msg('通知案件傳送完成時,網路發生錯誤!!')+HttpErrStr);
|
DataLoading(False,False);
|
Result := False;
|
Exit;
|
end; }
|
/// 呼叫Server完成////
|
|
////刪檔////
|
//_DelTree(Path); //會只刪TransPath
|
//ShowMessage('STOP');
|
_DelTree(ImageSavePath+CaseID);
|
SetCaseList('D',-1,CaseID);
|
////刪檔////
|
end;
|
|
Function TCB_IMGPSScanX.GetNoNameCase(Path:String):String; //取未配號XXXX
|
var
|
i : Integer;
|
begin
|
for i := 1 to 9999 do
|
begin
|
if Not DirectoryExists(Path+_Msg('未配號')+Add_Zoo(i,4)) then
|
begin
|
Result := _Msg('未配號')+Add_Zoo(i,4);
|
Break;
|
end;
|
end;
|
end;
|
|
Procedure TCB_IMGPSScanX.CaseResort(Path:String); //案件的檔案重新排序(次文件依Docno排)
|
var
|
i,n,v,v1 : Integer;
|
S,S1 : TStringlist;
|
FormID,OldName,NewName,DocNo,Doc_Type:String;
|
x : Integer;
|
begin
|
S := TStringlist.Create;
|
S1 := TStringlist.Create;
|
try
|
S.LoadFromFile(Path+'Context.dat');
|
X := 0;
|
{for I := 1 to FORM_INF_List.Count - 1 do //在FormID有設定的 //主文件 照SQL排 20101028改
|
begin
|
FormID := GetSQLData(FORM_INF_List,'T1.FORM_ID',i);
|
if FormCode2FileName(FormID,S) = '' then
|
Continue;
|
Doc_Type := GetSQLData(FORM_INF_List,'T2.DOC_TYPE',i);
|
for n := 0 to S.Count - 1 do
|
begin
|
if (S.Strings[n][1] <> '*') and (FileName2FormCode(S.Strings[n]) = FormID) and (Doc_Type='1') then
|
begin
|
Inc(X);
|
OldName := S.Strings[n];
|
//NewName := Add_Zoo(S.Count+x,3)+Copy(OldName,4,length(OldName)-3); //從原有數量加1開始編
|
NewName := Add_Zoo(S.Count+x,3)+FileName2NoQuene_Filename(OldName); //從原有數量加1開始編
|
S.Strings[n] := '*'+S.Strings[n];
|
S1.Add(OldName+','+NewName);
|
end;
|
end;
|
end;}
|
|
{for I := 0 to FORM_INF_List.Count - 1 do //次文件 照FormID 1~8碼+掃瞄順序排 20110512為了某個文件要先打的原因要求改
|
begin
|
for n := 0 to S.Count - 1 do
|
begin
|
FormID := GetSQLData(FORM_INF_List,'T1.FORM_ID',i);
|
Doc_Type := GetSQLData(FORM_INF_List,'T2.DOC_TYPE',i);
|
if (S.Strings[n][1] <> '*') and (Copy(FileName2FormCode(S.Strings[n]),1,8) = Copy(FormID,1,8)) and (Doc_Type='2') then
|
begin
|
Inc(X);
|
OldName := S.Strings[n];
|
NewName := Add_Zoo(S.Count+x,3)+Copy(OldName,4,length(OldName)-3); //從原有數量加1開始編
|
S.Strings[n] := '*'+S.Strings[n];
|
S1.Add(OldName+','+NewName);
|
end;
|
end;
|
end;}
|
for I := 0 to Doc_Inf_List.Count - 1 do //主文件 照文件代碼+掃瞄順序排 20101101改 20110512晚上又說改回來
|
begin
|
DocNo := GetSQLData(Doc_Inf_List,'DOC_NO',i);
|
if DocNo2FileName(DocNo,S) = '' then
|
Continue;
|
Doc_Type := GetSQLData(Doc_Inf_List,'DOC_TYPE',i);
|
for n := 0 to S.Count - 1 do
|
begin
|
if (S.Strings[n][1] <> '*') and (FormCode2DocNo(FileName2FormCode(S.Strings[n])) = DocNo) and (Doc_Type='1') then
|
begin
|
Inc(X);
|
OldName := S.Strings[n];
|
//NewName := Add_Zoo(S.Count+x,3)+Copy(OldName,4,length(OldName)-3); //從原有數量加1開始編
|
NewName := Add_Zoo(S.Count+x,3)+FileName2NoQuene_Filename(OldName); //從原有數量加1開始編
|
S.Strings[n] := '*'+S.Strings[n];
|
S1.Add(OldName+','+NewName);
|
end;
|
end;
|
end;
|
|
|
for I := 0 to Doc_Inf_List.Count - 1 do //次文件 照文件代碼+掃瞄順序排 20101101改 20110512晚上又說改回來
|
begin
|
DocNo := GetSQLData(Doc_Inf_List,'DOC_NO',i);
|
if DocNo2FileName(DocNo,S) = '' then
|
Continue;
|
Doc_Type := GetSQLData(Doc_Inf_List,'DOC_TYPE',i);
|
for n := 0 to S.Count - 1 do
|
begin
|
if (S.Strings[n][1] <> '*') and (FormCode2DocNo(FileName2FormCode(S.Strings[n])) = DocNo) and (Doc_Type='2') then
|
begin
|
Inc(X);
|
OldName := S.Strings[n];
|
//NewName := Add_Zoo(S.Count+x,3)+Copy(OldName,4,length(OldName)-3); //從原有數量加1開始編
|
NewName := Add_Zoo(S.Count+x,3)+FileName2NoQuene_Filename(OldName); //從原有數量加1開始編
|
S.Strings[n] := '*'+S.Strings[n];
|
S1.Add(OldName+','+NewName);
|
end;
|
end;
|
end;
|
|
{for n := 0 to S.Count - 1 do //次文件 照掃瞄順序排 20101028改
|
begin
|
FormID := GetSQLData(FORM_INF_List,'T1.FORM_ID',i);
|
Doc_Type := GetSQLData(FORM_INF_List,'T2.DOC_TYPE',i);
|
for i := 0 to FORM_INF_List.Count - 1 do
|
begin
|
if (S.Strings[n][1] <> '*') and (FileName2FormCode(S.Strings[n]) = FormID) and (Doc_Type='2') then
|
begin
|
Inc(X);
|
OldName := S.Strings[n];
|
NewName := Add_Zoo(S.Count+x,3)+Copy(OldName,4,length(OldName)-3); //從原有數量加1開始編
|
S.Strings[n] := '*'+S.Strings[n];
|
S1.Add(OldName+','+NewName);
|
end;
|
end;
|
end;}
|
for i := 0 to S.Count - 1 do //FormID沒設定的或附件
|
begin
|
if S.Strings[i][1] <> '*' then
|
begin
|
Inc(X);
|
OldName := S.Strings[i];
|
//NewName := Add_Zoo(S.Count+x,3)+Copy(OldName,4,length(OldName)-3);
|
NewName := Add_Zoo(S.Count+x,3)+FileName2NoQuene_Filename(OldName);
|
S.Strings[i] := '*'+S.Strings[i];
|
S1.Add(OldName+','+NewName);
|
end;
|
end;
|
S.Clear;
|
for i := 0 to S1.Count - 1 do //開始轉換檔名
|
begin
|
v := Pos(',',S1.Strings[i]);
|
v1 := length(S1.Strings[i]);
|
OldName := copy(S1.Strings[i],1,v-1);
|
NewName := copy(S1.Strings[i],v+1,v1-v);
|
if FileExists(Path+OldName) then
|
begin
|
ReNameFile(Path+OldName,Path+NewName);
|
S.Add(NewName);
|
S.SaveToFile(Path+'Context.dat');
|
end;
|
end;
|
ReSortFileName(Path);
|
finally
|
S.Free;
|
S1.Free;
|
end;
|
end;
|
|
Procedure TCB_IMGPSScanX.DistinctDocinCase(Path:String); //列出案件裡的Docno_版本
|
var
|
i,n,v : Integer;
|
S : TStringlist;
|
FormCode,DocNo,Ver : String;
|
Doc_Ver : String;
|
Exists : Boolean;
|
begin
|
S := TSTringlist.Create;
|
try
|
DocNo_VerinCase.Clear;
|
S.LoadFromFile(Path+'Context.dat');
|
for I := 0 to S.Count - 1 do
|
begin
|
if FWH_category='N' then
|
begin
|
if (ISExistImg(Path+S.Strings[i])) or (reSizeExistImgList.IndexOf(LoadFileGetMD5(Path+S.Strings[i]))<>-1) then
|
begin
|
Continue;
|
end;
|
end;
|
FormCode := FileName2FormCode(S.Strings[i]);
|
DocNo := FormCode2DocNo(FormCode);
|
Ver := FormCode2Version(FormCode);
|
if (Docno <> '') and (Ver <> '') then
|
begin
|
Doc_Ver := DocNo+'_'+Ver;
|
Exists := False;
|
for n := 0 to DocNo_VerinCase.Count-1 do
|
begin
|
if Doc_Ver = DocNo_VerinCase.Strings[n] then
|
begin
|
Exists := True;
|
Break;
|
end;
|
end;
|
if not Exists then
|
DocNo_VerinCase.Add(Doc_Ver);
|
end;
|
end;
|
finally
|
S.Free;
|
end;
|
end;
|
|
Procedure TCB_IMGPSScanX.DistinctDocNoinCase(Path:String); //列出案件裡的Docno
|
var
|
i,n,v : Integer;
|
S : TStringlist;
|
FormCode,DocNo,Ver : String;
|
Exists : Boolean;
|
begin
|
S := TSTringlist.Create;
|
try
|
CaseDocNoList.Clear;
|
S.LoadFromFile(Path+'Context.dat');
|
for I := 0 to S.Count - 1 do
|
begin
|
FormCode := FileName2FormCode(S.Strings[i]);
|
DocNo := FormCode2DocNo(FormCode);
|
if (Docno <> '') then
|
begin
|
Exists := False;
|
for n := 0 to CaseDocNoList.Count-1 do
|
begin
|
if DocNo = CaseDocNoList.Strings[n] then
|
begin
|
Exists := True;
|
Break;
|
end;
|
end;
|
if not Exists then
|
CaseDocNoList.Add(DocNo);
|
end;
|
end;
|
finally
|
S.Free;
|
end;
|
|
end;
|
|
Procedure TCB_IMGPSScanX.SetCaseList(Mode:Char;Index:Integer;text:String); //'A:加入,I:插入,D:刪除,E:修改'
|
var
|
i : Integer;
|
begin
|
CaseList.Clear;
|
if FileExists(ImageSavePath + 'CaseList.dat') then
|
CaseList.LoadFromFile(ImageSavePath + 'CaseList.dat');
|
case Mode of
|
'A':begin
|
CaseList.Add(Text);
|
end;
|
'I':begin
|
CaseList.Insert(Index,Text);
|
end;
|
'E':begin
|
CaseList.Strings[Index] := Text;
|
end;
|
'D':begin
|
if Index <> -1 then
|
CaseList.Delete(Index)
|
Else if (text <> '') then
|
begin
|
for i := 0 to CaseList.Count - 1 do
|
begin
|
if Text = CaseList.Strings[i] then
|
begin
|
CaseList.Delete(i);
|
Break;
|
end;
|
end;
|
end;
|
if CaseList.Count = 0 then
|
DeleteFile(ImageSavePath + 'CaseList.dat');
|
end;
|
end;
|
if CaseList.Count > 0 then
|
CaseList.SaveToFile(ImageSavePath+'CaseList.dat');
|
end;
|
|
Procedure TCB_IMGPSScanX.SetDocNoList(Mode:Char;Index:Integer;CaseNo,DocDir,Copies:String); //'A:加入,I:插入,D:刪除,E:修改'
|
var
|
i : Integer;
|
CaseDocNoList : TStringlist;
|
CaseDocNo_copiesList : TStringlist;
|
begin
|
CaseDocNoList := TStringlist.Create;
|
CaseDocNo_CopiesList := TStringlist.Create;
|
try
|
CaseDocNoList.Clear;
|
if FileExists(ImageSavePath+CaseNo+'\CaseDocNo.dat') then
|
CaseDocNoList.LoadFromFile(ImageSavePath+CaseNo+'\CaseDocNo.dat');
|
if FileExists(ImageSavePath+CaseNo+'\CaseDocNo_Copies.dat') then
|
CaseDocNo_CopiesList.LoadFromFile(ImageSavePath+CaseNo+'\CaseDocNo_Copies.dat');
|
case Mode of
|
'A':begin
|
CaseDocNoList.Add(DocDir);
|
CaseDocNo_CopiesList.Add(Copies);
|
SetRecordEditedDocDir('A',CaseNo,DocDir);
|
end;
|
'I':begin
|
CaseDocNoList.Insert(Index,DocDir);
|
CaseDocNo_CopiesList.Insert(Index,Copies);
|
end;
|
'E':begin
|
CaseDocNoList.Strings[Index] := DocDir;
|
CaseDocNo_CopiesList.Strings[Index] := Copies;
|
end;
|
'D':begin
|
if Index <> -1 then
|
begin
|
//SetRecordEditedDocDir('D',CaseNo,CaseDocNoList.Strings[Index]); //20140624 修改刪除文件時也記一筆異動,刪掉會無法通知前端網頁有異動
|
SetRecordEditedDocDir('A',CaseNo,CaseDocNoList.Strings[Index]); //20170912 要刪除 不然我寫不下去
|
|
CaseDocNoList.Delete(Index);
|
CaseDocNo_CopiesList.Delete(Index);
|
|
end
|
Else if (DocDir <> '') then
|
begin
|
for i := 0 to CaseDocNoList.Count - 1 do
|
begin
|
if DocDir = CaseDocNoList.Strings[i] then
|
begin
|
//SetRecordEditedDocDir('D',CaseNo,CaseDocNoList.Strings[i]); //20140624 修改刪除文件時也記一筆異動,刪掉會無法通知前端網頁有異動
|
SetRecordEditedDocDir('A',CaseNo,CaseDocNoList.Strings[i]); //20170912 要刪除 不然我寫不下去
|
CaseDocNoList.Delete(i);
|
CaseDocNo_CopiesList.Delete(i);
|
Break;
|
end;
|
end;
|
end;
|
if ContextList.Count = 0 then
|
begin
|
DeleteFile(ImageSavePath+CaseNo+'\CaseDocNo.dat');
|
end;
|
end;
|
end;
|
//Showmessage('abc'+#13+ImageSavePath+CaseNo+'\CaseDocNo.dat'+#13+inttostr(CaseDocNoList.Count)+#13+CaseDocNoList.Text);
|
if CaseDocNoList.Count >= 0 then
|
begin
|
CaseDocNoList.SaveToFile(ImageSavePath+CaseNo+'\CaseDocNo.dat');
|
CaseDocNo_CopiesList.SaveToFile(ImageSavePath+CaseNo+'\CaseDocNo_Copies.dat');
|
//Showmessage('存了');
|
end;
|
finally
|
CaseDocNoList.Free;
|
CaseDocNo_CopiesList.Free;
|
end;
|
end;
|
|
Function TCB_IMGPSScanX.checkCaseOMRDone:Boolean; //檢查案件是否完成OMR檢核
|
var
|
i : Integer;
|
begin
|
Result := True;
|
for I := 0 to NewTreeNode.Count - 1 do
|
begin
|
if NewTreeNode.Item[i].ImageIndex <> 7 then
|
begin
|
Result := False;
|
Break;
|
end;
|
end;
|
end;
|
|
Function TCB_IMGPSScanX.CheckCaseID_OK:Boolean; //檢查是否有未配號的案件
|
var
|
i,n : Integer;
|
begin
|
Result := True;
|
for i := 0 to NewTreeNode.Count - 1 do
|
begin
|
if Pos(_msg('未配號'),NewTreeNode.Item[i].Text) > 0 then
|
begin
|
Result := False;
|
Break;
|
end;
|
end;
|
end;
|
|
Function TCB_IMGPSScanX.CheckCaseAttach_OK:Boolean; //檢查是否有未歸類的案件
|
var
|
i,j : Integer;
|
begin
|
Result := True;
|
for i := 0 to NewTreeNode.Count - 1 do
|
begin
|
for j := 0 to NewTreeNode.Item[i].Count - 1 do
|
begin
|
if Pos(_msg('未歸類'),NewTreeNode.Item[i].Item[j].Text) > 0 then
|
begin
|
Result := False;
|
Break;
|
end;
|
end;
|
end;
|
end;
|
|
Procedure TCB_IMGPSScanX.CreateEmptyCase(Path,CaseID:String); //產生空白案號(重掃件用)
|
var
|
S : TStringlist;
|
begin
|
S := TStringlist.Create;
|
try
|
S.SaveToFile(Path+CaseID+'\Context.dat');
|
S.Add(FCaseID);
|
S.SaveToFile(Path+'CaseList.dat')
|
finally
|
S.Free;
|
end;
|
end;
|
|
Procedure TCB_IMGPSScanX.ShowFileReplace(Path,NewFormID:String);//顯示的影像換成新的FormID
|
var
|
i,n : Integer;
|
OldFile,NewFile:String;
|
Ext : String;
|
begin
|
for i := 0 to NowShowFileList.Count - 1 do
|
begin
|
OldFile := NowShowFileList.Strings[i];
|
Ext := ExtractFileExt(OldFile);
|
NewFile := Add_Zoo(FileName2ScanPage(OldFile),3)+'_'+NewFormID+Ext;
|
ReNameFile(Path+OldFile,Path+NewFile);
|
SetContextList('E',FileName2Index(OldFile),NowCaseno,NowDocNo,NewFile);
|
end;
|
end;
|
|
Function TCB_IMGPSScanX.GetCasePage(Path,CaseID:String):Integer;
|
var
|
DocDirList,FileList,ST1 :TStringlist;
|
iDocDir,iDocNo : String;
|
i,n,Count : Integer;
|
begin
|
Count := 0;
|
DocDirList := TStringlist.Create;
|
FileList := TStringlist.Create;
|
ST1:=TStringList.Create;
|
try
|
if FileExists(Path+CaseID+'\CaseDocNo.dat') then
|
DocDirList.LoadFromFile(Path+CaseID+'\CaseDocNo.dat');
|
//Showmessage(DocDirList.Text);
|
for i := 0 to DocDirList.Count - 1 do
|
begin
|
iDocDir := DocDirList.Strings[i];
|
iDocno := DocNoDir2DocNo(iDocDir);
|
{if (((FIs_In_Wh = 'Y') and (not DocNoIs_In_WH(iDocNo))) or //入庫掃描不看非入庫文件
|
((FIs_In_Wh = 'N') and (DocNoIs_In_WH(iDocNo)))) and
|
((iDocNo <> 'Attach') and (Copy(iDocNo,1,5)<>'ZZZZZ')) then //非入庫掃描不看入庫文件
|
begin
|
Continue;
|
end;}
|
//if not DocNoAppear(iDocNo) then Continue; //20170817 先註解
|
|
FileList.Clear;
|
if FileExists(Path+CaseID+'\'+iDocDir+'\Context.dat') then
|
begin
|
FileList.LoadFromFile(Path+CaseID+'\'+iDocDir+'\Context.dat');
|
|
if (FWH_category='N') and (FIs_In_Wh='Y') then
|
begin
|
ST1.Clear;
|
for n := 0 to FileList.Count - 1 do
|
begin
|
if ISExistImg(Path+CaseID+'\'+iDocDir+'\'+FileList.Strings[n]) then
|
begin
|
ST1.Add(FileList.Strings[n]);
|
end;
|
end;
|
|
for n := 0 to ST1.Count - 1 do
|
begin
|
if (FileList.IndexOf(ST1.Strings[n])<>-1) and (not DocNoIs_In_WH(iDocNo)) then
|
begin
|
FileList.Delete(FileList.IndexOf(ST1.Strings[n]));
|
end;
|
end;
|
end
|
Else
|
if not DocNoAppear(iDocNo) then Continue; //20180925 Hong覺得應該要加這段
|
end;
|
|
|
Count := Count+ FileList.Count;
|
end;
|
if FileExists(Path+CaseID+'\'+AttName+'\Context.dat') then
|
begin
|
FileList.LoadFromFile(Path+CaseID+'\'+AttName+'\Context.dat');
|
Count := Count+ FileList.Count;
|
end;
|
|
Result := Count;
|
finally
|
DocDirList.Free;
|
FileList.Free;
|
ST1.free;
|
end;
|
end;
|
|
Procedure TCB_IMGPSScanX.SetFile2Case(CaseID,FileName:String);
|
var
|
S :TStringlist;
|
begin
|
S := TStringlist.Create;
|
try
|
S.LoadFromFile(ImageSavePath+CaseID+'\Context.dat');
|
S.Add(FileName);
|
S.SaveToFile(ImageSavePath+CaseID+'\Context.dat');
|
finally
|
S.Free;
|
end;
|
end;
|
|
Function TCB_IMGPSScanX.GetCase_PageCount(var CaseCount,PageCount:Integer):Boolean; //取出案件的數量及頁數
|
var
|
i,n,k: Integer;
|
CaseList,DocList,FileList,ST1 : TStringlist;
|
begin
|
Result := False;
|
CaseCount := 0;
|
PageCount := 0;
|
CaseList := TStringlist.Create;
|
DocList := TStringlist.Create;
|
FileList := TStringlist.Create;
|
ST1:= TStringlist.Create;
|
try
|
ImageSavePath := ImagePath;
|
CaseList.Clear;
|
if FileExists(ImageSavePath + 'CaseList.dat') then
|
CaseList.LoadFromFile(ImageSavePath + 'CaseList.dat');
|
CaseCount := CaseCount+CaseList.Count;
|
//ShowMessage('ImageSavePath='+ImageSavePath+#10#13+'CaseList.Count='+IntToStr(CaseList.Count));
|
for i := 0 to CaseList.Count - 1 do
|
begin
|
DocList.Clear;
|
If FileExists(ImageSavePath+CaseList.Strings[i]+'\CaseDocNo.dat') Then
|
DocList.LoadFromFile(ImageSavePath+CaseList.Strings[i]+'\CaseDocNo.dat');
|
//ShowMessage('DocList='+DocList.Text);
|
for n := 0 to DocList.Count - 1 do
|
begin
|
//ShowMessage(DocList.Strings[n]+','+BoolToStr(DocNoAppear(DocNoDir2DocNo(DocList.Strings[n])),true));
|
if not DocNoAppear(DocNoDir2DocNo(DocList.Strings[n])) then Continue;
|
FileList.Clear;
|
If FileExists(ImageSavePath+CaseList.Strings[i]+'\'+DocList.Strings[n]+'\Context.dat') Then
|
FileList.LoadFromFile(ImageSavePath+CaseList.Strings[i]+'\'+DocList.Strings[n]+'\Context.dat');
|
PageCount := PageCount+FileList.Count;
|
end;
|
//Showmessage(inttostr(PageCount));
|
FileList.Clear;
|
If FileExists(ImageSavePath+CaseList.Strings[i]+'\'+Attname+'\Context.dat') Then
|
FileList.LoadFromFile(ImageSavePath+CaseList.Strings[i]+'\'+Attname+'\Context.dat');
|
//Showmessage(ImageSavePath+CaseList.Strings[i]+'\'+Attname+'\Context.dat');
|
//Showmessage('FileList='+FileList.Text);
|
PageCount := PageCount+FileList.Count;
|
//Showmessage('PageCount='+inttostr(PageCount));
|
if (FWH_category='N') and (FIs_In_Wh='Y') then //20170912 針對非入庫並當次掃描做頁數計算
|
begin
|
if FileExists(ImageSavePath+NowCaseno+'\EditedDocDir.dat') then
|
begin
|
ST1.LoadFromFile(ImageSavePath+NowCaseno+'\EditedDocDir.dat');
|
for n := 0 to ST1.Count - 1 do
|
begin
|
if ST1.Strings[n]=AttName then Continue;
|
//ShowMessage(ST1.Strings[n]+','+BoolToStr(DocNoIs_In_WH(DocNoDir2DocNo(ST1.Strings[n])),true));
|
if not DocNoIs_In_WH(DocNoDir2DocNo(ST1.Strings[n])) then
|
begin
|
|
FileList.Clear;
|
if FileExists(ImageSavePath+CaseList.Strings[i]+'\'+ST1.Strings[n]+'\Context.dat') then
|
begin
|
FileList.LoadFromFile(ImageSavePath+CaseList.Strings[i]+'\'+ST1.Strings[n]+'\Context.dat');
|
for k := 0 to FileList.Count - 1 do
|
begin
|
if not ISExistImg(ImageSavePath+CaseList.Strings[i]+'\'+ST1.Strings[n]+'\'+FileList.Strings[k]) then
|
PageCount := PageCount+1;
|
end;
|
end;
|
end;
|
end;
|
end;
|
end;
|
end;
|
Finally
|
CaseList.Free;
|
DocList.Free;
|
FileList.Free;
|
ST1.Free
|
end;
|
Result := True;
|
end;
|
|
Function TCB_IMGPSScanX.BarCode2CaseID : String; //Barcode依規則轉成CaseID
|
var
|
i : Integer;
|
iCaseID : String;
|
begin
|
Result := ''; //沒找到
|
iCaseID := '';
|
for i := 1 to MpsBarcodeinf.Count do //20180920 拿掉-1
|
begin
|
if (Length(MpsBarcodeinf.text[i]) = CaseIDLength) then
|
begin
|
iCaseID := MpsBarcodeinf.text[i];
|
Result := iCaseID;
|
Break;
|
end;
|
end;
|
end;
|
|
Procedure TCB_IMGPSScanX.WriteCaseIndex(Path:String);
|
Var
|
S : TStringlist;
|
begin
|
if Path = '' then Exit;
|
S := TStringlist.Create;
|
try
|
try
|
S.Add(Case_loandoc);
|
S.SaveToFile(Path+'CaseIndex.dat');
|
except on E: Exception do
|
end;
|
|
finally
|
S.Free;
|
end;
|
end;
|
|
Procedure TCB_IMGPSScanX.ReadCaseIndex(Path:String);
|
Var
|
S : TStringlist;
|
begin
|
AddCredit1RG.ItemIndex := -1;
|
S := TStringlist.Create;
|
try
|
if FileExists(Path+'CaseIndex.dat') then
|
begin
|
S.LoadFromFile(Path+'CaseIndex.dat');
|
Case_loandoc := S.Strings[0];
|
end;
|
if (Case_loandoc = '') and (FLoanDoc_Value <> '') then
|
begin
|
Case_loandoc := FLoanDoc_Value;
|
WriteCaseIndex(Path);
|
end;
|
if Case_loandoc = 'Y' then
|
AddCredit1RG.ItemIndex := 0
|
Else if Case_loandoc = 'N' then
|
AddCredit1RG.ItemIndex := 1;
|
|
finally
|
S.Free;
|
end;
|
|
end;
|
|
|
procedure TCB_IMGPSScanX.ReduceLogFile; //20171011 必免log檔掌太大
|
var
|
ST1:TStringlist;
|
I:integer;
|
begin
|
ST1:=TStringList.Create;
|
if FileExists(LngPath+'IMGPSCheck.log') then
|
begin
|
ST1.LoadFromFile(LngPath+'IMGPSCheck.log');
|
if ST1.count>100000 then
|
begin
|
for I := 0 to 10000 do
|
begin
|
ST1.Delete(0);
|
end;
|
ST1.SaveToFile(LngPath+'IMGPSCheck.log');
|
end;
|
end;
|
ST1.Free;
|
end;
|
|
Procedure TCB_IMGPSScanX.ClearCaseIndex;
|
begin
|
AddCredit1RG.Enabled := False;
|
AddCredit1RG.ItemIndex := -1;
|
end;
|
|
Function TCB_IMGPSScanX.GetDocNoDir(Path,DocNo:String):String; //取出目前DocNo的份數
|
var
|
i : Integer;
|
iDocNo : String;
|
begin
|
if (DocNo <> '') then
|
begin
|
i := 0;
|
Repeat
|
begin
|
inc(i);
|
iDocNo := Format('%s_%d',[DocNo,i]);
|
end;
|
until not DirectoryExists(Path+iDocNo);
|
Result := iDocNo;
|
end
|
Else
|
begin
|
Result := AttName;
|
end;
|
end;
|
|
Function TCB_IMGPSScanX.DocNo2DocNoDir(Path,DocNo:String):String; //DocNo轉成DocNo(份數)目錄
|
var
|
i : Integer;
|
iDocNo : String;
|
begin
|
if (DocNo <> '') then
|
begin
|
i := 0;
|
Repeat
|
begin
|
inc(i);
|
iDocNo := Format('%s(%d)',[DocNo,i]);
|
end;
|
until not DirectoryExists(Path+iDocNo);
|
Result := iDocNo;
|
end
|
Else
|
begin
|
Result := AttName;
|
end;
|
end;
|
|
Function TCB_IMGPSScanX.DocNoDir2DocNo(DocNoDir:String):String; //DocNo(份數)目錄轉成DocNo
|
var
|
v,ln : Integer;
|
begin
|
if (DocNoDir <> 'Attach') and (DocNoDir <> 'S_Attach') then
|
begin
|
v := Pos('(',DocNoDir);
|
if v > 0 then
|
Result := Copy(DocNoDir,1,v-1)
|
else
|
Result := DocNoDir;
|
end
|
Else
|
Result := DocNoDir
|
end;
|
|
Function TCB_IMGPSScanX.DocNoDir2Index(Path,DocNoDir:String):Integer; //DocNo(份數)目錄轉成index
|
var
|
i : Integer;
|
CaseNo_List : TStringlist;
|
begin
|
Result := -1;
|
CaseNo_List := TStringlist.Create;
|
try
|
CaseNo_List.LoadFromFile(Path+'CaseDocNo.dat');
|
for i := 0 to CaseNo_List.Count - 1 do
|
begin
|
if DocNoDir = CaseNo_List.Strings[i] then
|
begin
|
Result := i;
|
Break;
|
end;
|
end;
|
finally
|
CaseNo_List.Free;
|
end;
|
end;
|
|
Procedure TCB_IMGPSScanX.ZipMainFile(SoPath,DePath,ZipName:String);
|
var
|
ZipFileList : TStringlist;
|
n : Integer;
|
begin
|
ZipFileList := TStringlist.Create;
|
try
|
if fileExists(DePath+ZipName) then
|
DeleteFile(DePath+ZipName);
|
{if FileExists(SoPath+'ReSize.dat') then
|
DeleteFile(SoPath+'ReSize.dat');}
|
//Showmessage(SoPath+#13+ContextList.Text);
|
for n := 0 to ContextList.Count - 1 do
|
begin
|
{WriteResize(SoPath+ContextList.Strings[n],SoPath+'ReSize.dat');}
|
ZipFileList.Add(SoPath+ContextList.Strings[n]);
|
if FileExists(SoPath+'@'+ContextList.Strings[n]) then
|
ZipFileList.Add(SoPath+'@'+ContextList.Strings[n]);
|
end;
|
if FileExists(SoPath+'Context.dat') then
|
ZipFileList.Add(SoPath+'Context.dat');
|
|
AttContextList.Clear;
|
if FileExists(SoPath+'ATTContext.dat') then
|
AttContextList.LoadFromFile(SoPath+'ATTContext.dat');
|
for n := 0 to AttContextList.Count - 1 do
|
begin
|
ZipFileList.Add(SoPath+AttContextList.Strings[n]);
|
end;
|
if FileExists(SoPath+'ATTContext.dat') then
|
ZipFileList.Add(SoPath+'ATTContext.dat');
|
|
|
if FileExists(SoPath+'Context_DocNo.dat') then
|
ZipFileList.Add(SoPath+'Context_DocNo.dat');
|
if FileExists(SoPath+'scanlist.dat') then
|
ZipFileList.Add(SoPath+'scanlist.dat');
|
if FileExists(SoPath+'FormCode_Name.dat') then
|
ZipfileList.Add(SoPath+'FormCode_Name.dat');
|
if FileExists(SoPath+'DocNo_Name.dat') then
|
ZipfileList.Add(SoPath+'DocNo_Name.dat');
|
if FileExists(SoPath+'ReSize.dat') then
|
ZipfileList.Add(SoPath+'ReSize.dat');
|
if FileExists(SoPath+'FormIDReplace.dat') then
|
ZipfileList.Add(SoPath+'FormIDReplace.dat');
|
if FileExists(SoPath+'AnchorError.dat') then
|
ZipfileList.Add(SoPath+'AnchorError.dat');
|
if FileExists(SoPath+'CaseDocNo.dat') then
|
ZipfileList.Add(SoPath+'CaseDocNo.dat');
|
if FileExists(SoPath+'CaseDocNo_Copies.dat') then
|
ZipfileList.Add(SoPath+'CaseDocNo_Copies.dat');
|
if FileExists(SoPath+'CustomDocNo.ini') then
|
ZipfileList.Add(SoPath+'CustomDocNo.ini');
|
if FileExists(SoPath+'DocDir.dat') then
|
ZipfileList.Add(SoPath+'DocDir.dat');
|
if FileExists(SoPath+'In_Wh.dat') then
|
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');
|
finally
|
ZipFileList.Free;
|
end;
|
end;
|
|
Procedure TCB_IMGPSScanX.ZipMaskFile(SoPath,MarkPath,DePath,ZipName:String); //壓縮遮罩影像檔
|
var
|
ZipFileList : TStringlist;
|
n : Integer;
|
begin
|
ZipFileList := TStringlist.Create;
|
try
|
if fileExists(DePath+ZipName) then
|
DeleteFile(DePath+ZipName);
|
|
for n := 0 to ContextList.Count - 1 do
|
begin
|
ZipFileList.Add(MarkPath+ContextList.Strings[n]);
|
end;
|
if FileExists(SoPath+'Context.dat') then
|
ZipFileList.Add(SoPath+'Context.dat');
|
if FileExists(SoPath+'scanlist.dat') then
|
ZipFileList.Add(SoPath+'scanlist.dat');
|
if FileExists(SoPath+'FormCode_Name.dat') then
|
ZipfileList.Add(SoPath+'FormCode_Name.dat');
|
if FileExists(SoPath+'DocNo_Name.dat') then
|
ZipfileList.Add(SoPath+'DocNo_Name.dat');
|
if FileExists(SoPath+'ReSize.dat') then
|
ZipfileList.Add(SoPath+'ReSize.dat');
|
if FileExists(SoPath+'Err.jpg') then
|
ZipfileList.Add(SoPath+'Err.jpg');
|
if FileExists(SoPath+'auth.jpg') then
|
ZipfileList.Add(SoPath+'auth.jpg');
|
ExeCuteZip(DePath+ZipName,SoPath,ZipFileList,False,False);
|
finally
|
ZipFileList.Free;
|
end;
|
end;
|
|
Function TCB_IMGPSScanX.MemoInfoTransfer(Mode,Str:String;ID_S,Name_S:TStringlist):String; //註記代碼註記類別轉換 Mode 'ID':代碼轉名稱;'NAME':名稱轉代碼
|
var
|
i : Integer;
|
begin
|
if Mode = 'ID' then
|
begin
|
Result := _Msg('自行輸入');
|
for i := 0 to ID_S.Count - 1 do
|
begin
|
if Str = ID_S.Strings[i] then
|
begin
|
Result := Name_S.Strings[i];
|
Break;
|
end;
|
end;
|
end
|
else if Mode = 'NAME' then
|
begin
|
Result := '00';
|
for i := 0 to Name_S.Count - 1 do
|
begin
|
if Str = Name_S.Strings[i] then
|
begin
|
Result := ID_S.Strings[i];
|
Break;
|
end;
|
end;
|
end;
|
end;
|
|
Procedure TCB_IMGPSScanX.SetSQLData(ColumeStr:String;FromList,ToList:TStringlist); //把SQL值塞入
|
var
|
i : Integer;
|
begin
|
ToList.Clear;
|
ToList.Add(ColumeStr);
|
For i := 1 to FromList.Count -1 do
|
begin
|
ToList.Add(FromList.Strings[i]);
|
end;
|
end;
|
|
Function TCB_IMGPSScanX.GetSQLData(TableList:TStringlist;Colname:String;colNo:Integer):String; //依欄位及索引取值
|
var
|
i,col,v,v1 : Integer;
|
ColStr,DataStr: TStringList;
|
TmpStr : String;
|
P1,p2 : Integer;
|
begin
|
Result := '';
|
ColStr := TStringList.Create;
|
DataStr := TSTringList.Create;
|
ColStr.CommaText := TableList.Strings[0];
|
TmpStr := TableList.Strings[ColNo];
|
//DataStr.Text:=StringReplace(TmpStr,'!@!',#13,[rfReplaceAll]);
|
|
While Length(Tmpstr) > 0 do
|
begin
|
v:= Pos('!@!',TmpStr);
|
v1 := Length(TmpStr);
|
If v > 0 Then
|
begin
|
DataStr.Add(Copy(TmpStr,1,v-1));
|
TmpStr := Copy(TmpStr,v+3,V1-(V-2));
|
end
|
Else
|
begin
|
DataStr.Add(TmpStr);
|
TmpStr := '';
|
end;
|
end;
|
For i := 0 to ColStr.Count-1 do
|
begin
|
IF ColStr.Strings[i] = ColName Then
|
begin
|
Result := '';
|
If (DataStr.Count > 0) and (i<=DataStr.Count-1) Then
|
Result := DataStr.Strings[i];
|
//If (DataStr.Count > 0) and (i<=DataStr.Count-1) Then
|
//begin
|
{if i = 0 then
|
begin
|
P1 := 1;
|
p2 := PosN('!@!',TmpStr,1)-1;
|
end
|
else
|
begin
|
P1 := PosN('!@!',TmpStr,i)+3;
|
p2 := PosN('!@!',TmpStr,i+1)-p1;
|
end;
|
|
|
Result :=Copy(tmpstr,p1,p2);}
|
//end;
|
//Result := DataStr.Strings[i];
|
|
Break;
|
end;
|
end;
|
ColStr.Free;
|
DataStr.Free;
|
end;
|
|
Function TCB_IMGPSScanX.FindSQLData(TableList:TStringlist;ColumeStr,KeyColumeStr,KeyStr:String;ColNo:Integer;Var ResultList:TStringlist):Boolean; //找指定的資料
|
Var i,n,Findindex : Integer;
|
ColList,KeyColList,KeyList : TStringlist;
|
Cols,Keycols,keys :String;
|
Find:Boolean;
|
begin
|
ResultList.Clear;
|
if (KeyStr = '') or (TableList.Count <= 1) then
|
begin
|
Result := False;
|
Exit;
|
end;
|
|
ColList := TStringlist.Create;
|
KeyColList := TStringlist.Create;
|
KeyList := TStringlist.Create;
|
try
|
ColList.CommaText := ColumeStr;
|
KeyColList.CommaText := KeyColumeStr;
|
KeyList.CommaText := KeyStr;
|
if ColNo = 0 then
|
begin
|
for i := 1 to TableList.Count -1 do //找key對不對
|
begin
|
Findindex := i;
|
for n := 0 to KeyColList.Count - 1 do
|
begin
|
Find := True;
|
Keycols := KeyColList.Strings[n];
|
keys := KeyList.Strings[n];
|
//Showmessage(keys);
|
//Showmessage(TableList.Strings[i]);
|
if GetSQLData(TableList,Keycols,i) = keys then //對.繼續
|
//if Pos('!@!'+keys+'!@!','!@!'+TableList.Strings[i]+'!@!') >0 then //在資料列前後加!@! 用pos的方式來改善速度 //20130521發現找資料會有問題
|
Continue
|
Else //不對.離開
|
begin
|
Find := False;
|
Break;
|
end;
|
end;
|
if Find then Break; // 找到了離開
|
end;
|
end
|
Else
|
begin
|
i := ColNo;
|
Findindex := i;
|
for n := 0 to KeyColList.Count - 1 do
|
begin
|
Find := True;
|
Keycols := KeyColList.Strings[n];
|
keys := KeyList.Strings[n];
|
//if GetSQLData(TableList,Keycols,i) = keys then //對.繼續
|
if Pos('!@!'+keys+'!@!','!@!'+TableList.Strings[i]+'!@!') >0 then //在資料列前後加!@! 用pos的方式來改善速度
|
Continue
|
Else //不對.離開
|
begin
|
Find := False;
|
Break;
|
end;
|
end;
|
end;
|
if Find then //有找到key
|
begin
|
for n := 0 to ColList.Count -1 do
|
begin
|
Cols := ColList.Strings[n];
|
ResultList.Add(Cols+','+GetSQLData(TableList,Cols,Findindex));
|
end;
|
end;
|
finally
|
Result := Find;
|
ColList.Free;
|
KeyColList.Free;
|
KeyList.Free;
|
end;
|
end;
|
|
Procedure TCB_IMGPSScanX.DataLoading(Loading:Boolean;UseTimer:Boolean); //資料載入中要停止點選的動作
|
begin
|
If Loading Then
|
begin
|
Screen.Cursor := -11;
|
if UseTimer then
|
begin
|
Panel22.Caption := ShowText;
|
Panel22.Left := (Panel9.Width div 2) - (Panel22.Width div 2);
|
Panel22.Top := (Panel9.Height div 2) - (Panel22.Height div 2);
|
Panel22.Visible := True;
|
Timer2.Enabled := True;
|
end
|
Else
|
begin
|
Panel8.Left := (Panel9.Width div 2) - (Panel8.Width div 2);
|
Panel8.Top := (Panel9.Height div 2) - (Panel8.Height div 2);
|
Panel8.Visible := True;
|
end;
|
Application.ProcessMessages;
|
Panel1.Enabled := False;
|
Panel2.Enabled := False;
|
end
|
Else
|
begin
|
Panel22.Visible := False;
|
Panel8.Visible := False;
|
Timer2.Enabled := False;
|
Panel1.Enabled := True;
|
Panel2.Enabled := True;
|
Screen.Cursor := 0;
|
end;
|
|
end;
|
|
function TCB_IMGPSScanX.LoadFileGetMD5(const filename: string): string;
|
var
|
Stream: TFileStream;
|
//Buffer: array[0..1023] of AnsiChar;
|
Buffer: array[0..1023] of AnsiChar;
|
TempStr: string;
|
i: Integer;
|
idmd5:TIdHashMessageDigest5; //import IdHashMessageDigest, idHash
|
|
begin
|
idmd5 := TIdHashMessageDigest5.Create;
|
|
try
|
Stream := TFileStream.Create(filename, fmOpenRead);
|
Stream.Read(Buffer[0], SizeOf(Buffer));
|
|
result := idmd5.HashStreamAsHex(Stream) ;
|
finally
|
idmd5.Free;
|
Stream.Free;
|
|
end;
|
end;
|
|
procedure TCB_IMGPSScanX.LoadImgFile; //載入新件及替換件
|
Var
|
i,v,v1,m : Integer;
|
CasePage : integer;
|
TempName : String;
|
BarName : String;
|
DocName : String;
|
//S : String;
|
begin
|
ClearView(1);
|
PageLV.Clear;
|
AttListBox.Items.Clear;
|
AddAttFileLB.Enabled := False;
|
DelAttFileLB.Enabled := False;
|
DisplayPath := '';
|
ClearCaseIndex;
|
CaseHelpBtn.Visible := False;
|
//Del_Sub_NothingPath(ImageSavePath); //清掉案件目錄是空的
|
TreeView1.Items.Clear;
|
NewTreeNode := nil;
|
MyTreenode1 := nil;
|
MyTreenode2 := nil;
|
MyTreenode3 := nil;
|
NewTreeNode := TreeView1.Items.Add(nil,Format(_Msg('%s-共%d筆共%d頁'),[FModeName,0,0]));
|
NewTreenode.ImageIndex := 0;
|
NewTreenode.SelectedIndex := 0;
|
Del_Sub_NothingPath(ImageSavePath); //清掉案件目錄是空的
|
GetCase_PageCount(CaseCount,PageCount);
|
CaseList.Clear;
|
if FileExists(ImageSavePath + 'CaseList.dat') then
|
CaseList.LoadFromFile(ImageSavePath + 'CaseList.dat');
|
for i := 0 to CaseList.Count - 1 do
|
begin
|
CaseDocNoList.Clear;
|
if FileExists(ImageSavePath+CaseList.Strings[i]+'\CaseDocNo.dat') then
|
CaseDocNoList.LoadFromFile(ImageSavePath+CaseList.Strings[i]+'\CaseDocNo.dat');
|
if not FileExists(ImageSavePath+CaseList.Strings[i]+'\CaseDocNo_Copies.dat') then
|
begin
|
CaseDocNo_CopiesList.Clear;
|
for m := 0 to CaseDocNoList.Count - 1 do
|
begin
|
CaseDocNo_CopiesList.Add('1');
|
CaseDocNo_CopiesList.SaveToFile(ImageSavePath+CaseList.Strings[i]+'\CaseDocNo_Copies.dat');
|
end;
|
end;
|
|
CasePage := GetCasePage(ImageSavePath,CaseList.Strings[i]);
|
//ShowMessage('CasePage='+IntToStr(CasePage));
|
MytreeNode1 := TreeView1.Items.AddChild(NewTreeNode,Format(_Msg('%s-%d頁'),[CaseList.Strings[i],CasePage]));
|
MytreeNode1.ImageIndex := 1;
|
MytreeNode1.SelectedIndex := 1;
|
DrawDocItem2(MytreeNode1,CaseList.Strings[i]); //長出文件名稱的樹並傳回是否有申請書的影像
|
if Pos(_Msg('未配號'),CaseList.Strings[i]) > 0 then
|
begin
|
MytreeNode1.ImageIndex := 5;
|
MytreeNode1.SelectedIndex := 5;
|
end;
|
If FileExists(ImageSavePath+CaseList.Strings[i]+'\OMRCheckOk.dat') Then
|
begin
|
MytreeNode1.ImageIndex := 7;
|
MytreeNode1.SelectedIndex := 7;
|
CaseHelpBtn.Visible := False;
|
end
|
Else IF FileExists(ImageSavePath+CaseList.Strings[i]+'\Checkerr.ini') Then
|
begin
|
MyTreenode1.ImageIndex := 5;
|
MyTreenode1.SelectedIndex := 5;
|
|
//AllEnforceLb.Visible := True; //全部強迫送件
|
end;
|
end;
|
MyTreenode1 := nil;
|
MyTreenode2 := nil;
|
If NewTreeNode <> nil Then
|
begin
|
TreeView1.Selected := NewTreeNode;
|
NewTreeNode.Expand(False);
|
end;
|
IF (NewTreeNode <> nil) and (NewTreeNode.Count > 0) Then
|
begin
|
GetCase_PageCount(CaseCount,PageCount);
|
v := Pos('-',NewTreeNode.Text);
|
NewTreeNode.Text := Format(_Msg('%s-共%d筆共%d頁'),[Copy(NewTreeNode.Text,1,v-1),CaseCount,PageCount]);
|
end;
|
end;
|
|
procedure TCB_IMGPSScanX.LoadImgFile1; //載入新件及替換件
|
Var
|
i,n,v,v1,m : Integer;
|
p : integer;
|
iCaseNo,iDocNo : String;
|
TempName : String;
|
BarName : String;
|
DocName : String;
|
//S : String;
|
begin
|
ClearView(1);
|
PageLV.Clear;
|
DisplayPath := '';
|
ClearCaseIndex;
|
CaseHelpBtn.Visible := False;
|
//Del_Sub_NothingPath(ImageSavePath); //清掉案件目錄是空的
|
TreeView1.Items.Clear;
|
NewTreeNode := nil;
|
MyTreenode1 := nil;
|
MyTreenode2 := nil;
|
MyTreenode3 := nil;
|
NewTreeNode := TreeView1.Items.Add(nil,Format(_Msg('%s-共%d筆共%d頁'),[FModeName,0,0]));
|
NewTreenode.ImageIndex := 0;
|
NewTreenode.SelectedIndex := 0;
|
|
Del_Sub_NothingPath(ImageSavePath); //清掉案件目錄是空的
|
GetCase_PageCount(CaseCount,PageCount);
|
CaseList.Clear;
|
if FileExists(ImageSavePath + 'CaseList.dat') then
|
CaseList.LoadFromFile(ImageSavePath + 'CaseList.dat');
|
for n := 0 to CaseList.Count - 1 do
|
begin
|
iCaseNo := CaseList.Strings[n];
|
CaseDocNoList.Clear;
|
if FileExists(ImageSavePath+CaseList.Strings[n]+'\DocNoList.dat') then
|
CaseDocNoList.LoadFromFile(ImageSavePath+CaseList.Strings[n]+'\DocNoList.dat');
|
|
for m := 0 to CaseDocNoList.Count - 1 do
|
begin
|
iDocNo := CaseDocNoList.Strings[i];
|
MytreeNode1 := TreeView1.Items.AddChild(NewTreeNode,Format(_Msg('%s-%d頁'),[CaseList.Strings[n],p]));
|
MytreeNode1.ImageIndex := 1;
|
MytreeNode1.SelectedIndex := 1;
|
end;
|
|
|
ContextList.Clear;
|
Context_DocnoList.Clear;
|
If FileExists(ImageSavePath+CaseList.Strings[n]+'\Context.dat') Then
|
begin
|
ContextList.LoadFromFile(ImageSavePath+CaseList.Strings[n]+'\Context.dat');
|
if FileExists(ImageSavePath+CaseList.Strings[n]+'\Context_DocNo.dat') then
|
Context_DocnoList.LoadFromFile(ImageSavePath+CaseList.Strings[n]+'\Context_DocNo.dat')
|
else
|
begin
|
for m := 0 to ContextList.Count - 1 do
|
begin
|
Context_DocnoList.Add(FormCode2DocNo(FileName2FormCode(ContextList.Strings[m])));
|
end;
|
Context_DocnoList.SaveToFile(ImageSavePath+CaseList.Strings[n]+'\Context_DocNo.dat');
|
end;
|
Cust_DocNoList.Clear;
|
if FileExists(ImageSavePath+CaseList.Strings[n]+'\CustomDocNo.dat') then
|
Cust_DocNoList.LoadFromFile(ImageSavePath+CaseList.Strings[n]+'\CustomDocNo.dat');
|
|
P := ContextList.Count;
|
MytreeNode1 := TreeView1.Items.AddChild(NewTreeNode,Format(_Msg('%s-%d頁'),[CaseList.Strings[n],p]));
|
MytreeNode1.ImageIndex := 1;
|
MytreeNode1.SelectedIndex := 1;
|
//DrawDocItem1(MytreeNode1,Doc_Inf_List,CaseList.Strings[n]); //長出文件名稱的樹並傳回是否有申請書的影像
|
DrawDocItem2(MytreeNode1,CaseList.Strings[n]); //長出文件名稱的樹並傳回是否有申請書的影像 20140820改
|
|
if Pos(_Msg('未配號'),CaseList.Strings[n]) > 0 then
|
begin
|
MytreeNode1.ImageIndex := 5;
|
MytreeNode1.SelectedIndex := 5;
|
end;
|
If FileExists(ImageSavePath+CaseList.Strings[n]+'\OMRCheckOk.dat') Then
|
begin
|
MytreeNode1.ImageIndex := 7;
|
MytreeNode1.SelectedIndex := 7;
|
CaseHelpBtn.Visible := False;
|
end
|
Else IF FileExists(ImageSavePath+CaseList.Strings[n]+'\Checkerr.ini') Then
|
begin
|
MyTreenode1.ImageIndex := 5;
|
MyTreenode1.SelectedIndex := 5;
|
|
//AllEnforceLb.Visible := True; //全部強迫送件
|
end;
|
end;
|
end;
|
|
|
MyTreenode1 := nil;
|
MyTreenode2 := nil;
|
If NewTreeNode <> nil Then
|
begin
|
TreeView1.Selected := NewTreeNode;
|
NewTreeNode.Expand(False);
|
end;
|
ContextList.Clear;
|
IF (NewTreeNode <> nil) and (NewTreeNode.Count > 0) Then
|
begin
|
GetCase_PageCount(CaseCount,PageCount);
|
v := Pos('-',NewTreeNode.Text);
|
NewTreeNode.Text := Format(_Msg('%s-共%d筆共%d頁'),[Copy(NewTreeNode.Text,1,v-1),CaseCount,PageCount]);
|
end;
|
end;
|
|
procedure TCB_IMGPSScanX.LoadAttFile(CaseID:String); //載入附加檔案
|
var
|
AttContextList : TStringlist;
|
i : Integer;
|
begin
|
AttListBox.Clear;
|
AttContextList := TStringlist.Create;
|
try
|
if FileExists(ImageSavePath+CaseID+'\AttContext.dat') then
|
begin
|
AttContextList.LoadFromFile(ImageSavePath+CaseID+'\AttContext.dat');
|
end;
|
for i := 0 to AttContextList.Count - 1 do
|
begin
|
AttListBox.Items.Add(UTF8Decode(HTTPDEcode(AttContextList.Strings[i])));
|
end;
|
finally
|
AttContextList.Free;
|
end;
|
end;
|
|
function TCB_IMGPSScanX.logTimeString: String;
|
begin
|
Result:=FormatDateTime('yyyymmdd hh:mm:ss',now) +' caseNo='+NowCaseno+' ';
|
end;
|
|
Function TCB_IMGPSScanX.Case2Mask(SoPath,DePath:String):Boolean;//產生遮罩影像 20170639 發現沒用到
|
var
|
XT : TXMLTool;
|
i : Integer;
|
S : TStringlist;
|
SiteList : TStringlist;
|
FormID : String;
|
ColEName : String;
|
FileName : String;
|
nodename : String;
|
Site : String;
|
Anchor : String;
|
begin
|
Result := False;
|
if DirectoryExists(DePath) then
|
_DelTree(DePath);
|
Str2Dir(DePath);
|
DeleteFile(SoPath+'MaskImg.zip');
|
SiteList := TStringlist.Create;
|
S := TStringlist.Create;
|
XT := TXMLTool.Create;
|
try
|
S.LoadFromFile(SoPath+'Context.dat');
|
for I := 0 to S.Count - 1 do
|
begin
|
SiteList.Clear;
|
ImageScrollBox1.LoadFromFile(SoPath+S.Strings[i],1);
|
|
FormID := FileName2FormCode(S.Strings[i]);
|
Anchor := FormID2Anchor(FormID);
|
//ParserPoint(CropMpsV.FindPoint(Anchor));
|
FindPoint(ImageScrollBox1.Graphic,UpLPoint,UpRPoint,DownLPoint,Anchor);
|
if FileExists(CheckXmlPath+FWork_no+'\'+FormID+'.xml') then //沒有Xml就不用遮罩
|
begin
|
XT.LoadFromFile(CheckXmlPath+FWork_no+'\'+FormID+'.xml');
|
if XT.SubNodes['/form/settype10/'].First then
|
Repeat
|
ColEName := XT.SubNodes['/form/settype10/'].NodeName;
|
if XT.SubNodes['/form/settype10/'+ColEName+'/'].First then
|
Repeat
|
nodename := XT.SubNodes['/form/settype10/'+ColEName+'/'].NodeName;
|
If nodename <> '@coldesc' then
|
begin
|
Site := XT.Node['/form/settype10/'+ColEName+'/'+nodename+'/'].Attributes['colxy'];
|
SiteList.Add(Site);
|
Result := True; //有設定
|
end
|
Else
|
begin
|
//ColCName := XT['/form/settype1/'+ColEName+'/'+nodename+'/'];
|
end;
|
Until not XT.SubNodes['/form/settype10/'+ColEName+'/'].Next;
|
Until not XT.SubNodes['/form/settype10/'].Next ;
|
FieldMask(ImageScrollBox1,SiteList.Text,'Mask',UpLPoint);
|
end;
|
SaveAnnotation(ImageScrollBox1,DePath+S.Strings[i]);
|
end;
|
finally
|
SiteList.Free;
|
S.Free;
|
XT.Free;
|
end;
|
end;
|
|
Function TCB_IMGPSScanX.GetNewCustomDocNo(Path,DocName:String):String; //取出未使用的自訂文件代號
|
var
|
ini : Tinifile;
|
Ct:Integer;
|
DocNo,FormID : String;
|
|
{i,n,v,ln : Integer;
|
C_No,C_Name : String;
|
CNo : Integer;
|
S : TStringlist;
|
NewDocNo : String;}
|
begin
|
ini := Tinifile.Create(Path+'CustomDocNo.ini');
|
try
|
Ct := ini.ReadInteger('CustomCount','Count',0);
|
inc(Ct);
|
DocNo := 'ZZZZZ'+Add_Zoo(Ct,3);
|
if FIs_In_Wh <> 'Y' then //不是入庫文件
|
DocNo := 'YYYYY'+Add_Zoo(Ct,3);
|
|
if (FMode='ESCAN') and (FWH_category='N') then //20170914 補件下改成非入庫的自定文件
|
begin
|
DocNo := 'YYYYY'+Add_Zoo(Ct,3);
|
end;
|
|
FormID := DocNo+'010101A';
|
ini.WriteInteger('CustomCount','Count',Ct);
|
ini.WriteString(DocNo,'FormID',FormID);
|
ini.WriteString(DocNo,'Name',DocName);
|
Result := DocNo;
|
finally
|
ini.Free;
|
end;
|
|
{S := TStringlist.Create;
|
try
|
NewDocNo :='ZZZZZ001';
|
if FileExists(Path+'CustomDocNo.dat') then
|
begin
|
/// ZZZZZ001_自定文件名稱 001_自定文件名稱
|
S.LoadFromFile(Path+'CustomDocNo.dat');
|
for i := 0 to S.Count - 1 do
|
begin
|
v := Pos('_',S.Strings[i]);
|
ln := Length(S.Strings[i]);
|
C_No := Copy(S.Strings[i],1,v-1);
|
C_Name := Copy(S.Strings[i],v+1,ln-v);
|
if DocName = C_Name then
|
begin
|
Showmessage('文件名稱已存在');
|
Result := '';
|
Exit;
|
end;
|
end;
|
CNo := strtoint(Copy(C_No,6,3))+1;
|
NewDocNo := 'ZZZZZ'+Add_Zoo(CNo,3);
|
end;
|
S.Add(NewDocNo+'_'+DocName);
|
S.SaveToFile(Path+'CustomDocNo.dat');
|
Result := NewDocNo;
|
finally
|
S.Free;
|
end; }
|
end;
|
|
Function TCB_IMGPSScanX.GetCustomDocDir(Path,DocName:String):String; //取出自定文件DocDir
|
var
|
i,ct:integer;
|
ini : Tinifile;
|
begin
|
Result := '';
|
ini := Tinifile.Create(Path+'CustomDocNo.ini');
|
try
|
ct := ini.ReadInteger('CustomCount','Count',0);
|
for i := 1 to ct do
|
begin
|
if ini.ReadString('ZZZZZ'+Add_Zoo(i,3),'Name','') = DocName then
|
begin
|
Result := 'ZZZZZ'+Add_Zoo(i,3);
|
Break;
|
end;
|
if ini.ReadString('YYYYY'+Add_Zoo(i,3),'Name','') = DocName then
|
begin
|
Result := 'YYYYY'+Add_Zoo(i,3);
|
Break;
|
end;
|
end;
|
finally
|
ini.Free;
|
end;
|
end;
|
|
Procedure TCB_IMGPSScanX.DeleteCustomDocDir(Path,DocNo:String); //刪除自定文件DocNo
|
var
|
ini : Tinifile;
|
begin
|
ini := Tinifile.Create(Path+'CustomDocNo.ini');
|
try
|
ini.EraseSection(DocNo);
|
finally
|
ini.Free;
|
end;
|
end;
|
|
Function TCB_IMGPSScanX.FindLastestDocDir(CaseID,DocNo:String):String; //找出最新的DocDir
|
var
|
i : Integer;
|
DocNoList,FileList : TStringlist;
|
begin
|
Result := '';
|
DocNoList := TStringlist.Create;
|
FileList := TStringlist.Create;
|
try
|
if FileExists(ImageSavePath+CaseID+'\CaseDocNo.dat') then
|
DocNoList.LoadFromFile(ImageSavePath+CaseID+'\CaseDocNo.dat');
|
for i := DocNoList.Count-1 downto 0 do
|
begin
|
if Copy(DocNoList.Strings[i],1,length(DocNo)) = DocNo then
|
begin
|
Result := DocNoList.Strings[i];
|
Break;
|
end;
|
end;
|
finally
|
DocNoList.Free;
|
FileList.Free;
|
end;
|
end;
|
|
Function TCB_IMGPSScanX.FindLastestDocDirForPage(CaseID,DocNo,formid:String):String; //找出最新的DocDir 20180207 排除隱藏的資料夾
|
var
|
i,j:integer;
|
DocNoList,FileList : TStringlist;
|
Imglist: TStringlist;
|
DirIsHide:Boolean;
|
begin
|
Result := '';
|
DocNoList := TStringlist.Create;
|
FileList := TStringlist.Create;
|
imglist := TStringlist.Create;
|
try
|
if FileExists(ImageSavePath+CaseID+'\CaseDocNo.dat') then
|
DocNoList.LoadFromFile(ImageSavePath+CaseID+'\CaseDocNo.dat');
|
|
for i := DocNoList.Count-1 downto 0 do
|
begin
|
if Copy(DocNoList.Strings[i],1,length(DocNo)) = DocNo then
|
begin
|
//ShowMessage(ImageSavePath+CaseID+'\'+DocNoList.Strings[i]);
|
if not DocNoIsExistImg(ImageSavePath+CaseID+'\'+DocNoList.Strings[i]+'\') then
|
begin
|
//ShowMessage('DDDDD');
|
Result := '';
|
Break;
|
end
|
else
|
begin
|
Result := DocNoList.Strings[i];
|
Break;
|
end;
|
end;
|
end;
|
finally
|
DocNoList.Free;
|
FileList.Free;
|
imglist.Free;
|
end;
|
|
end;
|
|
|
Procedure TCB_IMGPSScanX.Create_Cust_DocDir(CaseID:String); //產生外面傳入的文件代號及自定文件
|
var
|
i,n : Integer;
|
C_DocNoList,C_DocNameList : TStringlist;
|
DocNo,DocName,DocDir : String;
|
DocNo_Ct,NowDocNo_Ct :integer;
|
DocName_Ct : Integer;
|
inx : Integer;
|
begin
|
C_DocNoList := TStringlist.Create;
|
C_DocNameList := TStringlist.Create;
|
try
|
|
if FC_DocNoList <> '' then
|
begin
|
C_DocNoList.StrictDelimiter := True;
|
C_DocNoList.Delimiter := #9;
|
C_DocNoList.DelimitedText := FC_DocNoList;
|
//Showmessage(C_DocNoList.Text);
|
for i := 0 to C_DocNoList.Count - 1 do
|
begin
|
DocNo := C_DocNoList.Strings[i];
|
//舊件不長出錯誤的文件出來
|
if (FIs_OldCase = 'Y') and (FWork_no='HLN') and (DocNo = FormCode2DocNo('10000001011112A')) then
|
Continue;
|
NowDocNo_Ct := GetDocNoCount(CaseID,DocNo);
|
if DocNoNeedDiv(DocNo) then
|
begin
|
DocNo_Ct := 0;
|
for n := 0 to i do
|
begin
|
if C_DocNoList.Strings[n] = DocNo then
|
inc(DocNo_Ct);
|
end;
|
if DocNo_CT <= NowDocNo_Ct then
|
Continue;
|
if DirectoryExists(ImageSavePath+CaseID+'\'+DocNo+'('+inttostr(DocNo_Ct)+')') then //存在了
|
Continue;
|
if (DocNo_Ct = 1) and DirectoryExists(ImageSavePath+CaseID+'\'+DocNo) then //存在了 20140327加
|
Continue;
|
DocDir := DocNo2DocNoDir(ImageSavePath+CaseID+'\',DocNo)
|
|
end
|
else
|
begin
|
DocDir := DocNo;
|
end;
|
if not DirectoryExists(ImageSavePath+CaseID+'\'+DocDir) then
|
begin
|
MkDir(ImageSavePath+CaseID+'\'+DocDir);
|
SetDocNoList('A',-1,CaseID,DocDir,'1');
|
end;
|
if not DocNoNeedDiv(DocNo) then //不分份的秀數
|
SetDocDirCopies(CaseID,DocNo,GetCustomDocNoCount(DocNo));
|
|
end;
|
end;
|
if FC_DocNameList <> '' then
|
begin
|
C_DocNameList.StrictDelimiter := True;
|
C_DocNameList.Delimiter := #9;
|
C_DocNameList.DelimitedText := FC_DocNameList;
|
//Showmessage(C_DocNameList.Text);
|
for i := 0 to C_DocNameList.Count - 1 do
|
begin
|
DocName := C_DocNameList.Strings[i];
|
DocName_Ct := GetCustomNameCount(DocName);
|
if not FindCustomDocName(ImageSavePath+CaseID+'\',DocName) then
|
begin
|
DocDir := GetNewCustomDocNo(ImageSavePath+CaseID+'\',DocName);
|
if not DirectoryExists(ImageSavePath+CaseID+'\'+DocDir) then
|
begin
|
MkDir(ImageSavePath+CaseID+'\'+DocDir);
|
SetDocNoList('A',-1,CaseID,DocDir,inttostr(DocName_Ct));
|
end;
|
end
|
Else
|
begin
|
DocDir := GetCustomDocDir(ImageSavePath+CaseID+'\',DocName);
|
//inx := DocNoDir2Index(ImageSavePath+CaseID+'\',DocDir);
|
SetDocDirCopies(CaseID,DocDir,DocName_Ct);
|
end;
|
end;
|
end;
|
|
finally
|
C_DocNoList.Free;
|
C_DocNameList.Free;
|
end;
|
end;
|
|
Procedure TCB_IMGPSScanX.OldCasetoNewCase(CaseID:String); //將舊案份數轉成新規則
|
var
|
i,n : Integer;
|
C_DocNoList,C_DocNameList : TStringlist;
|
DocNoList,DocNo_CopiesList : TStringlist;
|
DocNo,DocName,DocDir : String;
|
DocNo_Ct :integer;
|
begin
|
C_DocNoList := TStringlist.Create;
|
C_DocNameList := TStringlist.Create;
|
DocNoList := TStringlist.Create;
|
DocNo_CopiesList := TStringlist.Create;
|
try
|
DocNoList.LoadFromFile(ImageSavePath+CaseID+'\CaseDocNo.dat');
|
for i := 0 to DocNoList.Count - 1 do
|
begin
|
DocNo_CopiesList.Add('0');
|
end;
|
//Showmessage(FC_DocNoList);
|
if FC_DocNoList <> '' then
|
begin
|
C_DocNoList.StrictDelimiter := True;
|
C_DocNoList.Delimiter := #9;
|
C_DocNoList.DelimitedText := FC_DocNoList;
|
//showmessage(C_DocNoList.Text+#13+#13+DocNoList.Text);
|
for i := 0 to DocNoList.Count - 1 do
|
begin
|
//DocNo := DocNoList.Strings[i];
|
DocNo := DocNoDir2DocNo(DocNoList.Strings[i]); //20140812 因轉舊案錯誤件會出現DocnoDir
|
DocNo_Ct := 0;
|
for n := 0 to C_DocNoList.Count - 1 do
|
begin
|
if DocNo = C_DocNoList.Strings[n] then
|
inc(DocNo_Ct);
|
end;
|
if DocNo_CT > 0 Then
|
DocNo_CopiesList.Strings[i] := inttostr(DocNo_CT);
|
end;
|
DocNo_CopiesList.SaveToFile(ImageSavePath+CaseID+'\CaseDocNo_Copies.dat');
|
end;
|
if FC_DocNameList <> '' then
|
begin
|
C_DocNameList.StrictDelimiter := True;
|
C_DocNameList.Delimiter := #9;
|
C_DocNameList.DelimitedText := FC_DocNameList;
|
for i := 0 to DocNoList.Count - 1 do
|
begin
|
DocNo := DocNoList.Strings[i];
|
DocNo_Ct := 0;
|
for n := 0 to C_DocNameList.Count - 1 do
|
begin
|
if GetCustomDocName(ImageSavePath+CaseID+'\',DocNo) = C_DocNameList.Strings[n] then
|
inc(DocNo_Ct);
|
end;
|
|
if DocNo_CT > 0 Then
|
DocNo_CopiesList.Strings[i] :=inttostr(DocNo_CT);
|
end;
|
end;
|
DocNo_CopiesList.SaveToFile(ImageSavePath+CaseID+'\CaseDocNo_Copies.dat');
|
finally
|
C_DocNoList.Free;
|
C_DocNameList.Free;
|
DocNoList.Free;
|
DocNo_CopiesList.Free;
|
end;
|
|
end;
|
|
Procedure TCB_IMGPSScanX.SetRecordEditedDocDir(Mode:Char;CaseID,DocDir:String); //記錄被異動的文件目錄 'A:加入D:刪掉'
|
var
|
i : Integer;
|
Exists : Boolean;
|
EditedDocDirList : TStringlist;
|
begin
|
EditedDocDirList := TStringlist.Create;
|
try
|
if FileExists(ImageSavePath+CaseID+'\EditedDocDir.dat') then
|
EditedDocDirList.LoadFromFile(ImageSavePath+CaseID+'\EditedDocDir.dat');
|
case Mode of
|
'A':begin
|
Exists := False;
|
for i := 0 to EditedDocDirList.Count - 1 do
|
begin
|
if EditedDocDirList.Strings[i]=DocDir then
|
begin
|
Exists := True;
|
Break;
|
end;
|
end;
|
if not Exists then
|
begin
|
EditedDocDirList.Add(DocDir);
|
EditedDocDirList.SaveToFile(ImageSavePath+CaseID+'\EditedDocDir.dat');
|
end;
|
end;
|
'D':begin
|
for i := 0 to EditedDocDirList.Count - 1 do
|
begin
|
if EditedDocDirList.Strings[i] = DocDir then
|
begin
|
EditedDocDirList.Delete(i);
|
if EditedDocDirList.Count > 0 then
|
EditedDocDirList.SaveToFile(ImageSavePath+CaseID+'\EditedDocDir.dat')
|
else
|
DeleteFile(ImageSavePath+CaseID+'\EditedDocDir.dat');
|
Break;
|
end;
|
end;
|
end;
|
end;
|
|
finally
|
EditedDocDirList.Free;
|
end;
|
end;
|
|
Function TCB_IMGPSScanX.GetDocDir_Page(CaseID,DocDir:String):Integer;
|
var
|
FileList : TStringlist;
|
begin
|
Result := 0;
|
FileList := TStringlist.Create;
|
try
|
if FileExists(ImageSavePath+CaseID+'\'+DocDir+'\Context.dat') then
|
begin
|
FileList.LoadFromFile(ImageSavePath+CaseID+'\'+DocDir+'\Context.dat');
|
Result := FileList.Count;
|
end;
|
finally
|
FileList.Free;
|
end;
|
end;
|
|
Function TCB_IMGPSScanX.Path2DocDir(Path,CaseID:String):String;
|
var
|
i : Integer;
|
DocnoList : TStringlist;
|
begin
|
Result := '';
|
DocNoList := TStringlist.Create;
|
try
|
if FileExists(ImageSavePath+CaseID+'\CaseDocNo.dat') then
|
DocNoList.LoadFromFile(ImageSavePath+CaseID+'\CaseDocNo.dat');
|
if Path[length(Path)]<>'\' then
|
path := path+'\';
|
for i := 0 to DocNoList.Count - 1 do
|
begin
|
if (path=ImageSavePath+CaseID+'\'+DocNoList.Strings[i]+'\') then
|
begin
|
Result := DocNoList.Strings[i];
|
Break;
|
end;
|
end;
|
finally
|
DocNoList.Free;
|
end;
|
end;
|
|
Function TCB_IMGPSScanX.GetDocNo_IS_WH(DocNo:String):Boolean; //DocNo是否為入庫文件
|
var
|
i :Integer;
|
begin
|
Result := False;
|
for i := 0 to IN_WH_DocNoList.Count - 1 do
|
begin
|
if DocNo = IN_WH_DocNoList.Strings[i] then
|
begin
|
Result := True;
|
Break;
|
end;
|
end;
|
end;
|
|
Function TCB_IMGPSScanX.DocNoIs_In_WH(DocNo:String):Boolean; //DocNo是否為入庫文件
|
var
|
i : Integer;
|
begin
|
Result := False;
|
if (Copy(DocNo,1,5)='ZZZZZ') then //20140728 yuu 說自訂文件也是入庫文件
|
begin
|
Result := True;
|
Exit;
|
end;
|
for i := 0 to IN_WH_DocNoList.Count -1 do
|
begin
|
if DocNo = IN_WH_DocNoList.Strings[i] then
|
begin
|
Result := True;
|
Break;
|
end;
|
end;
|
end;
|
|
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;
|
|
Procedure TCB_IMGPSScanX.SetDocDirtoSelected(CaseNode:TTreeNode;DocDir:String);
|
var
|
i : Integer;
|
begin
|
for i := 0 to CaseNode.Count - 1 do
|
begin
|
if Pos(DocDir+'{',CaseNode.Item[i].Text) > 0 then
|
begin
|
TreeView1.Selected := CaseNode.Item[i];
|
end;
|
end;
|
end;
|
|
Function TCB_IMGPSScanX.CheckSelectImg_UseCase(Path,CaseID:String):Boolean; //檢查選擇的影像是否有包含被引用的影像
|
var
|
i : Integer;
|
iISBName : String;
|
iISB : TImageScrollBox;
|
ImgPath,DocDir : String;
|
begin
|
Result := False;
|
for i := 0 to ComponentCount -1 do
|
begin
|
if (Components[i] is TShape) and (copy(Components[i].Name,1,2)='SP') then
|
begin
|
//Showmessage(Components[i].Name);
|
iISBName := ShapeName2PreViewISBName(TShape(Components[i]));
|
iISB := TImageScrollBox(FindComponent(iISBName));
|
ImgPath := ExtractFilePath(iISB.FileName);
|
DocDir := Path2DocDir(ImgPath,CaseID);
|
if GetUseCase('T',Path,DocDir) <> '' then
|
Result := True;
|
end;
|
end;
|
end;
|
|
Function TCB_IMGPSScanX.TransOldCaseFile(Path:String):Boolean;
|
var
|
i : Integer;
|
OldCaseID,Year,Data,Verify:String;
|
SendData : String;
|
OldCaseInfoList,Caseinfolist : TStringlist;
|
OldCasePath : String;
|
begin
|
Result := True;
|
OldCaseInfoList := TStringlist.Create;
|
Caseinfolist := TStringlist.Create;
|
try
|
OldCaseInfoList.StrictDelimiter := True;
|
OldCaseInfoList.Delimiter := #9;
|
OldCaseInfoList.DelimitedText := FOldCaseInfo;
|
for i := 0 to OldCaseInfoList.Count - 1 do
|
begin
|
Caseinfolist := SplitString('@#,',OldCaseInfoList.Strings[i]);
|
//Caseinfolist.Delimiter := '_';
|
//Caseinfolist.DelimitedText := OldCaseInfoList.Strings[i];
|
OldCaseID := Caseinfolist.Strings[0];
|
Year := Caseinfolist.Strings[1];
|
Data := Caseinfolist.Strings[4];
|
Verify := Caseinfolist.Strings[5];
|
OldCasePath := Path+OldCaseID+'\';
|
if FileExists(OldCasePath+'UseCase.dat') and FileExists(OldCasePath+'UseCase.ini') then
|
begin
|
//////壓檔/////
|
//ZipMainFile(Path,Path,'Img.zip');
|
|
////上傳/////
|
SendData:='data='+HTTPEncode(UTF8Encode(Data))+'&verify='+Verify+'&other_case_no='+OldCaseID;
|
//Showmessage(FUrl+'service/slic/SLIC02/useOther?'+senddata);
|
if not upFile(HTTPSClient,FUrl,'service/imgpsc/IMGPSC02/useOther',SendData,'file',OldCasePath+'UseCase.ini',FReWrite,Memo1,False) then
|
begin
|
Showmessage(Format(_Msg('傳送舊件編號(%s)檔案時,網路發生錯誤!!'),[OldCaseID])+_Msg('錯誤代碼:')+Inttostr(HttpError.HttpErrorCode)+' '+HttpError.HttpReason);
|
Result := False;
|
Exit;
|
end;
|
if memo1.Lines.Strings[0] = '1' then
|
begin
|
Showmessage(Format(_Msg('傳送舊件編號(%s)檔案時,網路發生錯誤!!'),[OldCaseID])+_Msg('錯誤原因:')+memo1.Lines.Strings[1]);
|
Result := False;
|
Exit;
|
end
|
Else if Pos('<script type="text/javascript" src="scripts/CW00/login.js"></script>',Memo1.Lines.Text) > 0 then
|
begin
|
Showmessage(Format(_Msg('傳送舊件編號(%s)檔案時,網路發生錯誤!!'),[OldCaseID])+_Msg('錯誤原因:')+_Msg('閒置過久或被登出,請重新登入'));
|
Result := False;
|
Exit;
|
end;
|
end;
|
|
////上傳////
|
end;
|
finally
|
OldCaseInfoList.Free;
|
Caseinfolist.Free;
|
end;
|
end;
|
|
Function TCB_IMGPSScanX.Writelog(CaseID : String):Boolean;
|
var
|
SendData : String;
|
begin
|
Result := True;
|
SendData:='data='+HTTPEncode(UTF8Encode(FData))+'&verify='+FVerify+'&case_no='+CaseID;
|
If not ProcessServlet(HTTPSClient,FURL+'service/imgpsc/IMGPSC06/printlog',SendData,FReWrite,Memo1,False) Then
|
begin
|
HttpErrStr := _Msg('錯誤代碼:')+inttostr(HttpError.HttpErrorCode)+','+HttpError.HttpReason;
|
Result := False;
|
Exit;
|
end;
|
IF memo1.Lines.Strings[0] = '1' Then
|
begin
|
HttpErrStr := _Msg('錯誤原因:')+memo1.Lines.Strings[1];
|
Result := False;
|
Exit;
|
end
|
Else if Pos('<script type="text/javascript" src="scripts/CW00/login.js"></script>',Memo1.Lines.Text) > 0 then
|
begin
|
HttpErrStr := _Msg('錯誤原因:')+_Msg('閒置過久或被登出,請重新登入');
|
Result := False;
|
Exit;
|
end;
|
end;
|
|
Function TCB_IMGPSScanX.GetFtpinfo(CaseID,Action:String):Boolean;
|
var
|
SendData : String;
|
|
Procedure DecodeFtpInfo(EncryStr:String);
|
var
|
FtpStr : String;
|
ftpinfoList : TStringlist;
|
begin
|
if EncryStr = '' then Exit;
|
ftpinfoList := TStringlist.Create;
|
try
|
FtpStr := En_DecryptionStr_Base64('D',EncryStr,MpsKey);
|
SplitString('!@!',FtpStr,ftpinfoList);
|
if ftpinfoList[0] = 'ftps' then
|
FFtpProtocol := fpftps
|
else if ftpinfoList[0] = 'ftp' then
|
FFtpProtocol := fpftp;
|
FFtpIP := ftpinfoList[1];
|
FFtpPort := strtoint(ftpinfoList[2]);
|
FFtpID := ftpinfoList[3];
|
FFtpPwd := ftpinfoList[4];
|
|
finally
|
ftpinfoList.Free;
|
end;
|
end;
|
begin
|
Result := True;
|
SendData:='product='+FWork_no+'&case_no='+CaseID+'&department='+FUserUnit+'&action='+Action;
|
If not ProcessServlet_FormData(HTTPSClient,FURL+'service/imgpsc/IMGPSC02/ftps',SendData,FReWrite,Memo1,False) Then
|
begin
|
HttpErrStr := _Msg('錯誤代碼:')+inttostr(HttpError.HttpErrorCode)+','+HttpError.HttpReason;
|
Result := False;
|
Exit;
|
end;
|
IF (memo1.Lines.Strings[0] = '1') Then
|
begin
|
if memo1.Lines.Strings[1]='nodata' then //nodata 為正常可繼續的判斷
|
begin
|
TransMode := tsNone;
|
Result := True;
|
Exit;
|
end
|
else
|
begin
|
HttpErrStr := _Msg('錯誤原因:')+memo1.Lines.Strings[1];
|
Result := False;
|
Exit;
|
end;
|
end
|
Else if Pos('<script type="text/javascript" src="scripts/CW00/login.js"></script>',Memo1.Lines.Text) > 0 then
|
begin
|
HttpErrStr := _Msg('錯誤原因:')+_Msg('閒置過久或被登出,請重新登入');
|
Result := False;
|
Exit;
|
end
|
else if (memo1.Lines.Strings[0] <> '0') then//不認識的字串
|
begin
|
HttpErrStr := _Msg('錯誤原因:')+memo1.Lines.Strings[0];
|
Result := False;
|
Exit;
|
end;
|
TransMode := tsHttp;
|
FFtpExtraPath := '';
|
|
if memo1.Lines.Strings[0] = '0' then
|
begin
|
if memo1.Lines.Strings[2] = 'Y' then //要使用FTP
|
TransMode := tsFtp;
|
if memo1.Lines.Count > 3 then
|
begin
|
FFtpExtraPath := memo1.Lines.Strings[3];
|
DecodeFtpInfo(memo1.Lines.Strings[4]);
|
end;
|
end;
|
end;
|
|
Procedure TCB_IMGPSScanX.SetFtpInfo; //餵入FTP資訊
|
begin
|
IIS_Ftp.Display1 := Display1;
|
IIS_Ftp.FTPSClient1 := FTPSClient1;
|
IIS_Ftp.ElMemoryCertStorage := ElMemoryCertStorage;
|
IIS_Ftp.Display1 := Display1;
|
IIS_Ftp.Ftpip := FFtpIP;
|
IIS_Ftp.Ftpuserid := FFtpID;
|
IIS_Ftp.FtpPwd := FFtpPwd;
|
IIS_Ftp.FtpPath := FFtpRootPath;
|
IIS_Ftp.FtpPort := FFtpPort;
|
IIS_Ftp.FtpSSL := True;
|
IIS_Ftp.FtpPassive := True;
|
if FFtpProtocol = fpftp then
|
IIS_Ftp.FtpSSL := False;
|
IIS_Ftp.FtpEncryptDataChannel := true;
|
FTPSClient1.OnControlReceiveAsString := IIS_Ftp.EventHandlers.ControlReceiveAsString;
|
FTPSClient1.OnControlSendAsString := IIS_Ftp.EventHandlers.ControlSendAsString;
|
FTPSClient1.OnSSLError := IIS_Ftp.EventHandlers.SSLError;
|
FTPSClient1.OnCertificateValidate := IIS_Ftp.EventHandlers.CertificateValidate;
|
FTPSClient1.OnTextDataLine := IIS_Ftp.EventHandlers.TextDataLine;
|
|
{Showmessage(Format('Ftpip:%s'+#13
|
+'Ftpid:%s'+#13
|
+'Ftppwd:%s'+#13
|
+'Ftppath:%s'+#13
|
+'Ftpport:%s'+#13
|
,[FFtpIP,FFtpid,FFtpPwd,Ftppath,inttostr(Ftpport)]));}
|
end;
|
|
Function TCB_IMGPSScanX.FtpCaseComplete(SendData:String):Boolean;
|
begin
|
Result := True;
|
If not ProcessServlet_FormData(HTTPSClient,FURL+'service/imgpsc/IMGPSC02/caseupload',SendData,FReWrite,Memo1,False) Then
|
begin
|
HttpErrStr := _Msg('錯誤代碼:')+inttostr(HttpError.HttpErrorCode)+','+HttpError.HttpReason;
|
Result := False;
|
Exit;
|
end;
|
IF (memo1.Lines.Strings[0] = '1') or (memo1.Lines.Strings[0] <> '0') Then
|
begin
|
HttpErrStr := _Msg('錯誤原因:')+memo1.Lines.Strings[1];
|
Result := False;
|
Exit;
|
end
|
Else if Pos('<script type="text/javascript" src="scripts/CW00/login.js"></script>',Memo1.Lines.Text) > 0 then
|
begin
|
HttpErrStr := _Msg('錯誤原因:')+_Msg('閒置過久或被登出,請重新登入');
|
Result := False;
|
Exit;
|
end;
|
end;
|
|
Function TCB_IMGPSScanX.DocNoAppear(DocNo:String):Boolean; //DocNo是否可出現
|
begin
|
Result := True;
|
|
{if (((FIs_In_Wh = 'Y') and (not DocNoIs_In_WH(DocNo)) or (DocNo ='S_Attach')) or //入庫掃描不看非入庫文件
|
((FIs_In_Wh = 'N') and (DocNoIs_In_WH(DocNo)) or (DocNo ='Attach') )) {and //非入庫掃描不看入庫文件
|
(Copy(DocNo,1,5)<>'ZZZZZ')} {then
|
{Result := False;}
|
//20181031 應該要換成下面的判斷比較對,FIs_In_Wh傳空的話才會出全部
|
if (((FIs_In_Wh = 'Y') and ((not DocNoIs_In_WH(DocNo)) or (DocNo ='S_Attach'))) or //入庫掃描不看非入庫文件
|
((FIs_In_Wh = 'N') and ((DocNoIs_In_WH(DocNo)) or (DocNo ='Attach') ))) {and //非入庫掃描不看入庫文件
|
(Copy(DocNo,1,5)<>'ZZZZZ')} then
|
Result := False;
|
|
|
end;
|
|
Function TCB_IMGPSScanX.GetDocNoCount(CaseID,DocNo:String):Integer; //取DocNo數量
|
var
|
i : Integer;
|
Doc_Ct:Integer;
|
iDocNo : String;
|
DocNoList,DocNo_CopiesList : TStringlist;
|
begin
|
DocNoList := TStringlist.Create;
|
DocNo_CopiesList := TStringlist.Create;
|
try
|
if FileExists(ImageSavePath+CaseID+'\CaseDocNo.dat') then
|
begin
|
DocNoList.LoadFromFile(ImageSavePath+CaseID+'\CaseDocNo.dat');
|
DocNo_CopiesList.LoadFromFile(ImageSavePath+CaseID+'\CaseDocNo_Copies.dat');
|
end;
|
Doc_Ct := 0;
|
for i := 0 to DocNoList.Count - 1 do
|
begin
|
iDocNo := DocNoDir2DocNo(DocNoList.Strings[i]);
|
if iDocNo = DocNo then
|
Doc_Ct := Doc_Ct + strtoint(DocNo_CopiesList.Strings[i]);
|
end;
|
Result := Doc_Ct;
|
// Showmessage(DocNo+#13+inttostr(Doc_Ct));
|
finally
|
DocNoList.Free;
|
DocNo_CopiesList.Free;
|
end;
|
end;
|
|
Function TCB_IMGPSScanX.GetDocDirCopies(CaseID,DocDir:String):Integer; //取DocDir數量
|
var
|
i : Integer;
|
DocNoList,DocNo_CopiesList : TStringlist;
|
begin
|
Result := 1; //預設回傳1 //20140521 由0改成1
|
DocNoList := TStringlist.Create;
|
DocNo_CopiesList := TStringlist.Create;
|
try
|
if FileExists(ImageSavePath+CaseID+'\CaseDocNo.dat') then
|
DocNoList.LoadFromFile(ImageSavePath+CaseID+'\CaseDocNo.dat');
|
|
if FileExists(ImageSavePath+CaseID+'\CaseDocNo_Copies.dat') then
|
begin
|
DocNo_CopiesList.LoadFromFile(ImageSavePath+CaseID+'\CaseDocNo_Copies.dat');
|
for i := 0 to DocNoList.Count - 1 do
|
begin
|
if (DocDir = DocNoList.Strings[i]) and (i <= DocNo_CopiesList.Count-1) then
|
begin
|
Result := strtoint(DocNo_CopiesList.Strings[i]);
|
Break;
|
end;
|
end;
|
end;
|
finally
|
DocNoList.Free;
|
DocNo_CopiesList.Free;
|
end;
|
end;
|
|
Procedure TCB_IMGPSScanX.SetDocDirCopies(CaseID,DocDir:String;NewCopies:Integer); //修改DocDir份數
|
var
|
i : Integer;
|
DocNoList,DocNo_CopiesList : TStringlist;
|
begin
|
DocNoList := TStringlist.Create;
|
DocNo_CopiesList := TStringlist.Create;
|
try
|
if FileExists(ImageSavePath+CaseID+'\CaseDocNo.dat') then
|
begin
|
DocNoList.LoadFromFile(ImageSavePath+CaseID+'\CaseDocNo.dat');
|
DocNo_CopiesList.LoadFromFile(ImageSavePath+CaseID+'\CaseDocNo_Copies.dat');
|
end;
|
for i := 0 to DocNoList.Count - 1 do
|
begin
|
if DocDir = DocNoList.Strings[i] then
|
begin
|
DocNo_CopiesList.Strings[i] := inttostr(NewCopies);
|
DocNo_CopiesList.SaveToFile(ImageSavePath+CaseID+'\CaseDocNo_Copies.dat');
|
Break;
|
end;
|
end;
|
finally
|
DocNoList.Free;
|
DocNo_CopiesList.Free;
|
end;
|
end;
|
|
Function TCB_IMGPSScanX.GetDocDirCopies_Rec(Path,CaseID,DocDir:String):Integer; //取記錄裡的DocDir份數
|
var
|
i,n,v,v1 : Integer;
|
OldCaseInfoList,Caseinfolist : TStringlist;
|
iCaseID,Year,iBS_No,iIS_Old,iDocNo,iCopies:String;
|
begin
|
Result := 1;
|
OldCaseInfoList := TStringlist.Create;
|
Caseinfolist := TStringlist.Create;
|
try
|
//OldCaseInfoList 案件編號@#,年度@#,業務別@#,是否舊件@#,Data@#,Verify@#,文件編號[份數]@#,文件編號[份數] tab 案件編號@#,年度@#,業務別@#,是否舊件@#,Data@#,Verify@#,文件編號[份數]@#,文件編號[份數]
|
OldCaseInfoList.StrictDelimiter := true;
|
OldCaseInfoList.Delimiter := #9;
|
OldCaseInfoList.DelimitedText := FOldCaseInfo;
|
|
for i := 0 to OldCaseInfoList.Count - 1 do
|
begin
|
Caseinfolist:=SplitString('@#,',OldCaseInfoList.Strings[i]);
|
//Caseinfolist.Delimiter := '_';
|
//Caseinfolist.DelimitedText := OldCaseInfoList.Strings[i];
|
iCaseID := Caseinfolist.Strings[0];
|
Year := Caseinfolist.Strings[1];
|
iBS_No := Caseinfolist.Strings[2];
|
iIS_Old := Caseinfolist.Strings[3];
|
if CaseID = iCaseID then
|
begin
|
for n := 6 to Caseinfolist.Count - 1 do
|
begin
|
v := Pos('[',Caseinfolist.Strings[n]);
|
v1 := Pos(']',Caseinfolist.Strings[n]);
|
iDocNo := Copy(Caseinfolist.Strings[n],1,v-1);
|
iCopies := Copy(Caseinfolist.Strings[n],v+1,v1-v-1);
|
if Copy(DocDir,1,5) = 'ZZZZZ' then
|
begin
|
if iDocNo = GetCustomDocName(Path,DocDir) then
|
Result := strtoint(iCopies);
|
end
|
else
|
begin
|
if iDocNo = DocNoDir2DocNo(DocDir) then
|
Result := strtoint(iCopies);
|
end;
|
end;
|
|
end;
|
end;
|
finally
|
OldCaseInfoList.Free;
|
Caseinfolist.Free;
|
end;
|
end;
|
|
Function TCB_IMGPSScanX.GetCustomDocNoCount(Docno:String):Integer; //取外傳的DocNo數量
|
var
|
i,ct : Integer;
|
C_DocNoList : TStringlist;
|
begin
|
C_DocNoList := TStringlist.Create;
|
try
|
C_DocNoList.StrictDelimiter := True;
|
C_DocNoList.Delimiter := #9;
|
C_DocNoList.DelimitedText := FC_DocNoList;
|
ct := 0;
|
for i := 0 to C_DocNoList.Count - 1 do
|
begin
|
if C_DocNoList.Strings[i] = Docno then
|
begin
|
inc(ct);
|
end;
|
end;
|
Result := ct;
|
finally
|
C_DocNoList.Free;
|
end;
|
end;
|
|
Function TCB_IMGPSScanX.CaseDelete_Enable(CaseID:String):Boolean; //案件可否被刪除
|
var
|
i : Integer;
|
CaseDocNoList : TStringlist;
|
begin
|
Result := True;
|
CaseDocNoList := TStringlist.Create;
|
try
|
if FileExists(ImageSavePath+CaseID+'\CaseDocNo.dat') then
|
CaseDocNoList.LoadFromFile(ImageSavePath+CaseID+'\CaseDocNo.dat');
|
for i := 0 to CaseDocNoList.Count - 1 do
|
begin
|
if GetUseCase('T',DisplayPath,CaseDocNoList.Strings[i]) <> '' then //有被引用走的
|
Result := False;
|
end;
|
|
finally
|
CaseDocNoList.Free;
|
end;
|
end;
|
|
Procedure TCB_IMGPSScanX.SetUseCase(Mode:Char;Path,DocDir,FormCaseID,ToCaseID:String); //記錄引用其他案件 A:加入 D:刪掉
|
var
|
ini : Tinifile;
|
begin
|
ini := Tinifile.Create(Path+'UseCase.ini');
|
try
|
case Mode of
|
'A':begin
|
ini.WriteString(DocDir,'FROM_CASEID',FormCaseID);
|
ini.WriteString(DocDir,'TO_CASEID',ToCaseID);
|
end;
|
'D':begin
|
ini.EraseSection(DocDir);
|
end;
|
end;
|
|
finally
|
ini.Free;
|
end;
|
end;
|
|
Function TCB_IMGPSScanX.GetUseCase(Mode:Char;Path,DocDir:String):String; //F:取被引用 To:引用
|
var
|
ini : Tinifile;
|
begin
|
ini := Tinifile.Create(Path+'UseCase.ini');
|
try
|
case Mode of
|
'F':begin
|
Result := ini.ReadString(DocDir,'FROM_CASEID','');
|
end;
|
'T':begin
|
Result := ini.ReadString(DocDir,'TO_CASEID','');
|
end;
|
end;
|
finally
|
ini.Free;
|
end;
|
|
end;
|
|
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;
|
|
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;
|
|
Function TCB_IMGPSScanX.FileName2NoQuene_Filename(FileName:String):String; //取出沒有序號的檔名
|
var
|
v,v1 : Integer;
|
FName : String;
|
begin
|
FName := ExtractFileName(FileName);
|
v := Pos('_',FName);
|
if v = 0 then //附件
|
v := pos('.',FName);
|
v1 := length(FName);
|
Result := Copy(FName,v,v1-v+1);
|
end;
|
|
Function TCB_IMGPSScanX.FileName2Index(FileName:String):Integer; //從檔名取出在ContextList的序號
|
var
|
i : Integer;
|
begin
|
for i := 0 to ContextList.Count - 1 do
|
begin
|
if FileName = ContextList.Strings[i] then
|
begin
|
Result := i;
|
Break;
|
end;
|
end;
|
end;
|
|
Function TCB_IMGPSScanX.FileName2NowDcoNo(FileName:String;CtList,DNList:TStrings):String; //從檔名取出歸屬的文件代號
|
var
|
i : Integer;
|
begin
|
for I := 0 to CTList.Count -1 do
|
begin
|
if FileName = CTList.Strings[i] then
|
begin
|
Result := DNList.Strings[i];
|
break;
|
end;
|
end;
|
end;
|
|
Function TCB_IMGPSScanX.DocNo2DocName(CaseID,DocNo:String):String; //Docno轉Doc名稱
|
var
|
i,v,ln : Integer;
|
CusDocNo,CusDocName : String;
|
begin
|
Result := '';
|
if DocNo = AttName then
|
begin
|
Result := _Msg('未歸類');
|
end
|
Else
|
begin
|
If FindSQLData(Doc_Inf_List,'DOC_U_DESC','DOC_NO',DocNo,0,FindResult) Then
|
begin
|
//ShowMessage(FindResult.Text);
|
Result := GetFindResult('DOC_U_DESC');
|
end;
|
end;
|
|
if Result = '' then //去自訂文件裡找
|
begin
|
Result := GetCustomDocName(ImageSavePath+CaseID+'\',DocNo);
|
{for i := 0 to Cust_DocNoList.Count - 1 do
|
begin
|
v := Pos('_',Cust_DocNoList.Strings[i]);
|
ln := length(Cust_DocNoList.Strings[i]);
|
CusDocNo := Copy(Cust_DocNoList.Strings[i],1,v-1);
|
CusDocName := Copy(Cust_DocNoList.Strings[i],v+1,ln-v);
|
if DocNo = CusDocNo then
|
begin
|
Result := CusDocName;
|
Break;
|
end;
|
end;}
|
end;
|
|
end;
|
|
Function TCB_IMGPSScanX.DocNo2FileName(DocNo:String;List:TStrings):String; //用DocNo找出檔名(第一頁)
|
var
|
i : Integer;
|
begin
|
Result := '';
|
for i := 0 to List.Count - 1 do
|
begin
|
IF DocNo = FormCode2DocNo(FileName2FormCode(List.Strings[i])) then
|
begin
|
Result := List.Strings[i];
|
Break;
|
end;
|
end;
|
end;
|
|
Function TCB_IMGPSScanX.DocNo2WorkNo(DocNo:String):String; //用DocNo取出作業別
|
begin
|
Result := '';
|
If FindSQLData(Doc_Inf_List,'WORK_NO','DOC_NO',DocNo,0,FindResult) Then
|
begin
|
Result := GetFindResult('WORK_NO');
|
end;
|
end;
|
|
Function TCB_IMGPSScanX.DocNoNeedDiv(DocNo:String):Boolean; //是否是需分份數的文件代號
|
var
|
NeedDiv : String;
|
begin
|
Result := False;
|
If FindSQLData(Doc_Inf_List,'IS_DOC_DIV','DOC_NO',DocNo,0,FindResult) Then
|
begin
|
NeedDiv := GetFindResult('IS_DOC_DIV');
|
if NeedDiv = 'Y' then
|
Result := True;
|
end;
|
end;
|
|
Function TCB_IMGPSScanX.DocnoNeedGroup(DocNo:String):Boolean; //傳入的DocNo是否需分組
|
begin
|
Result := False;
|
If FindSQLData(Doc_Inf_List,'IS_DOC_DIV','DOC_NO',DocNo,0,FindResult) Then
|
begin
|
if GetFindResult('IS_DOC_DIV') = 'Y' Then
|
Result := True;
|
end;
|
end;
|
|
Function TCB_IMGPSScanX.OMRCheckCase(CaseID:String):Boolean; //OMR檢核
|
var
|
i,n,m,v,v1 : Integer;
|
XT,RelaXT,ValueXT : TXmltool;
|
OMRFormCode,OMRFile,OMRFormName,ColEName,ColCName,Site : String;
|
Pixel : Integer;
|
RelaFormCode,RelaFile,RelaFormName,RelaColEName,RelaColCName,RelaSite : String;
|
RelaDocNo,RelaDocName : string;
|
RelaPixel : Integer;
|
s : String;
|
nodename : String;
|
OMROK : Boolean;
|
CaseOk : Boolean;
|
ErrStr : String;
|
SiteRec,RelaSiteRec : String; //多組位置記錄
|
OMRValue : String;
|
MainFormID,MainDocNo,MainVersion : String; //主FormID
|
MainFormPage,CaseFormPage : Integer; //主要文件需要的頁數
|
NeedDocNoStr,NoDocNoStr : String; //相依 互斥文件字串
|
List : TStringlist;
|
FormCode : String;
|
FormDataPages : Integer;
|
NoSite : Boolean; //未定位
|
Anchor,Anchor1 : String;
|
OMROkCount : Integer;
|
//Casecheck : Boolean; //是否要做檢核
|
//AllCheck : Boolean; //是否要做完整檢核
|
|
ISB8W,ISB8H:integer;
|
begin
|
///OMRErrInfo 1: 必要文件 2:相依文件 3:互斥文件 4:必填 5:欄位有值附文件 6:欄位有值不附文件
|
/// 7: 欄位有值相關欄位也要有值 8:欄位有值要寫備註 9:停用日期 10:最大頁數
|
//Casecheck := True;
|
//Allcheck := True;
|
//if (FMode = 'ISCAN') then
|
//Allcheck := False;
|
CaseOk := True;
|
//if Casecheck then
|
//begin
|
DeleteFile(ImageSavePath+CaseID+'\upload\Checkerr.ini');
|
DeleteFile(ImageSavePath+CaseID+'\upload\CheckMemo.dat');
|
//DeleteFile(ImageSavePath+CaseID+'\upload\ReSize.dat');
|
DeleteFile(ImageSavePath+CaseID+'\upload\RemoveMemo.dat');
|
DeleteFile(ImageSavePath+CaseID+'\upload\OMRCheckOk.dat');
|
Memo1.Lines.Clear;
|
OMRFileList.Clear;
|
|
MainFormID := GetCaseFormID(ImageSavePath+CaseID+'\upload\');
|
List := TStringlist.Create;
|
try
|
//if AllCheck then
|
//begin
|
if GetCasePage(ImageSavePath,CaseID) =0 then
|
begin
|
|
end;
|
//ShowMessage('MainFormID='+MainFormID);
|
LogFile1.LogToFile(logTimeString+' '+FModeName+' '+CaseID+' '+'MainFormID='+MainFormID);
|
if MainFormID = ''then
|
begin
|
//20131203 yuu說不檢查這個,先拿掉 20170315 楷琳說未歸類要擋 20170726 因此有檢查必要FormID 所以 可以拿掉
|
{if FCheck_main_form='Y' then
|
begin
|
if (FMode <> 'SSCAN') AND (FMode<>'ESCAN') then //簽署章件會換主FormID,先跳過 20170629 ESCAN 也不檢查
|
begin
|
ErrStr:=_Msg('找不到分案文件'); //找不到主文件
|
OMRErr2ini(CaseID,ErrStr,'','','','','','',False,False,True);
|
CaseOk := false;
|
//ShowMessage('AAAAA');
|
end;
|
end;
|
}
|
end
|
Else
|
begin
|
//////主要非主要文件//////
|
DistinctDocinCase(ImageSavePath+CaseID+'\upload\');
|
//ShowMessage(DocNo_VerinCase.Text);
|
//DocNo_VerinCase.Add('31A00101_1706A');
|
LogFile1.LogToFile(logTimeString+' '+CaseID+' '+'DocNo_VerinCase.Text='+DocNo_VerinCase.Text);
|
if ModeNeedCheck(OMRErrInfo[1].Mode,FMode) then //是否要檢核
|
begin
|
for i := 0 to DocNo_VerinCase.Count - 1 do
|
begin
|
v := Pos('_', DocNo_VerinCase.Strings[i]);
|
v1 := length(DocNo_VerinCase.Strings[i]);
|
MainDocNo := Copy(DocNo_VerinCase.Strings[i],1,v-1); //FormCode2DocNo(MainFormID);
|
MainVersion :=Copy(DocNo_VerinCase.Strings[i],v+1,v1-v); //FormCode2Version(MainFormID);
|
MainFormPage := GetDataDocNoPage(MainDocNo,MainVersion); //資料庫記錄主文件頁數
|
CaseFormPage := CheckCaseDocNoPage(CaseID,MainDocNo,MainVersion,MainFormPage); //案件主文件的頁數
|
LogFile1.LogToFile(logTimeString+CaseID+',MainDocNo='+MainDocNo+',MainVersion='+MainVersion+',MainFormPage='+IntToStr(MainFormPage)+',CaseFormPage='+IntToStr(CaseFormPage));
|
//CheckFirstDocNoPage
|
IF (MainFormPage > 0) and (MainFormPage <> CaseFormPage) then
|
begin
|
ErrStr:=MainDocNo+Format(OMRErrInfo[1].Info,[Inttostr(MainFormPage),Inttostr(CaseFormPage)]); //主要文件需有XX頁僅附XX頁
|
OMRErr2ini(CaseID,ErrStr,'','','','','','',False,OMRErrInfo[1].Ignore,OMRErrInfo[1].Display);
|
if OMRErrInfo[1].Display then
|
CaseOk := false;
|
end;
|
end;
|
end;
|
//////主要非主要文件/////
|
//showmessage(MainFormID);
|
MainDocNo := FormCode2DocNo(MainFormID);
|
MainVersion := FormCode2Version(MainFormID);
|
if FindSQLData(DM_FORM_INF_List,'DEPE_FORM_ID,MUTEX_FORM_ID','MAIN_FORM_ID,DOC_VERSION',MainDocNo+','+MainVersion,0,FindResult) then
|
begin
|
NeedDocNoStr := GetFindResult('DEPE_FORM_ID');
|
NoDocNoStr := GetFindResult('MUTEX_FORM_ID');
|
end
|
Else if FindSQLData(DM_FORM_INF_List,'DEPE_FORM_ID,MUTEX_FORM_ID','MAIN_FORM_ID,DOC_VERSION',MainDocNo+','+MainVersion,0,FindResult) then
|
begin
|
NeedDocNoStr := GetFindResult('DEPE_FORM_ID');
|
NoDocNoStr := GetFindResult('MUTEX_FORM_ID');
|
end;
|
|
//////相依文件/////
|
if ModeNeedCheck(OMRErrInfo[2].Mode,FMode) then //是否要檢核
|
begin
|
List.CommaText := NeedDocNoStr;
|
for I := 0 to List.Count - 1 do
|
begin
|
if not Case_DocNoExists(CaseID,List.Strings[i]) then //沒附相依文件
|
begin
|
if FWH_category='N' then
|
begin
|
if ISExistImg(ImageSavePath+CaseID+'\upload\'+List.Strings[i]) then
|
begin
|
Continue;
|
end;
|
end;
|
ErrStr:=Format(OMRErrInfo[2].Info,[DocNo2DocName(CaseID,List.Strings[i])]); //沒附相依文件
|
OMRErr2ini(CaseID,ErrStr,'','','','','','',False,OMRErrInfo[2].Ignore,OMRErrInfo[2].Display);
|
if OMRErrInfo[2].Display then
|
CaseOk := false;
|
end;
|
end;
|
end;
|
//////相依文件/////
|
|
//////互斥文件/////
|
if ModeNeedCheck(OMRErrInfo[3].Mode,FMode) then //是否要檢核
|
begin
|
List.CommaText := NoDocNoStr;
|
for I := 0 to List.Count - 1 do
|
begin
|
if Case_DocNoExists(CaseID,List.Strings[i]) then //附了互斥文件
|
begin
|
if FWH_category='N' then
|
begin
|
if ISExistImg(ImageSavePath+CaseID+'\upload\'+List.Strings[i]) then
|
begin
|
Continue;
|
end;
|
end;
|
ErrStr:=Format(OMRErrInfo[3].Info,[DocNo2DocName(CaseID,List.Strings[i])]); //有附互斥文件
|
OMRErr2ini(CaseID,ErrStr,'','','','','','',False,OMRErrInfo[3].Ignore,OMRErrInfo[3].Display);
|
if OMRErrInfo[3].Display then
|
CaseOk := false;
|
end;
|
end;
|
end;
|
//////互斥文件/////
|
end; //MainFormID結束
|
//end;
|
List.LoadFromFile(ImageSavePath + CaseID+'\upload\Context.dat');
|
for i := 0 to List.Count - 1 do
|
begin
|
FormCode := FileName2FormCode(List.Strings[i]);
|
/////未歸類///
|
{IF FormCode = 'Attach' Then //20140211 yuu說不檢查了
|
begin
|
ErrStr:=_Msg('尚有文件未歸類');
|
OMRErr2ini(CaseID,ErrStr,'','','','','','',False,False,True);
|
CaseOk := false;
|
end; }
|
/////未歸類//////
|
|
/////未註冊文件/////
|
{IF not FormIDExists(FormCode,False) then //未註冊文件
|
begin
|
ErrStr:=FormCode+_Msg('不為此業務的表單代碼');
|
OMRErr2ini(CaseID,ErrStr,'','','','',False,False,True);
|
CaseOk := false;
|
end }
|
/////未註冊文件/////
|
//////停用文件//
|
{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;
|
//////停用文件////
|
end;
|
finally
|
List.Free;
|
end;
|
//if AllCheck then
|
//begin
|
//////最大頁數///
|
LogFile1.LogToFile(logTimeString+'最大頁數A段 '+CaseID+' '+'OMRFileList.Text='+OMRFileList.Text);
|
DistinctFormCode(CaseID);
|
if ModeNeedCheck(OMRErrInfo[10].Mode,FMode) then //是否要檢核
|
begin
|
//ShowMessage('AAA'+OMRFileList.Text);
|
LogFile1.LogToFile(logTimeString+'最大頁數B段 '+CaseID+' '+'OMRFileList.Text='+OMRFileList.Text);
|
For i := 0 to OMRFileList.Count - 1 do
|
begin
|
if FModeName=_Msg('異動件') then Continue;
|
|
if FWH_category='N' then
|
begin
|
if ISExistImg(ImageSavePath+CaseID+'\upload\'+OMRFileList.Strings[i]) then
|
begin
|
Continue;
|
end;
|
end;
|
FormCode := FileName2FormCode(OMRFileList.Strings[i]);
|
FormDataPages := GetDataFormCodePages(FormCode);
|
|
IF (FormCode <> '') and (FormDataPages > 0) and (FindFormCodePages(CaseID,FormCode) > FormDataPages) then //有超過最大頁數的文件
|
begin
|
ErrStr:=Format(OMRErrInfo[10].Info,[FormCode2FormName(CaseID,FormCode),inttostr(FormDataPages)]); //有超過最大頁數文件
|
OMRErr2ini(CaseID,ErrStr,'','','','','','',False,OMRErrInfo[10].Ignore,OMRErrInfo[10].Display);
|
if OMRErrInfo[10].Display then
|
CaseOk := false;
|
end;
|
end;
|
end;
|
/////最大頁數/////
|
//end;
|
ImageScrollBox1.FileName := '';
|
//if FWork_No = 'CW' then //理賠就不做下面的檢核了
|
//begin
|
//////OMR檢核///////
|
ContextList.LoadFromFile(ImageSavePath+CaseID+'\upload\Context.dat');
|
DistinctFormCode(CaseID);
|
ValueXT := TXmltool.Create;
|
Try
|
//ShowMessage('必填'+OMRFileList.Text);
|
LogFile1.LogToFile(logTimeString+'必填 '+CaseID+' '+'OMRFileList.Text='+OMRFileList.Text);
|
For i := 0 to OMRFileList.Count - 1 do
|
begin
|
//ShowMessage('OMRFileList.Strings['+IntToStr(i)+']'+OMRFileList.Strings[i]);
|
if CheckRequiredColumnValues(FWork_NO,CaseID) then Continue;
|
|
OMRFile := OMRFileList.Strings[i];
|
OMRFormCode := FileName2FormCode(OMRFileList.Strings[i]);
|
OMRFormName := FormCode2FormName(CaseID,OMRFormCode);
|
Anchor := FormID2Anchor(OMRFormCode);
|
///依十字定位點縮放////
|
ImageReSize_FormID(CaseID,OMRFile);
|
////依十字定位點縮放///
|
//Display1.Lines.Add('OMRFile='+OMRFile+',OMRFormCode='+OMRFormCode+',OMRFormName='+OMRFormName);
|
LogFile1.LogToFile(logTimeString+'OMRFile='+OMRFile+',OMRFormCode='+OMRFormCode+',OMRFormName='+OMRFormName);
|
//ShowMessage('KKKKK');
|
if not FileExists(CheckXmlPath+FWork_no+'\'+OMRFormCode+'.xml') then //沒有Xml就不用檢核
|
Continue;
|
|
//ShowMessage('11638 OMRFileList.Strings['+IntToStr(i)+']'+OMRFileList.Strings[i]);
|
XT := TXmltool.Create(CheckXmlPath+FWork_no+'\'+OMRFormCode+'.xml');
|
RelaXT := TXmltool.Create;
|
//ShowMessage('ModeNeedCheck='+BoolToStr(ModeNeedCheck(OMRErrInfo[4].Mode,FMode),true));
|
try
|
//*******必填********
|
if ModeNeedCheck(OMRErrInfo[4].Mode,FMode) then //是否要檢核
|
begin
|
if XT.SubNodes['/form/settype1/'].First then
|
Repeat
|
OMROK := False;
|
SiteRec := ''; //清掉
|
ColEName := XT.SubNodes['/form/settype1/'].NodeName;
|
ColCName := XT.Node['/form/settype1/'+ColEName+'/'].Attributes['coldesc'];
|
ColCName := Copy(ColCName,1,length(ColCName)-6);
|
if XT.SubNodes['/form/settype1/'+ColEName+'/'].First then
|
Repeat
|
nodename := XT.SubNodes['/form/settype1/'+ColEName+'/'].NodeName;
|
If nodename <> '@coldesc' then
|
begin
|
Pixel := Strtoint(XT.Node['/form/settype1/'+ColEName+'/'+nodename+'/'].Attributes['pixel']);
|
Site := XT.Node['/form/settype1/'+ColEName+'/'+nodename+'/'].Attributes['colxy'];
|
if SiteRec= '' then //記錄位置
|
SiteRec := Site
|
else
|
SiteRec := SiteRec+'@'+Site;
|
//有填就ok
|
//Showmessage(ColCName +','+ inttostr(OMRMpsV1.GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site))+','+inttostr(Pixel + SafePixel));
|
//SafePixel:=90000;
|
Display1.Lines.Add(ColEName+' '+ColCName+' 圖像實際點數='+IntToStr(GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site,Bt))+' 設定點數='+IntToStr( (Pixel + SafePixel)));
|
//FindPoint(ISB_BW.Graphic,UpLPoint,UpRPoint,DownLPoint,ANCHOR);
|
if GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site,Bt) > (Pixel + SafePixel) then
|
begin
|
//Showmessage('oh');
|
OMROK := True;
|
Break;
|
end;
|
end
|
Else
|
begin
|
//ColCName := XT['/form/settype1/'+ColEName+'/'+nodename+'/'];
|
end;
|
Until not XT.SubNodes['/form/settype1/'+ColEName+'/'].Next;
|
if not OMROk then
|
begin
|
ErrStr:=Format(OMRErrInfo[4].Info,[ColCName]); //XX欄位未填寫
|
OMRErr2ini(CaseID,ErrStr,ImageSavePath+CaseID+'\upload\'+OMRFile,SiteRec,'','',Anchor,Anchor1,False,OMRErrInfo[4].Ignore,OMRErrInfo[4].Display);
|
if OMRErrInfo[4].Display then
|
CaseOk := false;
|
end;
|
Until not XT.SubNodes['/form/settype1/'].Next ;
|
end;
|
//*******必填********
|
//ShowMessage('11692 OMRFileList.Strings['+IntToStr(i)+']'+OMRFileList.Strings[i]);
|
//if AllCheck then
|
//begin
|
//*******有值相關文件的欄位也要有值*******
|
if ModeNeedCheck(OMRErrInfo[7].Mode,FMode) then //是否要檢核
|
begin
|
if XT.SubNodes['/form/settype3/'].First then
|
Repeat
|
SiteRec := '';
|
RelaSiteRec := '';
|
ColEName := XT.SubNodes['/form/settype3/'].NodeName;
|
ColCName := XT.Node['/form/settype3/'+ColEName+'/'].Attributes['coldesc'];
|
ColCName := Copy(ColCName,1,length(ColCName)-6);
|
Site := XT.Node['/form/settype3/'+ColEName+'/'].Attributes['colxy'];
|
if SiteRec= '' then //記錄位置
|
SiteRec := Site
|
else
|
SiteRec := SiteRec+'@'+Site;
|
Pixel := XT.Node['/form/settype3/'+ColEName+'/'].Attributes['pixel'];
|
Display1.Lines.Add(ColEName+' '+ColCName+' 圖像實際點數='+IntToStr(GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site,Bt))+' 設定點數='+IntToStr( (Pixel + SafePixel)));
|
if GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site,Bt) > (Pixel + SafePixel) then
|
begin
|
////有填寫////
|
|
if XT.SubNodes['/form/settype3/'+ColEName+'/'].First then
|
Repeat
|
RelaSiteRec := '';
|
nodename := XT.SubNodes['/form/settype3/'+ColEName+'/'].NodeName;
|
If (nodename <> '@coldesc') and (not XT.SubNodes['/form/settype3/'+ColEName+'/'].NodeIsAttr) then
|
begin
|
RelaFormCode := XT.node['/form/settype3/'+ColEName+'/'+nodename+'/'].Attributes['relaformid'];
|
RelaColEName := XT.node['/form/settype3/'+ColEName+'/'+nodename+'/'].Attributes['rela_col_name'];
|
RelaColCName := XT.node['/form/settype3/'+ColEName+'/'+nodename+'/'].Attributes['relacoldesc'];
|
RelaColCName := Copy(RelaColCName,1,length(RelaColCName)-6);
|
RelaFile := FormCode2FileName(RelaFormCode,ContextList);
|
RelaFormName := FormCode2FormName(CaseID,RelaFormCode);
|
Anchor1 := FormID2Anchor(RelaFormCode);
|
RelaXT.LoadFromFile(CheckXmlPath+FWork_no+'\'+RelaFormCode+'.xml');
|
Display1.Lines.Add(RelaFile+','+RelaFormName);
|
//ShowMessage(RelaFile);
|
//ShowMessage(ImageSavePath+CaseID+'\upload\'+RelaFile);
|
if RelaFile<>'' then
|
begin
|
ISB8.LoadFromFile(ImageSavePath+CaseID+'\upload\'+RelaFile,1); //20170815
|
ISB8W:= ISB8.Graphic.Width;
|
ISB8H:= ISB8.Graphic.Height;
|
FindPoint(ISB8.Graphic,UpLPoint,UpRPoint,DownLPoint,ISB8W,ISB8H,ANCHOR); //20170815 抓相關然欄位所在圖檔的定位
|
end;
|
|
OMROK := False;
|
//OMROK := False;
|
//if RelaXT.SubNodes['/form/settype2/'].First then
|
//Repeat
|
NoSite := True;
|
if RelaXT.SubNodes['/form/settype2/'+RelaColEName+'/'].Count >0 then
|
NoSite := False;
|
if RelaXT.SubNodes['/form/settype2/'+RelaColEName+'/'].First then
|
Repeat
|
nodename := RelaXT.SubNodes['/form/settype2/'+RelaColEName+'/'].NodeName;
|
If nodename <> '@coldesc' then
|
begin
|
RelaPixel := Strtoint(RelaXT.Node['/form/settype2/'+RelaColEName+'/'+nodename+'/'].Attributes['pixel']);
|
RelaSite := RelaXT.Node['/form/settype2/'+RelaColEName+'/'+nodename+'/'].Attributes['colxy'];
|
if RelaSiteRec= '' then //記錄位置
|
RelaSiteRec := RelaSite
|
else
|
RelaSiteRec := RelaSiteRec+'@'+RelaSite;
|
if FileExists(ImageSavePath+CaseID+'\upload\'+RelaFile) then
|
begin
|
Display1.Lines.Add(ColEName+' '+ColCName+' 圖像實際點數='+IntToStr(GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site,Bt))+' 設定點數='+IntToStr( (Pixel + SafePixel)));
|
if GetSiteOMR(ImageSavePath+CaseID+'\upload\'+RelaFile,RelaSite,Bt) > (RelaPixel + SafePixel) then
|
begin
|
OMROK := True;
|
Break;
|
end;
|
///依十字定位點縮放////
|
ImageReSize_FormID(CaseID,OMRFile); //20170815 重新抓定位
|
////依十字定位點縮放////
|
end;
|
end;
|
|
Until not RelaXT.SubNodes['/form/settype2/'+RelaColEName+'/'].Next;
|
if not OMROk then
|
begin
|
if not FileExists(ImageSavePath+CaseID+'\upload\'+RelaFile) then
|
ErrStr:=Format(OMRErrInfo[7].Info,[ColCName,RelaColCName])+'('+_msg('未附')+RelaFormName+')' //XX欄位填寫時,XX欄位未填寫
|
Else if NoSite then
|
ErrStr:=Format(OMRErrInfo[7].Info,[ColCName,RelaColCName])+'('+_msg('未定位')+')'
|
Else
|
ErrStr:=Format(OMRErrInfo[7].Info,[ColCName,RelaColCName]); //XX欄位填寫時,XX欄位未填寫
|
OMRErr2ini(CaseID,ErrStr,ImageSavePath+CaseID+'\upload\'+OMRFile,SiteRec,ImageSavePath+CaseID+'\upload\'+RelaFile,RelaSiteRec,Anchor,Anchor1,False,OMRErrInfo[7].Ignore,OMRErrInfo[7].Display);
|
if OMRErrInfo[7].Display then
|
CaseOk := false;
|
end;
|
//Until not RelaXT.SubNodes['/form/settype2/'].Next ;
|
|
end;
|
Until not XT.SubNodes['/form/settype3/'+ColEName+'/'].Next;
|
end;
|
Until not XT.SubNodes['/form/settype3/'].Next ;
|
end;
|
//*******有值相關文件的欄位也要有值*******
|
//ShowMessage('11788 OMRFileList.Strings['+IntToStr(i)+']'+OMRFileList.Strings[i]);
|
|
//*******有值相關文件的欄位不能有值*******
|
if ModeNeedCheck(OMRErrInfo[11].Mode,FMode) then //是否要檢核
|
begin
|
if XT.SubNodes['/form/settype8/'].First then
|
Repeat
|
SiteRec := '';
|
RelaSiteRec := '';
|
OMROkCount := 0;
|
ColEName := XT.SubNodes['/form/settype8/'].NodeName;
|
ColCName := XT.Node['/form/settype8/'+ColEName+'/'].Attributes['coldesc'];
|
ColCName := Copy(ColCName,1,length(ColCName)-6);
|
Site := XT.Node['/form/settype8/'+ColEName+'/'].Attributes['colxy'];
|
if SiteRec= '' then //記錄位置
|
SiteRec := Site
|
else
|
SiteRec := SiteRec+'@'+Site;
|
Pixel := XT.Node['/form/settype8/'+ColEName+'/'].Attributes['pixel'];
|
Display1.Lines.Add(ColEName+' '+ColCName+' 圖像實際點數='+IntToStr(GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site,Bt))+' 設定點數='+IntToStr( (Pixel + SafePixel)));
|
|
if GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site,Bt) > (Pixel + SafePixel) then
|
begin
|
////有填寫// //
|
inc(OMROkCount);
|
end;
|
if XT.SubNodes['/form/settype8/'+ColEName+'/'].First then
|
Repeat
|
RelaSiteRec := '';
|
nodename := XT.SubNodes['/form/settype8/'+ColEName+'/'].NodeName;
|
If (nodename <> '@coldesc') and (not XT.SubNodes['/form/settype8/'+ColEName+'/'].NodeIsAttr) then
|
begin
|
RelaFormCode := XT.node['/form/settype8/'+ColEName+'/'+nodename+'/'].Attributes['relaformid'];
|
RelaColEName := XT.node['/form/settype8/'+ColEName+'/'+nodename+'/'].Attributes['rela_col_name'];
|
RelaColCName := XT.node['/form/settype8/'+ColEName+'/'+nodename+'/'].Attributes['relacoldesc'];
|
RelaColCName := Copy(RelaColCName,1,length(RelaColCName)-6);
|
RelaFile := FormCode2FileName(RelaFormCode,ContextList);
|
RelaFormName := FormCode2FormName(CaseID,RelaFormCode);
|
Anchor1 := FormID2Anchor(RelaFormCode);
|
RelaXT.LoadFromFile(CheckXmlPath+FWork_no+'\'+RelaFormCode+'.xml');
|
|
if RelaFile<>'' then
|
begin
|
ISB8.LoadFromFile(ImageSavePath+CaseID+'\upload\'+RelaFile,1); //20170815
|
ISB8W:= ISB8.Graphic.Width;
|
ISB8H:= ISB8.Graphic.Height;
|
FindPoint(ISB8.Graphic,UpLPoint,UpRPoint,DownLPoint,ISB8W,ISB8H,ANCHOR); //20170815 抓相關然欄位所在圖檔的定位
|
end;
|
|
OMROK := False;
|
//OMROK := False;
|
//if RelaXT.SubNodes['/form/settype2/'].First then
|
//Repeat
|
NoSite := True;
|
if RelaXT.SubNodes['/form/settype2/'+RelaColEName+'/'].Count >0 then
|
NoSite := False;
|
if RelaXT.SubNodes['/form/settype2/'+RelaColEName+'/'].First then
|
Repeat
|
nodename := RelaXT.SubNodes['/form/settype2/'+RelaColEName+'/'].NodeName;
|
If nodename <> '@coldesc' then
|
begin
|
RelaPixel := Strtoint(RelaXT.Node['/form/settype2/'+RelaColEName+'/'+nodename+'/'].Attributes['pixel']);
|
RelaSite := RelaXT.Node['/form/settype2/'+RelaColEName+'/'+nodename+'/'].Attributes['colxy'];
|
if RelaSiteRec= '' then //記錄位置
|
RelaSiteRec := RelaSite
|
else
|
RelaSiteRec := RelaSiteRec+'@'+RelaSite;
|
if FileExists(ImageSavePath+CaseID+'\upload\'+RelaFile) then
|
begin
|
Display1.Lines.Add(ColEName+' '+ColCName+' 圖像實際點數='+IntToStr(GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site,Bt))+' 設定點數='+IntToStr( (Pixel + SafePixel)));
|
if GetSiteOMR(ImageSavePath+CaseID+'\upload\'+RelaFile,RelaSite,Bt) > (RelaPixel + SafePixel) then
|
begin
|
inc(OMROkCount);
|
//OMROK := True;
|
//Break;
|
end;
|
///依十字定位點縮放////
|
ImageReSize_FormID(CaseID,OMRFile);
|
////依十字定位點縮放////
|
end;
|
end;
|
//Else
|
//begin
|
//ColCName := XT['/form/settype1/'+ColEName+'/'+nodename+'/'];
|
//end;
|
Until not RelaXT.SubNodes['/form/settype2/'+RelaColEName+'/'].Next;
|
if OMROkCount > 1 then
|
begin
|
if not FileExists(ImageSavePath+CaseID+'\upload\'+RelaFile) then
|
ErrStr:=Format(OMRErrInfo[11].Info,[ColCName,RelaColCName])+'('+_msg('未附')+RelaFormName+')' //XX欄位填寫時,XX欄位也填寫
|
Else if NoSite then
|
ErrStr:=Format(OMRErrInfo[11].Info,[ColCName,RelaColCName])+'('+_msg('未定位')+')'
|
Else
|
ErrStr:=Format(OMRErrInfo[11].Info,[ColCName,RelaColCName]); //XX欄位填寫時,XX欄位也填寫
|
OMRErr2ini(CaseID,ErrStr,ImageSavePath+CaseID+'\upload\'+OMRFile,SiteRec,ImageSavePath+CaseID+'\upload\'+RelaFile,RelaSiteRec,Anchor,Anchor1,False,OMRErrInfo[7].Ignore,OMRErrInfo[7].Display);
|
if OMRErrInfo[11].Display then
|
CaseOk := false;
|
end;
|
//Until not RelaXT.SubNodes['/form/settype2/'].Next ;
|
|
end;
|
Until not XT.SubNodes['/form/settype8/'+ColEName+'/'].Next;
|
Until not XT.SubNodes['/form/settype8/'].Next ;
|
end;
|
//*******有值相關文件的欄位不能有值*******
|
|
//ShowMessage('11889 OMRFileList.Strings['+IntToStr(i)+']'+OMRFileList.Strings[i]);
|
|
//*******有值相依文件*******
|
if ModeNeedCheck(OMRErrInfo[5].Mode,FMode) then //是否要檢核
|
begin
|
if XT.SubNodes['/form/settype4/'].First then
|
Repeat
|
SiteRec := '';
|
RelaSiteRec := '';
|
ColEName := XT.SubNodes['/form/settype4/'].NodeName;
|
ColCName := XT.Node['/form/settype4/'+ColEName+'/'].Attributes['coldesc'];
|
ColCName := Copy(ColCName,1,length(ColCName)-6);
|
Site := XT.Node['/form/settype4/'+ColEName+'/'].Attributes['colxy'];
|
if SiteRec= '' then //記錄位置
|
SiteRec := Site
|
else
|
SiteRec := SiteRec+'@'+Site;
|
Pixel := XT.Node['/form/settype4/'+ColEName+'/'].Attributes['pixel'];
|
Display1.Lines.Add(ColEName+' '+ColCName+' 圖像實際點數='+IntToStr(GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site,Bt))+' 設定點數='+IntToStr( (Pixel + SafePixel)));
|
|
if GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site,Bt) > (Pixel + SafePixel) then
|
begin
|
////有填寫////
|
if XT.SubNodes['/form/settype4/'+ColEName+'/'].First then
|
Repeat
|
nodename := XT.SubNodes['/form/settype4/'+ColEName+'/'].NodeName;
|
If (nodename <> 'coldesc') and (not XT.SubNodes['/form/settype4/'+ColEName+'/'].NodeIsAttr) then
|
begin
|
{RelaFormCode := XT.Node['/form/settype4/'+ColEName+'/'+nodename+'/'].Attributes['relaformid'];
|
RelaFile := FormCode2FileName(RelaFormCode);
|
RelaFormName := FormCode2FormName(RelaFormCode); }
|
RelaDocNo := XT.Node['/form/settype4/'+ColEName+'/'+nodename+'/'].Attributes['relaformid'];
|
RelaFile := DocNo2FileName(RelaDocNo,ContextList);
|
RelaDocName := XT.Node['/form/settype4/'+ColEName+'/'+nodename+'/'].Attributes['relaformname'];
|
if RelaFile='' then
|
begin
|
ErrStr:=Format(OMRErrInfo[5].Info,[ColCName,RelaDocName]); //XX文件XX欄位填寫時,需附XX文件
|
OMRErr2ini(CaseID,ErrStr,ImageSavePath+CaseID+'\upload\'+OMRFile,SiteRec,'','',Anchor,Anchor1,False,OMRErrInfo[5].Ignore,OMRErrInfo[5].Display);
|
if OMRErrInfo[5].Display then
|
CaseOk := false;
|
end;
|
end;
|
Until not XT.SubNodes['/form/settype4/'+ColEName+'/'].Next;
|
end;
|
Until not XT.SubNodes['/form/settype4/'].Next ;
|
end;
|
//*******有值相依文件*******
|
|
//*******有值互斥文件*******
|
if ModeNeedCheck(OMRErrInfo[6].Mode,FMode) then //是否要檢核
|
begin
|
if XT.SubNodes['/form/settype5/'].First then
|
Repeat
|
SiteRec := '';
|
RelaSiteRec := '';
|
ColEName := XT.SubNodes['/form/settype5/'].NodeName;
|
ColCName := XT.Node['/form/settype5/'+ColEName+'/'].Attributes['coldesc'];
|
ColCName := Copy(ColCName,1,length(ColCName)-6);
|
Site := XT.Node['/form/settype5/'+ColEName+'/'].Attributes['colxy'];
|
if SiteRec= '' then //記錄位置
|
SiteRec := Site
|
else
|
SiteRec := SiteRec+'@'+Site;
|
Pixel := XT.Node['/form/settype5/'+ColEName+'/'].Attributes['pixel'];
|
Display1.Lines.Add(ColEName+' '+ColCName+' 圖像實際點數='+IntToStr(GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site,Bt))+' 設定點數='+IntToStr( (Pixel + SafePixel)));
|
|
if GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site,Bt) > (Pixel + SafePixel) then
|
begin
|
////有填寫////
|
if XT.SubNodes['/form/settype5/'+ColEName+'/'].First then
|
Repeat
|
nodename := XT.SubNodes['/form/settype5/'+ColEName+'/'].NodeName;
|
If (nodename <> 'coldesc') and (not XT.SubNodes['/form/settype5/'+ColEName+'/'].NodeIsAttr) then
|
begin
|
{RelaFormCode := XT.Node['/form/settype5/'+ColEName+'/'+nodename+'/'].Attributes['relaformid'];
|
RelaFile := FormCode2FileName(RelaFormCode);
|
RelaFormName := FormCode2FormName(RelaFormCode);}
|
RelaDocNo := XT.Node['/form/settype5/'+ColEName+'/'+nodename+'/'].Attributes['relaformid'];
|
RelaFile := DocNo2FileName(RelaDocNo,ContextList);
|
RelaDocName := XT.Node['/form/settype5/'+ColEName+'/'+nodename+'/'].Attributes['relaformname'];
|
if RelaFile<>'' then //有附 20130604看到(='')改的(未測)
|
begin
|
ErrStr:=Format(OMRErrInfo[6].Info,[ColCName,RelaDocName]); //XX文件XX欄位填寫時,不能附XX文件
|
OMRErr2ini(CaseID,ErrStr,ImageSavePath+CaseID+'\upload\'+OMRFile,SiteRec,'','',Anchor,Anchor1,False,OMRErrInfo[6].Ignore,OMRErrInfo[6].Display);
|
if OMRErrInfo[6].Display then
|
CaseOk := false;
|
end;
|
end;
|
Until not XT.SubNodes['/form/settype5/'+ColEName+'/'].Next;
|
end;
|
Until not XT.SubNodes['/form/settype5/'].Next ;
|
end;
|
//*******有值互斥文件*******
|
|
//*******有值寫備註*******
|
if ModeNeedCheck(OMRErrInfo[8].Mode,FMode) then //是否要檢核
|
begin
|
if XT.SubNodes['/form/settype6/'].First then
|
Repeat
|
SiteRec := '';
|
ColEName := XT.SubNodes['/form/settype6/'].NodeName;
|
ColCName := XT.Node['/form/settype6/'+ColEName+'/'].Attributes['coldesc'];
|
ColCName := Copy(ColCName,1,length(ColCName)-6);
|
Site := XT.Node['/form/settype6/'+ColEName+'/'].Attributes['colxy'];
|
Pixel := XT.Node['/form/settype6/'+ColEName+'/'].Attributes['pixel'];
|
|
if SiteRec= '' then //記錄位置
|
SiteRec := Site
|
else
|
SiteRec := SiteRec+'@'+Site;
|
|
Display1.Lines.Add(ColEName+' '+ColCName+' 圖像實際點數='+IntToStr(GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site,Bt))+' 設定點數='+IntToStr( (Pixel + SafePixel)));
|
|
if GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site,Bt) > (Pixel + SafePixel) then
|
begin
|
////有填寫////
|
if not FileExists(ImageSavePath+CaseID+'ScanMemo.dat') then
|
begin
|
ErrStr:=Format(OMRErrInfo[8].Info,[ColCName]); //XX文件XX欄位填寫時,需寫備註
|
OMRErr2ini(CaseID,ErrStr,ImageSavePath+CaseID+'\upload\'+OMRFile,SiteRec,'','',Anchor,Anchor1,False,OMRErrInfo[8].Ignore,OMRErrInfo[8].Display);
|
if OMRErrInfo[8].Display then
|
CaseOk := false;
|
end;
|
end;
|
Until not XT.SubNodes['/form/settype6/'].Next ;
|
end;
|
//*******有值寫備註*******
|
|
//*******OMR帶值********
|
if XT.SubNodes['/form/settype7/'].First then
|
Repeat
|
ColEName := XT.SubNodes['/form/settype7/'].NodeName;
|
ValueXT['/content/'+ColEName+'/@savevalue'] := ''; //先給預設空白
|
if XT.SubNodes['/form/settype7/'+ColEName+'/'].First then
|
Repeat
|
nodename := XT.SubNodes['/form/settype7/'+ColEName+'/'].NodeName;
|
If nodename <> '@coldesc' then
|
begin
|
Pixel := Strtoint(XT.Node['/form/settype7/'+ColEName+'/'+nodename+'/'].Attributes['pixel']);
|
Site := XT.Node['/form/settype7/'+ColEName+'/'+nodename+'/'].Attributes['colxy'];
|
OMRValue := XT.Node['/form/settype7/'+ColEName+'/'+nodename+'/'].Attributes['getvalue'];
|
|
//有填就ok
|
Display1.Lines.Add(ColEName+' '+ColCName+' 圖像實際點數='+IntToStr(GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site,Bt))+' 設定點數='+IntToStr( (Pixel + SafePixel)));
|
|
if GetSiteOMR(ImageSavePath+CaseID+'\upload\'+OMRFile,Site,Bt) > (Pixel + SafePixel) then
|
begin
|
ValueXT['/content/'+ColEName+'/@savevalue'] := OMRValue; //有填就換成設定的值
|
Break;
|
end;
|
end;
|
Until not XT.SubNodes['/form/settype7/'+ColEName+'/'].Next;
|
Until not XT.SubNodes['/form/settype7/'].Next ;
|
|
//*******OMR帶值********
|
//end;
|
Finally
|
if (OMRValue <> '') then
|
ValueXT.SaveToFile(ImageSavePath+CaseID+'/GetValue.xml');
|
XT.Free;
|
RelaXT.Free;
|
end;
|
end;
|
//必填迴圈結束
|
Finally
|
ValueXT.Free;
|
end;
|
//end;
|
//end;
|
Result := CaseOk;
|
end;
|
|
function TCB_IMGPSScanX.OMRErrini2ListForLog(CaseID: String): String;
|
var
|
ini : Tinifile;
|
Errcount : Integer;
|
Del : Boolean;
|
i,j : Integer;
|
ST,CaseList:TStringList;
|
|
begin
|
Result:='';
|
//CaseList.dat
|
ST:=TStringList.Create;
|
CaseList:=TStringList.Create;
|
CaseList.LoadFromFile(ImageSavePath+'CaseList.dat');
|
for I := 0 to CaseList.Count - 1 do
|
begin
|
ini := Tinifile.Create(ImageSavePath + CaseList.Strings[i]+'\upload\Checkerr.ini');
|
try
|
Errcount := ini.ReadInteger('OMRCount','Count',0);
|
|
for j := 1 to ErrCount do
|
begin
|
Del := ini.ReadBool(inttostr(j),'Del',False); //是否被移除了
|
if Not Del then
|
begin
|
ST.Add(ini.ReadString(inttostr(j),'Reason','')) ;
|
end;
|
end;
|
finally
|
ini.Free;
|
end;
|
end;
|
Result:=ST.Text;
|
ST.Free;
|
CaseList.Free;
|
end;
|
|
|
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;
|
|
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;
|
|
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;
|
|
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;
|
|
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;
|
|
Function TCB_IMGPSScanX.GetDocNoEdit(CaseID,DocNo,DocName:String):String; //取出DocNo是否被異動 (Y/N)
|
var
|
i : Integer;
|
EditedDocDirList : TStringlist;
|
C_DocNoList,C_DocNameList : TStringlist;
|
begin
|
Result := 'N';
|
EditedDocDirList := TStringlist.Create;
|
C_DocNoList := TStringlist.Create;
|
C_DocNameList := TStringlist.Create;
|
try
|
if FileExists(ImageSavePath+CaseID+'\EditedDocDir.dat') then
|
EditedDocDirList.LoadFromFile(ImageSavePath+CaseID+'\EditedDocDir.dat');
|
C_DocNoList.StrictDelimiter := True;
|
C_DocNoList.Delimiter := #9;
|
C_DocNoList.DelimitedText := FC_DocNoList;
|
C_DocNameList.StrictDelimiter := True;
|
C_DocNameList.Delimiter := #9;
|
C_DocNameList.DelimitedText := FC_DocNameList;
|
|
//Showmessage(C_DocNoList.Text);
|
if (DocName = '') and (C_DocNoList.IndexOf(DocNo)=-1 ) then
|
Result := 'Y';
|
if (DocName <> '') and (C_DocNameList.IndexOf(DocName)=-1) then
|
Result := 'Y';
|
for i := 0 to EditedDocDirList.Count - 1 do
|
begin
|
if (DocNo = DocNoDir2DocNo(EditedDocDirList.Strings[i])) then
|
begin
|
Result := 'Y';
|
Break;
|
end;
|
end;
|
finally
|
EditedDocDirList.Free;
|
C_DocNoList.Free;
|
C_DocNameList.Free;
|
end;
|
end;
|
|
Function TCB_IMGPSScanX.GetDocNo_Count(Path,DocNo:String):Integer; //取出文件份數
|
var
|
i : Integer;
|
iCopys : integer;
|
S,S1 : TStringlist;
|
iFormID : String;
|
DocFirst : Boolean;
|
begin
|
Result := 0;
|
if not DocnoNeedGroup(DocNo) then
|
begin
|
Result := 1;
|
Exit;
|
end;
|
|
S := TStringlist.Create;
|
S1 := TStringlist.Create;
|
try
|
S.LoadFromFile(Path+'Context.dat');
|
S1.LoadFromFile(Path+'Context_DocNo.dat');
|
iCopys := 0;
|
|
for i := 0 to S.Count - 1 do
|
begin
|
iFormID := FileName2FormCode(S.Strings[i]);
|
DocFirst := False;
|
if FormCode2Page(iFormID) = '01' then
|
DocFirst := True;
|
if ((iCopys = 0) or DocFirst) and (Docno = S1.Strings[i]) then
|
begin
|
inc(iCopys);
|
end;
|
end;
|
Result := iCopys;
|
finally
|
S.Free;
|
S1.Free;
|
end;
|
end;
|
|
Function TCB_IMGPSScanX.GetDocNo_Page(Path,DocNo:String):Integer; //取出文件總頁數
|
var
|
i : Integer;
|
ipages : integer;
|
S,S1 : TStringlist;
|
begin
|
Result := 0;
|
S := TStringlist.Create;
|
S1 := TStringlist.Create;
|
try
|
S.LoadFromFile(Path+'Context.dat');
|
S1.LoadFromFile(Path+'Context_DocNo.dat');
|
iPages := 0;
|
for i := 0 to S.Count - 1 do
|
begin
|
if Docno = S1.Strings[i] then
|
begin
|
inc(iPages);
|
end;
|
end;
|
Result := ipages;
|
finally
|
S.Free;
|
S1.Free;
|
end;
|
end;
|
|
Function TCB_IMGPSScanX.Case_DocNoExists(CaseID,Docno:String):Boolean; //Docno是否存在案件裡
|
var
|
i : Integer;
|
S : TStringlist;
|
iDocNo : String;
|
begin
|
Result := False;
|
S := TStringlist.Create;
|
try
|
S.LoadFromFile(ImageSavePath + CaseID+'\Context.dat');
|
for i := 0 to S.Count - 1 do
|
begin
|
iDocNo := FormCode2DocNo(FileName2FormCode(S.Strings[i]));
|
if Docno = iDocNo then
|
begin
|
Result := True;
|
Break;
|
end;
|
end;
|
finally
|
S.Free;
|
end;
|
|
end;
|
|
Procedure TCB_IMGPSScanX.ReSortFileName(Path:String); //檔名重新排序
|
var
|
i : Integer;
|
OldName,NewName : String;
|
Filelist : TStringlist;
|
begin
|
Filelist := TStringlist.Create;
|
try
|
if FileExists(Path+'Context.dat') then
|
begin
|
Filelist.LoadFromFile(Path+'Context.dat');
|
for i := 0 to Filelist.Count - 1 do
|
begin
|
OldName := Filelist.Strings[i];
|
//NewName := Add_Zoo(i+1,3)+Copy(OldName,4,length(OldName)-3);
|
NewName := Add_Zoo(i+1,3)+FileName2NoQuene_Filename(OldName);
|
//ShowMessage(OldName+#10#13+NewName);
|
ReNameFile(Path+OldName,Path+NewName);
|
Filelist.Strings[i] := NewName;
|
end;
|
Filelist.SaveToFile(Path+'Context.dat');
|
ContextList.LoadFromFile(Path+'Context.dat');
|
end;
|
finally
|
Filelist.Free;
|
end;
|
end;
|
|
Procedure TCB_IMGPSScanX.ReSortFileName_New(Path:String); //檔名重新排序
|
var
|
i : Integer;
|
OldName,NewName : String;
|
Filelist : TStringlist;
|
begin
|
Filelist := TStringlist.Create;
|
try
|
if FileExists(Path+'Context.dat') then
|
begin
|
Filelist.LoadFromFile(Path+'Context.dat');
|
for i := Filelist.Count - 1 downto 0 do
|
begin
|
OldName := Filelist.Strings[i];
|
//NewName := Add_Zoo(i+1,3)+Copy(OldName,4,length(OldName)-3);
|
NewName := Add_Zoo(i+1,3)+FileName2NoQuene_Filename(OldName);
|
ReNameFile(Path+OldName,Path+NewName);
|
Filelist.Strings[i] := NewName;
|
end;
|
Filelist.SaveToFile(Path+'Context.dat');
|
ContextList.LoadFromFile(Path+'Context.dat');
|
end;
|
finally
|
Filelist.Free;
|
end;
|
end;
|
|
Function TCB_IMGPSScanX.CaseAsk(CaseID: string):Integer;
|
var
|
SendData : String;
|
begin
|
//Memo1.Clear;
|
SendData := 'data='+HTTPEncode(UTF8Encode(FData))+'&verify='+FVerify+'&case_no='+CaseID+'&work_no='+FWork_no;
|
if (FMode = 'NSCAN') or (FMode = 'DSCAN') then
|
begin
|
//ShowMessage('JJJJJ');
|
If not ProcessServlet_Get(HTTPSClient,FURL+'service/imgpsc/IMGPSC05/isnew',SendData,FReWrite,Memo1,False) Then
|
begin
|
HttpErrStr := _Msg('錯誤代碼:')+inttostr(HttpError.HttpErrorCode)+','+HttpError.HttpReason;
|
Result := -1;
|
Exit;
|
end;
|
end;
|
//ShowMessage(SendData);
|
|
IF memo1.Lines.Strings[0] <> '0' Then
|
begin
|
HttpErrStr := _Msg('')+memo1.Lines.Strings[1]+'。';
|
Result := -1;
|
Exit;
|
end
|
Else
|
begin
|
if (memo1.Lines.Count < 2) then
|
begin
|
HttpErrStr := _Msg('')+'OCX:Index Count error';
|
Result := -1;
|
Exit;
|
end
|
Else
|
begin
|
if memo1.Lines.Strings[1] = '0' then
|
begin
|
Result := 0;
|
end
|
Else if memo1.Lines.Strings[1] = '1' then
|
Result := 1
|
Else
|
begin
|
HttpErrStr := _Msg('')+'OCX:Value error';
|
Result := -1;
|
Exit;
|
end;
|
end;
|
end;
|
end;
|
|
Function TCB_IMGPSScanX.CaseComplete(Path,CaseID:String;MainCase:Boolean):Boolean; //通知傳送完成
|
var
|
OMRValue,Batchnum,Usermemo,Checkmemo,UpformID,ReMoveMemo: String;
|
Case_type,Handle_no,Format_id,Cen_Uid,Cen_Cliname,Cen_Platno,Cen_Apolyno,Case_priority : String;
|
Pages : Integer;
|
EnCodeDateTime : String;
|
SendData : String;
|
S : TStringlist;
|
i,v,v1 : Integer;
|
UpSortID : String;
|
begin
|
Result := True;
|
S := TStringlist.Create;
|
try
|
EnCodeDateTime := En_DecryptionStr_Base64('E',ServerDate+GetBalance2Time(Balance),Mpskey);
|
|
UpformID := GetCaseFormID(Path);
|
|
|
Case_type := '0';
|
if FileExists(Path+'Context.dat') then //掃描頁數
|
begin
|
S.LoadFromFile(Path+'Context.dat');
|
Pages := S.Count;
|
end;
|
if not FileExists(ImageSavePath+CaseID+'\CaseIndex.dat') then //如果沒這個檔就重產生預設值
|
begin
|
ClearCaseIndex;
|
WriteCaseIndex(ImageSavePath+CaseID+'\');
|
end;
|
{if FileExists(ImageSavePath+CaseID+'\CaseIndex.dat') then
|
begin
|
S.LoadFromFile(ImageSavePath+CaseID+'\CaseIndex.dat');
|
|
Handle_No := S.Strings[0]; //經辦代號
|
Cen_Uid := S.Strings[1]; //被保人ID
|
Cen_Cliname := S.Strings[2]; //被保人姓名
|
Cen_Platno := S.Strings[3]; //車號
|
Case_Priority := S.Strings[4];//案件等級
|
if FMode = 'SSCAN' then //簽署章件的時候一律傳Format_ID
|
begin
|
Format_ID := S.Strings[5]; //主鍵值 (報價單號or續保單號or保單號碼or保險證號)
|
end
|
Else
|
begin
|
if (Length(UpformID) = 12) and (UpformID[2] = '-') then
|
Format_ID := S.Strings[5] //主鍵值 (報價單號or續保單號or保單號碼or保險證號)
|
else
|
Cen_Apolyno := S.Strings[5]; //強制證號
|
end;
|
if (FMode = 'MSCAN') and (length(Format_ID) = 16) and (Copy(Format_ID,1,2) = '05') then
|
begin
|
Format_ID := Copy(Format_ID,3,14); //20130606 yuu說監理站件的主鍵值為16碼且開開為05的要去掉
|
end;
|
|
end; }
|
if FileExists(ImageSavePath+CaseID+'\GetValue.xml') then //掃描帶值
|
begin
|
S.LoadFromFile(ImageSavePath+CaseID+'\GetValue.xml');
|
OMRValue := Trim(S.Text);
|
end;
|
if MainCase then //雙主約的主要案件
|
begin
|
if FileExists(ImageSavePath+CaseID+'\Batchnum.dat') then
|
begin
|
S.LoadFromFile(ImageSavePath+CaseID+'\Batchnum.dat');
|
Batchnum := Trim(S.Text);
|
end;
|
end
|
Else //雙主約的第二案件
|
begin
|
if FileExists(ImageSavePath+CaseID+'\SecBatchnum.dat') then
|
begin
|
S.LoadFromFile(ImageSavePath+CaseID+'\SecBatchnum.dat');
|
Batchnum := Trim(S.Text);
|
end;
|
end;
|
if FileExists(ImageSavePath+CaseID+'\Scan_Memo.dat') then
|
begin
|
S.LoadFromFile(ImageSavePath+CaseID+'\Scan_Memo.dat');
|
Usermemo := Trim(S.Text);
|
end;
|
if FileExists(ImageSavePath+CaseID+'\CheckMemo.dat') then
|
begin
|
S.LoadFromFile(ImageSavePath+CaseID+'\CheckMemo.dat');
|
Checkmemo := Trim(S.Text);
|
end;
|
|
if FileExists(ImageSavePath+CaseID+'\RemoveMemo.dat') then
|
begin
|
S.LoadFromFile(ImageSavePath+CaseID+'\RemoveMemo.dat');
|
ReMoveMemo := Trim(S.Text);
|
end;
|
|
|
finally
|
S.Free;
|
end;
|
case_priority:='0';
|
if (FMode = 'NSCAN') or (FMode = 'ASCAN') or (FMode = 'DSCAN') or (FMode = 'SSCAN') or (FMode = 'MSCAN') or (FMode = 'RI_SCAN') then
|
begin
|
SendData := 'checktime='+EnCodeDateTime
|
+'&work_no='+FWork_No //作業別
|
+'&case_id='+CaseID //受理編號
|
+'&form_id='+UpformID //表單代號
|
+'&scan_page='+inttostr(pages) //掃描頁數
|
+'&scan_get_value='+HTTPEncode(UTF8Encode(OMRValue)) //掃描帶值
|
+'&case_priority='+case_priority //案件等級
|
+'&batch_no='+batchnum //車隊批號
|
+'&user_memo='+HTTPEncode(UTF8Encode(usermemo)) //使用者註記
|
+'&check_memo='+HTTPEncode(UTF8Encode(checkmemo)) //檢核註記
|
+'&remove_memo='+HTTPEncode(UTF8Encode(ReMoveMemo)) //檢核移除註記
|
+'&case_type='+Case_type //進件種類 進件0 歸檔1
|
+'&handle_no='+Handle_no //經辦代號
|
+'&format_id='+Format_id //案件主鍵值
|
+'&cen_uid='+Cen_Uid //被保人ID
|
+'&cen_cliname='+HTTPEncode(UTF8Encode(Cen_Cliname)) //被保人姓名
|
+'&cen_platno='+Cen_Platno //車牌
|
+'&cen_apolyno='+Cen_Apolyno //強制證號
|
+'&has_authorize='+Has_Authorize; //是否有授權書影像
|
Showmessage(SendData);
|
if not RejectCase then
|
begin
|
If not ProcessServlet(HTTPSClient,FURL+'servlet/CWC05',SendData,FReWrite,Memo1,False) Then
|
begin
|
HttpErrStr := _Msg('錯誤代碼:')+inttostr(HttpError.HttpErrorCode)+','+HttpError.HttpReason;
|
Result := False;
|
Exit;
|
end;
|
end
|
Else
|
begin
|
If not ProcessServlet(HTTPSClient,FURL+'servlet/CWC06',SendData,FReWrite,Memo1,False) Then
|
begin
|
HttpErrStr := _Msg('錯誤代碼:')+inttostr(HttpError.HttpErrorCode)+','+HttpError.HttpReason;
|
Result := False;
|
Exit;
|
end;
|
end;
|
|
|
end
|
Else if FMode = 'ISCAN' then
|
begin
|
SendData := 'checktime='+EnCodeDateTime
|
+'&work_no='+FWork_No
|
+'&case_id='+CaseID
|
+'&form_id='+UpformID
|
+'&format_id='+Format_id
|
+'&scan_page='+inttostr(pages)
|
+'&user_memo='+HTTPEncode(UTF8Encode(usermemo))
|
+'&check_memo='+HTTPEncode(UTF8Encode(checkmemo))
|
+'&remove_memo='+HTTPEncode(UTF8Encode(ReMoveMemo))
|
+'&has_authorize='+Has_Authorize; //是否有授權書影像
|
//Showmessage(SendData);
|
If not ProcessServlet(HTTPSClient,FURL+'servlet/CWC08',SendData,FReWrite,Memo1,False) Then
|
begin
|
HttpErrStr := _Msg('錯誤代碼:')+inttostr(HttpError.HttpErrorCode)+','+HttpError.HttpReason;
|
Result := False;
|
Exit;
|
end;
|
end
|
Else if FMode = 'FSCAN' then
|
begin
|
SendData := 'checktime='+EnCodeDateTime
|
+'&work_no='+FWork_No
|
+'&case_id='+CaseID
|
+'&scan_page='+inttostr(pages)
|
+'&user_memo='+HTTPEncode(UTF8Encode(usermemo))
|
+'&check_memo='+HTTPEncode(UTF8Encode(checkmemo))
|
+'&remove_memo='+HTTPEncode(UTF8Encode(ReMoveMemo))
|
+'&has_authorize='+Has_Authorize; //是否有授權書影像
|
If not ProcessServlet(HTTPSClient,FURL+'servlet/CWC09',SendData,FReWrite,Memo1,False) Then
|
begin
|
HttpErrStr := _Msg('錯誤代碼:')+inttostr(HttpError.HttpErrorCode)+','+HttpError.HttpReason;
|
Result := False;
|
Exit;
|
end;
|
end
|
Else if FMode = 'RSCAN' then
|
begin
|
SendData := 'checktime='+EnCodeDateTime
|
+'&act=rescan'
|
+'&workno='+FWork_No
|
+'&caseid='+CaseID
|
+'&formid='+UpformID
|
+'&scanpage='+inttostr(pages)
|
// +'&areano='+FUserArea
|
+'&scangetvalue='+HTTPEncode(UTF8Encode(OMRValue))
|
+'&usermemo='+HTTPEncode(UTF8Encode(usermemo))
|
+'&checkmemo='+HTTPEncode(UTF8Encode(checkmemo))
|
+'&removememo='+HTTPEncode(UTF8Encode(ReMoveMemo))
|
+'&has_authorize='+Has_Authorize; //是否有授權書影像
|
If not ProcessServlet(HTTPSClient,FURL+'servlet/CWC01',SendData,FReWrite,Memo1,False) Then
|
begin
|
HttpErrStr := _Msg('錯誤代碼:')+inttostr(HttpError.HttpErrorCode)+','+HttpError.HttpReason;
|
Result := False;
|
Exit;
|
end;
|
end
|
Else if FMode = 'ESCAN' then
|
begin
|
SendData := 'checktime='+EnCodeDateTime
|
+'&act=escan'
|
+'&workno='+FWork_No
|
+'&caseid='+CaseID
|
+'&formid='+UpformID
|
+'&scanpage='+inttostr(pages)
|
+'&batchnum='+batchnum
|
+'&usermemo='+HTTPEncode(UTF8Encode(usermemo))
|
+'&checkmemo='+HTTPEncode(UTF8Encode(checkmemo))
|
+'&removememo='+HTTPEncode(UTF8Encode(ReMoveMemo))
|
+'&has_authorize='+Has_Authorize; //是否有授權書影像
|
If not ProcessServlet(HTTPSClient,FURL+'servlet/CWC01',SendData,FReWrite,Memo1,False) Then
|
begin
|
HttpErrStr := _Msg('錯誤代碼:')+inttostr(HttpError.HttpErrorCode)+','+HttpError.HttpReason;
|
Result := False;
|
Exit;
|
end;
|
end;
|
|
if Memo1.Lines.Strings[0] <> '0'then
|
begin
|
HttpErrStr := _Msg('錯誤原因:')+Memo1.Lines.Strings[1];
|
Result := False;
|
Exit;
|
end;
|
end;
|
|
procedure TCB_IMGPSScanX.Set_caseid(const Value: WideString);
|
begin
|
FCaseID := Value;
|
end;
|
|
procedure TCB_IMGPSScanX.Set_data(const Value: WideString);
|
begin
|
FData := Value;
|
end;
|
|
procedure TCB_IMGPSScanX.Set_c_docnolist(const Value: WideString);
|
begin
|
FC_DocNoList := Value;
|
end;
|
|
procedure TCB_IMGPSScanX.Set_fixfilelist(const Value: WideString);
|
begin
|
FFixFileList := Value;
|
end;
|
|
procedure TCB_IMGPSScanX.Set_oldcaseinfo(const Value: WideString);
|
begin
|
FOldCaseInfo := Value;
|
end;
|
|
function TCB_IMGPSScanX.Get_c_docnolist: WideString;
|
begin
|
|
end;
|
|
function TCB_IMGPSScanX.Get_caseid: WideString;
|
begin
|
|
end;
|
|
function TCB_IMGPSScanX.Get_data: WideString;
|
begin
|
|
end;
|
|
function TCB_IMGPSScanX.Get_fixfilelist: WideString;
|
begin
|
|
end;
|
|
function TCB_IMGPSScanX.Get_oldcaseinfo: WideString;
|
begin
|
|
end;
|
|
function TCB_IMGPSScanX.Get_is_oldcase: WideString;
|
begin
|
|
end;
|
|
procedure TCB_IMGPSScanX.Set_is_oldcase(const Value: WideString);
|
begin
|
FIs_OldCase := UpperCase(Value);
|
end;
|
|
function TCB_IMGPSScanX.Get_casenolength: WideString;
|
begin
|
|
end;
|
|
function TCB_IMGPSScanX.Get_filesizelimit: WideString;
|
begin
|
|
end;
|
|
procedure TCB_IMGPSScanX.Set_casenolength(const Value: WideString);
|
begin
|
if Value ='' then
|
begin
|
FCaseNoLength := 0 ;
|
CaseIDLength := FCaseNoLength;
|
end
|
else
|
begin
|
FCaseNoLength := StrToInt(Value) ;
|
CaseIDLength := FCaseNoLength;
|
end;
|
|
end;
|
|
procedure TCB_IMGPSScanX.Set_filesizelimit(const Value: WideString);
|
begin
|
//ShowMessage(Value);
|
FFileSizeLimit:=0;
|
if Value ='' then
|
begin
|
FFileSizeLimit := 5*1024;
|
end
|
else
|
begin
|
FFileSizeLimit := StrToInt(Value);
|
end;
|
|
end;
|