'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: 'fuqingqing', project: 'P0505', project_password: '123456', }; // 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')); } }); });