glj_repository.js 10 KB

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