Преглед изворни кода

Merge branch 'master' of http://192.168.1.12:3000/maixinrong/measure

builder пре 8 година
родитељ
комит
e976d83216

+ 80 - 65
DataModules/ProjectManagerDm.dfm

@@ -18,73 +18,88 @@ object ProjectManagerData: TProjectManagerData
     FieldListData = {
       0101044E616D6506024944094669656C644E616D650602494408446174615479
       70650203084461746153697A6502040549734B6579080F4E65656450726F6365
-      73734E616D65090001044E616D650608506172656E744944094669656C644E61
-      6D650608506172656E7449440844617461547970650203084461746153697A65
-      02040549734B6579080F4E65656450726F636573734E616D65090001044E616D
-      65060D4E6578745369626C696E674944094669656C644E616D65060D4E657874
-      5369626C696E6749440844617461547970650203084461746153697A65020405
-      49734B6579080F4E65656450726F636573734E616D65090001044E616D650604
-      4E616D65094669656C644E616D6506044E616D65084461746154797065021808
-      4461746153697A6503FF000549734B6579080F4E65656450726F636573734E61
-      6D65090001044E616D65060454797065094669656C644E616D65060454797065
-      0844617461547970650203084461746153697A6502040549734B6579080F4E65
-      656450726F636573734E616D65090001044E616D65060E4465616C546F74616C
-      5072696365094669656C644E616D65060E4465616C546F74616C507269636508
-      44617461547970650206084461746153697A6502080549734B6579080F4E6565
-      6450726F636573734E616D65090001044E616D65060F5068617365546F74616C
-      5072696365094669656C644E616D65060F5068617365546F74616C5072696365
-      0844617461547970650206084461746153697A6502080549734B6579080F4E65
-      656450726F636573734E616D65090001044E616D650611456E644465616C546F
-      74616C5072696365094669656C644E616D650611456E644465616C546F74616C
-      50726963650844617461547970650206084461746153697A6502080549734B65
-      79080F4E65656450726F636573734E616D65090001044E616D650613456E6443
-      68616E6765546F74616C5072696365094669656C644E616D650613456E644368
-      616E6765546F74616C5072696365084461746154797065020608446174615369
-      7A6502080549734B6579080F4E65656450726F636573734E616D65090001044E
-      616D65060D456E64546F74616C5072696365094669656C644E616D65060D456E
-      64546F74616C50726963650844617461547970650206084461746153697A6502
-      080549734B6579080F4E65656450726F636573734E616D65090001044E616D65
-      060D507265546F74616C5072696365094669656C644E616D65060D507265546F
-      74616C50726963650844617461547970650206084461746153697A6502080549
-      734B6579080F4E65656450726F636573734E616D65090001044E616D65060850
-      68617365506179094669656C644E616D65060850686173655061790844617461
-      547970650206084461746153697A6502080549734B6579080F4E65656450726F
-      636573734E616D65090001044E616D65060A5068617365436F756E7409466965
-      6C644E616D65060A5068617365436F756E740844617461547970650203084461
+      73734E616D650909507265636973696F6E02000453697A6502000001044E616D
+      650608506172656E744944094669656C644E616D650608506172656E74494408
+      44617461547970650203084461746153697A6502040549734B6579080F4E6565
+      6450726F636573734E616D650909507265636973696F6E02000453697A650200
+      0001044E616D65060D4E6578745369626C696E674944094669656C644E616D65
+      060D4E6578745369626C696E6749440844617461547970650203084461746153
+      697A6502040549734B6579080F4E65656450726F636573734E616D6509095072
+      65636973696F6E02000453697A6502000001044E616D6506044E616D65094669
+      656C644E616D6506044E616D650844617461547970650218084461746153697A
+      6503FF000549734B6579080F4E65656450726F636573734E616D650909507265
+      636973696F6E02000453697A6502000001044E616D6506045479706509466965
+      6C644E616D650604547970650844617461547970650203084461746153697A65
+      02040549734B6579080F4E65656450726F636573734E616D6509095072656369
+      73696F6E02000453697A6502000001044E616D65060E4465616C546F74616C50
+      72696365094669656C644E616D65060E4465616C546F74616C50726963650844
+      617461547970650206084461746153697A6502080549734B6579080F4E656564
+      50726F636573734E616D650909507265636973696F6E02000453697A65020000
+      01044E616D65060F5068617365546F74616C5072696365094669656C644E616D
+      65060F5068617365546F74616C50726963650844617461547970650206084461
+      746153697A6502080549734B6579080F4E65656450726F636573734E616D6509
+      09507265636973696F6E02000453697A6502000001044E616D650611456E6444
+      65616C546F74616C5072696365094669656C644E616D650611456E644465616C
+      546F74616C50726963650844617461547970650206084461746153697A650208
+      0549734B6579080F4E65656450726F636573734E616D65090950726563697369
+      6F6E02000453697A6502000001044E616D650613456E644368616E6765546F74
+      616C5072696365094669656C644E616D650613456E644368616E6765546F7461
+      6C50726963650844617461547970650206084461746153697A6502080549734B
+      6579080F4E65656450726F636573734E616D650909507265636973696F6E0200
+      0453697A6502000001044E616D65060D456E64546F74616C5072696365094669
+      656C644E616D65060D456E64546F74616C507269636508446174615479706502
+      06084461746153697A6502080549734B6579080F4E65656450726F636573734E
+      616D650909507265636973696F6E02000453697A6502000001044E616D65060D
+      507265546F74616C5072696365094669656C644E616D65060D507265546F7461
+      6C50726963650844617461547970650206084461746153697A6502080549734B
+      6579080F4E65656450726F636573734E616D650909507265636973696F6E0200
+      0453697A6502000001044E616D6506085068617365506179094669656C644E61
+      6D65060850686173655061790844617461547970650206084461746153697A65
+      02080549734B6579080F4E65656450726F636573734E616D6509095072656369
+      73696F6E02000453697A6502000001044E616D65060A5068617365436F756E74
+      094669656C644E616D65060A5068617365436F756E7408446174615479706502
+      03084461746153697A6502040549734B6579080F4E65656450726F636573734E
+      616D650909507265636973696F6E02000453697A6502000001044E616D65060B
+      4175646974537461747573094669656C644E616D65060B417564697453746174
+      75730844617461547970650203084461746153697A6502040549734B6579080F
+      4E65656450726F636573734E616D650909507265636973696F6E02000453697A
+      6502000001044E616D65060846696C654E616D65094669656C644E616D650608
+      46696C654E616D650844617461547970650201084461746153697A6503FF0005
+      49734B6579080F4E65656450726F636573734E616D650909507265636973696F
+      6E02000453697A6502000001044E616D65060A43726561746544617465094669
+      656C644E616D65060A4372656174654461746508446174615479706502010844
+      61746153697A6503FF000549734B6579080F4E65656450726F636573734E616D
+      650909507265636973696F6E02000453697A6502000001044E616D65060C4261
+      636B7570466F6C646572094669656C644E616D65060C4261636B7570466F6C64
+      65720844617461547970650218084461746153697A6502320549734B6579080F
+      4E65656450726F636573734E616D650909507265636973696F6E02000453697A
+      6502000001044E616D6506124465616C5F42474C546F74616C50726963650946
+      69656C644E616D6506124465616C5F42474C546F74616C507269636508446174
+      61547970650206084461746153697A6502080549734B6579080F4E6565645072
+      6F636573734E616D650909507265636973696F6E02000453697A650200000104
+      4E616D6506055765624944094669656C644E616D650605576562494408446174
+      61547970650203084461746153697A6502040549734B6579080F4E6565645072
+      6F636573734E616D650909507265636973696F6E02000453697A650200000104
+      4E616D65060A5765624F776E65724944094669656C644E616D65060A5765624F
+      776E657249440844617461547970650203084461746153697A6502040549734B
+      6579080F4E65656450726F636573734E616D650909507265636973696F6E0200
+      0453697A6502000001044E616D65060B576562417574686F724944094669656C
+      644E616D65060B576562417574686F7249440844617461547970650203084461
       746153697A6502040549734B6579080F4E65656450726F636573734E616D6509
-      0001044E616D65060B4175646974537461747573094669656C644E616D65060B
-      41756469745374617475730844617461547970650203084461746153697A6502
-      040549734B6579080F4E65656450726F636573734E616D65090001044E616D65
-      060846696C654E616D65094669656C644E616D65060846696C654E616D650844
-      617461547970650201084461746153697A6503FF000549734B6579080F4E6565
-      6450726F636573734E616D65090001044E616D65060A43726561746544617465
-      094669656C644E616D65060A4372656174654461746508446174615479706502
-      01084461746153697A6503FF000549734B6579080F4E65656450726F63657373
-      4E616D65090001044E616D65060C4261636B7570466F6C646572094669656C64
-      4E616D65060C4261636B7570466F6C6465720844617461547970650218084461
-      746153697A6502320549734B6579080F4E65656450726F636573734E616D6509
-      0001044E616D6506124465616C5F42474C546F74616C5072696365094669656C
-      644E616D6506124465616C5F42474C546F74616C507269636508446174615479
-      70650206084461746153697A6502080549734B6579080F4E65656450726F6365
-      73734E616D65090001044E616D6506055765624944094669656C644E616D6506
-      0557656249440844617461547970650203084461746153697A6502040549734B
-      6579080F4E65656450726F636573734E616D65090001044E616D65060A576562
-      4F776E65724944094669656C644E616D65060A5765624F776E65724944084461
+      09507265636973696F6E02000453697A6502000001044E616D6506065765624D
+      4435094669656C644E616D6506065765624D4435084461746154797065020108
+      4461746153697A6503FF000549734B6579080F4E65656450726F636573734E61
+      6D650909507265636973696F6E02000453697A6502000001044E616D65060957
+      6562557365724944094669656C644E616D650609576562557365724944084461
       7461547970650203084461746153697A6502040549734B6579080F4E65656450
-      726F636573734E616D65090001044E616D65060B576562417574686F72494409
-      4669656C644E616D65060B576562417574686F72494408446174615479706502
-      03084461746153697A6502040549734B6579080F4E65656450726F636573734E
-      616D65090001044E616D6506065765624D4435094669656C644E616D65060657
-      65624D44350844617461547970650201084461746153697A6503FF000549734B
-      6579080F4E65656450726F636573734E616D65090001044E616D650609576562
-      557365724944094669656C644E616D6506095765625573657249440844617461
-      547970650203084461746153697A6502040549734B6579080F4E65656450726F
-      636573734E616D65090001044E616D65060E576562466F6C6465724C6576656C
-      094669656C644E616D65060E576562466F6C6465724C6576656C084461746154
-      7970650203084461746153697A6502040549734B6579080F4E65656450726F63
-      6573734E616D65090001044E616D6506065765624B6579094669656C644E616D
-      6506065765624B65790844617461547970650201084461746153697A6503FF00
-      0549734B6579080F4E65656450726F636573734E616D65090000}
+      726F636573734E616D650909507265636973696F6E02000453697A6502000001
+      044E616D65060E576562466F6C6465724C6576656C094669656C644E616D6506
+      0E576562466F6C6465724C6576656C0844617461547970650203084461746153
+      697A6502040549734B6579080F4E65656450726F636573734E616D6509095072
+      65636973696F6E02000453697A6502000001044E616D6506065765624B657909
+      4669656C644E616D6506065765624B6579084461746154797065020108446174
+      6153697A6503FF000549734B6579080F4E65656450726F636573734E616D6509
+      09507265636973696F6E02000453697A6502000000}
   end
   object sdvProjectsInfo: TsdDataView
     Active = False

+ 22 - 14
DataModules/ProjectManagerDm.pas

@@ -27,7 +27,6 @@ type
   private
     FConnection: TCommonConnection;
     FProjectsTree: TsdIDTree;
-    FBackupManager: TBackupManager;
 
     procedure UpdateManagerDataBase;
 
@@ -88,8 +87,6 @@ begin
   FProjectsTree.AutoExpand := True;
   FProjectsTree.SeedID := 1;
   FProjectsTree.DataView := sdvProjectsInfo;
-
-  FBackupManager := TBackupManager.Create;
 end;
 
 procedure TProjectManagerData.CreateNewProjectFile(const AName: string);
@@ -118,7 +115,6 @@ end;
 
 destructor TProjectManagerData.Destroy;
 begin
-  FBackupManager.Free;
   FProjectsTree.Free;
   FConnection.Free;
   inherited;
@@ -500,31 +496,43 @@ end;
 
 procedure TProjectManagerData.AddOpenTenderBackup(AProjectID: Integer);
 var
+  vBackupManager: TBackupManager;
   BackupRec, Rec: TsdDataRecord;
   sBackupFile: string;
 begin
   Rec := sddProjectsInfo.FindKey('idxID', AProjectID);
   if not Assigned(Rec) then Exit;
 
-  FBackupManager.LoadBackupFile(BackupPath(AProjectID));
-  if FBackupManager.LastestOpenBackupIsToday then Exit;
-  sBackupFile := FBackupManager.OpenBackupFile;
-  if FileExists(sBackupFile) then DeleteFile(sBackupFile);
-  ExportTender(Rec, sBackupFile);
+  vBackupManager := TBackupManager.Create;
+  try
+    vBackupManager.LoadBackupFile(BackupPath(AProjectID));
+    if vBackupManager.LastestOpenBackupIsToday then Exit;
+    sBackupFile := vBackupManager.OpenBackupFile;
+    if FileExists(sBackupFile) then DeleteFile(sBackupFile);
+    ExportTender(Rec, sBackupFile);
+  finally
+    vBackupManager.Free;
+  end;
 end;
 
 procedure TProjectManagerData.AddSaveTenderBackup(AProjectID: Integer);
-var
+var          
+  vBackupManager: TBackupManager;
   BackupRec, Rec: TsdDataRecord;
   sBackupFile: string;
 begin
   Rec := sddProjectsInfo.FindKey('idxID', AProjectID);
   if not Assigned(Rec) then Exit;
 
-  FBackupManager.LoadBackupFile(BackupPath(AProjectID));
-  sBackupFile := FBackupManager.SaveBackupFile;
-  if FileExists(sBackupFile) then DeleteFile(sBackupFile);
-  ExportTender(Rec, sBackupFile);
+  vBackupManager := TBackupManager.Create;
+  try
+    vBackupManager.LoadBackupFile(BackupPath(AProjectID));
+    sBackupFile := vBackupManager.SaveBackupFile;
+    if FileExists(sBackupFile) then DeleteFile(sBackupFile);
+    ExportTender(Rec, sBackupFile);
+  finally
+    vBackupManager.Free;
+  end;
 end;
 
 procedure TProjectManagerData.ExportTender(ARec: TsdDataRecord;

+ 12 - 12
Forms/MainFrm.dfm

@@ -21,7 +21,7 @@ object MainForm: TMainForm
   object jtsProjects: TJimTabSet
     Left = 0
     Top = 49
-    Width = 734
+    Width = 742
     Height = 21
     Align = alTop
     BackgroundColor = clGradientInactiveCaption
@@ -45,8 +45,8 @@ object MainForm: TMainForm
   end
   object dxStatusBar: TdxStatusBar
     Left = 0
-    Top = 480
-    Width = 734
+    Top = 487
+    Width = 742
     Height = 20
     Panels = <
       item
@@ -78,12 +78,12 @@ object MainForm: TMainForm
     object dxStatusBarContainer2: TdxStatusBarContainerControl
       Left = 604
       Top = 2
-      Width = 128
+      Width = 136
       Height = 16
       object ProgressBar: TProgressBar
         Left = 0
         Top = 0
-        Width = 128
+        Width = 136
         Height = 16
         Align = alClient
         Max = 200
@@ -94,8 +94,8 @@ object MainForm: TMainForm
   object jpsMain: TJimPages
     Left = 0
     Top = 70
-    Width = 734
-    Height = 410
+    Width = 742
+    Height = 417
     ActivePage = jpsMainProjectsManager
     ActivePageIndex = 0
     Align = alClient
@@ -103,8 +103,8 @@ object MainForm: TMainForm
     object jpsMainProjectsManager: TJimPage
       Left = 0
       Top = 0
-      Width = 734
-      Height = 410
+      Width = 742
+      Height = 417
       TabName = 'ProjectsManager'
       Caption = 'ProjsMgr'
       object pnlUser: TPanel
@@ -201,8 +201,8 @@ object MainForm: TMainForm
     object jpsMainProjects: TJimPage
       Left = 0
       Top = 0
-      Width = 734
-      Height = 410
+      Width = 742
+      Height = 417
       TabName = 'Projects'
       Caption = 'Projects'
       object jpsProjects: TJimPages
@@ -220,7 +220,7 @@ object MainForm: TMainForm
     Font.Charset = DEFAULT_CHARSET
     Font.Color = clWindowText
     Font.Height = -12
-    Font.Name = #24494#36719#38597#40657
+    Font.Name = 'Microsoft YaHei UI'
     Font.Style = []
     Bars = <
       item

+ 5 - 5
Forms/MainFrm.pas

@@ -473,7 +473,7 @@ end;
 
 procedure TMainForm.actnCloseProjectExecute(Sender: TObject);
 begin
-  OpenProjectManager.CurProjectData.Save;
+  OpenProjectManager.CurProjectData.SaveAndCheck;
   DeleteProjectView(jtsProjects.TabIndex - 1);
   LocateProjectView(jtsProjects.TabIndex - 1);
   ResetProcessView(jtsProjects.TabIndex);
@@ -510,7 +510,7 @@ end;
 
 procedure TMainForm.actnSaveProjectExecute(Sender: TObject);
 begin
-  OpenProjectManager.CurProjectData.Save;
+  OpenProjectManager.CurProjectData.SaveAndCheck;
 end;
 
 procedure TMainForm.actnNewAuditExecute(Sender: TObject);
@@ -573,7 +573,7 @@ begin
 
   Screen.Cursor := crHourGlass;
   try
-    CurProjectFrame.ProjectData.Save;
+    CurProjectFrame.ProjectData.SaveAndCheck;
     {$O-}
       // 失败后重复一次
       if not CurProjectFrame.ProjectData.ReplyProject then
@@ -593,7 +593,7 @@ begin
 
   Screen.Cursor := crHourGlass;
   try
-    CurProjectFrame.ProjectData.Save;
+    CurProjectFrame.ProjectData.SaveAndCheck;
     {$O-}
       // 失败后重复一次
       if not CurProjectFrame.ProjectData.SubmitProject then
@@ -748,7 +748,7 @@ var
   Rec: TsdDataRecord;
 begin
   // 导出前先保存
-  CurProjectFrame.ProjectData.Save;
+  CurProjectFrame.ProjectData.SaveAndCheck;
   // 导出云版专用
   sFileName := SupportManager.ConfigInfo.OutputPath + CurProjectFrame.ProjectData.ProjectName + '.ctf';
   if SaveFile(sFileName, '.ctf') then

+ 1 - 1
Frames/ProjectFme.pas

@@ -843,7 +843,7 @@ var sURL, sAppFile, sJsonFile_Bills, sJsonFile_Common, sAppFile_UnLock,
     Result := False;
     ProgressProCreate(100, '本地数据文件上传到云端');
     ProgressProRun('保存本地数据...', 0);
-    ProjectData.Save;
+    ProjectData.SaveAndCheck;
     ProgressProRun('保存本地数据。OK', 10, pmtEdit);
 
     ProgressProRun('导出并检验文件...', 0);

+ 49 - 0
Units/ProjectCommands.pas

@@ -289,6 +289,19 @@ type
     property AuditStatus: Integer read FAuditStatus;
   end;
 
+  // Îļþ¼ìÑé
+  TTenderZipCompleteChecker = class
+  private
+    FFileName: string;
+    FTempFolder: string;
+    FProjectData: TProjectData;
+
+    function CheckMain: Boolean;
+    function CheckAllPhase: Boolean;
+  public
+    function CheckFileValid(const AFileName: string): Boolean;
+  end;
+
 implementation
 
 uses
@@ -1173,4 +1186,40 @@ begin
   FTenderFileName := FTempFolder + '\' + AXmlNode.Attributes['FileName'];
 end;
 
+{ TTenderZipCompleteChecker }
+
+function TTenderZipCompleteChecker.CheckAllPhase: Boolean;
+begin
+  Result := Assigned(FProjectData) and FProjectData.CheckPhaseFileComplete;
+end;
+
+function TTenderZipCompleteChecker.CheckFileValid(
+  const AFileName: string): Boolean;
+begin
+  FFileName := AFileName;
+  FTempFolder := GenerateTempFolder(GetTempFilePath);
+  try
+    Result := UnZipFile(AFileName, FTempFolder) and CheckMain and CheckAllPhase;
+  finally
+    DeleteFileOrFolder(FTempFolder);
+  end;
+end;
+
+function TTenderZipCompleteChecker.CheckMain: Boolean;
+begin
+  Result := False;
+  if FileExists(FTempFolder + '\main.dat') then
+  begin
+    try
+      FProjectData := TProjectData.Create;
+      FProjectData.OpenForSubmit(FFileName);
+      Result := True;
+    except
+      if Assigned(FProjectData) then
+        FProjectData.Free;
+      Result := False;
+    end;
+  end;
+end;
+
 end.

+ 45 - 1
Units/ProjectData.pas

@@ -108,6 +108,7 @@ type
 
     procedure Open(AProjRec: TsdDataRecord);
     procedure Save;
+    procedure SaveAndCheck;
     //----------------------- Begin ---后台打开 ------------------------
     {总说明:
        为节省内存使用,对不同的后台打开分别写不同的方法
@@ -190,6 +191,7 @@ type
     procedure ImportDmfFile(const AFileName: string);
 
     function CheckPassword: Boolean;
+    function CheckPhaseFileComplete: Boolean;
 
     function CurUserIsOwner: Boolean;
     function CurUserIsAuthor: Boolean;
@@ -227,7 +229,7 @@ type
     property StageDataReadOnly: Boolean read GetStageDataReadOnly;
     property PriceMarginReadOnly: Boolean read GetPriceMarginReadOnly;
     property ValidStageIsRefer: Boolean read GetValidStageIsRefer;
-    property StartMeasure: Boolean read GetStartMeasure; 
+    property StartMeasure: Boolean read GetStartMeasure;
 
     property CanUnlockInfo: Boolean read FCanUnlockInfo write FCanUnlockInfo;
     property CanInsertNormalBills: Boolean read GetCanInsertNormalBills;
@@ -2095,4 +2097,46 @@ begin
   Result := ProjProperties.PhaseCount > 0;
 end;
 
+function TProjectData.CheckPhaseFileComplete: Boolean;
+var
+  i: Integer;
+begin
+  Result := True;
+  for i := 1 to FProjProperties.PhaseCount do
+  begin
+    if not FileExists(Format('%s\Phase%d.dat', [TempPath, i])) then
+    begin
+      Result := False;
+      Break;
+    end;
+  end;
+end;
+
+procedure TProjectData.SaveAndCheck;
+
+  function CheckFile(AFileName: string): Boolean;
+  var
+    Checker: TTenderZipCompleteChecker;
+  begin
+    Checker := TTenderZipCompleteChecker.Create;
+    try
+      Result := Checker.CheckFileValid(AFileName);
+    finally
+      Checker.Free;
+    end;
+  end;
+
+begin
+  Save;
+  if not CheckFile(FFileName) then
+  begin
+    Save;
+    if not CheckFile(FFileName) then
+    begin
+      ErrorMessage('保存数据出错。请重试,或联系纵横客服:企业QQ:800003850   客服热线:(0756)3850888');
+      Abort;
+    end;
+  end;
+end;
+
 end.

+ 1 - 1
Units/TenderBackupManager.pas

@@ -80,7 +80,7 @@ end;
 
 procedure TBackupManager.LoadBackupFile(ABackupPath: string);
 begin
-  if FBackupPath = ABackupPath then Exit;
+  //if FBackupPath = ABackupPath then Exit;
   FBackupPath := ABackupPath;
   FOpenFiles.LoadBackupFiles(FBackupPath);
   FSaveFiles.LoadBackupFiles(ABackupPath);