Przeglądaj źródła

人材机库,批量插入、批量删除消耗量为0的组成物

zhongzewei 6 lat temu
rodzic
commit
255a391f5c

Plik diff jest za duży
+ 1 - 0
lib/lz-string/lz-string.min.js


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

@@ -1,11 +1,14 @@
 /**
  * Created by Zhong on 2017/8/11.
  */
-
+import mongoose from 'mongoose';
 import BaseController from "../../common/base/base_controller";
 import stdgljutil  from "../../../public/cache/std_glj_type_util";
 import GljDao from "../models/gljModel";
 import rationItemDao from "../../ration_repository/models/ration_item";
+const multiparty = require("multiparty");
+const LZString = require('lz-string');
+const gljModel = mongoose.model('std_glj_lib_gljList');
 
 let gljDao = new GljDao();
 let callback = function(req, res, err, message, data){
@@ -117,6 +120,29 @@ class GljController extends BaseController{
             callback(req, res, err, message, rst);
         })
     }
+    async batchUpdateComponent(req, res){
+        const form = new multiparty.Form();
+        form.parse(req, async function(err, fields, files) {
+            try{
+                let compressData = fields.compressData !== undefined && fields.compressData.length > 0 ? fields.compressData[0] : null;
+                if(!compressData){
+                    throw '数据错误';
+                }
+                let updateDatas = JSON.parse(LZString.decompressFromUTF16(compressData));
+                let bulkArr = [];
+                for(let uData of updateDatas){
+                    bulkArr.push({updateOne: {filter: {ID: uData.ID}, update: {$set: {component: uData.component, basePrice: uData.basePrice}}}});
+                }
+                if(bulkArr.length > 0){
+                    await gljModel.bulkWrite(bulkArr);
+                }
+                res.json({err: 0, data: null, msg: 'success'});
+            }
+            catch (err){
+                res.json({err: 1, data: null, msg: err});
+            }
+        });
+    }
     mixUpdateGljItems(req, res){
         let repId = req.body.repositoryId,
             updateItems = JSON.parse(req.body.updateItems),

+ 1 - 0
modules/std_glj_lib/routes/routes.js

@@ -34,6 +34,7 @@ module.exports = function (app) {
     router.post("/getGljTree",gljController.auth, gljController.init, gljController.getGljTree);
     router.post("/getGljItems",gljController.auth, gljController.init, gljController.getGljItems);
     router.post("/updateComponent",gljController.auth, gljController.init, gljController.updateComponent);
+    router.post("/batchUpdateComponent",gljController.auth, gljController.init, gljController.batchUpdateComponent);
     router.post("/mixUpdateGljItems",gljController.auth, gljController.init, gljController.mixUpdateGljItems);
     router.post("/getGljItemsByIds",gljController.auth, gljController.init, gljController.getGljItemsByIds);
     router.post("/getGljItemsByCodes",gljController.auth, gljController.init, gljController.getGljItemsByCodes);

+ 2 - 1
package.json

@@ -31,7 +31,8 @@
     "node-xlsx": "^0.11.2",
     "pdfkit": "^0.8.2",
     "ueditor": "^1.2.3",
-    "node-schedule": "^1.3.0"
+    "node-schedule": "^1.3.0",
+    "lz-string": "^1.4.4"
   },
   "scripts": {
     "start": "C:\\Users\\mai\\AppData\\Roaming\\npm\\babel-node.cmd operation.js"

+ 2 - 0
web/maintain/std_glj_lib/html/gongliao.html

@@ -172,6 +172,8 @@
     <!-- zTree -->
     <script src = "/lib/spreadjs/sheets/gc.spread.sheets.all.11.1.2.min.js"></script>
     <script>GC.Spread.Sheets.LicenseKey =  '<%- LicenseKey %>';</script>
+    <script type="text/javascript" src="/lib/lodash/lodash.js"></script>
+    <script type="text/javascript" src="/lib/lz-string/lz-string.min.js"></script>
     <script type="text/javascript" src="/lib/ztree/jquery.ztree.core.js"></script>
     <script type="text/javascript" src="/lib/ztree/jquery.ztree.excheck.js"></script>
     <script type="text/javascript" src="/lib/ztree/jquery.ztree.exedit.js"></script>

+ 118 - 20
web/maintain/std_glj_lib/js/components.js

@@ -140,35 +140,133 @@ let componentOprObj = {
             cacheSection = null;
         }
     },
+    //批量插入组成物
+    batchUpdateComponent: function () {
+        $.bootstrapLoading.start();
+        let me = componentOprObj, that = gljComponentOprObj, re = repositoryGljObj,
+            updateArr = [],
+            updateBasePrc = [],
+            IDMapping = {};
+        let formData = new FormData();
+        //当前工料机的工料机类型
+        let currentGljType = re.currentGlj.gljType;
+        let thisTypeGljList = _.filter(re.gljList, function (data) {
+            return data.gljType == currentGljType;
+        });
+        for(let glj of thisTypeGljList){
+            let gljComponent = glj.component ? glj.component : [];
+            let newComponent = [];
+            if(me.insertType === 'batch'){
+                for(let selectedComponent of me.selectedList){
+                    let isExist = false;
+                    for(let gljPerComponent of gljComponent){
+                        if(selectedComponent.ID === gljPerComponent.ID){
+                            newComponent.push({ID: selectedComponent.ID, consumeAmt: gljPerComponent.consumeAmt});
+                            isExist = true;
+                            break;
+                        }
+                    }
+                    if(!isExist){
+                        newComponent.push({ID: selectedComponent.ID, consumeAmt: 0});
+                    }
+                }
+            }
+            else if(me.insertType === 'batchClear'){//去除消耗量为0的组成物
+                for(let gljPerComponent of gljComponent){
+                    if(gljPerComponent.consumeAmt && gljPerComponent.consumeAmt != 0){
+                        newComponent.push({ID: gljPerComponent.ID, consumeAmt: gljPerComponent.consumeAmt});
+                    }
+                }
+            }
+            let gljBasePrc = that.reCalGljBasePrc(re.getCurrentComponent(newComponent));
+            if(gljBasePrc != glj.basePrice){
+                updateBasePrc.push({gljId: glj.ID, gljType: currentGljType, basePrice: gljBasePrc});
+            }
+            IDMapping[glj.ID] = {component : newComponent, basePrice: gljBasePrc};
+            updateArr.push({ID: glj.ID, component: newComponent, basePrice: gljBasePrc});
+        }
+        formData.append('compressData', LZString.compressToUTF16(JSON.stringify(updateArr)));
+        $.ajax({
+            url: 'api/batchUpdateComponent',
+            type: 'POST',
+            data: formData,
+            cache: false,
+            contentType: false,
+            processData: false,
+            success: function(response){
+                if (response.err === 0) {
+                    //更新缓存数据
+                    for(let glj of thisTypeGljList){
+                        if(glj.ID === re.currentGlj.ID){
+                            re.currentComponent =  re.getCurrentComponent(IDMapping[glj.ID]['component']);
+                            sheetCommonObj.cleanData(that.workBook.getSheet(0), that.setting, -1);
+                            sheetsOprObj.showData(that.workBook.getSheet(0), that.setting, re.currentComponent);
+                        }
+                        glj.component = IDMapping[glj.ID]['component'];
+                        glj.basePrice = IDMapping[glj.ID]['basePrice'];
+                    }
+                    re.reSetGljBasePrc(thisTypeGljList);
+                    if($('#component').is(':visible')){
+                        $('#component').modal('hide');
+                    }
+                    $.bootstrapLoading.end();
+                    //更新定额
+                    if(updateBasePrc.length > 0){
+                        re.updateRationBasePrcRq(updateBasePrc);
+                    }
+                } else {
+                    if($('#component').is(':visible')){
+                        $('#component').modal('hide');
+                    }
+                    $.bootstrapLoading.end();
+                }
+            },
+            error: function(jqXHR){
+                alert(`与服务器通信发生错误${jqXHR.status} ${jqXHR.statusText}`);
+                $('#component').modal('hide');
+                $.bootstrapLoading.end();
+            }
+        });
+
+    },
     //组成物窗口按钮操作
     componentsBtnOpr: function (conf) {//确定、取消、关闭按钮
         let me = componentOprObj, that = gljComponentOprObj, re = repositoryGljObj;
         conf.click(function () {
-            //添加选择添加的组成物
-            let updateArr = [];
-            let newComponent = [];
-            for(let i = 0, len = me.selectedList.length; i < len; i++){
-                let isExist = false;
-                for(let j = 0, jLen = re.currentGlj.component.length; j < jLen; j++){
-                    if(me.selectedList[i].ID === re.currentGlj.component[j].ID){
-                        newComponent.push({ID: me.selectedList[i].ID, consumeAmt: re.currentGlj.component[j].consumeAmt});
-                        isExist = true;
-                        break;
+            if(me.insertType === 'single'){
+                let updateBasePrc = [];
+                //添加选择添加的组成物
+                let updateArr = [];
+                let newComponent = [];
+                for(let i = 0, len = me.selectedList.length; i < len; i++){
+                    let isExist = false;
+                    for(let j = 0, jLen = re.currentGlj.component.length; j < jLen; j++){
+                        if(me.selectedList[i].ID === re.currentGlj.component[j].ID){
+                            newComponent.push({ID: me.selectedList[i].ID, consumeAmt: re.currentGlj.component[j].consumeAmt});
+                            isExist = true;
+                            break;
+                        }
+                    }
+                    if(!isExist){
+                        newComponent.push({ID: me.selectedList[i].ID, consumeAmt: 0});
                     }
                 }
-                if(!isExist){
-                    newComponent.push({ID: me.selectedList[i].ID, consumeAmt: 0});
+                re.currentGlj.component = newComponent;
+                let gljBasePrc = that.reCalGljBasePrc(re.getCurrentComponent(re.currentGlj.component));
+                if(gljBasePrc !== re.currentGlj.basePrice){
+                    re.currentGlj.basePrice = gljBasePrc;
+                    re.reshowGljBasePrc(re.currentGlj);
+                    updateBasePrc.push({gljId: re.currentGlj.ID, gljType: re.currentGlj.gljType, basePrice: gljBasePrc});
+                    re.updateRationBasePrcRq(updateBasePrc);
                 }
+                updateArr.push(re.currentGlj);
+                that.updateComponent(updateArr);
+                $('#component').modal('hide');
+                //$('#componentsCacnel').click();
             }
-            re.currentGlj.component = newComponent;
-            let gljBasePrc = that.reCalGljBasePrc(re.getCurrentComponent(re.currentGlj.component));
-            if(gljBasePrc !== re.currentGlj.basePrice){
-                re.currentGlj.basePrice = gljBasePrc;
-                re.reshowGljBasePrc(re.currentGlj);
+            else {
+                me.batchUpdateComponent();
             }
-            updateArr.push(re.currentGlj);
-            that.updateComponent(updateArr);
-            $('#componentsCacnel').click();
         });
     }
 };

+ 17 - 0
web/maintain/std_glj_lib/js/glj.js

@@ -368,6 +368,23 @@ let repositoryGljObj = {
             }
         }
     },
+    reSetGljBasePrc: function (gljs) {
+        let me = repositoryGljObj;
+        let cacheSection = me.currentCache;
+        let sheet = me.workBook.getSheet(0);
+        sheet.suspendPaint();
+        sheet.suspendEvent();
+        for(let i = 0; i < cacheSection.length; i++){
+            for(let glj of gljs){
+                if(glj.ID === cacheSection[i].ID){
+                    sheet.setValue(i, 4, glj.basePrice);
+                }
+            }
+        }
+        sheet.resumePaint();
+        sheet.resumeEvent();
+
+    },
     initSel: function (row) {
         let me = repositoryGljObj, that = gljComponentOprObj;
         sheetCommonObj.cleanSheet(that.workBook.getSheet(0), that.setting, -1);

+ 15 - 0
web/maintain/std_glj_lib/js/gljComponent.js

@@ -160,6 +160,16 @@ let gljComponentOprObj = {
                     return {
                         callback: function(){},
                         items: {
+                            "batchInsert": {name: '批量插入', disabled: insertDis, icon: 'fa-sign-in', callback: function (key, opt) {
+                                co.initRadio();
+                                co.gljCurTypeId = null;
+                                if(co.rootNode){
+                                    co.treeObj.selectNode(co.rootNode);
+                                    componentTypeTreeOprObj.onClick(null, 'componentTree', co.rootNode);
+                                }
+                                co.insertType = 'batch';
+                                $('#component').modal('show');
+                            }},
                             "insert": {name: "插入", disabled: insertDis, icon: "fa-sign-in", callback: function (key, opt) {
                                 //默认radio所有工料机
                                 co.initRadio();
@@ -169,6 +179,7 @@ let gljComponentOprObj = {
                                     co.treeObj.selectNode(co.rootNode);
                                     componentTypeTreeOprObj.onClick(null, 'componentTree', co.rootNode);
                                 }
+                                co.insertType = 'single';
                                 //弹出窗口
                                 $('#componentBtn').click();
                             }},
@@ -196,6 +207,10 @@ let gljComponentOprObj = {
                                 if(updateBasePrcArr.length > 0 && that.rationLibs.length > 0){
                                     that.updateRationBasePrcRq(updateBasePrcArr);
                                 }
+                            }},
+                            "batchClear": {name: '批量删除消耗量为0的组成物', disabled: insertDis, icon: 'fa-remove', callback: function (key, opt) {
+                                co.insertType = 'batchClear';
+                                co.batchUpdateComponent();
                             }}
                         }
                     };