Переглянути джерело

Merge branch 'master' of http://192.168.1.41:3000/SmartCost/ConstructionOperation

TonyKang 5 роки тому
батько
коміт
546371c5e0

+ 2 - 2
modules/all_models/stdGlj_glj.js

@@ -40,11 +40,11 @@ const std_glj = new Schema({
     materialType: Number, //三材类型:钢材1、钢筋2、木材3、水泥4、标准砖5
     materialCoe: Number, //三材系数
     model: Number, //机型
-    //经济指标数据s
+    //经济指标数据
     materialIndexType:String,//工料指标类别
     materialIndexUnit:String,//工料指标单位
     materialIndexCoe:Number//单位转换系数
 
 },{versionKey: false});
 
-mongoose.model('std_glj_lib_gljList', std_glj, 'std_glj_lib_gljList');
+mongoose.model('std_glj_lib_gljList', std_glj, 'std_glj_lib_gljList');

+ 9 - 0
modules/common/std/std_ration_lib_map_model.js

@@ -52,6 +52,15 @@ class STDRationLibMapModel extends BaseModel {
         return result;
     }
 
+    // 获取所有费用定额的所有定额库
+    async getAllRationLibs() {
+        const libs = await this.findDataByCondition({ deleted: false }, null, false);
+        return libs.map(libData => ({
+            id: libData.ID,
+            name: libData.dispName
+        }));
+    }
+
 }
 
 export default STDRationLibMapModel;

+ 76 - 3
modules/ration_repository/models/ration_item.js

@@ -10,7 +10,6 @@ let rationRepositoryDao = require('./repository_map');
 const scMathUtil = require('../../../public/scMathUtil').getUtil();
 const rationItemModel = mongoose.model('std_ration_lib_ration_items');
 const stdRationLibModel = mongoose.model('std_ration_lib_map');
-const stdRationSectionModel = mongoose.model('std_ration_lib_ration_chapter_trees');
 const compleRationModel = mongoose.model('complementary_ration_items');
 import STDGLJListModel from '../../std_glj_lib/models/gljModel';
 import InstallationDao from '../models/installation';
@@ -21,6 +20,82 @@ import stdgljutil  from "../../../public/cache/std_glj_type_util";
 
 var rationItemDAO = function(){};
 
+/* rationItemDAO.prototype.copyLib = async function (sourceLibID, targetLibID) {
+    // coe-list
+    const coeIDMap = {};
+    const newCoeData = [];
+    const sourceCoeData = await _stdRationCoeModel.find({ libID: sourceLibID }, '-_id').lean();
+    const coeCount = await counter.counterDAO.getIDAfterCount(counter.moduleName.coeList, sourceCoeData.length);
+    const coeIdx = coeCount.sequence_value - (sourceCoeData.length - 1);
+    sourceCoeData.forEach((coe, index) => {
+        coeIDMap[coe.ID] = coeIdx + index;
+        newCoeData.push({
+            ...coe,
+            libID: targetLibID,
+            ID: coeIDMap[coe.ID]
+        });
+    });
+    await stdRationCoeModel.insertMany(newCoeData);
+    // ration-section
+    const sectionIDMap = {};
+    const newSectionData = [];
+    const sourceSectionData = await _stdRationSectionModel.find({ rationRepId: sourceLibID }, '-_id').lean();
+    const sectionCount = await counter.counterDAO.getIDAfterCount(counter.moduleName.rationTree, sourceSectionData.length);
+    const sectionIdx = sectionCount.sequence_value - (sourceSectionData.length - 1);
+    sourceSectionData.forEach((section, index) => {
+        sectionIDMap[section.ID] = sectionIdx + index;
+    });
+    sourceSectionData.forEach(section => {
+        newSectionData.push({
+            ...section,
+            rationRepId: targetLibID,
+            ID: sectionIDMap[section.ID],
+            ParentID: sectionIDMap[section.ParentID] || -1,
+            NextSiblingID: sectionIDMap[section.NextSiblingID] || -1
+        });
+    });
+    await stdRationSectionModel.insertMany(newSectionData);
+    // glj
+    const sourceGLJData = await stdGLJModel.find({ repositoryId: 182 }, '-_id').lean();
+    const gljIDMap = {};
+    sourceGLJData.forEach(glj => {
+        gljIDMap[glj.orgID] = glj.ID;
+    });
+    const newGLJData = sourceGLJData.map(glj => {
+        delete glj.orgID;
+        return glj;
+    });
+    await stdGLJModel.remove({ repositoryId: 182 }); // 5412
+    await stdGLJModel.insertMany(newGLJData);
+    // ration
+    const newRationData = [];
+    const sourceRationData = await _rationItemModel.find({ rationRepId: sourceLibID }, '-_id').lean();
+    const rationCount = await counter.counterDAO.getIDAfterCount(counter.moduleName.rations, sourceRationData.length);
+    const rationIdx = rationCount.sequence_value - (sourceRationData.length - 1);
+    sourceRationData.forEach((ration, index) => {
+        const rationID = rationIdx + index;
+        const sectionID = sectionIDMap[ration.sectionId];
+        const newRationCoeList = (ration.rationCoeList || []).map(rCoe => ({
+            no: rCoe.no,
+            ID: coeIDMap[rCoe.ID]
+        }));
+        const newRationGLJList = (ration.rationGljList || []).map(rGLJ => ({
+            ...rGLJ,
+            gljId: gljIDMap[rGLJ.gljId],
+        }));
+        newRationData.push({
+            ...ration,
+            rationRepId: targetLibID,
+            ID: rationID,
+            sectionId: sectionID,
+            rationCoeList: newRationCoeList,
+            rationGljList: newRationGLJList
+        });
+    });
+    await rationItemModel.insertMany(newRationData);
+
+};
+ */
 // 由于导入excel时,excel数据存在负的工程量,所以导入后一些定额人材机的消耗量可能为负,需要处理
 rationItemDAO.prototype.handleMinusQuantity = async function() {
     const updateTask = [];
@@ -46,8 +121,6 @@ rationItemDAO.prototype.handleMinusQuantity = async function() {
     if (updateTask.length) {
         await rationItemModel.bulkWrite(updateTask);
     }
-    console.log(`repIDs`);
-    console.log(repIDs);
 };
 
 rationItemDAO.prototype.prepareInitData = async function (rationRepId) {

+ 44 - 0
modules/std_glj_lib/models/gljModel.js

@@ -17,6 +17,50 @@ import counter from "../../../public/counter/counter";
 import async from "async";
 
 class GljDao  extends OprDao{
+    async copyLib(sourceLibID, targetLibID) {
+        const task = [
+            this.copyClassData(sourceLibID, targetLibID),
+            this.copyGLJData(sourceLibID, targetLibID)
+        ];
+        await Promise.all(task);
+    }
+
+    async copyClassData(sourceLibID, targetLibID) {
+        const sourceClassData = await gljClassModel.find({ repositoryId: sourceLibID }, '-_id').lean();
+        const insertData = sourceClassData.map(item => ({
+            ... item,
+            repositoryId: targetLibID
+        }));
+        if (insertData.length) {
+            await gljClassModel.insertMany(insertData);
+        }
+    }
+
+    async copyGLJData(sourceLibID, targetLibID) {
+        const sourceGLJData = await gljModel.find({ repositoryId: sourceLibID }, '-_id').lean();
+        const IDMapping = {};
+        const countData = await counter.counterDAO.getIDAfterCount(counter.moduleName.GLJ, sourceGLJData.length);
+        const countIdx = countData.sequence_value - (sourceGLJData.length - 1);
+        sourceGLJData.forEach((glj, index) => {
+            IDMapping[glj.ID] = countIdx + index;
+        });
+        const insertData = sourceGLJData.map(glj => {
+            const newComponent = (glj.component || []).map(c => ({
+                ID: IDMapping[c.ID],
+                consumeAmt: c.consumeAmt
+            }));
+            return {
+                ...glj,
+                repositoryId: targetLibID,
+                ID: IDMapping[glj.ID],
+                component: newComponent
+            };
+        });
+        if (insertData.length) {
+            await gljModel.insertMany(insertData);
+        }
+    }
+
     async getReference(repositoryId, gljId) {
         const gljLib = await gljMapModel.findOne({ID: repositoryId});
         const rationLibIds = gljLib.rationLibs.map(lib => lib.ID);

+ 3 - 2
modules/users/controllers/compilation_controller.js

@@ -215,7 +215,8 @@ class CompilationController extends BaseController {
 
             // 获取定额库
             let stdRationLibMapModel = new STDRationLibMapModel();
-            rationList = await stdRationLibMapModel.getRationLib(selectedCompilation._id);
+            //rationList = await stdRationLibMapModel.getRationLib(selectedCompilation._id);
+            rationList = await stdRationLibMapModel.getAllRationLibs();
 
             // 获取工料机库
             let stdGLJLibMapModel = new STDGLJLibMapModel();
@@ -234,7 +235,7 @@ class CompilationController extends BaseController {
             calculationList = await stdCalcProgramModel.getProgramList(selectedCompilation._id);
 
             //获取列设置库
-             mainTreeColList = await mainColFacade.getColLibsByCompilationID(selectedCompilation._id);
+            mainTreeColList = await mainColFacade.getColLibsByCompilationID(selectedCompilation._id);
 
              //获取清单模板库
             billTemplateList = await billTemplateFacade.getTemplateLibByCompilationID(selectedCompilation._id);