bills_controller.js 7.7 KB

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