ration_controller.js 7.2 KB

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