report_controller.test.js 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. 'use strict';
  2. /**
  3. *
  4. *
  5. * @author Mai
  6. * @date
  7. * @version
  8. */
  9. const { app, assert } = require('egg-mock/bootstrap');
  10. const mockData = {};
  11. const path = require('path');
  12. async function getReportData(ctx, params, filters, memFieldKeys) {
  13. const rst = {};
  14. const runnableRst = [];
  15. const runnableKey = []; // 这个配合runnableRst用,未来考虑并行查询优化
  16. // console.log('params');
  17. // console.log(params);
  18. // console.log('memFieldKeys');
  19. // console.log(memFieldKeys);
  20. for (const filter of filters) {
  21. if (runnableKey.indexOf(filter) < 0) {
  22. switch (filter) {
  23. case 'project' :
  24. runnableRst.push(ctx.service.project.getProjectById(params.project_id));
  25. runnableKey.push('project');
  26. break;
  27. case 'tender_info' :
  28. runnableRst.push(ctx.service.tenderInfo.getTenderInfo(params.tender_id));
  29. runnableKey.push('tender_info');
  30. break;
  31. case 'ledger' :
  32. runnableRst.push(ctx.service.ledger.getData(params.tender_id, 0));
  33. runnableKey.push('ledger');
  34. break;
  35. case 'stage_bills':
  36. runnableRst.push(ctx.service.stageBills.getLastestStageData(params.tender_id, params.stage_id));
  37. runnableKey.push('stage_bills');
  38. break;
  39. case 'stage_bills_final':
  40. await checkStg(ctx, params);
  41. runnableRst.push(ctx.service.stageBillsFinal.getFinalDataEx(params.tender_id, params.stage_order));
  42. runnableKey.push('stage_bills_final');
  43. break;
  44. case 'stage':
  45. runnableRst.push(ctx.service.stage.getStageById(params.stage_id));
  46. runnableKey.push('stage');
  47. break;
  48. case 'stage_pay':
  49. await checkStg(ctx, params);
  50. runnableRst.push(ctx.service.stagePay.getAuditorStageData(params.stage_id, params.stage_times, params.stage_order));
  51. runnableKey.push('stage_pay');
  52. break;
  53. case 'mem_stage_im_zl':
  54. // memFieldKeys[filter]
  55. runnableRst.push(ctx.service.reportMemory.getStageImZlData(params.tender_id, params.stage_id));
  56. runnableKey.push('mem_stage_im_zl');
  57. break;
  58. case 'mem_month_progress':
  59. runnableRst.push(ctx.service.reportMemory.getMonthProgress(params.tender_id));
  60. runnableKey.push('mem_month_progress');
  61. break;
  62. case 'mem_stage_bills':
  63. runnableRst.push(ctx.service.reportMemory.getStageBillsData(params.tender_id, params.stage_id));
  64. runnableKey.push('mem_stage_pos');
  65. break;
  66. case 'mem_stage_pos':
  67. runnableRst.push(ctx.service.reportMemory.getStagePosData(params.tender_id, params.stage_id));
  68. runnableKey.push('mem_stage_pos');
  69. break;
  70. case 'change':
  71. runnableRst.push(ctx.service.change.getListByStatus(params.tender_id, 3)); // 获取所有审核通过的变更主信息
  72. runnableKey.push('change');
  73. break;
  74. case 'change_audit_list':
  75. runnableRst.push(ctx.service.changeAuditList.getChangeAuditBills(params.tender_id)); // 获取所有审核通过的变更清单
  76. runnableKey.push('change_audit_list');
  77. break;
  78. default:
  79. break;
  80. }
  81. }
  82. }
  83. const queryRst = await Promise.all(runnableRst);
  84. for (let idx = 0; idx < runnableKey.length; idx++) {
  85. rst[runnableKey[idx]] = queryRst[idx];
  86. if (['change', 'change_audit_list'].indexOf(runnableKey[idx]) >= 0) {
  87. await ctx.helper.saveBufferFile(JSON.stringify(queryRst[idx],"","\t"), ctx.app.baseDir + '/' + runnableKey[idx] +'.json');
  88. }
  89. }
  90. for (const filter of filters) {
  91. switch (filter) {
  92. case 'mem_stage_im_tz':
  93. rst[filter] = await ctx.service.reportMemory.getStageImTzData(params.tender_id, params.stage_id);
  94. break;
  95. case 'mem_stage_im_tz_bills':
  96. rst[filter] = await ctx.service.reportMemory.getStageImTzBillsData(params.tender_id, params.stage_id);
  97. break;
  98. default:
  99. break;
  100. }
  101. }
  102. return rst;
  103. }
  104. describe('test/app/service/report_memory.test.js', () => {
  105. // 准备测试数据
  106. before(function* () {
  107. const ctx = app.mockContext();
  108. // 模拟登录session
  109. const postData = {
  110. account: 'fuqingqing',
  111. project: 'P0505',
  112. project_password: '123456',
  113. };
  114. // const postData = {
  115. // account: 'chente',
  116. // project: 'T201711273363',
  117. // project_password: '123456',
  118. // };
  119. ctx.session = {};
  120. const loginResult = yield ctx.service.projectAccount.accountLogin(postData, 2);
  121. assert(loginResult);
  122. mockData.session = ctx.session;
  123. });
  124. // 数据
  125. it('test getReportData', function* () {
  126. const ctx = app.mockContext(mockData);
  127. // test12 - 第6期
  128. const stage = yield ctx.service.stage.getDataByCondition({tid: 12, order: 6});
  129. const params = {
  130. tid: stage.tid,
  131. sid: stage.sid,
  132. };
  133. const filters = ['change', 'change_audit_list'];
  134. const result = yield getReportData(ctx, params, filters);
  135. const savePath = path.join(ctx.app.baseDir, 'report_temp');
  136. yield ctx.helper.recursiveMkdirSync(savePath);
  137. for (const table in result) {
  138. yield ctx.helper.saveBufferFile(JSON.stringify(result[table],"","\t"), path.join(savePath, table + '.json'));
  139. }
  140. });
  141. });