ration_ass_facade.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. /**
  2. * Created by chen on 2017/7/10.
  3. */
  4. let mongoose = require('mongoose');
  5. let consts = require('../../main/models/project_consts');
  6. let commonConsts = consts.commonConst;
  7. let _=require("lodash");
  8. let async_n = require("async");
  9. let std_ration_lib_ration_items = mongoose.model('std_ration_lib_ration_items');
  10. let rationModel = mongoose.model('ration');
  11. let ration_glj = mongoose.model('ration_glj');
  12. module.exports={
  13. save:save,
  14. getData:getData
  15. }
  16. let operationMap={
  17. 'ut_create':create_ration_ass,
  18. 'ut_update':update_ration_ass,
  19. 'ut_delete':delete_ration_ass
  20. };
  21. function create_ration_ass(user_id,datas) {
  22. };
  23. function update_ration_ass(user_id,datas) {
  24. return function (callback) {
  25. let editAss = datas.query.editAss;
  26. let times =calculateTimes(editAss);
  27. doRationAssAdjust(datas.query.ration,editAss,times,datas.doc).then(function (result) {
  28. console.log(result);
  29. if(result.err){
  30. callback(result.err,'')
  31. }else {
  32. let newObject = {
  33. moduleName:consts.projectConst.RATION_ASS,
  34. data:{
  35. updateTpye:commonConsts.UT_UPDATE,
  36. doc:datas.doc,
  37. ration_glj_list:result.ration_glj_list,
  38. rationID:datas.query.ration.ID,
  39. editIndex:datas.query.editIndex,
  40. actualValue:editAss.actualValue
  41. }
  42. };
  43. callback(null,newObject);
  44. }
  45. })
  46. }
  47. };
  48. async function doRationAssAdjust(ration,ass,times,doc) {
  49. let result ={
  50. err:null,
  51. ration_glj_list:[]
  52. }
  53. try{
  54. let assRation =await std_ration_lib_ration_items.findOne({rationRepId:ration.libID,code:ass.assistCode});
  55. let gljList = assRation.rationGljList;
  56. for(let i=0;i<gljList.length;i++){
  57. let glj = gljList[i];
  58. let calQuantity = glj.consumeAmt*times;
  59. let update_ration_glj = await ration_glj.findOne({rationID:ration.ID,projectID:ration.projectID,GLJID:glj.gljId});
  60. let newQuantity = update_ration_glj.rationItemQuantity+calQuantity;
  61. await ration_glj.update({rationID:ration.ID,projectID:ration.projectID,GLJID:glj.gljId},{quantity:newQuantity});
  62. result.ration_glj_list.push({ID:update_ration_glj.ID,quantity:newQuantity,rationID:ration.ID});
  63. }
  64. await rationModel.update({projectID:ration.projectID,ID:ration.ID},doc);
  65. return result;
  66. }catch (err){
  67. result.err = err;
  68. return result;
  69. }
  70. }
  71. function delete_ration_ass(user_id,datas) {
  72. };
  73. function calculateTimes(ass){
  74. let times =(ass.actualValue-ass.stdValue)/ass.stepValue;
  75. if(ass.carryBit=='四舍五入'){
  76. times = _.round(times,ass.decimal);
  77. }else if (ass.carryBit=='进一'){
  78. times =_.ceil(times,ass.decimal);
  79. }
  80. return times;
  81. }
  82. function getData(projectID, callback) {
  83. callback(0, consts.projectConst.RATION_ASS, []);
  84. }
  85. function save (user_id, datas, callback) {
  86. let operations=[];
  87. if(_.isArray(datas)){
  88. for(let i=0;i<datas.length;i++){
  89. operations.push(operationMap[datas[i].updateType](user_id,datas[i]));
  90. }
  91. }else {
  92. operations.push(operationMap[datas.updateType](user_id,datas));
  93. }
  94. async_n.parallel(operations,function (err,results) {
  95. if(err){
  96. callback(err,'');
  97. }else {
  98. if(results.length==1){
  99. callback(null,results[0])
  100. }else {
  101. callback(null,results)
  102. }
  103. }
  104. })
  105. }