ration_controller.js 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. /**
  2. * Created by jimiz on 2017/4/9.
  3. */
  4. let rationData = require('../models/ration');
  5. let ration_glj_facade = require('../../ration_glj/facade/ration_glj_facade');
  6. let ration_ass_facade = require('../../ration_glj/facade/ration_ass_facade');
  7. let ration_facade = require('../facade/ration_facade');
  8. let bill_facade = require('../facade/bill_facade');
  9. let project_facade = require("../facade/project_facade");
  10. let logger = require("../../../logs/log_helper").logger;
  11. const GLJController = require("../../glj/controllers/glj_controller");
  12. const pmFacade = require('../../pm/facade/pm_facade');
  13. const { ShareLibType } = require('../../../public/common_constants');
  14. const compleRationLib = 'compleRationLib';
  15. let controller = {
  16. insertGLJAsRation:async function (req){
  17. let data = req.body.data;
  18. data = JSON.parse(data);
  19. return await ration_glj_facade.insertGLJAsRation(data,req.session.sessionCompilation);
  20. },
  21. replaceRations:async function (req) {
  22. let data = req.body.data;
  23. data = JSON.parse(data);
  24. let userID = req.session.sessionUser.id;
  25. const compilationID = req.session.sessionCompilation._id;
  26. if (data.libIDs && !data.libIDs.includes(compleRationLib)) {
  27. const rationLibUsers = await pmFacade.getReceiveLibList(userID, compilationID, ShareLibType.RATION_LIB);
  28. data.libIDs.push(compleRationLib);
  29. rationLibUsers.forEach(user => {
  30. data.libIDs.push(`${compleRationLib}*${user._id}`);
  31. });
  32. }
  33. return await ration_facade.replaceRations(userID,data,req.session.sessionCompilation);
  34. },
  35. addNewRation:async function(req) {
  36. let data = req.body.data;
  37. if(typeof data === 'object'){
  38. data = JSON.stringify(data);
  39. }
  40. data = JSON.parse(data);
  41. let start = +new Date();
  42. data.sessionUserID = req.session.sessionUser.id;
  43. let result = await ration_facade.addNewRation(data,req.session.sessionCompilation);
  44. //合并取项目工料机数据的情求,用于刷新项目工料机数据,当有添加、替换项目工料机的情况,才需要刷新
  45. /* if(result.ration_gljs && result.ration_gljs.length > 0 && data.newData){
  46. result.projectGLJDatas = await getProjectGLJData(data.newData.projectID);
  47. }*/
  48. let end = +new Date();
  49. console.log("实际插入时间为-------------------------------"+(end-start));
  50. return result
  51. },
  52. updateMaterialRation:async function(req){
  53. let data = req.body.data;
  54. data = JSON.parse(data);
  55. let result = await ration_facade.updateMaterialRation(data,req.session.sessionCompilation);
  56. //取运费和原价数据
  57. if(result.projectGLJList){
  58. let gljController = new GLJController();
  59. let [originalList,freightList] = await gljController.getFreightAndOriginalData(data.projectID);
  60. result.originalList = originalList;
  61. result.freightList = freightList;
  62. }
  63. return result
  64. },
  65. updateDivideRation:async function(req){
  66. let data = req.body.data;
  67. data = JSON.parse(data);
  68. let result = await ration_facade.updateDivideRation(data,req.session.sessionCompilation);
  69. return result
  70. },
  71. addMultiRation: async function (req) {
  72. let data = req.body.data;
  73. if(typeof data === 'object'){
  74. data = JSON.stringify(data);
  75. }
  76. data = JSON.parse(data);
  77. return await ration_facade.addMultiRation(data.newDatas,req.session.sessionCompilation);
  78. },
  79. getSameSectionRations:async function(req){//取同个章节相邻的定额
  80. let data = req.body.data;
  81. data = JSON.parse(data);
  82. return await ration_facade.getSameSectionRations(data,req.session.sessionUser.id, req.session.sessionCompilation._id);
  83. },
  84. //取定额默认的取费专业
  85. getDefaultProgramID:async function(req){
  86. let data = req.body.data;
  87. data = JSON.parse(data);
  88. data.userID = req.session.sessionUser.id;
  89. data.compilationId = req.session.sessionCompilation._id;
  90. return await ration_facade.getDefaultProgramID(data);
  91. },
  92. //应用定额关联子目
  93. applyTemplate:async function(req){
  94. let data = req.body.data;
  95. data = JSON.parse(data);
  96. let updateDatas =[];
  97. let applyTasks = [
  98. ration_facade.addMultiRation(data.rations.create,req.session.sessionCompilation),//先生成新定额
  99. bill_facade.createNewBills(data.bills.create),
  100. ];
  101. //整理更新的数据,调用一个方法更新
  102. updateDatas.push(data.ration_template);
  103. if(data.rations.update.length > 0) prepareUpdateNodes(data.rations.update,updateDatas,"ration");
  104. if(data.bills.update.length > 0) prepareUpdateNodes(data.bills.update,updateDatas,"bills");
  105. applyTasks.push(project_facade.updateNodes(updateDatas));
  106. let [rationResult,billsResult,updates] = await Promise.all(applyTasks);
  107. return {rationResult:rationResult,billsResult:billsResult,updateDatas:updateDatas};
  108. },
  109. //更新辅助定额
  110. updateRationAss:async function(req){
  111. let data = req.body.data;
  112. data = JSON.parse(data);
  113. return ration_ass_facade.updateRationAss(data);
  114. },
  115. //勾选定额调整系数
  116. updateCoeAdjust:async function(req){
  117. let data = req.body.data;
  118. data = JSON.parse(data);
  119. let result = await ration_facade.updateCoeAdjust(data,req.session.sessionCompilation);
  120. //合并取项目工料机数据的情求,用于刷新项目工料机数据,当有添加、替换项目工料机的情况,才需要刷新
  121. /*if(result.add.length > 0 || result.replace.length > 0){
  122. result.projectGLJDatas = await getProjectGLJData(data.projectID);
  123. }*/
  124. return result
  125. }
  126. };
  127. async function getProjectGLJData(projectID) {
  128. let gljController = new GLJController();
  129. let responseData = await gljController.getProjectGLJsByProjectID(projectID);
  130. return responseData.data;
  131. }
  132. function prepareUpdateNodes(datas,nodes,type) {
  133. for(let d of datas){
  134. nodes.push({type:type,data:d});
  135. }
  136. }
  137. //统一回调函数
  138. let callback = function(req, res, err, message, data){
  139. res.json({error: err, message: message, data: data});
  140. };
  141. module.exports = {
  142. getData: function(req, res){
  143. var data = JSON.parse(req.body.data);
  144. rationData.getData(data.projectId, function(err, message, rationList){
  145. if (err === 0) {
  146. callback(req, res, err, message, rationList);
  147. } else {
  148. callback(req, res, err, message, null);
  149. }
  150. });
  151. },
  152. getItemTemplate: function(req, res){
  153. //var data = JSON.parse(req.body.data);
  154. rationData.getItemTemplate(function(err, message, rationItem){
  155. if (billsItem) {
  156. callback(req, res, err, message, rationItem);
  157. } else {
  158. callback(req, res, err, message, null);
  159. }
  160. });
  161. },
  162. allocIDs: function(req, res){
  163. rationData.allocIDs(function(err, message, data){
  164. if (err) {
  165. callback(req, res, err, message, data);
  166. } else {
  167. callback(req, res, err, message, null);
  168. }
  169. });
  170. },
  171. action:async function(req,res){//自动跳转到URL对应的controller方法
  172. let result={
  173. error:0
  174. }
  175. try {
  176. let functionName = req.url.replace(/\//g,"");
  177. result.data = controller[functionName]?await controller[functionName](req):"";
  178. }catch (err){
  179. logger.err(err);
  180. if(typeof err == "string"){
  181. result.error=2;
  182. result.message = err;
  183. }else {
  184. result.error=1;
  185. result.message = err.message;
  186. }
  187. }
  188. res.json(result);
  189. }
  190. };