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']);
- }
|