bills_controller.js 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. /**
  2. * Created by jimiz on 2017/4/7.
  3. */
  4. let mongoose = require('mongoose');
  5. var billsData = require('../models/bills');
  6. let ration_model = require('../models/ration');
  7. let ProjectsData = require('../../pm/models/project_model').project;
  8. let logger = require("../../../logs/log_helper").logger;
  9. let quantity_detail = require("../facade/quantity_detail_facade");
  10. let ration_glj = mongoose.model('ration_glj');
  11. let ration_coe = mongoose.model('ration_coe');
  12. //统一回调函数
  13. var callback = function(req, res, err, message, data){
  14. res.json({error: err, message: message, data: data});
  15. };
  16. module.exports = {
  17. getData: function(req, res){
  18. var data = JSON.parse(req.body.data);
  19. billsData.getData(data.projectId, function(err, message, billsList){
  20. if (err === 0) {
  21. callback(req, res, err, message, billsList);
  22. } else {
  23. callback(req, res, err, message, null);
  24. }
  25. });
  26. },
  27. getItemTemplate: function(req, res){
  28. //var data = JSON.parse(req.body.data);
  29. billsData.getItemTemplate(function(err, message, billsItem){
  30. if (billsItem) {
  31. callback(req, res, err, message, billsItem);
  32. } else {
  33. callback(req, res, err, message, null);
  34. }
  35. });
  36. },
  37. allocIDs: function(req, res){
  38. billsData.allocIDs(function(err, message, data){
  39. if (err) {
  40. callback(req, res, err, message, data);
  41. } else {
  42. callback(req, res, err, message, null);
  43. }
  44. });
  45. },
  46. //zhong 2017-9-1
  47. updateCharacterContent: function (req, res) {
  48. let data = JSON.parse(req.body.data);
  49. let findSet = data.findSet,
  50. updateObj = data.updateObj,
  51. txtObj = data.txtObj;
  52. billsData.updateCharacterContent(findSet, updateObj, txtObj, function (err, message) {
  53. callback(req, res, err, message, null);
  54. });
  55. },
  56. updateBill: async function(request, response) {
  57. const data = JSON.parse(request.body.data);
  58. const findSet = data.findSet;
  59. const updateData = data.updateData;
  60. let settingData = {};
  61. // 筛选出要保存在项目属性的设置
  62. for (const index in updateData) {
  63. if (updateData[index].field === 'addRule') {
  64. settingData = updateData[index].value;
  65. delete updateData[index];
  66. }
  67. }
  68. // 更新项目属性
  69. const propertyUpdateData = {
  70. property: 'addRule',
  71. data: settingData
  72. };
  73. const projectResult = await ProjectsData.updateProjectProperty(findSet.projectID, propertyUpdateData);
  74. const result = await billsData.updateBill(findSet, updateData);
  75. const message = !result || !projectResult ? '修改失败' : '修改成功';
  76. const err = !result || !projectResult ? 1 : 0;
  77. callback(request, response, err, message, null);
  78. },
  79. singleDelete:async function(req, res){
  80. let result={
  81. error:0
  82. }
  83. try {
  84. let data = req.body.data;
  85. data = JSON.parse(data);
  86. let tasks = generateSingleDeleteTasks(data);
  87. let resultData= await billsData.model.bulkWrite(tasks);
  88. //删除工程量明细
  89. await quantity_detail.deleteByQuery({projectID: data.projectID, billID: data.ID}) ;
  90. result.data=resultData;
  91. }catch (err){
  92. logger.err(err);
  93. result.error=1;
  94. result.message = err.message;
  95. }
  96. res.json(result);
  97. },
  98. multiDelete:async function(req, res){
  99. let result={
  100. error:0
  101. };
  102. try {
  103. let data = req.body.data;
  104. data = JSON.parse(data);
  105. result.data=await doBillsOrRationsDelete(data);
  106. }catch (err){
  107. logger.err(err);
  108. result.error=1;
  109. result.message = err.message;
  110. }
  111. res.json(result);
  112. }
  113. };
  114. async function doBillsOrRationsDelete(data) {
  115. let billTask = [];
  116. let deleteBillIDs = [];
  117. let rationTask=[];
  118. let deleteRationIDs=[];
  119. let qd_query=null;
  120. let sub_query=null;
  121. if(data['bills']){
  122. billTask = generateUpdateTasks(data['bills'],data.projectID,data.user_id);
  123. for(let b_key in data['bills']){
  124. if(data['bills'][b_key]===true){
  125. deleteBillIDs.push(b_key+'');
  126. }
  127. }
  128. if(deleteBillIDs.length>0){
  129. qd_query={projectID: data.projectID, billID: {"$in": deleteBillIDs}};
  130. }
  131. }
  132. if(data['ration']){
  133. rationTask = generateUpdateTasks(data['ration'],data.projectID,data.user_id);
  134. for(let r_key in data['ration']){
  135. if(data['ration'][r_key]===true){
  136. deleteRationIDs.push(r_key+'');
  137. }
  138. }
  139. if(deleteRationIDs.length>0){
  140. if(qd_query==null){//说明没删除清单
  141. qd_query={projectID: data.projectID, rationID: {"$in": deleteRationIDs}};
  142. }else {
  143. qd_query={
  144. "$or":[
  145. {projectID: data.projectID, billID: {"$in": deleteBillIDs}},
  146. {projectID: data.projectID, rationID: {"$in": deleteRationIDs}}
  147. ]
  148. }
  149. }
  150. sub_query={projectID: data.projectID, rationID: {"$in": deleteRationIDs}};
  151. }
  152. }
  153. //先删除工程量明细
  154. if(qd_query!=null){
  155. await quantity_detail.deleteByQuery(qd_query) ;
  156. }
  157. if(sub_query!=null){
  158. await ration_coe.deleteMany(sub_query);//删除附注条件
  159. await ration_glj.deleteMany(sub_query);//删除定额工料机
  160. }
  161. if(rationTask.length>0){
  162. await ration_model.model.bulkWrite(rationTask);//删除定额
  163. }
  164. if(billTask.length>0){
  165. await billsData.model.bulkWrite(billTask);//删除清单
  166. }
  167. return 'success';
  168. }
  169. function generateSingleDeleteTasks(data) {
  170. let updateData = data.updateData;
  171. updateData[data.ID]=true;
  172. let tasks = generateUpdateTasks(updateData,data.projectID,data.user_id);
  173. return tasks;
  174. }
  175. function generateUpdateTasks(data,projectID,user_id) {
  176. let tasks=[];
  177. let updateData = data;
  178. let deleteInfo={deleted: true, deleteDateTime: new Date(), deleteBy: user_id};
  179. for(let key in updateData){
  180. let task={
  181. updateOne:{
  182. filter:{
  183. ID:key,
  184. projectID:projectID
  185. }
  186. }
  187. };
  188. if(updateData[key]===true){
  189. task.updateOne.update={
  190. deleteInfo:deleteInfo
  191. };
  192. }else {
  193. task.updateOne.update=updateData[key];
  194. }
  195. tasks.push(task);
  196. }
  197. return tasks;
  198. }