| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 | 'use strict';/** * 中间计量数据模型 * * @author Mai * @date 2018/6/27 * @version */const auditConst = require('../const/audit').flow;const moment = require('moment');module.exports = app => {    class Measure extends app.BaseService {        /**         * 构造函数         *         * @param {Object} ctx - egg全局变量         * @return {void}         */        constructor(ctx) {            super(ctx);            this.tableName = 'measure';        }        /**         * 新增中间计量         * @param code - 编号         * @param date - 年月         * @param stage - 所属期         * @returns {Promise<void>}         */        async add(tenderId, code, userId, date, stage) {            const count = await this.ctx.service.measure.count({                tender_id: tenderId, code: code,            });            if (count === 0) {                const newData = {                    tender_id: tenderId,                    mid: this.uuid.v4(),                    code: code,                    in_time: new Date(),                    user_id: userId,                    status: auditConst.status.uncheck,                    valid: true,                };                const result = await this.ctx.service.measure.db.insert(this.tableName, newData);                if (result.affectedRow === 0) {                    throw '新增中间计量失败';                }            } else {                throw '您输入的编号已存在';            }        }        async invalid(mid, userId) {            const measure = this.getDataByCondition({mid: mid});            if (measure.user_id === userId) {                const result = await this.update({valid: false}, {mid: mid});                return result.affectedRow === 0;            } else {                throw '数据错误';            }        }        async _getAssistData(m) {            m.in_time_str = moment(m.in_time_str).format('YYYYMM');            if (m.times > 1 && m.status === auditConst.status.checkNo) {                m.curAuditor = await this.ctx.service.measureAudit.getAuditor(m.mid, m.user_id, m.times);            } else {                m.curAuditor = await this.ctx.service.measureAudit.getCurAuditor(m.mid, m.times);            }            m.user = await this.ctx.service.projectAccount.getAccountInfoById(m.user_id);        }        async joinMeasure(tenderId, audit_id) {            const sql = 'SELECT M.* FROM ?? As M, ?? As MA ' +                ' WHERE M.`tender_id` = ? and MA.`audit_id` = ? and M.times = MA.times and MA.`order` > 0 and M.valid = true';            const sqlParam = [this.tableName, this.ctx.service.measureAudit.tableName, tenderId, audit_id];            const measures = await this.db.query(sql, sqlParam);            for (const m of measures) {                await this._getAssistData(m);            }            return measures;        }        async measureList(condition) {            const measures = await this.getAllDataByCondition({where: condition});            for (const m of measures) {                await this._getAssistData(m);            }            return measures;        }        async measureData (condition) {            const measure = await this.getDataByCondition(condition);            await this._getAssistData(measure);            return measure;        }    }    return Measure;};
 |