report_memory.test.js 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  1. 'use strict';
  2. /**
  3. *
  4. *
  5. * @author Mai
  6. * @date
  7. * @version
  8. */
  9. const { app, assert } = require('egg-mock/bootstrap');
  10. const path = require('path');
  11. let savePath;
  12. const mockData = {};
  13. const dataType = {
  14. int: 'int',
  15. str: 'string',
  16. double: 'double',
  17. currency: 'currency',
  18. };
  19. const addFields = function(table, name, field, type, tag) {
  20. const data = {};
  21. data.ID = table.ID * 100 + table.items.length + 1;
  22. data.Name = name + '(' + field + ')';
  23. data.DataType = type;
  24. data.TableName = table.key;
  25. data.descr = '';
  26. data.mapExpression = "$PROJECT.REPORT.getProperty('" + table.key + "', '" + field + "')";
  27. if (tag) {
  28. switch (tag.type) {
  29. case 'up':
  30. data.Precision = { type: "fixed", fixedMapExpression: "$PROJECT.REPORT.getProperty('tender_info', 'decimal.up')" };
  31. break;
  32. case 'tp':
  33. if (tag.subType) {
  34. data.Precision = { type: "fixed", fixedMapExpression: "$PROJECT.REPORT.getProperty('tender_info', 'decimal." + "_" + tag.subType + "_tp')" };
  35. } else {
  36. data.Precision = { type: "fixed", fixedMapExpression: "$PROJECT.REPORT.getProperty('tender_info', 'decimal.tp')" };
  37. }
  38. break;
  39. case 'qty':
  40. data.Precision = { type: "flexible", flexibleRefFieldID: table.ID * 100 + tag.unitKey, flexibleMapExpression: "$PROJECT.REPORT.getProperty('tender_info', 'precision')" };
  41. break;
  42. }
  43. }
  44. table.items.push(data);
  45. };
  46. const saveTableDefine = async function (ctx, tableDefine, file) {
  47. delete tableDefine.ID;
  48. delete tableDefine.key;
  49. let defineStr = JSON.stringify(tableDefine, "", "\t");
  50. const replaceStr = [
  51. {match: '"Name":', str: 'Name:'},
  52. {match: '"remark":', str: 'remark:'},
  53. {match: '"items":', str: 'items:'},
  54. {match: '"ID":', str: 'ID:'},
  55. {match: '"DataType":', str: 'DataType:'},
  56. {match: '"TableName":', str: 'TableName:'},
  57. {match: '"descr":', str: 'descr:'},
  58. {match: '"mapExpression":', str: 'mapExpression:'},
  59. {match: '"Precision":', str: 'Precision:'},
  60. {match: '"type":', str: 'type:'},
  61. {match: '"flexibleRefFieldID":', str: 'flexibleRefFieldID:'},
  62. {match: '"fixedMapExpression":', str: 'fixedMapExpression:'},
  63. {match: '"flexibleMapExpression":', str: 'flexibleMapExpression:'},
  64. ];
  65. for (const rs of replaceStr) {
  66. const reg = new RegExp(rs.match, 'gm');
  67. defineStr = defineStr.replace(reg, rs.str);
  68. }
  69. await ctx.helper.saveBufferFile(defineStr, file);
  70. };
  71. describe('test/app/service/report_memory.test.js', () => {
  72. // 准备测试数据
  73. before(function* () {
  74. const ctx = app.mockContext();
  75. savePath = path.join(ctx.app.baseDir,'report_temp');
  76. // 模拟登录session
  77. // const postData = {
  78. // account: '734406061@qq.com',
  79. // project: 'T201711273363',
  80. // project_password: 'mai654321',
  81. // };
  82. // const postData = {
  83. // account: 'chente',
  84. // project: 'T201711273363',
  85. // project_password: '123456',
  86. // };
  87. const postData = {
  88. account: 'zengpeiwen',
  89. project: 'P1201',
  90. project_password: '123456',
  91. };
  92. ctx.session = {};
  93. const loginResult = yield ctx.service.projectAccount.accountLogin(postData, 2);
  94. assert(loginResult);
  95. mockData.session = ctx.session;
  96. });
  97. // 中间计量表数据 - 台账
  98. it('test getStageImTzData & getStageImTzBillsData', function* () {
  99. const ctx = app.mockContext(mockData);
  100. // test12 - 第6期
  101. const stage = yield ctx.service.stage.getDataByCondition({tid: 12, order: 6});
  102. const mainData = yield ctx.service.reportMemory.getStageImTzData(12, stage.id);
  103. const billsData = yield ctx.service.reportMemory.getStageImTzBillsData(12, stage.id);
  104. if (mainData instanceof Array) {
  105. yield ctx.helper.saveBufferFile(JSON.stringify(mainData,"","\t"), ctx.app.baseDir + '/mem_stage_im_tz.json');
  106. }
  107. if (billsData instanceof Array) {
  108. yield ctx.helper.saveBufferFile(JSON.stringify(billsData,"","\t"), ctx.app.baseDir + '/mem_stage_im_tz_bills.json');
  109. }
  110. });
  111. // 中间计量表数据 - 总量
  112. it('test getStageImZlData', function* () {
  113. const ctx = app.mockContext(mockData);
  114. // test12 - 第6期
  115. const stage = yield ctx.service.stage.getDataByCondition({tid: 12, order: 6});
  116. const mainData = yield ctx.service.reportMemory.getStageImZlData(12, stage.id);
  117. if (mainData instanceof Array) {
  118. yield ctx.helper.saveBufferFile(JSON.stringify(mainData,"","\t"), ctx.app.baseDir + '/mem_stage_im_zl.json');
  119. }
  120. });
  121. // 月进度数据
  122. it('test getMonthProgress', function* () {
  123. const ctx = app.mockContext(mockData);
  124. // test12
  125. const mainData = yield ctx.service.reportMemory.getMonthProgress(12);
  126. if (mainData instanceof Array) {
  127. yield ctx.helper.saveBufferFile(JSON.stringify(mainData,"","\t"), ctx.app.baseDir + '/mem_month_progress.json');
  128. }
  129. });
  130. // 期清单数据
  131. it('test getStageBills', function* () {
  132. const ctx = app.mockContext(mockData);
  133. // test12 - 第6期
  134. const stage = yield ctx.service.stage.getDataByCondition({tid: 12, order: 6});
  135. const mainData = yield ctx.service.reportMemory.getStageBillsData(12, stage.id, [
  136. 'id', 'tender_id', 'ledger_id', 'ledger_pid', 'level', 'order', 'full_path', 'is_leaf',
  137. 'code', 'b_code', 'name', 'unit', 'unit_price',
  138. 'deal_qty', 'deal_tp',
  139. 'sgfh_qty', 'sgfh_tp', 'sjcl_qty', 'sjcl_tp', 'qtcl_qty', 'qtcl_tp', 'quantity', 'total_price',
  140. 'dgn_qty1', 'dgn_qty2',
  141. 'drawing_code', 'memo', 'node_type', 'is_tp',
  142. 'contract_qty', 'contract_tp', 'qc_qty', 'qc_tp', 'gather_qty', 'gather_tp', 'postil',
  143. 'pre_contract_qty', 'pre_contract_tp', 'pre_qc_qty', 'pre_qc_tp', 'pre_gather_qty', 'pre_gather_tp',
  144. 'end_contract_qty', 'end_contract_tp', 'end_qc_qty', 'end_qc_tp', 'end_gather_qty', 'end_gather_tp',
  145. 'final_tp', 'final_ratio',
  146. 'qc_bgl_code',
  147. 'chapter',
  148. ]);
  149. if (mainData instanceof Array) {
  150. yield ctx.helper.saveBufferFile(JSON.stringify(mainData,"","\t"), path.join(savePath, 'mem_stage_bills.json'));
  151. }
  152. });
  153. // 期部位明细数据
  154. it('test getStagePos', function* () {
  155. const ctx = app.mockContext(mockData);
  156. // test12 - 第6期
  157. const stage = yield ctx.service.stage.getDataByCondition({tid: 12, order: 6});
  158. const mainData = yield ctx.service.reportMemory.getStagePosData(12, stage.id);
  159. if (mainData instanceof Array) {
  160. yield ctx.helper.saveBufferFile(JSON.stringify(mainData,"","\t"), path.join(savePath, 'mem_stage_pos.json'));
  161. }
  162. });
  163. // 期 全审核人 数据
  164. it('test getStageBillsCompare', function* () {
  165. const ctx = app.mockContext(mockData);
  166. // test12 - 第4期
  167. const stage = yield ctx.service.stage.getDataByCondition({tid: 12, order: 4});
  168. const mainData = yield ctx.service.reportMemory.getStageBillsCompareData(12, stage.id, [
  169. 'id', 'tender_id', 'ledger_id', 'ledger_pid', 'level', 'order', 'full_path', 'is_leaf',
  170. 'code', 'b_code', 'name', 'unit', 'unit_price',
  171. 'deal_qty', 'deal_tp',
  172. 'sgfh_qty', 'sgfh_tp', 'sjcl_qty', 'sjcl_tp', 'qtcl_qty', 'qtcl_tp', 'quantity', 'total_price',
  173. 'dgn_qty1', 'dgn_qty2',
  174. 'drawing_code', 'memo', 'node_type', 'is_tp',
  175. 'r0_contract_qty', 'r0_contract_tp', 'r0_qc_qty', 'r0_qc_tp', 'r0_gather_qty', 'r0_gather_tp',
  176. 'r1_contract_qty', 'r1_contract_tp', 'r1_qc_qty', 'r1_qc_tp', 'r1_gather_qty', 'r1_gather_tp',
  177. 'pre_contract_qty', 'pre_contract_tp', 'pre_qc_qty', 'pre_qc_tp', 'pre_gather_qty', 'pre_gather_tp',
  178. 'chapter',
  179. ]);
  180. if (mainData instanceof Array) {
  181. yield ctx.helper.saveBufferFile(JSON.stringify(mainData,"","\t"), path.join(savePath, 'mem_stage_bills_compare.json'));
  182. }
  183. });
  184. it('test getStagePay', function* () {
  185. const ctx = app.mockContext(mockData);
  186. // test12 - 第4期
  187. const stage = yield ctx.service.stage.getDataByCondition({tid: 12, order: 6});
  188. const data = yield ctx.service.reportMemory.getStagePayData(stage.tid, stage.id, ['r0_tp', 'r1_tp']);
  189. if (data instanceof Array) {
  190. yield ctx.helper.saveBufferFile(JSON.stringify(data, '', '\t'), path.join(savePath, 'mem_stage_pay.json'));
  191. }
  192. });
  193. it('test mem_union_data', function* () {
  194. const ctx = app.mockContext(mockData);
  195. const tableDefine = {};
  196. tableDefine.Name = '预留扩展数据-合并(mem_union_data)';
  197. tableDefine.remark = '';
  198. tableDefine.ID = 28;
  199. tableDefine.key = 'mem_union_data';
  200. tableDefine.items = [];
  201. const prefix = '预留扩展数据-合并-';
  202. addFields(tableDefine, prefix + '字符串1', 'str1', dataType.str);
  203. addFields(tableDefine, prefix + '字符串2', 'str2', dataType.str);
  204. addFields(tableDefine, prefix + '字符串3', 'str3', dataType.str);
  205. addFields(tableDefine, prefix + '字符串4', 'str4', dataType.str);
  206. addFields(tableDefine, prefix + '字符串5', 'str5', dataType.str);
  207. addFields(tableDefine, prefix + '字符串6', 'str6', dataType.str);
  208. addFields(tableDefine, prefix + '字符串7', 'str7', dataType.str);
  209. addFields(tableDefine, prefix + '字符串8', 'str8', dataType.str);
  210. addFields(tableDefine, prefix + '字符串9', 'str9', dataType.str);
  211. addFields(tableDefine, prefix + '字符串10', 'str10', dataType.str);
  212. addFields(tableDefine, prefix + '整数1', 'int1', dataType.int);
  213. addFields(tableDefine, prefix + '整数2', 'int2', dataType.int);
  214. addFields(tableDefine, prefix + '整数3', 'int3', dataType.int);
  215. addFields(tableDefine, prefix + '整数4', 'int4', dataType.int);
  216. addFields(tableDefine, prefix + '整数5', 'int5', dataType.int);
  217. addFields(tableDefine, prefix + '整数6', 'int6', dataType.int);
  218. addFields(tableDefine, prefix + '数量1', 'qty1', dataType.currency);
  219. addFields(tableDefine, prefix + '数量2', 'qty2', dataType.currency);
  220. addFields(tableDefine, prefix + '数量3', 'qty3', dataType.currency);
  221. addFields(tableDefine, prefix + '数量4', 'qty4', dataType.currency);
  222. addFields(tableDefine, prefix + '数量5', 'qty5', dataType.currency);
  223. addFields(tableDefine, prefix + '数量6', 'qty6', dataType.currency);
  224. addFields(tableDefine, prefix + '数量7', 'qty7', dataType.currency);
  225. addFields(tableDefine, prefix + '数量8', 'qty8', dataType.currency);
  226. addFields(tableDefine, prefix + '数量9', 'qty9', dataType.currency);
  227. addFields(tableDefine, prefix + '数量10', 'qty10', dataType.currency);
  228. addFields(tableDefine, prefix + '金额1', 'tp1', dataType.currency);
  229. addFields(tableDefine, prefix + '金额2', 'tp2', dataType.currency);
  230. addFields(tableDefine, prefix + '金额3', 'tp3', dataType.currency);
  231. addFields(tableDefine, prefix + '金额4', 'tp4', dataType.currency);
  232. addFields(tableDefine, prefix + '金额5', 'tp5', dataType.currency);
  233. addFields(tableDefine, prefix + '金额6', 'tp6', dataType.currency);
  234. addFields(tableDefine, prefix + '金额7', 'tp7', dataType.currency);
  235. addFields(tableDefine, prefix + '金额8', 'tp8', dataType.currency);
  236. addFields(tableDefine, prefix + '金额9', 'tp9', dataType.currency);
  237. addFields(tableDefine, prefix + '金额10', 'tp10', dataType.currency);
  238. yield saveTableDefine(ctx, tableDefine, path.join(savePath, 'mem_union_data.json'));
  239. });
  240. it('test mem_change_bills && mem_change ', function* () {
  241. const ctx = app.mockContext(mockData);
  242. const change = yield ctx.service.reportMemory.getChangeData(12);
  243. if (change instanceof Array) {
  244. yield ctx.helper.saveBufferFile(JSON.stringify(change, '', '\t'), path.join(savePath, 'mem_change.json'));
  245. }
  246. const data = yield ctx.service.reportMemory.getChangeBillsData(12);
  247. if (data instanceof Array) {
  248. yield ctx.helper.saveBufferFile(JSON.stringify(data, '', '\t'), path.join(savePath, 'mem_change_bills.json'));
  249. }
  250. });
  251. });