info_price_facade.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. /**
  2. * Created by zhang on 2020/7/20
  3. */
  4. module.exports={
  5. getOptions,
  6. getDataByCondition,
  7. mutiApplyInfoPrice
  8. };
  9. const mongoose = require('mongoose');
  10. let infoLibModel = mongoose.model("std_price_info_lib");
  11. let infoItemsModel = mongoose.model("std_price_info_items");
  12. let infoAreasModel = mongoose.model("std_price_info_areas");
  13. let unitPriceModel = mongoose.model("unit_price");
  14. let _ = require("lodash");
  15. let gljUtil = require('../../../public/web/gljUtil');
  16. const scMathUtil = require('../../../public/scMathUtil').getUtil();
  17. async function getOptions(data,compilation){//data 是预留对象,暂时不用
  18. let compilationID = compilation._id;
  19. let areaMap={};
  20. let periodMap={};
  21. let areas =await infoAreasModel.find({"compilationID":compilationID}).lean();
  22. let libList = await infoLibModel.find({"compilationID":compilationID}).lean();
  23. for(let l of libList){
  24. // for(let area of l.areas){
  25. // if(!areaMap[area]) areas.push(area);
  26. // }
  27. //2020-05
  28. let periodArray = l.period.split("-");
  29. periodMap[periodArray[0]]?periodMap[periodArray[0]].push(periodArray[1]):periodMap[periodArray[0]]=[periodArray[1]]
  30. }
  31. for(let key in periodMap){
  32. periodMap[key] = _.sortBy(periodMap[key]);
  33. }
  34. return {areas:areas,periodMap:periodMap}
  35. }
  36. async function getDataByCondition(data,compilation){
  37. let result = {};
  38. data.condition["compilationID"] = compilation._id;
  39. if(data.keyWord) data.condition.name = {"$regex":new RegExp(data.keyWord, "i")};
  40. if(data.lastID){ //有最后一行说明是查询下一页
  41. data.condition["_id"] = {$gt:mongoose.Types.ObjectId(data.lastID)};
  42. }else{
  43. result.totalSize = await infoItemsModel.find(data.condition).count();
  44. }
  45. result.items = await infoItemsModel.find(data.condition).lean().sort({"_id":1}).limit(50);
  46. return result;
  47. }
  48. async function mutiApplyInfoPrice(data,compilation){
  49. data.condition["compilationID"] = compilation._id;
  50. let infoPrices = await infoItemsModel.find(data.condition).lean();
  51. let tasks = [];
  52. let projectGLJMap = {};
  53. for(let info of infoPrices){
  54. let index = gljUtil.getIndex(info,["name","specs","unit"]);
  55. if(data.pgljMap[index]){
  56. for(let obj of data.pgljMap[index]){
  57. let infoPrice = gljUtil.getInfoMarketPrice(info,data.taxType);
  58. infoPrice = scMathUtil.roundToString(infoPrice,data.decimal);
  59. let doc = {'market_price':infoPrice,'priceFrom':data.priceFrom};
  60. let task = {
  61. updateOne:{
  62. filter:{'id':obj.unitPriceID},
  63. update:doc
  64. }
  65. };
  66. tasks.push(task);
  67. projectGLJMap[obj.pgljID] = {index:obj.fullIndex,doc:doc};
  68. }
  69. }
  70. }
  71. if(tasks.length > 0) await unitPriceModel.bulkWrite(tasks);
  72. return projectGLJMap;
  73. }