123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382 |
- unit PhaseData;
- interface
- uses
- StageDm, PhasePayDm, ZJJLDm, ADODB, StageCompareDm,
- Connections, UpdateDataBase, UtilMethods, ZhAPI, PhaseProperty,
- Classes, SysUtils, sdDB;
- const
- ReferIndex = 0; // 原报序号
- type
- TPhaseData = class
- private
- FConnection: TEncryptConnection;
- FUpdator: TUpdatePhaseDB;
- FStageData: TStageData;
- FAuditList: TList;
- FPhaseProperty: TPhaseProperties;
- //FCurStageIndex: Integer;
- FStageIndex: Integer;
- FProjectData: TObject;
- FPhasePayData: TPhasePayData;
- FZJJLData: TZJJLData;
- FStageCompareData: TStageCompareData;
- procedure UpdatePhaseDataBase;
- procedure CopyPreStageData;
- procedure CheckAuditCount;
- function GetFileName: string;
- function GetPhaseIndex: Integer;
- function GetActive: Boolean;
- function GetStageDataReadOnly: Boolean;
- function GetAllowInsert: Boolean;
- function GetmdbFileName: string;
- function GetADOConnection: TADOConnection;
- procedure SetStageIndex(const Value: Integer);
- function GetStageTableName(AIndex: Integer): string;
- function GetAuditCount: Integer;
- function GetStageCount: Integer;
- function GetIsLastStage: Boolean;
- public
- constructor Create(AProjectData: TObject);
- destructor Destroy; override;
- procedure Open(const AProjectName: string);
- procedure Save;
- procedure SaveDebugFile(const AFileName: string);
- {仅打开项目属性}
- procedure SimpleOpen(const AProjectName: string);
- procedure SimpleSave;
- procedure SimpleOpen2(const AProjectName: string);
- procedure SimpleOpen3(const AProjectName: string; AStageIndex: Integer = -1);
- procedure CreateNewAuditData;
- procedure CopyPreData;
- property StageIndex: Integer read FStageIndex write SetStageIndex;
- property StageData: TStageData read FStageData;
- property IsLastStage: Boolean read GetIsLastStage;
- // Other
- property PhaseProperty: TPhaseProperties read FPhaseProperty;
- property PhasePayData: TPhasePayData read FPhasePayData;
- property ZJJLData: TZJJLData read FZJJLData;
- property StageCompareData: TStageCompareData read FStageCompareData;
- property StageDataReadOnly: Boolean read GetStageDataReadOnly;
- property AllowInsert: Boolean read GetAllowInsert;
- property PhaseIndex: Integer read GetPhaseIndex;
- property FileName: string read GetFileName;
- property mdbFileName: string read GetmdbFileName;
- property ProjectData: TObject read FProjectData;
- property Active: Boolean read GetActive;
- property ADOConnection: TADOConnection read GetADOConnection;
- property StageTableName[AIndex: Integer]: string read GetStageTableName;
- property AuditCount: Integer read GetAuditCount;
- property StageCount: Integer read GetStageCount;
- end;
- implementation
- uses
- ProjectData, Globals;
- { TPhaseData }
- constructor TPhaseData.Create(AProjectData: TObject);
- begin
- FProjectData := AProjectData;
- FConnection := TEncryptConnection.Create;
- FUpdator := TUpdatePhaseDB.Create;
- FStageData := TStageData.Create(Self);
- FPhaseProperty := TPhaseProperties.Create(FConnection.Connection);
- FPhasePayData := TPhasePayData.Create(Self);
- FZJJLData := TZJJLData.Create(Self);
- FStageCompareData := TStageCompareData.Create(Self);
- end;
- procedure TPhaseData.CreateNewAuditData;
- var
- iAuditCount: Integer;
- begin
- try
- iAuditCount := FPhaseProperty.AuditCount;
- FPhaseProperty.AuditCount := iAuditCount + 1;
- CopyPreStageData;
- StageIndex := FPhaseProperty.AuditCount;
- PhasePayData.UpdateDataForNewAudit;
- except
- FPhaseProperty.AuditCount := iAuditCount;
- end;
- end;
- destructor TPhaseData.Destroy;
- begin
- FStageCompareData.Free;
- FPhasePayData.Free;
- FPhaseProperty.Free;
- FStageData.Free;
- FUpdator.Free;
- FConnection.Free;
- inherited;
- end;
- function TPhaseData.GetActive: Boolean;
- begin
- Result := FConnection.Connection.Connected;
- end;
- function TPhaseData.GetAllowInsert: Boolean;
- begin
- Result := not PhaseProperty.FinalAudit;
- end;
- function TPhaseData.GetStageDataReadOnly: Boolean;
- begin
- Result := not (IsLastStage and not PhaseProperty.FinalAudit);
- end;
- function TPhaseData.GetFileName: string;
- begin
- Result := FConnection.OrgFile;
- end;
- function TPhaseData.GetPhaseIndex: Integer;
- begin
- Result := TProjectData(FProjectData).PhaseIndex;
- end;
- procedure TPhaseData.Open(const AProjectName: string);
- begin
- UpdateSysProgress(35, '正在打开文件');
- FConnection.Open(AProjectName);
- UpdateSysProgress(40, '正在升级文件');
- UpdatePhaseDataBase;
- UpdateSysProgress(50, '正在读取数据');
- FPhaseProperty.Open;
- CheckAuditCount;
- FStageIndex := FPhaseProperty.AuditCount;
- UpdateSysProgress(140, '正在读取数据');
- FStageData.TableName := StageTableName[FStageIndex];
- FStageData.Open(FConnection.Connection);
- UpdateSysProgress(160, '正在读取数据');
- FPhasePayData.Open(FConnection.Connection);
- UpdateSysProgress(180, '正在读取数据');
- FZJJLData.Open(FConnection.Connection);
- UpdateSysProgress(200, '就绪');
- end;
- procedure TPhaseData.Save;
- begin
- TProjectData(FProjectData).AppendProjectLog('Save Phase Data');
- UpdateSysProgress(30, '正在保存数据');
- FPhaseProperty.Save;
- UpdateSysProgress(80, '正在保存数据');
- FStageData.Save;
- UpdateSysProgress(150, '正在保存数据');
- FPhasePayData.Save;
- UpdateSysProgress(170, '正在保存数据');
- FZJJLData.Save;
- UpdateSysProgress(180, '正在保存数据');
- FConnection.Save;
- UpdateSysProgress(200, '就绪');
- TProjectData(FProjectData).AppendProjectLog('Save Phase Data --> End');
- end;
- procedure TPhaseData.SimpleOpen(const AProjectName: string);
- begin
- FConnection.Open(AProjectName);
- UpdatePhaseDataBase;
- FPhaseProperty.Open;
- CheckAuditCount;
- FPhasePayData.Open(FConnection.Connection);
- end;
- procedure TPhaseData.SimpleSave;
- begin
- FPhasePayData.Save;
- FPhaseProperty.Save;
- FConnection.Save;
- end;
- procedure TPhaseData.UpdatePhaseDataBase;
- begin
- FUpdator.Update(FConnection);
- end;
- function TPhaseData.GetmdbFileName: string;
- begin
- Result := FConnection.FileName;
- end;
- procedure TPhaseData.CopyPreData;
- var
- FPrePhaseData: TPhaseData;
- sTempFile: string;
- begin
- if (PhaseIndex <= 1) then Exit;
- FPrePhaseData := TPhaseData.Create(ProjectData);
- sTempFile := GetTempFileName;
- try
- FPrePhaseData.SimpleOpen(Format('%s\Phase%d.dat', [
- TProjectData(ProjectData).TempPath, PhaseIndex - 1]));
- FPrePhaseData.SaveDebugFile(sTempFile);
- StageData.CopyPrePhaseData(sTempFile, FPrePhaseData.StageTableName[FPrePhaseData.PhaseProperty.AuditCount]);
- PhasePayData.CopyPrePhasePayData(sTempFile, FPrePhaseData.PhaseProperty.AuditCount);
- PhasePayData.CalculateAll;
- finally
- DeleteFile(sTempFile);
- FPrePhaseData.Free;
- end;
- end;
- function TPhaseData.GetADOConnection: TADOConnection;
- begin
- Result := FConnection.Connection;
- end;
- procedure TPhaseData.SetStageIndex(const Value: Integer);
- procedure ReCreateStageData;
- begin
- if StageData.Active then
- StageData.Save;
- StageData.Free;
- FStageData := TStageData.Create(Self);
- FStageData.TableName := StageTableName[fStageIndex];
- FStageData.Open(ADOConnection);
- end;
- begin
- TProjectData(FProjectData).SaveLastestPhaseMainData;
- FStageIndex := Value;
- ReCreateStageData;
- TProjectData(FProjectData).ResetPhaseDataLink;
- end;
- function TPhaseData.GetStageTableName(AIndex: Integer): string;
- begin
- if AIndex > 0 then
- Result := 'Audit' + IntToStr(AIndex)
- else
- Result := 'Refer';
- end;
- function TPhaseData.GetAuditCount: Integer;
- begin
- Result := PhaseProperty.AuditCount;
- end;
- function TPhaseData.GetStageCount: Integer;
- begin
- Result := PhaseProperty.AuditCount + 1;
- end;
- procedure TPhaseData.CheckAuditCount;
- function GetRealAuditCount: Integer;
- var
- Tables: TStrings;
- begin
- Tables := TStringList.Create;
- try
- FConnection.Connection.GetTableNames(Tables);
- Result := 0;
- while Tables.IndexOf('Audit' + IntToStr(Result + 1)) > -1 do
- Inc(Result);
- finally
- Tables.Free;
- end;
- end;
- var
- iAuditCount: Integer;
- begin
- // 改为强制检验
- //if FPhaseProperty.AuditCount = 0 then
- //begin
- iAuditCount := GetRealAuditCount;
- if iAuditCount <> FPhaseProperty.AuditCount then
- FPhaseProperty.AuditCount := iAuditCount;
- //end;
- end;
- function TPhaseData.GetIsLastStage: Boolean;
- begin
- Result := FStageIndex = FPhaseProperty.AuditCount;
- end;
- procedure TPhaseData.CopyPreStageData;
- const
- sCopySql = 'Insert Into %s Select * From %s';
- var
- sPre, sCur, sSql: string;
- begin
- FUpdator.AddAuditData(FConnection.Connection, FPhaseProperty.AuditCount);
- sPre := StageTableName[FPhaseProperty.AuditCount-1];
- sCur := StageTableName[FPhaseProperty.AuditCount];
- sSql := Format(sCopySql, [sCur, sPre]);
- ExecuteSql(FConnection.Connection, sSql);
- end;
- procedure TPhaseData.SimpleOpen2(const AProjectName: string);
- begin
- FConnection.Open(AProjectName);
- UpdatePhaseDataBase;
- FPhaseProperty.Open;
- CheckAuditCount;
- FStageIndex := FPhaseProperty.AuditCount;
- FStageData.TableName := StageTableName[FStageIndex];
- FStageData.Open(FConnection.Connection);
- FPhasePayData.Open(FConnection.Connection);
- FZJJLData.Open(FConnection.Connection);
- end;
- procedure TPhaseData.SaveDebugFile(const AFileName: string);
- begin
- TProjectData(FProjectData).AppendProjectLog('Save Phase Data');
- FPhaseProperty.Save;
- FStageData.Save;
- FPhasePayData.Save;
- FZJJLData.Save;
- FConnection.SaveDebugFile(AFileName);
- TProjectData(FProjectData).AppendProjectLog('Save Phase Data --> End');
- end;
- procedure TPhaseData.SimpleOpen3(const AProjectName: string;
- AStageIndex: Integer = -1);
- begin
- FConnection.Open(AProjectName);
- UpdatePhaseDataBase;
- FPhaseProperty.Open;
- CheckAuditCount;
- if AStageIndex = -1 then
- FStageIndex := FPhaseProperty.AuditCount
- else if AStageIndex <= FPhaseProperty.AuditCount then
- FStageIndex := FPhaseProperty.AuditCount
- else
- raise Exception.Create('输入的角色不存在');
- FStageData.TableName := StageTableName[FStageIndex];
- FStageData.Open(FConnection.Connection);
- FPhasePayData.Open(FConnection.Connection);
- FZJJLData.Open(FConnection.Connection);
- end;
- end.
|