rpgGatherData.pas 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554
  1. unit rpgGatherData;
  2. interface
  3. uses
  4. ADODB, Classes, ProjGather, ScAutoUpdateUnit,
  5. ProjGatherTree, GatherProjInfo, ProjGatherDealPay, ProjGatherProperties,
  6. rpgGatherProjDm, rpgBillsDm, rpgBillsCalcDm, rpgDealPayDm;
  7. type
  8. TrpgGatherData = class
  9. private
  10. FGatherFile: string;
  11. FConnection: TADOConnection;
  12. procedure ClearHistoryData;
  13. procedure CreateDataTables(AProjCount, ASProjCount: Integer);
  14. procedure SaveGatherProjInfo(AProjs, ASProjs: TList);
  15. procedure SaveBills(ATree: TProjGatherTree);
  16. procedure SaveBillsGatherCalc(ATree: TProjGatherTree);
  17. procedure SaveBillsProjCalc(ATree: TProjGatherTree; AProjIndex: Integer);
  18. procedure SaveBillsSpecialProjCalc(ATree: TProjGatherTree; AProjType: Integer);
  19. procedure SaveDealPayGatherData(ADealPay: TProjGatherDealPayList);
  20. procedure SaveDealPayProjData(ADealPay: TProjGatherDealPayList; AProjIndex: Integer);
  21. procedure SaveDealPaySpecialProjData(ADealPay: TProjGatherDealPayList; AProjType: Integer);
  22. procedure SaveGatherProjProperties(AProperties: TProjGatherProperties);
  23. procedure CalcDgnData(const ATableName: string);
  24. procedure CalcOtherData(AProjCount, ASProjCount: Integer);
  25. procedure TransposeProjCalc(AProjCount: Integer);
  26. function GetCacheProjFile(AProj: TGatherProjInfo): string;
  27. procedure CopyBGLData(const AFileName: string; AProjIndex, AProjType: Integer);
  28. procedure CopyProjProperty(const AFileName: string; AProjIndex, AProjType: Integer);
  29. procedure CopyProjRelaGatherData(AProj: TGatherProjInfo; AProjIndex: Integer);
  30. function GetCurSpecialProjCount: Integer;
  31. protected
  32. procedure AddTables(AProjCount, ASProjCount: Integer; AUpdater: TScUpdater); virtual;
  33. procedure SaveGatherData(AGather: TProjGather); virtual;
  34. procedure CopyRelaGatherData(AGather: TProjGather); virtual;
  35. public
  36. constructor Create;
  37. destructor Destroy; override;
  38. procedure WriteGatherData(AGather: TProjGather);
  39. procedure LoadRelaData(AProjectID: Integer);
  40. procedure UpdateDataBase(ASpecialProjTypes: TStrings);
  41. property GatherFile: string read FGatherFile;
  42. property Connection: TADOConnection read FConnection;
  43. end;
  44. implementation
  45. uses
  46. UtilMethods, SysUtils, Connections, ZhAPI, rProjGatherTables,
  47. ConditionalDefines, ProjectData, Globals;
  48. { TrpgGatherData }
  49. procedure TrpgGatherData.AddTables(AProjCount, ASProjCount: Integer;
  50. AUpdater: TScUpdater);
  51. var
  52. iProj: Integer;
  53. begin
  54. AUpdater.AddTableDef(SGatherProj, @tdGatherProj, Length(tdGatherProj), False, False);
  55. AUpdater.AddTableDef(SBills, @tdBills, Length(tdBills), False, False);
  56. AUpdater.AddTableDef(SBills_Gather, @tdBills_Calc, Length(tdBills_Calc), False, False);
  57. for iProj := 0 to AProjCount - 1 do
  58. AUpdater.AddTableDef(SBills_Proj+IntToStr(iProj+1), @tdBills_Calc, Length(tdBills_Calc), False, False);
  59. AUpdater.AddTableDef(SBills_TransProj, @tdBills_Calc, Length(tdBills_Calc), False, False);
  60. for iProj := 0 to ASProjCount - 1 do
  61. AUpdater.AddTableDef(SBills_SProj+IntToStr(iProj+1), @tdBills_Calc, Length(tdBills_Calc), False, False);
  62. AUpdater.AddTableDef(SBGL_TransProj, @tdBGL_TransProj, Length(tdBGL_TransProj), False, False);
  63. AUpdater.AddTableDef(SDealPay_Gather, @tdDealPay_Calc, Length(tdDealPay_Calc), False, False);
  64. for iProj := 0 to AProjCount - 1 do
  65. AUpdater.AddTableDef(SDealPay_Proj+IntToStr(iProj+1), @tdDealPay_Calc, Length(tdDealPay_Calc), False, False);
  66. AUpdater.AddTableDef(SDealPay_TransProj, @tdDealPay_Calc, Length(tdDealPay_Calc), False, False);
  67. for iProj := 0 to ASProjCount - 1 do
  68. AUpdater.AddTableDef(SDealPay_SProj+IntToStr(iProj+1), @tdDealPay_Calc, Length(tdDealPay_Calc), False, False);
  69. AUpdater.AddTableDef(SProjProperties_TransProj, @tdProjProperties_TransProj, Length(tdProjProperties_TransProj), False, False);
  70. AUpdater.AddTableDef(SProjPropertied_Gather, @tdProjProperties_TransProj, Length(tdProjProperties_TransProj), False, False);
  71. end;
  72. procedure TrpgGatherData.CalcDgnData(const ATableName: string);
  73. const
  74. sFinalDgn = 'Update %s Set'+
  75. ' FinalDgnQuantity1 = DealDgnQuantity1 + CDgnQuantity1,'+
  76. ' FinalDgnQuantity2 = DealDgnQuantity2 + CDgnQuantity2';
  77. sDgnPrice1_2 = 'Update %s Set'+
  78. ' DgnPrice1 = iif(DgnQuantity1 <> 0, TotalPrice/DgnQuantity1, 0),'+
  79. ' DgnPrice1_Rc = iif(DgnQuantity1 <> 0, TotalPrice_Rc/DgnQuantity1, 0),'+
  80. ' DgnPrice2 = iif(DgnQuantity2 <> 0, TotalPrice/DgnQuantity2, 0),'+
  81. ' DgnPrice2_Rc = iif(DgnQuantity2 <> 0, TotalPrice_Rc/DgnQuantity2, 0),'+
  82. ' FinalDgnPrice1 = iif(FinalDgnQuantity1 <> 0, AddGatherTotalPrice/FinalDgnQuantity1, 0),'+
  83. ' FinalDgnPrice1_Rc = iif(FinalDgnQuantity1 <> 0, AddGatherTotalPrice_Rc/FinalDgnQuantity1, 0),'+
  84. ' FinalDgnPrice2 = iif(FinalDgnQuantity2 <> 0, AddGatherTotalPrice/FinalDgnQuantity2, 0),'+
  85. ' FinalDgnPrice2_Rc = iif(FinalDgnQuantity2 <> 0, AddGatherTotalPrice_Rc/FinalDgnQuantity2, 0)';
  86. sDgn = 'Update %s Set'+
  87. ' DgnQuantity = iif(DgnQuantity1 <> 0, iif(DgnQuantity2 <> 0, DgnQuantity1&''/''&DgnQuantity2, DgnQuantity1), ''''),'+
  88. ' DgnPrice = iif(DgnPrice1 <> 0, iif(DgnPrice2 <> 0, DgnPrice1&''/''&DgnPrice2, DgnPrice1), ''''),'+
  89. ' DgnPrice_Rc = iif(DgnPrice1_Rc <> 0, iif(DgnPrice2_Rc <> 0, DgnPrice1_Rc&''/''&DgnPrice2_Rc, DgnPrice1_Rc), ''''),'+
  90. ' DealDgnQuantity = iif(DealDgnQuantity1 <> 0, iif(DealDgnQuantity2 <> 0, DealDgnQuantity1&''/''&DealDgnQuantity2, DealDgnQuantity1), ''''),'+
  91. ' CDgnQuantity = iif(CDgnQuantity1 <> 0, iif(CDgnQuantity2 <> 0, CDgnQuantity1&''/''&CDgnQuantity2, CDgnQuantity1), ''''),'+
  92. ' FinalDgnQuantity = iif(FinalDgnQuantity1 <> 0, iif(FinalDgnQuantity2 <> 0, FinalDgnQuantity1&''/''&FinalDgnQuantity2, FinalDgnQuantity1), ''''),'+
  93. ' FinalDgnPrice = iif(FinalDgnPrice1 <> 0, iif(FinalDgnPrice2 <> 0, FinalDgnPrice1&''/''&FinalDgnPrice2, FinalDgnPrice1), ''''),'+
  94. ' FinalDgnPrice_Rc = iif(FinalDgnPrice1_Rc <> 0, iif(FinalDgnPrice2_Rc <> 0, FinalDgnPrice1_Rc&''/''&FinalDgnPrice2_Rc, FinalDgnPrice1_Rc), '''')';
  95. begin
  96. ExecuteSql(FConnection, Format(sFinalDgn, [ATableName]));
  97. ExecuteSql(FConnection, Format(sDgnPrice1_2, [ATableName]));
  98. ExecuteSql(FConnection, Format(sDgn, [ATableName]));
  99. end;
  100. procedure TrpgGatherData.CalcOtherData(AProjCount, ASProjCount: Integer);
  101. var
  102. iProj: Integer;
  103. begin
  104. CalcDgnData(SBills_Gather);
  105. for iProj := 0 to AProjCount - 1 do
  106. CalcDgnData(SBills_Proj+IntToStr(iProj+1));
  107. CalcDgnData(SBills_TransProj);
  108. for iProj := 0 to ASProjCount - 1 do
  109. CalcDgnData(SBills_SProj+IntToStr(iProj+1));
  110. end;
  111. procedure TrpgGatherData.ClearHistoryData;
  112. var
  113. FTableList: TStringList;
  114. iIndex: Integer;
  115. sDeleteTableSql: String;
  116. begin
  117. FTableList := TStringList.Create;
  118. try
  119. FConnection.GetTableNames(FTableList);
  120. iIndex := 0;
  121. while iIndex < FTableList.Count do
  122. begin
  123. if Pos('r_', FTableList.Strings[iIndex]) = 1 then
  124. begin
  125. sDeleteTableSql := Format('Drop Table %s', [FTableList.Strings[iIndex]]);
  126. ExecuteSql(FConnection, sDeleteTableSql);
  127. end;
  128. Inc(iIndex);
  129. end;
  130. finally
  131. FTableList.Free;
  132. end;
  133. end;
  134. procedure TrpgGatherData.CopyProjRelaGatherData(AProj: TGatherProjInfo;
  135. AProjIndex: Integer);
  136. var
  137. sTempFile: string;
  138. begin
  139. try
  140. sTempFile := GetCacheProjFile(AProj);
  141. CopyBGLData(sTempFile, AProjIndex, AProj.ProjType);
  142. CopyProjProperty(sTempFile, AProjIndex, AProj.ProjType);
  143. finally
  144. if FileExists(sTempFile) then
  145. DeleteFile(sTempFile);
  146. end;
  147. end;
  148. constructor TrpgGatherData.Create;
  149. begin
  150. FGatherFile := GetTempFileName;
  151. CopyFileOrFolder(GetEmptyDataBaseFileName, FGatherFile);
  152. FConnection := TADOConnection.Create(nil);
  153. FConnection.LoginPrompt := False;
  154. FConnection.ConnectionString := Format(SAdoConnectStr, [FGatherFile]);
  155. FConnection.Open;
  156. end;
  157. procedure TrpgGatherData.CreateDataTables(AProjCount, ASProjCount: Integer);
  158. var
  159. Updater: TScUpdater;
  160. begin
  161. Updater := TScUpdater.Create;
  162. try
  163. Updater.ForceUpdate := True;
  164. Updater.Open('', FConnection, '', '');
  165. AddTables(AProjCount, ASProjCount, Updater);
  166. Updater.ExcuteUpdate;
  167. finally
  168. Updater.Free;
  169. end;
  170. end;
  171. destructor TrpgGatherData.Destroy;
  172. begin
  173. FConnection.Free;
  174. if FileExists(FGatherFile) then
  175. DeleteFile(FGatherFile);
  176. inherited;
  177. end;
  178. function TrpgGatherData.GetCurSpecialProjCount: Integer;
  179. var
  180. sgsTables: TStringList;
  181. iTable: Integer;
  182. begin
  183. Result := 0;
  184. sgsTables := TStringList.Create;
  185. try
  186. FConnection.GetTableNames(sgsTables);
  187. for iTable := 0 to sgsTables.Count - 1 do
  188. begin
  189. if Pos(SBills_SProj, sgsTables.Strings[iTable]) > 0 then
  190. Inc(Result);
  191. end;
  192. finally
  193. sgsTables.Free;
  194. end;
  195. end;
  196. procedure TrpgGatherData.CopyBGLData(const AFileName: string; AProjIndex, AProjType: Integer);
  197. const
  198. sCopyBGL = 'Insert Into r_BGL_TransProj' +
  199. ' Select ID, %d As ProjID, %d As ProjType,' +
  200. ' Code, Name, TotalPrice, Pos_Reason, Direction, DrawingCode, ApprovalCode, BGLType' +
  201. ' From BGL In ''%s''';
  202. begin
  203. ExecuteSql(FConnection, Format(sCopyBGL, [AProjIndex, AProjType, AFileName]));
  204. end;
  205. procedure TrpgGatherData.LoadRelaData(AProjectID: Integer);
  206. const
  207. sCopyProperty = 'Select * Into r_ProjProperties'+
  208. ' From ProjProperties In ''%s''';
  209. var
  210. sFileName: string;
  211. vProjectData: TProjectData;
  212. begin
  213. vProjectData := OpenProjectManager.FindProjectData(AProjectID);
  214. if Assigned(vProjectData) then Exit;
  215. try
  216. sFileName := GetTempFileName;
  217. vProjectData.SaveTempDataBaseFile(sFileName);
  218. ExecuteSql(FConnection, Format(sCopyProperty, [sFileName]));
  219. finally
  220. if FileExists(sFileName) then
  221. DeleteFile(sFileName);
  222. end;
  223. end;
  224. procedure TrpgGatherData.SaveBills(ATree: TProjGatherTree);
  225. var
  226. vBillsData: TrpgBillsData;
  227. begin
  228. vBillsData := TrpgBillsData.Create(FConnection);
  229. try
  230. vBillsData.SaveDataTo(ATree, SBills);
  231. finally
  232. vBillsData.Free;
  233. end;
  234. end;
  235. procedure TrpgGatherData.SaveBillsGatherCalc(ATree: TProjGatherTree);
  236. var
  237. vBillsCalcData: TrpgBillsCalcData;
  238. begin
  239. vBillsCalcData := TrpgBillsCalcData.Create(FConnection);
  240. try
  241. vBillsCalcData.SaveGatherDataTo(ATree, SBills_Gather);
  242. finally
  243. vBillsCalcData.Free;
  244. end;
  245. end;
  246. procedure TrpgGatherData.SaveBillsProjCalc(ATree: TProjGatherTree;
  247. AProjIndex: Integer);
  248. var
  249. vBillsCalcData: TrpgBillsCalcData;
  250. begin
  251. vBillsCalcData := TrpgBillsCalcData.Create(FConnection);
  252. try
  253. vBillsCalcData.SaveProjDataTo(ATree, AProjIndex, SBills_Proj+IntToStr(AProjIndex+1));
  254. finally
  255. vBillsCalcData.Free;
  256. end;
  257. end;
  258. procedure TrpgGatherData.SaveBillsSpecialProjCalc(ATree: TProjGatherTree;
  259. AProjType: Integer);
  260. var
  261. vBillsCalcData: TrpgBillsCalcData;
  262. begin
  263. vBillsCalcData := TrpgBillsCalcData.Create(FConnection);
  264. try
  265. vBillsCalcData.SaveSpecialProjDataTo(ATree, AProjType, SBills_SProj+IntToStr(AProjType));
  266. finally
  267. vBillsCalcData.Free;
  268. end;
  269. end;
  270. procedure TrpgGatherData.SaveGatherData(AGather: TProjGather);
  271. const
  272. sInsert = 'Insert Into %s Select * From %s';
  273. var
  274. iProj: Integer;
  275. begin
  276. SaveGatherProjInfo(AGather.CommonProj, AGather.SpecialProj);
  277. SaveBills(AGather.Tree);
  278. SaveBillsGatherCalc(AGather.Tree);
  279. SaveDealPayGatherData(AGather.DealPay);
  280. SaveGatherProjProperties(AGather.Properties);
  281. for iProj := 0 to AGather.CommonProj.Count - 1 do
  282. begin
  283. SaveBillsProjCalc(AGather.Tree, iProj);
  284. ExecuteSql(FConnection, Format(sInsert, [SBills_TransProj, SBills_Proj+IntToStr(iProj+1)]));
  285. CopyProjRelaGatherData(TGatherProjInfo(AGather.CommonProj.Items[iProj]), iProj);
  286. SaveDealPayProjData(AGather.DealPay, iProj);
  287. ExecuteSql(FConnection, Format(sInsert, [SDealPay_TransProj, SDealPay_Proj+IntToStr(iProj+1)]));
  288. end;
  289. for iProj := 0 to AGather.Tree.SpecialProjCount - 1 do
  290. begin
  291. SaveBillsSpecialProjCalc(AGather.Tree, iProj+1);
  292. CopyProjRelaGatherData(TGatherProjInfo(AGather.SpecialProj.Items[iProj]), -3);
  293. SaveDealPaySpecialProjData(AGather.DealPay, iProj+1);
  294. end;
  295. end;
  296. procedure TrpgGatherData.SaveGatherProjInfo(AProjs, ASProjs: TList);
  297. var
  298. vGatherInfoData: TrpgGatherProjData;
  299. begin
  300. vGatherInfoData := TrpgGatherProjData.Create(FConnection);
  301. try
  302. vGatherInfoData.SaveDataTo(AProjs, ASProjs, SGatherProj);
  303. finally
  304. vGatherInfoData.Free;
  305. end;
  306. end;
  307. procedure TrpgGatherData.TransposeProjCalc(AProjCount: Integer);
  308. const
  309. sInsert = 'Insert Into %s Select * From %s';
  310. var
  311. iProj: Integer;
  312. begin
  313. for iProj := 0 to AProjCount - 1 do
  314. begin
  315. ExecuteSql(FConnection, Format(sInsert, [SBills_TransProj, SBills_Proj+IntToStr(iProj+1)]));
  316. ExecuteSql(FConnection, Format(sInsert, [SDealPay_TransProj, SDealPay_Proj+IntToStr(iProj+1)]));
  317. end;
  318. end;
  319. procedure TrpgGatherData.UpdateDataBase(ASpecialProjTypes: TStrings);
  320. const
  321. sUpdateSql = 'Insert Into %s (ID, ProjID, ProjType,' +
  322. ' OrgQuantity, OrgTotalPrice, OrgTotalPrice_Rc,' +
  323. ' MisQuantity, MisTotalPrice, MisTotalPrice_Rc,' +
  324. ' OthQuantity, OthTotalPrice, OthTotalPrice_Rc,' +
  325. ' Quantity, TotalPrice, TotalPrice_Rc,' +
  326. ' DgnQuantity1, DgnQuantity2, DgnQuantity,' +
  327. ' DgnPrice1, DgnPrice2, DgnPrice,' +
  328. ' DgnPrice1_Rc, DgnPrice2_Rc, DgnPrice_Rc,' +
  329. ' DealDgnQuantity1, DealDgnQuantity2, DealDgnQuantity,' +
  330. ' CDgnQuantity1, CDgnQuantity2, CDgnQuantity,' +
  331. ' FinalDgnQuantity1, FinalDgnQuantity2, FinalDgnQuantity,' +
  332. ' FinalDgnPrice1, FinalDgnPrice2, FinalDgnPrice,' +
  333. ' FinalDgnPrice1_Rc, FinalDgnPrice2_Rc, FinalDgnPrice_Rc,' +
  334. ' AddDealQuantity, AddDealTotalPrice, AddDealTotalPrice_Rc,' +
  335. ' AddQcQuantity, AddQcTotalPrice, AddQcTotalPrice_Rc,' +
  336. ' AddGatherQuantity, AddGatherTotalPrice, AddGatherTotalPrice_Rc,' +
  337. ' CurDealQuantity, CurDealTotalPrice, CurDealTotalPrice_Rc,' +
  338. ' CurQcQuantity, CurQcTotalPrice, CurQcTotalPrice_Rc,' +
  339. ' CurGatherQuantity, CurGatherTotalPrice, CurGatherTotalPrice_Rc,' +
  340. ' PreDealQuantity, PreDealTotalPrice, PreDealTotalPrice_Rc,' +
  341. ' PreQcQuantity, PreQcTotalPrice, PreQcTotalPrice_Rc,' +
  342. ' PreGatherQuantity, PreGatherTotalPrice, PreGatherTotalPrice_Rc,' +
  343. ' EndDealQuantity, EndDealTotalPrice, EndDealTotalPrice_Rc,' +
  344. ' EndQcQuantity, EndQcTotalPrice, EndQcTotalPrice_Rc,' +
  345. ' EndGatherQuantity, EndGatherTotalPrice, EndGatherTotalPrice_Rc)' +
  346. ' Select ID, %d, %d,'+
  347. ' 0, 0, 0,'+ // Org
  348. ' 0, 0, 0,'+ // Mis
  349. ' 0, 0, 0,'+ // Oth
  350. ' 0, 0, 0,'+ // 台账
  351. ' 0, 0, '''','+ // DgnQuantity
  352. ' 0, 0, '''','+ // DgnPrice
  353. ' 0, 0, '''','+ // DgnPrice_Rc
  354. ' 0, 0, '''','+ // DealDgnQuantity
  355. ' 0, 0, '''','+ // CDgnQuantity
  356. ' 0, 0, '''','+ // FinalDgnQuantity
  357. ' 0, 0, '''','+ // FinalDgnPrice
  358. ' 0, 0, '''','+ // FinalDgnPrice_Rc
  359. ' 0, 0, 0,'+ // AddDeal
  360. ' 0, 0, 0,'+ // AddQc
  361. ' 0, 0, 0,'+ // AddGather
  362. ' 0, 0, 0,'+ // CurDeal
  363. ' 0, 0, 0,'+ // CurQc
  364. ' 0, 0, 0,'+ // CurGather
  365. ' 0, 0, 0,'+ // PreDeal
  366. ' 0, 0, 0,'+ // PreQc
  367. ' 0, 0, 0,'+ // PreGather
  368. ' 0, 0, 0,'+ // EndDeal
  369. ' 0, 0, 0,'+ // EndQc
  370. ' 0, 0, 0'+ // EndGather
  371. ' From r_Bills';
  372. var
  373. Updater: TScUpdater;
  374. iProj, iSpecialProjCount: Integer;
  375. begin
  376. iSpecialProjCount := GetCurSpecialProjCount;
  377. if ASpecialProjTypes.Count > iSpecialProjCount then
  378. begin
  379. Updater := TScUpdater.Create;
  380. try
  381. Updater.ForceUpdate := True;
  382. Updater.Open('', FConnection, '', '');
  383. for iProj := iSpecialProjCount to ASpecialProjTypes.Count - 1 do
  384. Updater.AddTableDef(SBills_SProj+IntToStr(iProj+1), @tdBills_Calc, Length(tdBills_Calc), False, False);
  385. Updater.ExcuteUpdate;
  386. finally
  387. Updater.Free;
  388. end;
  389. for iProj := iSpecialProjCount to ASpecialProjTypes.Count - 1 do
  390. ExecuteSql(FConnection, Format(sUpdateSql, [SBills_SProj+IntToStr(iProj+1), -3, iProj+1]));
  391. end;
  392. end;
  393. procedure TrpgGatherData.WriteGatherData(AGather: TProjGather);
  394. begin
  395. ClearHistoryData;
  396. CreateDataTables(AGather.Tree.ProjCount, AGather.Tree.SpecialProjCount);
  397. SaveGatherData(AGather);
  398. CalcOtherData(AGather.Tree.ProjCount, AGather.Tree.SpecialProjCount);
  399. //CopyRelaGatherData(AGather);
  400. // 集中处理TranProj时,最后一个标段数据丢失
  401. //TransposeProjCalc(AGather.Tree.ProjCount);
  402. if _IsDebugView then
  403. CopyFileOrFolder(FGatherFile, GetAppFilePath+'CommonProjGather.dat');
  404. end;
  405. procedure TrpgGatherData.CopyRelaGatherData(AGather: TProjGather);
  406. var
  407. iProj: Integer;
  408. begin
  409. for iProj := 0 to AGather.CommonProj.Count - 1 do
  410. CopyProjRelaGatherData(TGatherProjInfo(AGather.CommonProj.Items[iProj]), iProj);
  411. for iProj := 0 to AGather.SpecialProj.Count - 1 do
  412. CopyProjRelaGatherData(TGatherProjInfo(AGather.SpecialProj.Items[iProj]), -3);
  413. end;
  414. function TrpgGatherData.GetCacheProjFile(AProj: TGatherProjInfo): string;
  415. var
  416. vProjData: TProjectData;
  417. begin
  418. Result := GetTempFileName;
  419. vProjData := OpenProjectManager.FindProjectData(AProj.ProjectID);
  420. if not Assigned(vProjData) then
  421. begin
  422. vProjData := TProjectData.Create;
  423. vProjData.SimpleOpen(GetMyProjectsFilePath + AProj.FileName);
  424. vProjData.SaveTempDataBaseFile(Result);
  425. vProjData.Free;
  426. end
  427. else
  428. vProjData.SaveTempDataBaseFile(Result);
  429. end;
  430. procedure TrpgGatherData.SaveDealPayGatherData(
  431. ADealPay: TProjGatherDealPayList);
  432. var
  433. vDealPayData: TrgpDealPayData;
  434. begin
  435. vDealPayData := TrgpDealPayData.Create(FConnection);
  436. try
  437. vDealPayData.SaveGatherDataTo(ADealPay, SDealPay_Gather);
  438. finally
  439. vDealPayData.Free;
  440. end;
  441. end;
  442. procedure TrpgGatherData.SaveDealPayProjData(
  443. ADealPay: TProjGatherDealPayList; AProjIndex: Integer);
  444. var
  445. vDealPayData: TrgpDealPayData;
  446. begin
  447. vDealPayData := TrgpDealPayData.Create(FConnection);
  448. try
  449. vDealPayData.SaveProjDataTo(ADealPay, AProjIndex, SDealPay_Proj+IntToStr(AProjIndex+1));
  450. finally
  451. vDealPayData.Free;
  452. end;
  453. end;
  454. procedure TrpgGatherData.SaveDealPaySpecialProjData(
  455. ADealPay: TProjGatherDealPayList; AProjType: Integer);
  456. var
  457. vDealPayData: TrgpDealPayData;
  458. begin
  459. vDealPayData := TrgpDealPayData.Create(FConnection);
  460. try
  461. vDealPayData.SaveSpecialProjDataTo(ADealPay, AProjType, SDealPay_SProj+IntToStr(AProjType));
  462. finally
  463. vDealPayData.Free;
  464. end;
  465. end;
  466. procedure TrpgGatherData.CopyProjProperty(const AFileName: string;
  467. AProjIndex, AProjType: Integer);
  468. const
  469. sCopy = 'Insert Into r_ProjProperties_TransProj' +
  470. ' Select ID, %d As ProjID, %d As ProjType,' +
  471. ' Name, PropValue' +
  472. ' From ProjProperties In ''%s''';
  473. begin
  474. ExecuteSql(FConnection, Format(sCopy, [AProjIndex, AProjType, AFileName]));
  475. end;
  476. procedure TrpgGatherData.SaveGatherProjProperties(
  477. AProperties: TProjGatherProperties);
  478. procedure SaveProperty(ID: Integer; AProperty: TProjGatherProperty);
  479. const
  480. sInsertSql = 'Insert Into r_ProjProperties_Gather (ID, ProjID, ProjType, Name, PropValue) ' +
  481. ' Values (%d, -2, 0, ''%s'', ''%s'')';
  482. begin
  483. ExecuteSql(FConnection, Format(sInsertSql, [ID, UpperCase(AProperty.Name), AProperty.Value]));
  484. end;
  485. var
  486. i: Integer;
  487. begin
  488. for i := 0 to AProperties.Count - 1 do
  489. SaveProperty(i, AProperties.PgProperty[i]);
  490. end;
  491. end.