ration_glj_facade.js 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256
  1. /**
  2. * Created by chen on 2017/6/29.
  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 ration_glj = mongoose.model('ration_glj');
  10. //let std_ration_lib_glj_list_model = require('../../ration_repository/models/glj_repository');
  11. let std_ration_lib_glj_list_model = mongoose.model('std_ration_lib_glj_list');
  12. let async = require("async");
  13. let ration = mongoose.model('ration');
  14. let operationMap={
  15. 'ut_create':create_ration_glj,
  16. 'ut_update':update_ration_glj,
  17. 'ut_delete':delete_ration_glj
  18. }
  19. module.exports={
  20. save:save,
  21. getData:getData,
  22. deleteByRation:deleteByRation
  23. }
  24. function get_lib_glj_info(ration_glj) {
  25. return function (cb) {
  26. std_ration_lib_glj_list_model.findOne({'ID':ration_glj.GLJID},(err,glj)=>{
  27. if(err){
  28. cb(err,'')
  29. }else {
  30. ration_glj.name = glj.name;
  31. ration_glj.code = glj.code;
  32. ration_glj.unit = glj.unit;
  33. ration_glj.specs = glj.specs;
  34. ration_glj.basePrice = glj.basePrice;
  35. ration_glj.gljDistType = glj.gljDistType;
  36. cb(null,ration_glj)
  37. }
  38. })
  39. }
  40. }
  41. function create_ration_glj(user_id,datas) {
  42. return function (callback) {
  43. let ration_glj_list=datas.ration_glj_list;
  44. var tasks=[];
  45. for(let i =0;i<ration_glj_list.length;i++){
  46. ration_glj_list[i].ID = uuidV1();
  47. tasks.push(get_lib_glj_info(ration_glj_list[i]))
  48. }
  49. async.parallel(tasks,(err,results)=>{
  50. if(err){
  51. callback(err,results)
  52. }else {
  53. ration_glj.insertMany(results,(err,doc)=>{
  54. if(err){
  55. callback(err,null);
  56. }else {
  57. let returndata ={
  58. updateTpye:commonConsts.UT_CREATE,
  59. moduleName:'ration_glj',
  60. data:results
  61. }
  62. callback(null,returndata)
  63. }
  64. });
  65. }
  66. })
  67. }
  68. }
  69. function update_ration_glj(user_id,datas) {
  70. return function (callback) {
  71. ration_glj.update(datas.query,datas.doc,(err,result)=>{
  72. if(err){
  73. callback(err,'');
  74. }else {
  75. let returndata ={
  76. moduleName:'ration_glj',
  77. data:{
  78. updateTpye:commonConsts.UT_UPDATE,
  79. query:datas.query,
  80. doc:datas.doc
  81. }
  82. }
  83. callback(null,returndata)
  84. }
  85. })
  86. }
  87. }
  88. function delete_ration_glj(user_id,datas) {
  89. return function (callback) {
  90. if(datas.deleteType=="RATION"){
  91. deleteByRation(datas,callback);
  92. }else if(datas.deleteType=="BILL"){
  93. deleteByBill(user_id,datas,callback);
  94. } else{
  95. deleteByID(datas,callback);
  96. }
  97. }
  98. }
  99. function deleteByRation(datas,callback) {
  100. let data = datas.updateData;
  101. ration_glj.deleteMany({projectID: data.projectID, rationID: data.ID},callback);
  102. }
  103. function deleteByBill(user_id,datas,callback) {
  104. let tasks = [];
  105. tasks.push(startingTask("deleteByBill"));
  106. tasks.push(getRationsByBill(datas));
  107. tasks.push(deleteRationsbyBill(user_id,datas));
  108. tasks.push(deleteByMultiRations(datas));
  109. async.waterfall(tasks,function (err,results) {
  110. if(err){
  111. callback(err,'');
  112. }else {
  113. callback(null,results);
  114. }
  115. })
  116. }
  117. function deleteByID(datas,callback){
  118. ration_glj.deleteOne(datas.query,(err,result)=>{
  119. if(err){
  120. callback(err,'');
  121. }else {
  122. let returndata ={
  123. moduleName:'ration_glj',
  124. data:{
  125. updateTpye:commonConsts.UT_DELETE,
  126. query:datas.query,
  127. }
  128. }
  129. callback(null,returndata)
  130. }
  131. })
  132. }
  133. function startingTask(processName){
  134. return function(asyncCallBack){
  135. var result = {
  136. processName : processName
  137. };
  138. asyncCallBack(null, result);
  139. };
  140. }
  141. function getRationsByBill(datas) {
  142. return function (results,callback) {
  143. ration.find({projectID:datas.updateData.projectID,billsItemID:datas.updateData.ID},function (err,rations) {
  144. if(err){
  145. callback(err,'')
  146. }else {
  147. results.rations=rations;
  148. callback(null,results)
  149. }
  150. })
  151. }
  152. }
  153. function deleteRationsbyBill (user_id,datas){
  154. return function (results,callback) {
  155. let deleteInfo ={
  156. deleteInfo :{deleted: true, deleteDateTime: new Date(), deleteBy: user_id}
  157. };
  158. ration.update({projectID: datas.updateData.projectID, billsItemID:datas.updateData.ID},deleteInfo,{multi: true},(err,deleteresults)=>{
  159. if(err){
  160. callback(err,'');
  161. }else {
  162. callback(null,results);
  163. }
  164. });
  165. }
  166. }
  167. function deleteByMultiRations(datas) {
  168. return function (results,deleteCallBack) {
  169. var delete_tasks = [];
  170. var deleteOne=function (ration) {
  171. return function (callback) {
  172. ration_glj.deleteMany({projectID: ration.projectID, rationID: ration.ID},function (err,result) {
  173. if(err){
  174. callback(err,'');
  175. }else {
  176. callback(null,result);
  177. }
  178. });
  179. }
  180. }
  181. let rations = results.rations;
  182. for(let i=0;i<rations.length;i++){
  183. delete_tasks.push(deleteOne(rations[i]._doc));
  184. }
  185. async.parallel(delete_tasks,(err,results)=>{
  186. if (err){
  187. deleteCallBack(err,'')
  188. }else {
  189. deleteCallBack(null,results)
  190. }
  191. })
  192. }
  193. }
  194. /*
  195. function deleteByRation(doc) {
  196. return function (callback){
  197. ration_glj.deleteMany({projectID: doc.updateData.projectID, rationID: doc.updateData.ID},callback);
  198. }
  199. }
  200. */
  201. function save (user_id, datas, callback) {
  202. let perations=[];
  203. if(_.isArray(datas)){
  204. for(let i=0;i<datas.length;i++){
  205. perations.push(operationMap[datas[i].updateType](user_id,datas[i]));
  206. }
  207. }else {
  208. perations.push(operationMap[datas.updateType](user_id,datas));
  209. }
  210. async.parallel(perations,function (err,results) {
  211. if(err){
  212. callback(err,'');
  213. }else {
  214. if(results.length==1){
  215. callback(null,results[0])
  216. }else {
  217. callback(null,results)
  218. }
  219. }
  220. })
  221. }
  222. function getData(projectID, callback) {
  223. console.log("ration_glj getData function");
  224. ration_glj.find({'projectID':projectID},(err,datas)=>{
  225. if(err){
  226. callback(1, '', null);
  227. }else {
  228. callback(0, consts.projectConst.RATION_GLJ, datas);
  229. }
  230. })
  231. }