Browse Source

导入组成物,支持多消耗量

vian 5 years ago
parent
commit
780f5ce4d2

+ 1 - 1
modules/std_glj_lib/controllers/gljController.js

@@ -319,7 +319,7 @@ class GljController extends BaseController{
                     fs.unlink(uploadFullName);
                 }
                 responseData.err = 1;
-                responseData.msg = error;
+                responseData.msg = typeof error !== 'string' ? error.toString() : error;
                 response.json(responseData);
             }
         });

+ 39 - 14
modules/std_glj_lib/models/gljModel.js

@@ -10,6 +10,7 @@ const scMathUtil = require('../../../public/scMathUtil').getUtil();
 const rationMapModel = mongoose.model('std_ration_lib_map');
 const rationModel = mongoose.model('std_ration_lib_ration_items');
 const complementaryRationModel = mongoose.model('complementary_ration_items');
+const { isDef } = require('../../../public/common_util');
 import {OprDao} from  "./gljMapModel";
 import moment from "moment";
 import counter from "../../../public/counter/counter";
@@ -697,6 +698,8 @@ class GljDao  extends OprDao{
 
     }
 
+    // 导入组成物(替换原本的数据)
+    // excel第一行应为:人材机、组成物、消耗量(或者:消耗-一般、消耗-简易等)
     async importComponents(gljLibId, sheetData) {
         const gljLib = await gljMapModel.findOne({ID: gljLibId});
         if (!gljLib) {
@@ -706,25 +709,40 @@ class GljDao  extends OprDao{
         if (!compilation) {
             throw '不存在此费用定额';
         }
+        const consumeAmtProperties = compilation.consumeAmtProperties || [];
+        // 根据第一行数据,获取列号与字段映射
+        const colMapping = {};
+        const firstRow = sheetData[0];
+        const multiConsumeAmt = [];
+        firstRow.forEach((colData, col) => {
+            if (colData === '人材机') {
+                colMapping.code = col;
+            } else if (colData === '组成物') {
+                colMapping.componentCode = col;
+            } else if (colData === '消耗量') {
+                colMapping.consumeAmt = col;
+            } else {
+                // 多消耗量
+                const consumeAmtItem = consumeAmtProperties.find(item => item.consumeAmt.dataName === colData);
+                if (consumeAmtItem) {
+                    colMapping[consumeAmtItem.consumeAmt.dataCode] = col;
+                    multiConsumeAmt.push(consumeAmtItem.consumeAmt.dataCode);
+                }
+            }
+        });
+        if (Object.getOwnPropertyNames(colMapping).length < 3) {
+            throw 'exel数据错误';
+        }
         // 将所有人材机进行编码映射
         const allGLJs = await gljModel.find({repositoryId: gljLibId}, {ID: true, code: true}).lean();
         const codeMapping = {};
         allGLJs.forEach(glj => codeMapping[glj.code] = glj);
-        // excel表格列号与字段的映射
-        const colMapping = {
-            // 材料编码
-            code: 0,
-            // 组成物编码
-            componentCode: 1,
-            // 组成物消耗量
-            consumeAmt: 2
-        };
         // 跳过列头
         for (let row = 1; row < sheetData.length; row++) {
             const rowData = sheetData[row];
             const code = rowData[colMapping.code];
             const componentCode = rowData[colMapping.componentCode];
-            const consumeAmt = +rowData[colMapping.consumeAmt];
+            //const consumeAmt = +rowData[colMapping.consumeAmt];
             const glj = codeMapping[code];
             const component = codeMapping[componentCode];
             if (!glj || !component) {
@@ -733,10 +751,17 @@ class GljDao  extends OprDao{
             if (!glj.component) {
                 glj.component = [];
             }
-            glj.component.push({
-                ID: component.ID,
-                consumeAmt: consumeAmt
-            });
+            const componentGLJ = { ID: component.ID };  
+            if (multiConsumeAmt.length) { // 多消耗量
+                const consumeAmtProperty = {};
+                for (const dataCode of multiConsumeAmt) {
+                    consumeAmtProperty[dataCode] = +rowData[colMapping[dataCode]]
+                }
+                componentGLJ.consumeAmtProperty = consumeAmtProperty;
+            } else { // 单消耗量
+                componentGLJ.consumeAmt = +rowData[colMapping.consumeAmt]
+            }
+            glj.component.push(componentGLJ);
         }
         // 更新数据
         const tasks = [];