bills_controller.js 7.8 KB

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