| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 | /** * Created by zhang on 2018/9/12. */let logger = require("../../../logs/log_helper").logger;let mongoose = require('mongoose');let material_lib = mongoose.model('std_material_replace_lib');let replace_bills = mongoose.model('std_replace_bills');let replace_material = mongoose.model('std_replace_material');let _=require("lodash");let ration_glj_facade = require('../../ration_glj/facade/ration_glj_facade');let glj_calculate_facade = require('../../ration_glj/facade/glj_calculate_facade');module.exports = {    findMaterial: async function(dataMap,compilationId){        let libMap = {},resultMap={};        for(let key in dataMap) {            let billsLibId = dataMap[key].billsLibId;            let libID = libMap[compilationId + billsLibId] ? libMap[compilationId + billsLibId] : await getLibID(billsLibId, compilationId);            libMap[compilationId + billsLibId] = libID;            if (libID == null) continue;            let bills = await getBills(key, libID);            if (bills == null) continue;            let materialList = await getMaterialByBillsID(bills.ID);            resultMap[key] = {bills:bills,materialMap:_.indexBy(materialList,'code')};        }        return resultMap;    },    replace:async function(datas){        let resultList = [];        let rationMap = _.groupBy(datas,function(item){//先按定额进行分组            return item.glj.rationID;        });        for(let rationID in rationMap){           let result = await eachRationGroup(rationID,rationMap[rationID]);           resultList.push(result);        }        return resultList    }};async function eachRationGroup(rationID,datas) {    let query={rationID:rationID},gljs=[];    for(let d of datas){         query["projectID"] = d.glj.projectID;         gljs.push(await updateRationGLJ(d));    }    if(query.projectID){        let stateResult = await glj_calculate_facade.calculateQuantity(query,null,true);        return {rationID:rationID,name:stateResult.rationName,adjustState:stateResult.adjustState,ration_gljs:gljs}    }else {        throw new Error("人材机的项目ID有问题");    }}async function updateRationGLJ(data) {    let glj = data.glj;    let priceInfo = {        base_price: glj.basePrice,        market_price: glj.marketPrice    };    let [projcetGLJ_n,doc] = await ration_glj_facade.updateRationGLJFromDoc(glj,data.doc,priceInfo);    return {ID:glj.ID,doc:doc}}/*async function doRationGLJUpdate(data) {    let resutl = {};    let doc = data.doc;    let priceInfo = data.priceInfo;    let rg = await ration_glj.findOne(data.query);    let gljListModel = new GLJListModel();    let projectGLJ = getGLJSearchInfo(rg);    for (let key in doc) {        projectGLJ[key] = doc[key]    }    projectGLJ.base_price = priceInfo.base_price;    projectGLJ.market_price = priceInfo.market_price;    let projcetGLJ_n = await gljListModel.modifyGLJ(projectGLJ, rg);    doc.code = projcetGLJ_n.code;    doc.projectGLJID = projcetGLJ_n.id;    if (projcetGLJ_n.unit_price.is_add == 1) {        doc.createType = 'replace';        doc.rcode = projcetGLJ_n.original_code;    } else {        doc.createType = 'normal';        doc.rcode = '';    }    await ration_glj.findOneAndUpdate(data.query, doc);    //取价格    gljListModel.getGLJPrice(projcetGLJ_n);    doc.basePrice = projcetGLJ_n.unit_price.base_price;    doc.marketPrice = projcetGLJ_n.unit_price.market_price;    doc.adjustPrice = projcetGLJ_n.adjust_price;    doc.isAdd = projcetGLJ_n.unit_price.is_add;    resutl.doc = doc;    let stateResult = await glj_calculate_facade.calculateQuantity({        projectID: data.query.projectID,        rationID: data.query.rationID    },null,true);    resutl.adjustState = stateResult.adjustState;    resutl.name = stateResult.rationName;    return resutl;}*/async function getLibID(billsLibId,compilationId) {    let lib = await material_lib.findOne({"compilationId":compilationId,billsLibId:billsLibId});    if(lib) return lib.ID;    return null;}async function getBills(code,libID) {    let bills = await replace_bills.findOne({code:code,libID:libID});    if(bills) return bills;    return null;}async  function getMaterialByBillsID(billsItemID) {    return await replace_material.find({billsItemID:billsItemID},['code','name','specs','type','unit']);}
 |