report_memory.test.js 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295
  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 dataType = {
  12. int: 'int',
  13. str: 'string',
  14. double: 'double',
  15. currency: 'currency',
  16. };
  17. const addFields = function(table, name, field, type) {
  18. const data = {};
  19. data.ID = table.ID * 100 + table.items.length + 1;
  20. data.Name = name + '(' + field + ')';
  21. data.DataType = type;
  22. data.TableName = table.key;
  23. data.descr = '';
  24. data.mapExpression = "$PROJECT.REPORT.getProperty('" + table.key + "', '" + field + "')";
  25. table.items.push(data);
  26. };
  27. const saveTableDefine = async function (ctx, tableDefine, file) {
  28. delete tableDefine.ID;
  29. delete tableDefine.key;
  30. let defineStr = JSON.stringify(tableDefine, "", "\t");
  31. const replaceStr = [
  32. {match: '"Name"', str: 'Name'},
  33. {match: '"remark"', str: 'remark'},
  34. {match: '"items"', str: 'items'},
  35. {match: '"ID"', str: 'ID'},
  36. {match: '"DataType"', str: 'DataType'},
  37. {match: '"TableName"', str: 'TableName'},
  38. {match: '"descr"', str: 'descr'},
  39. {match: '"mapExpression"', str: 'mapExpression'},
  40. ];
  41. for (const rs of replaceStr) {
  42. const reg = new RegExp(rs.match, 'gm');
  43. defineStr = defineStr.replace(reg, rs.str);
  44. }
  45. await ctx.helper.saveBufferFile(defineStr, file);
  46. };
  47. describe('test/app/service/report_memory.test.js', () => {
  48. // 准备测试数据
  49. before(function* () {
  50. const ctx = app.mockContext();
  51. // 模拟登录session
  52. const postData = {
  53. account: '734406061@qq.com',
  54. project: 'T201711273363',
  55. project_password: 'mai654321',
  56. };
  57. // const postData = {
  58. // account: 'chente',
  59. // project: 'T201711273363',
  60. // project_password: '123456',
  61. // };
  62. ctx.session = {};
  63. const loginResult = yield ctx.service.projectAccount.accountLogin(postData, 2);
  64. assert(loginResult);
  65. mockData.session = ctx.session;
  66. });
  67. // 中间计量表数据 - 台账
  68. it('test getStageImTzData & getStageImTzBillsData', function* () {
  69. const ctx = app.mockContext(mockData);
  70. // test12 - 第6期
  71. const stage = yield ctx.service.stage.getDataByCondition({tid: 12, order: 6});
  72. const mainData = yield ctx.service.reportMemory.getStageImTzData(12, stage.id);
  73. const billsData = yield ctx.service.reportMemory.getStageImTzBillsData(12, stage.id);
  74. if (mainData instanceof Array) {
  75. yield ctx.helper.saveBufferFile(JSON.stringify(mainData,"","\t"), ctx.app.baseDir + '/mem_stage_im_tz.json');
  76. }
  77. if (billsData instanceof Array) {
  78. yield ctx.helper.saveBufferFile(JSON.stringify(billsData,"","\t"), ctx.app.baseDir + '/mem_stage_im_tz_bills.json');
  79. }
  80. });
  81. // 中间计量表数据 - 总量
  82. it('test getStageImZlData', function* () {
  83. const ctx = app.mockContext(mockData);
  84. // test12 - 第6期
  85. const stage = yield ctx.service.stage.getDataByCondition({tid: 12, order: 6});
  86. const mainData = yield ctx.service.reportMemory.getStageImZlData(12, stage.id);
  87. if (mainData instanceof Array) {
  88. yield ctx.helper.saveBufferFile(JSON.stringify(mainData,"","\t"), ctx.app.baseDir + '/mem_stage_im_zl.json');
  89. }
  90. });
  91. // 月进度数据
  92. it('test getMonthProgress', function* () {
  93. const ctx = app.mockContext(mockData);
  94. // test12
  95. const mainData = yield ctx.service.reportMemory.getMonthProgress(12);
  96. if (mainData instanceof Array) {
  97. yield ctx.helper.saveBufferFile(JSON.stringify(mainData,"","\t"), ctx.app.baseDir + '/mem_month_progress.json');
  98. }
  99. });
  100. // 期清单数据
  101. it('test getStageBills', function* () {
  102. const ctx = app.mockContext(mockData);
  103. // test12 - 第6期
  104. const stage = yield ctx.service.stage.getDataByCondition({tid: 12, order: 6});
  105. const mainData = yield ctx.service.reportMemory.getStageBillsData(12, stage.id, [
  106. 'id', 'tender_id', 'ledger_id', 'ledger_pid', 'level', 'order', 'full_path', 'is_leaf',
  107. 'code', 'b_code', 'name', 'unit', 'unit_price',
  108. 'deal_qty', 'deal_tp',
  109. 'sgfh_qty', 'sgfh_tp', 'sjcl_qty', 'sjcl_tp', 'qtcl_qty', 'qtcl_tp', 'quantity', 'total_price',
  110. 'dgn_qty1', 'dgn_qty2',
  111. 'drawing_code', 'memo', 'node_type', 'is_tp',
  112. 'contract_qty', 'contract_tp', 'qc_qty', 'qc_tp', 'gather_qty', 'gather_tp', 'postil',
  113. 'pre_contract_qty', 'pre_contract_tp', 'pre_qc_qty', 'pre_qc_tp', 'pre_gather_qty', 'pre_gather_tp',
  114. 'end_contract_qty', 'end_contract_tp', 'end_qc_qty', 'end_qc_tp', 'end_gather_qty', 'end_gather_tp',
  115. 'final_tp', 'final_ratio',
  116. 'qc_bgl_code',
  117. 'chapter',
  118. ]);
  119. if (mainData instanceof Array) {
  120. yield ctx.helper.saveBufferFile(JSON.stringify(mainData,"","\t"), ctx.app.baseDir + '/mem_stage_bills.json');
  121. const tableDefine = {};
  122. tableDefine.Name = '期 - 清单数据表(mem_stage_bills)';
  123. tableDefine.remark = '';
  124. tableDefine.ID = 25;
  125. tableDefine.key = 'mem_stage_bills';
  126. tableDefine.items = [];
  127. addFields(tableDefine, '台账ID', 'id', dataType.int);
  128. addFields(tableDefine, '标段ID', 'tender_id', dataType.int);
  129. addFields(tableDefine, '树结构-ID', 'ledger_id', dataType.int);
  130. addFields(tableDefine, '树结构-父项ID', 'ledger_pid', dataType.int);
  131. addFields(tableDefine, '树结构-层级', 'level', dataType.int);
  132. addFields(tableDefine, '树结构-同层排序', 'order', dataType.int);
  133. addFields(tableDefine, '树结构-完整路径', 'full_path', dataType.int);
  134. addFields(tableDefine, '树结构-是否子项', 'is_leaf', dataType.int);
  135. addFields(tableDefine, '项目节编号', 'code', dataType.str);
  136. addFields(tableDefine, '清单编号', 'b_code', dataType.str);
  137. addFields(tableDefine, '名称', 'name', dataType.str);
  138. addFields(tableDefine, '单位', 'unit', dataType.str);
  139. addFields(tableDefine, '单价', 'unit_price', dataType.currency);
  140. addFields(tableDefine, '签约-数量', 'deal_qty', dataType.currency);
  141. addFields(tableDefine, '签约-金额', 'deal_tp', dataType.currency);
  142. addFields(tableDefine, '施工复核-数量', 'sgfh_qty', dataType.currency);
  143. addFields(tableDefine, '施工复核-金额', 'sgfh_tp', dataType.currency);
  144. addFields(tableDefine, '设计错漏-数量', 'sjcl_qty', dataType.currency);
  145. addFields(tableDefine, '设计错漏-金额', 'sjcl_tp', dataType.currency);
  146. addFields(tableDefine, '其他错漏-数量', 'qtcl_qty', dataType.currency);
  147. addFields(tableDefine, '其他错漏-金额', 'qtcl_tp', dataType.currency);
  148. addFields(tableDefine, '台账-数量', 'quantity', dataType.currency);
  149. addFields(tableDefine, '台账-金额', 'total_price', dataType.currency);
  150. addFields(tableDefine, '项目节-数量1', 'dgn_qty1', dataType.currency);
  151. addFields(tableDefine, '项目节-金额2', 'dgn_qty2', dataType.currency);
  152. addFields(tableDefine, '图册号', 'drawing_code', dataType.str);
  153. addFields(tableDefine, '备注', 'memo', dataType.str);
  154. addFields(tableDefine, '节点类型', 'node_type', dataType.int);
  155. addFields(tableDefine, '总额计量', 'is_tp', dataType.int);
  156. addFields(tableDefine, '本期-合同-数量', 'contract_qty', dataType.currency);
  157. addFields(tableDefine, '本期-合同-金额', 'contract_tp', dataType.currency);
  158. addFields(tableDefine, '本期-数量变更-数量', 'qc_qty', dataType.currency);
  159. addFields(tableDefine, '本期-数量变更-金额', 'qc_tp', dataType.currency);
  160. addFields(tableDefine, '本期-完成-数量', 'gather_qty', dataType.currency);
  161. addFields(tableDefine, '本期-完成-金额', 'gather_tp', dataType.currency);
  162. addFields(tableDefine, '本期批注', 'postil', dataType.str);
  163. addFields(tableDefine, '截止上期-合同-数量', 'pre_contract_qty', dataType.currency);
  164. addFields(tableDefine, '截止上期-合同-金额', 'pre_contract_tp', dataType.currency);
  165. addFields(tableDefine, '截止上期-数量变更-数量', 'pre_qc_qty', dataType.currency);
  166. addFields(tableDefine, '截止上期-数量变更-金额', 'pre_qc_tp', dataType.currency);
  167. addFields(tableDefine, '截止上期-完成-数量', 'pre_gather_qty', dataType.currency);
  168. addFields(tableDefine, '截止上期-完成-金额', 'pre_gather_tp', dataType.currency);
  169. addFields(tableDefine, '截止本期-合同-数量', 'end_contract_qty', dataType.currency);
  170. addFields(tableDefine, '截止本期-合同-金额', 'end_contract_tp', dataType.currency);
  171. addFields(tableDefine, '截止本期-数量变更-数量', 'end_qc_qty', dataType.currency);
  172. addFields(tableDefine, '截止本期-数量变更-金额', 'end_qc_tp', dataType.currency);
  173. addFields(tableDefine, '截止本期-完成-数量', 'end_gather_qty', dataType.currency);
  174. addFields(tableDefine, '截止本期-完成-金额', 'end_gather_tp', dataType.currency);
  175. addFields(tableDefine, '(台账 + 截止本期变更)-金额', 'final_tp', dataType.currency);
  176. addFields(tableDefine, '截止本期完成率(%)', 'final_ratio', dataType.double);
  177. addFields(tableDefine, '本期-数量变更-变更令', 'qc_bgl_code', dataType.str);
  178. addFields(tableDefine, '章节编号', 'chapter', dataType.str);
  179. yield saveTableDefine(ctx, tableDefine, ctx.app.baseDir + '/mem_stage_bills_define.json');
  180. }
  181. });
  182. // 期部位明细数据
  183. it('test getStagePos', function* () {
  184. const ctx = app.mockContext(mockData);
  185. // test12 - 第6期
  186. const stage = yield ctx.service.stage.getDataByCondition({tid: 12, order: 6});
  187. const mainData = yield ctx.service.reportMemory.getStagePosData(12, stage.id);
  188. if (mainData instanceof Array) {
  189. yield ctx.helper.saveBufferFile(JSON.stringify(mainData,"","\t"), ctx.app.baseDir + '/mem_stage_pos.json');
  190. //yield saveTableDefine(ctx, tableDefine, ctx.app.baseDir + '/mem_stage_bills_compare_define.json');
  191. }
  192. });
  193. // 期 全审核人 数据
  194. it('test getStageBillsCompare', function* () {
  195. const ctx = app.mockContext(mockData);
  196. // test12 - 第4期
  197. const stage = yield ctx.service.stage.getDataByCondition({tid: 12, order: 4});
  198. const mainData = yield ctx.service.reportMemory.getStageBillsCompareData(12, stage.id, [
  199. 'id', 'tender_id', 'ledger_id', 'ledger_pid', 'level', 'order', 'full_path', 'is_leaf',
  200. 'code', 'b_code', 'name', 'unit', 'unit_price',
  201. 'deal_qty', 'deal_tp',
  202. 'sgfh_qty', 'sgfh_tp', 'sjcl_qty', 'sjcl_tp', 'qtcl_qty', 'qtcl_tp', 'quantity', 'total_price',
  203. 'dgn_qty1', 'dgn_qty2',
  204. 'drawing_code', 'memo', 'node_type', 'is_tp',
  205. 'r0_contract_qty', 'r0_contract_tp', 'r0_qc_qty', 'r0_qc_tp', 'r0_gather_qty', 'r0_gather_tp',
  206. 'r1_contract_qty', 'r1_contract_tp', 'r1_qc_qty', 'r1_qc_tp', 'r1_gather_qty', 'r1_gather_tp',
  207. 'pre_contract_qty', 'pre_contract_tp', 'pre_qc_qty', 'pre_qc_tp', 'pre_gather_qty', 'pre_gather_tp',
  208. 'chapter',
  209. ]);
  210. if (mainData instanceof Array) {
  211. yield ctx.helper.saveBufferFile(JSON.stringify(mainData,"","\t"), ctx.app.baseDir + '/mem_stage_bills_compare.json');
  212. const tableDefine = {};
  213. tableDefine.Name = '期-清单-全参与人数据表(mem_stage_bills_compare)';
  214. tableDefine.remark = '';
  215. tableDefine.ID = 26;
  216. tableDefine.key = 'mem_stage_bills';
  217. tableDefine.items = [];
  218. addFields(tableDefine, '台账ID', 'id', dataType.int);
  219. addFields(tableDefine, '标段ID', 'tender_id', dataType.int);
  220. addFields(tableDefine, '树结构-ID', 'ledger_id', dataType.int);
  221. addFields(tableDefine, '树结构-父项ID', 'ledger_pid', dataType.int);
  222. addFields(tableDefine, '树结构-层级', 'level', dataType.int);
  223. addFields(tableDefine, '树结构-同层排序', 'order', dataType.int);
  224. addFields(tableDefine, '树结构-完整路径', 'full_path', dataType.int);
  225. addFields(tableDefine, '树结构-是否子项', 'is_leaf', dataType.int);
  226. addFields(tableDefine, '项目节编号', 'code', dataType.str);
  227. addFields(tableDefine, '清单编号', 'b_code', dataType.str);
  228. addFields(tableDefine, '名称', 'name', dataType.str);
  229. addFields(tableDefine, '单位', 'unit', dataType.str);
  230. addFields(tableDefine, '单价', 'unit_price', dataType.currency);
  231. addFields(tableDefine, '签约-数量', 'deal_qty', dataType.currency);
  232. addFields(tableDefine, '签约-金额', 'deal_tp', dataType.currency);
  233. addFields(tableDefine, '施工复核-数量', 'sgfh_qty', dataType.currency);
  234. addFields(tableDefine, '施工复核-金额', 'sgfh_tp', dataType.currency);
  235. addFields(tableDefine, '设计错漏-数量', 'sjcl_qty', dataType.currency);
  236. addFields(tableDefine, '设计错漏-金额', 'sjcl_tp', dataType.currency);
  237. addFields(tableDefine, '其他错漏-数量', 'qtcl_qty', dataType.currency);
  238. addFields(tableDefine, '其他错漏-金额', 'qtcl_tp', dataType.currency);
  239. addFields(tableDefine, '台账-数量', 'quantity', dataType.currency);
  240. addFields(tableDefine, '台账-金额', 'total_price', dataType.currency);
  241. addFields(tableDefine, '项目节-数量1', 'dgn_qty1', dataType.currency);
  242. addFields(tableDefine, '项目节-金额2', 'dgn_qty2', dataType.currency);
  243. addFields(tableDefine, '图册号', 'drawing_code', dataType.str);
  244. addFields(tableDefine, '备注', 'memo', dataType.str);
  245. addFields(tableDefine, '节点类型', 'node_type', dataType.int);
  246. addFields(tableDefine, '总额计量', 'is_tp', dataType.int);
  247. addFields(tableDefine, '截止上期-合同-数量', 'pre_contract_qty', dataType.currency);
  248. addFields(tableDefine, '截止上期-合同-金额', 'pre_contract_tp', dataType.currency);
  249. addFields(tableDefine, '截止上期-数量变更-数量', 'pre_qc_qty', dataType.currency);
  250. addFields(tableDefine, '截止上期-数量变更-金额', 'pre_qc_tp', dataType.currency);
  251. addFields(tableDefine, '截止上期-完成-数量', 'pre_gather_qty', dataType.currency);
  252. addFields(tableDefine, '截止上期-完成-金额', 'pre_gather_tp', dataType.currency);
  253. for (let i = 0 ;i < 10; i++) {
  254. addFields(tableDefine, '本期-合同-数量' + '_' + i, 'r' + i +'_' + 'contract_qty', dataType.currency);
  255. addFields(tableDefine, '本期-合同-金额' + '_' + i, 'r' + i +'_' + 'contract_tp', dataType.currency);
  256. addFields(tableDefine, '本期-数量变更-数量' + '_' + i, 'r' + i +'_' + 'qc_qty', dataType.currency);
  257. addFields(tableDefine, '本期-数量变更-金额' + '_' + i, 'r' + i +'_' + 'qc_tp', dataType.currency);
  258. addFields(tableDefine, '本期-完成-数量' + '_' + i, 'r' + i +'_' + 'gather_qty', dataType.currency);
  259. addFields(tableDefine, '本期-完成-金额' + '_' + i, 'r' + i +'_' + 'gather_tp', dataType.currency);
  260. }
  261. addFields(tableDefine, '章节编号', 'chapter', dataType.str);
  262. yield saveTableDefine(ctx, tableDefine, ctx.app.baseDir + '/mem_stage_bills_compare_define.json');
  263. }
  264. });
  265. });