Bläddra i källkod

合同支付,新增第几期开始计量数据

MaiXinRong 5 år sedan
förälder
incheckning
3788e82427

+ 7 - 0
app/service/report_memory.js

@@ -610,6 +610,13 @@ module.exports = app => {
                 const payCalculator = new PayCalculator(this.ctx, this.ctx.stage, this.ctx.tender.info);
                 await payCalculator.calculateAll(dealPay);
             }
+            if (this._checkFieldsExist(fields, ['start_stage_order']) && this.ctx.stage.status !== audit.stage.status.checked) {
+                for (const dp of dealPay) {
+                    if (!dp.start_stage_order || dp.start_stage_order === this.ctx.stage.order) {
+                        dp.start_stage_order = this.ctx.helper.checkZero(dp.tp) ? null : this.ctx.stage.order;
+                    }
+                }
+            }
 
             if (this._checkFieldsExistReg(fields, 'r[0-9]+_tp')) {
                 const validRole = this._getStageValidRole();

+ 8 - 3
app/service/stage_pay.js

@@ -58,7 +58,8 @@ module.exports = app => {
          */
         async getAuditorStageData(sid, times, order) {
             const sql = 'SELECT SP.*,' +
-                '    P.`csorder`, P.`cstimes`, P.`csaorder`, P.`order`, P.uid, P.minus, P.ptype, P.sprice, P.sexpr, P.rprice, P.rexpr, P.is_yf, P.dl_type, P.dl_count, P.dl_tp_type, P.dl_tp, P.name as pName ' +
+                '    P.`csorder`, P.`cstimes`, P.`csaorder`, P.`order`, P.uid, P.minus, P.ptype, P.sprice, P.sexpr,' +
+                '    P.rprice, P.rexpr, P.is_yf, P.dl_type, P.dl_count, P.dl_tp_type, P.dl_tp, P.name as pName ' +
                 '  FROM ?? As SP, ?? As P ' +
                 '  WHERE SP.`sid` = ? AND SP.`stimes` = ? AND SP.`sorder` = ? AND SP.`pid` = P.`id` AND P.`valid`' +
                 '  ORDER BY P.`order`';
@@ -102,6 +103,7 @@ module.exports = app => {
                         pre_tp: pp.end_tp,
                         pre_used: pp.pre_used || !this.ctx.helper.checkZero(pp.tp),
                         pre_finish: pp.pre_finish || (pp.rprice ? pp.end_tp === pp.rprice : false),
+                        start_stage_order: pp.start_stage_order,
                     });
                 }
             } else {
@@ -223,6 +225,9 @@ module.exports = app => {
                     id: sp.id,
                     tp: sp.tp,
                     end_tp: sp.end_tp,
+                    start_stage_order: sp.start_stage_order && sp.start_stage_order < stage.order
+                        ? sp.start_stage_order
+                        : (this.ctx.helper.checkZero(sp.tp) ? null : stage.order),
                 });
                 if (stage.order === 1 || sp.csorder >= stage.order) {
                     srUpdate.push({
@@ -263,8 +268,8 @@ module.exports = app => {
             if (!stage || !transaction || !times || order === undefined) {
                 throw '数据错误';
             }
-            const sql = 'INSERT INTO ?? (`tid`, `sid`, `pid`, `stimes`, `sorder`, `name`, `tp`, `expr`, `pause`, `attachment`, `pre_tp`, `end_tp`) ' +
-                        '  SELECT SP.`tid`, SP.`sid`, SP.`pid`, ?, ?, SP.name, SP.`tp`, SP.`expr`, SP.`pause`, SP.`attachment`, SP.`pre_tp`, SP.`end_tp` ' +
+            const sql = 'INSERT INTO ?? (`tid`, `sid`, `pid`, `stimes`, `sorder`, `name`, `tp`, `expr`, `pause`, `attachment`, `pre_tp`, `end_tp`, `pre_finish`, `start_stage_order`) ' +
+                        '  SELECT SP.`tid`, SP.`sid`, SP.`pid`, ?, ?, SP.name, SP.`tp`, SP.`expr`, SP.`pause`, SP.`attachment`, SP.`pre_tp`, SP.`end_tp`, SP.`pre_finish`, SP.`start_stage_order` ' +
                         '  FROM ?? As SP, ?? As P ' +
                         '  WHERE SP.`sid` = ? AND SP.`stimes` = ? AND SP.`sorder` = ? And SP.`pid` = P.`id` And P.`valid`';
             const sqlParam = [this.tableName, times, order, this.tableName, this.ctx.service.pay.tableName,

+ 33 - 1
builder_report_index_define.js

@@ -273,6 +273,38 @@ const stage_pos_compare = {
     ],
 };
 
+// 期 - 合同支付
+const stage_pay = {
+    Name: '期-合同支付-数据(mem_stage_pay)',
+    remark: '',
+    id: 27,
+    key: 'mem_stage_pay',
+    prefix: '期-合同支付',
+    cols: [
+        {name: '名称', field: 'name', type: dataType.str},
+        {name: '计算公式', field: 'expr', type: dataType.str},
+        {name: '金额', field: 'tp', type: dataType.currency},
+        {name: '截止上期-金额', field: 'pre_tp', type: dataType.currency},
+        {name: '截止上期-金额', field: 'end_tp', type: dataType.currency},
+        {name: '排序', field: 'order', type: dataType.int},
+        {name: '是否扣款项', field: 'minus', type: dataType.int},
+        {name: '支付类型', field: 'ptype', type: dataType.int},
+        {name: '起扣金额', field: 'sprice', type: dataType.currency},
+        {name: '扣款限额', field: 'rprice', type: dataType.currency},
+        {name: '流程-本期-金额_0', field: 'r0_tp', type: dataType.currency},
+        {name: '流程-本期-金额_1', field: 'r1_tp', type: dataType.currency},
+        {name: '流程-本期-金额_2', field: 'r2_tp', type: dataType.currency},
+        {name: '流程-本期-金额_3', field: 'r3_tp', type: dataType.currency},
+        {name: '流程-本期-金额_4', field: 'r4_tp', type: dataType.currency},
+        {name: '流程-本期-金额_5', field: 'r5_tp', type: dataType.currency},
+        {name: '流程-本期-金额_6', field: 'r6_tp', type: dataType.currency},
+        {name: '流程-本期-金额_7', field: 'r7_tp', type: dataType.currency},
+        {name: '流程-本期-金额_8', field: 'r8_tp', type: dataType.currency},
+        {name: '流程-本期-金额_9', field: 'r9_tp', type: dataType.currency},
+        {name: '第几期开始计量', field: 'start_stage_order', type: dataType.int},
+    ],
+};
+
 const recursiveMkdirSync = async function (pathName) {
     if (!fs.existsSync(pathName)) {
         const upperPath = path.dirname(pathName);
@@ -359,7 +391,7 @@ const exportTableDefine = async function (define) {
     await saveTableDefine(tableDefine, path.join(savePath, define.key + '_define.json'));
 };
 
-const defines = [stage_pos, stage_pos_compare];
+const defines = [stage_pay];
 for (const d of defines) {
     exportTableDefine(d);
 }

+ 2 - 0
sql/update.sql

@@ -0,0 +1,2 @@
+ALTER TABLE `zh_stage_pay`
+ADD COLUMN `start_stage_order`  tinyint(4) NULL COMMENT '第几期开始计量' AFTER `pre_finish`;

+ 8 - 3
test/app/service/report_memory_temp.test.js

@@ -23,6 +23,11 @@ describe('test/app/service/report_memory.test.js', () => {
             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);
@@ -33,10 +38,10 @@ describe('test/app/service/report_memory.test.js', () => {
         const ctx = app.mockContext(mockData);
 
         // test12 - 第6期
-        const stage = yield ctx.service.stage.getDataByCondition({tid: 12, order: 6});
-        const mainData = yield ctx.service.reportMemory.getStagePosCompareData(12, stage.id);
+        const stage = yield ctx.service.stage.getDataByCondition({tid: 2155, order: 2});
+        const mainData = yield ctx.service.reportMemory.getStagePayData(12, stage.id, ['start_stage_order']);
         if (mainData instanceof Array) {
-            yield ctx.helper.saveBufferFile(JSON.stringify(mainData,"","\t"), path.join(savePath, 'mem_stage_pos_compare.json'));
+            yield ctx.helper.saveBufferFile(JSON.stringify(mainData,"","\t"), path.join(savePath, 'mem_stage_pay.json'));
         }
     });
 });