ration_coe_facade.js 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304
  1. /**
  2. * Created by chen on 2017/7/6.
  3. */
  4. let mongoose = require('mongoose');
  5. const uuidV1 = require('uuid/v1')
  6. let consts = require('../../main/models/project_consts');
  7. let commonConsts = consts.commonConst;
  8. let _=require("lodash");
  9. let async_n = require("async");
  10. let coeMolde = mongoose.model('std_ration_lib_coe_list');
  11. let ration_coe = mongoose.model('ration_coe');
  12. let glj_calculate_facade = require('./glj_calculate_facade');
  13. const scMathUtil = require('../../../public/scMathUtil').getUtil();
  14. module.exports={
  15. save:save,
  16. getData:getData,
  17. delete_ration_coe:delete_ration_coe
  18. }
  19. let operationMap={
  20. 'ut_create':create_ration_coe,
  21. 'ut_update':update_ration_coe,
  22. 'ut_delete':delete_ration_coe
  23. };
  24. let updateFunctionMap = {
  25. 'normalUpdate':normalUpdate,
  26. 'updateCustomerCoe':updateCustomerCoe,
  27. 'adjustUpdate':adjustUpdate
  28. }
  29. function create_ration_coe(user_id,datas) {
  30. return function (callback) {
  31. console.log(`datas====================================================================================================`);
  32. console.log(datas);
  33. let ration_coe_list=datas.ration_coe_list;
  34. var tasks=[];
  35. for(let i=0;i<ration_coe_list.length;i++){
  36. ration_coe_list[i].ID = uuidV1();
  37. ration_coe_list[i].seq = i;
  38. tasks.push(get_lib_coe_info(ration_coe_list[i]));
  39. }
  40. async_n.parallel(tasks,(err,results)=>{
  41. if(err){
  42. callback(err,results)
  43. }else {
  44. ration_coe.insertMany(results,(err,doc)=>{
  45. if(err){
  46. callback(err,null);
  47. }else {
  48. let returndata ={
  49. updateTpye:commonConsts.UT_CREATE,
  50. moduleName:'ration_coe',
  51. data:results
  52. }
  53. callback(null,returndata)
  54. }
  55. });
  56. }
  57. })
  58. }
  59. }
  60. function update_ration_coe(user_id,datas) {
  61. if(datas.updateFunction){
  62. return updateFunctionMap[datas.updateFunction](user_id,datas);
  63. }else {
  64. return normalUpdate(user_id,datas);
  65. }
  66. }
  67. function normalUpdate(user_id,datas) {
  68. return function(callback) {
  69. ration_coe.update(datas.query,datas.doc,(err,result)=>{
  70. if(err){
  71. callback(err,'');
  72. }else {
  73. let returndata ={
  74. moduleName:'ration_coe',
  75. data:{
  76. updateTpye:commonConsts.UT_UPDATE,
  77. query:datas.query,
  78. doc:datas.doc
  79. }
  80. }
  81. callback(null,returndata);
  82. }
  83. })
  84. }
  85. }
  86. function updateCustomerCoe(user_id,datas) {
  87. return function(callback) {
  88. doCustomerCoeUpdateTasks(datas).then((result)=>{
  89. if(result.err){
  90. callback(result.err,'');
  91. }else {
  92. let coeReturn = {
  93. moduleName:'ration_coe',
  94. data:{
  95. updateTpye:commonConsts.UT_UPDATE,
  96. query:result.coeResult.query,
  97. doc:result.coeResult.doc
  98. }
  99. }
  100. let ration_glj_data ={
  101. moduleName:'ration_glj',
  102. data:{
  103. updateTpye:commonConsts.UT_UPDATE,
  104. quantityRefresh:true,
  105. glj_result:result.cal_result.glj_result
  106. }
  107. };
  108. let ration_data ={
  109. moduleName:'ration',
  110. data:{
  111. updateTpye:commonConsts.UT_UPDATE,
  112. stateRefresh:true,
  113. rationID:result.cal_result.rationID,
  114. adjustState:result.cal_result.adjustState
  115. }
  116. };
  117. callback(null,[coeReturn,ration_glj_data,ration_data]);
  118. console.log('update end');
  119. }
  120. })
  121. }
  122. }
  123. function adjustUpdate(user_id,datas) {
  124. return function(callback) {
  125. doAdjustUpdate(datas).then((result)=>{
  126. if(result.err){
  127. callback(result.err,'');
  128. }else {
  129. let coeReturn = {
  130. moduleName:'ration_coe',
  131. data:{
  132. updateTpye:commonConsts.UT_UPDATE,
  133. query:datas.query,
  134. doc:datas.doc
  135. }
  136. }
  137. let ration_glj_data ={
  138. moduleName:'ration_glj',
  139. data:{
  140. updateTpye:commonConsts.UT_UPDATE,
  141. quantityRefresh:true,
  142. glj_result:result.cal_result.glj_result
  143. }
  144. };
  145. let ration_data ={
  146. moduleName:'ration',
  147. data:{
  148. updateTpye:commonConsts.UT_UPDATE,
  149. stateRefresh:true,
  150. rationID:result.cal_result.rationID,
  151. adjustState:result.cal_result.adjustState
  152. }
  153. };
  154. callback(null,[coeReturn,ration_glj_data,ration_data]);
  155. console.log('update end');
  156. }
  157. })
  158. }
  159. }
  160. async function doAdjustUpdate (datas){
  161. let result = {
  162. err:null
  163. }
  164. try{
  165. await ration_coe.update(datas.query,datas.doc);
  166. let cal_result = await glj_calculate_facade.calculateQuantity({projectID:datas.query.projectID,rationID:datas.query.rationID});
  167. result.cal_result =cal_result;
  168. return result;
  169. }catch (err){
  170. result.err = err;
  171. console.log(err);
  172. return result;
  173. }
  174. }
  175. async function doCustomerCoeUpdateTasks(datas) {
  176. let result = {
  177. err:null
  178. }
  179. try{
  180. let doc =datas.doc;
  181. doc.isAdjust = 1;
  182. doc.content = generationContent(doc.coes);
  183. let query = {
  184. ID:datas.query.ID,
  185. projectID:datas.query.projectID
  186. }
  187. await ration_coe.update(query,datas.doc);
  188. result.coeResult ={
  189. query:query,
  190. doc:doc
  191. };
  192. let cal_result = await glj_calculate_facade.calculateQuantity({projectID:datas.query.projectID,rationID:datas.query.rationID});
  193. result.cal_result =cal_result;
  194. return result;
  195. }catch (err){
  196. result.err = err;
  197. console.log(err);
  198. return result;
  199. }
  200. }
  201. function generationContent(coes) {
  202. let rationAmount = coes[0].amount;
  203. let string ='';
  204. if(_.every(coes,'amount',rationAmount)){
  205. string = coes[0].coeType + 'x'+rationAmount;
  206. }else {
  207. let context_arr =[];
  208. for(let i =1;i<coes.length;i++){
  209. context_arr.push( coes[i].coeType + 'x'+coes[i].amount);
  210. }
  211. string = context_arr.join(',');
  212. }
  213. return string;
  214. }
  215. function delete_ration_coe(data) {
  216. return function (callback) {
  217. ration_coe.deleteMany({projectID: data.projectID, rationID: data.ID},(err,result)=>{
  218. commonCallback(callback,result,err)
  219. });
  220. }
  221. }
  222. function get_lib_coe_info(ration_coe) {
  223. return function (cb) {
  224. if(ration_coe.coeID == -1){//自定义系数
  225. cb(null,ration_coe);
  226. }else {
  227. let query ={
  228. "libID": ration_coe.libID,
  229. "ID": ration_coe.coeID,
  230. "$or": [{"isDeleted": null}, {"isDeleted": false}]
  231. };
  232. coeMolde.findOne(query,(err,coe)=>{
  233. if(err){
  234. cb(err,'')
  235. }else {
  236. ration_coe.name = coe.name;
  237. ration_coe.content = coe.content;
  238. ration_coe.isAdjust=0;
  239. ration_coe.coes = coe.coes;
  240. cb(null,ration_coe);
  241. }
  242. })
  243. }
  244. }
  245. }
  246. function getData(projectID, callback) {
  247. ration_coe.find({'projectID':projectID}).sort('seq').exec((err,datas)=>{
  248. if(err){
  249. callback(1, '', null);
  250. }else {
  251. callback(0, consts.projectConst.RATION_COE, datas);
  252. }
  253. })
  254. }
  255. function save (user_id, datas, callback) {
  256. let operations=[];
  257. if(_.isArray(datas)){
  258. for(let i=0;i<datas.length;i++){
  259. operations.push(operationMap[datas[i].updateType](user_id,datas[i]));
  260. }
  261. }else {
  262. operations.push(operationMap[datas.updateType](user_id,datas));
  263. }
  264. async_n.parallel(operations,function (err,results) {
  265. if(err){
  266. callback(err,'');
  267. }else {
  268. if(results.length==1){
  269. callback(null,results[0])
  270. }else {
  271. callback(null,results)
  272. }
  273. }
  274. })
  275. }
  276. function commonCallback(callback,result,err) {
  277. if(err){
  278. callback(err,'');
  279. }else {
  280. callback(null,result);
  281. }
  282. }