material_replace_facade.js 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. /**
  2. * Created by zhang on 2018/8/22.
  3. */
  4. import mongoose from "mongoose";
  5. const uuidV1 = require('uuid/v1');
  6. let moment = require("moment");
  7. let compilationModel = mongoose.model("compilation");
  8. let materialLibModel = mongoose.model("std_material_replace_lib");
  9. let replaceBillModel = mongoose.model("std_replace_bills");
  10. let replaceMaterialModel = mongoose.model("std_replace_material");
  11. let StdBillsLib = mongoose.model('std_bills_lib_list');
  12. let stdBillsModel = mongoose.model('std_bills_lib_bills');
  13. const stdGljLibModel = mongoose.model('std_glj_lib_map');
  14. let materialReplaceLib = {
  15. findByCondition:async function(conditions,options,single=true){
  16. if(single == true){
  17. return await materialLibModel.findOne(conditions,options);
  18. }else {
  19. return await materialLibModel.find(conditions,options);
  20. }
  21. },
  22. addLib : async function (data){
  23. let now = new Date().getTime();
  24. let dateStr = moment(now).format('YYYY-MM-DD HH:mm:ss');
  25. //取编办信息
  26. let compilation = await compilationModel.findOne({_id:data.compilationId});
  27. //取清单规则信息
  28. let billLib = await StdBillsLib.findOne({billsLibId:data.billsLibId});
  29. if(compilation && billLib){
  30. let newLib = {
  31. creator: data.userAccount,
  32. createDate: now,
  33. recentOpr: [{operator: data.userAccount, operateDate: dateStr}],
  34. name: data.name,
  35. compilationId: data.compilationId,
  36. compilationName: compilation.name,
  37. billsLibId:billLib.billsLibId,
  38. billsLibName:billLib.billsLibName,
  39. deleted: false
  40. };
  41. newLib.ID = uuidV1();
  42. return await materialLibModel.create(newLib);
  43. }else {
  44. throw new Error("编办或清单规则有误!");
  45. }
  46. },
  47. saveLib:async function(param) {
  48. return await materialLibModel.findOneAndUpdate(param.query,param.data,{new:true});
  49. },
  50. deleteLibByID:async function(ID){
  51. //删除材料数据
  52. await replaceMaterialModel.deleteMany({libID:ID});
  53. //删除清单数据
  54. await replaceBillModel.deleteMany({libID:ID});
  55. return await materialLibModel.deleteOne({ID:ID});
  56. },
  57. findGLJLibByComID:async function(compilationId){//跟据费用定额查找工料机库
  58. return await stdGljLibModel.findOne({compilationId:compilationId},['ID']);
  59. },
  60. findBillsByLibID:async function(libID){
  61. return await replaceBillModel.find({libID:libID});
  62. },
  63. saveBills:async function(data){
  64. let addList = [],updateList =[],deleteList=[];
  65. for(let d of data){
  66. if(d.type == 'add') addList.push(d);
  67. if(d.type == 'update') updateList.push(d);
  68. if(d.type == 'delete') deleteList.push(d);
  69. }
  70. let p = await Promise.all([addBills(addList),updateBills(updateList),deleteBills(deleteList)]);
  71. return p;
  72. }
  73. };
  74. async function addBills(datas) {
  75. let newBills = [],missCodes=[];
  76. for(let d of datas){
  77. //先查找清单规则库找到对应的清单
  78. let stdBill = await stdBillsModel.findOne({billsLibId:d.billsLibId,code:d.code});
  79. if(stdBill){
  80. let temBill = {
  81. libID:d.libID,
  82. code:d.code,
  83. name:stdBill.name,
  84. };
  85. temBill.ID = uuidV1();
  86. newBills.push(temBill);
  87. }else {
  88. missCodes.push(d.code);
  89. }
  90. }
  91. if(newBills.length>0){
  92. await replaceBillModel.create(newBills);
  93. }
  94. return {type:'add',list:newBills,missCodes:missCodes};
  95. }
  96. async function updateBills(datas) {
  97. let tasks = [],list=[],missCodes = [];
  98. for(let d of datas){
  99. let updateData = null;
  100. let filter = {libID:d.libID, code:d.oldCode};
  101. if(d.newCode && d.newCode !=''){//说明是要替换清单
  102. let stdBill = await stdBillsModel.findOne({billsLibId:d.billsLibId,code:d.newCode});
  103. if(stdBill){
  104. updateData = {code:d.newCode, name:stdBill.name};
  105. }else {
  106. missCodes.push(d.newCode);
  107. }
  108. }else {
  109. updateData = d.updateData;
  110. }
  111. if(updateData){
  112. let task = {
  113. updateOne:{filter:filter, update :updateData}
  114. };
  115. tasks.push(task);
  116. list.push({code:d.oldCode,updateData:updateData})
  117. }
  118. }
  119. if(tasks.length > 0) await replaceBillModel.bulkWrite(tasks);
  120. return {type:'update',list:list,missCodes:missCodes};
  121. }
  122. async function deleteBills(datas) {
  123. let IDList = [];
  124. for(let d of datas){
  125. if(d.ID) IDList.push(d.ID)
  126. }
  127. await replaceBillModel.deleteMany({ID:{"$in": IDList}});
  128. return {type:'delete',list:IDList};
  129. }
  130. export default materialReplaceLib