project_model.js 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. /**
  2. * Created by Mai on 2017/1/18.
  3. */
  4. import UnitPriceFileModel from "../../glj/models/unit_price_file_model";
  5. let counter = require("../../../public/counter/counter.js");
  6. let newProjController = require('../controllers/new_proj_controller');
  7. let copyProjController = require('../controllers/copy_proj_controller');
  8. let Projects = require("./project_schema");
  9. let projectType = {
  10. folder: 'Folder',
  11. tender: 'Tender',
  12. project: 'Project',
  13. engineering: 'Engineering',
  14. };
  15. let ProjectsDAO = function(){};
  16. ProjectsDAO.prototype.getUserProjects = function(userId, callback){
  17. Projects.find({'$or': [{'userID': userId, 'deleteInfo': null}, {'userID': userId, 'deleteInfo.deleted': {'$in': [null, false]}}]}, '-_id', function(err, templates){
  18. if (err) {
  19. callback(1, 'Error', null);
  20. } else {
  21. callback(0, '', templates);
  22. }
  23. });
  24. };
  25. ProjectsDAO.prototype.getUserProject = function (userId, ProjId, callback) {
  26. Projects.findOne({userID: userId, ID: ProjId}, '-_id', function(err, template){
  27. if (err) {
  28. callback(1, '找不到标段数据', null);
  29. } else {
  30. callback(0, '', template);
  31. }
  32. });
  33. }
  34. ProjectsDAO.prototype.updateUserProjects = async function(userId, datas, callback){
  35. let data, project, updateLength = 0, hasError = false, deleteInfo = null, i, newProject;
  36. let updateAll = function (err) {
  37. if (!err){
  38. updateLength += 1;
  39. if (updateLength === datas.length) {
  40. callback(0, '', datas);
  41. }
  42. } else {
  43. hasError = true;
  44. console.log(err);
  45. callback(1, '提交数据出错.', null);
  46. }
  47. };
  48. if (datas){
  49. for (i = 0; i < datas.length && !hasError; i++){
  50. data = datas[i];
  51. if (data.updateData.name !== undefined) {
  52. data.updateData.name = data.updateData.name.trim();
  53. }
  54. if (data.updateType === 'update') {
  55. Projects.update({userID: userId, ID: data.updateData.ID}, data.updateData, updateAll)
  56. } else if (data.updateType === 'new') {
  57. data.updateData['userID'] = userId;
  58. data.updateData['createDateTime'] = new Date();
  59. newProject = new Projects(data.updateData);
  60. // 查找同级是否存在同名数据
  61. let exist = await this.isExist(data.updateData.name, data.updateData.ParentID);
  62. if (exist) {
  63. callback(1, '同级目录已存在相同名称数据.', null);
  64. return;
  65. }
  66. newProject.save(async function (err, result) {
  67. if (!err && result._doc.projType === projectType.tender) {
  68. newProjController.copyTemplateData(data.updateData.property, newProject.ID, updateAll);
  69. // 新增单价文件
  70. let unitPriceFileModel = new UnitPriceFileModel();
  71. let insertData = {
  72. name: data.updateData.name,
  73. project_id: data.updateData.ID
  74. };
  75. let addResult = await unitPriceFileModel.add(insertData);
  76. if (!addResult) {
  77. callback(1, '新增单价文件失败.', null);
  78. return;
  79. }
  80. } else {
  81. updateAll(err);
  82. }
  83. });
  84. } else if (data.updateType === 'delete') {
  85. deleteInfo = {};
  86. deleteInfo['deleted'] = true;
  87. deleteInfo['deleteDateTime'] = new Date();
  88. deleteInfo['deleteBy'] = userId;
  89. data.updateData['deleteInfo'] = deleteInfo;
  90. Projects.update({userID: userId, ID: data.updateData.ID}, data.updateData, updateAll);
  91. } else {
  92. hasError = true;
  93. callback(1, '提交数据错误.', null);
  94. }
  95. }
  96. }
  97. };
  98. ProjectsDAO.prototype.copyUserProjects = function (userId, datas, callback) {
  99. let data, project, updateLength = 0, hasError = false, deleteInfo = null, tempType = 1, i;
  100. let updateAll = function (err) {
  101. if (!err){
  102. updateLength += 1;
  103. if (updateLength === datas.length) {
  104. callback(0, '', datas);
  105. }
  106. } else {
  107. hasError = true;
  108. callback(1, '提交数据出错.', null);
  109. }
  110. };
  111. if (datas) {
  112. for (i = 0; i < datas.length && !hasError; i++) {
  113. data = datas[i];
  114. if (data.updateType === 'update') {
  115. Projects.update({userID: userId, ID: data.updateData.ID}, data.updateData, updateAll)
  116. } else if (data.updateType === 'copy') {
  117. data.updateData['userID'] = userId;
  118. data.updateData['createDateTime'] = new Date();
  119. let newProject = new Projects(data.updateData);
  120. newProject['srcProjectId'] = data.srcProjectId;
  121. newProject.save(function (err, result) {
  122. if (!err && result._doc.projType === 'Tender') {
  123. copyProjController.copyProjectData(newProject.srcProjectId, result._doc.ID, updateAll);
  124. } else {
  125. updateAll(err);
  126. }
  127. });
  128. } else {
  129. hasError = true;
  130. callback(1, '提交数据错误', null);
  131. }
  132. }
  133. }
  134. };
  135. ProjectsDAO.prototype.rename = async function (userId, data, callback){
  136. try {
  137. if (data.id === undefined || data.id === '') {
  138. throw '数据错误!';
  139. }
  140. if (data.newName === undefined || data.newName === '') {
  141. throw '请填写名称!';
  142. }
  143. // 查找同级是否存在同名数据
  144. let exist = await this.isExist(data.newName, data.parentID);
  145. if (exist) {
  146. throw '同级目录已存在相同名称数据';
  147. }
  148. Projects.update({userID: userId, ID: data.id}, {name: data.newName}, function(err){
  149. if (err){
  150. throw '项目不存在';
  151. }
  152. });
  153. } catch (error) {
  154. callback(1, error, null);
  155. return;
  156. }
  157. callback(0, '');
  158. };
  159. ProjectsDAO.prototype.beforeOpenProject = function (userId, projectId, updateData, callback){
  160. updateData['recentDateTime'] = new Date();
  161. Projects.update({userID: userId, ID: projectId}, updateData, function(err){
  162. if (err){
  163. callback(1, '项目不存在.');
  164. } else {
  165. callback(0, '');
  166. }
  167. });
  168. };
  169. ProjectsDAO.prototype.getNewProjectID = function (count, callback) {
  170. counter.counterDAO.getIDAfterCount(counter.moduleName.project, count, function (err, result) {
  171. let highID = result.value.sequence_value;
  172. if (!err) {
  173. callback(0, '', {lowID: highID - count + 1, highID: highID});
  174. } else {
  175. callback(1, '获取主键失败', null);
  176. }
  177. });
  178. };
  179. ProjectsDAO.prototype.getProject = function (key, callback) {
  180. if (callback) {
  181. Projects.findOne({'_id': key}, function (err, result) {
  182. if (err) {
  183. callback(1, '查找标段失败');
  184. } else {
  185. callback(0, result);
  186. }
  187. });
  188. } else {
  189. return Projects.findOne({'ID': key}).exec();
  190. }
  191. };
  192. /**
  193. * 整理工程专业对应标准库数据
  194. *
  195. * @param {Object} data
  196. * @return {Boolean}
  197. */
  198. ProjectsDAO.prototype.isExist = async function(name, parentID) {
  199. parentID = parseInt(parentID);
  200. if (name === '' || isNaN(parentID)) {
  201. return true;
  202. }
  203. let count = await Projects.count({ParentID: parentID, name: name});
  204. return count > 0;
  205. };
  206. module.exports ={
  207. project: new ProjectsDAO(),
  208. projType: projectType
  209. };