|
@@ -0,0 +1,146 @@
|
|
|
+'use strict';
|
|
|
+
|
|
|
+/**
|
|
|
+ *
|
|
|
+ *
|
|
|
+ * @author Mai
|
|
|
+ * @date
|
|
|
+ * @version
|
|
|
+ */
|
|
|
+
|
|
|
+const { app, assert } = require('egg-mock/bootstrap');
|
|
|
+const mockData = {};
|
|
|
+const path = require('path');
|
|
|
+
|
|
|
+async function getReportData(ctx, params, filters, memFieldKeys) {
|
|
|
+ const rst = {};
|
|
|
+ const runnableRst = [];
|
|
|
+ const runnableKey = []; // 这个配合runnableRst用,未来考虑并行查询优化
|
|
|
+ // console.log('params');
|
|
|
+ // console.log(params);
|
|
|
+ // console.log('memFieldKeys');
|
|
|
+ // console.log(memFieldKeys);
|
|
|
+ for (const filter of filters) {
|
|
|
+ if (runnableKey.indexOf(filter) < 0) {
|
|
|
+ switch (filter) {
|
|
|
+ case 'project' :
|
|
|
+ runnableRst.push(ctx.service.project.getProjectById(params.project_id));
|
|
|
+ runnableKey.push('project');
|
|
|
+ break;
|
|
|
+ case 'tender_info' :
|
|
|
+ runnableRst.push(ctx.service.tenderInfo.getTenderInfo(params.tender_id));
|
|
|
+ runnableKey.push('tender_info');
|
|
|
+ break;
|
|
|
+ case 'ledger' :
|
|
|
+ runnableRst.push(ctx.service.ledger.getData(params.tender_id, 0));
|
|
|
+ runnableKey.push('ledger');
|
|
|
+ break;
|
|
|
+ case 'stage_bills':
|
|
|
+ runnableRst.push(ctx.service.stageBills.getLastestStageData(params.tender_id, params.stage_id));
|
|
|
+ runnableKey.push('stage_bills');
|
|
|
+ break;
|
|
|
+ case 'stage_bills_final':
|
|
|
+ await checkStg(ctx, params);
|
|
|
+ runnableRst.push(ctx.service.stageBillsFinal.getFinalDataEx(params.tender_id, params.stage_order));
|
|
|
+ runnableKey.push('stage_bills_final');
|
|
|
+ break;
|
|
|
+ case 'stage':
|
|
|
+ runnableRst.push(ctx.service.stage.getStageById(params.stage_id));
|
|
|
+ runnableKey.push('stage');
|
|
|
+ break;
|
|
|
+ case 'stage_pay':
|
|
|
+ await checkStg(ctx, params);
|
|
|
+ runnableRst.push(ctx.service.stagePay.getAuditorStageData(params.stage_id, params.stage_times, params.stage_order));
|
|
|
+ runnableKey.push('stage_pay');
|
|
|
+ break;
|
|
|
+ case 'mem_stage_im_zl':
|
|
|
+ // memFieldKeys[filter]
|
|
|
+ runnableRst.push(ctx.service.reportMemory.getStageImZlData(params.tender_id, params.stage_id));
|
|
|
+ runnableKey.push('mem_stage_im_zl');
|
|
|
+ break;
|
|
|
+ case 'mem_month_progress':
|
|
|
+ runnableRst.push(ctx.service.reportMemory.getMonthProgress(params.tender_id));
|
|
|
+ runnableKey.push('mem_month_progress');
|
|
|
+ break;
|
|
|
+ case 'mem_stage_bills':
|
|
|
+ runnableRst.push(ctx.service.reportMemory.getStageBillsData(params.tender_id, params.stage_id));
|
|
|
+ runnableKey.push('mem_stage_pos');
|
|
|
+ break;
|
|
|
+ case 'mem_stage_pos':
|
|
|
+ runnableRst.push(ctx.service.reportMemory.getStagePosData(params.tender_id, params.stage_id));
|
|
|
+ runnableKey.push('mem_stage_pos');
|
|
|
+ break;
|
|
|
+ case 'change':
|
|
|
+ runnableRst.push(ctx.service.change.getListByStatus(params.tender_id, 3)); // 获取所有审核通过的变更主信息
|
|
|
+ runnableKey.push('change');
|
|
|
+ break;
|
|
|
+ case 'change_audit_list':
|
|
|
+ runnableRst.push(ctx.service.changeAuditList.getChangeAuditBills(params.tender_id)); // 获取所有审核通过的变更清单
|
|
|
+ runnableKey.push('change_audit_list');
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ const queryRst = await Promise.all(runnableRst);
|
|
|
+ for (let idx = 0; idx < runnableKey.length; idx++) {
|
|
|
+ rst[runnableKey[idx]] = queryRst[idx];
|
|
|
+ if (['change', 'change_audit_list'].indexOf(runnableKey[idx]) >= 0) {
|
|
|
+ await ctx.helper.saveBufferFile(JSON.stringify(queryRst[idx],"","\t"), ctx.app.baseDir + '/' + runnableKey[idx] +'.json');
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for (const filter of filters) {
|
|
|
+ switch (filter) {
|
|
|
+ case 'mem_stage_im_tz':
|
|
|
+ rst[filter] = await ctx.service.reportMemory.getStageImTzData(params.tender_id, params.stage_id);
|
|
|
+ break;
|
|
|
+ case 'mem_stage_im_tz_bills':
|
|
|
+ rst[filter] = await ctx.service.reportMemory.getStageImTzBillsData(params.tender_id, params.stage_id);
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return rst;
|
|
|
+}
|
|
|
+
|
|
|
+describe('test/app/service/report_memory.test.js', () => {
|
|
|
+ // 准备测试数据
|
|
|
+ before(function* () {
|
|
|
+ const ctx = app.mockContext();
|
|
|
+ // 模拟登录session
|
|
|
+ const postData = {
|
|
|
+ account: '734406061@qq.com',
|
|
|
+ project: 'T201711273363',
|
|
|
+ project_password: 'mai654321',
|
|
|
+ };
|
|
|
+ // const postData = {
|
|
|
+ // account: 'chente',
|
|
|
+ // project: 'T201711273363',
|
|
|
+ // project_password: '123456',
|
|
|
+ // };
|
|
|
+ ctx.session = {};
|
|
|
+ const loginResult = yield ctx.service.projectAccount.accountLogin(postData, 2);
|
|
|
+ assert(loginResult);
|
|
|
+ mockData.session = ctx.session;
|
|
|
+ });
|
|
|
+ // 数据
|
|
|
+ it('test getReportData', function* () {
|
|
|
+ const ctx = app.mockContext(mockData);
|
|
|
+
|
|
|
+ // test12 - 第6期
|
|
|
+ const stage = yield ctx.service.stage.getDataByCondition({tid: 12, order: 6});
|
|
|
+ const params = {
|
|
|
+ tid: stage.tid,
|
|
|
+ sid: stage.sid,
|
|
|
+ };
|
|
|
+ const filters = ['change', 'change_audit_list'];
|
|
|
+ const result = yield getReportData(ctx, params, filters);
|
|
|
+ const savePath = path.join(ctx.app.baseDir, 'report_temp');
|
|
|
+ yield ctx.helper.recursiveMkdirSync(savePath);
|
|
|
+ for (const table in result) {
|
|
|
+ yield ctx.helper.saveBufferFile(JSON.stringify(result[table],"","\t"), path.join(savePath, table + '.json'));
|
|
|
+ }
|
|
|
+ });
|
|
|
+});
|