new_proj_controller.js 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. /**
  2. * Created by Mai on 2017/4/24.
  3. */
  4. let billsData = require('../../main/models/bills');
  5. let projCounter = require('../../main/models/proj_counter_model');
  6. let projSetting = require('../../main/models/proj_setting_model');
  7. let async = require('async');
  8. const uuidV1 = require('uuid/v1');
  9. const mongoose = require('mongoose');
  10. let mainColLibModel = mongoose.model('std_main_col_lib');
  11. import BillsTemplateModel from "../models/templates/bills_template_model";
  12. import EngineeringLibModel from "../../users/models/engineering_lib_model";
  13. module.exports = {
  14. copyTemplateData: async function (property, newProjID, callback) {
  15. // 原ID引用更新成新ID引用
  16. function parseCalcBase(calcBase, uuidMapping) {
  17. const orgIDRefs = [...new Set(calcBase.match(/@\d+/g))];
  18. orgIDRefs.forEach(orgRef => {
  19. const orgID = orgRef.match(/\d+/)[0];
  20. const newID = uuidMapping[orgID] || null;
  21. // ID匹配不上则不转换这个引用
  22. if (!newID) {
  23. return;
  24. }
  25. const replaceStr = `@${newID}`;
  26. calcBase = calcBase.replace(new RegExp(`${orgRef}\\b`, 'g'), replaceStr);
  27. });
  28. return calcBase;
  29. }
  30. async.parallel([
  31. async function (cb) {
  32. // 获取清单模板数据
  33. let billsTemplateModel = new BillsTemplateModel();
  34. let templateData = JSON.stringify(await billsTemplateModel.getTemplateDataForNewProj(property.templateLibID));
  35. let billsDatas = JSON.parse(templateData);
  36. let uuidMaping = Object.create(null);
  37. uuidMaping['-1'] = -1;
  38. //建立uuid-ID映射
  39. for(let bill of billsDatas){
  40. uuidMaping[bill.ID] = uuidV1();
  41. }
  42. const reg = /@\d+/;
  43. billsDatas.forEach(function (template) {
  44. template.projectID = newProjID;
  45. template.ID = uuidMaping[template.ID] ? uuidMaping[template.ID] : -1;
  46. template.ParentID = uuidMaping[template.ParentID] ? uuidMaping[template.ParentID] : -1;
  47. template.NextSiblingID = uuidMaping[template.NextSiblingID] ? uuidMaping[template.NextSiblingID] : -1;
  48. const needToParseCalcBase = template.calcBase && reg.test(template.calcBase);
  49. if (needToParseCalcBase) {
  50. template.calcBase = parseCalcBase(template.calcBase, uuidMaping);
  51. }
  52. });
  53. billsData.insertData(billsDatas, callback);
  54. },
  55. async function (cb) {
  56. let engineeringModel = new EngineeringLibModel();
  57. let engineering = await engineeringModel.getEngineering(property.engineering_id);
  58. let mainTreeCol = await mainColLibModel.findOne({'ID':property.colLibID});
  59. projSetting.insertData({"projectID": newProjID, main_tree_col: mainTreeCol.main_tree_col,glj_col:engineering.glj_col}, cb);
  60. }
  61. ], (err) => callback(err));
  62. }
  63. };