'use strict'; /** * * * @author Ellisran * @date 2020/10/15 * @version */ const status = require('../const/audit').ledger.status; const shenpiConst = require('../const/shenpi'); const _ = require('lodash'); module.exports = options => { /** * 标段校验 中间件 * 1. 读取标段数据(包括属性) * 2. 检验用户是否可见标段(不校验具体权限) * * @param {function} next - 中间件继续执行的方法 * @return {void} */ return function* ledgerAuditCheck(next) { try { if ((this.tender.data.ledger_status === status.uncheck || this.tender.data.ledger_status === status.checkNo) && this.tender.info.shenpi.ledger !== shenpiConst.sp_status.sqspr) { const shenpi_status = this.tender.info.shenpi.ledger; // 进一步比较审批流是否与审批流程设置的相同,不同则替换为固定审批流或固定的终审 const auditList = yield this.service.ledgerAudit.getAllDataByCondition({ where: { tender_id: this.tender.id, times: this.tender.data.ledger_times }, orders: [['audit_order', 'asc']] }); const auditIdList = _.map(auditList, 'audit_id'); if (shenpi_status === shenpiConst.sp_status.gdspl) { const shenpiList = yield this.service.shenpiAudit.getAllDataByCondition({ where: { tid: this.tender.id, sp_type: shenpiConst.sp_type.ledger, sp_status: shenpi_status } }); const shenpiIdList = _.map(shenpiList, 'audit_id'); // 判断2个id数组是否相同,不同则删除原审批流,切换成固定的审批流 if (!_.isEqual(auditIdList, shenpiIdList)) { yield this.service.ledgerAudit.updateNewAuditList(this.tender.data, shenpiIdList); } } else if (shenpi_status === shenpiConst.sp_status.gdzs) { const shenpiInfo = yield this.service.shenpiAudit.getDataByCondition({ tid: this.tender.id, sp_type: shenpiConst.sp_type.ledger, sp_status: shenpi_status }); // 判断最后一个id是否与固定终审id相同,不同则删除原审批流中如果存在的id和添加终审 if (shenpiInfo && shenpiInfo.audit_id !== _.last(auditIdList)) { yield this.service.ledgerAudit.updateLastAudit(this.tender.data, auditList, shenpiInfo.audit_id); } else if (!shenpiInfo) { // 不存在终审人的状态下这里恢复为授权审批人 this.tender.info.shenpi.ledger = shenpiConst.sp_status.sqspr; } } } yield next; } catch (err) { console.log(err); // 输出错误到日志 if (err.stack) { this.logger.error(err); } else { this.getLogger('fail').info(JSON.stringify({ error: err, project: this.session.sessionProject, user: this.session.sessionUser, body: this.session.body, })); } // 重定向值标段管理 this.redirect(this.request.headers.referer); } }; };