Преглед на файлове

Merge branch 'master' of http://192.168.1.41:3000/maixinrong/Calculation

MaiXinRong преди 5 години
родител
ревизия
5cf0d6bdd9

+ 6 - 3
app/controller/change_controller.js

@@ -131,6 +131,7 @@ module.exports = app => {
                 ruleConst: codeRuleConst.measure,
                 tenderMenu: this.menu.tenderMenu,
                 preUrl: '/tender/' + tenderId,
+                tpUnit: ctx.tender.info.decimal.tp,
             };
 
             await this.layout('change/index.ejs', renderData, 'change/modal.ejs');
@@ -265,7 +266,7 @@ module.exports = app => {
                 const auditList = await ctx.service.changeAudit.getListByStatus(change, auditStatus);
 
                 // 获取已选清单
-                const changeList = await ctx.service.changeAuditList.getAllDataByCondition({ where: { cid: ctx.params.cid } });
+                let changeList = await ctx.service.changeAuditList.getAllDataByCondition({ where: { cid: ctx.params.cid } });
 
                 const renderData = {
                     uid: ctx.session.sessionUser.accountId,
@@ -382,7 +383,8 @@ module.exports = app => {
                     }
                     renderData.auditList3 = auditList3;
 
-                    renderData.changeList = changeList.sort();
+                    changeList = JSON.parse(JSON.stringify(changeList.sort())).sort().sort();
+                    renderData.changeList = changeList;
                     let ototalCost = 0;
                     let ctotalCost = 0;
                     let stotalCost = 0;
@@ -419,7 +421,8 @@ module.exports = app => {
                         auditList3[i].max_sort = auditList2.length - 1;
                     }
                     renderData.auditList3 = auditList3;
-                    renderData.changeList = changeList.sort();
+                    changeList = JSON.parse(JSON.stringify(changeList.sort())).sort().sort();
+                    renderData.changeList = changeList;
                     let ototalCost = 0;
                     let ctotalCost = 0;
                     const auditTotalCost = [];

+ 8 - 88
app/controller/report_controller.js

@@ -16,92 +16,6 @@ const fs = require('fs');
 const rptCronJob = require('../reports/util/rpt_tmp_file_sweep');
 const RPT_DEF_PROPERTIES = require('../const/report_defined_properties');
 
-const tmpRptIds = [1,2,3,4,5,6,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93];
-const rptFiles = [ 'D:/Temp/计量临时/16_支表02 中期支付证书月报表.js',
-    'D:/Temp/计量临时/17_新增报表模板.js',
-    'D:/Temp/计量临时/18_支表03 清单计量与支付表.js',
-    'D:/Temp/计量临时/19_测试.js',
-    'D:/Temp/计量临时/1_测试模板08_2.js',
-    'D:/Temp/计量临时/20_支表03 清单计量与支付表(分章统计).js',
-    'D:/Temp/计量临时/21_支表13 中间计量表(0号台账).js',
-    'D:/Temp/计量临时/22_支表13-1 中间计量表(总量控制).js',
-    'D:/Temp/计量临时/23_支表14 中间计量支付汇总表(0号台账).js',
-    'D:/Temp/计量临时/24_支表14-1 中间计量支付汇总表(总量控制).js',
-    'D:/Temp/计量临时/25_支表14 中间计量支付汇总表(0号台账).js',
-    'D:/Temp/计量临时/26_支表02 中期支付证书月报表.js',
-    'D:/Temp/计量临时/27_总量控制.js',
-    'D:/Temp/计量临时/28_支表02 .js',
-    'D:/Temp/计量临时/29_支表03.js',
-    'D:/Temp/计量临时/2_测试模板07_1.js',
-    'D:/Temp/计量临时/30_test 中间计量.js',
-    'D:/Temp/计量临时/31_02表.js',
-    'D:/Temp/计量临时/32_B21 中期支付申请表.js',
-    'D:/Temp/计量临时/33_封面.js',
-    'D:/Temp/计量临时/34_支表13-1 中间计量表(总量控制).js',
-    'D:/Temp/计量临时/35_封面2.js',
-    'D:/Temp/计量临时/36_新增报表模板.js',
-    'D:/Temp/计量临时/37_支表1 工程进度表.js',
-    'D:/Temp/计量临时/38_新增报表模板.js',
-    'D:/Temp/计量临时/39_封面.js',
-    'D:/Temp/计量临时/3_测试计量模板09.js',
-    'D:/Temp/计量临时/40_支表5 工程变更一览表.js',
-    'D:/Temp/计量临时/41_支表14 中间计量汇总表.js',
-    'D:/Temp/计量临时/42_03表 付款申请表.js',
-    'D:/Temp/计量临时/43_支表2 中期支付证书.js',
-    'D:/Temp/计量临时/44_B22  中间计量单.js',
-    'D:/Temp/计量临时/45_支表3 清单计量与支付表.js',
-    'D:/Temp/计量临时/46_B22  中间计量单.js',
-    'D:/Temp/计量临时/47_01表 计量支付审批单.js',
-    'D:/Temp/计量临时/48_新增报表模板.js',
-    'D:/Temp/计量临时/49_新增报表模板.js',
-    'D:/Temp/计量临时/4_流水式表模板.js',
-    'D:/Temp/计量临时/50_02表 合同工程月计量申报表.js',
-    'D:/Temp/计量临时/51_03表 付款申请表.js',
-    'D:/Temp/计量临时/52_支表5 工程变更一览表.js',
-    'D:/Temp/计量临时/53_B25 变更台帐汇总表.js',
-    'D:/Temp/计量临时/54_B1表 工程变更令.js',
-    'D:/Temp/计量临时/55_B6 工程变更设计数量计算书.js',
-    'D:/Temp/计量临时/56_B23 工程台帐汇总表.js',
-    'D:/Temp/计量临时/57_B23.1 工程台帐分表一.js',
-    'D:/Temp/计量临时/58_B5表 工程变更数量及金额汇总表.js',
-    'D:/Temp/计量临时/59_B4表 工程变更设计申报表.js',
-    'D:/Temp/计量临时/5_交叉式表模板.js',
-    'D:/Temp/计量临时/60_B25 变更台帐汇总表.js',
-    'D:/Temp/计量临时/61_B25.1  变更台帐分表一.js',
-    'D:/Temp/计量临时/62_封面.js',
-    'D:/Temp/计量临时/63_支表2 中期支付证书.js',
-    'D:/Temp/计量临时/64_支表3 清单计量与支付表.js',
-    'D:/Temp/计量临时/65_01表 计量支付审批单.js',
-    'D:/Temp/计量临时/66_02表 合同工程月计量申报表.js',
-    'D:/Temp/计量临时/67_03表 付款申请表.js',
-    'D:/Temp/计量临时/68_B1表 工程变更令.js',
-    'D:/Temp/计量临时/69_B5表 工程变更数量及金额汇总表.js',
-    'D:/Temp/计量临时/6_账单式表模板.js',
-    'D:/Temp/计量临时/70_B4表 工程变更设计申报表.js',
-    'D:/Temp/计量临时/71_支表14 中间计量汇总表.js',
-    'D:/Temp/计量临时/72_封面.js',
-    'D:/Temp/计量临时/73_封面.js',
-    'D:/Temp/计量临时/74_封面-新.js',
-    'D:/Temp/计量临时/75_支表3 清单计量与支付表.js',
-    'D:/Temp/计量临时/76_156.js',
-    'D:/Temp/计量临时/77_计量111111111.js',
-    'D:/Temp/计量临时/78_新增报表模板.js',
-    'D:/Temp/计量临时/79_新增报表模板.js',
-    'D:/Temp/计量临时/80_新增报表模板.js',
-    'D:/Temp/计量临时/81_null.js',
-    'D:/Temp/计量临时/82_null.js',
-    'D:/Temp/计量临时/83_支表13 中间计量表.js',
-    'D:/Temp/计量临时/84_封面.js',
-    'D:/Temp/计量临时/85_计量与支付会签表.js',
-    'D:/Temp/计量临时/86_累支02 中期支付月报表.js',
-    'D:/Temp/计量临时/87_测试筛选清单.js',
-    'D:/Temp/计量临时/88_支表03-1 清单计量支付台账.js',
-    'D:/Temp/计量临时/89_支表14 中间计量汇总表.js',
-    'D:/Temp/计量临时/90_测试.js',
-    'D:/Temp/计量临时/91_新增报表模板.js',
-    'D:/Temp/计量临时/92_新增报表模板.js',
-    'D:/Temp/计量临时/93_新增报表模板.js' ]
-
 module.exports = app => {
     class ReportController extends app.BaseController {
         /**
@@ -458,6 +372,11 @@ async function getReportData(ctx, params, filters, memFieldKeys) {
                     runnableRst.push(ctx.service.ledger.getData(params.tender_id, 0));
                     runnableKey.push('ledger');
                     break;
+                case 'deal_bills' :
+                    console.log('has push deal_bills! ' + params.tender_id);
+                    runnableRst.push(ctx.service.dealBills.getDataByTenderId(params.tender_id));
+                    runnableKey.push('deal_bills');
+                    break;
                 case 'stage_bills':
                     runnableRst.push(ctx.service.stageBills.getLastestStageData(params.tender_id, params.stage_id));
                     runnableKey.push('stage_bills');
@@ -555,11 +474,12 @@ async function getAllPagesCommon(ctx, rptTpl, params, option, outputType, baseDi
         // console.log('before assemble');
         const tplData = rptDataUtil.assembleData(ctx, rawDataObj, baseDir, printCom);
         // console.log(tplData);
-        printCom.analyzeData(rptTpl, tplData, defProperties, dftOption, outputType);
+        // ctx.helper
+        printCom.analyzeData(ctx.helper, rptTpl, tplData, defProperties, dftOption, outputType);
         const maxPages = printCom.totalPages;
         let pageRst = null;
         if (maxPages > 0) {
-            pageRst = printCom.outputAsSimpleJSONPageArray(rptTpl, tplData, 1, maxPages, defProperties, params.custCfg);
+            pageRst = printCom.outputAsSimpleJSONPageArray(ctx.helper, rptTpl, tplData, 1, maxPages, defProperties, params.custCfg);
         } else {
             pageRst = printCom.outputAsPreviewPage(rptTpl, defProperties);
         }

+ 6 - 6
app/reports/rpt_component/jpc_ex.js

@@ -166,14 +166,14 @@ JpcExSrv.prototype.createNew = function() {
         me.events = JpcEvent.createNew(rptTpl);
     };
 
-    JpcResult.analyzeData = function(rptTpl, dataObj, defProperties, option, outputType) {
+    JpcResult.analyzeData = function($CTX_HELPER, rptTpl, dataObj, defProperties, option, outputType) {
         const me = this;
         const dftPagingOption = option || JV.PAGING_OPTION_NORMAL;
         // 1. data object
         let dataHelper = JpcData.createNew();
-        me.executeFormulas(JV.RUN_TYPE_BEFORE_ANALYZING, rptTpl, dataObj, me); // 在分析前运行,主要是增加灵活性,比如:重新编排数据的主从关系
+        me.executeFormulas($CTX_HELPER, JV.RUN_TYPE_BEFORE_ANALYZING, rptTpl, dataObj, me); // 在分析前运行,主要是增加灵活性,比如:重新编排数据的主从关系
         if (me.crossTab) {
-            me.executeFormulas(JV.RUN_TYPE_BEFORE_PAGING, rptTpl, dataObj, me);
+            me.executeFormulas($CTX_HELPER, JV.RUN_TYPE_BEFORE_PAGING, rptTpl, dataObj, me);
             dataHelper.analyzeData(rptTpl, dataObj);
             me.crossTab.sorting(rptTpl, dataObj, dataHelper.dataSeq.slice(0), me);
         } else {
@@ -193,7 +193,7 @@ JpcExSrv.prototype.createNew = function() {
             // let dt2 = new Date();
             // alert(dt2 - dt1);
             // 3. formulas
-            me.executeFormulas(JV.RUN_TYPE_BEFORE_PAGING, rptTpl, dataObj, me);
+            me.executeFormulas($CTX_HELPER, JV.RUN_TYPE_BEFORE_PAGING, rptTpl, dataObj, me);
         }
         // 4. paging
         me.paging(rptTpl, dataObj, defProperties, dftPagingOption, outputType);
@@ -222,7 +222,7 @@ JpcExSrv.prototype.createNew = function() {
             me.totalPages = me.billTab.paging(rptTpl, dataObj);
         }
     };
-    JpcResult.executeFormulas = function(runType, $CURRENT_TEMPLATE, $CURRENT_DATA, $CURRENT_RPT) {
+    JpcResult.executeFormulas = function($CTX_HELPER, runType, $CURRENT_TEMPLATE, $CURRENT_DATA, $CURRENT_RPT) {
         const execFmlMe = this;
         for (let execFmlIdx = 0; execFmlIdx < execFmlMe.formulas.length; execFmlIdx++) {
             // remark: 搞这么复杂的变量名是为了防止与表达式起冲突(如循环变量i,j,k,容易造成变量冲突且不容易看出问题)
@@ -301,7 +301,7 @@ JpcExSrv.prototype.createNew = function() {
         }
         return rst;
     };
-    JpcResult.outputAsSimpleJSONPageArray = function(rptTpl, dataObj, startPage, endPage, defProperties, customizeCfg) {
+    JpcResult.outputAsSimpleJSONPageArray = function($CTX_HELPER, rptTpl, dataObj, startPage, endPage, defProperties, customizeCfg) {
         const me = this;
         const rst = {};
         if ((startPage > 0) && (startPage <= endPage) && (endPage <= me.totalPages)) {

+ 34 - 0
app/reports/rpt_component/jpc_rte.js

@@ -87,6 +87,40 @@ const JE = {
             dataObj[field.DataNodeName][field.DataSeq][valIdx] = newValue;
         }
     },
+    getFieldValueArray: function(field, dataObj) {
+        let rst = null;
+        if (field.DataNodeName === 'NA') {
+            if (!field[JV.PROP_AD_HOC_DATA]) {
+                field[JV.PROP_AD_HOC_DATA] = [];
+            }
+            rst = field[JV.PROP_AD_HOC_DATA];
+        } else {
+            if (!field.DataNodeName) {
+                // that means this is a self-defined discrete field!
+                field.DataNodeName = JV.DATA_DISCRETE_DATA;
+                field.DataSeq = dataObj[JV.DATA_DISCRETE_DATA];
+                dataObj[JV.DATA_DISCRETE_DATA].push([]);
+            }
+            rst = dataObj[field.DataNodeName][field.DataSeq];
+        }
+        if (rst === null || rst === undefined) rst = [];
+        return rst;
+    },
+    setFieldValueArray: function(field, dataObj, newArr) {
+        if (newArr instanceof Array) {
+            if (field.DataNodeName === 'NA') {
+                field[JV.PROP_AD_HOC_DATA] = newArr;
+            } else {
+                if (!field.DataNodeName) {
+                    // that means this is a self-defined discrete field!
+                    field.DataNodeName = JV.DATA_DISCRETE_DATA;
+                    field.DataSeq = dataObj[JV.DATA_DISCRETE_DATA].length;
+                    dataObj[JV.DATA_DISCRETE_DATA].push([]);
+                }
+                dataObj[field.DataNodeName][field.DataSeq] = newArr;
+            }
+        }
+    },
     getFieldValue: function(field, dataObj, valIdx, newVal) {
         let rst = null;
         if (field.DataNodeName === 'NA') {

+ 1 - 0
app/reports/rpt_component/jpc_value_define.js

@@ -75,6 +75,7 @@ module.exports = {
     PROP_HANDLE_TYPE_COMPONENT_MOVE: '组成物数据转移',
     PROP_HANDLE_TYPE_COMPONENT_REPLACEMENT: '组成物替换',
     PROP_HANDLE_TYPE_PRECISION: '合计精度',
+    PROP_HANDLE_SELF_SETUP: '自定义设置',
 
     PROP_ADJUST_COLLECTION: '数据调整集',
     PROP_ADJUST_ACTION: 'action',

+ 9 - 1
app/reports/util/rpt_calculation_data_util.js

@@ -548,7 +548,15 @@ function preDefineProcess(ctx, tpl, preDefineCfg, rawDataObj, $CURRENT_RPT) {
         if (data_analyze_util[analysisKey]) {
             try {
                 // 在预定义方式中,小麦处理原始数据,不需要
-                data_analyze_util[analysisKey].fun(ctx, rawDataObj, fields);
+                let preSetup = preDefineCfg[JV.PROP_HANDLE_SELF_SETUP];
+                try {
+                    if (preSetup) {
+                        preSetup = JSON.parse(preSetup);
+                    }
+                } catch (ex) {
+                    console.log(ex);
+                }
+                data_analyze_util[analysisKey].fun(ctx, rawDataObj, fields, preSetup);
             } catch (err) {
                 throw '报表预处理数据出错';
             }

+ 1 - 1
app/service/change.js

@@ -454,7 +454,7 @@ module.exports = app => {
                     const amount = listInfo[1];
                     const changeListInfo = await this.ctx.service.changeAuditList.getDataById(lid);
                     if (!tenderInfo) {
-                        tenderInfo  = await this.ctx.service.tenderInfo.getTenderInfo(changeListInfo.tid);
+                        tenderInfo = await this.ctx.service.tenderInfo.getTenderInfo(changeListInfo.tid);
                     }
                     if (changeListInfo !== undefined) {
                         total_price = this.ctx.helper.add(total_price,

+ 12 - 0
app/service/deal_bills.js

@@ -184,6 +184,18 @@ module.exports = app => {
             }
             return result;
         }
+
+        /*
+        * 报表用
+        * @param {Number} tenderId - 所属标段Id
+        */
+        async getDataByTenderId(tenderId) {
+            const sql = 'SELECT Bills.* FROM ' + this.tableName + ' As Bills WHERE tender_id = ?';
+            const sqlParam = [tenderId];
+            return await this.db.query(sql, sqlParam);
+            // let rst = await this.getDataByCondition({tender_id: tenderId});
+            // return rst;
+        }
     }
 
     return DealBills;

+ 1 - 1
app/service/stage_audit.js

@@ -301,7 +301,7 @@ module.exports = app => {
                     }
                     for (const user of auditList) {
                         const smsUser = await this.ctx.service.projectAccount.getDataById(user.aid);
-                        if (smsUser.auth_mobile !== '' && smsUser.auth_mobile !== undefined && smsUser.sms_type !== '') {
+                        if (smsUser.auth_mobile !== '' && smsUser.auth_mobile !== undefined && smsUser.sms_type !== '' && smsUser.sms_type !== null) {
                             const smsType = JSON.parse(smsUser.sms_type);
                             if (mobile_array.indexOf(smsUser.auth_mobile) === -1 && smsType[smsTypeConst.const.JL] !== undefined && smsType[smsTypeConst.const.JL].indexOf(smsTypeConst.judge.result.toString()) !== -1) {
                                 mobile_array.push(smsUser.auth_mobile);

+ 1 - 1
app/view/change/index.ejs

@@ -46,7 +46,7 @@
                         <td><a href="/tender/<%- tender.id %>/change/<%- c.cid %>/info"><% if (c.status !== auditConst.status.checked) { %><%- c.code %><% } else { %><%- c.p_code %><% } %></a></td>
                         <td><%- c.name %></td>
                         <td><%- classArray[c.class] %><% c.class %></td>
-                        <td style="text-align: right"><%- c.total_price %></td>
+                        <td style="text-align: right"><%= ctx.helper.roundNum(c.total_price, tpUnit) %></td>
                         <% if (c.auditStatus) { %>
                         <td>
                             <a href="/tender/<%- tender.id %>/change/<%- c.cid %>/info" class="btn <%- auditConst.statusButtonClass[c.status] %> btn-sm">

+ 2 - 2
app/view/change/info.ejs

@@ -524,7 +524,7 @@
                     </tr>
                     </thead>
                     <tbody id="list">
-                    <% for (const cl of changeList.sort()) { %>
+                    <% for (const cl of changeList) { %>
                         <tr>
                             <td><%= cl.code %></td>
                             <td><%= cl.name %></td>
@@ -583,7 +583,7 @@
                     </thead>
                     <tbody id="list">
                     <% const audittotalCost = []; %>
-                    <% for (const [cindex,cl] of changeList.sort().entries()) { %>
+                    <% for (const [cindex,cl] of changeList.entries()) { %>
                         <tr>
                             <td><%= cl.code %></td>
                             <td><%= cl.name %></td>

+ 1 - 0
config/config.local.js

@@ -22,6 +22,7 @@ module.exports = appInfo => {
             password: 'zongheng2019',
             // 数据库名
             database: 'calculation',
+            // database: 'calc_copy_pro',
         },
         // 是否加载到 app 上,默认开启
         app: true,