| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 |
- // 开这个模块的最初原因:重构ESModule为CommonJS以升级node版本后,遇到module循环引用问题,将造成循环引用的方法抽离放到这个模块
- module.exports = {
- getNewProjectGLJFromMissMixratio,
- getProjectGLJNewData,
- setIDfromCounter,
- getUnitPriceFileId,
- };
- const scMathUtil = require('../../../public/scMathUtil').getUtil();
- const mongoose = require('mongoose');
- const std_glj_lib_gljList_model = mongoose.model('std_glj_lib_gljList');
- const counterModel = mongoose.model('counter');
- const projectsModel = mongoose.model('projects');
- //根据缺少项目工料机的组成物信息,反向生成对应的项目工料机
- async function getNewProjectGLJFromMissMixratio(projectID, lessMix, projectGLJMap, newProjectGLJList, ext) {
- let lessIDList = [];
- let uniqMap = {};//去重
- let lessStdMix = [];//防止组成物中改了名称等,但是通过glj_id取出来的是还没改前的原始数据
- if (lessMix.length > 0) {
- for (let lm of lessMix) {
- let parentglj = projectGLJMap[lm.connect_key];
- if (!parentglj) throw `含有组成物工料机${lm.connect_key},没有找到,添加定额失败`;
- if ((parentglj.from == "std" || lm.from == "std") && lm.code != "80CCS") {//车船税特殊处理
- if (!uniqMap[lm.glj_id]) {
- lessIDList.push(lm.glj_id);
- uniqMap[lm.glj_id] = lm;
- }
- lessStdMix.push(lm);
- } else {//来自组成物的直接设置
- lm.from = 'cpt';
- lm.gljType = lm.type;
- let t_mg = getProjectGLJNewData(lm, projectID);
- newProjectGLJList.push(t_mg);
- projectGLJMap[getIndex(lm)] = t_mg;
- }
- }
- }
- if (lessIDList.length > 0) {
- let less_stds = await std_glj_lib_gljList_model.find({ 'ID': { '$in': lessIDList } }).lean();
- let less_stds_map = {};
- for (let les of less_stds) {
- less_stds_map[les.ID] = les;
- }
- for (let t_l_m of lessStdMix) {
- let t_nglj = less_stds_map[t_l_m.glj_id];
- t_nglj.from = 'std';
- //防止组成物中改了名称等,但是通过glj_id取出来的是还没改前的原始数据
- t_nglj.name = t_l_m.name;
- t_nglj.code = t_l_m.code;
- t_nglj.gljType = t_l_m.type;
- t_nglj.specs = t_l_m.specs;
- t_nglj.unit = t_l_m.unit;
- let t_np = getProjectGLJNewData(t_nglj, projectID, ext);
- newProjectGLJList.push(t_np);
- projectGLJMap[getIndex(t_l_m)] = t_np;
- }
- }
- return newProjectGLJList;
- }
- function getProjectGLJNewData(tmp, projectId, ext) {
- let gljData = {
- glj_id: tmp.ID,
- repositoryId: tmp.repositoryId,
- project_id: projectId,
- code: tmp.code,
- name: tmp.name,
- specs: tmp.specs ? tmp.specs : '',
- unit: tmp.unit === undefined ? '' : tmp.unit,
- type: tmp.gljType,
- adjCoe: tmp.adjCoe,
- original_code: tmp.code,
- materialType: tmp.materialType, //三材类别
- materialCoe: tmp.materialCoe,
- base_price: tmp.basePrice,
- market_price: tmp.basePrice,
- is_main_material: tmp.is_main_material ? tmp.is_main_material : 1,
- from: tmp.from ? tmp.from : "std",
- is_adjust_price:0,
- is_evaluate:0,
- is_eval_material:0
- };
- if (gljData.from == 'std' && ext && ext.priceField && (tmp.priceProperty && tmp.priceProperty[ext.priceField] != undefined && tmp.priceProperty[ext.priceField] != null)) {
- const basePrice = scMathUtil.roundTo(tmp.priceProperty[ext.priceField], -6);
- gljData.base_price = basePrice;
- gljData.market_price = basePrice;
- }
- return gljData;
- }
- async function setIDfromCounter(name, list, map, keyfield) {//map,keyfield
- let update = { $inc: { sequence_value: list.length } };
- let condition = { _id: name };
- let options = { new: true };
- // 先查找更新
- let counter = await counterModel.findOneAndUpdate(condition, update, options);
- let firstID = counter.sequence_value - (list.length - 1);
- for (let a of list) {
- a.id = firstID;
- firstID += 1
- if (map && keyfield) {
- let key = a[keyfield];
- map[key] ? map[key].push(a) : map[key] = [a]
- }
- }
- }
- /**
- * 根据项目id获取单价文件列表id
- *
- * @param {Number} projectId
- * @return {Promise}
- */
- async function getUnitPriceFileId(projectId) {
- let result = 0;
- let startTime = +new Date();
- let projectData = await projectsModel.find({ ID: projectId }, ['property.unitPriceFile']);
- if (projectData === null) {
- return result;
- }
- let endTime = +new Date();
- console.log("取单价文件列表id时间-----" + (endTime - startTime));
- projectData = projectData[0];
- result = projectData.property.unitPriceFile !== undefined ? projectData.property.unitPriceFile.id : 0;
- return result;
- };
- function getIndex(obj,tpops){
- let pops = tpops?tpops:['code','name','specs','unit','type'];
- let t_index = '';
- let k_arr=[];
- for(let p of pops){
- let tmpK = (obj[p]==undefined||obj[p]==null||obj[p]=='')?'null':obj[p];
- k_arr.push(tmpK);
- }
- t_index=k_arr.join("|-|");
- return t_index;
- }
|