glj_repository.js 12 KB

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