Bläddra i källkod

Merge branch 'dev' of http://192.168.1.41:3000/maixinrong/Calculation into dev

TonyKang 4 år sedan
förälder
incheckning
6fecf4543e

+ 2 - 0
app.js

@@ -81,6 +81,8 @@ module.exports = app => {
             const action = controller[a];
             if (app.config.min && action.mergeFiles && action.mergeFile.length > 0) {
                 app.jsFiles[c][a] = action.files.concat([JsFiles.webPath + action.mergeFile + '.' + app.config.version + '.min.js']);
+            } else {
+                app.jsFiles[c][a] = action.files.concat(action.mergeFiles || []);
             }
         }
     }

+ 57 - 0
app/lib/rpt_data_analysis.js

@@ -1531,6 +1531,63 @@ const signSelect = {
             this._loadImCooperationData(ctx, data, options, csRela);
     }
 };
+const getChangeLedger = {
+    name: '获取 工程变更台账表 数据',
+    hint: '须提供mem_stage_bills, mem_stage_change_bills作为数据支撑, 结果写入mem_stage_change_ledger',
+    intro: '',
+    defaultSetting: {
+        mergeName: true,
+        calc: '', // split: 均分
+        filter: 'qc_tp', // pre_qc_tp
+        level: '2-leaf', // 空表示表示保留所有的项目节,2-leaf表示保留第2层和最底层项目节,默认为空
+    },
+    _getSource: function (ctx, bills, changeList, field) {
+        const result = [];
+        for (const b of bills) {
+            if (b.b_code) continue;
+
+            const l = {
+                code: b.code, name: b.name, unit: b.unit,
+                ledger_id: b.ledger_id, ledger_pid: b.ledger_pid, level: b.level, full_path: b.full_path,
+                total_price: b.total_price, deal_tp: b.deal_tp,
+                contract_tp: b.contract_tp, qc_tp: b.qc_tp, gather_tp: b.gather_tp,
+                end_contract_tp: b.end_contract_tp, end_qc_tp: b.end_qc_tp, end_gather_tp: b.end_gather_tp,
+            };
+            result.push(l);
+            const gcl = bills.filter(x => { return x.full_path.indexOf(l.full_path + '-') === 1 && x.b_code });
+            if (gcl.length === 0) continue;
+
+            const gclIds = gcl.map(x => {return x.id});
+            const changes = changeList.filter(x => { return gclIds.indexOf(x.lid) >= 0});
+            if (!changes) return;
+
+            l.changes = [];
+            for (const c of changes) {
+                let mc = l.changes.find(x => {return x.cid === c.cid});
+                if (!mc) {
+                    mc = {
+                        cid: c.cid,
+                        c_code: c.c_code, c_name: c.c_name,
+                        c_new_code: c.c_new_code, c_new_name: c.c_new_name,
+                        c_content: c.c_content, c_basis: c.c_basis, c_cin_time: c.c_cin_time, // todo 转换时间错
+                        c_bills: [],
+                    };
+                    l.changes.push(mc)
+                }
+                mc.c_bills.push(c);
+            }
+        }
+        return result;
+    },
+    fun: function (ctx, data, fieldsKey, options, csRela) {
+        if (!options) options = {};
+        if (!data.mem_stage_bills) return;
+        if (!data.mem_stage_change_bills) return;
+
+        const ledgerChange = this._getSource(ctx, data.mem_stage_bills, data.mem_stage_chagne_bills);
+
+    }
+};
 
 const analysisObj = {
     changeSort,

+ 1 - 1
app/public/js/shares/cs_tools.js

@@ -618,7 +618,7 @@ const showSelectTab = function(select, spread, afterShow) {
         html.push('</div>', '</div>');
         // 搜索框
         html.push('<div class="input-group input-group-sm">');
-        html.push('<input type="text" class="form-control" placeholder="可查找 项目节编号 / 清单编号 /名称" id="bills-tag-keyword">');
+        html.push('<input type="text" class="form-control" placeholder="可查找 项目节编号 / 清单编号 /名称" id="bills-tag-keyword" autocomplete="off">');
         html.push('<div class="input-group-append">', '<div class="input-group-cancel">',
             '<a href="javascript: void(0);" id="bills-tag-clear" class="text-danger"><i class="fa fa-times-circle" title="移除搜索结果"></i></a>', '</div>',
             '<button class="btn btn-outline-secondary" type="button" id="bills-tag-search">搜索</button>', '</div>');

+ 4 - 0
app/service/report.js

@@ -175,6 +175,10 @@ module.exports = app => {
                             runnableRst.push(service.reportMemory.getSignSelect(params.tender_id, params.stage_id, customSelect));
                             runnableKey.push(filter);
                             break;
+                        case 'mem_stage_change_bills':
+                            runnableRst.push(service.reportMemory.getSignSelect(params.tender_id, params.stage_id, customSelect));
+                            runnableKey.push(filter);
+                            break;
                         default:
                             break;
                     }

+ 16 - 0
app/service/report_memory.js

@@ -718,6 +718,22 @@ module.exports = app => {
             }
         }
 
+        async getStageChangeBillsData(tid, sid, fields) {
+            try {
+                await this.ctx.service.tender.checkTender(tid);
+                await this.ctx.service.stage.checkStage(sid);
+
+                if (this.ctx.stage.readOnly) {
+                    return await this.ctx.service.stageChange.getReportAuditorAllStageData(tid, sid,
+                        this.ctx.stage.curTimes, this.ctx.stage.curOrder);
+                } else {
+                    return await this.ctx.service.stageChange.getReportLastestAllStageData(tid, sid);
+                }
+            } catch (err) {
+                return [];
+            }
+        }
+
         _getChangeConstName(define, value) {
             for (const prop in define) {
                 if (define[prop].value === value) {

+ 42 - 0
app/service/stage_change.js

@@ -386,6 +386,48 @@ module.exports = app => {
             const result = await this.db.query(sql, sqlParam);
             return this._.map(this._.filter(result, 'qty'), 'cid');
         }
+
+        async getReportLastestAllStageData(tid, sid) {
+            const sql = 'SELECT c.*,' +
+                '    oc.p_code As c_code, oc.name As c_name, oc.new_code As c_new_code, oc.new_name As c_new_name, ' +
+                '    oc.content As c_content, oc.basis As c_basis, oc.cin_time As c_cin_time, ' +
+                '    ocb.code As b_code, ocb.name As b_name, ocb.unit As b_unit, ocb.unit_price As b_unit_price, ' +
+                '  FROM ' + this.tableName + ' As c ' +
+                '  INNER JOIN ( ' +
+                '    SELECT MAX(`stimes` * ' + timesLen + ' + `sorder`) As `progress`, `lid`, `pid`, `sid`, `cid`, `cbid` From ' + this.tableName +
+                '      WHERE tid = ? And sid = ?' +
+                '      GROUP By `lid`, `pid`' +
+                '  ) As m ' +
+                '  ON (c.stimes * ' + timesLen + ' + c.sorder) = m.progress And c.lid = m.lid And c.pid = m.pid And c.`sid` = m.`sid` And c.`cid` = m.`cid` And c.`cbid` = m.`cbid`' +
+                '  LEFT JOIN ' + this.ctx.service.change.tableName + ' As oc' +
+                '  ON c.cid = oc.cid'+
+                '  LEFT JOIN ' + this.ctx.service.changeAuditList.tableName + ' As ocb' +
+                '  ON c.cbid = ocb.id' +
+                '  WHERE not ISNULL(ocb.id)';
+            const sqlParam = [tid, sid];
+            return await this.db.query(sql, sqlParam);
+        }
+
+        async getReportAuditorAllStageData(tid, sid, times, order) {
+            const sql = 'SELECT c.*, ' +
+                '    oc.p_code As c_code, oc.name As c_name, oc.new_code As c_new_code, oc.new_name As c_new_name, ' +
+                '    oc.content As c_content, oc.basis As c_basis, oc.cin_time As c_cin_time, ' +
+                '    ocb.code As b_code, ocb.name As b_name, ocb.unit As b_unit, ocb.unit_price As b_unit_price, ' +
+                '  FROM ' + this.tableName + ' As c ' +
+                '  INNER JOIN ( ' +
+                '    SELECT MAX(`stimes` * ' + timesLen + ' + `sorder`) As `progress`, `lid`, `pid`, `sid`, `cid`, `cbid` From ' + this.tableName +
+                '      WHERE tid = ? And sid = ? And (`stimes` < ? OR (`stimes` = ? AND `sorder` <= ?))' +
+                '      GROUP By `lid`, `pid`' +
+                '  ) As m ' +
+                '  ON (c.stimes * ' + timesLen + ' + c.sorder) = m.progress And c.lid = m.lid And c.pid = m.pid And c.`sid` = m.`sid` And c.`cid` = m.`cid` And c.`cbid` = m.`cbid`' +
+                '  LEFT JOIN ' + this.ctx.service.change.tableName + ' As oc' +
+                '  ON c.cid = oc.cid'+
+                '  LEFT JOIN ' + this.ctx.service.changeAuditList.tableName + ' As ocb' +
+                '  ON c.cbid = ocb.id' +
+                '  WHERE not ISNULL(ocb.id)';
+            const sqlParam = [tid, sid, times, times, order];
+            return await this.db.query(sql, sqlParam);
+        }
     }
 
     return StageChange;

+ 51 - 0
builder_report_index_define.js

@@ -1252,6 +1252,57 @@ const sign_select = {
     ],
 };
 
+const stage_change_bills = {
+    name: '期-变更清单 调用明细(mem_stage_change_bills)',
+    remark: '',
+    key: 'mem_stage_change_bills',
+    id: 48,
+    prefix: '期-变更清单 调用明细',
+    cols: [
+        { name: '变更令id', field: 'cid', type: dataType.str },
+        { name: '变更清单id', field: 'cbid', type: dataType.int },
+        { name: '变更数量', field: 'qty', type: dataType.int },
+        { name: '变更令-批复编号', field: 'c_code', type: dataType.str },
+        { name: '变更令-变更名称', field: 'c_name', type: dataType.str },
+        { name: '变更令-变更图号', field: 'c_new_code', type: dataType.str },
+        { name: '变更令-变更设计图名称', field: 'c_new_name', type: dataType.str },
+        { name: '变更令-工程变更理由及内容', field: 'c_content', type: dataType.str },
+        { name: '变更令-工程变更合同依据', field: 'c_basis', type: dataType.str },
+        { name: '变更令-变更状态发生时间', field: 'c_cin_time', type: dataType.str },
+        { name: '变更清单-清单编号', field: 'b_code', type: dataType.str },
+        { name: '变更清单-名称', field: 'name', type: dataType.str },
+        { name: '变更清单-单位', field: 'unit', type: dataType.str },
+        { name: '变更清单-单价', field: 'unit_price', type: dataType.str },
+    ],
+};
+
+const stage_change_ledger = {
+    name: '期-变更台账(mem_stage_change_ledger)',
+    remark: '',
+    key: 'mem_stage_change_ledger',
+    id: 48,
+    prefix: '期-变更台账',
+    cols: [
+        { name: '项目节编号', field: 'code', type: dataType.str },
+        { name: '名称', field: 'name', type: dataType.str },
+        { name: '台账-金额', field: 'total_price', type: dataType.currency },
+        { name: '签约-金额', field: 'deal_tp', type: dataType.currency },
+        { name: '本期-合同-金额', field: 'contract_tp', type: dataType.currency },
+        { name: '本期-变更-金额', field: 'qc_tp', type: dataType.currency },
+        { name: '本期-完成-金额', field: 'gather_tp', type: dataType.currency },
+        { name: '截止本期-合同-金额', field: 'end_contract_tp', type: dataType.currency },
+        { name: '截止本期-变更-金额', field: 'end_qc_tp', type: dataType.currency },
+        { name: '截止本期-完成-金额', field: 'end_gather_tp', type: dataType.currency },
+        { name: '变更令-批复编号', field: 'c_code', type: dataType.str },
+        { name: '变更令-变更名称', field: 'c_name', type: dataType.str },
+        { name: '变更令-变更图号', field: 'c_new_code', type: dataType.str },
+        { name: '变更令-变更设计图名称', field: 'c_new_name', type: dataType.str },
+        { name: '变更令-工程变更理由及内容', field: 'c_content', type: dataType.str },
+        { name: '变更令-工程变更合同依据', field: 'c_basis', type: dataType.str },
+        { name: '变更令-变更状态发生时间', field: 'c_cin_time', type: dataType.str },
+    ]
+};
+
 const recursiveMkdirSync = async function(pathName) {
     if (!fs.existsSync(pathName)) {
         const upperPath = path.dirname(pathName);