| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 | /** * Created by zhang on 2018/1/31. */import {installSectionModel,installFeeItemModel} from "../../complementary_ration_lib/models/schemas";import installationFeeModel from "../models/installation_fee";import engineeringModel from "../../users/models/schema/engineering_lib";const uuidV1 = require('uuid/v1');let consts = require('../../main/models/project_consts')module.exports={    copyInstallationFeeFromLib:copyInstallationFeeFromLib,    updateInstallationFee:updateInstallationFee,    getData:getData};async function updateInstallationFee(projectID,updateData) {    let result = {};    let tasks = generateUpdateTask(projectID,updateData);    if(tasks.length>0){         result =await installationFeeModel.bulkWrite(tasks);    }    return result;}function generateUpdateTask(projectID,updateData) {    let tasks = [];    if(updateData){        if(updateData instanceof Array){            for(let ud of updateData){                let [uquery,udoc] = createUpdateQuery(projectID,ud);                let task={                    updateOne:{                        filter:uquery,                        update :udoc                    }                };                tasks.push(task);            }        } else {            let [query,doc] = createUpdateQuery(projectID,updateData);            let task={                updateOne:{                    filter:query,                    update :doc                }            };            tasks.push(task);        }    }    return tasks;}function createUpdateQuery(projectID,data) {    let updateKey = data.type+'.ID';    let query = {        projectID:projectID,        ID:data.ID,    };    query[updateKey] = data.itemID;    let udoc = {};    for(let property in data.doc){        udoc[data.type+'.$.'+property] = data.doc[property];    }    return [query,udoc];}async function copyInstallationFeeFromLib(projectID,engineering_id) {    //安装增加费用内嵌文档的方式    let engineering = await engineeringModel.findById(engineering_id);    let ration_lib = engineering.ration_lib;    let installationFeeList = [];    for(let rl of ration_lib){       let installFeeItems = await installFeeItemModel.find({'rationRepId':rl.id});       let installSections = await installSectionModel.find({'rationRepId':rl.id});       let positionMap = {};       let newInstallationFee = {           libID:rl.id,           libName:rl.name,           projectID:projectID       };        newInstallationFee.ID = uuidV1();       let create = false;       if(installFeeItems && installFeeItems.length > 0) {//费用项           create = true;           let tem_installFeeItem = [];           for(let ifee of installFeeItems){                let tem_fee ={                    feeItem:ifee.feeItem,                    feeType:ifee.feeType,                    position:ifee.position,                    ID:ifee.ID                };               positionMap[ifee.ID] = ifee.position;//设置选取位置对应表,为给规项赋值               tem_installFeeItem.push(tem_fee);           }           newInstallationFee.installFeeItem = tem_installFeeItem;       }       if(installSections && installSections.length > 0){//章节项           create = true;           let tem_installSections = [];           let tem_feeRules = [];           for(let isect of installSections){                let tem_sec={                    ID:isect.ID,                    name:isect.name,                    feeItemId:isect.feeItemId                };                if(isect.feeRule && isect.feeRule.length > 0){//规则项                    tem_sec.feeRuleId = isect.feeRule[0].ID; //选中第一个                    for(let ifeeR of isect.feeRule){                        let tem_feeRule = {                            ID: ifeeR.ID,                            code: ifeeR.code,                            rule: ifeeR.rule,                            base: ifeeR.base,                            feeRate: ifeeR.feeRate,                            labour: ifeeR.labour,                            material: ifeeR.material,                            machine: ifeeR.machine,                            sectionId:isect.ID,                            feeItemId:isect.feeItemId,                            position:positionMap[isect.feeItemId]                        };                        tem_feeRules.push(tem_feeRule);                    }                }else {                    tem_sec.feeRuleId = "";                }               tem_installSections.push(tem_sec);           }           newInstallationFee.installSection = tem_installSections;           newInstallationFee.feeRule = tem_feeRules;       }       if(create==true){           installationFeeList.push(newInstallationFee);       }    }    console.log(installationFeeList);    if(installationFeeList.length > 0){        await installationFeeModel.insertMany(installationFeeList);    }}function getData(projectID, callback) {    installationFeeModel.find({'projectID': projectID}, (err, datas) => {        if (err) {            callback(1, '', null);        } else {            callback(0, consts.projectConst.INSTALLATION_FEE, datas);        }    })}
 |