ration_coe_facade.js 8.7 KB

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