installation_facade.js 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. /**
  2. * Created by zhang on 2018/1/31.
  3. */
  4. import {installSectionModel,installFeeItemModel} from "../../complementary_ration_lib/models/schemas";
  5. import installationFeeModel from "../models/installation_fee";
  6. import engineeringModel from "../../users/models/schema/engineering_lib";
  7. const uuidV1 = require('uuid/v1');
  8. let consts = require('../../main/models/project_consts')
  9. module.exports={
  10. copyInstallationFeeFromLib:copyInstallationFeeFromLib,
  11. updateInstallationFee:updateInstallationFee,
  12. getData:getData
  13. };
  14. async function updateInstallationFee(projectID,updateData) {
  15. let result = {};
  16. let tasks = generateUpdateTask(projectID,updateData);
  17. if(tasks.length>0){
  18. result =await installationFeeModel.bulkWrite(tasks);
  19. }
  20. return result;
  21. }
  22. function generateUpdateTask(projectID,updateData) {
  23. let tasks = [];
  24. if(updateData){
  25. if(updateData instanceof Array){
  26. for(let ud of updateData){
  27. let [uquery,udoc] = createUpdateQuery(projectID,ud);
  28. let task={
  29. updateOne:{
  30. filter:uquery,
  31. update :udoc
  32. }
  33. };
  34. tasks.push(task);
  35. }
  36. } else {
  37. let [query,doc] = createUpdateQuery(projectID,updateData);
  38. let task={
  39. updateOne:{
  40. filter:query,
  41. update :doc
  42. }
  43. };
  44. tasks.push(task);
  45. }
  46. }
  47. return tasks;
  48. }
  49. function createUpdateQuery(projectID,data) {
  50. let updateKey = data.type+'.ID';
  51. let query = {
  52. projectID:projectID,
  53. ID:data.ID,
  54. };
  55. query[updateKey] = data.itemID;
  56. let udoc = {};
  57. for(let property in data.doc){
  58. udoc[data.type+'.$.'+property] = data.doc[property];
  59. }
  60. return [query,udoc];
  61. }
  62. async function copyInstallationFeeFromLib(projectID,engineering_id) {
  63. //安装增加费用内嵌文档的方式
  64. let engineering = await engineeringModel.findById(engineering_id);
  65. let ration_lib = engineering.ration_lib;
  66. let installationFeeList = [];
  67. for(let rl of ration_lib){
  68. let installFeeItems = await installFeeItemModel.find({'rationRepId':rl.id});
  69. let installSections = await installSectionModel.find({'rationRepId':rl.id});
  70. let positionMap = {};
  71. let newInstallationFee = {
  72. libID:rl.id,
  73. libName:rl.name,
  74. projectID:projectID
  75. };
  76. newInstallationFee.ID = uuidV1();
  77. let create = false;
  78. if(installFeeItems && installFeeItems.length > 0) {//费用项
  79. create = true;
  80. let tem_installFeeItem = [];
  81. for(let ifee of installFeeItems){
  82. let tem_fee ={
  83. feeItem:ifee.feeItem,
  84. feeType:ifee.feeType,
  85. position:ifee.position,
  86. ID:ifee.ID
  87. };
  88. positionMap[ifee.ID] = ifee.position;//设置选取位置对应表,为给规项赋值
  89. tem_installFeeItem.push(tem_fee);
  90. }
  91. newInstallationFee.installFeeItem = tem_installFeeItem;
  92. }
  93. if(installSections && installSections.length > 0){//章节项
  94. create = true;
  95. let tem_installSections = [];
  96. let tem_feeRules = [];
  97. for(let isect of installSections){
  98. let tem_sec={
  99. ID:isect.ID,
  100. name:isect.name,
  101. feeItemId:isect.feeItemId
  102. };
  103. if(isect.feeRule && isect.feeRule.length > 0){//规则项
  104. tem_sec.feeRuleId = isect.feeRule[0].ID; //选中第一个
  105. for(let ifeeR of isect.feeRule){
  106. let tem_feeRule = {
  107. ID: ifeeR.ID,
  108. code: ifeeR.code,
  109. rule: ifeeR.rule,
  110. base: ifeeR.base,
  111. feeRate: ifeeR.feeRate,
  112. labour: ifeeR.labour,
  113. material: ifeeR.material,
  114. machine: ifeeR.machine,
  115. sectionId:isect.ID,
  116. feeItemId:isect.feeItemId,
  117. position:positionMap[isect.feeItemId]
  118. };
  119. tem_feeRules.push(tem_feeRule);
  120. }
  121. }else {
  122. tem_sec.feeRuleId = "";
  123. }
  124. tem_installSections.push(tem_sec);
  125. }
  126. newInstallationFee.installSection = tem_installSections;
  127. newInstallationFee.feeRule = tem_feeRules;
  128. }
  129. if(create==true){
  130. installationFeeList.push(newInstallationFee);
  131. }
  132. }
  133. console.log(installationFeeList);
  134. if(installationFeeList.length > 0){
  135. await installationFeeModel.insertMany(installationFeeList);
  136. }
  137. }
  138. function getData(projectID, callback) {
  139. installationFeeModel.find({'projectID': projectID}, (err, datas) => {
  140. if (err) {
  141. callback(1, '', null);
  142. } else {
  143. callback(0, consts.projectConst.INSTALLATION_FEE, datas);
  144. }
  145. })
  146. }