glj_repository.js 11 KB

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