Browse Source

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

Tony Kang 2 years ago
parent
commit
93c7e2ec54
42 changed files with 1631 additions and 783 deletions
  1. 15 0
      app/const/account_permission.js
  2. 3 1
      app/controller/report_controller.js
  3. 42 4
      app/controller/stage_controller.js
  4. 8 6
      app/controller/stage_rela_controller.js
  5. 5 0
      app/controller/standard_lib_controller.js
  6. 18 2
      app/controller/tender_controller.js
  7. 71 0
      app/lib/pm.js
  8. 14 1
      app/lib/spread_setting.js
  9. 4 4
      app/lib/stage_im.js
  10. 19 5
      app/public/js/gcl_gather.js
  11. 2 0
      app/public/js/global.js
  12. 1 1
      app/public/js/material.js
  13. 141 14
      app/public/js/measure_compare.js
  14. 0 1
      app/public/js/shares/cs_tools.js
  15. 29 7
      app/public/js/sr_detail.js
  16. 141 8
      app/public/js/stage.js
  17. 8 1
      app/public/report/js/rpt_custom.js
  18. 20 7
      app/public/report/js/rpt_other_stage.js
  19. 1 0
      app/router.js
  20. 38 0
      app/service/glj_lib.js
  21. 0 16
      app/service/material_audit.js
  22. 10 0
      app/service/project.js
  23. 4 0
      app/service/report.js
  24. 24 1
      app/service/report_memory.js
  25. 2 2
      app/service/rpt_gather_memory.js
  26. 1 1
      app/service/stage.js
  27. 0 5
      app/service/stage_audit.js
  28. 0 14
      app/service/stage_bills_final.js
  29. 189 7
      app/service/stage_change.js
  30. 18 14
      app/service/stage_change_final.js
  31. 0 14
      app/service/stage_pos_final.js
  32. 16 14
      app/service/stage_rela.js
  33. 14 4
      app/service/valuation.js
  34. 65 15
      app/view/measure/compare.ejs
  35. 3 0
      app/view/report/index.ejs
  36. 4 0
      app/view/report/rpt_all_popup.ejs
  37. 11 0
      app/view/stage_rela/detail.ejs
  38. 1 0
      config/web.js
  39. 38 9
      db_script/recover_ledger_his.js
  40. 19 605
      sql/update.sql
  41. 605 0
      sql/update20220804.sql
  42. 27 0
      test/app/lib/pm.test.js

+ 15 - 0
app/const/account_permission.js

@@ -31,6 +31,7 @@ const permission = {
             { title: '维护签约清单', value: 3, hint: '开启该选项,台账审批通过后,可上传签约清单', hintIcon: 'fa-question-circle' },
             { title: '维护签约清单', value: 3, hint: '开启该选项,台账审批通过后,可上传签约清单', hintIcon: 'fa-question-circle' },
             { title: '变更意向', value: 5, hint: '开启该选项,变更立项可新建变更意向书', hintIcon: 'fa-question-circle' },
             { title: '变更意向', value: 5, hint: '开启该选项,变更立项可新建变更意向书', hintIcon: 'fa-question-circle' },
             { title: '材差清单设置', value: 4, hint: '开启该选项,当前账号可设置允许调差的清单', hintIcon: 'fa-question-circle' },
             { title: '材差清单设置', value: 4, hint: '开启该选项,当前账号可设置允许调差的清单', hintIcon: 'fa-question-circle' },
+            { title: '查看项目管理报表数据', value: 6, hint: '开启该选项,当前账号在报表下可查看项目管理数据', hintIcon: 'fa-question-circle' },
         ],
         ],
     },
     },
     // cooperation: {
     // cooperation: {
@@ -53,8 +54,22 @@ const permission = {
     },
     },
 };
 };
 
 
+const PermissionCheck = {
+    check: function (permission, key) {
+        if (!permission) return false;
+        switch (key) {
+            case 'viewPmData': return permission.tender.indexOf('6') >= 0;
+            default: return false;
+        }
+    },
+    viewPmData: function (permission) {
+        return this.check(permission, 'viewPmData');
+    },
+};
+
 module.exports = {
 module.exports = {
     tenderPermission: create_tender,
     tenderPermission: create_tender,
     tenderPermissionList: create_tender_group,
     tenderPermissionList: create_tender_group,
     permission,
     permission,
+    PermissionCheck,
 };
 };

+ 3 - 1
app/controller/report_controller.js

@@ -26,6 +26,7 @@ const needCustomTables = [
     'mem_jh_gather_im_change', 'mem_jh_im_change', 'mem_jh_gather_stage_bills_compare',
     'mem_jh_gather_im_change', 'mem_jh_im_change', 'mem_jh_gather_stage_bills_compare',
     'mem_material_sum_gl',
     'mem_material_sum_gl',
 ];
 ];
+const PermissionCheck = require('../const/account_permission').PermissionCheck;
 
 
 const STD_COMP_STAMP_SIZE_WIDTH = Math.round(5 * 96 / 2.54); // 公章标准尺寸(宽4.2厘米)转成像素
 const STD_COMP_STAMP_SIZE_WIDTH = Math.round(5 * 96 / 2.54); // 公章标准尺寸(宽4.2厘米)转成像素
 const STD_COMP_STAMP_SIZE_HEIGHT = STD_COMP_STAMP_SIZE_WIDTH; // 公章标准尺寸(高4.2厘米)转成像素
 const STD_COMP_STAMP_SIZE_HEIGHT = STD_COMP_STAMP_SIZE_WIDTH; // 公章标准尺寸(高4.2厘米)转成像素
@@ -178,7 +179,7 @@ module.exports = app => {
                     if (t.ledger_status === auditConst.ledger.status.checked) {
                     if (t.ledger_status === auditConst.ledger.status.checked) {
                         t.lastStage = await this.ctx.service.stage.getLastestStage(t.id, true);
                         t.lastStage = await this.ctx.service.stage.getLastestStage(t.id, true);
                         // if (t.lastStage) {
                         // if (t.lastStage) {
-                        //     await this.ctx.service.stage.checkStageGatherData(t.lastStage);
+                        //     await this.ctx.service.stage.checkStageGatherData(t.lastStage, this.ctx.session.sessionUser.is_admin);
                         // }
                         // }
                     }
                     }
                 }
                 }
@@ -320,6 +321,7 @@ module.exports = app => {
                     rpt_id: ctx.query.rpt_id,
                     rpt_id: ctx.query.rpt_id,
                     isAdmin,
                     isAdmin,
                     OSS_PATH: ctx.app.config.fujianOssPath,
                     OSS_PATH: ctx.app.config.fujianOssPath,
+                    viewPmData: PermissionCheck.viewPmData(this.ctx.session.sessionUser.permission),
                 };
                 };
                 await this.layout('report/index.ejs', renderData, 'report/rpt_all_popup.ejs');
                 await this.layout('report/index.ejs', renderData, 'report/rpt_all_popup.ejs');
                 // await this.layout('report/index.ejs', renderData);
                 // await this.layout('report/index.ejs', renderData);

+ 42 - 4
app/controller/stage_controller.js

@@ -181,7 +181,8 @@ module.exports = app => {
                 await this._getStageAuditViewData(ctx);
                 await this._getStageAuditViewData(ctx);
                 const renderData = await this._getDefaultRenderData(ctx);
                 const renderData = await this._getDefaultRenderData(ctx);
                 const projectFunInfo = await this.ctx.service.project.getFunRela(ctx.session.sessionProject.id);
                 const projectFunInfo = await this.ctx.service.project.getFunRela(ctx.session.sessionProject.id);
-                [renderData.ledgerSpread, renderData.posSpread] = this._getSpreadSetting(projectFunInfo);
+                renderData.minusNoValue = projectFunInfo.minusNoValue && ctx.tender.info.fun_rela.stage_change.minusNoValue;
+                [renderData.ledgerSpread, renderData.posSpread] = this._getSpreadSetting({minusNoValue: renderData.minusNoValue});
                 const sjsRela = await this.ctx.service.project.getSjsRela(ctx.session.sessionProject.id);
                 const sjsRela = await this.ctx.service.project.getSjsRela(ctx.session.sessionProject.id);
                 this.ctx.helper.refreshSpreadShow(sjsRela.ledgerCol, [renderData.ledgerSpread, renderData.posSpread]);
                 this.ctx.helper.refreshSpreadShow(sjsRela.ledgerCol, [renderData.ledgerSpread, renderData.posSpread]);
                 renderData.changeConst = changeConst;
                 renderData.changeConst = changeConst;
@@ -206,7 +207,6 @@ module.exports = app => {
                 renderData.sfData = sfData;
                 renderData.sfData = sfData;
                 // 收方单附件删除权限
                 // 收方单附件删除权限
                 renderData.sfAttDelPower = ctx.session.sessionUser.accountId === ctx.stage.user_id || ctx.helper._.findIndex(ctx.stage.auditors2, { aid: ctx.session.sessionUser.accountId }) !== -1;
                 renderData.sfAttDelPower = ctx.session.sessionUser.accountId === ctx.stage.user_id || ctx.helper._.findIndex(ctx.stage.auditors2, { aid: ctx.session.sessionUser.accountId }) !== -1;
-                renderData.minusNoValue = projectFunInfo.minusNoValue && ctx.tender.info.fun_rela.stage_change.minusNoValue;
                 renderData.hintOver = projectFunInfo.hintOver && ctx.tender.info.fun_rela.hintOver;
                 renderData.hintOver = projectFunInfo.hintOver && ctx.tender.info.fun_rela.hintOver;
                 renderData.categoryData = await this.ctx.service.category.getAllCategory(this.ctx.session.sessionProject.id);
                 renderData.categoryData = await this.ctx.service.category.getAllCategory(this.ctx.session.sessionProject.id);
                 await this.layout('stage/index.ejs', renderData, 'stage/modal.ejs');
                 await this.layout('stage/index.ejs', renderData, 'stage/modal.ejs');
@@ -576,6 +576,44 @@ module.exports = app => {
                 ctx.body = { err: 1, msg: err.toString(), data: null };
                 ctx.body = { err: 1, msg: err.toString(), data: null };
             }
             }
         }
         }
+
+        /**
+         * 调用变更令 (Ajax-Post)
+         * @param ctx
+         * @return {Promise<void>}
+         */
+        async autoUseChange(ctx) {
+            try {
+                this._checkStageCanModify(ctx);
+
+                const data = JSON.parse(ctx.request.body.data);
+                if (!data.autoType) throw '参数错误';
+
+                let result;
+                switch (data.autoType) {
+                    case 'bills':
+                        if (!data.cid || !data.cbid) throw '参数错误';
+                        result = await ctx.service.stageChange.autoUseChangeBills(this.ctx.tender, this.ctx.stage, data.bills);
+                        result.change = { target: [] };
+                        for (const b of data.bills) {
+                            result.change.push({ lid: b.lid, pid: b.pid });
+                        }
+                        result.change.data = await ctx.service.stageChange.getLastestStageData(ctx.tender.id,
+                            ctx.stage.id, data.target.pos.lid, data.target.pos.id);
+                        break;
+                    case 'all':
+                        result = await ctx.service.stageChange.autoUseAllChange(this.ctx.tender, this.ctx.stage);
+                        break;
+                    default: throw '参数错误';
+                }
+                await ctx.service.stage.updateCheckCalcFlag(ctx.stage, true);
+                await ctx.service.stage.updateCacheTime(ctx.stage.id);
+                ctx.body = { err: 0, msg: '', data: result };
+            } catch (err) {
+                this.log(err);
+                ctx.body = { err: 1, msg: err.toString(), data: null };
+            }
+        }
         /**
         /**
          * 查询变更令 明细数据(包括附件、变更清单、累计使用情况、本期使用情况) (Ajax-Post)
          * 查询变更令 明细数据(包括附件、变更清单、累计使用情况、本期使用情况) (Ajax-Post)
          * @param ctx
          * @param ctx
@@ -1398,10 +1436,10 @@ module.exports = app => {
                 if (data.main) {
                 if (data.main) {
                     result.main = {};
                     result.main = {};
                     result.main.ledger = ctx.stage.ledgerHis
                     result.main.ledger = ctx.stage.ledgerHis
-                        ? await ctx.helper.loadLedgerDataFromOss(ctx.tender.id, ctx.stage.ledgerHis.bills_file)
+                        ? await ctx.helper.loadLedgerDataFromOss(ctx.stage.ledgerHis.bills_file)
                         : await ctx.service.ledger.getData(ctx.tender.id);
                         : await ctx.service.ledger.getData(ctx.tender.id);
                     result.main.pos = ctx.stage.ledgerHis
                     result.main.pos = ctx.stage.ledgerHis
-                        ? await ctx.helper.loadLedgerDataFromOss(ctx.tender.id, ctx.stage.ledgerHis.pos_file)
+                        ? await ctx.helper.loadLedgerDataFromOss(ctx.stage.ledgerHis.pos_file)
                         : await ctx.service.pos.getPosData({ tid: ctx.tender.id });
                         : await ctx.service.pos.getPosData({ tid: ctx.tender.id });
                 }
                 }
                 for (const order of data.roles) {
                 for (const order of data.roles) {

+ 8 - 6
app/controller/stage_rela_controller.js

@@ -96,7 +96,10 @@ module.exports = app => {
                 if (!relaStage) throw '不存在该关联标段';
                 if (!relaStage) throw '不存在该关联标段';
                 const renderData = await this._getDefaultRenderData(ctx);
                 const renderData = await this._getDefaultRenderData(ctx);
                 renderData.jsFiles = this.app.jsFiles.common.concat(this.app.jsFiles.stageRela.detail);
                 renderData.jsFiles = this.app.jsFiles.common.concat(this.app.jsFiles.stageRela.detail);
-                [renderData.ledgerSpread, renderData.posSpread] = await spreadSetting.getStageSpreadSetting(ctx, null, true);
+                const relaTenderInfo = await this.ctx.service.tenderInfo.getTenderInfo(relaStage.rela_tid);
+                const projectFunInfo = await this.ctx.service.project.getFunRela(ctx.session.sessionProject.id);
+                renderData.minusNoValue = projectFunInfo.minusNoValue && relaTenderInfo.fun_rela.stage_change.minusNoValue;
+                [renderData.ledgerSpread, renderData.posSpread] = await spreadSetting.getStageSpreadSetting(ctx, null, true, {minusNoValue: renderData.minusNoValue});
                 renderData.measureType = measureType;
                 renderData.measureType = measureType;
                 renderData.whiteList = this.ctx.app.config.multipart.whitelist;
                 renderData.whiteList = this.ctx.app.config.multipart.whitelist;
                 renderData.curAuditor = ctx.stage.curAuditor;
                 renderData.curAuditor = ctx.stage.curAuditor;
@@ -134,8 +137,8 @@ module.exports = app => {
             });
             });
             this.ctx.helper.assignRelaData(ledgerData, [
             this.ctx.helper.assignRelaData(ledgerData, [
                 { data: dgnData, fields: ['deal_dgn_qty1', 'deal_dgn_qty2', 'c_dgn_qty1', 'c_dgn_qty2'], prefix: '', relaId: 'id' },
                 { data: dgnData, fields: ['deal_dgn_qty1', 'deal_dgn_qty2', 'c_dgn_qty1', 'c_dgn_qty2'], prefix: '', relaId: 'id' },
-                { data: curStageData, fields: ['contract_qty', 'contract_expr', 'contract_tp', 'qc_qty', 'qc_tp', 'postil'], prefix: '', relaId: 'lid' },
-                { data: endStageData, fields: ['contract_qty', 'contract_tp', 'qc_qty', 'qc_tp', ], prefix: 'end_', relaId: 'lid' },
+                { data: curStageData, fields: ['contract_qty', 'contract_expr', 'contract_tp', 'qc_qty', 'qc_tp', 'qc_minus_qty', 'postil'], prefix: '', relaId: 'lid' },
+                { data: endStageData, fields: ['contract_qty', 'contract_tp', 'qc_qty', 'qc_tp', 'qc_minus_qty',], prefix: 'end_', relaId: 'lid' },
             ]);
             ]);
             return ledgerData;
             return ledgerData;
         }
         }
@@ -149,8 +152,8 @@ module.exports = app => {
                 where: {sid: ctx.stage.id, rela_tid: relaStage.rela_tid},
                 where: {sid: ctx.stage.id, rela_tid: relaStage.rela_tid},
             });
             });
             this.ctx.helper.assignRelaData(posData, [
             this.ctx.helper.assignRelaData(posData, [
-                { data: curStageData, fields: ['contract_qty', 'contract_expr', 'contract_tp', 'qc_qty', 'qc_tp', 'postil'], prefix: '', relaId: 'pid' },
-                { data: endStageData, fields: ['contract_qty', 'contract_tp', 'qc_qty', 'qc_tp', ], prefix: 'end_', relaId: 'pid' },
+                { data: curStageData, fields: ['contract_qty', 'contract_expr', 'contract_tp', 'qc_qty', 'qc_tp', 'qc_minus_qty', 'postil'], prefix: '', relaId: 'pid' },
+                { data: endStageData, fields: ['contract_qty', 'contract_tp', 'qc_qty', 'qc_tp', 'qc_minus_qty' ], prefix: 'end_', relaId: 'pid' },
             ]);
             ]);
             return posData;
             return posData;
         }
         }
@@ -236,7 +239,6 @@ module.exports = app => {
                 const result = await ctx.service.stageDetailAtt.addFiles(stage, baseInfo, uploadFiles);
                 const result = await ctx.service.stageDetailAtt.addFiles(stage, baseInfo, uploadFiles);
                 ctx.body = { err: 0, mgs: '', data: result };
                 ctx.body = { err: 0, mgs: '', data: result };
             } catch (err) {
             } catch (err) {
-                console.log(err);
                 // 失败需要消耗掉stream 以防卡死
                 // 失败需要消耗掉stream 以防卡死
                 if (stream) await sendToWormhole(stream);
                 if (stream) await sendToWormhole(stream);
                 ctx.log(err);
                 ctx.log(err);

+ 5 - 0
app/controller/standard_lib_controller.js

@@ -30,6 +30,8 @@ module.exports = app => {
                     case 'xmj':
                     case 'xmj':
                         responseData.data = await this.ctx.service.stdXmj.getData(data.list_id);
                         responseData.data = await this.ctx.service.stdXmj.getData(data.list_id);
                         break;
                         break;
+                    case 'glj':
+                        responseData.data = await this.ctx.service.gljLib.getData(data.list_id);
                     default:
                     default:
                         throw '查询的标准清单不存在';
                         throw '查询的标准清单不存在';
                 }
                 }
@@ -66,6 +68,9 @@ module.exports = app => {
                     case 'xmj':
                     case 'xmj':
                         responseData.data = await this.ctx.service.stdXmj.getAllDataByCondition({ where: condition });
                         responseData.data = await this.ctx.service.stdXmj.getAllDataByCondition({ where: condition });
                         break;
                         break;
+                    case 'glj':
+                        responseData.data = await this.ctx.service.gljLib.getAllDataByCondition({ where: condition });
+                        break;
                     default:
                     default:
                         throw '查询的标准清单不存在';
                         throw '查询的标准清单不存在';
                 }
                 }

+ 18 - 2
app/controller/tender_controller.js

@@ -140,7 +140,7 @@ module.exports = app => {
                             t.lastStage.user_id !== this.ctx.session.sessionUser.accountId) {
                             t.lastStage.user_id !== this.ctx.session.sessionUser.accountId) {
                             t.lastStage = await this.ctx.service.stage.getLastestStage(t.id);
                             t.lastStage = await this.ctx.service.stage.getLastestStage(t.id);
                         }
                         }
-                        if (t.lastStage) await this.ctx.service.stage.checkStageGatherData(t.lastStage);
+                        if (t.lastStage) await this.ctx.service.stage.checkStageGatherData(t.lastStage, this.ctx.session.sessionUser.is_admin);
                         t.completeStage = await this.ctx.service.stage.getLastestCompleteStage(t.id);
                         t.completeStage = await this.ctx.service.stage.getLastestCompleteStage(t.id);
                         if ((!bCalcTp) && t.measure_type === measureType.gcl.value) {
                         if ((!bCalcTp) && t.measure_type === measureType.gcl.value) {
                             bCalcTp = t.lastStage && t.lastStage.status !== auditConst.stage.status.checked && !t.lastStage.readOnly;
                             bCalcTp = t.lastStage && t.lastStage.status !== auditConst.stage.status.checked && !t.lastStage.readOnly;
@@ -400,7 +400,7 @@ module.exports = app => {
                 const stages = await ctx.service.stage.getValidStages(ctx.tender.id);
                 const stages = await ctx.service.stage.getValidStages(ctx.tender.id);
                 const lastStage = stages.length > 0 ? stages[0] : null; // await ctx.service.stage.getLastestStage(ctx.tender.id);
                 const lastStage = stages.length > 0 ? stages[0] : null; // await ctx.service.stage.getLastestStage(ctx.tender.id);
                 if (lastStage) {
                 if (lastStage) {
-                    await this.ctx.service.stage.checkStageGatherData(lastStage);
+                    await this.ctx.service.stage.checkStageGatherData(lastStage, this.ctx.session.sessionUser.is_admin);
 
 
                     if ((!bCalcTp) && tender.measure_type === measureType.gcl.value) {
                     if ((!bCalcTp) && tender.measure_type === measureType.gcl.value) {
                         bCalcTp = lastStage.status !== auditConst.stage.status.checked && !lastStage.readOnly;
                         bCalcTp = lastStage.status !== auditConst.stage.status.checked && !lastStage.readOnly;
@@ -552,6 +552,7 @@ module.exports = app => {
                         map_json.lat = mapInfo.lat;
                         map_json.lat = mapInfo.lat;
                     }
                     }
                 }
                 }
+
                 const renderData = {
                 const renderData = {
                     tenders,
                     tenders,
                     categoryData,
                     categoryData,
@@ -1454,11 +1455,25 @@ module.exports = app => {
                                 orders: [['type', 'asc'], ['create_time', 'desc']],
                                 orders: [['type', 'asc'], ['create_time', 'desc']],
                             });
                             });
                             advance.forEach(x => {
                             advance.forEach(x => {
+                                x.orderStr = `第${x.order}期`;
                                 x.statusStr = auditConst.advance.statusString[x.status];
                                 x.statusStr = auditConst.advance.statusString[x.status];
                                 x.typeStr = advanceConst.typeColMap[x.type].text;
                                 x.typeStr = advanceConst.typeColMap[x.type].text;
                             });
                             });
                             responseData.data[f] = advance;
                             responseData.data[f] = advance;
                             break;
                             break;
+                        case 'pm_deal':
+                            if (accountPermission.PermissionCheck.viewPmData(this.ctx.session.sessionUser.permission)) {
+                                const selects = await this.ctx.service.project.getPmDealCache(this.ctx.session.sessionProject.id);
+                                const pm = require('../lib/pm');
+                                const tenders = await pm.dealCatagory(ctx, this.ctx.session.sessionProject.code);
+                                tenders.forEach(x => {
+                                    x.selected = selects.indexOf(x.bidsectionId + '') >= 0;
+                                });
+                                responseData.data[f] = tenders;
+                            } else {
+                                throw '您无权查看该数据';
+                            }
+                            break;
                         default:
                         default:
                             throw '未知数据类型';
                             throw '未知数据类型';
                     }
                     }
@@ -1479,6 +1494,7 @@ module.exports = app => {
                 if (data.change_project) await this.ctx.service.changeProject.defaultUpdateRows(data.change_project);
                 if (data.change_project) await this.ctx.service.changeProject.defaultUpdateRows(data.change_project);
                 if (data.change_plan) await this.ctx.service.changePlan.defaultUpdateRows(data.change_plan);
                 if (data.change_plan) await this.ctx.service.changePlan.defaultUpdateRows(data.change_plan);
                 if (data.advance) await this.ctx.service.advance.defaultUpdateRows(data.advance);
                 if (data.advance) await this.ctx.service.advance.defaultUpdateRows(data.advance);
+                if (data.pm_deal) await this.ctx.service.project.setPmDealCache(this.ctx.session.sessionProject.id, data.pm_deal);
                 ctx.body = responseData;
                 ctx.body = responseData;
             } catch (err) {
             } catch (err) {
                 ctx.log(err);
                 ctx.log(err);

+ 71 - 0
app/lib/pm.js

@@ -0,0 +1,71 @@
+'use strict';
+
+/**
+ * 标准库std 相关接口
+ *
+ * @author Mai
+ * @date 2020/3/15
+ * @version
+ */
+
+// 加密类
+const jwt = require('jsonwebtoken');
+const privateKey = 'jl2pm3850key888sc';
+const dealCatagoryApi = '/api/external/jlbb/folder';
+const dealDataApi = '/api/external/jlbb/contract';
+
+const pmUtils = {
+    getJwt() {
+        return jwt.sign({}, privateKey, {expiresIn: '10m', algorithm: 'HS256'});
+    },
+    async postData(ctx, url, data) {
+        const res = await ctx.curl(url, {
+            method: 'GET', //'POST',
+            contentType: 'json',
+            data,
+            dataType: 'json',
+            timeout: [2000, 10000],
+            timing: true,
+        });
+        if (res.status !== 200) throw '请求项目管理数据异常';
+        if (!res.data || res.data.code) throw '项目管理返回数据异常';
+        return res.data.data;
+    },
+};
+
+const filterLeaf = function(node, result) {
+    if (node.children) {
+        for (const child of node.children) {
+            filterLeaf(child, result);
+        }
+    } else if (node.isfolder !== undefined && !node.isfolder) result.push(node);
+};
+
+module.exports = {
+    async dealCatagory(ctx, pCode) {
+        // mock
+        // return [ {id: 1, name: 'A标'}, {id: 2, name: 'B标'}, {id: 3, name: 'C标'}];
+        const url = ctx.app.config.managementProxyPath + dealCatagoryApi;
+        try {
+            const data = await pmUtils.postData(ctx, url, { code: pCode, token: pmUtils.getJwt() });
+            const result = [];
+            filterLeaf(data, result);
+            return result;
+        } catch (err) {
+            ctx.log(err);
+            return [];
+        }
+    },
+    async dealData(ctx, pCode, selects) {
+        if (!selects || selects.length === 0) return {};
+
+        const url = ctx.app.config.managementProxyPath + dealDataApi;
+        try {
+            const data = { code: pCode, token: pmUtils.getJwt(), key: ['contracts'], bidsectionid: selects };
+            return await pmUtils.postData(ctx, url, data);
+        } catch (err) {
+            ctx.log(err);
+            return {};
+        }
+    }
+};

+ 14 - 1
app/lib/spread_setting.js

@@ -25,6 +25,15 @@ function removeFieldCols(setting, cols) {
     });
     });
 };
 };
 
 
+function hiddenFieldCols(setting, cols) {
+    setting.cols.forEach(x => {
+        if (cols.indexOf(x.field) >= 0) {
+            x.defaultVisible = false;
+            x.visible = false;
+        }
+    });
+};
+
 function refreshSpreadShow(sjsRela, sjsSetting) {
 function refreshSpreadShow(sjsRela, sjsSetting) {
     const sjsSettings = sjsSetting instanceof Array ? sjsSetting : [sjsSetting];
     const sjsSettings = sjsSetting instanceof Array ? sjsSetting : [sjsSetting];
     for (const field of sjsRela) {
     for (const field of sjsRela) {
@@ -63,7 +72,7 @@ const getLedgerSpreadSetting = async function(ctx, tid, readOnly) {
     return [ledger, pos];
     return [ledger, pos];
 };
 };
 
 
-const getStageSpreadSetting = async function (ctx, tid, readOnly) {
+const getStageSpreadSetting = async function (ctx, tid, readOnly, funInfo) {
     const tender = tid ? await getCtxTender(ctx, tid) : ctx.tender;
     const tender = tid ? await getCtxTender(ctx, tid) : ctx.tender;
 
 
     const stageSetting = tender.data.measure_type === measureType.tz.value
     const stageSetting = tender.data.measure_type === measureType.tz.value
@@ -85,6 +94,10 @@ const getStageSpreadSetting = async function (ctx, tid, readOnly) {
         removeFieldCols(ledger, spreadConst.filterCols.thirdPartyCols.dagl);
         removeFieldCols(ledger, spreadConst.filterCols.thirdPartyCols.dagl);
         removeFieldCols(pos, spreadConst.filterCols.thirdPartyCols.dagl);
         removeFieldCols(pos, spreadConst.filterCols.thirdPartyCols.dagl);
     }
     }
+    if (!funInfo.minusNoValue || !tender.info.fun_rela.stage_change.minusNoValue) {
+        hiddenFieldCols(ledger, spreadConst.filterCols.minusNoValueCols);
+        hiddenFieldCols(pos, spreadConst.filterCols.minusNoValueCols);
+    }
     ledger.readOnly = readOnly;
     ledger.readOnly = readOnly;
     pos.readOnly = readOnly;
     pos.readOnly = readOnly;
 
 

+ 4 - 4
app/lib/stage_im.js

@@ -364,10 +364,10 @@ class StageIm {
         if (im.calc_memo !== undefined && im.calc_memo !== null && im.calc_memo !== '') return;
         if (im.calc_memo !== undefined && im.calc_memo !== null && im.calc_memo !== '') return;
 
 
         if (im.leafXmjs && im.leafXmjs.length > 0) {
         if (im.leafXmjs && im.leafXmjs.length > 0) {
-            const memo = ['本期计量:' + (im.jl ? 0 : im.jl) + (im.qc_minus_jl ? (` (不计价 ${im.qc_minus_jl}) `) : ' ') + im.unit];
+            const memo = ['本期计量:' + (im.jl || 0) + (im.qc_minus_jl ? (` (不计价 ${im.qc_minus_jl}) `) : ' ') + im.unit];
             for (const lx of im.leafXmjs) {
             for (const lx of im.leafXmjs) {
                 for (const p of lx.pos) {
                 for (const p of lx.pos) {
-                    memo.push(p.name + ':' + p.jl + (p.qc_minus_jl ? (` (不计价 ${p.qc_minus_jl}) `) : ' ') + im.unit);
+                    memo.push(p.name + ':' + (p.jl || 0) + (p.qc_minus_jl ? (` (不计价 ${p.qc_minus_jl}) `) : ' ') + im.unit);
                 }
                 }
             }
             }
             im.calc_memo = memo.join('\n');
             im.calc_memo = memo.join('\n');
@@ -377,10 +377,10 @@ class StageIm {
                 if (b.pos && b.pos.length > 0) {
                 if (b.pos && b.pos.length > 0) {
                     memo.push('清单' + (i + 1) + ':' + b.b_code + ' ' + b.name);
                     memo.push('清单' + (i + 1) + ':' + b.b_code + ' ' + b.name);
                     for (const p of b.pos) {
                     for (const p of b.pos) {
-                        memo.push(p.name + ':' + p.jl + (p.qc_minus_jl ? (` (不计价 ${p.qc_minus_jl}) `) : ' ') + b.unit);
+                        memo.push(p.name + ':' + (p.jl || 0) + (p.qc_minus_jl ? (` (不计价 ${p.qc_minus_jl}) `) : ' ') + b.unit);
                     }
                     }
                 } else {
                 } else {
-                    memo.push('清单' + (i+1) + ':' + b.b_code + ' ' + b.name + ':' + (b.jl ? 0 : b.jl) + (b.qc_minus_jl ? (` (不计价 ${b.qc_minus_jl}) `) : ' ') + b.unit);
+                    memo.push('清单' + (i+1) + ':' + b.b_code + ' ' + b.name + ':' + (b.jl || 0) + (b.qc_minus_jl ? (` (不计价 ${b.qc_minus_jl}) `) : ' ') + b.unit);
                 }
                 }
             }
             }
             im.calc_memo = memo.join('\n');
             im.calc_memo = memo.join('\n');

+ 19 - 5
app/public/js/gcl_gather.js

@@ -11,11 +11,11 @@
 
 
 const gclGatherModel = (function () {
 const gclGatherModel = (function () {
     // 需要汇总计算的字段
     // 需要汇总计算的字段
-    const ledgerGatherFields = ['quantity', 'total_price', 'deal_qty', 'deal_tp',
+    let ledgerGatherFields = ['quantity', 'total_price', 'deal_qty', 'deal_tp',
         'contract_qty', 'contract_tp', 'qc_qty', 'qc_tp', 'qc_minus_qty',
         'contract_qty', 'contract_tp', 'qc_qty', 'qc_tp', 'qc_minus_qty',
         'pre_contract_qty', 'pre_contract_tp', 'pre_qc_qty', 'pre_qc_tp', 'pre_qc_minus_qty',
         'pre_contract_qty', 'pre_contract_tp', 'pre_qc_qty', 'pre_qc_tp', 'pre_qc_minus_qty',
         'end_contract_qty', 'end_contract_tp', 'end_qc_qty', 'end_qc_tp', 'end_qc_minus_qty'];
         'end_contract_qty', 'end_contract_tp', 'end_qc_qty', 'end_qc_tp', 'end_qc_minus_qty'];
-    const posGatherFields = ['quantity', 'contract_qty', 'qc_qty', 'gather_qty','qc_minus_qty',
+    let posGatherFields = ['quantity', 'contract_qty', 'qc_qty', 'gather_qty','qc_minus_qty',
         'pre_contract_qty', 'pre_qc_qty', 'pre_gather_qty', 'pre_qc_minus_qty',
         'pre_contract_qty', 'pre_qc_qty', 'pre_gather_qty', 'pre_qc_minus_qty',
         'end_contract_qty', 'end_qc_qty', 'end_gather_qty', 'end_qc_minus_qty'];
         'end_contract_qty', 'end_qc_qty', 'end_gather_qty', 'end_qc_minus_qty'];
     // 初始化 清单树
     // 初始化 清单树
@@ -46,6 +46,11 @@ const gclGatherModel = (function () {
         tpDecimal = decimal.tp;
         tpDecimal = decimal.tp;
     }
     }
 
 
+    function loadGatherField(ledger, pos) {
+        if (ledger) ledgerGatherFields = ledger;
+        if (pos) posGatherFields = pos;
+    }
+
     /**
     /**
      * 将所有数据加载至树结构
      * 将所有数据加载至树结构
      *
      *
@@ -82,8 +87,16 @@ const gclGatherModel = (function () {
 
 
     function gatherfields(obj, src, fields) {
     function gatherfields(obj, src, fields) {
         if (obj && src) {
         if (obj && src) {
-            for (const f of fields) {
-                obj[f] = ZhCalc.add(obj[f], src[f]);
+            if (fields instanceof Array) {
+                for (const f of fields) {
+                    obj[f] = ZhCalc.add(obj[f], src[f]);
+                }
+            } else if (typeof fields === "function") {
+                for (const prop in src) {
+                    if (fields(prop)) {
+                        obj[prop] = ZhCalc.add(obj[prop], src[prop]);
+                    }
+                }
             }
             }
         }
         }
     }
     }
@@ -337,7 +350,7 @@ const gclGatherModel = (function () {
             for (const node of change) {
             for (const node of change) {
                 node.b_code = node.code;
                 node.b_code = node.code;
                 node.quantity = parseFloat(node.samount);
                 node.quantity = parseFloat(node.samount);
-                node.total_price = ZhCalc.mul(node.quantity, node.unit_price, node.tp_decimal);
+                node.total_price = ZhCalc.mul(node.quantity, node.unit_price, node.tp_decimal || tpDecimal);
                 const gcl = getGclNode(node);
                 const gcl = getGclNode(node);
                 gcl.change_bills_qty = ZhCalc.add(gcl.change_bills_qty, node.quantity);
                 gcl.change_bills_qty = ZhCalc.add(gcl.change_bills_qty, node.quantity);
                 gcl.change_bills_tp = ZhCalc.add(gcl.change_bills_tp, node.total_price);
                 gcl.change_bills_tp = ZhCalc.add(gcl.change_bills_tp, node.total_price);
@@ -573,6 +586,7 @@ const gclGatherModel = (function () {
     }
     }
 
 
     return {
     return {
+        loadGatherField,
         loadDecimal,
         loadDecimal,
         loadLedgerData,
         loadLedgerData,
         loadPosData,
         loadPosData,

+ 2 - 0
app/public/js/global.js

@@ -1,6 +1,8 @@
 /*全局自适应高度*/
 /*全局自适应高度*/
 /*全局自适应高度*/
 /*全局自适应高度*/
 function autoFlashHeight(){
 function autoFlashHeight(){
+    const select = $(".scrollbar-auto .active");
+    if (select.length > 0) $(".scrollbar-auto")[0].scrollTop = select[0].offsetTop - 72;
     function getObjHeight(select) {
     function getObjHeight(select) {
         return select.length > 0 ? select.height() : 0;
         return select.length > 0 ? select.height() : 0;
     }
     }

+ 1 - 1
app/public/js/material.js

@@ -121,7 +121,7 @@ $(document).ready(() => {
         {title: '工料分类', colSpan: '1', rowSpan: '2', field: 'm_type', hAlign: 1, width: 60, readOnly: 'readOnly.isEdit', cellType: 'customizeCombo', comboItems: materialType.m_type, cellTypeKey: 2},
         {title: '工料分类', colSpan: '1', rowSpan: '2', field: 'm_type', hAlign: 1, width: 60, readOnly: 'readOnly.isEdit', cellType: 'customizeCombo', comboItems: materialType.m_type, cellTypeKey: 2},
     ];
     ];
     if (materialTax) {
     if (materialTax) {
-        materialSpreadSettingCols.push({title: '税率(%)', colSpan: '1', rowSpan: '2', field: 'm_tax', hAlign: 2, width: 50, type: 'Number', readOnly: 'readOnly.isEdit'});
+        materialSpreadSettingCols.push({title: '税率(%)', colSpan: '1', rowSpan: '2', field: 'm_tax', hAlign: 2, width: 50, type: 'Number', readOnly: 'readOnly.remark'});
     }
     }
     materialSpreadSettingCols = _.concat(materialSpreadSettingCols, [
     materialSpreadSettingCols = _.concat(materialSpreadSettingCols, [
         {title: '本期应耗数量', colSpan: '1', rowSpan: '2', field: 'quantity', hAlign: 2, width: 90, type: 'Number', readOnly: true},
         {title: '本期应耗数量', colSpan: '1', rowSpan: '2', field: 'quantity', hAlign: 2, width: 90, type: 'Number', readOnly: true},

+ 141 - 14
app/public/js/measure_compare.js

@@ -19,8 +19,8 @@ const billsSpreadSetting = {
         {title: '|金额', colSpan: '|1', rowSpan: '|1', field: 'total_price', hAlign: 2, width: 60, type: 'Number', },
         {title: '|金额', colSpan: '|1', rowSpan: '|1', field: 'total_price', hAlign: 2, width: 60, type: 'Number', },
     ],
     ],
     extraCols: [
     extraCols: [
-        {title: '%s|数量', colSpan: '2|1', rowSpan: '1|1', field: 'gather_qty%s', hAlign: 2, width: 60, type: 'Number', },
-        {title: '|金额', colSpan: '|1', rowSpan: '|1', field: 'gather_tp%s', hAlign: 2, width: 60, type: 'Number', },
+        {title: '%s|数量', colSpan: '2|1', rowSpan: '1|1', field: '{%s}_qty{%d}', hAlign: 2, width: 60, type: 'Number', },
+        {title: '|金额', colSpan: '|1', rowSpan: '|1', field: '{%s}_tp{%d}', hAlign: 2, width: 60, type: 'Number', },
     ],
     ],
     emptyRows: 3,
     emptyRows: 3,
     headRows: 2,
     headRows: 2,
@@ -37,7 +37,7 @@ const posSpreadSetting = {
         {title: '台账数量', colSpan: '1', rowSpan: '1', field: 'quantity', hAlign: 2, width: 60},
         {title: '台账数量', colSpan: '1', rowSpan: '1', field: 'quantity', hAlign: 2, width: 60},
     ],
     ],
     extraCols: [
     extraCols: [
-        {title: '%s数量', colSpan: '1', rowSpan: '1', field: 'gather_qty%s', hAlign: 2, width: 60},
+        {title: '%s数量', colSpan: '1', rowSpan: '1', field: '{%s}_qty{%d}', hAlign: 2, width: 60},
     ],
     ],
     emptyRows: 3,
     emptyRows: 3,
     headRows: 1,
     headRows: 1,
@@ -49,13 +49,63 @@ const posSpreadSetting = {
     readOnly: true,
     readOnly: true,
     selectedBackColor: '#fffacd',
     selectedBackColor: '#fffacd',
 };
 };
+
+const gclSpreadSetting = {
+    baseCols: [
+        {title: '清单编号', colSpan: '1', rowSpan: '2', field: 'b_code', hAlign: 0, width: 80, formatter: '@'},
+        {title: '名称', colSpan: '1', rowSpan: '2', field: 'name', hAlign: 0, width: 230, formatter: '@'},
+        {title: '单位', colSpan: '1', rowSpan: '2', field: 'unit', hAlign: 1, width: 60, formatter: '@', cellType: 'unit'},
+        {title: '单价', colSpan: '1', rowSpan: '2', field: 'unit_price', hAlign: 2, width: 60, type: 'Number'},
+        {title: '签约清单|数量', colSpan: '2|1', rowSpan: '1|1', field: 'deal_bills_qty', hAlign: 2, width: 60, type: 'Number'},
+        {title: '|金额', colSpan: '|1', rowSpan: '|1', field: 'deal_bills_tp', hAlign: 2, width: 60, type: 'Number'},
+        {title: '台账|数量', colSpan: '2|1', rowSpan: '1|1', field: 'quantity', hAlign: 2, width: 60, type: 'Number'},
+        {title: '|金额', colSpan: '|1', rowSpan: '|1', field: 'total_price', hAlign: 2, width: 60, type: 'Number'},
+    ],
+    extraCols: [
+        {title: '%s|数量', colSpan: '2|1', rowSpan: '1|1', field: '{%s}_qty{%d}', hAlign: 2, width: 60, type: 'Number', },
+        {title: '|金额', colSpan: '|1', rowSpan: '|1', field: '{%s}_tp{%d}', hAlign: 2, width: 60, type: 'Number', },
+    ],
+    emptyRows: 0,
+    headRows: 2,
+    headRowHeight: [25, 25],
+    headColWidth: [30],
+    defaultRowHeight: 21,
+    headerFont: '12px 微软雅黑',
+    font: '12px 微软雅黑',
+    readOnly: true,
+};
+const leafXmjSpreadSetting = {
+    baseCols: [
+        {title: '项目节编号', colSpan: '1', rowSpan: '2', field: 'code', hAlign: 0, width: 100, formatter: '@'},
+        {title: '单位工程', colSpan: '1', rowSpan: '2', field: 'dwgc', hAlign: 0, width: 80, formatter: '@'},
+        {title: '分部工程', colSpan: '1', rowSpan: '2', field: 'fbgc', hAlign: 0, width: 80, formatter: '@'},
+        {title: '分项工程', colSpan: '1', rowSpan: '2', field: 'fxgc', hAlign: 0, width: 80, formatter: '@'},
+        {title: '细目', colSpan: '1', rowSpan: '2', field: 'jldy', hAlign: 0, width: 80, formatter: '@'},
+        {title: '计量单元', colSpan: '1', rowSpan: '2', field: 'bwmx', hAlign: 0, width: 80, formatter: '@'},
+        {title: '图册号', colSpan: '1', rowSpan: '2', field: 'drawing_code', hAlign: 0, width: 80, formatter: '@'},
+        {title: '台账数量', colSpan: '1', rowSpan: '2', field: 'quantity', hAlign: 2, width: 60, type: 'Number'},
+    ],
+    extraCols: [
+        {title: '%s数量', colSpan: '1', rowSpan: '2', field: '{%s}_qty{%d}', hAlign: 2, width: 60},
+    ],
+    emptyRows: 0,
+    headRows: 2,
+    headRowHeight: [25, 25],
+    headColWidth: [30],
+    defaultRowHeight: 21,
+    headerFont: '12px 微软雅黑',
+    font: '12px 微软雅黑',
+    readOnly: true,
+};
+
 function initSpreadSettingWithRoles(compareRoles) {
 function initSpreadSettingWithRoles(compareRoles) {
     function setSpreadSettingCols(setting, fieldSufs, Roles) {
     function setSpreadSettingCols(setting, fieldSufs, Roles) {
         function addExtraCols(fieldSuf, Role) {
         function addExtraCols(fieldSuf, Role) {
+            const sourceType = $('[name=compare-data]:checked').val();
             for (const ec of setting.extraCols) {
             for (const ec of setting.extraCols) {
                 const col = JSON.parse(JSON.stringify(ec));
                 const col = JSON.parse(JSON.stringify(ec));
                 col.title = _.replace(col.title, '%s', Role);
                 col.title = _.replace(col.title, '%s', Role);
-                col.field = _.replace(col.field, '%s', fieldSuf);
+                col.field = _.replace(_.replace(col.field, '{%s}', sourceType), '{%d}', fieldSuf);
                 setting.cols.push(col);
                 setting.cols.push(col);
             }
             }
         }
         }
@@ -63,6 +113,8 @@ function initSpreadSettingWithRoles(compareRoles) {
         for (const col of setting.baseCols) {
         for (const col of setting.baseCols) {
             setting.cols.push(col);
             setting.cols.push(col);
         }
         }
+        setting.frozenColCount = setting.baseCols.length;
+        setting.frozenLineColor = '#93b5e4';
         for (const index in fieldSufs) {
         for (const index in fieldSufs) {
             addExtraCols(fieldSufs[index], Roles[index]);
             addExtraCols(fieldSufs[index], Roles[index]);
         }
         }
@@ -79,6 +131,8 @@ function initSpreadSettingWithRoles(compareRoles) {
     }
     }
     setSpreadSettingCols(billsSpreadSetting, fieldSufs, roles);
     setSpreadSettingCols(billsSpreadSetting, fieldSufs, roles);
     setSpreadSettingCols(posSpreadSetting, fieldSufs, roles);
     setSpreadSettingCols(posSpreadSetting, fieldSufs, roles);
+    setSpreadSettingCols(gclSpreadSetting, fieldSufs, roles);
+    setSpreadSettingCols(leafXmjSpreadSetting, fieldSufs, roles);
 }
 }
 function calculateStageLedgerData(datas) {
 function calculateStageLedgerData(datas) {
     for (const d of datas) {
     for (const d of datas) {
@@ -105,6 +159,17 @@ $(document).ready(() => {
     if (thousandth) sjsSettingObj.setTpThousandthFormat(posSpreadSetting);
     if (thousandth) sjsSettingObj.setTpThousandthFormat(posSpreadSetting);
     SpreadJsObj.initSheet(posSheet, posSpreadSetting);
     SpreadJsObj.initSheet(posSheet, posSpreadSetting);
 
 
+    let gclGatherData;
+    const gclSpread = SpreadJsObj.createNewSpread($('#gcl-spread')[0]);
+    const gclSheet = gclSpread.getActiveSheet();
+    sjsSettingObj.setFxTreeStyle(gclSpreadSetting, sjsSettingObj.FxTreeStyle.jz);
+    if (thousandth) sjsSettingObj.setTpThousandthFormat(gclSpreadSetting);
+    SpreadJsObj.initSheet(gclSheet, gclSpreadSetting);
+    const leafXmjSpread = SpreadJsObj.createNewSpread($('#leaf-xmj-spread')[0]);
+    const leafXmjSheet = leafXmjSpread.getActiveSheet();
+    if (thousandth) sjsSettingObj.setTpThousandthFormat(leafXmjSpreadSetting);
+    SpreadJsObj.initSheet(leafXmjSheet, leafXmjSpreadSetting);
+
     $.subMenu({
     $.subMenu({
         menu: '#sub-menu', miniMenu: '#sub-mini-menu', miniMenuList: '#mini-menu-list',
         menu: '#sub-menu', miniMenu: '#sub-mini-menu', miniMenuList: '#mini-menu-list',
         toMenu: '#to-menu', toMiniMenu: '#to-mini-menu',
         toMenu: '#to-menu', toMiniMenu: '#to-mini-menu',
@@ -128,11 +193,20 @@ $(document).ready(() => {
         select: '#main-resize',
         select: '#main-resize',
         callback: function () {
         callback: function () {
             billsSpread.refresh();
             billsSpread.refresh();
-            let bcontent = $(".bcontent-wrap").length > 0 ? $(".bcontent-wrap").height() : 0;
-            $(".sp-wrap").height(bcontent-30);
+            let bcontent = $("#main-bottom").length > 0 ? $("#main-bottom").height() : 0;
+            $("#pos-spread").height(bcontent-30);
             posSpread.refresh();
             posSpread.refresh();
         }
         }
     });
     });
+    $.divResizer({
+        select: '#gcl-resize',
+        callback: function () {
+            gclSpread.refresh();
+            let bcontent = $("#leafxmj-bottom").length > 0 ? $("#leafxmj-bottom").height() : 0;
+            $("#leaf-xmj-spread").height(bcontent-30);
+            leafXmjSpread.refresh();
+        }
+    });
 
 
     const cTree = createNewPathTree('master', {
     const cTree = createNewPathTree('master', {
         id: 'ledger_id',
         id: 'ledger_id',
@@ -159,15 +233,35 @@ $(document).ready(() => {
         cPos.loadDatas(result.main.pos);
         cPos.loadDatas(result.main.pos);
         SpreadJsObj.loadSheetData(billsSheet, SpreadJsObj.DataType.Tree, cTree);
         SpreadJsObj.loadSheetData(billsSheet, SpreadJsObj.DataType.Tree, cTree);
         loadPosData(0);
         loadPosData(0);
+
+        const checkField = function (x) {
+            if (x === 'quantity') return true;
+            if (x === 'total_price') return true;
+            if (x.indexOf('_qty') >= 0) return true;
+            if (x.indexOf('_tp') >= 0) return true;
+            return false;
+        };
+        gclGatherModel.loadGatherField(checkField, checkField);
+        gclGatherModel.loadLedgerData(result.main.ledger);
+        gclGatherModel.loadPosData(result.main.pos);
+        gclGatherData = gclGatherModel.gatherGclData();
+        SpreadJsObj.loadSheetData(gclSheet, SpreadJsObj.DataType.Data, gclGatherData);
+        loadLeafXmjData(0);
     }, null, true);
     }, null, true);
     function loadPosData(iRow) {
     function loadPosData(iRow) {
         const node = iRow ? billsSheet.zh_tree.nodes[iRow] : SpreadJsObj.getSelectObject(billsSheet);
         const node = iRow ? billsSheet.zh_tree.nodes[iRow] : SpreadJsObj.getSelectObject(billsSheet);
-        if (node) {
-            SpreadJsObj.loadSheetData(posSheet, SpreadJsObj.DataType.Data, cPos.getLedgerPos(node.id));
+        const posRange = node ? (cPos.getLedgerPos(node.id) || []) : [];
+        SpreadJsObj.loadSheetData(posSheet, SpreadJsObj.DataType.Data, posRange);
+        SpreadJsObj.resetTopAndSelect(posSheet);
+    }
+    function loadLeafXmjData(iRow) {
+        const gcl = iRow ? gclSheet.zh_data[iRow] : SpreadJsObj.getSelectObject(gclSheet);
+        if (gcl) {
+            SpreadJsObj.loadSheetData(leafXmjSheet, SpreadJsObj.DataType.Data, gcl.leafXmjs);
         } else {
         } else {
-            SpreadJsObj.loadSheetData(posSheet, SpreadJsObj.DataType.Data, []);
+            SpreadJsObj.loadSheetData(leafXmjSheet, SpreadJsObj.DataType.Data, []);
         }
         }
-        SpreadJsObj.resetTopAndSelect(posSheet);
+        SpreadJsObj.resetTopAndSelect(leafXmjSheet);
     }
     }
     billsSheet.bind(spreadNS.Events.SelectionChanged, function (e, info) {
     billsSheet.bind(spreadNS.Events.SelectionChanged, function (e, info) {
         if (info.newSelections) {
         if (info.newSelections) {
@@ -183,22 +277,32 @@ $(document).ready(() => {
             }
             }
         }
         }
     });
     });
+    const compareStages = [];
     $('#select-qi-ok').click(function () {
     $('#select-qi-ok').click(function () {
         function refreshView () {
         function refreshView () {
-            const compareStages = [];
+            compareStages.length = 0;
             for (let order = 0, iLength = trs.length; order < iLength; order++) {
             for (let order = 0, iLength = trs.length; order < iLength; order++) {
                 const tr = trs[order];
                 const tr = trs[order];
                 if ($('input', tr)[0].checked) {
                 if ($('input', tr)[0].checked) {
                     compareStages.push(order + 1);
                     compareStages.push(order + 1);
                 }
                 }
             }
             }
-            //setLocalCache(cCacheKey, compareStages.join(','));
+            // setLocalCache(cCacheKey, compareStages.join(','));
             initSpreadSettingWithRoles(compareStages);
             initSpreadSettingWithRoles(compareStages);
             SpreadJsObj.initSheet(billsSheet, billsSpreadSetting);
             SpreadJsObj.initSheet(billsSheet, billsSpreadSetting);
             treeCalc.calculateAll(cTree);
             treeCalc.calculateAll(cTree);
             SpreadJsObj.loadSheetData(billsSheet, SpreadJsObj.DataType.Tree, cTree);
             SpreadJsObj.loadSheetData(billsSheet, SpreadJsObj.DataType.Tree, cTree);
             SpreadJsObj.initSheet(posSheet, posSpreadSetting);
             SpreadJsObj.initSheet(posSheet, posSpreadSetting);
             loadPosData();
             loadPosData();
+
+            SpreadJsObj.reLoadSheetHeader(gclSheet);
+            SpreadJsObj.reLoadSheetHeader(leafXmjSheet);
+
+            gclGatherModel.loadLedgerData(cTree.datas);
+            gclGatherModel.loadPosData(cPos.datas);
+            gclGatherData = gclGatherModel.gatherGclData();
+            SpreadJsObj.loadSheetData(gclSheet, SpreadJsObj.DataType.Data, gclGatherData);
+            loadLeafXmjData(0);
         }
         }
         let loadData = [], showData = [], trs = $('tr[stage-id]');
         let loadData = [], showData = [], trs = $('tr[stage-id]');
         for (let order = 0, iLength = trs.length; order < iLength; order++) {
         for (let order = 0, iLength = trs.length; order < iLength; order++) {
@@ -214,10 +318,10 @@ $(document).ready(() => {
             postData(window.location.pathname + '/load', {stages: loadData}, function (result) {
             postData(window.location.pathname + '/load', {stages: loadData}, function (result) {
                 for (const aData of result.stages) {
                 for (const aData of result.stages) {
                     calculateStageLedgerData(aData.bills);
                     calculateStageLedgerData(aData.bills);
-                    cTree.loadMinorData(aData.bills, aData.order + '', ['gather_qty', 'gather_tp'], ['gather_tp']);
+                    cTree.loadMinorData(aData.bills, aData.order + '', ['contract_qty', 'contract_tp', 'qc_qty', 'qc_tp', 'gather_qty', 'gather_tp'], ['contract_tp', 'qc_tp', 'gather_tp']);
                     treeCalc.calculateAll(cTree);
                     treeCalc.calculateAll(cTree);
                     calculateStagePosData(aData.pos);
                     calculateStagePosData(aData.pos);
-                    cPos.loadMinorData(aData.pos, aData.order + '', ['gather_qty']);
+                    cPos.loadMinorData(aData.pos, aData.order + '', ['contract_qty', 'qc_qty', 'gather_qty']);
                 }
                 }
                 refreshView();
                 refreshView();
                 $('#select-qi').modal('hide');
                 $('#select-qi').modal('hide');
@@ -268,4 +372,27 @@ $(document).ready(() => {
 
 
         SpreadExcelObj.exportSimpleXlsxSheet(billsSpreadSetting, data, $('.sidebar-title').attr('data-original-title') + "-多期比较.xlsx");
         SpreadExcelObj.exportSimpleXlsxSheet(billsSpreadSetting, data, $('.sidebar-title').attr('data-original-title') + "-多期比较.xlsx");
     });
     });
+
+    $('[name=compare-data]').click(function () {
+        initSpreadSettingWithRoles(compareStages);
+        SpreadJsObj.reLoadSheetHeader(billsSheet);
+        SpreadJsObj.reloadColData(billsSheet, billsSpreadSetting.baseCols.length - 1, compareStages.length * billsSpreadSetting.extraCols.length);
+        SpreadJsObj.reLoadSheetHeader(posSheet);
+        SpreadJsObj.reloadColData(posSheet, posSpreadSetting.baseCols.length - 1, compareStages.length * posSpreadSetting.extraCols.length);
+
+        SpreadJsObj.reLoadSheetHeader(gclSheet);
+        SpreadJsObj.reloadColData(gclSheet, gclSpreadSetting.baseCols.length - 1, compareStages.length * gclSpreadSetting.extraCols.length);
+        SpreadJsObj.reLoadSheetHeader(leafXmjSheet);
+        SpreadJsObj.reloadColData(leafXmjSheet, leafXmjSpreadSetting.baseCols.length - 1, compareStages.length * leafXmjSpreadSetting.extraCols.length);
+    });
+    $('[name=compareType]').click(function () {
+        $('[name=compareType]').removeClass('active');
+        $(this).addClass('active');
+        $('#compareType').children().removeClass('active');
+        $(this.getAttribute('href')).addClass('active');
+        billsSpread.refresh();
+        posSpread.refresh();
+        gclSpread.refresh();
+        leafXmjSpread.refresh();
+    })
 });
 });

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

@@ -1172,7 +1172,6 @@ const showSelectTab = function(select, spread, afterShow) {
         const sheet = spread.getActiveSheet();
         const sheet = spread.getActiveSheet();
         SpreadJsObj.initSheet(sheet, spreadSetting);
         SpreadJsObj.initSheet(sheet, spreadSetting);
 
 
-
         if (setting.cellDoubleClick) sheet.bind(spreadNS.Events.CellDoubleClick, setting.cellDoubleClick);
         if (setting.cellDoubleClick) sheet.bind(spreadNS.Events.CellDoubleClick, setting.cellDoubleClick);
         sheet.bind(spreadNS.Events.SelectionChanged, function (e, info) {
         sheet.bind(spreadNS.Events.SelectionChanged, function (e, info) {
             if (!info.oldSelections || !info.oldSelections[0] || info.newSelections[0].row !== info.oldSelections[0].row) {
             if (!info.oldSelections || !info.oldSelections[0] || info.newSelections[0].row !== info.oldSelections[0].row) {

+ 29 - 7
app/public/js/sr_detail.js

@@ -36,7 +36,7 @@ function customColDisplay () {
         { title: '本期完成计量', fields: ['gather_qty', 'gather_tp'], visible: true },
         { title: '本期完成计量', fields: ['gather_qty', 'gather_tp'], visible: true },
         { title: '截止本期计量合同', fields: ['end_contract_qty', 'end_contract_tp'], visible: true },
         { title: '截止本期计量合同', fields: ['end_contract_qty', 'end_contract_tp'], visible: true },
         { title: '截止本期数量变更', fields: ['end_qc_qty', 'end_qc_tp', 'end_qc_bgl'], visible: true },
         { title: '截止本期数量变更', fields: ['end_qc_qty', 'end_qc_tp', 'end_qc_bgl'], visible: true },
-        { title: '截止本期完成计量', fields: ['end_gather_qty', 'end_gather_tp', 'end_gather_percent'], visible: true },
+        { title: '截止本期完成计量', fields: ['end_gather_qty', 'end_gather_tp', 'end_gather_percent', 'end_final_1_percent'], visible: true },
         { title: '本期批注', fields: ['postil'], visible: true },
         { title: '本期批注', fields: ['postil'], visible: true },
         { title: '图册号', fields: ['drawing_code'], visible: true },
         { title: '图册号', fields: ['drawing_code'], visible: true },
         { title: '备注', fields: ['memo'], visible: true },
         { title: '备注', fields: ['memo'], visible: true },
@@ -165,16 +165,26 @@ $(document).ready(() => {
         markExpandSubKey: window.location.pathname.split('/')[2],
         markExpandSubKey: window.location.pathname.split('/')[2],
     };
     };
     // 台账树结构计算相关设置
     // 台账树结构计算相关设置
-    stageTreeSetting.updateFields = ['contract_qty', 'contract_tp', 'qc_qty', 'qc_tp', 'postil', 'used', 'contract_expr'];
-    stageTreeSetting.calcFields = ['deal_tp', 'total_price', 'contract_tp', 'qc_tp', 'gather_tp', 'end_contract_tp', 'end_qc_tp', 'end_gather_tp', 'end_correct_tp'];
+    stageTreeSetting.updateFields = ['contract_qty', 'contract_tp', 'qc_qty', 'qc_tp', 'qc_minus_qty', 'postil', 'used', 'contract_expr'];
+    stageTreeSetting.calcFields = ['deal_tp', 'total_price', 'contract_tp', 'qc_tp', 'gather_tp',
+        'end_contract_tp', 'end_qc_tp', 'end_gather_tp', 'end_correct_tp', 'final_1_tp', 'end_final_1_tp'];
     stageTreeSetting.calcFun = function (node) {
     stageTreeSetting.calcFun = function (node) {
         if (!node.children || node.children.length === 0) {
         if (!node.children || node.children.length === 0) {
             node.gather_qty = ZhCalc.add(node.contract_qty, node.qc_qty);
             node.gather_qty = ZhCalc.add(node.contract_qty, node.qc_qty);
             node.end_gather_qty = ZhCalc.add(node.end_contract_qty, node.end_qc_qty);
             node.end_gather_qty = ZhCalc.add(node.end_contract_qty, node.end_qc_qty);
+            node.end_qc_minus_qty = ZhCalc.add(node.pre_qc_minus_qty, node.qc_minus_qty);
+            node.final_1_qty = ZhCalc.add(node.end_qc_minus_qty, node.quantity);
+            node.final_1_tp = ZhCalc.mul(node.final_1_qty, node.unit_price, tenderInfo.decimal.tp);
+            node.deal_final_1_qty = ZhCalc.add(node.end_qc_minus_qty, node.deal_qty);
+            node.end_final_1_qty = ZhCalc.add(node.end_qc_qty, node.final_1_qty);
         }
         }
         node.gather_tp = ZhCalc.add(node.contract_tp, node.qc_tp);
         node.gather_tp = ZhCalc.add(node.contract_tp, node.qc_tp);
+        node.end_contract_tp = ZhCalc.add(node.pre_contract_tp, node.contract_tp);
+        node.end_qc_tp = ZhCalc.add(node.pre_qc_tp, node.qc_tp);
+        node.end_gather_tp = ZhCalc.add(node.pre_gather_tp, node.gather_tp);
         node.end_gather_tp = ZhCalc.add(node.end_contract_tp, node.end_qc_tp);
         node.end_gather_tp = ZhCalc.add(node.end_contract_tp, node.end_qc_tp);
         node.end_final_tp = ZhCalc.add(node.end_qc_tp, node.total_price);
         node.end_final_tp = ZhCalc.add(node.end_qc_tp, node.total_price);
+        node.end_final_1_tp = ZhCalc.add(node.end_qc_tp, node.final_1_tp);
         if (!node.children || node.children.length === 0) {
         if (!node.children || node.children.length === 0) {
             if (node.end_contract_qty) {
             if (node.end_contract_qty) {
                 node.end_correct_tp = ZhCalc.add(node.end_qc_tp, ZhCalc.mul(node.end_contract_qty, node.unit_price, tenderInfo.decimal.tp));
                 node.end_correct_tp = ZhCalc.add(node.end_qc_tp, ZhCalc.mul(node.end_contract_qty, node.unit_price, tenderInfo.decimal.tp));
@@ -185,6 +195,8 @@ $(document).ready(() => {
         node.end_gather_percent = ZhCalc.mul(ZhCalc.div(node.end_gather_tp, node.end_final_tp), 100, 2);
         node.end_gather_percent = ZhCalc.mul(ZhCalc.div(node.end_gather_tp, node.end_final_tp), 100, 2);
         node.end_correct_percent = ZhCalc.mul(ZhCalc.div(node.end_correct_tp, node.end_final_tp), 100, 2);
         node.end_correct_percent = ZhCalc.mul(ZhCalc.div(node.end_correct_tp, node.end_final_tp), 100, 2);
         node.final_dgn_price = ZhCalc.round(ZhCalc.div(node.end_gather_tp, ZhCalc.add(node.deal_dgn_qty1, node.c_dgn_qty1)), tenderInfo.decimal.up);
         node.final_dgn_price = ZhCalc.round(ZhCalc.div(node.end_gather_tp, ZhCalc.add(node.deal_dgn_qty1, node.c_dgn_qty1)), tenderInfo.decimal.up);
+        node.end_final_1_percent = ZhCalc.mul(ZhCalc.div(node.end_gather_tp, node.end_final_1_tp), 100, 2);
+        node.end_correct_1_percent = ZhCalc.mul(ZhCalc.div(node.end_correct_tp, node.end_final_1_tp), 100, 2);
     };
     };
     const stageTree = createNewPathTree('stage', stageTreeSetting);
     const stageTree = createNewPathTree('stage', stageTreeSetting);
     // 初始化 计量单元 数据结构
     // 初始化 计量单元 数据结构
@@ -192,19 +204,23 @@ $(document).ready(() => {
     stagePosSetting.calcFun = function (pos) {
     stagePosSetting.calcFun = function (pos) {
         pos.gather_qty = ZhCalc.add(pos.contract_qty, pos.qc_qty);
         pos.gather_qty = ZhCalc.add(pos.contract_qty, pos.qc_qty);
         pos.end_gather_qty = ZhCalc.add(pos.end_contract_qty, pos.end_qc_qty);
         pos.end_gather_qty = ZhCalc.add(pos.end_contract_qty, pos.end_qc_qty);
+        pos.end_qc_minus_qty = ZhCalc.add(pos.pre_qc_minus_qty, pos.qc_minus_qty);
         pos.sum = ZhCalc.add(pos.end_qc_qty, pos.quantity);
         pos.sum = ZhCalc.add(pos.end_qc_qty, pos.quantity);
         pos.end_gather_percent = ZhCalc.mul(ZhCalc.div(pos.end_gather_qty, pos.sum), 100, 2);
         pos.end_gather_percent = ZhCalc.mul(ZhCalc.div(pos.end_gather_qty, pos.sum), 100, 2);
         pos.estimate_qty = !checkZero(pos.real_qty)
         pos.estimate_qty = !checkZero(pos.real_qty)
             ? ZhCalc.sub(ZhCalc.sub(pos.real_qty, pos.quantity), pos.end_qc_qty)
             ? ZhCalc.sub(ZhCalc.sub(pos.real_qty, pos.quantity), pos.end_qc_qty)
             : null;
             : null;
+        pos.final_1_qty = ZhCalc.add(pos.end_qc_minus_qty, pos.quantity);
+        pos.deal_final_1_qty = ZhCalc.add(pos.end_qc_minus_qty, pos.deal_qty);
+        pos.end_final_1_qty = ZhCalc.add(pos.end_qc_qty, pos.final_1_qty);
     };
     };
     const stagePos = new StagePosData(stagePosSetting);
     const stagePos = new StagePosData(stagePosSetting);
 
 
     // 初始化 台账 spread
     // 初始化 台账 spread
     const slSpread = SpreadJsObj.createNewSpread($('#stage-ledger')[0]);
     const slSpread = SpreadJsObj.createNewSpread($('#stage-ledger')[0]);
     customizeStageTreeSetting(ledgerSpreadSetting, customColDisplay());
     customizeStageTreeSetting(ledgerSpreadSetting, customColDisplay());
-    const ratioCol = ledgerSpreadSetting.cols.find(x => {return x.field === 'end_gather_percent' || x.field === 'end_correct_percent'});
-    ratioCol.field = tenderInfo.display.stage.correct ? 'end_correct_percent' : 'end_gather_percent';
+    const ratioCol = ledgerSpreadSetting.cols.find(x => {return x.field === 'end_final_1_percent' || x.field === 'end_correct_1_percent'});
+    if (ratioCol) ratioCol.field = tenderInfo.display.stage.correct ? 'end_correct_1_percent' : 'end_final_1_percent';
     ledgerSpreadSetting.imageClick = function (data, hitinfo) {
     ledgerSpreadSetting.imageClick = function (data, hitinfo) {
         const col = hitinfo.sheet.zh_setting.cols[hitinfo.col];
         const col = hitinfo.sheet.zh_setting.cols[hitinfo.col];
         if (col.field === 'dagl') data.dagl_url && window.open(data.dagl_url);
         if (col.field === 'dagl') data.dagl_url && window.open(data.dagl_url);
@@ -894,14 +910,20 @@ $(document).ready(() => {
                 SpreadJsObj.reLoadSheetHeader(self.sheet);
                 SpreadJsObj.reLoadSheetHeader(self.sheet);
                 $('[name=type-title-contract]').text('本期合同计量金额');
                 $('[name=type-title-contract]').text('本期合同计量金额');
                 $('[name=type-title-qc]').text('本期变更计量金额');
                 $('[name=type-title-qc]').text('本期变更计量金额');
-                $('#show-qc-minus-jl').parent().hidden();
-                $('#qc-minus-jl').parent().hidden();
+                if ($('#show-qc-minus-jl').length > 0) {
+                    $('#show-qc-minus-jl').parent().hide();
+                    $('#qc-minus-jl').parent().hide();
+                }
             } else {
             } else {
                 const jlCol = self.spreadSetting.cols.find(function (x) {return x.field === 'jl'});
                 const jlCol = self.spreadSetting.cols.find(function (x) {return x.field === 'jl'});
                 jlCol.title = '本期计量数量';
                 jlCol.title = '本期计量数量';
                 SpreadJsObj.reLoadSheetHeader(self.sheet);
                 SpreadJsObj.reLoadSheetHeader(self.sheet);
                 $('[name=type-title-contract]').text('本期合同计量数量');
                 $('[name=type-title-contract]').text('本期合同计量数量');
                 $('[name=type-title-qc]').text('本期变更计量数量');
                 $('[name=type-title-qc]').text('本期变更计量数量');
+                if ($('#show-qc-minus-jl').length > 0) {
+                    $('#show-qc-minus-jl').parent().show();
+                    $('#qc-minus-jl').parent().show();
+                }
             }
             }
             if (relaStage.im_type === imType.bb.value || relaStage.im_type === imType.bw.value) {
             if (relaStage.im_type === imType.bb.value || relaStage.im_type === imType.bw.value) {
                 $('#show-jldy').parent().show();
                 $('#show-jldy').parent().show();

+ 141 - 8
app/public/js/stage.js

@@ -2921,16 +2921,20 @@ $(document).ready(() => {
                 SpreadJsObj.reLoadSheetHeader(self.sheet);
                 SpreadJsObj.reLoadSheetHeader(self.sheet);
                 $('[name=type-title-contract]').text('本期合同计量金额');
                 $('[name=type-title-contract]').text('本期合同计量金额');
                 $('[name=type-title-qc]').text('本期变更计量金额');
                 $('[name=type-title-qc]').text('本期变更计量金额');
-                $('#show-qc-minus-jl').parent().hide();
-                $('#qc-minus-jl').parent().hide();
+                if ($('#show-qc-minus-jl').length > 0) {
+                    $('#show-qc-minus-jl').parent().hide();
+                    $('#qc-minus-jl').parent().hide();
+                }
             } else {
             } else {
                 const jlCol = self.spreadSetting.cols.find(function (x) {return x.field === 'jl'});
                 const jlCol = self.spreadSetting.cols.find(function (x) {return x.field === 'jl'});
                 jlCol.title = '本期计量数量';
                 jlCol.title = '本期计量数量';
                 SpreadJsObj.reLoadSheetHeader(self.sheet);
                 SpreadJsObj.reLoadSheetHeader(self.sheet);
                 $('[name=type-title-contract]').text('本期合同计量数量');
                 $('[name=type-title-contract]').text('本期合同计量数量');
                 $('[name=type-title-qc]').text('本期变更计量数量');
                 $('[name=type-title-qc]').text('本期变更计量数量');
-                $('#show-qc-minus-jl').parent().show();
-                $('#qc-minus-jl').parent().show();
+                if ($('#show-qc-minus-jl').length > 0) {
+                    $('#show-qc-minus-jl').parent().show();
+                    $('#qc-minus-jl').parent().show();
+                }
             }
             }
             if (stage.im_type === imType.bb.value || stage.im_type === imType.bw.value) {
             if (stage.im_type === imType.bb.value || stage.im_type === imType.bw.value) {
                 $('#show-jldy').parent().show();
                 $('#show-jldy').parent().show();
@@ -3020,16 +3024,20 @@ $(document).ready(() => {
                         SpreadJsObj.reLoadSheetHeader(self.sheet);
                         SpreadJsObj.reLoadSheetHeader(self.sheet);
                         $('[name=type-title-contract]').text('本期合同计量金额');
                         $('[name=type-title-contract]').text('本期合同计量金额');
                         $('[name=type-title-qc]').text('本期变更计量金额');
                         $('[name=type-title-qc]').text('本期变更计量金额');
-                        $('#show-qc-minus-jl').parent().hide();
-                        $('#qc-minus-jl').parent().hide();
+                        if ($('#show-qc-minus-jl').length > 0) {
+                            $('#show-qc-minus-jl').parent().hide();
+                            $('#qc-minus-jl').parent().hide();
+                        }
                     } else {
                     } else {
                         const jlCol = self.spreadSetting.cols.find(function (x) {return x.field === 'jl'});
                         const jlCol = self.spreadSetting.cols.find(function (x) {return x.field === 'jl'});
                         jlCol.title = '本期计量数量';
                         jlCol.title = '本期计量数量';
                         SpreadJsObj.reLoadSheetHeader(self.sheet);
                         SpreadJsObj.reLoadSheetHeader(self.sheet);
                         $('[name=type-title-contract]').text('本期合同计量数量');
                         $('[name=type-title-contract]').text('本期合同计量数量');
                         $('[name=type-title-qc]').text('本期变更计量数量');
                         $('[name=type-title-qc]').text('本期变更计量数量');
-                        $('#show-qc-minus-jl').parent().show();
-                        $('#qc-minus-jl').parent().show();
+                        if ($('#show-qc-minus-jl').length > 0) {
+                            $('#show-qc-minus-jl').parent().show();
+                            $('#qc-minus-jl').parent().show();
+                        }
                     }
                     }
                     if (stage.im_type === imType.bb.value || stage.im_type === imType.bw.value) {
                     if (stage.im_type === imType.bb.value || stage.im_type === imType.bw.value) {
                         $('#show-jldy').parent().show();
                         $('#show-jldy').parent().show();
@@ -3812,6 +3820,99 @@ $(document).ready(() => {
                             return !changeBills;
                             return !changeBills;
                         }
                         }
                     },
                     },
+                    'autoUse': {
+                        name: '调用',
+                        icon: 'fa-play',
+                        callback: function (key, opt) {
+                            const curChange = SpreadJsObj.getSelectObject(self.changeSheet);
+                            const changeBills = SpreadJsObj.getSelectObject(self.changeBillsSheet);
+                            const billsPos = self.findBillsPos(curChange, changeBills);
+                            if (!billsPos) toastr.warning('无可调用的清单或计量单元');
+
+                            const data = { autoType: 'bills', bills: [{ ...billsPos, cid: changeBills.cid, cbid: changeBills.cbid }] };
+                            postData(window.location.pathname + '/auto-change', data, function(result) {
+                                if (result.pos) {
+                                    stagePos.loadCurStageData(result.pos.curStageData);
+                                }
+                                const nodes = stageTree.loadPostStageData(result.bills);
+                                stageTreeSpreadObj.refreshTreeNodes(slSpread.getActiveSheet(), nodes);
+                                stagePosSpreadObj.loadCurPosData();
+                                if (detail) {
+                                    detail.loadStageChangeUpdateData(result, nodes);
+                                } else {
+                                    stageIm.loadUpdateChangeData(result, nodes)
+                                }
+                            });
+                        },
+                        disable: function (key, opt) {
+                            const curChange = SpreadJsObj.getSelectObject(self.changeSheet);
+                            const changeBills = SpreadJsObj.getSelectObject(self.changeBillsSheet);
+                            return !changeBills || curChange.is_import;
+                        },
+                        visible: function (key, opt) {
+                            return false;
+                        }
+                    },
+                }
+            });
+
+            $.contextMenu({
+                selector: '#' + setting.changeObj.attr('id'),
+                build: function ($trigger, e) {
+                    const target = SpreadJsObj.safeRightClickSelection($trigger, e, self.changeSpread);
+                    return target.hitTestType === spreadNS.SheetArea.viewport || target.hitTestType === spreadNS.SheetArea.rowHeader;
+                },
+                items: {
+                    'autoUseCur': {
+                        name: '自动调用',
+                        icon: 'fa-play',
+                        callback: function (key, opt) {
+                            const curChange = SpreadJsObj.getSelectObject(self.changeSheet);
+                            const changeBills = SpreadJsObj.zh_data;
+                            const data = { bills: [], autoType: 'bills' };
+                            for (const cb of changeBills) {
+                                const billsPos = self.findBillsPos(curChange, cb);
+                                if (billsPos) data.push({ ...billsPos, cid: curChange.cid, cbid: cb.cbid })
+                            }
+                            postData(window.location.pathname + '/auto-use-change', data, function(result) {
+                                if (result.pos) {
+                                    stagePos.loadCurStageData(result.pos.curStageData);
+                                }
+                                const nodes = stageTree.loadPostStageData(result.bills);
+                                stageTreeSpreadObj.refreshTreeNodes(slSpread.getActiveSheet(), nodes);
+                                stagePosSpreadObj.loadCurPosData();
+                                if (detail) {
+                                    detail.loadStageChangeUpdateData(result, nodes);
+                                } else {
+                                    stageIm.loadUpdateChangeData(result, nodes)
+                                }
+                            });
+                        },
+                        disable: function (key, opt) {
+                            const curChange = SpreadJsObj.getSelectObject(self.changeSheet);
+                            const changeBills = SpreadJsObj.getSelectObject(self.changeBillsSheet);
+                            return !changeBills || curChange.is_import;
+                        },
+                        visible: function (key, opt) {
+                            return false;
+                        }
+                    },
+                    'autoUseAll': {
+                        name: '自动调用(全部变更令)',
+                        icon: 'fa-play',
+                        callback: function (key, opt) {
+                            postData(window.location.pathname + '/auto-use-change', { autoType: 'all' }, function(result) {
+                                window.location.reload();
+                            });
+                        },
+                        disable: function (key, opt) {
+                            const curChange = SpreadJsObj.getSelectObject(self.changeSheet);
+                            return !curChange || curChange.is_import;
+                        },
+                        visible: function (key, opt) {
+                            return is_debug && stage.status === 1;
+                        }
+                    }
                 }
                 }
             });
             });
         }
         }
@@ -3886,6 +3987,38 @@ $(document).ready(() => {
                 this._analyzeCommon(change);
                 this._analyzeCommon(change);
             }
             }
         }
         }
+        findBillsPos(change, changeBills) {
+            if (change.is_import) {
+                return null;
+            } else if (changeBills.gcl_id) {
+                const node = stageTree.nodes.find(x => {return x.id === changeBills.gcl_id});
+                posData = stagePos.getLedgerPos(node.id);
+                const changePos = posData.find(x => { return x.name === changeBills.bwmx; });
+                return { lid: node.id, pid: changePos ? changePos.id : (posData.length > 0 ? posData[0].id : -1) };
+            } else {
+                const cb = {
+                    b_code: changeBills.code || '',
+                    name: changeBills.name || '',
+                    unit: changeBills.unit || '',
+                    unit_price: changeBills.unit_price || 0,
+                };
+                for (const node of stageTree.nodes) {
+                    if (node.children && node.children.length > 0) continue;
+
+                    const b = {
+                        b_code: node.b_code || '',
+                        name: node.name || '',
+                        unit: node.unit || '',
+                        unit_price: node.unit_price || 0,
+                    };
+                    if (_.isMatch(cb, b)) {
+                        posData = stagePos.getLedgerPos(node.id);
+                        return { lid: node.id, pid: posData.length > 0 ? posData[0].id : -1 };
+                    }
+                }
+                return null;
+            }
+        }
     }
     }
     // 展开收起附件
     // 展开收起附件
     $('a', '.right-nav').bind('click', function () {
     $('a', '.right-nav').bind('click', function () {

+ 8 - 1
app/public/report/js/rpt_custom.js

@@ -363,6 +363,13 @@ const rptCustomObj = (function () {
             rptCustomObj.resetStageSelect(resolve);
             rptCustomObj.resetStageSelect(resolve);
             // $("#stage-select").modal('hide');
             // $("#stage-select").modal('hide');
         });
         });
+        $('#stage-select-all').unbind('click');
+        $('#stage-select-all').bind('click', function () {
+            const material = $('[name=stage-select-check]');
+            for (const m of material) {
+                m.checked = this.checked;
+            }
+        });
     };
     };
     const initChangeSelect = function (gsSetting, rptName, resolve = null) {
     const initChangeSelect = function (gsSetting, rptName, resolve = null) {
         changeObj.show('选择工程变更' + (rptName ? '-' + rptName : ''), resolve);
         changeObj.show('选择工程变更' + (rptName ? '-' + rptName : ''), resolve);
@@ -398,7 +405,7 @@ const rptCustomObj = (function () {
             for (const m of material) {
             for (const m of material) {
                 m.checked = this.checked;
                 m.checked = this.checked;
             }
             }
-        })
+        });
     };
     };
     const init = function (cDefine, sfData, cSelect, rptName, resolve = null) {
     const init = function (cDefine, sfData, cSelect, rptName, resolve = null) {
         stageFlow = sfData;
         stageFlow = sfData;

+ 20 - 7
app/public/report/js/rpt_other_stage.js

@@ -1,24 +1,36 @@
 const rptOtherStage = (function (){
 const rptOtherStage = (function (){
     const info = {
     const info = {
-        advance: { title: '请选择预付款', colHeader: ['选择', '类型', '期', '审批状态'] },
+        advance: { title: '请选择预付款', colHeader: ['类型', '期', '审批状态'], colValue: ['typeStr', 'orderStr', 'statusStr'], key: 'id' },
+        pm_deal: { title: '请选择合同管理', colHeader: ['名称'], colValue: ['name'], active: true, key: 'bidsectionId' },
     };
     };
     const data = {};
     const data = {};
     let curType = '';
     let curType = '';
     const initList = function () {
     const initList = function () {
-        const header = info[curType].colHeader;
-        const type = info[curType].type;
-        $('#sos-header').html(`<tr class="text-center"><th>${header[0]}</th><th>${header[1]}</th><th>${header[2]}</th><th>${header[3]}</th></tr>`);
+        const header = info[curType].colHeader, value = info[curType].colValue, key = info[curType].key;
+        const headerHtml = [];
+        headerHtml.push('<tr class="text-center"><th>选择</th>');
+        for (const h of header) {
+            headerHtml.push(`<th>${h}</th>`);
+        }
+        headerHtml.push('</tr>');
+        $('#sos-header').html(headerHtml.join());
         const html = [], arr = data[curType];
         const html = [], arr = data[curType];
         for (const a of arr) {
         for (const a of arr) {
+            const aHtml = [];
             const checked = a.selected ? 'checked' : '';
             const checked = a.selected ? 'checked' : '';
-            html.push('<tr class="text-center">', `<td><input type="checkbox" name="sos-check" ${checked} value="${a.id}"></td>`, `<td>${a.typeStr}</td>`, `<td>第${a.order}期</td>`, `<td>${a.statusStr}</td>`,  '</tr>');
+            aHtml.push(`<tr class="text-center"><td><input type="checkbox" name="sos-check" ${checked} value="${a[key]}"></td>`);
+            for (const v of value) {
+                aHtml.push(`<td>${a[v]}</td>`);
+            }
+            aHtml.push('</tr>');
+            html.push(aHtml.join());
         }
         }
         $('#sos-list').html(html.join(''));
         $('#sos-list').html(html.join(''));
     };
     };
     const showOtherStage = async function (type) {
     const showOtherStage = async function (type) {
         curType = type;
         curType = type;
         document.getElementById('sos-title').innerText = info[type].title;
         document.getElementById('sos-title').innerText = info[type].title;
-        if (!data[type]) {
+        if (!data[type] || info[curType].active) {
             const result = await postDataAsync(`/tender/${window.location.pathname.split('/')[2]}/load`, { filter: curType });
             const result = await postDataAsync(`/tender/${window.location.pathname.split('/')[2]}/load`, { filter: curType });
             data[curType] = result[curType];
             data[curType] = result[curType];
         }
         }
@@ -30,10 +42,11 @@ const rptOtherStage = (function (){
         })
         })
     };
     };
     const updateOtherStage = async function () {
     const updateOtherStage = async function () {
+        const key = info[curType].key;
         const updateData = {};
         const updateData = {};
         updateData[curType] = [];
         updateData[curType] = [];
         $('[name=sos-check]').each((i, c) => {
         $('[name=sos-check]').each((i, c) => {
-            const ci = data[curType].find(x => { return x.id == c.value });
+            const ci = data[curType].find(x => { return x[key] == c.value });
             const checked = c.checked ? 1 : 0;
             const checked = c.checked ? 1 : 0;
             if (ci && ci.selected !== checked) {
             if (ci && ci.selected !== checked) {
                 updateData[curType].push({id: c.value, selected: c.checked})
                 updateData[curType].push({id: c.value, selected: c.checked})

+ 1 - 0
app/router.js

@@ -281,6 +281,7 @@ module.exports = app => {
     app.post('/tender/:id/measure/stage/:order/update', sessionAuth, tenderCheck, uncheckTenderCheck, stageCheck, 'stageController.updateStageData');
     app.post('/tender/:id/measure/stage/:order/update', sessionAuth, tenderCheck, uncheckTenderCheck, stageCheck, 'stageController.updateStageData');
     app.post('/tender/:id/measure/stage/:order/valid-change', sessionAuth, tenderCheck, uncheckTenderCheck, stageCheck, 'stageController.searchValidChange');
     app.post('/tender/:id/measure/stage/:order/valid-change', sessionAuth, tenderCheck, uncheckTenderCheck, stageCheck, 'stageController.searchValidChange');
     app.post('/tender/:id/measure/stage/:order/use-change', sessionAuth, tenderCheck, uncheckTenderCheck, stageCheck, 'stageController.useChange');
     app.post('/tender/:id/measure/stage/:order/use-change', sessionAuth, tenderCheck, uncheckTenderCheck, stageCheck, 'stageController.useChange');
+    app.post('/tender/:id/measure/stage/:order/auto-use-change', sessionAuth, tenderCheck, uncheckTenderCheck, stageCheck, 'stageController.autoUseChange');
     app.post('/tender/:id/measure/stage/:order/check', sessionAuth, tenderCheck, uncheckTenderCheck, stageCheck, 'stageController.check');
     app.post('/tender/:id/measure/stage/:order/check', sessionAuth, tenderCheck, uncheckTenderCheck, stageCheck, 'stageController.check');
     app.post('/tender/:id/measure/stage/:order/save/cooperation', sessionAuth, tenderCheck, uncheckTenderCheck, stageCheck, 'stageController.saveCooperationData');
     app.post('/tender/:id/measure/stage/:order/save/cooperation', sessionAuth, tenderCheck, uncheckTenderCheck, stageCheck, 'stageController.saveCooperationData');
     app.post('/tender/:id/measure/stage/:order/im-file/upload', sessionAuth, tenderCheck, uncheckTenderCheck, stageCheck, 'stageController.uploadImFile');
     app.post('/tender/:id/measure/stage/:order/im-file/upload', sessionAuth, tenderCheck, uncheckTenderCheck, stageCheck, 'stageController.uploadImFile');

+ 38 - 0
app/service/glj_lib.js

@@ -0,0 +1,38 @@
+'use strict';
+
+/**
+ * 标准清单业务逻辑
+ *
+ * @author Mai
+ * @date 2018/3/13
+ * @version
+ */
+
+const StandardLib = require('./standard_lib');
+module.exports = app => {
+
+    class StdBills extends StandardLib {
+
+        /**
+         * 构造函数
+         *
+         * @param {Object} ctx - egg全局变量
+         * @return {void}
+         */
+        constructor(ctx) {
+            super(ctx, {
+                mid: 'list_id',
+                kid: 'glj_id',
+                pid: 'glj_pid',
+                order: 'order',
+                level: 'level',
+                isLeaf: 'is_leaf',
+                fullPath: 'full_path',
+                keyPre: 'revise_bills_maxLid:'
+            }, 'glj_lib');
+            this.stdType = 'glj';
+        }
+    }
+
+    return StdBills;
+};

+ 0 - 16
app/service/material_audit.js

@@ -345,11 +345,6 @@ module.exports = app => {
                     // }
                     // }
                 } else {
                 } else {
                     // 本期结束
                     // 本期结束
-                    // 生成截止本期数据 final数据
-                    // console.time('generatePre');
-                    // await this.ctx.service.stageBillsFinal.generateFinalData(transaction, this.ctx.tender, this.ctx.stage);
-                    // await this.ctx.service.stagePosFinal.generateFinalData(transaction, this.ctx.tender, this.ctx.stage);
-                    // console.timeEnd('generatePre');
                     // 同步 期信息
                     // 同步 期信息
                     await transaction.update(this.ctx.service.material.tableName, {
                     await transaction.update(this.ctx.service.material.tableName, {
                         id: materialId, status: checkData.checkType,
                         id: materialId, status: checkData.checkType,
@@ -519,11 +514,6 @@ module.exports = app => {
                 };
                 };
                 await this.ctx.helper.sendWechat(users, smsTypeConst.const.TC, smsTypeConst.judge.result.toString(), wxConst.template.material, wechatData);
                 await this.ctx.helper.sendWechat(users, smsTypeConst.const.TC, smsTypeConst.judge.result.toString(), wxConst.template.material, wechatData);
 
 
-                // 计算该审批人最终数据
-                // await this.ctx.service.stagePay.calcAllStagePays(this.ctx.stage, transaction);
-                // 复制一份最新数据给原报
-                // await this.ctx.service.stagePay.copyAuditStagePays(this.ctx.stage, this.ctx.stage.times + 1, 0, transaction);
-
                 // 添加短信通知-审批退回提醒功能
                 // 添加短信通知-审批退回提醒功能
                 // const mobile_array = [];
                 // const mobile_array = [];
                 // const stageInfo = await this.ctx.service.stage.getDataById(stageId);
                 // const stageInfo = await this.ctx.service.stage.getDataById(stageId);
@@ -704,13 +694,7 @@ module.exports = app => {
                 });
                 });
                 await transaction.insert(this.tableName, newAuditors);
                 await transaction.insert(this.tableName, newAuditors);
 
 
-                // 复制一份最新数据给下一人
-                // await this.ctx.service.stagePay.copyAuditStagePays(this.ctx.stage, this.ctx.stage.times, audit.order + 2, transaction);
-
                 // 本期结束
                 // 本期结束
-                // 生成截止本期数据 final数据
-                // await this.ctx.service.stageBillsFinal.delGenerateFinalData(transaction, this.ctx.tender, this.ctx.stage);
-                // await this.ctx.service.stagePosFinal.delGenerateFinalData(transaction, this.ctx.tender, this.ctx.stage);
                 // 同步 期信息
                 // 同步 期信息
                 await transaction.update(this.ctx.service.material.tableName, {
                 await transaction.update(this.ctx.service.material.tableName, {
                     id: materialId, status: auditConst.status.checking,
                     id: materialId, status: auditConst.status.checking,

+ 10 - 0
app/service/project.js

@@ -245,6 +245,16 @@ module.exports = app => {
                 });
                 });
             });
             });
         }
         }
+
+        async setPmDealCache(pid, data) {
+            const pmDeal = data.filter(x => { return x.selected; }).map(x => { return x.id; });
+            await this.cache.set('pmDeal-' + pid, pmDeal.join(','), 'EX', this.ctx.app.config.cacheTime);
+        }
+
+        async getPmDealCache(pid) {
+            const result = await this.cache.get('pmDeal-' + pid);
+            return result ? result.split(',') : [];
+        }
     }
     }
 
 
     return Project;
     return Project;

+ 4 - 0
app/service/report.js

@@ -292,6 +292,10 @@ module.exports = app => {
                             runnableRst.push(params.budget_id ? budgetSource.budgetFinal(params.budget_id) : budgetSource.tenderFinal(params.tender_id));
                             runnableRst.push(params.budget_id ? budgetSource.budgetFinal(params.budget_id) : budgetSource.tenderFinal(params.tender_id));
                             runnableKey.push(filter);
                             runnableKey.push(filter);
                             break;
                             break;
+                        case 'mem_pm_deal_pay':
+                            runnableRst.push(service.reportMemory.getPmDeal());
+                            runnableKey.push(filter);
+                            break;
                         default:
                         default:
                             break;
                             break;
                     }
                     }

+ 24 - 1
app/service/report_memory.js

@@ -21,6 +21,7 @@ const stageImTz = 'mem_stage_im_tz';
 const stageImTzBills = 'mem_stage_im_tz_bills';
 const stageImTzBills = 'mem_stage_im_tz_bills';
 const stageImZl = 'mem_stage_im_zl';
 const stageImZl = 'mem_stage_im_zl';
 const stageImVersion = '1.3';
 const stageImVersion = '1.3';
+const PermissionCheck = require('../const/account_permission').PermissionCheck;
 
 
 const Ledger = require('../lib/ledger');
 const Ledger = require('../lib/ledger');
 
 
@@ -304,7 +305,7 @@ module.exports = app => {
             const stages = await this.ctx.service.stage.getValidStages(tender.id);
             const stages = await this.ctx.service.stage.getValidStages(tender.id);
             const lastStage = stages.length > 0 ? stages[0] : null;
             const lastStage = stages.length > 0 ? stages[0] : null;
             if (lastStage) {
             if (lastStage) {
-                await this.ctx.service.stage.checkStageGatherData(lastStage);
+                await this.ctx.service.stage.checkStageGatherData(lastStage, this.ctx.session.sessionUser.is_admin);
                 tender.gather_tp = helper.add(lastStage.contract_tp, lastStage.qc_tp);
                 tender.gather_tp = helper.add(lastStage.contract_tp, lastStage.qc_tp);
                 tender.end_contract_tp = helper.add(lastStage.contract_tp, lastStage.pre_contract_tp);
                 tender.end_contract_tp = helper.add(lastStage.contract_tp, lastStage.pre_contract_tp);
                 tender.end_qc_tp = helper.add(lastStage.qc_tp, lastStage.pre_qc_tp);
                 tender.end_qc_tp = helper.add(lastStage.qc_tp, lastStage.pre_qc_tp);
@@ -1350,6 +1351,28 @@ module.exports = app => {
             }
             }
             return this.changeInfoBills;
             return this.changeInfoBills;
         }
         }
+
+        async getPmDeal() {
+            let result = [];
+            if (!PermissionCheck.viewPmData(this.ctx.session.sessionUser.permission)) return result;
+
+            const selects = await this.ctx.service.project.getPmDealCache(this.ctx.session.sessionProject.id);
+            const pm = require('../lib/pm');
+            this.pmDeal = await pm.dealData(this.ctx, this.ctx.session.sessionProject.code, selects);
+
+            result = this.pmDeal.contracts ? this.pmDeal.contracts.filter(x => { return x.ContractsType === 2 }) : [];
+            // 排序:标段-合同类别-创建时间
+            result.sort((x, y) => {
+                const bidSort = selects.indexOf(x.BidsectionId + '') - selects.indexOf(y.BidsectionId + '');
+                if (bidSort) return bidSort;
+
+                const typeSort = x.ContractsType - y.ContractsType;
+                if (typeSort) return typeSort;
+
+                return x.create_time - y.create_time;
+            });
+            return result;
+        }
     }
     }
 
 
     return ReportMemory;
     return ReportMemory;

+ 2 - 2
app/service/rpt_gather_memory.js

@@ -564,7 +564,7 @@ module.exports = app => {
             if (stage) {
             if (stage) {
                 const helper = this.ctx.helper;
                 const helper = this.ctx.helper;
                 await this.ctx.service.stage.doCheckStage(stage);
                 await this.ctx.service.stage.doCheckStage(stage);
-                await this.ctx.service.stage.checkStageGatherData(stage);
+                await this.ctx.service.stage.checkStageGatherData(stage, this.ctx.session.sessionUser.is_admin);
 
 
                 info.pre_contract_tp = stage.pre_contract_tp;
                 info.pre_contract_tp = stage.pre_contract_tp;
                 info.pre_qc_tp = stage.pre_qc_tp;
                 info.pre_qc_tp = stage.pre_qc_tp;
@@ -592,7 +592,7 @@ module.exports = app => {
             const helper = this.ctx.helper;
             const helper = this.ctx.helper;
             for (const stage of stages) {
             for (const stage of stages) {
                 await this.ctx.service.stage.doCheckStage(stage);
                 await this.ctx.service.stage.doCheckStage(stage);
-                await this.ctx.service.stage.checkStageGatherData(stage);
+                await this.ctx.service.stage.checkStageGatherData(stage, this.ctx.session.sessionUser.is_admin);
 
 
                 info.contract_tp = helper.add(info.contract_tp, stage.contract_tp);
                 info.contract_tp = helper.add(info.contract_tp, stage.contract_tp);
                 info.qc_tp = helper.add(info.qc_tp, stage.qc_tp);
                 info.qc_tp = helper.add(info.qc_tp, stage.qc_tp);

+ 1 - 1
app/service/stage.js

@@ -276,7 +276,7 @@ module.exports = app => {
             // 最新一期计量(未审批完成),当前操作人的期详细数据,应实时计算
             // 最新一期计量(未审批完成),当前操作人的期详细数据,应实时计算
             if (stages.length === 0) return stages;
             if (stages.length === 0) return stages;
 
 
-            await this.checkStageGatherData(stages[0]);
+            await this.checkStageGatherData(stages[0], true);
             for (const s of stages) {
             for (const s of stages) {
                 if (s.yf_tp && s.sf_tp === 0) {
                 if (s.yf_tp && s.sf_tp === 0) {
                     const sf = await this.ctx.service.stagePay.getHistorySf(s);
                     const sf = await this.ctx.service.stagePay.getHistorySf(s);

+ 0 - 5
app/service/stage_audit.js

@@ -935,11 +935,6 @@ module.exports = app => {
                 await this.ctx.service.stageSafeProd.updateHistory4CheckAgain(this.ctx.stage, transaction);
                 await this.ctx.service.stageSafeProd.updateHistory4CheckAgain(this.ctx.stage, transaction);
                 await this.ctx.service.stageTempLand.updateHistory4CheckAgain(this.ctx.stage, transaction);
                 await this.ctx.service.stageTempLand.updateHistory4CheckAgain(this.ctx.stage, transaction);
 
 
-                // 本期结束
-                // 生成截止本期数据 final数据
-                await this.ctx.service.stageBillsFinal.delGenerateFinalData(transaction, this.ctx.tender, this.ctx.stage);
-                await this.ctx.service.stagePosFinal.delGenerateFinalData(transaction, this.ctx.tender, this.ctx.stage);
-                await this.ctx.service.stageChangeFinal.delGenerateFinalData(transaction, this.ctx.tender, this.ctx.stage);
                 // 同步 期信息
                 // 同步 期信息
                 const his = this.ctx.stage.tp_history.find(x => { return x.times === times && x.order === audit.order });
                 const his = this.ctx.stage.tp_history.find(x => { return x.times === times && x.order === audit.order });
                 this.ctx.stage.tp_history.push({
                 this.ctx.stage.tp_history.push({

+ 0 - 14
app/service/stage_bills_final.js

@@ -112,20 +112,6 @@ module.exports = app => {
             await transaction.insert(this.tableName, cur ? cur.concat(pre) : pre);
             await transaction.insert(this.tableName, cur ? cur.concat(pre) : pre);
         }
         }
 
 
-        /**
-         * 删除生成本期最终数据
-         * @param transaction - 所属事务
-         * @param {Object} tender - 标段
-         * @param {Object} stage - 本期
-         * @returns {Promise<void>}
-         */
-        async delGenerateFinalData(transaction, tender, stage) {
-            if (!transaction || !tender || !stage) {
-                throw '数据错误';
-            }
-            await transaction.delete(this.tableName, { tid: tender.id, sid: stage.id });
-        }
-
         async getSumTotalPrice(tenderId, stageOrder) {
         async getSumTotalPrice(tenderId, stageOrder) {
             const sql = 'SELECT Sum(`contract_tp`) As `contract_tp`, Sum(`qc_tp`) As `qc_tp` FROM ' + this.departTableName(tenderId) +
             const sql = 'SELECT Sum(`contract_tp`) As `contract_tp`, Sum(`qc_tp`) As `qc_tp` FROM ' + this.departTableName(tenderId) +
                 '  WHERE sorder = ? and tid = ?';
                 '  WHERE sorder = ? and tid = ?';

+ 189 - 7
app/service/stage_change.js

@@ -13,6 +13,139 @@ const audit = require('../const/audit');
 const timesLen = audit.stage.timesLen;
 const timesLen = audit.stage.timesLen;
 const changeConst = require('../const/change');
 const changeConst = require('../const/change');
 
 
+class autoUseChange {
+    constructor(helper, info) {
+        this.helper = helper;
+        this.precision = info.precision;
+        this.decimal = info.decimal;
+
+        this.insertBills = [];
+        this.insertPos = [];
+        this.updateBills = [];
+        this.updatePos = [];
+        this.insertChange = [];
+
+        this.changeBills = {};
+        this.changePos = {};
+    }
+
+    init(source) {
+        this.default = source.default;
+
+        const LedgerModel = require('../lib/ledger');
+        this.ledgerTree = new LedgerModel.billsTree(this.ctx, {
+            id: 'ledger_id', pid: 'ledger_pid', order: 'order', level: 'level', rootId: -1, calcFields: [],
+        });
+        this.pos = new LedgerModel.pos({ id: 'id', ledgerId: 'lid' });
+        this.ledgerTree.loadDatas(source.ledgerData);
+        this.pos.loadDatas(source.posData);
+
+        this.stageBills = source.stageBills;
+        this.stagePos = source.stagePos;
+    }
+
+    findBillsPos(changeBills){
+        if (changeBills.gcl_id) {
+            const node = this.ledgerTree.nodes.find(x => {return x.id === changeBills.gcl_id});
+            const posData = this.pos.getLedgerPos(node.id) || [];
+            const changePos = posData.find(x => { return x.name === changeBills.bwmx; });
+            return { bills: node, lid: node.id, pid: changePos ? changePos.id : (posData.length > 0 ? posData[0].id : '-1') };
+        } else {
+            const cb = {
+                b_code: changeBills.code || '',
+                name: changeBills.name || '',
+                unit: changeBills.unit || '',
+                unit_price: changeBills.unit_price || 0,
+                is_tp: false,
+            };
+            for (const node of this.ledgerTree.nodes) {
+                if (node.children && node.children.length > 0) continue;
+
+                const b = {
+                    b_code: node.b_code || '',
+                    name: node.name || '',
+                    unit: node.unit || '',
+                    unit_price: node.unit_price || 0,
+                    is_tp: !!node.is_tp,
+                };
+                if (_.isMatch(cb, b)) {
+                    posData = this.pos.getLedgerPos(node.id) || [];
+                    return { bills: node, lid: node.id, pid: posData.length > 0 ? posData[0].id : '-1' };
+                }
+            }
+            return null;
+        }
+    }
+
+    useBills(bills) {
+        const billsPos = this.findBillsPos(bills);
+        if (!billsPos) return;
+        this.insertChange.push({
+            tid: this.default.tid, sid: this.default.sid, lid: billsPos.lid, pid: billsPos.pid, cid: bills.cid, cbid: bills.id, qty: bills.valid_qty, stimes: 1, sorder: 0,
+        });
+
+        if (billsPos.pid !== '-1') {
+            const cp = this.changePos[billsPos.pid];
+            if (!cp) {
+                this.changePos[billsPos.pid] = { lid: billsPos.lid, pid: billsPos.pid, qty: bills.valid_qty, bills: billsPos.bills };
+            } else {
+                cp.qty = this.helper.add(cp.qty, bills.valid_qty);
+            }
+        } else {
+            const cb = this.changeBills[billsPos.lid];
+            if (!cb) {
+                this.changeBills[billsPos.lid] = { lid: billsPos.lid, qty: bills.valid_qty, bills: billsPos.bills };
+            } else {
+                cb.qty = this.helper.add(cb.qty, bills.valid_qty);
+            }
+        }
+    }
+
+    calculateAll() {
+        for (const pid in this.changePos) {
+            const cp = this.changePos[pid];
+            if (!cp) continue;
+
+            const precision = this.helper.findPrecision(this.precision, cp.bills.unit);
+            const qc_qty = this.helper.round(cp.qty, precision.value);
+            const sp = this.stagePos.find(x => {return x.pid === pid});
+            if (sp) {
+                this.updatePos.push({ id: sp.id, qc_qty });
+            } else {
+                this.insertPos.push({ tid: this.default.tid, sid: this.default.sid, said: this.default.said, lid: cp.lid, pid, qc_qty, times: 1, order: 0 });
+            }
+            const cb = this.changeBills[cp.lid];
+            if (!cb) {
+                this.changeBills[cp.lid] = { lid: cp.lid, qty: cp.qty, bills: cp.bills };
+            } else {
+                cb.qty = this.helper.add(cb.qty, cp.qty);
+            }
+        }
+        for (const lid in this.changeBills) {
+            const cb = this.changeBills[lid];
+            if (!cb) continue;
+            const precision = this.helper.findPrecision(this.precision, cb.bills.unit);
+            const qc_qty = this.helper.round(cb.qty, precision.value);
+            const qc_tp = this.helper.mul(cb.qty, cb.bills.unit_price, this.decimal.tp);
+            const sb = this.stageBills.find(x => {return x.lid === lid});
+            if (sb) {
+                this.updateBills.push({ id: sb.id, qc_qty, qc_tp });
+            } else {
+                this.insertBills.push({ tid: this.default.tid, sid: this.default.sid, said: this.default.said, lid, qc_qty, qc_tp, times: 1, order: 0 });
+            }
+        }
+    }
+
+    use(source, validChangeBills) {
+        this.init(source);
+
+        for (const bills of validChangeBills) {
+            this.useBills(bills);
+        }
+        this.calculateAll();
+    }
+}
+
 module.exports = app => {
 module.exports = app => {
 
 
     class StageChange extends app.BaseService {
     class StageChange extends app.BaseService {
@@ -182,12 +315,8 @@ module.exports = app => {
             // 更新数据
             // 更新数据
             const transaction = await this.db.beginTransaction();
             const transaction = await this.db.beginTransaction();
             try {
             try {
-                if (newChanges.length > 0) {
-                    await transaction.insert(this.tableName, newChanges);
-                }
-                for (const c of updateChanges) {
-                    await transaction.update(this.tableName, c);
-                }
+                if (newChanges.length > 0) await transaction.insert(this.tableName, newChanges);
+                if (updateChanges.length > 0) await transaction.updateRows(this.tableName, updateChange);
                 const stageBills = await this.ctx.service.stageBills.getLastestStageData2(this.ctx.tender.id, this.ctx.stage.id, bills.id);
                 const stageBills = await this.ctx.service.stageBills.getLastestStageData2(this.ctx.tender.id, this.ctx.stage.id, bills.id);
                 const sbUpdate = noValue ? {qc_minus_qty: billsQty} : {qc_qty: billsQty};
                 const sbUpdate = noValue ? {qc_minus_qty: billsQty} : {qc_qty: billsQty};
                 await this.ctx.service.stageBills.updateStageBillsQty(transaction, ledgerBills, stageBills, sbUpdate);
                 await this.ctx.service.stageBills.updateStageBillsQty(transaction, ledgerBills, stageBills, sbUpdate);
@@ -498,12 +627,65 @@ module.exports = app => {
             return { lid, qty: this.ctx.helper.sum(filter.map(x => { return x.qty; })) };
             return { lid, qty: this.ctx.helper.sum(filter.map(x => { return x.qty; })) };
         };
         };
 
 
-
         async getPosMinusQty(stage, pid) {
         async getPosMinusQty(stage, pid) {
             const data = await this.getAllDataByCondition({ where: { sid: stage.id, pid, minus: 1 } });
             const data = await this.getAllDataByCondition({ where: { sid: stage.id, pid, minus: 1 } });
             const filter = this.ctx.helper.filterLastestData(data, ['lid', 'pid', 'cbid'], 'stimes', 'sorder');
             const filter = this.ctx.helper.filterLastestData(data, ['lid', 'pid', 'cbid'], 'stimes', 'sorder');
             return { pid, qty: this.ctx.helper.sum(filter.map(x => { return x.qty; })) };
             return { pid, qty: this.ctx.helper.sum(filter.map(x => { return x.qty; })) };
         };
         };
+
+        async autoUseChangeBills(tender, stage, data) {
+            for (const d of data) {
+                const changeBills = await this.ctx.service.changeAuditList.getDataById(d.cbid);
+                const bills = await this.ctx.service.ledger.getDataById(data.lid);
+                const pos = await this.ctx.service.pos.getDataById(data.pid);
+                if (pos && pos.lid !== bills.id) throw '数据错误';
+
+                const allSc = await this.getAllDataByCondition({ where: { cbid: d.cbid, lid: data.lid, pid: data.pid } });
+                const curSc = this.ctx.helper.filterLastestData(allSc, ['lid', 'pid', 'cbid'], 'stimes', 'sorder');
+            }
+            const changeBills = await this.ctx.service.changeAuditList.getDataById(cbid);
+            const source = changeBills.gcl_id
+                ? await this.ctx.service.ledger.getDataByCondition({ where: { id: [changeBills.gcl_id] } })
+                : await this.ctx.service.ledger.getDataByCondition({ where: { tid: tender.id, b_code: changeBills.code, name: changeBills.name, unit: changeBills.unit, unit_price: changeBills.unit_price, is_leaf: true }});
+            if (source.length < 1) then
+            const pos = this.ctx.service.pos.getDataByCondition({ where: { lid: bills.id, name: changeBills.bwmx} });
+        };
+
+        async autoUseAllChange(tender, stage) {
+            const validChangeBills = await this.ctx.service.stageChangeFinal.getAllChangeBillsValidQty(tender.id);
+            const ledgerData = await this.ctx.service.ledger.getAllDataByCondition({
+                columns: ['id', 'ledger_id', 'ledger_pid', 'level', 'order', 'full_path', 'is_leaf', 'code', 'b_code', 'name', 'unit', 'unit_price'],
+                where: { tender_id: stage.tid },
+            });
+            const extraData = await this.ctx.service.ledgerExtra.getData(this.ctx.tender.id, ['is_tp']);
+            this.ctx.helper.assignRelaData(ledgerData, [
+                { data: extraData, fields: ['is_tp'], prefix: '', relaId: 'id' },
+            ]);
+
+            const posData = await this.ctx.service.pos.getAllDataByCondition({
+                columns: ['id', 'lid', 'name', 'porder'],
+                where: { tid: stage.tid },
+            });
+            const stageBills = await this.ctx.service.stageBills.getAllDataByCondition({ where: { sid: stage.id } });
+            const stagePos = await this.ctx.service.stagePos.getAllDataByCondition({ where: { sid: stage.id } });
+            const useModal = new autoUseChange(this.ctx.helper, tender.info);
+            useModal.use({ledgerData, posData, stageBills, stagePos, default: { tid: stage.tid, sid: stage.id, said: this.ctx.session.sessionUser.accountId } }, validChangeBills);
+
+            const conn = await this.db.beginTransaction();
+            try {
+                if (useModal.insertBills.length > 0) conn.insert(this.ctx.service.stageBills.tableName, useModal.insertBills);
+                if (useModal.updateBills.length > 0) conn.updateRows(this.ctx.service.stageBills.tableName, useModal.updateBills);
+                if (useModal.insertPos.length > 0) conn.insert(this.ctx.service.stagePos.tableName, useModal.insertPos);
+                if (useModal.updatePos.length > 0) conn.updateRows(this.ctx.service.stagePos.tableName, useModal.updatePos);
+                await conn.delete(this.tableName, { sid: stage.id });
+                await conn.insert(this.tableName, useModal.insertChange);
+                await conn.commit();
+            } catch (err) {
+                await conn.rollback();
+                this.ctx.log(err);
+                throw '保存导入数据失败';
+            }
+        }
     }
     }
 
 
     return StageChange;
     return StageChange;

+ 18 - 14
app/service/stage_change_final.js

@@ -71,20 +71,6 @@ module.exports = app => {
             if (data.length > 0) await transaction.insert(this.tableName, data);
             if (data.length > 0) await transaction.insert(this.tableName, data);
         }
         }
 
 
-        /**
-         * 删除生成本期最终数据
-         * @param transaction - 所属事务
-         * @param {Object} tender - 标段
-         * @param {Object} stage - 本期
-         * @return {Promise<void>}
-         */
-        async delGenerateFinalData(transaction, tender, stage) {
-            if (!transaction || !tender || !stage) {
-                throw '数据错误';
-            }
-            await transaction.delete(this.tableName, { tid: tender.id, sid: stage.id });
-        }
-
         async getSumLoadFinalData(sid) {
         async getSumLoadFinalData(sid) {
             const sql = 'Select cf.tid, cf.sid, cf.lid, cf.cid, cf.cbid, cf.qty, c.code As c_code' +
             const sql = 'Select cf.tid, cf.sid, cf.lid, cf.cid, cf.cbid, cf.qty, c.code As c_code' +
                 '  FROM ' + this.tableName + ' cf' +
                 '  FROM ' + this.tableName + ' cf' +
@@ -102,6 +88,24 @@ module.exports = app => {
             const usedQty = await this.db.queryOne('Select SUM(qty) as qty FROM ' + this.tableName + ' WHERE cbid = ?', [cbid]);
             const usedQty = await this.db.queryOne('Select SUM(qty) as qty FROM ' + this.tableName + ' WHERE cbid = ?', [cbid]);
             return usedQty ? this.ctx.helper.sub(qty, usedQty.qty) : qty;
             return usedQty ? this.ctx.helper.sub(qty, usedQty.qty) : qty;
         }
         }
+
+        async getAllChangeBillsValidQty(tid) {
+            const self = this;
+            const sql = 'SELECT cal.*, scf.used_qty FROM ' + this.ctx.service.changeAuditList.tableName + ' cal' +
+                '  LEFT JOIN ' + this.ctx.service.change.tableName + ' c ON cal.cid = c.cid ' +
+                '  LEFT JOIN (' +
+                '    SELECT cbid, SUM(qty) as used_qty FROM ' + this.tableName + ' WHERE tid = ? GROUP BY cbid ' +
+                '  ) scf ON cal.id = scf.cbid ' +
+                '  WHERE c.tid = ? AND c.valid AND c.status = ?';
+            const changeBills = await this.db.query(sql, [tid, tid, auditConst.status.checked]);
+            if (!changeBills || changeBills.length === 0) return [];
+
+            return changeBills.filter(cb => {
+                cb.qty = parseFloat(cb.samount);
+                cb.valid_qty = self.ctx.helper.sub(cb.qty, cb.used_qty);
+                return cb.valid_qty;
+            });
+        }
     }
     }
 
 
     return StageChangeFinal;
     return StageChangeFinal;

+ 0 - 14
app/service/stage_pos_final.js

@@ -88,20 +88,6 @@ module.exports = app => {
             await transaction.delete(this.tableName, { tid: tender.id, sid: stage.id });
             await transaction.delete(this.tableName, { tid: tender.id, sid: stage.id });
             await transaction.insert(this.tableName, cur ? cur.concat(pre) : pre);
             await transaction.insert(this.tableName, cur ? cur.concat(pre) : pre);
         }
         }
-
-        /**
-         * 删除生成本期最终数据
-         * @param transaction - 所属事务
-         * @param {Object} tender - 标段
-         * @param {Object} stage - 本期
-         * @returns {Promise<void>}
-         */
-        async delGenerateFinalData(transaction, tender, stage) {
-            if (!transaction || !tender || !stage) {
-                throw '数据错误';
-            }
-            await transaction.delete(this.tableName, { tid: tender.id, sid: stage.id });
-        }
     }
     }
 
 
     return StagePosFinal;
     return StagePosFinal;

+ 16 - 14
app/service/stage_rela.js

@@ -37,8 +37,8 @@ class srCache {
             ? await this.ctx.service.stageRelaBillsFinal.getAllDataByCondition({ where: { sid: this.preRelaStage.sid, rela_tid: this.preRelaStage.rela_tid } })
             ? await this.ctx.service.stageRelaBillsFinal.getAllDataByCondition({ where: { sid: this.preRelaStage.sid, rela_tid: this.preRelaStage.rela_tid } })
             : [];
             : [];
         this.ctx.helper.assignRelaData(ledger, [
         this.ctx.helper.assignRelaData(ledger, [
-            { data: curBillsData, fields: ['contract_qty', 'contract_tp', 'qc_qty', 'qc_tp', 'postil'], prefix: '', relaId: 'lid' },
-            { data: preStageBills, fields: ['contract_qty', 'contract_tp', 'qc_qty', 'qc_tp'], prefix: 'pre_', relaId: 'lid' },
+            { data: curBillsData, fields: ['contract_qty', 'contract_tp', 'qc_qty', 'qc_tp', 'qc_minus_qty', 'postil'], prefix: '', relaId: 'lid' },
+            { data: preStageBills, fields: ['contract_qty', 'contract_tp', 'qc_qty', 'qc_tp', 'qc_minus_qty'], prefix: 'pre_', relaId: 'lid' },
         ]);
         ]);
         for (const l of ledger) {
         for (const l of ledger) {
             const db = this.dealBills.find(x => {
             const db = this.dealBills.find(x => {
@@ -57,6 +57,7 @@ class srCache {
             l.end_contract_tp = this.ctx.helper.add(l.pre_contract_tp, l.contract_tp);
             l.end_contract_tp = this.ctx.helper.add(l.pre_contract_tp, l.contract_tp);
             l.end_qc_qty = this.ctx.helper.add(l.pre_qc_qty, l.qc_qty);
             l.end_qc_qty = this.ctx.helper.add(l.pre_qc_qty, l.qc_qty);
             l.end_qc_tp = this.ctx.helper.add(l.pre_qc_tp, l.qc_tp);
             l.end_qc_tp = this.ctx.helper.add(l.pre_qc_tp, l.qc_tp);
+            l.end_qc_minus_qty = this.ctx.helper.add(l.pre_qc_minus_qty, l.qc_minus_qty);
             l.end_gather_qty = this.ctx.helper.add(l.pre_gather_qty, l.gather_qty);
             l.end_gather_qty = this.ctx.helper.add(l.pre_gather_qty, l.gather_qty);
             l.end_gather_tp = this.ctx.helper.add(l.pre_gather_tp, l.gather_tp);
             l.end_gather_tp = this.ctx.helper.add(l.pre_gather_tp, l.gather_tp);
         }
         }
@@ -83,14 +84,15 @@ class srCache {
             ? await this.ctx.service.stageRelaPosFinal.getAllDataByCondition({ where: { sid: this.preRelaStage.sid, rela_tid: this.preRelaStage.rela_tid } })
             ? await this.ctx.service.stageRelaPosFinal.getAllDataByCondition({ where: { sid: this.preRelaStage.sid, rela_tid: this.preRelaStage.rela_tid } })
             : [];
             : [];
         this.ctx.helper.assignRelaData(pos, [
         this.ctx.helper.assignRelaData(pos, [
-            { data: curPosData, fields: ['contract_qty', 'qc_qty', 'postil', 'pid'], prefix: '', relaId: 'pid' },
-            { data: preStagePos, fields: ['contract_qty', 'qc_qty', 'postil', 'pid'], prefix: 'pre_', relaId: 'pid' },
+            { data: curPosData, fields: ['contract_qty', 'qc_qty', 'qc_minus_qty', 'postil', 'pid'], prefix: '', relaId: 'pid' },
+            { data: preStagePos, fields: ['contract_qty', 'qc_qty', 'qc_minus_qty', 'postil', 'pid'], prefix: 'pre_', relaId: 'pid' },
         ]);
         ]);
         for (const p of pos) {
         for (const p of pos) {
             p.gather_qty = this.ctx.helper.add(p.contract_qty, p.qc_qty);
             p.gather_qty = this.ctx.helper.add(p.contract_qty, p.qc_qty);
             p.pre_gather_qty = this.ctx.helper.add(p.pre_contract_qty, p.pre_qc_qty);
             p.pre_gather_qty = this.ctx.helper.add(p.pre_contract_qty, p.pre_qc_qty);
             p.end_contract_qty = this.ctx.helper.add(p.contract_qty, p.pre_contract_qty);
             p.end_contract_qty = this.ctx.helper.add(p.contract_qty, p.pre_contract_qty);
             p.end_qc_qty = this.ctx.helper.add(p.qc_qty, p.pre_qc_qty);
             p.end_qc_qty = this.ctx.helper.add(p.qc_qty, p.pre_qc_qty);
+            p.end_qc_minus_qty = this.ctx.helper.add(p.qc_minus_qty, p.pre_qc_minus_qty);
             p.end_gather_qty = this.ctx.helper.add(p.gather_qty, p.pre_gather_qty);
             p.end_gather_qty = this.ctx.helper.add(p.gather_qty, p.pre_gather_qty);
         }
         }
 
 
@@ -147,7 +149,7 @@ class srCache {
                     rela_tid: this.stage.tid, rela_sid: this.stage.id, rela_sorder: this.stage.order,
                     rela_tid: this.stage.tid, rela_sid: this.stage.id, rela_sorder: this.stage.order,
                     lid: t.id, unit_price: t.unit_price,
                     lid: t.id, unit_price: t.unit_price,
                     contract_qty: t.contract_qty, contract_tp: t.contract_tp, contract_expr: t.contract_expr,
                     contract_qty: t.contract_qty, contract_tp: t.contract_tp, contract_expr: t.contract_expr,
-                    qc_qty: t.qc_qty, qc_tp: t.qc_tp,
+                    qc_qty: t.qc_qty, qc_tp: t.qc_tp, qc_minus_qty: t.qc_minus_qty,
                     postil: t.postil,
                     postil: t.postil,
                 });
                 });
             }
             }
@@ -156,7 +158,7 @@ class srCache {
                     tid: this.ctx.tender.id, sid: this.ctx.stage.id, sorder: this.ctx.stage.order,
                     tid: this.ctx.tender.id, sid: this.ctx.stage.id, sorder: this.ctx.stage.order,
                     rela_tid: this.stage.tid, rela_sid: this.stage.id, rela_sorder: this.stage.order,
                     rela_tid: this.stage.tid, rela_sid: this.stage.id, rela_sorder: this.stage.order,
                     lid: t.id,
                     lid: t.id,
-                    contract_qty: t.end_contract_qty, contract_tp: t.end_contract_tp,
+                    contract_qty: t.end_contract_qty, contract_tp: t.end_contract_tp, qc_minus_qty: t.end_qc_minus_qty,
                     qc_qty: t.end_qc_qty, qc_tp: t.end_qc_tp,
                     qc_qty: t.end_qc_qty, qc_tp: t.end_qc_tp,
                 })
                 })
             }
             }
@@ -173,7 +175,7 @@ class srCache {
                     tid: this.ctx.tender.id, sid: this.ctx.stage.id, sorder: this.ctx.stage.order,
                     tid: this.ctx.tender.id, sid: this.ctx.stage.id, sorder: this.ctx.stage.order,
                     rela_tid: this.stage.tid, rela_sid: this.stage.id, rela_sorder: this.stage.order,
                     rela_tid: this.stage.tid, rela_sid: this.stage.id, rela_sorder: this.stage.order,
                     pid: t.id, lid: t.id,
                     pid: t.id, lid: t.id,
-                    contract_qty: t.contract_qty, contract_expr: t.contract_expr, qc_qty: t.qc_qty, postil: t.postil,
+                    contract_qty: t.contract_qty, contract_expr: t.contract_expr, qc_qty: t.qc_qty, qc_minus_qty: t.qc_minus_qty, postil: t.postil,
                 });
                 });
             }
             }
             if (t.end_contract_qty || t.end_qc_qty) {
             if (t.end_contract_qty || t.end_qc_qty) {
@@ -181,7 +183,7 @@ class srCache {
                     tid: this.ctx.tender.id, sid: this.ctx.stage.id, sorder: this.ctx.stage.order,
                     tid: this.ctx.tender.id, sid: this.ctx.stage.id, sorder: this.ctx.stage.order,
                     rela_tid: this.stage.tid, rela_sid: this.stage.id, rela_sorder: this.stage.order,
                     rela_tid: this.stage.tid, rela_sid: this.stage.id, rela_sorder: this.stage.order,
                     pid: t.id, lid: t.lid,
                     pid: t.id, lid: t.lid,
-                    contract_qty: t.end_contract_qty, qc_qty: t.end_qc_qty
+                    contract_qty: t.end_contract_qty, qc_qty: t.end_qc_qty, qc_minus_qty: t.end_qc_minus_qty,
                 })
                 })
             }
             }
         }
         }
@@ -205,9 +207,9 @@ class srCache {
                 doc_code: i.doc_code, im_code: i.im_code,
                 doc_code: i.doc_code, im_code: i.im_code,
                 calc_memo: i.calc_memo, calc_img_remark: i.calc_img_remark, calc_img: i.calc_img,
                 calc_memo: i.calc_memo, calc_img_remark: i.calc_img_remark, calc_img: i.calc_img,
                 bgl_code: i.bgl_code, bgl_drawing_code: i.bgl_drawing_code,
                 bgl_code: i.bgl_code, bgl_drawing_code: i.bgl_drawing_code,
-                jl: i.jl, contract_jl: i.contract_jl, qc_jl: i.qc_jl,
-                pre_jl: i.pre_jl, pre_contract_jl: i.pre_contract_jl, pre_qc_jl: i.pre_qc_jl,
-                end_jl: i.end_jl, end_contract_jl: i.end_contract_jl, end_qc_jl: i.end_qc_jl,
+                jl: i.jl, contract_jl: i.contract_jl, qc_jl: i.qc_jl, qc_minus_jl: i.qc_minus_jl,
+                pre_jl: i.pre_jl, pre_contract_jl: i.pre_contract_jl, pre_qc_jl: i.pre_qc_jl, pre_qc_minus_jl: i.pre_qc_minus_jl,
+                end_jl: i.end_jl, end_contract_jl: i.end_contract_jl, end_qc_jl: i.end_qc_jl, end_qc_minus_jl: i.end_qc_minus_jl,
                 tp: i.tp, contract_tp: i.contract_tp, qc_tp: i.qc_tp,
                 tp: i.tp, contract_tp: i.contract_tp, qc_tp: i.qc_tp,
                 pre_tp: i.pre_tp, pre_contract_tp: i.pre_contract_tp, pre_qc_tp: i.pre_qc_tp,
                 pre_tp: i.pre_tp, pre_contract_tp: i.pre_contract_tp, pre_qc_tp: i.pre_qc_tp,
                 end_tp: i.end_tp, end_contract_tp: i.end_contract_tp, end_qc_tp: i.end_qc_tp,
                 end_tp: i.end_tp, end_contract_tp: i.end_contract_tp, end_qc_tp: i.end_qc_tp,
@@ -221,9 +223,9 @@ class srCache {
                 rela_tid: this.stage.tid, rela_sid: this.stage.id, rela_sorder: this.stage.order,
                 rela_tid: this.stage.tid, rela_sid: this.stage.id, rela_sorder: this.stage.order,
                 im_id: i.imid, bid: i.bid, im_code: i.im_code,
                 im_id: i.imid, bid: i.bid, im_code: i.im_code,
                 b_code: i.b_code, name: i.name, unit: i.unit, unit_price: i.unit_price,
                 b_code: i.b_code, name: i.name, unit: i.unit, unit_price: i.unit_price,
-                jl: i.jl, contract_jl: i.contract_jl, qc_jl: i.qc_jl,
-                pre_jl: i.pre_jl, pre_contract_jl: i.pre_contract_jl, pre_qc_jl: i.pre_qc_jl,
-                end_jl: i.end_jl, end_contract_jl: i.end_contract_jl, end_qc_jl: i.end_qc_jl,
+                jl: i.jl, contract_jl: i.contract_jl, qc_jl: i.qc_jl, qc_minus_jl: i.qc_minus_jl,
+                pre_jl: i.pre_jl, pre_contract_jl: i.pre_contract_jl, pre_qc_jl: i.pre_qc_jl, pre_qc_minus_jl: i.pre_qc_minus_jl,
+                end_jl: i.end_jl, end_contract_jl: i.end_contract_jl, end_qc_jl: i.end_qc_jl, end_qc_minus_jl: i.end_qc_minus_jl,
                 tp: i.tp, contract_tp: i.contract_tp, qc_tp: i.qc_tp,
                 tp: i.tp, contract_tp: i.contract_tp, qc_tp: i.qc_tp,
                 pre_tp: i.pre_tp, pre_contract_tp: i.pre_contract_tp, pre_qc_tp: i.pre_qc_tp,
                 pre_tp: i.pre_tp, pre_contract_tp: i.pre_contract_tp, pre_qc_tp: i.pre_qc_tp,
                 end_tp: i.end_tp, end_contract_tp: i.end_contract_tp, end_qc_tp: i.end_qc_tp,
                 end_tp: i.end_tp, end_contract_tp: i.end_contract_tp, end_qc_tp: i.end_qc_tp,

+ 14 - 4
app/service/valuation.js

@@ -50,20 +50,30 @@ module.exports = app => {
             const billsId = valuation[valuationField.std_bills]
             const billsId = valuation[valuationField.std_bills]
                 ? this._.map(valuation[valuationField.std_bills].split(','), this._.toInteger)
                 ? this._.map(valuation[valuationField.std_bills].split(','), this._.toInteger)
                 : [-1];
                 : [-1];
-            const chaptersId = valuation[valuationField.std_xmj]
-                ? this._.map(valuation[valuationField.std_xmj].split(','), this._.toInteger)
-                : [-1];
             const sql = 'SELECT `id`, `name`' +
             const sql = 'SELECT `id`, `name`' +
                 '  From ?? ' +
                 '  From ?? ' +
                 '  WHERE `id` in ( ? ) ORDER BY FIELD(`id`, ?)';
                 '  WHERE `id` in ( ? ) ORDER BY FIELD(`id`, ?)';
             const sqlParam = ['zh_std_gcl_list', billsId, billsId];
             const sqlParam = ['zh_std_gcl_list', billsId, billsId];
             const billsList = await this.db.query(sql, sqlParam);
             const billsList = await this.db.query(sql, sqlParam);
+
+            const chaptersId = valuation[valuationField.std_xmj]
+                ? this._.map(valuation[valuationField.std_xmj].split(','), this._.toInteger)
+                : [-1];
             const sql2 = 'SELECT `id`, `name`' +
             const sql2 = 'SELECT `id`, `name`' +
                 '  From ?? ' +
                 '  From ?? ' +
                 '  WHERE `id` in ( ? ) ORDER BY FIELD(`id`, ?)';
                 '  WHERE `id` in ( ? ) ORDER BY FIELD(`id`, ?)';
             const sqlParam2 = ['zh_std_xmj_list', chaptersId, chaptersId];
             const sqlParam2 = ['zh_std_xmj_list', chaptersId, chaptersId];
             const chapterList = await this.db.query(sql2, sqlParam2);
             const chapterList = await this.db.query(sql2, sqlParam2);
-            return [billsList, chapterList];
+
+            const gljId = valuation[valuationField.glj_lib]
+                ? this._.map(valuation[valuationField.glj_lib].split(','), this._.toInteger)
+                : [-1];
+            const sql3 = 'SELECT `id`, `name`' +
+                '  From ?? ' +
+                '  WHERE `id` in ( ? ) ORDER BY FIELD(`id`, ?)';
+            const sqlParam3 = ['zh_glj_lib_list', gljId, gljId];
+            const gljList = await this.db.query(sql3, sqlParam3);
+            return [billsList, chapterList, gljList];
         }
         }
 
 
     }
     }

+ 65 - 15
app/view/measure/compare.ejs

@@ -1,10 +1,20 @@
 <% include ../tender/tender_sub_menu.ejs %>
 <% include ../tender/tender_sub_menu.ejs %>
 <div class="panel-content">
 <div class="panel-content">
     <div class="panel-title">
     <div class="panel-title">
-        <div class="title-main d-flex">
+        <div class="title-main d-flex justify-content-between">
             <% include ../tender/tender_sub_mini_menu.ejs %>
             <% include ../tender/tender_sub_mini_menu.ejs %>
             <div>
             <div>
                 <div class="d-inline-block">
                 <div class="d-inline-block">
+                    <div class="btn-group group-tab">
+                        <a class="btn btn-sm btn-light active" href="#gcl" data-toggle="tab" name="compareType">
+                            工程量清单
+                        </a>
+                        <a class="btn btn-sm btn-light" href="#tz" data-toggle="tab" name="compareType">
+                            0号台账
+                        </a>
+                    </div>
+                </div>
+                <div class="d-inline-block">
                     <div class="dropdown">
                     <div class="dropdown">
                         <button class="btn btn-sm btn-light dropdown-toggle text-primary" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                         <button class="btn btn-sm btn-light dropdown-toggle text-primary" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                             <i class="fa fa-list-ol"></i> 显示层级
                             <i class="fa fa-list-ol"></i> 显示层级
@@ -28,27 +38,67 @@
                     <a id="exportExcel" class="btn btn-primary btn-sm" href="javascript: void(0)">导出清单汇总Excel</a>
                     <a id="exportExcel" class="btn btn-primary btn-sm" href="javascript: void(0)">导出清单汇总Excel</a>
                 </div>
                 </div>
                 <% } %>
                 <% } %>
+                <div class="d-inline-block ml-2">
+                    <span>期数据来源:</span>
+                    <div class="d-inline-block" style="vertical-align: middle">
+                        <div class="form-check form-check-inline">
+                            <input class="form-check-input pt-1" type="radio" id="radio_contract" value="contract" name="compare-data">
+                            <label class="form-check-label" for="radio_contract">合同</label>
+                        </div>
+                        <div class="form-check form-check-inline">
+                            <input class="form-check-input" type="radio" id="radio_qc" value="qc" name="compare-data">
+                            <label class="form-check-label" for="radio_qc">变更</label>
+                        </div>
+                        <div class="form-check form-check-inline">
+                            <input class="form-check-input" type="radio" id="radio_gather" value="gather" checked name="compare-data">
+                            <label class="form-check-label" for="radio_gather">完成</label>
+                        </div>
+                    </div>
+                </div>
             </div>
             </div>
-            <div class="ml-auto"></div>
         </div>
         </div>
     </div>
     </div>
     <div class="content-wrap">
     <div class="content-wrap">
         <div class="c-header p-0"></div>
         <div class="c-header p-0"></div>
         <div class="c-body">
         <div class="c-body">
-            <div class="sjs-height-1" id="bills-spread">
-            </div>
-            <div class="bcontent-wrap" id="main-bottom">
-                <div id="main-resize" class="resize-y"  r-Type="height" div1="#bills-spread" div2="#main-bottom" store-id="compare-main" store-version="1.0.0" min="100"></div>
-                <div class="bc-bar mb-1">
-                    <ul class="nav nav-tabs">
-                        <li class="nav-item">
-                            <a class="nav-link active" data-toggle="tab" href="#xmujie" role="tab">计量单元</a>
-                        </li>
-                    </ul>
+            <div class="tab-content" id="compareType">
+                <div class="tab-pane" id="tz">
+                    <div class="sjs-height-1" id="bills-spread">
+                    </div>
+                    <div class="bcontent-wrap" id="main-bottom">
+                        <div id="main-resize" class="resize-y"  r-Type="height" div1="#bills-spread" div2="#main-bottom" store-id="compare-main" store-version="1.0.0" min="100"></div>
+                        <div class="bc-bar mb-1">
+                            <ul class="nav nav-tabs">
+                                <li class="nav-item">
+                                    <a class="nav-link active" data-toggle="tab" href="#xmujie" role="tab">计量单元</a>
+                                </li>
+                            </ul>
+                        </div>
+                        <div class="tab-content">
+                            <div class="tab-pane active" id="xmujie">
+                                <div class="sp-wrap" id="pos-spread">
+                                </div>
+                            </div>
+                        </div>
+                    </div>
                 </div>
                 </div>
-                <div class="tab-content">
-                    <div class="tab-pane active" id="xmujie">
-                        <div class="sp-wrap" id="pos-spread">
+                <div class="tab-pane active" id="gcl">
+                    <div class="sjs-height-1" id="gcl-spread">
+                    </div>
+                    <div class="bcontent-wrap" id="leafxmj-bottom">
+                        <div id="gcl-resize" class="resize-y" r-Type="height" div1="#gcl-spread" div2="#leafxmj-bottom" store-id="compare-stages-gcl" store-version="1.0.0" min="100"></div>
+                        <div class="bc-bar mb-1">
+                            <ul class="nav nav-tabs">
+                                <li class="nav-item">
+                                    <a class="nav-link active" data-toggle="tab" href="#xmujie" role="tab">所属项目节</a>
+                                </li>
+                            </ul>
+                        </div>
+                        <div class="tab-content">
+                            <div class="tab-pane active">
+                                <div class="sp-wrap" id="leaf-xmj-spread">
+                                </div>
+                            </div>
                         </div>
                         </div>
                     </div>
                     </div>
                 </div>
                 </div>

+ 3 - 0
app/view/report/index.ejs

@@ -36,6 +36,9 @@
                             <a class="dropdown-item" href="javascript: void(0)" onclick="rptChangeRela.showChangeRela('change_apply');">变更申请</a>
                             <a class="dropdown-item" href="javascript: void(0)" onclick="rptChangeRela.showChangeRela('change_apply');">变更申请</a>
                             <a class="dropdown-item" href="javascript: void(0)" onclick="rptChangeRela.showChangeRela('change_plan');">变更方案</a>
                             <a class="dropdown-item" href="javascript: void(0)" onclick="rptChangeRela.showChangeRela('change_plan');">变更方案</a>
                             <a class="dropdown-item" href="javascript: void(0)" onclick="rptChangeRela.showChangeRela('change');">变更令</a>
                             <a class="dropdown-item" href="javascript: void(0)" onclick="rptChangeRela.showChangeRela('change');">变更令</a>
+                            <% if (viewPmData) { %>
+                            <a class="dropdown-item" href="javascript: void(0)" onclick="rptOtherStage.showOtherStage('pm_deal');">项目管理-合同管理</a>
+                            <% } %>
                         </div>
                         </div>
                     </div>
                     </div>
                 </div>
                 </div>

+ 4 - 0
app/view/report/rpt_all_popup.ejs

@@ -437,6 +437,10 @@
                 <div class="alert alert-danger my-2 p-2" id="stage-select-hint">我是提示呀</div>
                 <div class="alert alert-danger my-2 p-2" id="stage-select-hint">我是提示呀</div>
             </div>
             </div>
             <div class="modal-footer">
             <div class="modal-footer">
+                <div class="form-check form-check-inline mr-auto">
+                    <input class="form-check-input" type="checkbox" id="stage-select-all">
+                    <label class="form-check-label" for="stage-select-all">全选</label>
+                </div>
                 <button type="button" class="btn btn-sm btn-secondary" data-dismiss="modal">取消</button>
                 <button type="button" class="btn btn-sm btn-secondary" data-dismiss="modal">取消</button>
                 <button class="btn btn-sm btn-primary" id="stage-select-ok">确定</button>
                 <button class="btn btn-sm btn-primary" id="stage-select-ok">确定</button>
             </div>
             </div>

+ 11 - 0
app/view/stage_rela/detail.ejs

@@ -125,6 +125,9 @@
                                     <tbody>
                                     <tbody>
                                     <tr><th width="120" name="type-title-contract">本期合同计量数量</th><td id="show-contract-jl"></td></tr>
                                     <tr><th width="120" name="type-title-contract">本期合同计量数量</th><td id="show-contract-jl"></td></tr>
                                     <tr><th name="type-title-qc">本期变更计量数量</th><td id="show-qc-jl"></td></tr>
                                     <tr><th name="type-title-qc">本期变更计量数量</th><td id="show-qc-jl"></td></tr>
+                                    <% if (minusNoValue) { %>
+                                    <tr><th name="type-title-qc-minus">本期不计价变更数量</th><td id="show-qc-minus-jl"></td></tr>
+                                    <% } %>
                                     <tr><th>变更令号</th><td id="show-bgl-code"></td></tr>
                                     <tr><th>变更令号</th><td id="show-bgl-code"></td></tr>
                                     <tr><th>变更图号</th><td id="show-bgl-drawing-code"></td></tr>
                                     <tr><th>变更图号</th><td id="show-bgl-drawing-code"></td></tr>
                                     <tr><th>部位</th><td id="show-bw-name"></td></tr>
                                     <tr><th>部位</th><td id="show-bw-name"></td></tr>
@@ -153,6 +156,14 @@
                                         </div>
                                         </div>
                                         <input type="text" class="form-control" value="" id="qc-jl" readonly="">
                                         <input type="text" class="form-control" value="" id="qc-jl" readonly="">
                                     </div>
                                     </div>
+                                    <% if (minusNoValue) { %>
+                                    <div class="input-group input-group-sm mb-2">
+                                        <div class="input-group-prepend">
+                                            <span class="input-group-text" name="type-title-qc-minus">本期不计价变更数量</span>
+                                        </div>
+                                        <input type="text" class="form-control" value="" id="qc-minus-jl" readonly="">
+                                    </div>
+                                    <% } %>
                                     <div class="input-group input-group-sm mb-2">
                                     <div class="input-group input-group-sm mb-2">
                                         <div class="input-group-prepend">
                                         <div class="input-group-prepend">
                                             <span class="input-group-text">变更令号</span>
                                             <span class="input-group-text">变更令号</span>

+ 1 - 0
config/web.js

@@ -611,6 +611,7 @@ const JsFiles = {
                     '/public/js/shares/sjs_setting.js',
                     '/public/js/shares/sjs_setting.js',
                     '/public/js/zh_calc.js',
                     '/public/js/zh_calc.js',
                     '/public/js/path_tree.js',
                     '/public/js/path_tree.js',
+                    '/public/js/gcl_gather.js',
                     '/public/js/measure_compare.js',
                     '/public/js/measure_compare.js',
                 ],
                 ],
                 mergeFile: 'measure_compare',
                 mergeFile: 'measure_compare',

+ 38 - 9
db_script/recover_ledger_his.js

@@ -1,7 +1,12 @@
 const fs = require('fs');
 const fs = require('fs');
 const path = require('path');
 const path = require('path');
-
-const measureType = require('../app/const/tender').measureType;
+var util = require('util');
+var logPath = path.join(__dirname, 'recover_ledger_his.log');
+var logFile = fs.createWriteStream(logPath, { flags: 'a' });
+console.log = function() {
+    logFile.write(util.format.apply(null, arguments) + '\n');
+    process.stdout.write(util.format.apply(null, arguments) + '\n');
+};
 
 
 const mysql = require('mysql');
 const mysql = require('mysql');
 const oss = require('ali-oss');
 const oss = require('ali-oss');
@@ -38,11 +43,35 @@ const querySql = async function(sql, sqlParam) {
     });
     });
 };
 };
 
 
-const getTableName = function(tender, table) {
-    switch(table) {
-        case 'ledger': return 'zh_ledger_' + (tender.id % 10);
-        case 'pos': return 'zh_pos_' + (tender.id % 20);
-        case 'revise_bills': return 'zh_revise_bills_' + (tender.id % 10);
-        case 'revise_pos': return 'zh_revise_pos_' + (tender.id % 20);
+const recoverLedgerHis = async function (id, countField, url) {
+    let File;
+    try {
+        File = await ossClient.get('undefined' + url);
+    } catch(err) {
+        if (err.status === 404) return;
+    }
+    if (File.res.status !== 200) {
+        await ossClient.put(options.hisOssPath + url, File.content);
+        // const result = JSON.parse(File.content);
+        // await querySql(`Update zh_ledger_history Set ${countField} = ? Where id = ?`, [result.length, l.id]);
+        // console.log(`LedgerHis: ${countField}-${result.length}`);
     }
     }
-};
+};
+
+const checkLedgerHis = async function (his) {
+    await recoverLedgerHis(his.id, 'bills_count', his.bills_file);
+    await recoverLedgerHis(his.id, 'pos_count', his.pos_file);
+};
+
+const doComplete = async function() {
+    try {
+        const ledgerHis = await querySql('Select * From zh_ledger_history where tid = 5709');
+        for (const l of ledgerHis) {
+            await checkLedgerHis(l);
+        }
+    } catch (err) {
+        console.log(err);
+    }
+    pool.end();
+};
+doComplete();

+ 19 - 605
sql/update.sql

@@ -1,605 +1,19 @@
-ALTER TABLE `zh_ledger_history`
-ADD COLUMN `bills_count`  int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '清单条数' AFTER `valid`,
-ADD COLUMN `pos_count`  int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '计量单元数量' AFTER `bills_count`;
-
-UPDATE `zh_tender` SET `had_map`=3 WHERE `had_map`=1;
-
-ALTER TABLE `zh_tender` ADD `map_pic` VARCHAR(255) NULL DEFAULT NULL COMMENT '静态图片地址' AFTER `had_map`;
-
-CREATE TABLE `zh_ledger_extra_0` (
-`id`  varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'uuid' ,
-`tid`  int(11) UNSIGNED NOT NULL COMMENT '标段id' ,
-`is_tp`  tinyint(1) UNSIGNED NOT NULL DEFAULT 0 COMMENT '总额计量' ,
-`gxby_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '工序报验-状态' ,
-`gxby_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
-`dagl_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '档案管理-状态' ,
-`gxby_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '工序报验-查看链接' ,
-`dagl_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
-`dagl_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '档案管理-查看链接' ,
-PRIMARY KEY (`id`)
-);
-CREATE TABLE `zh_ledger_extra_1` (
-`id`  varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'uuid' ,
-`tid`  int(11) UNSIGNED NOT NULL COMMENT '标段id' ,
-`is_tp`  tinyint(1) UNSIGNED NOT NULL DEFAULT 0 COMMENT '总额计量' ,
-`gxby_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '工序报验-状态' ,
-`gxby_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
-`dagl_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '档案管理-状态' ,
-`gxby_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '工序报验-查看链接' ,
-`dagl_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
-`dagl_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '档案管理-查看链接' ,
-PRIMARY KEY (`id`)
-);
-CREATE TABLE `zh_ledger_extra_2` (
-`id`  varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'uuid' ,
-`tid`  int(11) UNSIGNED NOT NULL COMMENT '标段id' ,
-`is_tp`  tinyint(1) UNSIGNED NOT NULL DEFAULT 0 COMMENT '总额计量' ,
-`gxby_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '工序报验-状态' ,
-`gxby_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
-`dagl_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '档案管理-状态' ,
-`gxby_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '工序报验-查看链接' ,
-`dagl_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
-`dagl_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '档案管理-查看链接' ,
-PRIMARY KEY (`id`)
-);
-CREATE TABLE `zh_ledger_extra_3` (
-`id`  varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'uuid' ,
-`tid`  int(11) UNSIGNED NOT NULL COMMENT '标段id' ,
-`is_tp`  tinyint(1) UNSIGNED NOT NULL DEFAULT 0 COMMENT '总额计量' ,
-`gxby_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '工序报验-状态' ,
-`gxby_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
-`dagl_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '档案管理-状态' ,
-`gxby_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '工序报验-查看链接' ,
-`dagl_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
-`dagl_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '档案管理-查看链接' ,
-PRIMARY KEY (`id`)
-);
-CREATE TABLE `zh_ledger_extra_4` (
-`id`  varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'uuid' ,
-`tid`  int(11) UNSIGNED NOT NULL COMMENT '标段id' ,
-`is_tp`  tinyint(1) UNSIGNED NOT NULL DEFAULT 0 COMMENT '总额计量' ,
-`gxby_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '工序报验-状态' ,
-`gxby_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
-`dagl_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '档案管理-状态' ,
-`gxby_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '工序报验-查看链接' ,
-`dagl_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
-`dagl_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '档案管理-查看链接' ,
-PRIMARY KEY (`id`)
-);
-CREATE TABLE `zh_ledger_extra_5` (
-`id`  varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'uuid' ,
-`tid`  int(11) UNSIGNED NOT NULL COMMENT '标段id' ,
-`is_tp`  tinyint(1) UNSIGNED NOT NULL DEFAULT 0 COMMENT '总额计量' ,
-`gxby_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '工序报验-状态' ,
-`gxby_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
-`dagl_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '档案管理-状态' ,
-`gxby_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '工序报验-查看链接' ,
-`dagl_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
-`dagl_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '档案管理-查看链接' ,
-PRIMARY KEY (`id`)
-);
-CREATE TABLE `zh_ledger_extra_6` (
-`id`  varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'uuid' ,
-`tid`  int(11) UNSIGNED NOT NULL COMMENT '标段id' ,
-`is_tp`  tinyint(1) UNSIGNED NOT NULL DEFAULT 0 COMMENT '总额计量' ,
-`gxby_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '工序报验-状态' ,
-`gxby_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
-`dagl_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '档案管理-状态' ,
-`gxby_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '工序报验-查看链接' ,
-`dagl_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
-`dagl_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '档案管理-查看链接' ,
-PRIMARY KEY (`id`)
-);
-CREATE TABLE `zh_ledger_extra_7` (
-`id`  varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'uuid' ,
-`tid`  int(11) UNSIGNED NOT NULL COMMENT '标段id' ,
-`is_tp`  tinyint(1) UNSIGNED NOT NULL DEFAULT 0 COMMENT '总额计量' ,
-`gxby_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '工序报验-状态' ,
-`gxby_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
-`dagl_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '档案管理-状态' ,
-`gxby_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '工序报验-查看链接' ,
-`dagl_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
-`dagl_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '档案管理-查看链接' ,
-PRIMARY KEY (`id`)
-);
-CREATE TABLE `zh_ledger_extra_8` (
-`id`  varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'uuid' ,
-`tid`  int(11) UNSIGNED NOT NULL COMMENT '标段id' ,
-`is_tp`  tinyint(1) UNSIGNED NOT NULL DEFAULT 0 COMMENT '总额计量' ,
-`gxby_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '工序报验-状态' ,
-`gxby_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
-`dagl_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '档案管理-状态' ,
-`gxby_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '工序报验-查看链接' ,
-`dagl_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
-`dagl_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '档案管理-查看链接' ,
-PRIMARY KEY (`id`)
-);
-CREATE TABLE `zh_ledger_extra_9` (
-`id`  varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'uuid' ,
-`tid`  int(11) UNSIGNED NOT NULL COMMENT '标段id' ,
-`is_tp`  tinyint(1) UNSIGNED NOT NULL DEFAULT 0 COMMENT '总额计量' ,
-`gxby_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '工序报验-状态' ,
-`gxby_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
-`dagl_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '档案管理-状态' ,
-`gxby_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '工序报验-查看链接' ,
-`dagl_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
-`dagl_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '档案管理-查看链接' ,
-PRIMARY KEY (`id`)
-);
-
-
-CREATE TABLE `zh_pos_extra_0` (
-`id`  varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'uuid' ,
-`tid`  int(11) UNSIGNED NOT NULL COMMENT '标段id' ,
-`gxby_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '工序报验-状态' ,
-`gxby_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
-`dagl_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '档案管理-状态' ,
-`gxby_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '工序报验-查看链接' ,
-`dagl_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
-`dagl_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '档案管理-查看链接' ,
-PRIMARY KEY (`id`)
-);
-CREATE TABLE `zh_pos_extra_1` (
-`id`  varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'uuid' ,
-`tid`  int(11) UNSIGNED NOT NULL COMMENT '标段id' ,
-`gxby_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '工序报验-状态' ,
-`gxby_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
-`dagl_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '档案管理-状态' ,
-`gxby_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '工序报验-查看链接' ,
-`dagl_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
-`dagl_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '档案管理-查看链接' ,
-PRIMARY KEY (`id`)
-);
-CREATE TABLE `zh_pos_extra_2` (
-`id`  varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'uuid' ,
-`tid`  int(11) UNSIGNED NOT NULL COMMENT '标段id' ,
-`gxby_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '工序报验-状态' ,
-`gxby_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
-`dagl_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '档案管理-状态' ,
-`gxby_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '工序报验-查看链接' ,
-`dagl_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
-`dagl_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '档案管理-查看链接' ,
-PRIMARY KEY (`id`)
-);
-CREATE TABLE `zh_pos_extra_3` (
-`id`  varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'uuid' ,
-`tid`  int(11) UNSIGNED NOT NULL COMMENT '标段id' ,
-`gxby_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '工序报验-状态' ,
-`gxby_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
-`dagl_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '档案管理-状态' ,
-`gxby_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '工序报验-查看链接' ,
-`dagl_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
-`dagl_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '档案管理-查看链接' ,
-PRIMARY KEY (`id`)
-);
-CREATE TABLE `zh_pos_extra_4` (
-`id`  varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'uuid' ,
-`tid`  int(11) UNSIGNED NOT NULL COMMENT '标段id' ,
-`gxby_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '工序报验-状态' ,
-`gxby_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
-`dagl_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '档案管理-状态' ,
-`gxby_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '工序报验-查看链接' ,
-`dagl_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
-`dagl_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '档案管理-查看链接' ,
-PRIMARY KEY (`id`)
-);
-CREATE TABLE `zh_pos_extra_5` (
-`id`  varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'uuid' ,
-`tid`  int(11) UNSIGNED NOT NULL COMMENT '标段id' ,
-`gxby_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '工序报验-状态' ,
-`gxby_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
-`dagl_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '档案管理-状态' ,
-`gxby_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '工序报验-查看链接' ,
-`dagl_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
-`dagl_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '档案管理-查看链接' ,
-PRIMARY KEY (`id`)
-);
-CREATE TABLE `zh_pos_extra_6` (
-`id`  varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'uuid' ,
-`tid`  int(11) UNSIGNED NOT NULL COMMENT '标段id' ,
-`gxby_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '工序报验-状态' ,
-`gxby_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
-`dagl_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '档案管理-状态' ,
-`gxby_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '工序报验-查看链接' ,
-`dagl_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
-`dagl_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '档案管理-查看链接' ,
-PRIMARY KEY (`id`)
-);
-CREATE TABLE `zh_pos_extra_7` (
-`id`  varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'uuid' ,
-`tid`  int(11) UNSIGNED NOT NULL COMMENT '标段id' ,
-`gxby_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '工序报验-状态' ,
-`gxby_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
-`dagl_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '档案管理-状态' ,
-`gxby_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '工序报验-查看链接' ,
-`dagl_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
-`dagl_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '档案管理-查看链接' ,
-PRIMARY KEY (`id`)
-);
-CREATE TABLE `zh_pos_extra_8` (
-`id`  varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'uuid' ,
-`tid`  int(11) UNSIGNED NOT NULL COMMENT '标段id' ,
-`gxby_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '工序报验-状态' ,
-`gxby_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
-`dagl_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '档案管理-状态' ,
-`gxby_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '工序报验-查看链接' ,
-`dagl_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
-`dagl_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '档案管理-查看链接' ,
-PRIMARY KEY (`id`)
-);
-CREATE TABLE `zh_pos_extra_9` (
-`id`  varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'uuid' ,
-`tid`  int(11) UNSIGNED NOT NULL COMMENT '标段id' ,
-`gxby_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '工序报验-状态' ,
-`gxby_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
-`dagl_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '档案管理-状态' ,
-`gxby_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '工序报验-查看链接' ,
-`dagl_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
-`dagl_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '档案管理-查看链接' ,
-PRIMARY KEY (`id`)
-);
-CREATE TABLE `zh_pos_extra_10` (
-`id`  varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'uuid' ,
-`tid`  int(11) UNSIGNED NOT NULL COMMENT '标段id' ,
-`gxby_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '工序报验-状态' ,
-`gxby_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
-`dagl_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '档案管理-状态' ,
-`gxby_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '工序报验-查看链接' ,
-`dagl_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
-`dagl_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '档案管理-查看链接' ,
-PRIMARY KEY (`id`)
-);
-CREATE TABLE `zh_pos_extra_11` (
-`id`  varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'uuid' ,
-`tid`  int(11) UNSIGNED NOT NULL COMMENT '标段id' ,
-`gxby_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '工序报验-状态' ,
-`gxby_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
-`dagl_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '档案管理-状态' ,
-`gxby_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '工序报验-查看链接' ,
-`dagl_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
-`dagl_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '档案管理-查看链接' ,
-PRIMARY KEY (`id`)
-);
-CREATE TABLE `zh_pos_extra_12` (
-`id`  varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'uuid' ,
-`tid`  int(11) UNSIGNED NOT NULL COMMENT '标段id' ,
-`gxby_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '工序报验-状态' ,
-`gxby_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
-`dagl_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '档案管理-状态' ,
-`gxby_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '工序报验-查看链接' ,
-`dagl_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
-`dagl_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '档案管理-查看链接' ,
-PRIMARY KEY (`id`)
-);
-CREATE TABLE `zh_pos_extra_13` (
-`id`  varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'uuid' ,
-`tid`  int(11) UNSIGNED NOT NULL COMMENT '标段id' ,
-`gxby_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '工序报验-状态' ,
-`gxby_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
-`dagl_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '档案管理-状态' ,
-`gxby_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '工序报验-查看链接' ,
-`dagl_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
-`dagl_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '档案管理-查看链接' ,
-PRIMARY KEY (`id`)
-);
-CREATE TABLE `zh_pos_extra_14` (
-`id`  varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'uuid' ,
-`tid`  int(11) UNSIGNED NOT NULL COMMENT '标段id' ,
-`gxby_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '工序报验-状态' ,
-`gxby_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
-`dagl_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '档案管理-状态' ,
-`gxby_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '工序报验-查看链接' ,
-`dagl_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
-`dagl_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '档案管理-查看链接' ,
-PRIMARY KEY (`id`)
-);
-CREATE TABLE `zh_pos_extra_15` (
-`id`  varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'uuid' ,
-`tid`  int(11) UNSIGNED NOT NULL COMMENT '标段id' ,
-`gxby_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '工序报验-状态' ,
-`gxby_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
-`dagl_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '档案管理-状态' ,
-`gxby_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '工序报验-查看链接' ,
-`dagl_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
-`dagl_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '档案管理-查看链接' ,
-PRIMARY KEY (`id`)
-);
-CREATE TABLE `zh_pos_extra_16` (
-`id`  varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'uuid' ,
-`tid`  int(11) UNSIGNED NOT NULL COMMENT '标段id' ,
-`gxby_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '工序报验-状态' ,
-`gxby_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
-`dagl_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '档案管理-状态' ,
-`gxby_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '工序报验-查看链接' ,
-`dagl_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
-`dagl_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '档案管理-查看链接' ,
-PRIMARY KEY (`id`)
-);
-CREATE TABLE `zh_pos_extra_17` (
-`id`  varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'uuid' ,
-`tid`  int(11) UNSIGNED NOT NULL COMMENT '标段id' ,
-`gxby_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '工序报验-状态' ,
-`gxby_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
-`dagl_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '档案管理-状态' ,
-`gxby_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '工序报验-查看链接' ,
-`dagl_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
-`dagl_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '档案管理-查看链接' ,
-PRIMARY KEY (`id`)
-);
-CREATE TABLE `zh_pos_extra_18` (
-`id`  varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'uuid' ,
-`tid`  int(11) UNSIGNED NOT NULL COMMENT '标段id' ,
-`gxby_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '工序报验-状态' ,
-`gxby_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
-`dagl_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '档案管理-状态' ,
-`gxby_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '工序报验-查看链接' ,
-`dagl_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
-`dagl_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '档案管理-查看链接' ,
-PRIMARY KEY (`id`)
-);
-CREATE TABLE `zh_pos_extra_19` (
-`id`  varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'uuid' ,
-`tid`  int(11) UNSIGNED NOT NULL COMMENT '标段id' ,
-`gxby_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '工序报验-状态' ,
-`gxby_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
-`dagl_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '档案管理-状态' ,
-`gxby_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '工序报验-查看链接' ,
-`dagl_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
-`dagl_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '档案管理-查看链接' ,
-PRIMARY KEY (`id`)
-);
-
-
-INSERT INTO zh_ledger_extra_0 ( id, tid, is_tp, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url )
-  SELECT id, tender_id, is_tp, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url
-  FROM zh_ledger_0
-  WHERE is_tp <> 0 or gxby_status <> -1 or gxby_limit <> 0 or gxby_url <> '' or dagl_status <> -1 or dagl_limit <> 0 or dagl_url <> '';
-INSERT INTO zh_ledger_extra_1 ( id, tid, is_tp, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url )
-  SELECT id, tender_id, is_tp, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url
-  FROM zh_ledger_1
-  WHERE is_tp <> 0 or gxby_status <> -1 or gxby_limit <> 0 or gxby_url <> '' or dagl_status <> -1 or dagl_limit <> 0 or dagl_url <> '';
-INSERT INTO zh_ledger_extra_2 ( id, tid, is_tp, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url )
-  SELECT id, tender_id, is_tp, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url
-  FROM zh_ledger_2
-  WHERE is_tp <> 0 or gxby_status <> -1 or gxby_limit <> 0 or gxby_url <> '' or dagl_status <> -1 or dagl_limit <> 0 or dagl_url <> '';
-INSERT INTO zh_ledger_extra_3 ( id, tid, is_tp, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url )
-  SELECT id, tender_id, is_tp, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url
-  FROM zh_ledger_3
-  WHERE is_tp <> 0 or gxby_status <> -1 or gxby_limit <> 0 or gxby_url <> '' or dagl_status <> -1 or dagl_limit <> 0 or dagl_url <> '';
-INSERT INTO zh_ledger_extra_4 ( id, tid, is_tp, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url )
-  SELECT id, tender_id, is_tp, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url
-  FROM zh_ledger_4
-  WHERE is_tp <> 0 or gxby_status <> -1 or gxby_limit <> 0 or gxby_url <> '' or dagl_status <> -1 or dagl_limit <> 0 or dagl_url <> '';
-INSERT INTO zh_ledger_extra_5 ( id, tid, is_tp, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url )
-  SELECT id, tender_id, is_tp, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url
-  FROM zh_ledger_5
-  WHERE is_tp <> 0 or gxby_status <> -1 or gxby_limit <> 0 or gxby_url <> '' or dagl_status <> -1 or dagl_limit <> 0 or dagl_url <> '';
-INSERT INTO zh_ledger_extra_6 ( id, tid, is_tp, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url )
-  SELECT id, tender_id, is_tp, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url
-  FROM zh_ledger_6
-  WHERE is_tp <> 0 or gxby_status <> -1 or gxby_limit <> 0 or gxby_url <> '' or dagl_status <> -1 or dagl_limit <> 0 or dagl_url <> '';
-INSERT INTO zh_ledger_extra_7 ( id, tid, is_tp, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url )
-  SELECT id, tender_id, is_tp, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url
-  FROM zh_ledger_7
-  WHERE is_tp <> 0 or gxby_status <> -1 or gxby_limit <> 0 or gxby_url <> '' or dagl_status <> -1 or dagl_limit <> 0 or dagl_url <> '';
-INSERT INTO zh_ledger_extra_8 ( id, tid, is_tp, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url )
-  SELECT id, tender_id, is_tp, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url
-  FROM zh_ledger_8
-  WHERE is_tp <> 0 or gxby_status <> -1 or gxby_limit <> 0 or gxby_url <> '' or dagl_status <> -1 or dagl_limit <> 0 or dagl_url <> '';
-INSERT INTO zh_ledger_extra_9 ( id, tid, is_tp, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url )
-  SELECT id, tender_id, is_tp, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url
-  FROM zh_ledger_9
-  WHERE is_tp <> 0 or gxby_status <> -1 or gxby_limit <> 0 or gxby_url <> '' or dagl_status <> -1 or dagl_limit <> 0 or dagl_url <> '';
-
-INSERT INTO zh_pos_extra_0 ( id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url )
-  SELECT id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url
-  FROM zh_pos_0
-  WHERE gxby_status <> -1 or gxby_limit <> 0 or gxby_url <> '' or dagl_status <> -1 or dagl_limit <> 0 or dagl_url <> '';
-INSERT INTO zh_pos_extra_1 ( id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url )
-  SELECT id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url
-  FROM zh_pos_1
-  WHERE gxby_status <> -1 or gxby_limit <> 0 or gxby_url <> '' or dagl_status <> -1 or dagl_limit <> 0 or dagl_url <> '';
-INSERT INTO zh_pos_extra_2 ( id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url )
-  SELECT id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url
-  FROM zh_pos_2
-  WHERE gxby_status <> -1 or gxby_limit <> 0 or gxby_url <> '' or dagl_status <> -1 or dagl_limit <> 0 or dagl_url <> '';
-INSERT INTO zh_pos_extra_3 ( id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url )
-  SELECT id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url
-  FROM zh_pos_3
-  WHERE gxby_status <> -1 or gxby_limit <> 0 or gxby_url <> '' or dagl_status <> -1 or dagl_limit <> 0 or dagl_url <> '';
-INSERT INTO zh_pos_extra_4 ( id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url )
-  SELECT id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url
-  FROM zh_pos_4
-  WHERE gxby_status <> -1 or gxby_limit <> 0 or gxby_url <> '' or dagl_status <> -1 or dagl_limit <> 0 or dagl_url <> '';
-INSERT INTO zh_pos_extra_5 ( id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url )
-  SELECT id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url
-  FROM zh_pos_5
-  WHERE gxby_status <> -1 or gxby_limit <> 0 or gxby_url <> '' or dagl_status <> -1 or dagl_limit <> 0 or dagl_url <> '';
-INSERT INTO zh_pos_extra_6 ( id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url )
-  SELECT id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url
-  FROM zh_pos_6
-  WHERE gxby_status <> -1 or gxby_limit <> 0 or gxby_url <> '' or dagl_status <> -1 or dagl_limit <> 0 or dagl_url <> '';
-INSERT INTO zh_pos_extra_7 ( id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url )
-  SELECT id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url
-  FROM zh_pos_7
-  WHERE gxby_status <> -1 or gxby_limit <> 0 or gxby_url <> '' or dagl_status <> -1 or dagl_limit <> 0 or dagl_url <> '';
-INSERT INTO zh_pos_extra_8 ( id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url )
-  SELECT id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url
-  FROM zh_pos_8
-  WHERE gxby_status <> -1 or gxby_limit <> 0 or gxby_url <> '' or dagl_status <> -1 or dagl_limit <> 0 or dagl_url <> '';
-INSERT INTO zh_pos_extra_9 ( id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url )
-  SELECT id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url
-  FROM zh_pos_9
-  WHERE gxby_status <> -1 or gxby_limit <> 0 or gxby_url <> '' or dagl_status <> -1 or dagl_limit <> 0 or dagl_url <> '';
-INSERT INTO zh_pos_extra_10 ( id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url )
-  SELECT id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url
-  FROM zh_pos_10
-  WHERE gxby_status <> -1 or gxby_limit <> 0 or gxby_url <> '' or dagl_status <> -1 or dagl_limit <> 0 or dagl_url <> '';
-INSERT INTO zh_pos_extra_11 ( id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url )
-  SELECT id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url
-  FROM zh_pos_11
-  WHERE gxby_status <> -1 or gxby_limit <> 0 or gxby_url <> '' or dagl_status <> -1 or dagl_limit <> 0 or dagl_url <> '';
-INSERT INTO zh_pos_extra_12 ( id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url )
-  SELECT id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url
-  FROM zh_pos_12
-  WHERE gxby_status <> -1 or gxby_limit <> 0 or gxby_url <> '' or dagl_status <> -1 or dagl_limit <> 0 or dagl_url <> '';
-INSERT INTO zh_pos_extra_13 ( id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url )
-  SELECT id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url
-  FROM zh_pos_13
-  WHERE gxby_status <> -1 or gxby_limit <> 0 or gxby_url <> '' or dagl_status <> -1 or dagl_limit <> 0 or dagl_url <> '';
-INSERT INTO zh_pos_extra_14 ( id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url )
-  SELECT id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url
-  FROM zh_pos_14
-  WHERE gxby_status <> -1 or gxby_limit <> 0 or gxby_url <> '' or dagl_status <> -1 or dagl_limit <> 0 or dagl_url <> '';
-INSERT INTO zh_pos_extra_15 ( id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url )
-  SELECT id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url
-  FROM zh_pos_15
-  WHERE gxby_status <> -1 or gxby_limit <> 0 or gxby_url <> '' or dagl_status <> -1 or dagl_limit <> 0 or dagl_url <> '';
-INSERT INTO zh_pos_extra_16 ( id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url )
-  SELECT id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url
-  FROM zh_pos_16
-  WHERE gxby_status <> -1 or gxby_limit <> 0 or gxby_url <> '' or dagl_status <> -1 or dagl_limit <> 0 or dagl_url <> '';
-INSERT INTO zh_pos_extra_17 ( id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url )
-  SELECT id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url
-  FROM zh_pos_17
-  WHERE gxby_status <> -1 or gxby_limit <> 0 or gxby_url <> '' or dagl_status <> -1 or dagl_limit <> 0 or dagl_url <> '';
-INSERT INTO zh_pos_extra_18 ( id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url )
-  SELECT id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url
-  FROM zh_pos_18
-  WHERE gxby_status <> -1 or gxby_limit <> 0 or gxby_url <> '' or dagl_status <> -1 or dagl_limit <> 0 or dagl_url <> '';
-INSERT INTO zh_pos_extra_19 ( id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url )
-  SELECT id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url
-  FROM zh_pos_19
-  WHERE gxby_status <> -1 or gxby_limit <> 0 or gxby_url <> '' or dagl_status <> -1 or dagl_limit <> 0 or dagl_url <> '';
-
-ALTER TABLE `zh_stage_bills_0`
-ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_tp`;
-ALTER TABLE `zh_stage_bills_1`
-ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_tp`;
-ALTER TABLE `zh_stage_bills_2`
-ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_tp`;
-ALTER TABLE `zh_stage_bills_3`
-ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_tp`;
-ALTER TABLE `zh_stage_bills_4`
-ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_tp`;
-ALTER TABLE `zh_stage_bills_5`
-ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_tp`;
-ALTER TABLE `zh_stage_bills_6`
-ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_tp`;
-ALTER TABLE `zh_stage_bills_7`
-ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_tp`;
-ALTER TABLE `zh_stage_bills_8`
-ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_tp`;
-ALTER TABLE `zh_stage_bills_9`
-ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_tp`;
-
-ALTER TABLE `zh_stage_bills_final_0`
-ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_tp`;
-ALTER TABLE `zh_stage_bills_final_1`
-ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_tp`;
-ALTER TABLE `zh_stage_bills_final_2`
-ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_tp`;
-ALTER TABLE `zh_stage_bills_final_3`
-ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_tp`;
-ALTER TABLE `zh_stage_bills_final_4`
-ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_tp`;
-ALTER TABLE `zh_stage_bills_final_5`
-ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_tp`;
-ALTER TABLE `zh_stage_bills_final_6`
-ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_tp`;
-ALTER TABLE `zh_stage_bills_final_7`
-ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_tp`;
-ALTER TABLE `zh_stage_bills_final_8`
-ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_tp`;
-ALTER TABLE `zh_stage_bills_final_9`
-ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_tp`;
-
-ALTER TABLE `zh_stage_pos_0`
-ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
-ALTER TABLE `zh_stage_pos_1`
-ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
-ALTER TABLE `zh_stage_pos_2`
-ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
-ALTER TABLE `zh_stage_pos_3`
-ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
-ALTER TABLE `zh_stage_pos_4`
-ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
-ALTER TABLE `zh_stage_pos_5`
-ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
-ALTER TABLE `zh_stage_pos_6`
-ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
-ALTER TABLE `zh_stage_pos_7`
-ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
-ALTER TABLE `zh_stage_pos_8`
-ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
-ALTER TABLE `zh_stage_pos_9`
-ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
-ALTER TABLE `zh_stage_pos_10`
-ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
-ALTER TABLE `zh_stage_pos_11`
-ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
-ALTER TABLE `zh_stage_pos_12`
-ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
-ALTER TABLE `zh_stage_pos_13`
-ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
-ALTER TABLE `zh_stage_pos_14`
-ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
-ALTER TABLE `zh_stage_pos_15`
-ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
-ALTER TABLE `zh_stage_pos_16`
-ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
-ALTER TABLE `zh_stage_pos_17`
-ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
-ALTER TABLE `zh_stage_pos_18`
-ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
-ALTER TABLE `zh_stage_pos_19`
-ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
-
-
-ALTER TABLE `zh_stage_pos_final_0`
-ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
-ALTER TABLE `zh_stage_pos_final_1`
-ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
-ALTER TABLE `zh_stage_pos_final_2`
-ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
-ALTER TABLE `zh_stage_pos_final_3`
-ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
-ALTER TABLE `zh_stage_pos_final_4`
-ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
-ALTER TABLE `zh_stage_pos_final_5`
-ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
-ALTER TABLE `zh_stage_pos_final_6`
-ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
-ALTER TABLE `zh_stage_pos_final_7`
-ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
-ALTER TABLE `zh_stage_pos_final_8`
-ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
-ALTER TABLE `zh_stage_pos_final_9`
-ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
-ALTER TABLE `zh_stage_pos_final_10`
-ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
-ALTER TABLE `zh_stage_pos_final_11`
-ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
-ALTER TABLE `zh_stage_pos_final_12`
-ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
-ALTER TABLE `zh_stage_pos_final_13`
-ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
-ALTER TABLE `zh_stage_pos_final_14`
-ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
-ALTER TABLE `zh_stage_pos_final_15`
-ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
-ALTER TABLE `zh_stage_pos_final_16`
-ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
-ALTER TABLE `zh_stage_pos_final_17`
-ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
-ALTER TABLE `zh_stage_pos_final_18`
-ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
-ALTER TABLE `zh_stage_pos_final_19`
-ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
-
-ALTER TABLE `zh_stage_change`
-ADD COLUMN `no_value`  tinyint(4) UNSIGNED NOT NULL DEFAULT 0 COMMENT '是否不计价' AFTER `minus`;
-ALTER TABLE `zh_stage_change_final`
-ADD COLUMN `no_value`  tinyint(4) UNSIGNED NOT NULL DEFAULT 0 COMMENT '是否不计价' AFTER `minus`;
-ALTER TABLE `zh_stage_detail`
-ADD COLUMN `no_value`  tinyint(4) UNSIGNED NOT NULL DEFAULT 0 COMMENT '计量不计价' AFTER `unit_price`;
+ALTER TABLE `zh_stage_rela_bills`
+ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '不计价' AFTER `qc_tp`;
+ALTER TABLE `zh_stage_rela_bills_final`
+ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '不计价' AFTER `qc_tp`;
+
+ALTER TABLE `zh_stage_rela_pos`
+ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '不计价' AFTER `qc_qty`;
+ALTER TABLE `zh_stage_rela_pos_final`
+ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '不计价' AFTER `qc_qty`;
+
+ALTER TABLE `zh_stage_rela_im`
+ADD COLUMN `qc_minus_jl`  decimal(24,8) NULL DEFAULT 0 COMMENT '不计价' AFTER `qc_jl`,
+ADD COLUMN `pre_qc_minus_jl`  decimal(24,8) NULL DEFAULT 0 COMMENT '截止上期-不计价' AFTER `pre_qc_jl`,
+ADD COLUMN `end_qc_minus_jl`  decimal(24,8) NULL DEFAULT 0 COMMENT '截止本期-不计价' AFTER `end_qc_jl`;
+
+ALTER TABLE `zh_stage_rela_im_bills`
+ADD COLUMN `qc_minus_jl`  decimal(24,8) NULL DEFAULT 0 COMMENT '不计价' AFTER `qc_jl`,
+ADD COLUMN `pre_qc_minus_jl`  decimal(24,8) NULL DEFAULT 0 COMMENT '截止上期-不计价' AFTER `pre_qc_jl`,
+ADD COLUMN `end_qc_minus_jl`  decimal(24,8) NULL DEFAULT 0 COMMENT '截止本期-不计价' AFTER `end_qc_jl`;

+ 605 - 0
sql/update20220804.sql

@@ -0,0 +1,605 @@
+ALTER TABLE `zh_ledger_history`
+ADD COLUMN `bills_count`  int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '清单条数' AFTER `valid`,
+ADD COLUMN `pos_count`  int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '计量单元数量' AFTER `bills_count`;
+
+UPDATE `zh_tender` SET `had_map`=3 WHERE `had_map`=1;
+
+ALTER TABLE `zh_tender` ADD `map_pic` VARCHAR(255) NULL DEFAULT NULL COMMENT '静态图片地址' AFTER `had_map`;
+
+CREATE TABLE `zh_ledger_extra_0` (
+`id`  varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'uuid' ,
+`tid`  int(11) UNSIGNED NOT NULL COMMENT '标段id' ,
+`is_tp`  tinyint(1) UNSIGNED NOT NULL DEFAULT 0 COMMENT '总额计量' ,
+`gxby_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '工序报验-状态' ,
+`gxby_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
+`dagl_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '档案管理-状态' ,
+`gxby_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '工序报验-查看链接' ,
+`dagl_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
+`dagl_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '档案管理-查看链接' ,
+PRIMARY KEY (`id`)
+);
+CREATE TABLE `zh_ledger_extra_1` (
+`id`  varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'uuid' ,
+`tid`  int(11) UNSIGNED NOT NULL COMMENT '标段id' ,
+`is_tp`  tinyint(1) UNSIGNED NOT NULL DEFAULT 0 COMMENT '总额计量' ,
+`gxby_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '工序报验-状态' ,
+`gxby_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
+`dagl_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '档案管理-状态' ,
+`gxby_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '工序报验-查看链接' ,
+`dagl_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
+`dagl_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '档案管理-查看链接' ,
+PRIMARY KEY (`id`)
+);
+CREATE TABLE `zh_ledger_extra_2` (
+`id`  varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'uuid' ,
+`tid`  int(11) UNSIGNED NOT NULL COMMENT '标段id' ,
+`is_tp`  tinyint(1) UNSIGNED NOT NULL DEFAULT 0 COMMENT '总额计量' ,
+`gxby_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '工序报验-状态' ,
+`gxby_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
+`dagl_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '档案管理-状态' ,
+`gxby_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '工序报验-查看链接' ,
+`dagl_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
+`dagl_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '档案管理-查看链接' ,
+PRIMARY KEY (`id`)
+);
+CREATE TABLE `zh_ledger_extra_3` (
+`id`  varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'uuid' ,
+`tid`  int(11) UNSIGNED NOT NULL COMMENT '标段id' ,
+`is_tp`  tinyint(1) UNSIGNED NOT NULL DEFAULT 0 COMMENT '总额计量' ,
+`gxby_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '工序报验-状态' ,
+`gxby_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
+`dagl_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '档案管理-状态' ,
+`gxby_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '工序报验-查看链接' ,
+`dagl_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
+`dagl_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '档案管理-查看链接' ,
+PRIMARY KEY (`id`)
+);
+CREATE TABLE `zh_ledger_extra_4` (
+`id`  varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'uuid' ,
+`tid`  int(11) UNSIGNED NOT NULL COMMENT '标段id' ,
+`is_tp`  tinyint(1) UNSIGNED NOT NULL DEFAULT 0 COMMENT '总额计量' ,
+`gxby_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '工序报验-状态' ,
+`gxby_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
+`dagl_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '档案管理-状态' ,
+`gxby_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '工序报验-查看链接' ,
+`dagl_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
+`dagl_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '档案管理-查看链接' ,
+PRIMARY KEY (`id`)
+);
+CREATE TABLE `zh_ledger_extra_5` (
+`id`  varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'uuid' ,
+`tid`  int(11) UNSIGNED NOT NULL COMMENT '标段id' ,
+`is_tp`  tinyint(1) UNSIGNED NOT NULL DEFAULT 0 COMMENT '总额计量' ,
+`gxby_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '工序报验-状态' ,
+`gxby_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
+`dagl_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '档案管理-状态' ,
+`gxby_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '工序报验-查看链接' ,
+`dagl_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
+`dagl_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '档案管理-查看链接' ,
+PRIMARY KEY (`id`)
+);
+CREATE TABLE `zh_ledger_extra_6` (
+`id`  varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'uuid' ,
+`tid`  int(11) UNSIGNED NOT NULL COMMENT '标段id' ,
+`is_tp`  tinyint(1) UNSIGNED NOT NULL DEFAULT 0 COMMENT '总额计量' ,
+`gxby_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '工序报验-状态' ,
+`gxby_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
+`dagl_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '档案管理-状态' ,
+`gxby_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '工序报验-查看链接' ,
+`dagl_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
+`dagl_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '档案管理-查看链接' ,
+PRIMARY KEY (`id`)
+);
+CREATE TABLE `zh_ledger_extra_7` (
+`id`  varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'uuid' ,
+`tid`  int(11) UNSIGNED NOT NULL COMMENT '标段id' ,
+`is_tp`  tinyint(1) UNSIGNED NOT NULL DEFAULT 0 COMMENT '总额计量' ,
+`gxby_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '工序报验-状态' ,
+`gxby_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
+`dagl_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '档案管理-状态' ,
+`gxby_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '工序报验-查看链接' ,
+`dagl_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
+`dagl_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '档案管理-查看链接' ,
+PRIMARY KEY (`id`)
+);
+CREATE TABLE `zh_ledger_extra_8` (
+`id`  varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'uuid' ,
+`tid`  int(11) UNSIGNED NOT NULL COMMENT '标段id' ,
+`is_tp`  tinyint(1) UNSIGNED NOT NULL DEFAULT 0 COMMENT '总额计量' ,
+`gxby_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '工序报验-状态' ,
+`gxby_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
+`dagl_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '档案管理-状态' ,
+`gxby_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '工序报验-查看链接' ,
+`dagl_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
+`dagl_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '档案管理-查看链接' ,
+PRIMARY KEY (`id`)
+);
+CREATE TABLE `zh_ledger_extra_9` (
+`id`  varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'uuid' ,
+`tid`  int(11) UNSIGNED NOT NULL COMMENT '标段id' ,
+`is_tp`  tinyint(1) UNSIGNED NOT NULL DEFAULT 0 COMMENT '总额计量' ,
+`gxby_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '工序报验-状态' ,
+`gxby_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
+`dagl_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '档案管理-状态' ,
+`gxby_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '工序报验-查看链接' ,
+`dagl_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
+`dagl_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '档案管理-查看链接' ,
+PRIMARY KEY (`id`)
+);
+
+
+CREATE TABLE `zh_pos_extra_0` (
+`id`  varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'uuid' ,
+`tid`  int(11) UNSIGNED NOT NULL COMMENT '标段id' ,
+`gxby_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '工序报验-状态' ,
+`gxby_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
+`dagl_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '档案管理-状态' ,
+`gxby_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '工序报验-查看链接' ,
+`dagl_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
+`dagl_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '档案管理-查看链接' ,
+PRIMARY KEY (`id`)
+);
+CREATE TABLE `zh_pos_extra_1` (
+`id`  varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'uuid' ,
+`tid`  int(11) UNSIGNED NOT NULL COMMENT '标段id' ,
+`gxby_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '工序报验-状态' ,
+`gxby_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
+`dagl_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '档案管理-状态' ,
+`gxby_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '工序报验-查看链接' ,
+`dagl_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
+`dagl_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '档案管理-查看链接' ,
+PRIMARY KEY (`id`)
+);
+CREATE TABLE `zh_pos_extra_2` (
+`id`  varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'uuid' ,
+`tid`  int(11) UNSIGNED NOT NULL COMMENT '标段id' ,
+`gxby_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '工序报验-状态' ,
+`gxby_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
+`dagl_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '档案管理-状态' ,
+`gxby_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '工序报验-查看链接' ,
+`dagl_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
+`dagl_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '档案管理-查看链接' ,
+PRIMARY KEY (`id`)
+);
+CREATE TABLE `zh_pos_extra_3` (
+`id`  varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'uuid' ,
+`tid`  int(11) UNSIGNED NOT NULL COMMENT '标段id' ,
+`gxby_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '工序报验-状态' ,
+`gxby_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
+`dagl_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '档案管理-状态' ,
+`gxby_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '工序报验-查看链接' ,
+`dagl_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
+`dagl_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '档案管理-查看链接' ,
+PRIMARY KEY (`id`)
+);
+CREATE TABLE `zh_pos_extra_4` (
+`id`  varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'uuid' ,
+`tid`  int(11) UNSIGNED NOT NULL COMMENT '标段id' ,
+`gxby_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '工序报验-状态' ,
+`gxby_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
+`dagl_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '档案管理-状态' ,
+`gxby_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '工序报验-查看链接' ,
+`dagl_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
+`dagl_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '档案管理-查看链接' ,
+PRIMARY KEY (`id`)
+);
+CREATE TABLE `zh_pos_extra_5` (
+`id`  varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'uuid' ,
+`tid`  int(11) UNSIGNED NOT NULL COMMENT '标段id' ,
+`gxby_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '工序报验-状态' ,
+`gxby_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
+`dagl_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '档案管理-状态' ,
+`gxby_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '工序报验-查看链接' ,
+`dagl_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
+`dagl_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '档案管理-查看链接' ,
+PRIMARY KEY (`id`)
+);
+CREATE TABLE `zh_pos_extra_6` (
+`id`  varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'uuid' ,
+`tid`  int(11) UNSIGNED NOT NULL COMMENT '标段id' ,
+`gxby_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '工序报验-状态' ,
+`gxby_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
+`dagl_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '档案管理-状态' ,
+`gxby_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '工序报验-查看链接' ,
+`dagl_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
+`dagl_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '档案管理-查看链接' ,
+PRIMARY KEY (`id`)
+);
+CREATE TABLE `zh_pos_extra_7` (
+`id`  varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'uuid' ,
+`tid`  int(11) UNSIGNED NOT NULL COMMENT '标段id' ,
+`gxby_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '工序报验-状态' ,
+`gxby_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
+`dagl_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '档案管理-状态' ,
+`gxby_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '工序报验-查看链接' ,
+`dagl_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
+`dagl_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '档案管理-查看链接' ,
+PRIMARY KEY (`id`)
+);
+CREATE TABLE `zh_pos_extra_8` (
+`id`  varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'uuid' ,
+`tid`  int(11) UNSIGNED NOT NULL COMMENT '标段id' ,
+`gxby_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '工序报验-状态' ,
+`gxby_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
+`dagl_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '档案管理-状态' ,
+`gxby_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '工序报验-查看链接' ,
+`dagl_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
+`dagl_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '档案管理-查看链接' ,
+PRIMARY KEY (`id`)
+);
+CREATE TABLE `zh_pos_extra_9` (
+`id`  varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'uuid' ,
+`tid`  int(11) UNSIGNED NOT NULL COMMENT '标段id' ,
+`gxby_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '工序报验-状态' ,
+`gxby_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
+`dagl_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '档案管理-状态' ,
+`gxby_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '工序报验-查看链接' ,
+`dagl_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
+`dagl_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '档案管理-查看链接' ,
+PRIMARY KEY (`id`)
+);
+CREATE TABLE `zh_pos_extra_10` (
+`id`  varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'uuid' ,
+`tid`  int(11) UNSIGNED NOT NULL COMMENT '标段id' ,
+`gxby_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '工序报验-状态' ,
+`gxby_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
+`dagl_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '档案管理-状态' ,
+`gxby_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '工序报验-查看链接' ,
+`dagl_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
+`dagl_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '档案管理-查看链接' ,
+PRIMARY KEY (`id`)
+);
+CREATE TABLE `zh_pos_extra_11` (
+`id`  varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'uuid' ,
+`tid`  int(11) UNSIGNED NOT NULL COMMENT '标段id' ,
+`gxby_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '工序报验-状态' ,
+`gxby_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
+`dagl_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '档案管理-状态' ,
+`gxby_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '工序报验-查看链接' ,
+`dagl_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
+`dagl_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '档案管理-查看链接' ,
+PRIMARY KEY (`id`)
+);
+CREATE TABLE `zh_pos_extra_12` (
+`id`  varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'uuid' ,
+`tid`  int(11) UNSIGNED NOT NULL COMMENT '标段id' ,
+`gxby_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '工序报验-状态' ,
+`gxby_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
+`dagl_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '档案管理-状态' ,
+`gxby_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '工序报验-查看链接' ,
+`dagl_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
+`dagl_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '档案管理-查看链接' ,
+PRIMARY KEY (`id`)
+);
+CREATE TABLE `zh_pos_extra_13` (
+`id`  varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'uuid' ,
+`tid`  int(11) UNSIGNED NOT NULL COMMENT '标段id' ,
+`gxby_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '工序报验-状态' ,
+`gxby_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
+`dagl_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '档案管理-状态' ,
+`gxby_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '工序报验-查看链接' ,
+`dagl_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
+`dagl_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '档案管理-查看链接' ,
+PRIMARY KEY (`id`)
+);
+CREATE TABLE `zh_pos_extra_14` (
+`id`  varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'uuid' ,
+`tid`  int(11) UNSIGNED NOT NULL COMMENT '标段id' ,
+`gxby_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '工序报验-状态' ,
+`gxby_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
+`dagl_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '档案管理-状态' ,
+`gxby_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '工序报验-查看链接' ,
+`dagl_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
+`dagl_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '档案管理-查看链接' ,
+PRIMARY KEY (`id`)
+);
+CREATE TABLE `zh_pos_extra_15` (
+`id`  varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'uuid' ,
+`tid`  int(11) UNSIGNED NOT NULL COMMENT '标段id' ,
+`gxby_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '工序报验-状态' ,
+`gxby_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
+`dagl_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '档案管理-状态' ,
+`gxby_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '工序报验-查看链接' ,
+`dagl_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
+`dagl_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '档案管理-查看链接' ,
+PRIMARY KEY (`id`)
+);
+CREATE TABLE `zh_pos_extra_16` (
+`id`  varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'uuid' ,
+`tid`  int(11) UNSIGNED NOT NULL COMMENT '标段id' ,
+`gxby_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '工序报验-状态' ,
+`gxby_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
+`dagl_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '档案管理-状态' ,
+`gxby_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '工序报验-查看链接' ,
+`dagl_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
+`dagl_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '档案管理-查看链接' ,
+PRIMARY KEY (`id`)
+);
+CREATE TABLE `zh_pos_extra_17` (
+`id`  varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'uuid' ,
+`tid`  int(11) UNSIGNED NOT NULL COMMENT '标段id' ,
+`gxby_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '工序报验-状态' ,
+`gxby_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
+`dagl_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '档案管理-状态' ,
+`gxby_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '工序报验-查看链接' ,
+`dagl_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
+`dagl_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '档案管理-查看链接' ,
+PRIMARY KEY (`id`)
+);
+CREATE TABLE `zh_pos_extra_18` (
+`id`  varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'uuid' ,
+`tid`  int(11) UNSIGNED NOT NULL COMMENT '标段id' ,
+`gxby_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '工序报验-状态' ,
+`gxby_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
+`dagl_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '档案管理-状态' ,
+`gxby_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '工序报验-查看链接' ,
+`dagl_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
+`dagl_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '档案管理-查看链接' ,
+PRIMARY KEY (`id`)
+);
+CREATE TABLE `zh_pos_extra_19` (
+`id`  varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'uuid' ,
+`tid`  int(11) UNSIGNED NOT NULL COMMENT '标段id' ,
+`gxby_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '工序报验-状态' ,
+`gxby_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
+`dagl_status`  tinyint(4) NULL DEFAULT '-1' COMMENT '档案管理-状态' ,
+`gxby_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '工序报验-查看链接' ,
+`dagl_limit`  int(4) NOT NULL DEFAULT 0 COMMENT '计量是否受限,0不受限,1受限' ,
+`dagl_url`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '档案管理-查看链接' ,
+PRIMARY KEY (`id`)
+);
+
+
+INSERT INTO zh_ledger_extra_0 ( id, tid, is_tp, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url )
+  SELECT id, tender_id, is_tp, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url
+  FROM zh_ledger_0
+  WHERE is_tp <> 0 or gxby_status <> -1 or gxby_limit <> 0 or gxby_url <> '' or dagl_status <> -1 or dagl_limit <> 0 or dagl_url <> '';
+INSERT INTO zh_ledger_extra_1 ( id, tid, is_tp, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url )
+  SELECT id, tender_id, is_tp, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url
+  FROM zh_ledger_1
+  WHERE is_tp <> 0 or gxby_status <> -1 or gxby_limit <> 0 or gxby_url <> '' or dagl_status <> -1 or dagl_limit <> 0 or dagl_url <> '';
+INSERT INTO zh_ledger_extra_2 ( id, tid, is_tp, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url )
+  SELECT id, tender_id, is_tp, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url
+  FROM zh_ledger_2
+  WHERE is_tp <> 0 or gxby_status <> -1 or gxby_limit <> 0 or gxby_url <> '' or dagl_status <> -1 or dagl_limit <> 0 or dagl_url <> '';
+INSERT INTO zh_ledger_extra_3 ( id, tid, is_tp, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url )
+  SELECT id, tender_id, is_tp, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url
+  FROM zh_ledger_3
+  WHERE is_tp <> 0 or gxby_status <> -1 or gxby_limit <> 0 or gxby_url <> '' or dagl_status <> -1 or dagl_limit <> 0 or dagl_url <> '';
+INSERT INTO zh_ledger_extra_4 ( id, tid, is_tp, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url )
+  SELECT id, tender_id, is_tp, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url
+  FROM zh_ledger_4
+  WHERE is_tp <> 0 or gxby_status <> -1 or gxby_limit <> 0 or gxby_url <> '' or dagl_status <> -1 or dagl_limit <> 0 or dagl_url <> '';
+INSERT INTO zh_ledger_extra_5 ( id, tid, is_tp, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url )
+  SELECT id, tender_id, is_tp, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url
+  FROM zh_ledger_5
+  WHERE is_tp <> 0 or gxby_status <> -1 or gxby_limit <> 0 or gxby_url <> '' or dagl_status <> -1 or dagl_limit <> 0 or dagl_url <> '';
+INSERT INTO zh_ledger_extra_6 ( id, tid, is_tp, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url )
+  SELECT id, tender_id, is_tp, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url
+  FROM zh_ledger_6
+  WHERE is_tp <> 0 or gxby_status <> -1 or gxby_limit <> 0 or gxby_url <> '' or dagl_status <> -1 or dagl_limit <> 0 or dagl_url <> '';
+INSERT INTO zh_ledger_extra_7 ( id, tid, is_tp, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url )
+  SELECT id, tender_id, is_tp, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url
+  FROM zh_ledger_7
+  WHERE is_tp <> 0 or gxby_status <> -1 or gxby_limit <> 0 or gxby_url <> '' or dagl_status <> -1 or dagl_limit <> 0 or dagl_url <> '';
+INSERT INTO zh_ledger_extra_8 ( id, tid, is_tp, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url )
+  SELECT id, tender_id, is_tp, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url
+  FROM zh_ledger_8
+  WHERE is_tp <> 0 or gxby_status <> -1 or gxby_limit <> 0 or gxby_url <> '' or dagl_status <> -1 or dagl_limit <> 0 or dagl_url <> '';
+INSERT INTO zh_ledger_extra_9 ( id, tid, is_tp, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url )
+  SELECT id, tender_id, is_tp, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url
+  FROM zh_ledger_9
+  WHERE is_tp <> 0 or gxby_status <> -1 or gxby_limit <> 0 or gxby_url <> '' or dagl_status <> -1 or dagl_limit <> 0 or dagl_url <> '';
+
+INSERT INTO zh_pos_extra_0 ( id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url )
+  SELECT id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url
+  FROM zh_pos_0
+  WHERE gxby_status <> -1 or gxby_limit <> 0 or gxby_url <> '' or dagl_status <> -1 or dagl_limit <> 0 or dagl_url <> '';
+INSERT INTO zh_pos_extra_1 ( id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url )
+  SELECT id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url
+  FROM zh_pos_1
+  WHERE gxby_status <> -1 or gxby_limit <> 0 or gxby_url <> '' or dagl_status <> -1 or dagl_limit <> 0 or dagl_url <> '';
+INSERT INTO zh_pos_extra_2 ( id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url )
+  SELECT id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url
+  FROM zh_pos_2
+  WHERE gxby_status <> -1 or gxby_limit <> 0 or gxby_url <> '' or dagl_status <> -1 or dagl_limit <> 0 or dagl_url <> '';
+INSERT INTO zh_pos_extra_3 ( id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url )
+  SELECT id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url
+  FROM zh_pos_3
+  WHERE gxby_status <> -1 or gxby_limit <> 0 or gxby_url <> '' or dagl_status <> -1 or dagl_limit <> 0 or dagl_url <> '';
+INSERT INTO zh_pos_extra_4 ( id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url )
+  SELECT id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url
+  FROM zh_pos_4
+  WHERE gxby_status <> -1 or gxby_limit <> 0 or gxby_url <> '' or dagl_status <> -1 or dagl_limit <> 0 or dagl_url <> '';
+INSERT INTO zh_pos_extra_5 ( id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url )
+  SELECT id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url
+  FROM zh_pos_5
+  WHERE gxby_status <> -1 or gxby_limit <> 0 or gxby_url <> '' or dagl_status <> -1 or dagl_limit <> 0 or dagl_url <> '';
+INSERT INTO zh_pos_extra_6 ( id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url )
+  SELECT id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url
+  FROM zh_pos_6
+  WHERE gxby_status <> -1 or gxby_limit <> 0 or gxby_url <> '' or dagl_status <> -1 or dagl_limit <> 0 or dagl_url <> '';
+INSERT INTO zh_pos_extra_7 ( id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url )
+  SELECT id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url
+  FROM zh_pos_7
+  WHERE gxby_status <> -1 or gxby_limit <> 0 or gxby_url <> '' or dagl_status <> -1 or dagl_limit <> 0 or dagl_url <> '';
+INSERT INTO zh_pos_extra_8 ( id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url )
+  SELECT id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url
+  FROM zh_pos_8
+  WHERE gxby_status <> -1 or gxby_limit <> 0 or gxby_url <> '' or dagl_status <> -1 or dagl_limit <> 0 or dagl_url <> '';
+INSERT INTO zh_pos_extra_9 ( id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url )
+  SELECT id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url
+  FROM zh_pos_9
+  WHERE gxby_status <> -1 or gxby_limit <> 0 or gxby_url <> '' or dagl_status <> -1 or dagl_limit <> 0 or dagl_url <> '';
+INSERT INTO zh_pos_extra_10 ( id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url )
+  SELECT id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url
+  FROM zh_pos_10
+  WHERE gxby_status <> -1 or gxby_limit <> 0 or gxby_url <> '' or dagl_status <> -1 or dagl_limit <> 0 or dagl_url <> '';
+INSERT INTO zh_pos_extra_11 ( id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url )
+  SELECT id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url
+  FROM zh_pos_11
+  WHERE gxby_status <> -1 or gxby_limit <> 0 or gxby_url <> '' or dagl_status <> -1 or dagl_limit <> 0 or dagl_url <> '';
+INSERT INTO zh_pos_extra_12 ( id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url )
+  SELECT id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url
+  FROM zh_pos_12
+  WHERE gxby_status <> -1 or gxby_limit <> 0 or gxby_url <> '' or dagl_status <> -1 or dagl_limit <> 0 or dagl_url <> '';
+INSERT INTO zh_pos_extra_13 ( id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url )
+  SELECT id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url
+  FROM zh_pos_13
+  WHERE gxby_status <> -1 or gxby_limit <> 0 or gxby_url <> '' or dagl_status <> -1 or dagl_limit <> 0 or dagl_url <> '';
+INSERT INTO zh_pos_extra_14 ( id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url )
+  SELECT id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url
+  FROM zh_pos_14
+  WHERE gxby_status <> -1 or gxby_limit <> 0 or gxby_url <> '' or dagl_status <> -1 or dagl_limit <> 0 or dagl_url <> '';
+INSERT INTO zh_pos_extra_15 ( id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url )
+  SELECT id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url
+  FROM zh_pos_15
+  WHERE gxby_status <> -1 or gxby_limit <> 0 or gxby_url <> '' or dagl_status <> -1 or dagl_limit <> 0 or dagl_url <> '';
+INSERT INTO zh_pos_extra_16 ( id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url )
+  SELECT id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url
+  FROM zh_pos_16
+  WHERE gxby_status <> -1 or gxby_limit <> 0 or gxby_url <> '' or dagl_status <> -1 or dagl_limit <> 0 or dagl_url <> '';
+INSERT INTO zh_pos_extra_17 ( id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url )
+  SELECT id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url
+  FROM zh_pos_17
+  WHERE gxby_status <> -1 or gxby_limit <> 0 or gxby_url <> '' or dagl_status <> -1 or dagl_limit <> 0 or dagl_url <> '';
+INSERT INTO zh_pos_extra_18 ( id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url )
+  SELECT id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url
+  FROM zh_pos_18
+  WHERE gxby_status <> -1 or gxby_limit <> 0 or gxby_url <> '' or dagl_status <> -1 or dagl_limit <> 0 or dagl_url <> '';
+INSERT INTO zh_pos_extra_19 ( id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url )
+  SELECT id, tid, gxby_status, gxby_limit, gxby_url, dagl_status, dagl_limit, dagl_url
+  FROM zh_pos_19
+  WHERE gxby_status <> -1 or gxby_limit <> 0 or gxby_url <> '' or dagl_status <> -1 or dagl_limit <> 0 or dagl_url <> '';
+
+ALTER TABLE `zh_stage_bills_0`
+ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_tp`;
+ALTER TABLE `zh_stage_bills_1`
+ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_tp`;
+ALTER TABLE `zh_stage_bills_2`
+ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_tp`;
+ALTER TABLE `zh_stage_bills_3`
+ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_tp`;
+ALTER TABLE `zh_stage_bills_4`
+ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_tp`;
+ALTER TABLE `zh_stage_bills_5`
+ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_tp`;
+ALTER TABLE `zh_stage_bills_6`
+ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_tp`;
+ALTER TABLE `zh_stage_bills_7`
+ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_tp`;
+ALTER TABLE `zh_stage_bills_8`
+ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_tp`;
+ALTER TABLE `zh_stage_bills_9`
+ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_tp`;
+
+ALTER TABLE `zh_stage_bills_final_0`
+ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_tp`;
+ALTER TABLE `zh_stage_bills_final_1`
+ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_tp`;
+ALTER TABLE `zh_stage_bills_final_2`
+ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_tp`;
+ALTER TABLE `zh_stage_bills_final_3`
+ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_tp`;
+ALTER TABLE `zh_stage_bills_final_4`
+ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_tp`;
+ALTER TABLE `zh_stage_bills_final_5`
+ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_tp`;
+ALTER TABLE `zh_stage_bills_final_6`
+ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_tp`;
+ALTER TABLE `zh_stage_bills_final_7`
+ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_tp`;
+ALTER TABLE `zh_stage_bills_final_8`
+ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_tp`;
+ALTER TABLE `zh_stage_bills_final_9`
+ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_tp`;
+
+ALTER TABLE `zh_stage_pos_0`
+ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
+ALTER TABLE `zh_stage_pos_1`
+ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
+ALTER TABLE `zh_stage_pos_2`
+ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
+ALTER TABLE `zh_stage_pos_3`
+ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
+ALTER TABLE `zh_stage_pos_4`
+ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
+ALTER TABLE `zh_stage_pos_5`
+ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
+ALTER TABLE `zh_stage_pos_6`
+ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
+ALTER TABLE `zh_stage_pos_7`
+ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
+ALTER TABLE `zh_stage_pos_8`
+ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
+ALTER TABLE `zh_stage_pos_9`
+ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
+ALTER TABLE `zh_stage_pos_10`
+ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
+ALTER TABLE `zh_stage_pos_11`
+ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
+ALTER TABLE `zh_stage_pos_12`
+ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
+ALTER TABLE `zh_stage_pos_13`
+ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
+ALTER TABLE `zh_stage_pos_14`
+ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
+ALTER TABLE `zh_stage_pos_15`
+ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
+ALTER TABLE `zh_stage_pos_16`
+ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
+ALTER TABLE `zh_stage_pos_17`
+ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
+ALTER TABLE `zh_stage_pos_18`
+ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
+ALTER TABLE `zh_stage_pos_19`
+ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
+
+
+ALTER TABLE `zh_stage_pos_final_0`
+ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
+ALTER TABLE `zh_stage_pos_final_1`
+ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
+ALTER TABLE `zh_stage_pos_final_2`
+ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
+ALTER TABLE `zh_stage_pos_final_3`
+ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
+ALTER TABLE `zh_stage_pos_final_4`
+ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
+ALTER TABLE `zh_stage_pos_final_5`
+ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
+ALTER TABLE `zh_stage_pos_final_6`
+ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
+ALTER TABLE `zh_stage_pos_final_7`
+ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
+ALTER TABLE `zh_stage_pos_final_8`
+ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
+ALTER TABLE `zh_stage_pos_final_9`
+ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
+ALTER TABLE `zh_stage_pos_final_10`
+ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
+ALTER TABLE `zh_stage_pos_final_11`
+ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
+ALTER TABLE `zh_stage_pos_final_12`
+ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
+ALTER TABLE `zh_stage_pos_final_13`
+ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
+ALTER TABLE `zh_stage_pos_final_14`
+ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
+ALTER TABLE `zh_stage_pos_final_15`
+ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
+ALTER TABLE `zh_stage_pos_final_16`
+ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
+ALTER TABLE `zh_stage_pos_final_17`
+ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
+ALTER TABLE `zh_stage_pos_final_18`
+ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
+ALTER TABLE `zh_stage_pos_final_19`
+ADD COLUMN `qc_minus_qty`  decimal(24,8) NOT NULL DEFAULT 0 COMMENT '计量不计价变更' AFTER `qc_qty`;
+
+ALTER TABLE `zh_stage_change`
+ADD COLUMN `no_value`  tinyint(4) UNSIGNED NOT NULL DEFAULT 0 COMMENT '是否不计价' AFTER `minus`;
+ALTER TABLE `zh_stage_change_final`
+ADD COLUMN `no_value`  tinyint(4) UNSIGNED NOT NULL DEFAULT 0 COMMENT '是否不计价' AFTER `minus`;
+ALTER TABLE `zh_stage_detail`
+ADD COLUMN `no_value`  tinyint(4) UNSIGNED NOT NULL DEFAULT 0 COMMENT '计量不计价' AFTER `unit_price`;

+ 27 - 0
test/app/lib/pm.test.js

@@ -0,0 +1,27 @@
+'use strict';
+
+/**
+ *
+ *
+ * @author Mai
+ * @date
+ * @version
+ */
+
+const { app, assert } = require('egg-mock/bootstrap');
+const pm = require('../../../app/lib/pm.js');
+
+describe('test/app/lib/pm.test.js', () => {
+    it('test pm', function* () {
+        const ctx = app.mockContext();
+        // 模拟登录
+        const postData = {
+            account: '734406061@qq.com',
+            project: 'T201711273363',
+            project_password: 'mai654321',
+        };
+        const result = yield pm.dealCatagory(ctx, postData.project);
+        assert(!!result);
+    });
+
+});