Browse Source

1.修改工料机汇总组成物读取逻辑(加入补充工料机库)
2.修改工料机缓存显示逻辑

olym 7 years ago
parent
commit
376a707cda

+ 4 - 4
modules/common/std/std_glj_lib_glj_list_model.js

@@ -49,12 +49,12 @@ class STDGLJLibGLJListModel extends BaseModel {
     /**
     /**
      * 获取对应组成物数据
      * 获取对应组成物数据
      *
      *
-     * @param {String} code
+     * @param {Number} gljId
      * @return {Promise}
      * @return {Promise}
      */
      */
-    async getComponent(code) {
+    async getComponent(gljId) {
         let result = [];
         let result = [];
-        let libGljData = await this.findDataByCondition({code: code});
+        let libGljData = await this.findDataByCondition({ID: gljId});
         if (libGljData === null || libGljData.component.length <= 0) {
         if (libGljData === null || libGljData.component.length <= 0) {
             return result;
             return result;
         }
         }
@@ -78,7 +78,7 @@ class STDGLJLibGLJListModel extends BaseModel {
         componentGljData = JSON.stringify(componentGljData);
         componentGljData = JSON.stringify(componentGljData);
         componentGljData = JSON.parse(componentGljData);
         componentGljData = JSON.parse(componentGljData);
         for(let gljData of componentGljData) {
         for(let gljData of componentGljData) {
-            gljData.connectCode = code;
+            gljData.connectCode = libGljData.code;
             gljData.consumption = componentConsume[gljData.ID];
             gljData.consumption = componentConsume[gljData.ID];
             componentData.push(gljData);
             componentData.push(gljData);
         }
         }

+ 74 - 0
modules/complementary_glj_lib/models/gljModel.js

@@ -4,6 +4,7 @@
 import {complementaryGljModel, stdGljModel, gljClassModel} from "./schemas";
 import {complementaryGljModel, stdGljModel, gljClassModel} from "./schemas";
 import counter from "../../../public/counter/counter";
 import counter from "../../../public/counter/counter";
 import async from "async";
 import async from "async";
+import STDGLJLibGLJListModel from "../../common/std/std_glj_lib_glj_list_model";
 
 
 class GljDao {
 class GljDao {
     getGljTypes (gljLibId, callback){
     getGljTypes (gljLibId, callback){
@@ -229,6 +230,79 @@ class GljDao {
             callback(err, results);
             callback(err, results);
         });
         });
     }
     }
+
+    /**
+     * 获取组成物数据
+     *
+     * @param {Number} gljId
+     * @return {Promise}
+     */
+    async getComponent(gljId) {
+        let result = [];
+        let libGljData = await complementaryGljModel.find({ID: gljId});
+        if (libGljData === null || libGljData.component.length <= 0) {
+            return result;
+        }
+
+        // 标准工料机库
+        let componentIdListStd = [];
+        // 补充工料机库
+        let componentIdListCpt = [];
+        let componentConsume = {};
+        // 整理数据
+        for (let component of libGljData.component) {
+            if (component.isStd) {
+                componentIdListStd.push(component.ID);
+            } else {
+                componentIdListCpt.push(component.ID);
+            }
+            let isStdFlag = component.isStd ? 'std' : 'cpt';
+            componentConsume[component.ID + '_' + isStdFlag] = component.consumeAmt;
+        }
+
+        // 查找标准库数据
+        let condition = {};
+        let componentStdGljData = [];
+        if (componentIdListStd.length > 0) {
+            let gljListModel = new STDGLJLibGLJListModel();
+            condition = {ID: {$in: componentIdListStd}};
+            componentStdGljData = await gljListModel.findDataByCondition(condition, null, false);
+        }
+
+        // 查找补充库数据
+        let componentCptGljData = [];
+        if (componentIdListCpt.length > 0) {
+            condition = {ID: {$in: componentIdListCpt}};
+            componentCptGljData = await complementaryGljModel.find(condition);
+        }
+
+        if (componentCptGljData === null && componentStdGljData === null) {
+            return result;
+        }
+
+        // 整理数据
+        if (componentStdGljData.length > 0) {
+            componentStdGljData = JSON.stringify(componentStdGljData);
+            componentStdGljData = JSON.parse(componentStdGljData);
+            for(let gljData of componentStdGljData) {
+                gljData.connectCode = libGljData.code;
+                gljData.consumption = componentConsume[gljData.ID + '_std'];
+                result.push(gljData);
+            }
+        }
+
+        if (componentCptGljData.length > 0) {
+            componentCptGljData = JSON.stringify(componentCptGljData);
+            componentCptGljData = JSON.parse(componentCptGljData);
+            for(let gljData of componentCptGljData) {
+                gljData.connectCode = libGljData.code;
+                gljData.consumption = componentConsume[gljData.ID + '_cpt'];
+                result.push(gljData);
+            }
+        }
+
+        return result;
+    }
 }
 }
 
 
 export default GljDao;
 export default GljDao;

+ 20 - 15
modules/glj/models/glj_list_model.js

@@ -14,6 +14,7 @@ import GLJTypeConst from "../../common/const/glj_type_const";
 import RationGLJFacade from "../../ration_glj/facade/ration_glj_facade";
 import RationGLJFacade from "../../ration_glj/facade/ration_glj_facade";
 import STDGLJLibGLJListModel from "../../common/std/std_glj_lib_glj_list_model";
 import STDGLJLibGLJListModel from "../../common/std/std_glj_lib_glj_list_model";
 import MixRatioModel from "./mix_ratio_model";
 import MixRatioModel from "./mix_ratio_model";
+import GljModel from "../../complementary_glj_lib/models/gljModel";
 const ProjectModel = require('../../pm/models/project_model').project;
 const ProjectModel = require('../../pm/models/project_model').project;
 
 
 class GLJListModel extends BaseModel {
 class GLJListModel extends BaseModel {
@@ -204,19 +205,16 @@ class GLJListModel extends BaseModel {
             glj.quantity = totalComposition[glj.code] !== undefined ? totalComposition[glj.code] : glj.quantity;
             glj.quantity = totalComposition[glj.code] !== undefined ? totalComposition[glj.code] : glj.quantity;
             glj.quantity = compositionConsumption[gljId] !== undefined ?  glj.quantity + compositionConsumption[gljId] : glj.quantity;
             glj.quantity = compositionConsumption[gljId] !== undefined ?  glj.quantity + compositionConsumption[gljId] : glj.quantity;
 
 
-            // 消耗值为0的数据不显示
-            if (glj.quantity === 0) {
-                delete gljList[index];
-                continue;
-            }
             // 组成物数据
             // 组成物数据
             gljList[index].ratio_data = mixRatioData[gljId] !== undefined ? mixRatioData[gljId] : [];
             gljList[index].ratio_data = mixRatioData[gljId] !== undefined ? mixRatioData[gljId] : [];
 
 
+            glj.unit_price.base_price = parseFloat(glj.unit_price.base_price).toFixed(2);
+            glj.unit_price.market_price = parseFloat(glj.unit_price.market_price).toFixed(2);
             // 计算调整基价
             // 计算调整基价
             switch (glj.unit_price.type + '') {
             switch (glj.unit_price.type + '') {
                 // 人工: 调整基价=基价单价*调整系数
                 // 人工: 调整基价=基价单价*调整系数
                 case GLJTypeConst.LABOUR:
                 case GLJTypeConst.LABOUR:
-                    glj.adjust_price = glj.adjustment * glj.unit_price.base_price;
+                    glj.adjust_price = parseFloat(glj.adjustment * glj.unit_price.base_price).toFixed(2);
                     break;
                     break;
                 // 机械类型的算法
                 // 机械类型的算法
                 case GLJTypeConst.MACHINE:
                 case GLJTypeConst.MACHINE:
@@ -266,7 +264,7 @@ class GLJListModel extends BaseModel {
             // 判断类型,如果是混凝土、砂浆或者配合比则查找对应的组成物(前提是没有对应的项目工料机数据)
             // 判断类型,如果是混凝土、砂浆或者配合比则查找对应的组成物(前提是没有对应的项目工料机数据)
             if (isAddProjectGLJ && (data.type === GLJTypeConst.CONCRETE || data.type === GLJTypeConst.MORTAR ||
             if (isAddProjectGLJ && (data.type === GLJTypeConst.CONCRETE || data.type === GLJTypeConst.MORTAR ||
                 data.type === GLJTypeConst.MIX_RATIO || data.type === GLJTypeConst.GENERAL_MACHINE)) {
                 data.type === GLJTypeConst.MIX_RATIO || data.type === GLJTypeConst.GENERAL_MACHINE)) {
-                this.compositionInit(data.code, data.project_id, unitPriceFileId);
+                this.compositionInit(data, unitPriceFileId);
             }
             }
 
 
             // 新增单价文件
             // 新增单价文件
@@ -416,14 +414,20 @@ class GLJListModel extends BaseModel {
      * 工料机中组成物操作
      * 工料机中组成物操作
      * 该方法只在确保没有对应项目工料机的时候才会调用
      * 该方法只在确保没有对应项目工料机的时候才会调用
      *
      *
-     * @param {String} code
+     * @param {Object} data
      * @param {Number} projectId
      * @param {Number} projectId
-     * @param {Number} unitPriceFileId
      * @return {void}
      * @return {void}
      */
      */
-    async compositionInit(code, projectId, unitPriceFileId) {
+    async compositionInit(data, unitPriceFileId) {
+        let gljId = data.glj_id === undefined ? 0 : data.glj_id;
+        let projectId = data.project_id === undefined ? 0 : data.project_id;
+        if (code === 0 || projectId === 0) {
+            throw '参数错误';
+        }
+        let fromTable = data.from === undefined ? 'std' : data.from;
+
         // 查找对应组成物的项目工料机数据
         // 查找对应组成物的项目工料机数据
-        let [projectGljList, compositionGljList] = await this.getCompositionGLJList(code, projectId, 'name');
+        let [projectGljList, compositionGljList] = await this.getCompositionGLJList(gljId, projectId, 'name', fromTable);
 
 
         // 整理配合比待插入数据
         // 整理配合比待插入数据
         let mixRatioInsertData = [];
         let mixRatioInsertData = [];
@@ -567,15 +571,16 @@ class GLJListModel extends BaseModel {
     /**
     /**
      * 获取混凝土等有组成物相关工料机对应的组成物项目工料机数据
      * 获取混凝土等有组成物相关工料机对应的组成物项目工料机数据
      *
      *
-     * @param {String} code
+     * @param {Number} gljId
      * @param {Number} projectId
      * @param {Number} projectId
      * @param {String} indexBy
      * @param {String} indexBy
+     * @param {String} fromTable
      * @return {Promise} 返回组成物工料机数据和组成物列表数据
      * @return {Promise} 返回组成物工料机数据和组成物列表数据
      */
      */
-    async getCompositionGLJList(code, projectId, indexBy = null) {
+    async getCompositionGLJList(gljId, projectId, indexBy = null, fromTable = 'std') {
         // 获取对应的组成物数据
         // 获取对应的组成物数据
-        let stdGljLibGljListModel = new STDGLJLibGLJListModel();
-        let componentGljList = await stdGljLibGljListModel.getComponent(code);
+        let gljListModel = fromTable === 'std' ? new STDGLJLibGLJListModel() : new GljModel();
+        let componentGljList = await gljListModel.getComponent(gljId);
 
 
         if (componentGljList.length <= 0) {
         if (componentGljList.length <= 0) {
             throw '不存在对应的组成物';
             throw '不存在对应的组成物';

+ 10 - 0
web/building_saas/glj/js/project_glj.js

@@ -203,6 +203,16 @@ function init() {
         if (jsonData.length <= 0) {
         if (jsonData.length <= 0) {
             // 赋值
             // 赋值
             jsonData = data.gljList !== undefined && data.gljList.length > 0 ? data.gljList : [];
             jsonData = data.gljList !== undefined && data.gljList.length > 0 ? data.gljList : [];
+            if (jsonData.length > 0) {
+                // 不显示消耗量为0的数据
+                let tmpData = [];
+                for(let data of jsonData) {
+                    if (data.quantity !== 0) {
+                        tmpData.push(data);
+                    }
+                }
+                jsonData = tmpData;
+            }
             mixRatioConnectData = data.mixRatioConnectData !== undefined ? data.mixRatioConnectData : mixRatioConnectData;
             mixRatioConnectData = data.mixRatioConnectData !== undefined ? data.mixRatioConnectData : mixRatioConnectData;
 
 
             host = data.constData.hostname !== undefined ? data.constData.hostname : '';
             host = data.constData.hostname !== undefined ? data.constData.hostname : '';