ration_coe_facade.js 8.8 KB

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