MaiXinRong пре 3 година
родитељ
комит
f80571fad9

+ 2 - 2
app/controller/ledger_controller.js

@@ -473,11 +473,11 @@ module.exports = app => {
          */
         async loadExplodeData(ctx) {
             try {
-                const ledgerData = ctx.tender.ledgerReadOnly
+                const ledgerData = ctx.tender.ledgerReadOnly && ctx.tender.his
                     ? await ctx.helper.loadLedgerDataFromOss(ctx.tender.his.bills_file)
                     : await ctx.service.ledger.getData(ctx.tender.id);
                 const posData = this.ctx.tender.data.measure_type === measureType.tz.value
-                    ? (ctx.tender.ledgerReadOnly
+                    ? (ctx.tender.ledgerReadOnly && ctx.tender.his
                         ? await ctx.helper.loadLedgerDataFromOss(ctx.tender.his.pos_file)
                         : await ctx.service.pos.getPosData({tid: ctx.tender.id}))
                     : [];

+ 1 - 3
app/controller/stage_controller.js

@@ -269,9 +269,7 @@ module.exports = app => {
         async _getStagePosData(ctx) {
             let curStageData,
                 preStageData;
-            const posData = ctx.stage.ledgerHis
-                ? await ctx.helper.loadLedgerDataFromOss(ctx.stage.ledgerHis.pos_file)
-                : await ctx.service.pos.getPosDataWithAddStageOrder({ tid: ctx.tender.id });
+            const posData = await ctx.service.pos.getPosDataWithAddStageOrder({ tid: ctx.tender.id });
             // 根据当前人,或指定对象查询数据
             // console.time('cur');
             if (ctx.stage.readOnly) {

+ 3 - 1
app/middleware/tender_check.js

@@ -46,7 +46,9 @@ module.exports = options => {
             if (tender.data.project_id !== this.session.sessionProject.id) {
                 throw '您无权查看该项目';
             }
-            tender.his = yield this.service.ledgerHistory.getLatestHistory(tender.id);
+            tender.his = tender.data.ledger_status === auditConst.status.checkNo
+                ? yield this.service.ledgerHistory.getDataById(tender.data.his_id)
+                : null;
             const accountId = this.session.sessionUser.accountId;
             const advanceAuditors = yield this.service.advanceAudit.getAllAuditors(tender.id);
             const advanceAuditorsId = this.helper._.map(advanceAuditors, 'audit_id');

+ 27 - 0
app/service/ledger_history.js

@@ -65,6 +65,33 @@ module.exports = app => {
 
         /**
          * 备份
+         * @param {Object} tender - 标段
+         * @return {Promise<void>} - 新增备份id
+         * @private
+         */
+        async backupStageLedgerHistory(stage) {
+            const now = new Date();
+            const timestamp = (now).getTime();
+
+            const billsHis = `${this.ctx.session.sessionProject.id}/${stage.tid}/ledger/bills${timestamp}-s.json`;
+            const bills = await this.ctx.service.ledger.getData(stage.tid);
+            await this.ctx.hisOss.put(this.ctx.hisOssPath + billsHis, Buffer.from(JSON.stringify(bills), 'utf8'));
+
+            const posHis = `${this.ctx.session.sessionProject.id}/${stage.tid}/ledger/pos${timestamp}-s.json`;
+            const pos = await this.ctx.service.pos.getPosData({ tid: stage.tid });
+            await this.ctx.hisOss.put(this.ctx.hisOssPath + posHis, Buffer.from(JSON.stringify(pos), 'utf8'));
+
+            const result = await this.db.insert(this.tableName, {
+                pid: this.ctx.session.sessionProject.id, tid: stage.tid, sid: stage.id,
+                in_time: now,
+                bills_file: billsHis, pos_file: posHis,
+            });
+
+            return result.insertId;
+        }
+
+        /**
+         * 备份
          * @param {Object} revise - 修订
          * @return {Promise<void>} - 新增备份id
          * @private

+ 14 - 2
app/service/stage_audit.js

@@ -470,7 +470,19 @@ module.exports = app => {
                     await this.ctx.helper.sendWechat(nextAudit.aid, smsTypeConst.const.JL, smsTypeConst.judge.approval.toString(), wxConst.template.stage, wechatData);
                 } else {
                     await this.ctx.service.tenderTag.saveTenderTag(this.ctx.tender.id, {stage_time: new Date()}, transaction);
-                    const ledgerHis = await this.ctx.service.ledgerHistory.getLatestHistory(this.ctx.tender.id);
+                    let his_id;
+                    if (this.ctx.tender.measureType === measureType.tz.value) {
+                        const ledgerHis = await this.ctx.service.ledgerHistory.getLatestHistory(this.ctx.tender.id);
+                        his_id = ledgerHis.id;
+                    } else {
+                        const sapCount = await this.ctx.service.pos.count({ add_stage: this.ctx.stage.id });
+                        if (sapCount > 0) {
+                            his_id = await this.ctx.service.ledgerHistory.backupStageLedgerHistory(this.ctx.stage);
+                        } else {
+                            const ledgerHis = await this.ctx.service.ledgerHistory.getLatestHistory(this.ctx.tender.id);
+                            his_id = ledgerHis.id;
+                        }
+                    }
                     // 本期结束
                     // 生成截止本期数据 final数据
                     await this.ctx.service.stageBillsFinal.generateFinalData(transaction, this.ctx.tender, this.ctx.stage);
@@ -486,7 +498,7 @@ module.exports = app => {
                         sf_tp: sfPay.tp,
                         tp_history: JSON.stringify(this.ctx.stage.tp_history),
                         cache_time_r: this.ctx.stage.cache_time_l,
-                        his_id: ledgerHis.id,
+                        his_id,
                     });
 
                     // 添加短信通知-审批通过提醒功能

+ 3 - 3
db_script/ledger_his.js

@@ -81,8 +81,8 @@ const saveReviseLedgerHis = async function (tender, revise) {
     const billsHis = revise.bills_file;
     const posHis = revise.pos_file;
 
-    const result = await querySql('Insert Into zh_ledger_history(pid, tid, in_time, bills_file, pos_file, rid, rorder) Values(?, ?, ?, ?, ?, ?, ?)',
-        [tender.project_id, tender.id, now, billsHis, posHis, revise.id, revise.corder]);
+    const result = await querySql('Insert Into zh_ledger_history(pid, tid, in_time, bills_file, pos_file, rid, rorder, valid) Values(?, ?, ?, ?, ?, ?, ?, ?)',
+        [tender.project_id, tender.id, now, billsHis, posHis, revise.id, revise.corder, revise.valid]);
 
     if (!result) throw 'err';
     return result.insertId;
@@ -99,7 +99,7 @@ const doCompleteTender = async function(t) {
             }
             if (r.bills_file) {
                 r.his_id = await saveReviseLedgerHis(t, r);
-                his_id = r.his_id;
+                if (r.valid) his_id = r.his_id;
                 await querySql('Update zh_ledger_revise Set his_id = ? Where id = ?', [his_id, r.id]);
             } else {
                 if (r.status !== 1) withoutHisRevise.push(r);

+ 4 - 5
sql/update.sql

@@ -221,9 +221,6 @@ ALTER TABLE `zh_tender`
 ADD COLUMN `bills_file`  varchar(255) NOT NULL DEFAULT '' COMMENT '台账-清单文件' AFTER `has_rela`,
 ADD COLUMN `pos_file`  varchar(255) NOT NULL DEFAULT '' COMMENT '台账-计量单元文件' AFTER `bills_file`;
 
-UPDATE `zh_ledger_revise` SET bills_file = replace(bills_file, '/revise', 'revise') WHERE not ISNULL(bills_file);
-UPDATE `zh_ledger_revise` SET pos_file = replace(pos_file, '/revise', 'revise') WHERE not ISNULL(pos_file);
-
 CREATE TABLE `zh_material_checklist`  (
   `id` int(11) NOT NULL AUTO_INCREMENT,
   `tid` int(11) NOT NULL COMMENT '标段id',
@@ -261,12 +258,11 @@ ALTER TABLE `zh_tender`
 ADD COLUMN `his_id`  bigint(20) UNSIGNED NOT NULL DEFAULT 0 COMMENT '台账历史数据id' AFTER `s2b_dagl_limit`;
 
 ALTER TABLE `zh_stage`
-ADD COLUMN `his_id`  bigint(20) UNSIGNED NOT NULL COMMENT '历史台账id' AFTER `tp_history`;
+ADD COLUMN `his_id`  bigint(20) UNSIGNED NOT NULL DEFAULT 0 COMMENT '历史台账id' AFTER `tp_history`;
 
 ALTER TABLE `zh_stage_pay`
 ADD COLUMN `postil`  varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '本期批注' AFTER `start_stage_order`;
 
-
 ALTER TABLE `zh_tender` ADD `c_code_rules` TEXT NULL DEFAULT NULL COMMENT '变更立项及申请的编号规则json' AFTER `c_rule_first`;
 
 CREATE TABLE `zh_change_project`  (
@@ -320,3 +316,6 @@ CREATE TABLE `zh_change_project_audit`  (
   `opinion` varchar(1000) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT '审批意见',
   PRIMARY KEY (`id`) USING BTREE
 ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_unicode_ci COMMENT = '变更立项审批表';
+
+UPDATE `zh_ledger_revise` SET bills_file = replace(bills_file, '/revise', 'revise') WHERE not ISNULL(bills_file);
+UPDATE `zh_ledger_revise` SET pos_file = replace(pos_file, '/revise', 'revise') WHERE not ISNULL(pos_file);