repository_map.js 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246
  1. /**
  2. * Created by Tony on 2017/4/24.
  3. * 重新构造,不适宜生成多个定额库db,还是得统一在一个表
  4. */
  5. let async = require("async");
  6. let moment = require('moment');
  7. let counter = require('../../../public/counter/counter');
  8. import gljMapModel from "../../std_glj_lib/models/schemas";
  9. import {rationRepository, rationChapterTreeModel, rationItemModel} from './schemas';
  10. function createNewLibModel(rationLibObj){
  11. var rst = {};
  12. rst.dispName = rationLibObj.dispName;
  13. rst.appType = rationLibObj.appType?rationLibObj.appType:'construct';
  14. rst.compilationId = rationLibObj.compilationId;
  15. rst.compilationName = rationLibObj.compilationName;
  16. rst.gljLib = rationLibObj.gljLib;
  17. rst.creator = rationLibObj.creator;
  18. rst.createDate = moment(Date.now()).format('YYYY-MM-DD HH:mm:ss');
  19. rst.recentOpr = [{operator: rationLibObj.creator, operateDate: rst.createDate}],
  20. rst.deleted = false;
  21. return rst;
  22. }
  23. var rationRepositoryDao = function(){};
  24. rationRepositoryDao.prototype.updateGljLib = function (gljLibId, callback) {
  25. rationRepository.update({gljLib: gljLibId}, {$set: {gljLib: -1}}, {multi: true}, function (err) {
  26. if(err){
  27. callback(err);
  28. }
  29. else{
  30. callback(null);
  31. }
  32. })
  33. };
  34. rationRepositoryDao.prototype.updateOprArr= function(findSet, oprtor, oprDate, cb){
  35. rationRepository.find(findSet, function (err, result) {
  36. if(err){
  37. cb(err);
  38. }
  39. else{
  40. if(result.length === 1){
  41. let recentOprArr = result[0].recentOpr;
  42. let isExist = false;
  43. for(let i =0 ; i<recentOprArr.length; i++){
  44. if(recentOprArr[i].operator === oprtor){
  45. recentOprArr[i].operateDate = oprDate;
  46. isExist = true;
  47. }
  48. }
  49. if(!isExist){
  50. if(recentOprArr.length < 5){
  51. recentOprArr.push({operator: oprtor, operateDate: oprDate});
  52. }
  53. else if(recentOprArr.length === 5){
  54. recentOprArr.sort(function (a, b) {
  55. if(a.operateDate > b.operateDate){
  56. return -1;
  57. }else {
  58. return 1;
  59. }
  60. return 0;
  61. });
  62. recentOprArr.splice(recentOprArr.length -1, 1);
  63. recentOprArr.splice(0, 1, {operator: oprtor, operateDate: oprDate});
  64. }
  65. }
  66. rationRepository.update(findSet, {$set: {recentOpr: recentOprArr}}, function (err) {
  67. if(err){
  68. cb(err);
  69. }
  70. else{
  71. cb(null);
  72. }
  73. });
  74. }
  75. else{
  76. cb(err);
  77. }
  78. }
  79. })
  80. };
  81. rationRepositoryDao.prototype.getRealLibName = function(dispName,callback){
  82. if (callback) {
  83. rationRepository.find({"dispName": dispName}, function(err,data){
  84. if (err) {
  85. callback('Error', null);
  86. } else {
  87. callback(false, data);
  88. }
  89. });
  90. } else {
  91. var rst = rationRepository.find({"dispName": dispName}).exec();
  92. return rst;
  93. }
  94. };
  95. rationRepositoryDao.prototype.getLibIDByName = function(dispName, callback){
  96. rationRepository.findOne({"dispName": dispName}, function(err,data){
  97. if (err) {
  98. callback('Error', null);
  99. } else {
  100. callback(false, data.ID);
  101. }
  102. });
  103. };
  104. rationRepositoryDao.prototype.getRepositoryById = function(repId,callback = null){
  105. if (callback) {
  106. rationRepository.find({"ID": repId}, function(err,data){
  107. if (err) {
  108. callback('Error', null);
  109. } else {
  110. callback(false, data);
  111. }
  112. });
  113. } else {
  114. var rst = rationRepository.find({"ID": repId}).exec();
  115. return rst;
  116. }
  117. };
  118. rationRepositoryDao.prototype.addRationRepository = function( rationLibObj,callback){
  119. counter.counterDAO.getIDAfterCount(counter.moduleName.rationMap, 1, function(err, result){
  120. var rMap = createNewLibModel(rationLibObj);
  121. rMap.ID = result.value.sequence_value;
  122. new rationRepository(rMap).save(function(err, result) {
  123. if (err) callback("Error", null);
  124. else{
  125. //向引用工料机库的添加标记
  126. gljMapModel.update({ID: rMap.gljLib, deleted: false}, {$addToSet: {rationLibs: {ID: rMap.ID, dispName: rMap.dispName}}}, function (err, data) {
  127. if(err){
  128. rationRepository.remove({ID: rMap.ID}, function (err) {
  129. if(err){
  130. callback("创建失败且回滚失败!", null);
  131. }
  132. else{
  133. callback("创建失败,已回滚!", null);
  134. }
  135. });
  136. }
  137. else{
  138. callback(false, result);
  139. }
  140. });
  141. }
  142. });
  143. });
  144. };
  145. rationRepositoryDao.prototype.getRationLib = function(libId, callback) {
  146. rationRepository.find({ID: libId, "deleted": false}, function(err, data){
  147. if (err) {
  148. callback( 'Error', null);
  149. } else {
  150. callback(0, data);
  151. }
  152. });
  153. };
  154. rationRepositoryDao.prototype.getDisplayRationLibs = function(callback) {
  155. rationRepository.find({"deleted": false}, function(err, data){
  156. if (err) {
  157. callback( 'Error', null);
  158. } else {
  159. callback( false, data);
  160. }
  161. });
  162. };
  163. rationRepositoryDao.prototype.updateName = function(oprtor, renameObj, callback){
  164. rationRepository.update({ID: renameObj.ID, deleted: false}, {$set: {dispName: renameObj.newName}}, function (err) {
  165. if(err){
  166. callback(err, '重命名失败!');
  167. }
  168. else{
  169. new rationRepositoryDao().updateOprArr({ID: renameObj.ID, deleted: false}, oprtor, moment(Date.now()).format('YYYY-MM-DD HH:mm:ss'), function (err) {
  170. if(err){
  171. callback(err, '更新最近操作者失败!');
  172. }
  173. else{
  174. callback(null, '成功!');
  175. }
  176. });
  177. }
  178. });
  179. }
  180. rationRepositoryDao.prototype.deleteRationLib = function(oprtor, libId, callback){
  181. new rationRepositoryDao().updateOprArr({ID: libId, deleted: false}, oprtor, moment(Date.now()).format('YYYY-MM-DD HH:mm:ss'), function (err) {
  182. if(err){
  183. callback(err, '失败!')
  184. }
  185. else{
  186. rationRepository.find({ID: libId, deleted: false}, function (err, result) {
  187. if(err){
  188. callback(err, "没有数据!");
  189. }
  190. else{
  191. rationRepository.update({ID: libId, deleted: false}, {$set: {deleted: true}}, function (err) {
  192. if(err){
  193. callback(err, '移除工料机库失败!');
  194. }
  195. else{
  196. async.parallel([
  197. function (cb) {
  198. //移除工料机库内被引用标记
  199. gljMapModel.update({ID: result[0].gljLib, deleted: false}, {$pull: {rationLibs: {ID: libId}}}, function (err) {
  200. if(err){
  201. cb(err);
  202. }
  203. else{
  204. cb(null);
  205. }
  206. });
  207. },
  208. //删除库下定额
  209. function (cb) {
  210. rationItemModel.update({rationRepId: libId}, {$set: {isDeleted: true}}, {upsert: true, multi: true}, function (err) {
  211. if(err)cb(err);
  212. else cb(null);
  213. });
  214. },
  215. //删除库下章节树
  216. function (cb) {
  217. rationChapterTreeModel.update({rationRepId: libId}, {$set: {isDeleted: true}}, {upsert: true, multi: true}, function (err) {
  218. if(err)cb(err);
  219. else cb(null);
  220. })
  221. }
  222. ], function (err) {
  223. if(err) callback(err, 'fail');
  224. else callback(null, 'sc')
  225. });
  226. }
  227. });
  228. }
  229. });
  230. }
  231. });
  232. }
  233. module.exports = new rationRepositoryDao();