report.js 42 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719
  1. 'use strict';
  2. /**
  3. *
  4. *
  5. * @author Mai
  6. * @date
  7. * @version
  8. */
  9. const BudgetSource = require('../lib/rm/tender_budget');
  10. const MaterialSource = require('../lib/rm/tender_material');
  11. const FinancialSource = require('../lib/rm/tender_financial');
  12. const rptCustomData = require('../lib/rptCustomData');
  13. const bindData = {
  14. materialGather: ['mem_material_gather_bills', 'mem_material_gather_xmj', 'mem_material_gather_gl'],
  15. gatherChange: ['mem_gather_change', 'mem_gather_change_bills'],
  16. fjChange: ['mem_fj_change_progress', 'mem_fj_change_sum'],
  17. };
  18. const sourceTypeConst = require('../const/source_type');
  19. module.exports = app => {
  20. class Report extends app.BaseService {
  21. /**
  22. * 构造函数
  23. *
  24. * @param {Object} ctx - egg全局context
  25. * @return {void}
  26. */
  27. constructor(ctx) {
  28. super(ctx);
  29. }
  30. async checkStg(ctx, params) {
  31. if (ctx.stage === null || ctx.stage === undefined || parseInt(ctx.stage.id) !== parseInt(params.stage_id)) {
  32. await ctx.service.stage.checkStage(params.stage_id);
  33. if (ctx.stage) {
  34. params.stage_order = ctx.stage.curOrder;
  35. }
  36. }
  37. }
  38. getFilter(sourceFilters) {
  39. const common = [],
  40. spec = [];
  41. for (const sf of sourceFilters) {
  42. let bSpec = false;
  43. for (const key in bindData) {
  44. const b = bindData[key];
  45. if (b.indexOf(sf) >= 0) {
  46. bSpec = true;
  47. if (spec.indexOf(key) === -1) {
  48. spec.push(key);
  49. break;
  50. }
  51. }
  52. }
  53. if (!bSpec) common.push(sf);
  54. }
  55. return [common, spec];
  56. }
  57. getFieldKeys(source, filter) {
  58. const result = [];
  59. for (const f of filter) {
  60. if (source[f]) result.push(...source[f]);
  61. }
  62. return result;
  63. }
  64. clearReportCache() {
  65. this.ctx.service.rptGatherMemory.clearCache();
  66. }
  67. async tender(params, sourceFilters, memFieldKeys, customDefine, customSelect) {
  68. const [filters, specFilters] = this.getFilter(sourceFilters);
  69. const service = this.ctx.service;
  70. await service.tender.checkTender(params.tender_id);
  71. const materialSource = new MaterialSource(this.ctx);
  72. const financialSource = new FinancialSource(this.ctx);
  73. const rst = {};
  74. const runnableRst = [];
  75. const runnableKey = []; // 这个配合runnableRst用,未来考虑并行查询优化
  76. const budgetSource = new BudgetSource(this.ctx);
  77. for (const filter of filters) {
  78. if (runnableKey.indexOf(filter) < 0) {
  79. switch (filter) {
  80. case 'project' :
  81. runnableRst.push(service.project.getProjectById(params.project_id));
  82. runnableKey.push(filter);
  83. break;
  84. case 'tender_info' :
  85. runnableRst.push(service.tenderInfo.getTenderInfoEx(params.tender_id));
  86. runnableKey.push(filter);
  87. break;
  88. case 'advance_pay':
  89. runnableRst.push(service.advance.getAllDataByCondition({ where: { tid: params.tender_id } }));
  90. runnableKey.push(filter);
  91. break;
  92. case 'deal_bills' :
  93. runnableRst.push(service.dealBills.getDataByTenderId(params.tender_id));
  94. runnableKey.push('deal_bills');
  95. break;
  96. case 'ledger' :
  97. runnableRst.push(service.ledger.getData(params.tender_id, 0));
  98. runnableKey.push(filter);
  99. break;
  100. case 'stage':
  101. runnableRst.push(service.stage.getStageById(params.stage_id));
  102. runnableKey.push(filter);
  103. break;
  104. case 'mem_stages':
  105. runnableRst.push(service.stage.getAllDataByCondition({ where: { tid: params.tender_id }, orders: [['order', 'asc']] }));
  106. runnableKey.push(filter);
  107. break;
  108. case 'stage_bills':
  109. runnableRst.push(service.stageBills.getLastestStageData2(params.tender_id, params.stage_id));
  110. runnableKey.push(filter);
  111. break;
  112. case 'stage_bills_final':
  113. await this.checkStg(this.ctx, params);
  114. runnableRst.push(service.stageBillsFinal.getFinalDataEx(params.tender_id, params.stage_order));
  115. runnableKey.push(filter);
  116. break;
  117. case 'stage_pay':
  118. await this.checkStg(this.ctx, params);
  119. runnableRst.push(service.stagePay.getStagePays(this.ctx.stage));
  120. runnableKey.push(filter);
  121. break;
  122. case 'mem_stage_im_zl':
  123. runnableRst.push(service.reportMemory.getStageImZlData(params.tender_id, params.stage_id, memFieldKeys[filter]));
  124. runnableKey.push(filter);
  125. break;
  126. case 'mem_month_progress':
  127. runnableRst.push(service.reportMemory.getMonthProgress(params.tender_id, memFieldKeys[filter]));
  128. runnableKey.push(filter);
  129. break;
  130. case 'stage_audit':
  131. runnableRst.push(service.reportMemory.getStageAuditors(params.tender_id, params.stage_id));
  132. runnableKey.push(filter);
  133. break;
  134. case 'mem_stage_audit_ass':
  135. runnableRst.push(service.reportMemory.getStageAuditAss(params.tender_id, params.stage_id));
  136. runnableKey.push(filter);
  137. break;
  138. case 'mem_stage_bills':
  139. runnableRst.push(service.reportMemory.getStageBillsData(params.tender_id, params.stage_id, memFieldKeys[filter]));
  140. runnableKey.push(filter);
  141. break;
  142. case 'mem_stage_bills_filter':
  143. runnableRst.push(service.reportMemory.getStageBillsData(params.tender_id, params.stage_id, memFieldKeys[filter], true));
  144. runnableKey.push(filter);
  145. break;
  146. case 'mem_stage_pos':
  147. runnableRst.push(service.reportMemory.getStagePosData(params.tender_id, params.stage_id, memFieldKeys[filter]));
  148. runnableKey.push(filter);
  149. break;
  150. case 'mem_stage_pos_compare':
  151. runnableRst.push(service.reportMemory.getStagePosCompareData(params.tender_id, params.stage_id, memFieldKeys[filter]));
  152. runnableKey.push(filter);
  153. break;
  154. case 'mem_stage_bills_compare':
  155. runnableRst.push(service.reportMemory.getStageBillsCompareData(params.tender_id, params.stage_id, memFieldKeys[filter]));
  156. runnableKey.push(filter);
  157. break;
  158. case 'mem_stage_bills_compare_filter':
  159. runnableRst.push(service.reportMemory.getStageBillsCompareData(params.tender_id, params.stage_id, memFieldKeys[filter], true));
  160. runnableKey.push(filter);
  161. break;
  162. case 'mem_stage_pay':
  163. runnableRst.push(service.reportMemory.getStagePayData(params.tender_id, params.stage_id, memFieldKeys[filter]));
  164. runnableKey.push(filter);
  165. break;
  166. case 'change':
  167. runnableRst.push(service.change.getListByStatus(params.tender_id, 3)); // 获取所有审核通过的变更主信息
  168. runnableKey.push(filter);
  169. break;
  170. case 'change_audit_list':
  171. runnableRst.push(service.changeAuditList.getChangeAuditBills(params.tender_id)); // 获取所有审核通过的变更清单
  172. runnableKey.push(filter);
  173. break;
  174. case 'mem_stage_jgcl':
  175. runnableRst.push(service.reportMemory.getStageJgcl(params.tender_id, params.stage_id, memFieldKeys[filter]));
  176. runnableKey.push(filter);
  177. break;
  178. case 'mem_stage_yjcl':
  179. runnableRst.push(service.reportMemory.getStageYjcl(params.tender_id, params.stage_id, memFieldKeys[filter]));
  180. runnableKey.push(filter);
  181. break;
  182. case 'mem_stage_bonus':
  183. runnableRst.push(service.reportMemory.getStageBonus(params.tender_id, params.stage_id, memFieldKeys[filter]));
  184. runnableKey.push(filter);
  185. break;
  186. case 'mem_stage_other':
  187. runnableRst.push(service.reportMemory.getStageOther(params.tender_id, params.stage_id, memFieldKeys[filter]));
  188. runnableKey.push(filter);
  189. break;
  190. case 'mem_stage_safe_prod':
  191. runnableRst.push(service.reportMemory.getStageSafeProd(params.tender_id, params.stage_id, memFieldKeys[filter]));
  192. runnableKey.push(filter);
  193. break;
  194. case 'mem_stage_temp_land':
  195. runnableRst.push(service.reportMemory.getStageTempLand(params.tender_id, params.stage_id, memFieldKeys[filter]));
  196. runnableKey.push(filter);
  197. break;
  198. case 'mem_gather_tender_info':
  199. runnableRst.push(service.rptGatherMemory.getGatherTenderInfo(memFieldKeys[filter],
  200. customDefine.gather_select, customSelect ? customSelect.gather_select : null));
  201. runnableKey.push(filter);
  202. break;
  203. case 'mem_gather_stage_pay':
  204. runnableRst.push(service.rptGatherMemory.getGatherStagePay(memFieldKeys[filter],
  205. customDefine.gather_select, customSelect ? customSelect.gather_select : null));
  206. runnableKey.push(filter);
  207. break;
  208. case 'mem_gather_deal_bills':
  209. runnableRst.push(service.rptGatherMemory.getGatherDealBills(memFieldKeys[filter],
  210. customDefine.gather_select, customSelect ? customSelect.gather_select : null));
  211. runnableKey.push(filter);
  212. break;
  213. case 'mem_gather_stage_jgcl':
  214. runnableRst.push(service.rptGatherMemory.getGatherStageJgcl(memFieldKeys[filter],
  215. customDefine.gather_select, customSelect ? customSelect.gather_select : null));
  216. runnableKey.push(filter);
  217. break;
  218. case 'mem_gather_stage_yjcl':
  219. runnableRst.push(service.rptGatherMemory.getGatherStageYjcl(memFieldKeys[filter],
  220. customDefine.gather_select, customSelect ? customSelect.gather_select : null));
  221. runnableKey.push(filter);
  222. break;
  223. case 'mem_gather_stage_bonus':
  224. runnableRst.push(service.rptGatherMemory.getGatherStageBonus(memFieldKeys[filter],
  225. customDefine.gather_select, customSelect ? customSelect.gather_select : null));
  226. runnableKey.push(filter);
  227. break;
  228. case 'mem_gather_stage_other':
  229. runnableRst.push(service.rptGatherMemory.getGatherStageOther(memFieldKeys[filter],
  230. customDefine.gather_select, customSelect ? customSelect.gather_select : null));
  231. runnableKey.push(filter);
  232. break;
  233. case 'mem_gather_stage_safe_prod':
  234. runnableRst.push(service.rptGatherMemory.getGatherStageSafeProd(memFieldKeys[filter],
  235. customDefine.gather_select, customSelect ? customSelect.gather_select : null));
  236. runnableKey.push(filter);
  237. break;
  238. case 'mem_gather_stage_temp_land':
  239. runnableRst.push(service.rptGatherMemory.getGatherStageTempLand(memFieldKeys[filter],
  240. customDefine.gather_select, customSelect ? customSelect.gather_select : null));
  241. runnableKey.push(filter);
  242. break;
  243. case 'mem_gather_advance_pay':
  244. runnableRst.push(service.rptGatherMemory.getGatherAdvancePay(memFieldKeys[filter],
  245. customDefine.gather_select, customSelect ? customSelect.gather_select : null));
  246. runnableKey.push(filter);
  247. break;
  248. case 'mem_select_material':
  249. runnableRst.push(service.material.getSelectMaterial(params.tender_id, params.material_order));
  250. runnableKey.push(filter);
  251. break;
  252. case 'mem_select_material_audit':
  253. runnableRst.push(materialSource.getSelectMaterialAuditors(params.tender_id, params.material_order));
  254. runnableKey.push(filter);
  255. break;
  256. case 'mem_material':
  257. runnableRst.push(materialSource.getMaterial(params.tender_id, params.material_order, memFieldKeys[filter]));
  258. runnableKey.push(filter);
  259. break;
  260. case 'mem_material_gl':
  261. runnableRst.push(materialSource.getMaterialGl(params.tender_id, params.material_order, memFieldKeys[filter]));
  262. runnableKey.push(filter);
  263. break;
  264. case 'mem_material_gl_detail':
  265. runnableRst.push(materialSource.getMaterialGlDetail(params.tender_id, params.material_order, memFieldKeys[filter]));
  266. runnableKey.push(filter);
  267. break;
  268. case 'mem_material_bills':
  269. runnableRst.push(materialSource.getMaterialBills(params.tender_id, params.material_order, memFieldKeys[filter]));
  270. runnableKey.push(filter);
  271. break;
  272. case 'mem_material_bills_filter':
  273. runnableRst.push(materialSource.getMaterialBills(params.tender_id, params.material_order, memFieldKeys[filter], true));
  274. runnableKey.push(filter);
  275. break;
  276. case 'mem_material_pos':
  277. runnableRst.push(materialSource.getMaterialPos(params.tender_id, params.material_order, memFieldKeys[filter]));
  278. runnableKey.push(filter);
  279. break;
  280. case 'mem_material_stage':
  281. runnableRst.push(materialSource.getMaterialStage(params.tender_id, params.material_order, memFieldKeys[filter]));
  282. runnableKey.push(filter);
  283. break;
  284. case 'mem_stage_sum_bills':
  285. runnableRst.push(service.rptStageSumMemory.getStageSumBills(params.tender_id, memFieldKeys[filter],
  286. customDefine.stage_select, customSelect ? customSelect.stage_select : null));
  287. runnableKey.push(filter);
  288. break;
  289. case 'mem_stage_sum_bills_filter':
  290. runnableRst.push(service.rptStageSumMemory.getStageSumBills(params.tender_id, memFieldKeys[filter],
  291. customDefine.stage_select, customSelect ? customSelect.stage_select : null, true));
  292. runnableKey.push(filter);
  293. break;
  294. case 'mem_stage_sum_pos':
  295. runnableRst.push(service.rptStageSumMemory.getStageSumPos(params.tender_id, memFieldKeys[filter],
  296. customDefine.stage_select, customSelect ? customSelect.stage_select : null));
  297. runnableKey.push(filter);
  298. break;
  299. case 'mem_stage_sum_pay':
  300. runnableRst.push(service.rptStageSumMemory.getStageSumPay(params.tender_id, memFieldKeys[filter],
  301. customDefine.stage_select, customSelect ? customSelect.stage_select : null));
  302. runnableKey.push(filter);
  303. break;
  304. case 'mem_material_sum_gl':
  305. runnableRst.push(service.rptStageSumMemory.getMaterialSumGl(params.tender_id, memFieldKeys[filter],
  306. customDefine.material_sum_select, customSelect ? customSelect.material_sum_select : null));
  307. runnableKey.push(filter);
  308. break;
  309. case 'ledger_cooperation':
  310. runnableRst.push(service.ledgerCooperation.getValidData(params.tender_id));
  311. runnableKey.push(filter);
  312. break;
  313. case 'mem_sign_select':
  314. runnableRst.push(service.reportMemory.getSignSelect(params.tender_id, params.stage_id, customSelect));
  315. runnableKey.push(filter);
  316. break;
  317. case 'mem_stage_change':
  318. runnableRst.push(service.stageChange.getAllDataByCondition({ where: { tid: params.tender_id, sid: params.stage_id } }));
  319. runnableKey.push(filter);
  320. break;
  321. case 'mem_stage_change_bills':
  322. runnableRst.push(service.stageChangeFinal.getFinalData(params.tender_id));
  323. runnableKey.push(filter);
  324. break;
  325. case 'mem_stage_import_change':
  326. runnableRst.push(service.stageImportChange.getFinalData(params.tender_id));
  327. runnableKey.push(filter);
  328. break;
  329. case 'mem_ledger_tag':
  330. runnableRst.push(service.ledgerTag.getDatas(params.tender_id));
  331. runnableKey.push(filter);
  332. break;
  333. case 'mem_stage_tag':
  334. runnableRst.push(service.ledgerTag.getDatas(params.tender_id, params.stage_id));
  335. runnableKey.push(filter);
  336. break;
  337. case 'mem_all_tag':
  338. runnableRst.push(service.ledgerTag.getAllDataByCondition({ where: { tid: params.tender_id } }));
  339. runnableKey.push(filter);
  340. break;
  341. case 'mem_change_info':
  342. runnableRst.push(service.reportMemory.getChangeInfo(params.tender_id, params.stage_id));
  343. runnableKey.push(filter);
  344. break;
  345. case 'mem_change_info_bills':
  346. runnableRst.push(service.reportMemory.getChangeInfoBills(params.tender_id, params.stage_id));
  347. runnableKey.push(filter);
  348. break;
  349. case 'mem_stage_rela_im':
  350. runnableRst.push(service.stageRelaIm.getAllDataByCondition({ where: { tid: params.tender_id, sid: params.stage_id } }));
  351. runnableKey.push(filter);
  352. break;
  353. case 'mem_stage_rela_im_bills':
  354. runnableRst.push(service.stageRelaImBills.getAllDataByCondition({ where: { tid: params.tender_id, sid: params.stage_id } }));
  355. runnableKey.push(filter);
  356. break;
  357. case 'mem_budget_info':
  358. runnableRst.push(params.budget_id > 0 ? budgetSource.budgetInfo(params.budget_id) : budgetSource.tenderBudgetInfo(params.tender_id));
  359. runnableKey.push(filter);
  360. break;
  361. case 'mem_budget_gu':
  362. runnableRst.push(params.budget_id > 0 ? budgetSource.budgetGu(params.budget_id) : budgetSource.tenderGu(params.tender_id));
  363. runnableKey.push(filter);
  364. break;
  365. case 'mem_budget_gai':
  366. runnableRst.push(params.budget_id > 0 ? budgetSource.budgetGai(params.budget_id) : budgetSource.tenderGai(params.tender_id));
  367. runnableKey.push(filter);
  368. break;
  369. case 'mem_budget_yu':
  370. runnableRst.push(params.budget_id > 0 ? budgetSource.budgetYu(params.budget_id) : budgetSource.tenderYu(params.tender_id));
  371. runnableKey.push(filter);
  372. break;
  373. case 'mem_budget_zb':
  374. runnableRst.push(params.budget_id > 0 ? budgetSource.budgetZb(params.budget_id) : budgetSource.tenderZb(params.tender_id));
  375. runnableKey.push(filter);
  376. break;
  377. case 'mem_budget_final':
  378. runnableRst.push(params.budget_id > 0 ? budgetSource.budgetFinal(params.budget_id) : budgetSource.tenderFinal(params.tender_id));
  379. runnableKey.push(filter);
  380. break;
  381. case 'mem_budget_gu_filter':
  382. runnableRst.push(params.budget_id > 0 ? budgetSource.budgetGu(params.budget_id, true) : budgetSource.tenderGu(params.tender_id, true));
  383. runnableKey.push(filter);
  384. break;
  385. case 'mem_budget_gai_filter':
  386. runnableRst.push(params.budget_id > 0 ? budgetSource.budgetGai(params.budget_id, true) : budgetSource.tenderGai(params.tender_id, true));
  387. runnableKey.push(filter);
  388. break;
  389. case 'mem_budget_yu_filter':
  390. runnableRst.push(params.budget_id > 0 ? budgetSource.budgetYu(params.budget_id, true) : budgetSource.tenderYu(params.tender_id, true));
  391. runnableKey.push(filter);
  392. break;
  393. case 'mem_budget_zb_filter':
  394. runnableRst.push(params.budget_id > 0 ? budgetSource.budgetZb(params.budget_id, true) : budgetSource.tenderZb(params.tender_id, true));
  395. runnableKey.push(filter);
  396. break;
  397. case 'mem_budget_final_filter':
  398. runnableRst.push(params.budget_id > 0 ? budgetSource.budgetFinal(params.budget_id, true) : budgetSource.tenderFinal(params.tender_id, true));
  399. runnableKey.push(filter);
  400. break;
  401. case 'mem_pm_deal_pay':
  402. runnableRst.push(service.reportMemory.getPmDeal());
  403. runnableKey.push(filter);
  404. break;
  405. case 'mem_pm_deal_tree':
  406. runnableRst.push(service.reportMemory.getPmDealTree());
  407. runnableKey.push(filter);
  408. break;
  409. case 'mem_schedule_month':
  410. runnableRst.push(service.scheduleMonth.getReportData(params.tender_id));
  411. runnableKey.push(filter);
  412. break;
  413. case 'mem_schedule_stage':
  414. runnableRst.push(service.scheduleStage.getReportData(params.tender_id));
  415. runnableKey.push(filter);
  416. case 'mem_schedule':
  417. runnableRst.push(service.schedule.getDataByCondition({ tid: params.tender_id }));
  418. runnableKey.push(filter);
  419. break;
  420. case 'mem_tender_cert':
  421. runnableRst.push(service.tenderCert.getAllCert(params.tender_id));
  422. runnableKey.push(filter);
  423. break;
  424. case 'mem_gather_tender_cert':
  425. runnableRst.push(service.rptGatherMemory.getGatherTenderCert(memFieldKeys[filter],
  426. customDefine.gather_select, customSelect ? customSelect.gather_select : null));
  427. runnableKey.push(filter);
  428. break;
  429. case 'construction_unit':
  430. runnableRst.push(service.constructionUnit.getReportData(this.ctx.session.sessionProject.id));
  431. runnableKey.push(filter);
  432. break;
  433. case 'mem_financial_pay':
  434. runnableRst.push(financialSource.projectPay(params.tender_id));
  435. runnableKey.push(filter);
  436. break;
  437. case 'mem_financial_pay_contract':
  438. runnableRst.push(financialSource.projectPayContract(params.tender_id));
  439. runnableKey.push(filter);
  440. break;
  441. case 'mem_financial_pay_tender':
  442. runnableRst.push(financialSource.projectPayTender(params.tender_id));
  443. runnableKey.push(filter);
  444. break;
  445. case 'mem_financial_transfer':
  446. runnableRst.push(financialSource.projectTransfer(params.tender_id));
  447. runnableKey.push(filter);
  448. break;
  449. case 'mem_financial_transfer_tender':
  450. runnableRst.push(financialSource.projectTransferTender(params.tender_id));
  451. runnableKey.push(filter);
  452. break;
  453. case 'contract_tree_1':
  454. runnableRst.push(service.reportMemory.getContractTree(params.tender_id, 1));
  455. runnableKey.push(filter);
  456. break;
  457. case 'contract_1':
  458. runnableRst.push(service.reportMemory.getContract(params.tender_id, 1));
  459. runnableKey.push(filter);
  460. break;
  461. case 'contract_pay_1':
  462. runnableRst.push(service.reportMemory.getContractPay(params.tender_id, 1));
  463. runnableKey.push(filter);
  464. break;
  465. case 'contract_tree_2':
  466. runnableRst.push(service.reportMemory.getContractTree(params.tender_id, 2));
  467. runnableKey.push(filter);
  468. break;
  469. case 'contract_2':
  470. runnableRst.push(service.reportMemory.getContract(params.tender_id, 2));
  471. runnableKey.push(filter);
  472. break;
  473. case 'contract_pay_2':
  474. runnableRst.push(service.reportMemory.getContractPay(params.tender_id, 2));
  475. runnableKey.push(filter);
  476. break;
  477. case 'sp_contract_tree_1':
  478. runnableRst.push(service.reportMemory.getSpContractTree(params.tender_id, 1));
  479. runnableKey.push(filter);
  480. break;
  481. case 'sp_contract_1':
  482. runnableRst.push(service.reportMemory.getSpContract(params.tender_id, 1));
  483. runnableKey.push(filter);
  484. break;
  485. case 'sp_contract_pay_1':
  486. runnableRst.push(service.reportMemory.getSpContractPay(params.tender_id, 1));
  487. runnableKey.push(filter);
  488. break;
  489. case 'sp_contract_tree_2':
  490. runnableRst.push(service.reportMemory.getSpContractTree(params.tender_id, 2));
  491. runnableKey.push(filter);
  492. break;
  493. case 'sp_contract_2':
  494. runnableRst.push(service.reportMemory.getSpContract(params.tender_id, 2));
  495. runnableKey.push(filter);
  496. break;
  497. case 'sp_contract_pay_2':
  498. runnableRst.push(service.reportMemory.getSpContractPay(params.tender_id, 2));
  499. runnableKey.push(filter);
  500. break;
  501. default:
  502. break;
  503. }
  504. }
  505. }
  506. const queryRst = await Promise.all(runnableRst);
  507. for (let idx = 0; idx < runnableKey.length; idx++) {
  508. rst[runnableKey[idx]] = queryRst[idx];
  509. }
  510. for (const filter of filters) {
  511. switch (filter) {
  512. case 'mem_custom_select':
  513. rst[filter] = customSelect;
  514. break;
  515. case 'mem_stage_im_tz':
  516. rst[filter] = await service.reportMemory.getStageImTzData(params.tender_id, params.stage_id, memFieldKeys[filter]);
  517. break;
  518. case 'mem_stage_im_tz_bills':
  519. rst[filter] = await service.reportMemory.getStageImTzBillsData(params.tender_id, params.stage_id, memFieldKeys[filter]);
  520. break;
  521. case 'mem_union_data':
  522. rst[filter] = [];
  523. break;
  524. case 'mem_import_change':
  525. rst[filter] = await service.reportMemory.getImportChangeData(params.tender_id, params.stage_id, memFieldKeys[filter]);
  526. break;
  527. case 'mem_import_change_bills':
  528. rst[filter] = await service.reportMemory.getImportChangeBillsData(params.tender_id, params.stage_id, memFieldKeys[filter]);
  529. break;
  530. case 'mem_change':
  531. rst[filter] = await service.reportMemory.getChangeData(params.tender_id, params.stage_id, memFieldKeys[filter]);
  532. break;
  533. case 'mem_change_bills':
  534. rst[filter] = await service.reportMemory.getChangeBillsData(params.tender_id, params.stage_id, memFieldKeys[filter]);
  535. break;
  536. case 'mem_change_audit':
  537. rst[filter] = await service.reportMemory.getChangeAuditData(params.tender_id, params.stage_id, memFieldKeys[filter]);
  538. break;
  539. case 'mem_change_apply':
  540. rst[filter] = await service.reportMemory.getChangeApplyData(params.tender_id);
  541. break;
  542. case 'mem_change_apply_bills':
  543. rst[filter] = await service.reportMemory.getChangeApplyBillsData(params.tender_id);
  544. break;
  545. case 'mem_change_apply_audit':
  546. rst[filter] = await service.reportMemory.getChangeApplyAuditData(params.tender_id);
  547. break;
  548. case 'mem_change_plan':
  549. rst[filter] = await service.reportMemory.getChangePlanData(params.tender_id);
  550. break;
  551. case 'mem_change_plan_bills':
  552. rst[filter] = await service.reportMemory.getChangePlanBillsData(params.tender_id);
  553. break;
  554. case 'mem_change_plan_audit':
  555. rst[filter] = await service.reportMemory.getChangePlanAuditData(params.tender_id);
  556. break;
  557. case 'mem_change_project':
  558. rst[filter] = await service.reportMemory.getChangeProjectData(params.tender_id);
  559. break;
  560. case 'mem_change_project_audit':
  561. rst[filter] = await service.reportMemory.getChangeProjectAuditData(params.tender_id);
  562. break;
  563. case 'mem_jh_im_change':
  564. const jhHelper1 = new rptCustomData.jhHelper(this.ctx);
  565. rst[filter] = await jhHelper1.convert(params.tender_id, params.stage_id, memFieldKeys[filter], customDefine.option);
  566. break;
  567. case 'mem_jh_gather_im_change':
  568. const jhHelper2 = new rptCustomData.jhHelper(this.ctx);
  569. rst[filter] = await jhHelper2.gather(memFieldKeys[filter], customDefine.gather_select, customSelect ? customSelect.gather_select : null);
  570. break;
  571. case 'mem_jh_gather_stage_bills_compare':
  572. const jhHelper3 = new rptCustomData.jhHelper(this.ctx);
  573. rst[filter] = await jhHelper3.gatherBills(memFieldKeys[filter], customDefine.gather_select, customSelect ? customSelect.gather_select : null);
  574. break;
  575. case 'mem_gather_stage_bills':
  576. rst[filter] = await service.rptGatherMemory.getGatherStageBills(memFieldKeys[filter],
  577. customDefine.gather_select, customSelect ? customSelect.gather_select : null);
  578. break;
  579. case 'mem_gather_stage_bills_filter':
  580. rst[filter] = await service.rptGatherMemory.getGatherStageBills(memFieldKeys[filter],
  581. customDefine.gather_select, customSelect ? customSelect.gather_select : null, true);
  582. break;
  583. case 'mem_gather_stage_pos':
  584. rst[filter] = await service.rptGatherMemory.getGatherStagePos(memFieldKeys[filter],
  585. customDefine.gather_select, customSelect ? customSelect.gather_select : null);
  586. break;
  587. case 'mem_gather_stage_change':
  588. rst[filter] = await service.rptGatherMemory.getGatherStageChange(memFieldKeys[filter],
  589. customDefine.gather_select, customSelect ? customSelect.gather_select : null);
  590. break;
  591. // case 'mem_material_bills':
  592. // rst[filter] = await service.rptGatherMemory.getMaterialBills(params.tender_id, params.material_order, memFieldKeys[filter]);
  593. // break;
  594. // case 'mem_material_bills_gl':
  595. // rst[filter] = await service.rptGatherMemory.getMaterialBillsGl(params.tender_id, params.material_order, memFieldKeys[filter]);
  596. // break;
  597. default:
  598. break;
  599. }
  600. }
  601. for (const s of specFilters) {
  602. let Result;
  603. switch (s) {
  604. case 'materialGather':
  605. Result = await materialSource.getMaterialGatherBills(params.tender_id, params.material_order);
  606. break;
  607. case 'gatherChange':
  608. Result = await service.rptGatherMemory.getGatherChange(this.getFieldKeys(memFieldKeys, bindData.gatherChange),
  609. customDefine.gather_select, customSelect ? customSelect.gather_select : null);
  610. break;
  611. case 'fjChange':
  612. const fjHelper = new rptCustomData.fjHelper(this.ctx);
  613. Result = await fjHelper.getChangeProgressData(params.tender_id, params.stage_id);
  614. break;
  615. default:
  616. Result = {};
  617. break;
  618. }
  619. for (const d in Result) {
  620. rst[d] = Result[d];
  621. }
  622. }
  623. return rst;
  624. }
  625. // params = { tender_id: int, detail_id: int }
  626. async payment_safe(params, sourceFilters, memFieldKeys, customDefine, customSelect) {
  627. const RptPaymentSafe = require('../lib/rm/payment_safe');
  628. const rptPaymentSafe = new RptPaymentSafe(this.ctx);
  629. return rptPaymentSafe.getReportData(params, sourceFilters, memFieldKeys, customDefine, customSelect);
  630. }
  631. // params = { tender_id: int, detail_id: int }
  632. async payment(params, sourceFilters, memFieldKeys, customDefine, customSelect) {
  633. const RptPayment = require('../lib/rm/payment');
  634. const rptPayment = new RptPayment(this.ctx);
  635. return rptPayment.getReportData(params, sourceFilters, memFieldKeys, customDefine, customSelect);
  636. }
  637. // params = { sp_id: int, budget_id: int }
  638. async budget(params, sourceFilters, memFieldKeys, customDefine, customSelect) {
  639. const RptBudget = require('../lib/rm/budget');
  640. const rptBudget = new RptBudget(this.ctx);
  641. return rptBudget.getReportData(params, sourceFilters, memFieldKeys, customDefine, customSelect);
  642. }
  643. // params = { change_id: uuid }
  644. async change(params, sourceFilters, memFieldKeys, customDefine, customSelect) {
  645. const RptChange = require('../lib/rm/change');
  646. const rptChange = new RptChange(this.ctx);
  647. return rptChange.getReportData(params, sourceFilters, memFieldKeys, customDefine, customSelect);
  648. }
  649. // params = { change_plan_id: int }
  650. async change_plan(params, sourceFilters, memFieldKeys, customDefine, customSelect) {
  651. const RptChangePlan = require('../lib/rm/change_plan');
  652. const rptChangePlan = new RptChangePlan(this.ctx);
  653. return rptChangePlan.getReportData(params, sourceFilters, memFieldKeys, customDefine, customSelect);
  654. }
  655. // params = { change_project_id: int }
  656. async change_project(params, sourceFilters, memFieldKeys, customDefine, customSelect) {
  657. const RptChangeProj = require('../lib/rm/change_project');
  658. const rptChangeProj = new RptChangeProj(this.ctx);
  659. return rptChangeProj.getReportData(params, sourceFilters, memFieldKeys, customDefine, customSelect);
  660. }
  661. // params = { change_apply_id: int }
  662. async change_apply(params, sourceFilters, memFieldKeys, customDefine, customSelect) {
  663. const RptChangeApply = require('../lib/rm/change_apply');
  664. const rptChangeApply = new RptChangeApply(this.ctx);
  665. return rptChangeApply.getReportData(params, sourceFilters, memFieldKeys, customDefine, customSelect);
  666. }
  667. // params = { material_id: int }
  668. async material(params, sourceFilters, memFieldKeys, customDefine, customSelect) {
  669. const RptMaterial = require('../lib/rm/material');
  670. const rptMaterial = new RptMaterial(this.ctx);
  671. return rptMaterial.getReportData(params, sourceFilters, memFieldKeys, customDefine, customSelect);
  672. }
  673. // params = { advance_id: int }
  674. async advance(params, sourceFilters, memFieldKeys, customDefine, customSelect) {
  675. const RptAdvance = require('../lib/rm/advance');
  676. const rptAdvance = new RptAdvance(this.ctx);
  677. return rptAdvance.getReportData(params, sourceFilters, memFieldKeys, customDefine, customSelect);
  678. }
  679. async getReportData(source_type, params, sourceFilters, memFieldKeys, customDefine, customSelect) {
  680. this.clearReportCache();
  681. const sourceType = sourceTypeConst.sourceTypeData.find(x => { return x.id === source_type; });
  682. if (!sourceType && !this[sourceType.key]) return {};
  683. return await this[sourceType.key](params, sourceFilters, memFieldKeys, customDefine, customSelect);
  684. }
  685. }
  686. return Report;
  687. };