123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- /**
- * Created by zhang on 2020/7/20
- */
- module.exports={
- getOptions,
- getDataByCondition,
- mutiApplyInfoPrice
- };
- const mongoose = require('mongoose');
- let infoLibModel = mongoose.model("std_price_info_lib");
- let infoItemsModel = mongoose.model("std_price_info_items");
- let infoAreasModel = mongoose.model("std_price_info_areas");
- let unitPriceModel = mongoose.model("unit_price");
- let _ = require("lodash");
- let gljUtil = require('../../../public/web/gljUtil');
- const scMathUtil = require('../../../public/scMathUtil').getUtil();
- async function getOptions(data,compilation){//data 是预留对象,暂时不用
- let compilationID = compilation._id;
- let areaMap={};
- let periodMap={};
- let areas =await infoAreasModel.find({"compilationID":compilationID}).lean();
- let libList = await infoLibModel.find({"compilationID":compilationID}).lean();
- for(let l of libList){
- // for(let area of l.areas){
- // if(!areaMap[area]) areas.push(area);
- // }
- //2020-05
- let periodArray = l.period.split("-");
- periodMap[periodArray[0]]?periodMap[periodArray[0]].push(periodArray[1]):periodMap[periodArray[0]]=[periodArray[1]]
- }
-
-
- for(let key in periodMap){
- periodMap[key] = _.sortBy(periodMap[key]);
- }
- return {areas:areas,periodMap:periodMap}
- }
- async function getDataByCondition(data,compilation){
- let result = {};
- data.condition["compilationID"] = compilation._id;
- if(data.keyWord) data.condition.name = {"$regex":new RegExp(data.keyWord, "i")};
- if(data.lastID){ //有最后一行说明是查询下一页
- data.condition["_id"] = {$gt:mongoose.Types.ObjectId(data.lastID)};
- }else{
- result.totalSize = await infoItemsModel.find(data.condition).count();
- }
- result.items = await infoItemsModel.find(data.condition).lean().sort({"_id":1}).limit(50);
- return result;
- }
- async function mutiApplyInfoPrice(data,compilation){
- data.condition["compilationID"] = compilation._id;
- let infoPrices = await infoItemsModel.find(data.condition).lean();
- let tasks = [];
- let projectGLJMap = {};
- for(let info of infoPrices){
- let index = gljUtil.getIndex(info,["name","specs","unit"]);
- if(data.pgljMap[index]){
- for(let obj of data.pgljMap[index]){
- let infoPrice = gljUtil.getInfoMarketPrice(info,data.taxType);
- infoPrice = scMathUtil.roundToString(infoPrice,data.decimal);
- let doc = {'market_price':infoPrice,'priceFrom':data.priceFrom};
- let task = {
- updateOne:{
- filter:{'id':obj.unitPriceID},
- update:doc
- }
- };
- tasks.push(task);
- projectGLJMap[obj.pgljID] = {index:obj.fullIndex,doc:doc};
- }
- }
- }
- if(tasks.length > 0) await unitPriceModel.bulkWrite(tasks);
- return projectGLJMap;
- }
|