engineering_lib_model.js 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. /**
  2. * 计价规则标准库业务逻辑
  3. *
  4. * @author CaiAoLin
  5. * @date 2017/8/31
  6. * @version
  7. */
  8. const mongoose = require("mongoose");
  9. const BaseModel = require("../../common/base/base_model");
  10. let _ = require('lodash');
  11. class EngineeringLibModel extends BaseModel {
  12. /**
  13. * 构造函数
  14. *
  15. * @return {void}
  16. */
  17. constructor() {
  18. let parent = super();
  19. parent.model = mongoose.model('engineering_lib');
  20. parent.init();
  21. }
  22. /**
  23. * 获取标准库数据
  24. *
  25. * @param {Object} data
  26. * @return {Promise}
  27. */
  28. async getLib(data) {
  29. if (data.length <= 0) {
  30. return data;
  31. }
  32. let valuationIDs = [];
  33. // 整理出数据库需要查找的id,一次查找
  34. for(let valuation of data) {
  35. if (valuation === null) {
  36. continue;
  37. }
  38. if(valuation.id){
  39. valuationIDs.push(valuation.id);
  40. }
  41. }
  42. // 查找对应的id数据
  43. let condition = {visible:true,valuationID: {"$in": valuationIDs}};
  44. let engineeringLibList = await this.findDataByCondition(condition,null,false);
  45. engineeringLibList = _.sortBy(engineeringLibList,'seq');
  46. engineeringLibList = JSON.parse(JSON.stringify(engineeringLibList));
  47. // 组合计价规则id对应专业工程标准库数据
  48. let engineeringLib = {};
  49. for(let engineering of engineeringLibList){
  50. let tem = {//做一下转换,和原来的结构一致
  51. engineering_id:engineering._id.toString(),
  52. engineering:engineering.engineering,
  53. lib:engineering
  54. };
  55. if(engineeringLib[engineering.valuationID] === undefined){
  56. engineeringLib[engineering.valuationID] = [tem];
  57. }else {
  58. engineeringLib[engineering.valuationID].push(tem);
  59. }
  60. }
  61. // 替换计价规则数据
  62. let valuationData = JSON.parse(JSON.stringify(data));
  63. for(let valuation of valuationData) {
  64. if (valuation === null) {
  65. continue;
  66. }
  67. valuation.engineering_list = [];
  68. if(engineeringLib[valuation.id]){
  69. valuation.engineering_list = engineeringLib[valuation.id]
  70. }
  71. }
  72. return valuationData;
  73. };
  74. async getEngineering(engineering_id) {
  75. let condition = {_id: engineering_id};
  76. let engineering = await this.findDataByCondition(condition);
  77. return engineering;
  78. };
  79. }
  80. module.exports = EngineeringLibModel;