| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238 | /** * 计价规则标准库业务逻辑 * * @author CaiAoLin * @date 2017/8/31 * @version */import mongoose from "mongoose";import BaseModel from "../../common/base/base_model";import CompilationModel from "./compilation_model";import {default as EngineeringConst, List as EngineeringList} from "../../common/const/engineering";class EngineeringLibModel extends BaseModel {    /**     * 构造函数     *     * @return {void}     */    constructor() {        let parent = super();        parent.model = mongoose.model("engineering_lib");        parent.init();    }    /**     * 获取标准库数据     *     * @param {Object} data     * @param {Number} engineering     * @return {Promise}     */    async getLib(data, engineering) {        let result = {};        if (data.length <= 0) {            return result;        }        let id = '';        for(let tmp of data) {            if (tmp.engineering === engineering) {                id = tmp.engineering_id;                break;            }        }        if (id === '') {            return result;        }        let condition = {_id: id};        return this.findDataByCondition(condition);    }    async getLibsByValuationID(valuationID){        return this.findDataByCondition({valuationID:valuationID},null,false);    }    async deleteByValuationID(valuationID){        return await this.db.delete({valuationID:valuationID});    }    //添加空的默认的所有标准库    /**     * @param valuationID     * @returns {Promise.<*>}     */    async addStdLib(valuationID){        let stdLibs = [];        for(let eng of EngineeringList){            let tem = {                glj_col:{showAdjustPrice:false},                valuationID:valuationID,                name:eng.name,                engineering:eng.value            };            stdLibs.push(tem);        }        let result = await this.db.create(stdLibs);        return result;    }    async addEngineer(data){        data.glj_col = {showAdjustPrice:false};        let result = await this.db.create(data);        return result;    }    /**     * 新增标准库     *     * @param {String} valuationId     * @param {Object} data     * @return {Promise}     */    async addLib(engineerId, data) {        if(data.glj_col){            data.glj_col =  JSON.parse(data.glj_col);        }        data.isInstall == 'true'?data.isInstall=true:data.isInstall=false;        let result = false;        data = this.filterLibData(data);        try {            let engineeringLib = await this.findDataByCondition({_id:engineerId});            if(engineeringLib){                // 存在则直接更新                delete data.id;                delete data.section;                let condition = {_id: engineerId};                result = await this.db.update(condition, data);                result = result.ok === 1;            }else {                throw  new Error("找不到对应的工程专业");            }        } catch (error) {            console.log(error);            result = false;        }        return result;    }    /**     * 过滤计价数据     *     * @param {Object} data     * @return {Object}     */    filterLibData(data) {        if (Object.keys(data).length <= 0 || data.section === undefined) {            console.log('1');            throw '数据有误';        }        // 检测专业工程是否合法        data.engineering = parseInt(data.engineering);        let match = false;        for(let index in EngineeringConst) {            if (EngineeringConst[index] === data.engineering) {                match = true;                break;            }        }        if (!match) {            throw '工程专业错误';        }        // 判断标准清单        data.bill_lib = this._validLib(data.bill_lib);        // 判断定额库        data.ration_lib = this._validLib(data.ration_lib);        // 判断工料机库        data.glj_lib = this._validLib(data.glj_lib);        // 判断清单指引库        data.billsGuidance_lib = this._validLib(data.billsGuidance_lib);        /*// 判断费率标准        data.fee_lib = this._validLib(data.fee_lib);*/        // 判断人工系数        data.artificial_lib = this._validLib(data.artificial_lib);        //计税方式组合        data.tax_group = this._validLib(data.tax_group);        return data;    }    /**     * 校验库数据     *     * @param {Object} libData     * @return {Object}     */    _validLib(libData) {        let result = [];        // 判断标准库        if (libData === undefined || libData ===null ||libData === '') {            return result;//throw '标准库不能为空'; 按新需求,标准库等不做非空判断        }        libData = libData instanceof Array ? libData : [libData];        for(let tmp in libData) {            result[tmp] = JSON.parse(libData[tmp]);        }        return result;    }    /**     * 获取对应标准库数量     *     * @param {Object} valuationData     * @return {Object}     */    async getLibCount(valuationData) {        let result = {};        if (valuationData.engineering_list === undefined || valuationData.engineering_list.length <= 0) {            return result;        }        // 整理需要查找的数据        let findIdList = [];        for(let engineering of valuationData.engineering_list) {            findIdList.push(engineering.engineering_id);        }        let condition = {_id: {$in: findIdList}};        let libData = await this.findDataByCondition(condition, null, false);        if (libData === null) {            return result;        }        // 整理数据        let countData = {};        for(let tmp of libData) {            countData[tmp._id] = {                bill_count: tmp.bill_lib.length,                ration_count: tmp.ration_lib.length,                glj_count: tmp.glj_lib.length,                fee_count: tmp.fee_lib.length,                artificial_count: tmp.artificial_lib.length,                program_count: tmp.program_lib.length,            };        }        for(let engineering of valuationData.engineering_list) {            if (countData[engineering.engineering_id] !== undefined) {                result[engineering.engineering] = countData[engineering.engineering_id];            }        }        return result;    }}export default EngineeringLibModel;
 |