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