ration_controller.js 7.0 KB

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