glj_repository.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313
  1. /**
  2. * Created by Tony on 2017/5/4.
  3. * 工料机的总库,根据不同定额库分类,参考原gljList表
  4. */
  5. var mongoose = require("mongoose");
  6. var async = require("async");
  7. var repositoryMap = require('./repository_map');
  8. var counter = require('../../../public/counter/counter');
  9. let moment = require('moment');
  10. const compleGljModel = mongoose.model('complementary_glj_lib');
  11. const gljModel = mongoose.model('std_glj_lib_gljList');
  12. const gljClassModel = mongoose.model('std_glj_lib_gljClass');
  13. var gljItemDAO = function(){};
  14. gljItemDAO.prototype.getGljTypes = function(gljLibID, callback){
  15. gljClassModel.find({"repositoryId": gljLibID, "$or": [{"isDeleted": null}, {"isDeleted": false} ]},function(err,data){
  16. if(data.length) callback(false,data);
  17. else if(err) callback("获取工料机类型错误!",false)
  18. else callback(false,false);
  19. })
  20. };
  21. gljItemDAO.prototype.getGljItemsByRep = function(repositoryId,callback){
  22. gljModel.find({"repositoryId": repositoryId},function(err,data){
  23. if(err) callback(true, "")
  24. else callback(false,data);
  25. })
  26. };
  27. gljItemDAO.prototype.getGljItemByType = function(repositoryId, type, callback){
  28. gljModel.find({"repositoryId": repositoryId, "gljType": type},function(err,data){
  29. if(err) callback(true, "")
  30. else callback(false, data);
  31. })
  32. };
  33. gljItemDAO.prototype.getGljItem = function(repositoryId, code, callback){
  34. gljModel.find({"repositoryId": repositoryId, "code": code},function(err,data){
  35. if(err) callback(true, "")
  36. else callback(false, data);
  37. })
  38. };
  39. gljItemDAO.prototype.getGljItems = function(gljIds, callback){
  40. gljModel.find({"ID": {"$in": gljIds}},function(err,data){
  41. if(err) callback(true, "")
  42. else callback(false, data);
  43. })
  44. };
  45. /*gljItemDAO.prototype.getStdCompleGljItems = async function (rationGljList, callback) {
  46. try{
  47. let rst = [];
  48. let stdIds = [], compleIds = []
  49. for(let glj of rationGljList){
  50. if(glj.type !== undefined && glj.type === 'complementary'){
  51. compleIds.push(glj.gljId);
  52. }
  53. else{
  54. stdIds.push(glj.gljId);
  55. }
  56. }
  57. if(compleIds.length > 0){
  58. let compleGlj = await compleGljModel.find({ID: {$in: compleIds}, deleteInfo: null}, {ID: 1, gljType: 1, basePrice: 1});
  59. rst = rst.concat(compleGlj);
  60. }
  61. if(stdIds.length > 0){
  62. let stdGlj = await gljModel.find({ID: {$in: stdIds}, $or: [{deleted: null}, {deleted: false}]}, {ID: 1, gljType: 1, basePrice: 1});
  63. rst = rst.concat(stdGlj);
  64. }
  65. callback(0, rst);
  66. }
  67. catch(err){
  68. callback(err, null);
  69. }
  70. };*/
  71. gljItemDAO.prototype.getStdCompleGljItems = async function (compleGljIds, stdGljIds, callback) {
  72. try{
  73. let rst = [];
  74. if(compleGljIds.length > 0){
  75. let compleGlj = await compleGljModel.find({ID: {$in: compleGljIds}}, {ID: 1, gljType: 1, basePrice: 1});
  76. rst = rst.concat(compleGlj);
  77. }
  78. if(stdGljIds.length > 0){
  79. let stdGlj = await gljModel.find({ID: {$in: stdGljIds}}, {ID: 1, gljType: 1, basePrice: 1, priceProperty: 1});
  80. rst = rst.concat(stdGlj);
  81. }
  82. callback(0, rst);
  83. }
  84. catch(err){
  85. callback(err, null);
  86. }
  87. };
  88. gljItemDAO.prototype.getGljItemsByCode = function(repositoryId, codes, callback){
  89. gljModel.find({"repositoryId": repositoryId,"code": {"$in": codes}},function(err,data){
  90. if(err) callback(true, "")
  91. else callback(false, data);
  92. })
  93. };
  94. gljItemDAO.prototype.mixUpdateGljItems = function(repId, lastOpr, updateItems, addItems, rIds, callback) {
  95. var me = this;
  96. if (updateItems.length == 0 && rIds.length == 0) {
  97. me.addGljItems(repId, lastOpr, addItems, callback);
  98. } else {
  99. me.removeGljItems(repId, lastOpr, rIds, function(err, message, docs) {
  100. me.updateGljItems(repId, lastOpr, updateItems, function(err, results){
  101. if (err) {
  102. callback(true, "Fail to update", false);
  103. } else {
  104. if (addItems && addItems.length > 0) {
  105. me.addGljItems(repId, lastOpr, addItems, callback);
  106. } else {
  107. callback(false, "Save successfully", results);
  108. }
  109. }
  110. });
  111. });
  112. }
  113. };
  114. gljItemDAO.prototype.removeGljItems = function(repId, lastOpr, rIds, callback) {
  115. if (rIds && rIds.length > 0) {
  116. gljModel.collection.remove({ID: {$in: rIds}}, null, function(err, docs){
  117. if (err) {
  118. callback(true, "Fail to remove", false);
  119. } else {
  120. repositoryMap.updateOprArr({ID: repId}, lastOpr, moment(Date.now()).format('YYYY-MM-DD HH:mm:ss'), function (err) {
  121. if(err){
  122. callback(true, "Fail to update operator", false);
  123. }
  124. else{
  125. callback(false, "Remove successfully", docs);
  126. }
  127. });
  128. }
  129. })
  130. } else {
  131. callback(false, "No records were deleted!", null);
  132. }
  133. };
  134. gljItemDAO.prototype.addGljItems = function(repId, lastOpr, items, callback) {
  135. if (items && items.length > 0) {
  136. counter.counterDAO.getIDAfterCount(counter.moduleName.GLJ, items.length, function(err, result){
  137. var maxId = result.sequence_value;
  138. var arr = [];
  139. for (var i = 0; i < items.length; i++) {
  140. var obj = new gljModel(items[i]);
  141. obj.ID = (maxId - (items.length - 1) + i);
  142. obj.repositoryId = repId;
  143. arr.push(obj);
  144. }
  145. gljModel.collection.insert(arr, null, function(err, docs){
  146. if (err) {
  147. callback(true, "Fail to add", false);
  148. } else {
  149. repositoryMap.updateOprArr({ID: repId}, lastOpr, moment(Date.now()).format('YYYY-MM-DD HH:mm:ss'), function (err) {
  150. if(err){
  151. callback(true, "Fail to update Operator", false);
  152. }
  153. else{
  154. callback(false, "Add successfully", docs);
  155. }
  156. });
  157. }
  158. })
  159. });
  160. } else {
  161. callback(true, "No source", false);
  162. }
  163. };
  164. gljItemDAO.prototype.updateGljItems = function(repId, lastOpr, items, callback) {
  165. var functions = [];
  166. for (var i=0; i < items.length; i++) {
  167. functions.push((function(doc) {
  168. return function(cb) {
  169. var filter = {};
  170. if (doc.ID) {
  171. filter.ID = doc.ID;
  172. } else {
  173. filter.repositoryId = repId;
  174. filter.code = doc.code;
  175. }
  176. gljModel.update(filter, doc, cb);
  177. };
  178. })(items[i]));
  179. }
  180. functions.push((function () {
  181. return function (cb) {
  182. repositoryMap.updateOprArr({ID: repId}, lastOpr, moment(Date.now()).format('YYYY-MM-DD HH:mm:ss'), function (err) {
  183. if(err){
  184. cb(err);
  185. }
  186. else{
  187. cb(null);
  188. }
  189. })
  190. }
  191. })());
  192. async.parallel(functions, function(err, results) {
  193. callback(err, results);
  194. });
  195. };
  196. gljItemDAO.prototype.updateNodes = function(repId, lastOpr, nodes, callback) {
  197. var functions = [];
  198. for (var i=0; i < nodes.length; i++) {
  199. functions.push((function(doc) {
  200. return function(cb) {
  201. gljClassModel.update({ID: doc.ID}, doc, cb);
  202. };
  203. })(nodes[i]));
  204. }
  205. functions.push((function () {
  206. return function (cb) {
  207. repositoryMap.updateOprArr({ID: repId}, lastOpr, moment(Date.now()).format('YYYY-MM-DD HH:mm:ss'), function (err) {
  208. if(err){
  209. cb(err);
  210. }
  211. else{
  212. cb(null);
  213. }
  214. })
  215. }
  216. })());
  217. async.parallel(functions, function(err, results) {
  218. callback(err, results);
  219. });
  220. };
  221. gljItemDAO.prototype.removeNodes = function(repId, lastOpr, nodeIds, preNodeId, preNodeNextId, callback){
  222. var functions = [];
  223. if (preNodeId != -1) {
  224. functions.push((function(nodeId, nextId) {
  225. return function(cb) {
  226. gljClassModel.update({ID: nodeId}, {"NextSiblingID": nextId}, cb);
  227. };
  228. })(preNodeId, preNodeNextId));
  229. }
  230. for (var i=0; i < nodeIds.length; i++) {
  231. functions.push((function(nodeId) {
  232. return function(cb) {
  233. gljClassModel.update({ID: nodeId}, {"isDeleted": true}, cb);
  234. };
  235. })(nodeIds[i]));
  236. }
  237. functions.push((function () {
  238. return function (cb) {
  239. repositoryMap.updateOprArr({ID: repId}, lastOpr, moment(Date.now()).format('YYYY-MM-DD HH:mm:ss'), function (err) {
  240. if(err){
  241. cb(err);
  242. }
  243. else{
  244. cb(null);
  245. }
  246. })
  247. }
  248. })());
  249. async.parallel(functions, function(err, results) {
  250. callback(err, results);
  251. });
  252. };
  253. gljItemDAO.prototype.createNewNode = function(repId, lastOpr, lastNodeId, nodeData, callback) {
  254. return counter.counterDAO.getIDAfterCount(counter.moduleName.GLJ, 1, function(err, result){
  255. nodeData.repositoryId = repId;
  256. nodeData.ID = result.sequence_value;
  257. var node = new gljClassModel(nodeData);
  258. async.parallel([
  259. function (cb) {
  260. node.save(function (err, result) {
  261. if (err) {
  262. cb("章节树ID错误!", false);
  263. } else {
  264. if (lastNodeId > 0) {
  265. gljClassModel.update({ID: lastNodeId}, {"NextSiblingID": nodeData.ID}, function(err, rst){
  266. if (err) {
  267. cb("章节树ID错误!", false);
  268. } else {
  269. cb(false, result);
  270. }
  271. });
  272. } else cb(false, result);
  273. }
  274. });
  275. },
  276. function (cb) {
  277. repositoryMap.updateOprArr({ID: repId}, lastOpr, moment(Date.now()).format('YYYY-MM-DD HH:mm:ss'), function (err) {
  278. if(err){
  279. cb(err);
  280. }
  281. else{
  282. cb(null);
  283. }
  284. })
  285. }
  286. ], function (err, result) {
  287. if(err){
  288. callback(true, "章节树错误!", false);
  289. }
  290. else{
  291. callback(false, '', result[0]);
  292. }
  293. })
  294. });
  295. };
  296. module.exports = new gljItemDAO();