|
@@ -175,6 +175,8 @@ type
|
|
|
|
|
|
procedure LoadSignOnlineSwitch;
|
|
|
procedure LoadEpureOnlineSwitch;
|
|
|
+ procedure LoadOnlineInfo;
|
|
|
+ procedure CheckOnlineSignStatusAndUpdate(ARec: TsdDataRecord);
|
|
|
public
|
|
|
constructor Create(AOwner: TComponent); override;
|
|
|
destructor Destroy; override;
|
|
@@ -1907,8 +1909,12 @@ begin
|
|
|
LoadSignOnlineSwitch;
|
|
|
if (FSignOnlineSwitch = 0) then
|
|
|
WarningMessage('云端未开启在线签署功能。')
|
|
|
- else if SelectOnlineSignPhase(iPhase, stdProjects.IDTree.Selected.Rec) then
|
|
|
- SignOnline(stdProjects.IDTree.Selected, iPhase);
|
|
|
+ else
|
|
|
+ begin
|
|
|
+ CheckOnlineSignStatusAndUpdate(stdProjects.IDTree.Selected.Rec);
|
|
|
+ if SelectOnlineSignPhase(iPhase, stdProjects.IDTree.Selected.Rec) then
|
|
|
+ SignOnline(stdProjects.IDTree.Selected, iPhase);
|
|
|
+ end;
|
|
|
end;
|
|
|
|
|
|
procedure TProjectManagerFrame.actnSignOnlineUpdate(Sender: TObject);
|
|
@@ -2123,4 +2129,148 @@ begin
|
|
|
vRec.EndUpdate;
|
|
|
end;
|
|
|
|
|
|
+procedure TProjectManagerFrame.CheckOnlineSignStatusAndUpdate(
|
|
|
+ ARec: TsdDataRecord);
|
|
|
+
|
|
|
+ function SearchFileOnline(AURL: string; var ADownURL, AFolder, ASubFolder, ABidName, AMD5Web, AError: string; var AFolderID, ASubFolderID: Integer): Integer;
|
|
|
+ var vArr: TOVArr;
|
|
|
+ begin
|
|
|
+ Result := PHPWeb.Search(AURL, [''], [''], vArr);
|
|
|
+ AError := '';
|
|
|
+ if Result = 1 then
|
|
|
+ begin
|
|
|
+ if High(vArr) >= 0 then
|
|
|
+ begin
|
|
|
+ ADownURL := vArr[0, 0];
|
|
|
+ AFolder := vArr[0, 2];
|
|
|
+ ASubFolder := vArr[0, 3];
|
|
|
+ AMD5Web := vArr[0, 1];
|
|
|
+ AFolderID := StrToInt(vArr[0, 4]);
|
|
|
+ ASubFolderID := StrToInt(vArr[0, 5]);
|
|
|
+ ABidName := vArr[0, 6];
|
|
|
+ end
|
|
|
+ else
|
|
|
+ Result := 10; // 返回10,表示无记录。用这个数字代表是否觉得怪异?没办法,0被占用了。
|
|
|
+ end
|
|
|
+ else if Result = 0 then
|
|
|
+ AError := PHPWeb.PageError('标段更新数据失败')
|
|
|
+ else if Result = -1 then
|
|
|
+ AError := PHPWeb.NetError('标段更新数据失败');
|
|
|
+ end;
|
|
|
+
|
|
|
+var
|
|
|
+ sSearchURL, sDownURL, sHint,
|
|
|
+ sMD5_UnLock, sError, sLocalFile: string;
|
|
|
+ iSearch, iFolderID, iSubFolderID: Integer;
|
|
|
+ bLock, bCanImp: Boolean;
|
|
|
+ vFileCheck: TTenderFileChecker;
|
|
|
+begin
|
|
|
+ GetLocalValues(ARec);
|
|
|
+ if FWebID = 0 then Exit;
|
|
|
+ LoadOnlineInfo;
|
|
|
+ // 先按正常接口找到最新的MD5码看是否需要更新
|
|
|
+ sSearchURL := Format('%stender/get/%d/update', [PHPWeb.MeasureURL, FWebID]);
|
|
|
+ iSearch := SearchFileOnline(sSearchURL, sDownURL, FWebFolder_OnLine, FWebSubFolder_OnLine, FWebBidName_OnLine, FWebMD5_OnLine, sError, iFolderID, iSubFolderID);
|
|
|
+
|
|
|
+ if iSearch = 1 then
|
|
|
+ begin
|
|
|
+ CheckWebFolders(iFolderID, iSubFolderID, FWebFolder_OnLine, FWebSubFolder_OnLine);
|
|
|
+ CheckBidName(FID, FWebBidName_OnLine);
|
|
|
+
|
|
|
+ // 打开前一定要先下载最新的标段文件(无论审核有没有通过)
|
|
|
+ if FWebMD5_OnLine <> FWebMD5_Local then
|
|
|
+ if not FileDownAndReceive(sDownURL, 1) then Exit;
|
|
|
+
|
|
|
+ // 编制人且项目末通过
|
|
|
+ if (FWebAuthorID = PHPWeb.UserID) and (FWebCheckStatusProject = csNotPass) then
|
|
|
+ begin
|
|
|
+ sHint := '本期计量审批不通过,你现在可以:' + #10#13 + '点击【是(Y)】重新开始本期计量,软件将打开本期上报时的数据,开始重新计量;' +
|
|
|
+ #10#13 +'点击【否(N)】查看不通过计量,软件将打开本期最后审批的数据,重新打开标段' + '可再次打开本确认窗口。';
|
|
|
+ if Application.MessageBox(PChar(sHint), '询问', MB_YESNO + MB_ICONQUESTION) = ID_Yes then
|
|
|
+ begin
|
|
|
+ // 查找原报的文件
|
|
|
+ sSearchURL := Format('%suser/get/%d/%d/report/file', [PHPWeb.MeasureURL, FWebID, FPhaseNo]);
|
|
|
+ case SearchFileOnline(sSearchURL, sDownURL, FWebFolder_OnLine, FWebSubFolder_OnLine, FWebBidName_OnLine, sMD5_UnLock, sError, iFolderID, iSubFolderID) of
|
|
|
+ 1: ; // 原报文件已正确找到
|
|
|
+ 0, -1:
|
|
|
+ begin
|
|
|
+ sHint := sError + ' 因网络出错,无法连接到云端以获取本期原报上传的文件,无法重新开始本期,请重试。';
|
|
|
+ Application.MessageBox(PChar(sHint), '警告', MB_OK + MB_ICONWARNING);
|
|
|
+ Exit;
|
|
|
+ end;
|
|
|
+ end;
|
|
|
+
|
|
|
+ if FileDownAndReceive(sDownURL, 2) then
|
|
|
+ begin
|
|
|
+ // 这里在线上创建新一期审批人列表、更改标段状态。不再使用同步更新等。
|
|
|
+ sSearchURL := Format('%suser/create/%d/%d/new/audit', [PHPWeb.MeasureURL, FWebID, FPhaseNo]);
|
|
|
+ case SearchFileOnline(sSearchURL, sDownURL, FWebFolder_OnLine, FWebSubFolder_OnLine, FWebBidName_OnLine, sMD5_UnLock, sError, iFolderID, iSubFolderID) of
|
|
|
+ 1, 10: // 执行到这里线上审核人列表已创建完毕。无需返回记录值,所以返回值为10。1是为了兼容。
|
|
|
+ begin
|
|
|
+ sHint := '【十分重要】:本期计量已重新开始,原报在本次上报完成前,请勿删除该标段或更换电脑。';
|
|
|
+ Application.MessageBox(PChar(sHint), '提示', MB_OK + MB_ICONINFORMATION);
|
|
|
+ end;
|
|
|
+
|
|
|
+ 0, -1:
|
|
|
+ begin
|
|
|
+ sHint := sError + ' 因网络出错,无法在线上创建新一期审批人列表、提交项目状态等,请重试。';
|
|
|
+ Application.MessageBox(PChar(sHint), '警告', MB_OK + MB_ICONWARNING);
|
|
|
+ Exit;
|
|
|
+ end;
|
|
|
+ end;
|
|
|
+ end
|
|
|
+ else
|
|
|
+ Exit;
|
|
|
+ end;
|
|
|
+ end;
|
|
|
+ end
|
|
|
+ else if (iSearch = 10) then
|
|
|
+ begin
|
|
|
+ if not PHPWeb.ExistInServer(FWebID) then
|
|
|
+ begin
|
|
|
+ sHint :='该项目[' + FWebBidName_Local + ']在云端已被删除,点击"确定"后,可手动删除该项目。';
|
|
|
+ Application.MessageBox(PChar(sHint), '提示', MB_OK + MB_ICONINFORMATION);
|
|
|
+ Exit;
|
|
|
+ end;
|
|
|
+ end
|
|
|
+ else if (iSearch = 0) or (iSearch = -1) then
|
|
|
+ begin
|
|
|
+ sHint := sError + '(因网络出错,无法检测[' + FWebBidName_Local + ']在云端是否有更新,本次操作已取消,请重试)。';
|
|
|
+ Application.MessageBox(PChar(sHint), '警告', MB_OK + MB_ICONWARNING);
|
|
|
+ Exit;
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TProjectManagerFrame.LoadOnlineInfo;
|
|
|
+var
|
|
|
+ vPSArr: TStrArr;
|
|
|
+ vCArr: TOVArr; // Checkers
|
|
|
+ sPicPath, sURL: string;
|
|
|
+begin
|
|
|
+ SetLength(vPSArr, 8);
|
|
|
+ sURL := Format('%smeasure/status/%d/get', [PHPWeb.MeasureURL, FWebID]);
|
|
|
+ if PHPWeb.Search(sURL, [''], [''], 3, vPSArr, vCArr) = 1 then
|
|
|
+ begin
|
|
|
+ FPhaseNo := StrToInt(vPSArr[0]);
|
|
|
+ FWebCheckStatusProject := TCheckStatus(StrToInt(vPSArr[1])-1);
|
|
|
+ FPhaseTotal := StrToInt(vPSArr[2]);
|
|
|
+ FWebFolder_OnLine := vPSArr[3];
|
|
|
+ FWebSubFolder_OnLine := vPSArr[4];
|
|
|
+ FWebOwnerName := vPSArr[5];
|
|
|
+ FWebOwnerCompany := vPSArr[6];
|
|
|
+ FWebOwnerRole := vPSArr[7];
|
|
|
+ end
|
|
|
+ else
|
|
|
+ begin
|
|
|
+ FPhaseNo := 0;
|
|
|
+ FWebCheckStatusProject := csNotBegin;
|
|
|
+ FPhaseTotal := 0;
|
|
|
+ FWebFolder_OnLine := '';
|
|
|
+ FWebSubFolder_OnLine := '';
|
|
|
+ FWebOwnerName := '';
|
|
|
+ FWebOwnerCompany := '';
|
|
|
+ FWebOwnerRole := '';
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
end.
|