Browse Source

线上审批Bug:
①逻辑问题:1审线下审批,2审、3审线上审批,1审再打开时无法通过"审核人不一致"检验。原因:1审是最后上传文件的,1审再次打开时,无新文件更新,不能触发接收插表动作。目前一切动作是基于新文件的下载更新接收插表,否则再次打开时会覆盖本地。接收必须由MD5不一致触发,不能由线上审批标记触发。否则,第一次打开,插表;第二次打开,再插表,悲剧发生。目前采用的解决方案是每次线上审批时强制更改后台MD5,这样干是否会带来其它逻辑问题有待观察。
②时序问题:扫描我参与的全部项目时,不能接收插表。原因:扫描列出所有参与项目时(下载接收),并没有一次性查询载入所有项目审核人列表(导致不能获取线上审批的起止标记,无法接收插表),当点击单个项目时再查询载入审核人列表,这样设计的目的是因为一次性查询载入耗时巨大,且没必要,分开实时载入既能保证最新,又能解决登录软件时的速度问题,但错过了接收插表时机。

CSL 9 năm trước cách đây
mục cha
commit
961a600777
3 tập tin đã thay đổi với 22 bổ sung13 xóa
  1. 2 2
      Dprs/CSL/Measure_Cloud.dof
  2. BIN
      Dprs/CSL/Measure_Cloud.res
  3. 20 11
      Frames/ProjectManagerFme.pas

+ 2 - 2
Dprs/CSL/Measure_Cloud.dof

@@ -115,7 +115,7 @@ AutoIncBuild=1
 MajorVer=3
 MinorVer=1
 Release=3
-Build=1069
+Build=1071
 Debug=0
 PreRelease=0
 Special=0
@@ -126,7 +126,7 @@ CodePage=936
 [Version Info Keys]
 CompanyName=珠海纵横创新软件有限公司
 FileDescription=纵横结算决算计量一体化云版
-FileVersion=3.1.3.1069
+FileVersion=3.1.3.1071
 InternalName=Measure
 LegalCopyright=版权所有(C) 珠海纵横创新软件有限公司 2003-2014。保留所有权利。
 LegalTrademarks=Measure

BIN
Dprs/CSL/Measure_Cloud.res


+ 20 - 11
Frames/ProjectManagerFme.pas

@@ -1042,7 +1042,7 @@ var
 
         Continue;
       end;
-      
+
       AddChecker(cftChecker, vCArr[i]);
     end;
     if vOwner[0] <> '' then
@@ -1256,9 +1256,11 @@ end;
 
 procedure TProjectManagerFrame.DoBatchReceiveOnline(ARequestType: Integer);
 var
-  sURL, sHint: string;
+  sURL, sCheckersURL, sHint: string;
   vArr: TOVArr;
   i, iFolderID, iSubFolderID: Integer;
+  vPSArr: TStrArr;
+  vCArr: TOVArr;    // Checkers
 begin
   // 查询等待我审核的标段文件,杰哥说分三种:①业主未审核 ②业主审核中 ③审核人审核中 (为什么加①?问杰哥)
   case PHPWeb.Search(PHPWeb.MeasureURL + 'user/get/audit/project', ['audituid', 'RequestType'],
@@ -1285,7 +1287,18 @@ begin
           CheckBidName(PHPWeb.UserID, FWebID, FWebBidName_OnLine);
 
           if FWebMD5_OnLine <> FWebMD5_Local then
+          begin
+            sCheckersURL := Format('%smeasure/status/%d/get', [PHPWeb.MeasureURL, FWebID]);
+            if PHPWeb.Search(sCheckersURL, [''], [''], 3, vPSArr, vCArr) = 1 then
+              OnLineChecker(vCArr, FOnLineCheckerBegin, FOnLineCheckerEnd)
+            else
+            begin
+              FOnLineCheckerBegin := 0;
+              FOnLineCheckerEnd := 0;
+            end;
+
             if not FileDownAndReceive(sURL, 1) then Exit;
+          end;
         end;
 
         BubbleSortProjects;
@@ -1668,26 +1681,22 @@ begin
   sLocalFile := PHPWeb.UserPath + ExtractFileName(ADownURL);
   if not PHPWeb.DownFile(ADownURL, sLocalFile) then
   begin
-    if AReceiveKind = 1 then
-      sHint := Format('云端已找到[%s]的新文件,但由于网络原因下载失败!请重试!', [FWebBidName_Local])
-    else if AReceiveKind = 2 then
-      sHint := '云端已找到原报上传的无锁文件,但因网络出错无法下载,本次操作已取消。请重试!';
-
+    sHint := Format('云端已找到[%s]的新文件,但由于网络原因下载失败!请重试!', [FWebBidName_Local]);
     Application.MessageBox(PChar(sHint), '系统提醒', MB_OK + MB_ICONWARNING);
     Exit;
   end;
 
-  // 打回情况,重新接收原报文件
+  // 接收前先检验原报文件是否正确(审核不通过打回)
   if AReceiveKind = 2 then
   begin
-    // 有时原报文件出错:包含了1审2审的数据。所以导入前须检测。
+    // 有时原报文件出错:包含了1审2审的数据。
     vFileCheck := TTenderFileChecker.Create;
     try
       // 有一期以上数据,且最新期数据审核状态为原报
       bCanImp := vFileCheck.CheckFileValid(sLocalFile) and (vFileCheck.PhaseCount > 0) and (vFileCheck.AuditStatus = 0);
       if not bCanImp then
       begin
-        Application.MessageBox(PChar('已从云端下载原报文件到本地,但文件有错误,禁止导入!请致电纵横服务人员以获取帮助。'),
+        Application.MessageBox(PChar('已从云端下载原报文件到本地,但文件有错误(包含1审数据)禁止接收!请致电纵横服务人员以获取帮助。'),
           '警告', MB_OK + MB_ICONWARNING);
         Exit;
       end;
@@ -1734,7 +1743,7 @@ begin
     vCS := TCheckStatus(StrToInt(AAr[i, 5])-1);
     if vCS = csChecking then
     begin
-      n := i;  // 非常重要:传入的数组必须从第一个审核人到轮到工作中的那个人的前一个人
+      n := i - 1;  // 非常重要:传入的数组必须从第一个审核人到轮到工作中的那个人的前一个人
       Break;
     end;
   end;