Browse Source

Merge branch 'master' into olym

caiaolin 8 years ago
parent
commit
9f3c20dddb

+ 2 - 1
modules/ration_repository/controllers/ration_controller.js

@@ -22,10 +22,11 @@ class RationController extends BaseController{
     mixUpdateRationItems(req, res){
         var sectionId = req.body.sectionID,
             rationLibId = req.body.rationLibId,
+            lastOpr = req.body.lastOpr,
             updateItems = JSON.parse(req.body.updateItems),
             addItems = JSON.parse(req.body.addItems),
             removeIds = JSON.parse(req.body.removeIds);
-        rationItem.mixUpdateRationItems(rationLibId, sectionId, updateItems, addItems, removeIds, function(err, message, rst){
+        rationItem.mixUpdateRationItems(rationLibId, lastOpr, sectionId, updateItems, addItems, removeIds, function(err, message, rst){
             if (err) {
                 callback(req, res, err, message, null);
             } else {

+ 4 - 3
modules/ration_repository/controllers/ration_repository_controller.js

@@ -47,8 +47,8 @@ class RationRepositoryController extends baseController{
         })
     }
     deleteRationLib(req,res){
-        var rationName = req.body.rationName, needSet = {deleted: true, lastOperator: req.body.lastOperator, lastOperateDate: Date.now()}
-        rationRepository.deleteRationLib(rationName, needSet, function(err,data){
+        var rationName = req.body.rationName, lastOperator = req.body.lastOperator;
+        rationRepository.deleteRationLib(rationName, lastOperator, function(err,data){
             if (data) {
                 callback(req, res, err, "has data", data);
             } else {
@@ -59,7 +59,8 @@ class RationRepositoryController extends baseController{
     updateRationRepositoryName(req, res) {
         var orgName = req.body.rationName;
         var newName = req.body.newName;
-        rationRepository.updateName(orgName, newName, function(err, data){
+        var lastOperator = req.body.lastOperator;
+        rationRepository.updateName(orgName, newName, lastOperator, function(err, data){
             if (data) {
                 callback(req, res, err, "has data", data);
             } else {

+ 8 - 3
modules/ration_repository/controllers/ration_section_tree_controller.js

@@ -25,14 +25,17 @@ class RationChapterTreeController extends BaseController{
     createNewNode(req, res){
         var libId = req.body.rationLibId;
         var lastNodeId = req.body.lastNodeId;
+        let lastOpr = req.body.lastOpr;
         var nodeData = JSON.parse(req.body.rawNodeData);
-        rationChapterTreeData.createNewNode(libId, lastNodeId, nodeData, function(err,data){
+        rationChapterTreeData.createNewNode(lastOpr, libId, lastNodeId, nodeData, function(err,data){
             callback(req,res,err,"", data)
         });
     }
     updateNodes(req, res) {
         var nodes = JSON.parse(req.body.nodes);
-        rationChapterTreeData.updateNodes(nodes, function(err,results){
+        let lastOpr = req.body.lastOpr;
+        let repId = req.body.repId;
+        rationChapterTreeData.updateNodes(repId, lastOpr, nodes, function(err,results){
             callback(req,res, err, "", results)
         });
     }
@@ -40,7 +43,9 @@ class RationChapterTreeController extends BaseController{
         var nodes = JSON.parse(req.body.nodes);
         var preNodeId = req.body.preNodeId;
         var preNodeNextId = req.body.preNodeNextId;
-        rationChapterTreeData.removeNodes(nodes, preNodeId, preNodeNextId, function(err,results){
+        let repId = req.body.repId;
+        let lastOpr = req.body.lastOpr;
+        rationChapterTreeData.removeNodes(repId, lastOpr, nodes, preNodeId, preNodeNextId, function(err,results){
             callback(req,res, err, "", results)
         });
     }

+ 10 - 5
modules/ration_repository/controllers/repository_glj_controller.js

@@ -28,14 +28,17 @@ class RepositoryGljController extends BaseController{
     createNewGljTypeNode(req, res) {
         var repId = req.body.repositoryId;
         var lastNodeId = req.body.lastNodeId;
+        let lastOpr = req.body.lastOpr;
         var nodeData = JSON.parse(req.body.rawNodeData);
-        gljRepository.createNewNode(repId, lastNodeId, nodeData, function(err, msg, data){
+        gljRepository.createNewNode(repId, lastOpr, lastNodeId, nodeData, function(err, msg, data){
             callback(req,res,err,msg, data)
         });
     }
     updateGljNodes(req, res) {
         var nodes = JSON.parse(req.body.nodes);
-        gljRepository.updateNodes(nodes, function(err,results){
+        let repId = req.body.repId,
+            lastOpr = req.body.lastOpr;
+        gljRepository.updateNodes(repId, lastOpr, nodes, function(err,results){
             callback(req,res, err, results)
         });
     }
@@ -43,7 +46,8 @@ class RepositoryGljController extends BaseController{
         var nodes = JSON.parse(req.body.nodes);
         var preNodeId = req.body.preNodeId;
         var preNodeNextId = req.body.preNodeNextId;
-        gljRepository.removeNodes(nodes, preNodeId, preNodeNextId, function(err,results){
+        let repId = req.body.repId, lastOpr = req.body.lastOpr;
+        gljRepository.removeNodes(repId, lastOpr, nodes, preNodeId, preNodeNextId, function(err,results){
             callback(req,res, err, results)
         });
     }
@@ -82,8 +86,9 @@ class RepositoryGljController extends BaseController{
         var repId = req.body.repositoryId,
             updateItems = JSON.parse(req.body.updateItems),
             addItems = JSON.parse(req.body.addItems),
-            removeIds = JSON.parse(req.body.removeIds);
-        gljRepository.mixUpdateGljItems(repId, updateItems, addItems, removeIds, function(err, message, rst){
+            removeIds = JSON.parse(req.body.removeIds),
+            lastOpr = req.body.lastOpr;
+        gljRepository.mixUpdateGljItems(repId, lastOpr, updateItems, addItems, removeIds, function(err, message, rst){
             if (err) {
                 callback(req, res, err, message, null);
             } else {

+ 99 - 28
modules/ration_repository/models/glj_repository.js

@@ -35,7 +35,7 @@ var gljTypeModel = db.model("std_ration_lib_glj_type",gljClassSchema, "std_ratio
 var gljItemModel = db.model("std_ration_lib_glj_list",gljSchema, "std_ration_lib_glj_list");
 var repositoryMap = require('./repository_map');
 var counter = require('../../../public/counter/counter');
-let rationItemDao = require('./ration_item');
+let moment = require('moment');
 
 var gljItemDAO = function(){};
 gljItemDAO.prototype.getGljTypes = function(rationLibId, callback){
@@ -81,18 +81,18 @@ gljItemDAO.prototype.getGljItemsByCode = function(repositoryId, codes, callback)
     })
 };
 
-gljItemDAO.prototype.mixUpdateGljItems = function(repId, updateItems, addItems, rIds, callback) {
+gljItemDAO.prototype.mixUpdateGljItems = function(repId, lastOpr, updateItems, addItems, rIds, callback) {
     var me = this;
     if (updateItems.length == 0 && rIds.length == 0) {
-        me.addGljItems(repId, addItems, callback);
+        me.addGljItems(repId, lastOpr, addItems, callback);
     } else {
-        me.removeGljItems(rIds, function(err, message, docs) {
-            me.updateGljItems(repId, updateItems, function(err, results){
+        me.removeGljItems(repId, lastOpr, rIds, function(err, message, docs) {
+            me.updateGljItems(repId, lastOpr, updateItems, function(err, results){
                 if (err) {
                     callback(true, "Fail to update", false);
                 } else {
                     if (addItems && addItems.length > 0) {
-                        me.addGljItems(repId, addItems, callback);
+                        me.addGljItems(repId, lastOpr, addItems, callback);
                     } else {
                         callback(false, "Save successfully", results);
                     }
@@ -102,13 +102,20 @@ gljItemDAO.prototype.mixUpdateGljItems = function(repId, updateItems, addItems,
     }
 };
 
-gljItemDAO.prototype.removeGljItems = function(rIds, callback) {
+gljItemDAO.prototype.removeGljItems = function(repId, lastOpr, rIds, callback) {
     if (rIds && rIds.length > 0) {
         gljItemModel.collection.remove({ID: {$in: rIds}}, null, function(err, docs){
             if (err) {
                 callback(true, "Fail to remove", false);
             } else {
-                callback(false, "Remove successfully", docs);
+                repositoryMap.updateOprArr({ID: repId}, lastOpr, moment(Date.now()).format('YYYY-MM-DD HH:mm:ss'), function (err) {
+                    if(err){
+                        callback(true, "Fail to update operator", false);
+                    }
+                    else{
+                        callback(false, "Remove successfully", docs);
+                    }
+                });
             }
         })
     } else {
@@ -116,7 +123,7 @@ gljItemDAO.prototype.removeGljItems = function(rIds, callback) {
     }
 };
 
-gljItemDAO.prototype.addGljItems = function(repId, items, callback) {
+gljItemDAO.prototype.addGljItems = function(repId, lastOpr, items, callback) {
     if (items && items.length > 0) {
         counter.counterDAO.getIDAfterCount(counter.moduleName.GLJ, items.length, function(err, result){
             var maxId = result.value.sequence_value;
@@ -131,7 +138,14 @@ gljItemDAO.prototype.addGljItems = function(repId, items, callback) {
                 if (err) {
                     callback(true, "Fail to add", false);
                 } else {
-                    callback(false, "Add successfully", docs);
+                    repositoryMap.updateOprArr({ID: repId}, lastOpr, moment(Date.now()).format('YYYY-MM-DD HH:mm:ss'), function (err) {
+                        if(err){
+                            callback(true, "Fail to update Operator", false);
+                        }
+                        else{
+                            callback(false, "Add successfully", docs);
+                        }
+                    });
                 }
             })
         });
@@ -140,7 +154,7 @@ gljItemDAO.prototype.addGljItems = function(repId, items, callback) {
     }
 };
 
-gljItemDAO.prototype.updateGljItems = function(repId, items, callback) {
+gljItemDAO.prototype.updateGljItems = function(repId, lastOpr, items, callback) {
     var functions = [];
     for (var i=0; i < items.length; i++) {
         functions.push((function(doc) {
@@ -156,12 +170,24 @@ gljItemDAO.prototype.updateGljItems = function(repId, items, callback) {
             };
         })(items[i]));
     }
+    functions.push((function () {
+        return function (cb) {
+            repositoryMap.updateOprArr({ID: repId}, lastOpr, moment(Date.now()).format('YYYY-MM-DD HH:mm:ss'), function (err) {
+                if(err){
+                    cb(err);
+                }
+                else{
+                    cb(null);
+                }
+            })
+        }
+    })());
     async.parallel(functions, function(err, results) {
         callback(err, results);
     });
 };
 
-gljItemDAO.prototype.updateNodes = function(nodes, callback) {
+gljItemDAO.prototype.updateNodes = function(repId, lastOpr, nodes, callback) {
     var functions = [];
     for (var i=0; i < nodes.length; i++) {
         functions.push((function(doc) {
@@ -170,11 +196,23 @@ gljItemDAO.prototype.updateNodes = function(nodes, callback) {
             };
         })(nodes[i]));
     }
+    functions.push((function () {
+        return function (cb) {
+            repositoryMap.updateOprArr({ID: repId}, lastOpr, moment(Date.now()).format('YYYY-MM-DD HH:mm:ss'), function (err) {
+                if(err){
+                    cb(err);
+                }
+                else{
+                    cb(null);
+                }
+            })
+        }
+    })());
     async.parallel(functions, function(err, results) {
         callback(err, results);
     });
 };
-gljItemDAO.prototype.removeNodes =  function(nodeIds, preNodeId, preNodeNextId, callback){
+gljItemDAO.prototype.removeNodes =  function(repId, lastOpr, nodeIds, preNodeId, preNodeNextId, callback){
     var functions = [];
     if (preNodeId != -1) {
         functions.push((function(nodeId, nextId) {
@@ -190,31 +228,64 @@ gljItemDAO.prototype.removeNodes =  function(nodeIds, preNodeId, preNodeNextId,
             };
         })(nodeIds[i]));
     }
+    functions.push((function () {
+        return function (cb) {
+            repositoryMap.updateOprArr({ID: repId}, lastOpr, moment(Date.now()).format('YYYY-MM-DD HH:mm:ss'), function (err) {
+                if(err){
+                    cb(err);
+                }
+                else{
+                    cb(null);
+                }
+            })
+        }
+    })());
     async.parallel(functions, function(err, results) {
         callback(err, results);
     });
 };
 
-gljItemDAO.prototype.createNewNode = function(repId, lastNodeId, nodeData, callback) {
+gljItemDAO.prototype.createNewNode = function(repId, lastOpr, lastNodeId, nodeData, callback) {
     return counter.counterDAO.getIDAfterCount(counter.moduleName.GLJ, 1, function(err, result){
         nodeData.repositoryId = repId;
         nodeData.ID = result.value.sequence_value;
         var node = new gljTypeModel(nodeData);
-        node.save(function (err, result) {
-            if (err) {
-                callback(true, "章节树ID错误!", false);
-            } else {
-                if (lastNodeId > 0) {
-                    gljTypeModel.update({ID: lastNodeId}, {"NextSiblingID": nodeData.ID}, function(err, rst){
-                        if (err) {
-                            callback(true, "章节树ID错误!", false);
-                        } else {
-                            callback(false, '', result);
-                        }
-                    });
-                } else callback(false, '', result);
+        async.parallel([
+            function (cb) {
+                node.save(function (err, result) {
+                    if (err) {
+                        cb("章节树ID错误!", false);
+                    } else {
+                        if (lastNodeId > 0) {
+                            gljTypeModel.update({ID: lastNodeId}, {"NextSiblingID": nodeData.ID}, function(err, rst){
+                                if (err) {
+                                    cb("章节树ID错误!", false);
+                                } else {
+                                    cb(false, result);
+                                }
+                            });
+                        } else cb(false, result);
+                    }
+                });
+            },
+            function (cb) {
+                repositoryMap.updateOprArr({ID: repId}, lastOpr, moment(Date.now()).format('YYYY-MM-DD HH:mm:ss'), function (err) {
+                    if(err){
+                        cb(err);
+                    }
+                    else{
+                        cb(null);
+                    }
+                })
             }
-        });
+        ], function (err, result) {
+            if(err){
+                callback(true, "章节树错误!", false);
+            }
+            else{
+                callback(false, '', result[0]);
+            }
+        })
     });
 };
 

+ 193 - 13
modules/ration_repository/models/ration_item.js

@@ -45,6 +45,8 @@ var rationItemSchema = mongoose.Schema({
 var rationItemModel = db.model("std_ration_lib_ration_items",rationItemSchema, "std_ration_lib_ration_items")
 var counter = require('../../../public/counter/counter');
 let gljDao = require('./glj_repository');
+let moment = require('moment');
+let rationRepositoryDao = require('./repository_map');
 var rationItemDAO = function(){};
 
 rationItemDAO.prototype.getRationItemsBySection = function(sectionId,callback){
@@ -53,21 +55,21 @@ rationItemDAO.prototype.getRationItemsBySection = function(sectionId,callback){
         else callback(false,"Get items successfully", data);
     })
 };
-rationItemDAO.prototype.mixUpdateRationItems = function(rationLibId, sectionId, updateItems, addItems, rIds, callback){
+rationItemDAO.prototype.mixUpdateRationItems = function(rationLibId, lastOpr, sectionId, updateItems, addItems, rIds, callback){
     var me = this;
     if (updateItems.length == 0 && rIds.length == 0) {
-        me.addRationItems(rationLibId, sectionId, addItems, callback);
+        me.addRationItems(rationLibId, lastOpr, sectionId, addItems, callback);
     } else {
-        me.removeRationItems(rIds, function(err, message, docs) {
+        me.removeRationItems(rationLibId, lastOpr, rIds, function(err, message, docs) {
             if (err) {
                 callback(true, "Fail to remove", false);
             } else {
-                me.updateRationItems(rationLibId, sectionId, updateItems, function(err, results){
+                me.updateRationItems(rationLibId, lastOpr, sectionId, updateItems, function(err, results){
                     if (err) {
                         callback(true, "Fail to save", false);
                     } else {
                         if (addItems && addItems.length > 0) {
-                            me.addRationItems(rationLibId, sectionId, addItems, callback);
+                            me.addRationItems(rationLibId, lastOpr, sectionId, addItems, callback);
                         } else {
                             callback(false, "Save successfully", results);
                         }
@@ -78,13 +80,17 @@ rationItemDAO.prototype.mixUpdateRationItems = function(rationLibId, sectionId,
     }
 };
 
-rationItemDAO.prototype.removeRationItems = function(rIds,callback){
+rationItemDAO.prototype.removeRationItems = function(rationLibId, lastOpr, rIds,callback){
     if (rIds.length > 0) {
         rationItemModel.collection.remove({ID: {$in: rIds}}, null, function(err, docs){
             if (err) {
                 callback(true, "Fail to remove", false);
             } else {
-                callback(false, "Remove successfully", docs);
+                rationRepositoryDao.updateOprArr({ID: rationLibId}, lastOpr, moment(Date.now()).format('YYYY-MM-DD HH:mm:ss'), function (err) {
+                    if(!err){
+                        callback(false, "Remove successfully", docs);
+                    }
+                })
             }
         })
     } else {
@@ -133,7 +139,7 @@ rationItemDAO.prototype.getRationItem = function (repId, code, callback) {
     }
 };
 
-rationItemDAO.prototype.addRationItems = function(rationLibId, sectionId, items,callback){
+rationItemDAO.prototype.addRationItems = function(rationLibId, lastOpr, sectionId, items,callback){
     if (items && items.length > 0) {
         counter.counterDAO.getIDAfterCount(counter.moduleName.rations, items.length, function(err, result){
             var maxId = result.value.sequence_value;
@@ -149,7 +155,14 @@ rationItemDAO.prototype.addRationItems = function(rationLibId, sectionId, items,
                 if (err) {
                     callback(true, "Fail to save", false);
                 } else {
-                    callback(false, "Save successfully", docs);
+                    rationRepositoryDao.updateOprArr({ID: rationLibId}, lastOpr, moment(Date.now()).format('YYYY-MM-DD HH:mm:ss'), function (err) {
+                        if(err){
+                            callback(true, "Fail to sava operator", false);
+                        }
+                        else{
+                            callback(false, "Save successfully", docs);
+                        }
+                    })
                 }
             })
         });
@@ -158,7 +171,7 @@ rationItemDAO.prototype.addRationItems = function(rationLibId, sectionId, items,
     }
 };
 
-rationItemDAO.prototype.updateRationItems = function(rationLibId, sectionId, items,callback){
+rationItemDAO.prototype.updateRationItems = function(rationLibId, lastOpr, sectionId, items,callback){
     var functions = [];
     for (var i=0; i < items.length; i++) {
         functions.push((function(doc) {
@@ -175,6 +188,18 @@ rationItemDAO.prototype.updateRationItems = function(rationLibId, sectionId, ite
             };
         })(items[i]));
     }
+    functions.push((function () {
+        return function (cb) {
+            rationRepositoryDao.updateOprArr({ID: rationLibId}, lastOpr, moment(Date.now()).format('YYYY-MM-DD HH:mm:ss'), function (err) {
+                if(err){
+                    cb(err);
+                }
+                else{
+                    cb(null);
+                }
+            });
+        }
+    })());
     async.parallel(functions, function(err, results) {
         callback(err, results);
     });
@@ -188,8 +213,153 @@ function round(v,e){
 }
 
 rationItemDAO.prototype.updateRationBasePrc = function (data, callback) {
-    let adjGljId = data.gljId, adjBasePrice = data.basePrice, adjGljType = data.gljType;
-    async.waterfall([
+    let basePrcArr = data.basePrcArr,
+       // adjGljId = data.gljId, adjBasePrice = data.basePrice, adjGljType = data.gljType,
+        repId = data.repId, lastOpr = data.lastOpr;
+    //
+    let updateArr;
+    async.each(basePrcArr, function (basePrcObj, finalCb) {
+        let adjGljId = basePrcObj.gljId, adjBasePrice = basePrcObj.basePrice, adjGljType = basePrcObj.gljType;
+        async.waterfall([
+            function (cb) {
+                rationItemModel.find({'rationGljList.gljId': adjGljId}, function (err, result) {
+                    if(err){
+                        cb(err);
+                    }
+                    else{
+                        cb(null, result);
+                    }
+                });
+            },
+            function (result, cb) {
+                async.each(result, function (rationItem, ecb) {
+                    let rationGljList = rationItem.rationGljList,
+                        gljIds = [];
+                    rationGljList.forEach(function (rationGlj) {
+                        gljIds.push(rationGlj.gljId);
+                    });
+                    gljDao.getGljItems(gljIds, function(err, gljItems){
+                        if(err){
+                            ecb(err);
+                        }
+                        else{
+                            let gljArr = [];
+                            for(let i=0; i<gljItems.length; i++){
+                                let gljParentType = -1;
+                                if(gljItems[i].ID === adjGljId){
+                                    gljItems[i].gljType = adjGljType;
+                                }
+                                if(gljItems[i].gljType <= 3){
+                                    gljParentType = gljItems[i].gljType;
+                                }
+                                if(gljItems[i].gljType > 200 && gljItems[i].gljType < 300){
+                                    gljParentType = 2;
+                                }
+                                if(gljItems[i].gljType > 300 && gljItems[i].gljType < 400){
+                                    gljParentType = 3;
+                                }
+                                if(gljItems[i].ID === adjGljId){
+                                    gljArr.push({gljId: gljItems[i].ID, basePrice: adjBasePrice, gljParentType: gljParentType});
+                                }
+                                else {
+                                    gljArr.push({gljId: gljItems[i].ID, basePrice: gljItems[i].basePrice, gljParentType: gljParentType});
+                                }
+                            }
+                            gljArr.forEach(function (gljItem) {
+                                rationGljList.forEach(function (rationGlj) {
+                                    if(gljItem.gljId === rationGlj.gljId){
+                                        gljItem.consumeAmt = rationGlj.consumeAmt;
+                                    }
+                                })
+                            });
+                            //recalculate the price of ration
+                            let labourPrc = [], materialPrc = [], machinePrc = [], singlePrc, updatePrc = {labourPrice: 0, materialPrice: 0, machinePrice: 0, basePrice: 0};
+                            gljArr.forEach(function (gljItem) {
+                                if(gljItem.gljParentType !== -1){
+                                    singlePrc = round(gljItem.basePrice * gljItem.consumeAmt, 3);
+                                    if(gljItem.gljParentType === 1){
+                                        labourPrc.push(singlePrc);
+                                    }
+                                    else if(gljItem.gljParentType ===2){
+                                        materialPrc.push(singlePrc);
+                                    }
+                                    else{
+                                        machinePrc.push(singlePrc);
+                                    }
+                                }
+                            });
+                            if(labourPrc.length > 0){
+                                let sumLaP = 0;
+                                for(let i=0; i<labourPrc.length; i++){
+                                    sumLaP += labourPrc[i];
+                                }
+                                updatePrc.labourPrice = round(sumLaP, 2);
+                            }
+                            if(materialPrc.length > 0){
+                                let sumMtP = 0;
+                                for(let i= 0; i<materialPrc.length; i++){
+                                    sumMtP += materialPrc[i];
+                                }
+                                updatePrc.materialPrice = round(sumMtP, 2);
+                            }
+                            if(machinePrc.length > 0){
+                                let sumMaP = 0;
+                                for(let i =0; i< machinePrc.length; i++){
+                                    sumMaP += machinePrc[i];
+                                }
+                                updatePrc.machinePrice = round(sumMaP, 2);
+                            }
+                            updatePrc.basePrice = updatePrc.labourPrice + updatePrc.materialPrice + updatePrc.machinePrice;
+                            //updateDataBase
+                            rationItemModel.update({ID: rationItem.ID}, {$set: {labourPrice: updatePrc.labourPrice, materialPrice: updatePrc.materialPrice,
+                                    machinePrice: updatePrc.machinePrice, basePrice: updatePrc.basePrice}},
+                                function (err, result) {
+                                    if(err){
+                                        ecb(err);
+                                    }
+                                    else {
+                                        ecb(null);
+                                    }
+                                });
+                        }
+                    });
+                }, function(err){
+                    if(err){
+                        cb(err);
+                    }
+                    else {
+                        cb(null);
+                    }
+                });
+            },
+            function (cb) {
+                rationRepositoryDao.updateOprArr({ID: repId}, lastOpr, moment(Date.now()).format('YYYY-MM-DD HH:mm:ss'), function (err) {
+                    if(err){
+                        cb(err);
+                    }
+                    else{
+                        cb(null);
+                    }
+                })
+            }
+        ], function (err) {
+            if(err){
+                finalCb(err);
+            }
+            else{
+                finalCb(null);
+            }
+        });
+    }, function (err) {
+        if(err){
+            callback(err, 'Error');
+        }
+        else{
+            callback(null, '');
+        }
+    });
+    //
+    /*async.waterfall([
         function (cb) {
             rationItemModel.find({'rationGljList.gljId': adjGljId}, function (err, result) {
                 if(err){
@@ -300,6 +470,16 @@ rationItemDAO.prototype.updateRationBasePrc = function (data, callback) {
                     cb(null);
                 }
             });
+        },
+        function (cb) {
+            rationRepositoryDao.updateOprArr({ID: repId}, lastOpr, moment(Date.now()).format('YYYY-MM-DD HH:mm:ss'), function (err) {
+                if(err){
+                    cb(err);
+                }
+                else{
+                    cb(null);
+                }
+            })
         }
     ], function (err) {
         if(err){
@@ -308,7 +488,7 @@ rationItemDAO.prototype.updateRationBasePrc = function (data, callback) {
         else{
             callback(null, '');
         }
-    });
+    });*/
 };
 
 rationItemDAO.prototype.getRationGljIds = function (data, callback) {

+ 62 - 15
modules/ration_repository/models/ration_section_tree.js

@@ -7,6 +7,8 @@ var dbm = require("../../../config/db/db_manager");
 var chapterTreeDb = dbm.getCfgConnection("scConstruct");
 var async = require("async");
 var Schema = mongoose.Schema;
+let rationRepositoryDao = require('./repository_map');
+let moment = require('moment');
 
 var rationChapterTreeSchema = new Schema({//章节树  //生成唯一id改为sectionID  改成string
     rationRepId: Number,
@@ -37,30 +39,51 @@ rationChapterTreeDAO.prototype.getRationChapterTreeByRepId = function(repId,call
     })
 }
 
-rationChapterTreeDAO.prototype.createNewNode = function(libId, lastNodeId, nodeData,callback){
+rationChapterTreeDAO.prototype.createNewNode = function(lastOpr, libId, lastNodeId, nodeData,callback){
     counter.counterDAO.getIDAfterCount(counter.moduleName.rationTree, 1, function(err, result){
         nodeData.rationRepId = libId;
         nodeData.ID = result.value.sequence_value;
         var node = new rationChapterTreeModel(nodeData);
-        node.save(function (err, result) {
-            if (err) {
+        async.parallel([
+            function (cb) {
+                node.save(function (err, result) {
+                    if (err) {
+                        cb("章节树ID错误!", false);
+                    } else {
+                        if (lastNodeId > 0) {
+                            rationChapterTreeModel.update({ID: lastNodeId}, {"NextSiblingID": nodeData.ID}, function(err, rst){
+                                if (err) {
+                                    cb("章节树ID错误!", false);
+                                } else {
+                                    cb(false, result);
+                                }
+                            });
+                        } else cb(false, result);
+                    }
+                });
+            },
+            function (cb) {
+                rationRepositoryDao.updateOprArr({ID: libId}, lastOpr, moment(Date.now()).format('YYYY-MM-DD HH:mm:ss'), function (err) {
+                    if(err){
+                        cb(err);
+                    }
+                    else{
+                        cb(null);
+                    }
+                });
+            }
+        ], function (err, result) {
+            if(err){
                 callback("章节树ID错误!", false);
-            } else {
-                if (lastNodeId > 0) {
-                    rationChapterTreeModel.update({ID: lastNodeId}, {"NextSiblingID": nodeData.ID}, function(err, rst){
-                        if (err) {
-                            callback("章节树ID错误!", false);
-                        } else {
-                            callback(false, result);
-                        }
-                    });
-                } else callback(false, result);
+            }
+            else{
+                callback(false, result[0]);
             }
         });
     });
 },
 
-rationChapterTreeDAO.prototype.removeNodes = function(nodeIds, preNodeId, preNodeNextId, callback){
+rationChapterTreeDAO.prototype.removeNodes = function(repId, lastOpr, nodeIds, preNodeId, preNodeNextId, callback){
     var functions = [];
     if (preNodeId != -1) {
         functions.push((function(nodeId, nextId) {
@@ -76,12 +99,24 @@ rationChapterTreeDAO.prototype.removeNodes = function(nodeIds, preNodeId, preNod
             };
         })(nodeIds[i]));
     }
+    functions.push((function () {
+        return function (cb) {
+            rationRepositoryDao.updateOprArr({ID: repId}, lastOpr, moment(Date.now()).format('YYYY-MM-DD HH:mm:ss'), function (err) {
+                if(err){
+                    cb(err);
+                }
+                else{
+                    cb(null);
+                }
+            })
+        }
+    })());
     async.parallel(functions, function(err, results) {
         callback(err, results);
     });
 }
 
-rationChapterTreeDAO.prototype.updateNodes = function(nodes,callback){
+rationChapterTreeDAO.prototype.updateNodes = function(repId, lastOpr, nodes,callback){
     var functions = [];
     for (var i=0; i < nodes.length; i++) {
         //var md = new rationChapterTreeModel(nodes[i]);
@@ -92,6 +127,18 @@ rationChapterTreeDAO.prototype.updateNodes = function(nodes,callback){
             };
         })(nodes[i]));
     }
+    functions.push((function () {
+        return function (cb) {
+            rationRepositoryDao.updateOprArr({ID: repId}, lastOpr, moment(Date.now()).format('YYYY-MM-DD HH:mm:ss'), function (err) {
+                if(err){
+                    cb(err);
+                }
+                else{
+                    cb(null);
+                }
+            })
+        }
+    })());
     async.parallel(functions, function(err, results) {
         callback(err, results);
     });

+ 105 - 16
modules/ration_repository/models/repository_map.js

@@ -5,6 +5,7 @@
 var mongoose = require('mongoose');
 var dbm = require("../../../config/db/db_manager");
 let async = require("async");
+let moment = require('moment');
 //var stringUtil = require('../../../public/stringUtil');
 var rationLibdb = dbm.getCfgConnection("scConstruct");
 var Schema = mongoose.Schema;
@@ -15,9 +16,8 @@ var RepositoryMapSchema = new Schema({
     "localeType": Number, //如 各个省份 / 部颁
     "descr" : String,
     "creator": String,
-    "createDate": Date,
-    "lastOperator": String,
-    "lastOperateDate": Date,
+    "createDate": String,
+    "recentOpr" :[],
     "deleted": Boolean
 });
 var counter = require('../../../public/counter/counter');
@@ -31,15 +31,62 @@ function createNewLibModel(rationLibObj){
     rst.localeType = rationLibObj.localeType?rationLibObj.localeType:'';
     rst.descr = rationLibObj.descr;
     rst.creator = rationLibObj.creator;
-    rst.lastOperator = rationLibObj.lastOperator;
-    rst.createDate = Date.now();
-    rst.lastOperateDate = Date.now();
+    rst.createDate = moment(Date.now()).format('YYYY-MM-DD HH:mm:ss');
+    rst.recentOpr = [{operator: rationLibObj.lastOperator, operateDate: rst.createDate}],
     rst.deleted = false;
     return rst;
 }
 
 var rationRepositoryDao = function(){};
 
+rationRepositoryDao.prototype.updateOprArr= function(findSet, oprtor, oprDate, cb){
+    rationRepository.find(findSet, function (err, result) {
+        if(err){
+            cb(err);
+        }
+        else{
+            if(result.length === 1){
+                let recentOprArr = result[0].recentOpr;
+                let isExist = false;
+                for(let i =0 ; i<recentOprArr.length; i++){
+                    if(recentOprArr[i].operator === oprtor){
+                        recentOprArr[i].operateDate = oprDate;
+                        isExist = true;
+                    }
+                }
+                if(!isExist){
+                    if(recentOprArr.length < 5){
+                        recentOprArr.push({operator: oprtor, operateDate: oprDate});
+                    }
+                    else if(recentOprArr.length === 5){
+                        recentOprArr.sort(function (a, b) {
+                            if(a.operateDate > b.operateDate){
+                                return -1;
+                            }else {
+                                return 1;
+                            }
+                            return 0;
+                        });
+                        recentOprArr.splice(recentOprArr.length -1, 1);
+                        recentOprArr.splice(0, 1, {operator: oprtor, operateDate: oprDate});
+                    }
+                }
+                rationRepository.update(findSet, {$set: {recentOpr: recentOprArr}}, function (err) {
+                    if(err){
+                        cb(err);
+                    }
+                    else{
+                        cb(null);
+                    }
+                });
+            }
+            else{
+                cb(err);
+            }
+        }
+    })
+};
+
 rationRepositoryDao.prototype.getRealLibName = function(dispName,callback){
     if (callback) {
         rationRepository.find({"dispName": dispName}, function(err,data){
@@ -102,25 +149,67 @@ rationRepositoryDao.prototype.getDisplayRationLibs = function(callback) {
     });
 };
 
-rationRepositoryDao.prototype.updateName = function(orgName,newName,callback){
+rationRepositoryDao.prototype.updateName = function(orgName,newName, lastOpr, callback){
     rationRepository.find({"dispName":newName, "deleted": false}, function(err, data){
         if (data.length == 0) {
-            rationRepository.update({dispName:orgName},{$set:{dispName:newName}},function(err){
-                if(err) callback("err",false);
-                else callback(false,"ok")
-            })
+            async.waterfall([
+                function (cb) {
+                    rationRepository.update({dispName:orgName},{$set:{dispName:newName}},function(err){
+                        if(err) cb(err);
+                        else cb(null)
+                    });
+                },
+                function (cb) {
+                    new rationRepositoryDao().updateOprArr({dispName: newName}, lastOpr, moment(Date.now()).format('YYYY-MM-DD HH:mm:ss'), function (err) {
+                        if(err){
+                            cb(err)
+                        }
+                        else{
+                            cb(null);
+                        }
+                    });
+                }
+            ], function (err) {
+                if(err){
+                    callback('err', false);
+                }
+                else{
+                    callback(false, 'ok');
+                }
+            });
         } else
             callback("不可重名!",false);
     });
 }
 
-rationRepositoryDao.prototype.deleteRationLib = function(rationName, needSet,  callback){
+rationRepositoryDao.prototype.deleteRationLib = function(rationName, lastOpr,  callback){
     rationRepository.find({"dispName":rationName, "deleted": false}, function(err, data){
         if (data.length == 1) {
-            rationRepository.update({dispName:rationName, deleted: false},{$set: needSet},function(err){
-                if(err) callback("err",false);
-                else callback(false,"ok")
-            })
+            async.parallel([
+                function (cb) {
+                    rationRepository.update({dispName:rationName, deleted: false},{$set: {deleted: true}},function(err){
+                        if(err) cb(err);
+                        else cb(null);
+                    })
+                },
+                function (cb) {
+                    new rationRepositoryDao().updateOprArr({dispName: rationName}, lastOpr, moment(Date.now()).format('YYYY-MM-DD HH:mm:ss'), function (err) {
+                        if(err){
+                            cb(err);
+                        }
+                        else{
+                            cb(null);
+                        }
+                    });
+                }
+            ], function (err) {
+                if(err){
+                    callback("err", false)
+                }
+                else{
+                    callback(false, "ok");
+                }
+            });
         } else
             callback("删除失败!",false);
     });

+ 4 - 4
modules/reports/models/rpt_tpl_data.js

@@ -11,7 +11,7 @@ let rptTplPrjSchema = new Schema({
     "NextSiblingID": Number,
     "name": String,         //项目名称
     "location": String,     //工程地点
-    "constructor": String,  //建设单位
+    "constructCompany": String,  //建设单位
     "supervisor": String,   //监理
     "auditor": String       //审核
 });
@@ -24,9 +24,9 @@ let rptTplRationSchema = new Schema({
 
 });
 
-let tplPrjData = mongoose.model("projects", rptTplPrjSchema, "projects");
-let tplBillsData = mongoose.model("bills", rptTplBillsSchema, "bills");
-let tplRationData = mongoose.model("ration", rptTplRationSchema, "ration");
+let tplPrjData = mongoose.model("tpl_data_projects", rptTplPrjSchema, "projects");
+let tplBillsData = mongoose.model("tpl_data_bills", rptTplBillsSchema, "bills");
+let tplRationData = mongoose.model("tpl_data_ration", rptTplRationSchema, "ration");
 
 module.exports = {
     prjMdl: tplPrjData,

+ 37 - 0
modules/templates/controllers/bills_template_controller.js

@@ -0,0 +1,37 @@
+/**
+ * Created by Mai on 2017/4/17.
+ */
+var BillsTemplateData = require('../models/bills_template');
+
+var callback = function(req, res, err, message, data){
+    res.json({error: err, message: message, data: data});
+};
+
+module.exports = {
+    getBillsTemplate: function(req, res){
+        var data = JSON.parse(req.body.data);
+        BillsTemplateData.getTemplate(data.tempType, function(err, message, templates){
+            if (templates) {
+                callback(req, res, err, message, templates);
+            } else {
+                callback(req, res, err, message, null);
+            }
+        });
+    },
+    updateBillsTemplate: function (req, res) {
+        var data = JSON.parse(req.body.data);
+        BillsTemplateData.updateTemplate(data.user_id, data.tempType, data.updateData, function (err, message, data) {
+            if (err === 0) {
+                callback(req, res, err, message, data);
+            } else {
+                callback(req, res, err, message, null);
+            }
+        });
+    },
+    getNewBillsTemplateID: function (req, res) {
+        var data = JSON.parse(req.body.data);
+        BillsTemplateData.getNewBillsTemplateID(data.count, function (err, message, data) {
+            callback(req, res, err, message, data);
+        });
+    }
+}

+ 87 - 0
modules/templates/models/bills_template.js

@@ -0,0 +1,87 @@
+/**
+ * Created by Mai on 2017/4/14.
+ * 清单模板,新建项目使用
+ */
+var counter = require("../../../public/counter/counter.js");
+
+var mongoose = require('mongoose');
+var dbm = require("../../../config/db/db_manager");
+var templatesDB = dbm.getCfgConnection("templates");
+var Schema = mongoose.Schema;
+var deleteSchema = require('../../../public/models/delete_schema');
+var BillsTemplateSchema = new Schema({
+    ID: Number,
+    ParentID: Number,
+    NextSiblingID: Number,
+    code: String,
+    name: String,
+    unit: String,
+    deleteInfo: deleteSchema,
+    tempType: Number
+});
+var BillsTemplates = templatesDB.model('temp_bills', BillsTemplateSchema);
+
+var BillsTemplateDAO = function(){};
+
+BillsTemplateDAO.prototype.getTemplate = function (type, callback) {
+    if (callback) {
+        BillsTemplates.find({'$or': [{tempType: type, deleteInfo: null}, {tempType: type, 'deleteInfo.deleted': {$in: [null, false]}}]}, '-_id').exec()
+            .then(function (result, err) {
+                if (err) {
+                    callback(1, '找不到模板', null);
+                } else {
+                    callback(0, '', result);
+                }
+            });
+        return null;
+    } else {
+        return BillsTemplates.find({'$or': [{tempType: type, deleteInfo: null}, {tempType: type, 'deleteInfo.deleted': {$in: [null, false]}}]}, '-_id').exec();
+    }
+};
+BillsTemplateDAO.prototype.updateTemplate = function (userID, tempType, datas, callback) {
+    var data, project, updateLength = 0, hasError = false, deleteInfo = null;
+    var updateAll = function (err) {
+        if (!err){
+            updateLength += 1;
+            if (updateLength === datas.length) {
+                callback(0, '', datas);
+            }
+        } else {
+            hasError = true;
+            callback(1, '升级数据出错', null);
+        }
+    };
+    if (datas){
+        for (var i = 0; i < datas.length && !hasError; i++){
+            data = datas[i];
+            if (data.type === 'update') {
+                BillsTemplates.update({tempType: tempType, ID: data.data.ID}, data.data, updateAll)
+            } else if (data.type === 'new') {
+                data.data['tempType'] = tempType;
+                newProject = new BillsTemplates(data.data);
+                newProject.save(updateAll);
+            } else if (data.type === 'delete') {
+                deleteInfo = {};
+                deleteInfo['deleted'] = true;
+                deleteInfo['deleteDateTime'] = new Date();
+                deleteInfo['deleteBy'] = userID;
+                BillsTemplates.update({ID: data.data.ID}, {deleteInfo: deleteInfo}, updateAll);
+            } else {
+                hasError = true;
+                callback(1, '升级数据出错', null)
+            }
+        }
+    }
+};
+BillsTemplateDAO.prototype.getNewBillsTemplateID = function (count, callback) {
+    counter.counterDAO.getIDAfterCount(counter.moduleName.template_bills, count, function (err, result) {
+        var highID = result.value.sequence_value;
+        if (!err) {
+            callback(0, '', {lowID: highID - count + 1, highID: highID});
+        } else {
+            callback(1, '获取主键失败', null);
+        }
+    });
+}
+
+module.exports = new BillsTemplateDAO();

+ 49 - 0
modules/templates/routes/bills_template_router.js

@@ -0,0 +1,49 @@
+/**
+ * Created by Mai on 2017/4/17.
+ */
+
+var express = require('express');
+
+var billsTemplateController = require('./../controllers/bills_template_controller');
+
+
+module.exports = function (app) {
+    app.get('/template/bills', function (req, res) {
+        let checkAdmin = function (userAccount) {
+            return true;
+        }
+        if (checkAdmin(req.session.userAccount)) {
+            res.render('maintain/templates/html/bills.html',
+                {userAccount: req.session.userAccount,
+                    userID: req.session.userID});
+        } else {
+            res.redirect('/pm');
+        }
+    });
+
+    app.use('/template/bills/api', function (req, res, next) {
+        let checkAdmin = function (userAccount) {
+            return true;
+        }
+        if (checkAdmin(req.session.sessionUser)) {
+            next();
+        } else {
+            res.json({error: 1, message: '对不起,您无权限操作清单模板。', data: null});
+        }
+    });
+
+    var billsTemplateRouter = express.Router();
+
+    billsTemplateRouter.post('/getBillsTemplate', billsTemplateController.getBillsTemplate);
+    billsTemplateRouter.post('/updateBillsTemplate', billsTemplateController.updateBillsTemplate);
+    billsTemplateRouter.post('/getNewBillsTemplateID', billsTemplateController.getNewBillsTemplateID);
+    app.use('/template/bills/api', billsTemplateRouter);
+}
+
+
+
+
+
+
+
+

+ 4 - 2
public/web/sheet/sheet_common.js

@@ -7,6 +7,7 @@ var sheetCommonObj = {
     createSpread: function(container, SheetCount){
         var me = this;
         var spreadBook = new GC.Spread.Sheets.Workbook(container, { sheetCount: SheetCount });
+        spreadBook.options.allowCopyPasteExcelStyle = false;
         spreadBook.options.tabStripVisible = false;
         spreadBook.options.showHorizontalScrollbar = false;
         return spreadBook;
@@ -34,6 +35,7 @@ var sheetCommonObj = {
         spreadBook.options.tabStripVisible = false;
         spreadBook.options.showHorizontalScrollbar = false;
         spreadBook.options.scrollbarMaxAlign = true;
+        spreadBook.options.allowCopyPasteExcelStyle = false;
         var spreadNS = GC.Spread.Sheets;
         var sheet = spreadBook.getSheet(0);
         sheet.suspendPaint();
@@ -124,10 +126,10 @@ var sheetCommonObj = {
         //me.shieldAllCells(sheet);
     },
     analyzePasteData: function(setting, pastedInfo) {
-        var rst = [], propId = 0, preStrIdx = 0, itemObj = {};
+        var rst = [], propId = pastedInfo.cellRange.col, preStrIdx = 0, itemObj = {};
         for (var i = 0; i < pastedInfo.pasteData.text.length; i++) {
             if (pastedInfo.pasteData.text[i] === "\n") {
-                propId = 0;
+                propId = pastedInfo.cellRange.col;
                 preStrIdx = i + 1;
                 rst.push(itemObj);
                 if (i < pastedInfo.pasteData.text.length - 1) {

+ 4 - 3
web/maintain/ration_repository/js/main.js

@@ -44,12 +44,12 @@ function addEvent_EditLib(){
 
 $("#deleteLib").click(function(){
     var rationLibName = $("#did").val();
-    //let lastOperator = userAccount;
+    let lastOperator = userAccount;
     $.ajax({
         type:"POST",
         url:"api/deleteRationLibs",
         dataType:"json",
-        data:{"rationName": rationLibName},
+        data:{"rationName": rationLibName, "lastOperator": lastOperator},
         cache:false,
         timeout:50000,
         success:function(result){
@@ -143,11 +143,12 @@ $("#rationAdd").click(function(){
 $("#edtOK").click(function(){
     var str = $("#did").val();
     var newStr = $("#inputRation").val();
+    let lastOperator = userAccount;
     $.ajax({
         type:"POST",
         url:"api/editRationLibs",
         dataType:"json",
-        data:{"rationName": str,"newName":newStr},
+        data:{"rationName": str,"newName":newStr, "lastOperator": lastOperator},
         cache:false,
         timeout:50000,
         success:function(result){

+ 60 - 37
web/maintain/ration_repository/js/ration.js

@@ -15,6 +15,7 @@ var rationOprObj = {
     currentRations: {},
     currentEditingRation: null,
     currentSectionId: -1,
+    activeCell: null,
     rationsCodes: [],
     setting: {
         header:[
@@ -61,13 +62,13 @@ var rationOprObj = {
             sheetGLJ = rationGLJOprObj.sheet, settingGLJ = rationGLJOprObj.setting,
             sheetCoe = rationCoeOprObj.sheet, settingCoe = rationCoeOprObj.setting,
             sheetAss = rationAssistOprObj.sheet, settingAss = rationAssistOprObj.setting;
+        me.activeCell = {row: args.row, col: args.col};
         sheetCommonObj.cleanSheet(sheetGLJ, settingGLJ, -1);
         sheetCommonObj.shieldAllCells(sheetGLJ);
         sheetCommonObj.cleanSheet(sheetCoe, settingCoe, -1);
         sheetCommonObj.shieldAllCells(sheetCoe);
         sheetCommonObj.cleanSheet(sheetAss, settingAss, -1);
         sheetCommonObj.shieldAllCells(sheetAss);
-
         if(!(args.sheetArea === GC.Spread.Sheets.SheetArea.colHeader || args.sheetArea === GC.Spread.Sheets.SheetArea.corner)){
             var cacheSection = me.getCache();
             if (cacheSection && args.row < cacheSection.length) {
@@ -126,7 +127,6 @@ var rationOprObj = {
         return cacheSection;
     },
     rationDelOpr: function () {
-        console.log(`rebuildDelete`);
         let me = rationOprObj;
         me.workBook.commandManager().register('rationDelete', function () {
             let rationSheet = me.workBook.getActiveSheet();
@@ -140,8 +140,6 @@ var rationOprObj = {
                                 if(sels[sel].row + i < cacheSection.length){
                                     removeArr.push(cacheSection[sels[sel].row + i].ID);
                                     me.rationsCodes.splice(me.rationsCodes.indexOf(cacheSection[sels[sel].row + i].code), 1);
-                                    console.log(`me.rationsCodes`);
-                                    console.log(me.rationsCodes);
                                 }
                             }
                         }
@@ -160,7 +158,7 @@ var rationOprObj = {
                         }
                         else if(sels[sel].col !== 0 && !(sels[sel].col === 3 && sels.col + sels[sel].colCount -1 === 6)){
                             if(cacheSection){
-                                for(let i =0; i < sels[sel].rowCount; i++){
+                                for(let i = sels[sel].row === -1 ? 1 : 0; i < sels[sel].rowCount; i++){
                                     if(sels[sel].row + i < cacheSection.length){
                                         for(let col = sels[sel].col; col <= sels[sel].col + sels[sel].colCount - 1; col++){
                                             if(lockCols.indexOf(col) === -1){
@@ -168,7 +166,9 @@ var rationOprObj = {
                                             }
                                         }
                                     }
-                                    updateArr.push(cacheSection[sels[sel].row + i]);
+                                    if(cacheSection[sels[sel].row + i] && typeof cacheSection[sels[sel].row + i] !== 'undefined'){
+                                        updateArr.push(cacheSection[sels[sel].row + i]);
+                                    }
                                 }
                             }
                         }
@@ -184,7 +184,6 @@ var rationOprObj = {
         me.workBook.commandManager().setShortcutKey('rationDelete', GC.Spread.Commands.Key.del, false, false, false, false);
     },
     onRangeChanged: function(sender, args) {
-        console.log(`sdad`);
         if (args.action == GC.Spread.Sheets.RangeChangedAction.clear) {
             var me = rationOprObj, updateArr = [], removeArr = [];
             var cacheSection = me.getCache();
@@ -303,13 +302,13 @@ var rationOprObj = {
             if (!sheetCommonObj.chkIfEmpty(rObj, me.setting)) {
                 //addArr.push(rObj);
                 me.addRationItem = rObj;
-                if(rObj.code){
+                if(rObj.code && rObj.code.trim().length > 0){
                     if(me.rationsCodes.indexOf(rObj.code) === -1){
                         addArr.push(rObj);
                         me.rationsCodes.push(rObj.code);
                         me.addRationItem = null;
                     }
-                    else{
+                    else if(!rObj.code && rObj.code === ''){
                         $('#alertModalBtn').click();
                         me.workBook.getSheet(0).options.isProtected = true;
                         $('#alertModalCls').click(function () {
@@ -326,6 +325,9 @@ var rationOprObj = {
                         });
                     }
                 }
+                else if(rObj.code && rObj.code.trim().length === 0){
+                    me.workBook.getSheet(0).setValue(args.row, args.col, '');
+                }
             }
         }
         if (updateArr.length > 0 || addArr.length > 0) {
@@ -335,50 +337,68 @@ var rationOprObj = {
     },
     onClipboardPasting: function(sender, args) {
         var me = rationOprObj;
-        console.log(`args`);
-        console.log(args);
       /*  if (args.cellRange.colCount != me.setting.header.length) {
             args.cancel = true;
         }*/
     },
     onClipboardPasted: function(e, info) {
-        console.log(`info`);
-        console.log(info);
         var me = rationOprObj;
         var cacheSection = me.getCache();
-        console.log(`cache`);
-        console.log(cacheSection);
         var updateArr = [], addArr = [];
         var items = sheetCommonObj.analyzePasteData(me.setting, info);
-        console.log(`items`);
-        console.log(items);
-        for (var i = 0; i < items.length; i++) {
+        let failPasteArr = [];
+        for (var i = 0, rowIdx =info.cellRange.row; i < items.length; i++, rowIdx++) {
             if (cacheSection) {
-                var hasCacheItem = false;
-                for (var j = 0; j < cacheSection.length; j++) {
-                    if (cacheSection[j][me.setting.header[0].dataCode] == items[i][me.setting.header[0].dataCode]) {
-                        hasCacheItem = true;
-                        items[i]["ID"] = cacheSection[j]["ID"];
-                        break;
+                //var hasCacheItem = false;
+                if(!cacheSection[rowIdx] && info.cellRange.col === 0 ){
+                    if(me.rationsCodes.indexOf(items[i].code) === -1){
+                        addArr.push(items[i]);
+                        me.rationsCodes.push(items[i].code);
+                    }
+                    else{
+                        failPasteArr.push(items[i].code);
+                        me.workBook.getSheet(0).setValue(rowIdx, 0, '');
                     }
                 }
-                if (!hasCacheItem && info.cellRange.col === 0) {
-                    addArr.push(items[i]);
-                } else if(hasCacheItem){
-                    updateArr.push(items[i]);
+                else if(cacheSection[rowIdx]){
+                    for(let col = 0; col < me.setting.header.length; col++){
+                        if(!items[i][me.setting.header[col].dataCode] && typeof cacheSection[rowIdx][me.setting.header[col].dataCode] !== 'undefined'){
+                            items[i][me.setting.header[col].dataCode] = cacheSection[rowIdx][me.setting.header[col].dataCode];
+                        }
+                    }
+                    if(info.cellRange.col === 0){
+                        if(me.rationsCodes.indexOf(items[i].code) === -1){
+                            items[i].ID = cacheSection[rowIdx].ID;
+                            updateArr.push(items[i]);
+                        }
+                        else{
+                            me.workBook.getSheet(0).setValue(rowIdx, 0, cacheSection[rowIdx].code);
+                        }
+                    }
+                    else{
+                        items[i].ID = cacheSection[rowIdx].ID;
+                        updateArr.push(items[i]);
+                    }
                 }
+
             } else {
                 //add
                 if(info.cellRange.col === 0){
-                    addArr.push(items[i])
+                    //是否含有已存在的编号
+                        if(me.rationsCodes.indexOf(items[i].code) === -1){
+                            addArr.push(items[i]);
+                        }
+                        else{
+                            failPasteArr.push(items[i]);
+                        }
                 }
             }
         };
-        console.log(`updateArr`);
-        console.log(updateArr);
-        console.log(addArr);
-        if (updateArr.length > 0 || addArr.length > 0) {
-            //me.mixUpdateRequest(updateArr, addArr, []);
+       /* if(failPasteArr.length > 0 && !(updateArr.length > 0 || addArr.length > 0)){
+            me.showRationItems(me.currentSectionId);
+        }*/
+         if (updateArr.length > 0 || addArr.length > 0) {
+            me.mixUpdateRequest(updateArr, addArr, []);
         }
     },
     getRationsCodes: function (repId) {
@@ -400,13 +420,13 @@ var rationOprObj = {
         $.ajax({
             type:"POST",
             url:"api/mixUpdateRationItems",
-            data:{"rationLibId": getQueryString("repository"), "sectionID": me.currentSectionId, "updateItems": JSON.stringify(updateArr), "addItems": JSON.stringify(addArr), "removeIds": JSON.stringify(removeIds)},
+            data:{"rationLibId": getQueryString("repository"), "lastOpr": userAccount, "sectionID": me.currentSectionId, "updateItems": JSON.stringify(updateArr), "addItems": JSON.stringify(addArr), "removeIds": JSON.stringify(removeIds)},
             dataType:"json",
             cache:false,
             timeout:5000,
             success:function(result){
-                if (result.err) {
-                    alert(err);
+                if (result.error) {
+                    alert(`error`);
                     me.getRationItems(me.currentSectionId);
                 } else {
                     var cacheSection = me.updateCache(addArr, updateArr, removeIds, result);
@@ -417,6 +437,9 @@ var rationOprObj = {
                         return rst;
                     });
                     me.showRationItems(me.currentSectionId);
+                   /* me.workBook.getSheet(0).setActiveCell(me.activeCell.row, me.activeCell.col);
+                    let spreadBook = new GC.Spread.Sheets.Workbook(rationOprObj.sheet, { sheetCount: 1 });
+                    spreadBook.focus(true);*/
                 }
             },
             error:function(){

+ 110 - 4
web/maintain/ration_repository/js/ration_glj.js

@@ -5,6 +5,7 @@ var rationGLJOprObj = {
     sheet: null,
     currentRationItem: null,
     distTypeTree: null,
+    activeCell: null,
     cache: {},
     setting: {
         header:[
@@ -17,7 +18,7 @@ var rationGLJOprObj = {
         ],
         view:{
             comboBox:[],
-            lockColumns:[1,2,3,5,6]
+            lockColumns:[1,2,3,5]
         }
     },
     getDistTypeTree: function (gljDistType) {
@@ -81,12 +82,81 @@ var rationGLJOprObj = {
         me.getGljDistType(function () {
             me.onContextmenuOpr();
             sheetCommonObj.initSheet(me.sheet, me.setting, 30);
+            me.rationGljDelOpr();
             me.sheet.bind(GC.Spread.Sheets.Events.ClipboardPasting, me.onClipboardPasting);
             me.sheet.bind(GC.Spread.Sheets.Events.ClipboardPasted, me.onClipboardPasted);
             me.sheet.bind(GC.Spread.Sheets.Events.EditEnded, me.onCellEditEnd);
-            me.sheet.bind(GC.Spread.Sheets.Events.RangeChanged, me.onRangeChanged);
+            //me.sheet.bind(GC.Spread.Sheets.Events.RangeChanged, me.onRangeChanged);
         });
     },
+    rationGljDelOpr: function () {
+        let me = rationGLJOprObj, spreadBook = me.sheet.getParent();
+        spreadBook.commandManager().register('rationGljDelete', function () {
+            console.log(me.cache["_GLJ_" + me.currentRationItem.ID]);
+            let sels = me.sheet.getSelections(), updateArr = [], removeArr = [], lockCols = me.setting.view.lockColumns;
+            let cacheSection = me.cache["_GLJ_" + me.currentRationItem.ID], isUpdate = false;
+            console.log(`sels`);
+            console.log(sels);
+            if(sels.length > 0){
+                for(let sel = 0; sel < sels.length; sel++){
+                    if(sels[sel].colCount === me.setting.header.length){
+                        if(cacheSection){
+                            for(let i = 0; i < sels[sel].rowCount; i++){
+                                if(sels[sel].row + i < cacheSection.length){
+                                    //removeArr.push(cacheSection[sels[sel].row + i].ID);
+                                    isUpdate = true;
+                                    cacheSection.splice(sels[sel].row + i, 1);
+                                    me.updateRationItem();
+                                    //me.rationsCodes.splice(me.rationsCodes.indexOf(cacheSection[sels[sel].row + i].code), 1);
+                                }
+                            }
+                        }
+                    }
+                    else{
+                        if(sels[sel].col === 0){
+                            $('#alertText').text("编号不能为空,修改失败!");
+                            $('#alertModalBtn').click();
+                            me.sheet.options.isProtected = true;
+                            $('#alertModalCls').click(function () {
+                                me.sheet.options.isProtected = false;
+                            });
+                            $('#alertModalCof').click(function () {
+                                me.sheet.options.isProtected = false;
+                            });
+                        }
+                        else if(sels[sel].col !== 0 && sels[sel].col !== 5 && !(sels[sel].col === 1 && sels.col + sels[sel].colCount -1 === 3)){
+                            console.log(`enter`);
+                            if(cacheSection){
+                                for(let i = sels[sel].row === -1 ? 1 : 0; i < sels[sel].rowCount; i++){
+                                    if(sels[sel].row + i < cacheSection.length){
+                                        for(let col = sels[sel].col; col <= sels[sel].col + sels[sel].colCount - 1; col++){
+                                            if(lockCols.indexOf(col) === -1){
+                                                isUpdate = true;
+                                                cacheSection[sels[sel].row + i][me.setting.header[col].dataCode] = 0;
+                                                me.sheet.setValue(sels[sel].row + i, col, 0.00);
+                                            }
+                                        }
+                                    }
+                                    //updateArr.push(cacheSection[sels[sel].row + i]);
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+            if(isUpdate){
+                me.updateRationItem();
+                sheetCommonObj.cleanSheet(me.sheet, me.setting, -1);
+                me.showGljItems(me.currentRationItem.ID);
+            }
+           /* if(updateArr.length > 0 || removeArr.length > 0){
+                me.mixUpdateRequest(updateArr, [], removeArr);
+            }*/
+
+        });
+        spreadBook.commandManager().setShortcutKey(null, GC.Spread.Commands.Key.del, false, false, false, false);
+        spreadBook.commandManager().setShortcutKey('rationGljDelete', GC.Spread.Commands.Key.del, false, false, false, false);
+    },
     onRangeChanged: function(sender, args) {
         if (args.action == GC.Spread.Sheets.RangeChangedAction.clear) {
             var me = rationGLJOprObj, updateArr = [], removeArr = [];
@@ -108,9 +178,9 @@ var rationGLJOprObj = {
     },
     onClipboardPasting: function(sender, args) {
         var me = rationGLJOprObj;
-        if (args.cellRange.colCount != 1 || args.cellRange.col != 0 || !(me.currentRationItem)) {
+        /*if (args.cellRange.colCount != 1 || args.cellRange.col != 0 || !(me.currentRationItem)) {
             args.cancel = true;
-        }
+        }*/
     },
     onClipboardPasted: function(e, info) {
         var me = rationGLJOprObj, repId = storageUtil.getSessionCache("RationGrp","repositoryID");
@@ -124,6 +194,29 @@ var rationGLJOprObj = {
                 me.addGljItems(codes, repId);
             } else {
                 //修改用量
+                if(me.cache["_GLJ_" + me.currentRationItem.ID] && info.cellRange.row < me.cache["_GLJ_" + me.currentRationItem.ID].length){
+                    let tempConsumes = sheetCommonObj.analyzePasteData(me.setting, info);
+                    let maxCount = info.cellRange.row + info.cellRange.rowCount -1 > me.cache["_GLJ_" + me.currentRationItem.ID].length -1 ?
+                        me.cache["_GLJ_" + me.currentRationItem.ID].length - info.cellRange.row : info.cellRange.rowCount;
+                    for(let i = 0; i < maxCount; i++){
+                        me.cache["_GLJ_" + me.currentRationItem.ID][info.cellRange.row + i].consumeAmt = tempConsumes[i].consumeAmt;
+                    }
+                    me.updateRationItem();
+                    if(info.cellRange.row + info.cellRange.rowCount -1 >= me.cache["_GLJ_" + me.currentRationItem.ID].length -1){
+                        me.sheet.suspendPaint();
+                        for(let rowIdx = me.cache["_GLJ_" + me.currentRationItem.ID].length; rowIdx <= info.cellRange.row + info.cellRange.rowCount -1; rowIdx++){
+                            me.sheet.setValue(rowIdx, info.cellRange.col, '');
+                        }
+                        me.sheet.resumePaint();
+                    }
+                }
+                else if(info.cellRange.row >= me.cache["_GLJ_" + me.currentRationItem.ID].length){
+                    me.sheet.suspendPaint();
+                    for(let rowIdx = info.cellRange.row; rowIdx <= info.cellRange.row + info.cellRange.rowCount -1; rowIdx ++){
+                        me.sheet.setValue(rowIdx, info.cellRange.col, '');
+                    }
+                    me.sheet.resumePaint();
+                }
             }
         }
     },
@@ -366,6 +459,19 @@ var rationGLJOprObj = {
                                 }
                             }
                         }
+                        function compare(){
+                            return function (a, b) {
+                                let rst = 0;
+                                if (a.code > b.code) {
+                                    rst = 1;
+                                }
+                                else if (a.code < b.code) {
+                                    rst = -1;
+                                }
+                                return rst;
+                            }
+                        }
+                        cacheArr.sort(compare());
                         me.cache["_GLJ_" + rationID] = cacheArr;
                         me.showGljItems(rationID);
                     }

+ 241 - 32
web/maintain/ration_repository/js/repository_glj.js

@@ -12,9 +12,11 @@ $("#fuzhu").click(function(){
 
 var pageOprObj = {
     rationLibName : null,
+    rationLibId: null,
     initPage : function(container) {
         var me = this, rationLibId = getQueryString("repository"),//获取定额库参数
             rationLibName = storageUtil.getSessionCache("RationGrp","repositoryID_" + rationLibId);
+        me.rationLibId = rationLibId;
         if (rationLibName) {
             var html = $("#rationname")[0].outerHTML;
             html = html.replace("XXX定额库", rationLibName);
@@ -272,9 +274,11 @@ var pageOprObj = {
     },
     onCellEditEnd: function(sender, args) {
         var me = repositoryGljObj, rObj = sheetCommonObj.combineRowData(me.workBook.getSheet(0), me.setting, args.row, me),
-            updateArr = [], addArr = [];
+            updateArr = [], addArr = [], updateBasePrcArr = [];
         me.editingRowIdx = args.row;
         rObj.basePrice = rObj.basePrice ? rObj.basePrice : 0;
+        console.log(`rObj`);
+        console.log(rObj);
         if (me.currentEditingGlj["ID"]) {
             rObj["ID"] = me.currentEditingGlj["ID"];
             rObj.gljClass = me.currentEditingGlj.gljClass;
@@ -299,13 +303,15 @@ var pageOprObj = {
                 }
                 let gljBasePrcObj = {gljId: me.currentEditingGlj.ID, gljType: gljType, basePrice: rObj.basePrice};
                 if(gljBasePrcObj.gljType !== -1){
-                    me.updateRationBasePrcRq(gljBasePrcObj);
+                    updateBasePrcArr.push(gljBasePrcObj);
+                    me.updateRationBasePrcRq(updateBasePrcArr);
                 }
             }
             //update basePrice of ration when editting gljType of glj
             if(me.currentEditingGlj.gljType !== rObj.gljType){
                let gljTypeObj = {gljId: me.currentEditingGlj.ID, gljType: rObj.gljType, basePrice: rObj.basePrice};
-                me.updateRationBasePrcRq(gljTypeObj);
+                updateBasePrcArr.push(gljTypeObj);
+                me.updateRationBasePrcRq(updateBasePrcArr);
             }
         } else {
             me.addGljObj = rObj;
@@ -323,6 +329,8 @@ var pageOprObj = {
         }
         if(updateArr.length >0 || addArr.length >0){
             me.currentEditingGlj = null;
+            //me.workBook.getSheet(0).setValue(11, 5, "人工");
+            console.log(addArr);
             me.mixUpdateRequest(updateArr, addArr, []);
         }
     },
@@ -445,41 +453,220 @@ var pageOprObj = {
              }
          }
      },
-    onClipboardPasting: function(sender, args) {
-        var me = repositoryGljObj;
-        if (args.cellRange.colCount != me.setting.header.length || me.gljCurTypeId < 0 || me.parentNodeIds["_pNodeId_" + me.gljCurTypeId]) {
-            args.cancel = true;
-        }
-    },
+     validUpdateObj: function (pasteObj, rowIdx) {
+         let rst = {}, backUpObj = {},
+             me = repositoryGljObj,
+             tempObj = me.currentCache[rowIdx],
+             reCalBasePrc = false, isValid = true;
+         //备份原始数据
+         for(let atr in tempObj){
+             backUpObj[atr] = tempObj[atr];
+         }
+         if(typeof pasteObj.code !== 'undefined'){
+             if(pasteObj.code.trim().length !== 0){
+                 let isExist = false;
+                 for(let i = 0; i < me.gljList.length; i++){
+                     if(me.gljList[i].code === pasteObj.code){
+                         isExist = true;
+                         break;
+                     }
+                 }
+                 if(!isExist){
+                     tempObj.code = pasteObj.code;
+                 }
+                 else isValid = false;
+             }
+             else isValid = false;
+         }
+         if(typeof pasteObj.name !== 'undefined'){
+             if(pasteObj.name.trim().length === 0) isValid = false;
+             else tempObj.name = pasteObj.name;
+         }
+         if(typeof pasteObj.specs !== 'undefined'){
+             tempObj.specs = pasteObj.specs;
+         }
+         if(typeof pasteObj.unit !== 'undefined'){
+             tempObj.unit = pasteObj.unit;
+         }
+         if(typeof pasteObj.gljType !== 'undefined'){
+             let isExsit = false;
+             for(let i = 0; i < me.distTypeTree.comboDatas.length; i++){
+                 if(pasteObj.gljType === me.distTypeTree.comboDatas[i].text){
+                     isExsit = true;
+                     reCalBasePrc = true;
+                     tempObj.gljType = me.distTypeTree.comboDatas[i].value;
+                     tempObj.shortName = me.distTypeTree.distTypes[me.distTypeTree.prefix + tempObj.gljType].data.shortName;
+
+                 }
+             }
+             if(!isExsit) isValid = false;
+         }
+         //
+         pasteObj.basePrice = !isNaN(parseFloat(pasteObj.basePrice)) && (pasteObj.basePrice && typeof pasteObj.basePrice !== 'undefined') ? parseFloat(pasteObj.basePrice) :
+                                me.currentCache[rowIdx].basePrice;
+         if(pasteObj.basePrice !== me.currentCache[rowIdx].basePrice){
+             reCalBasePrc = true;
+             tempObj.basePrice = pasteObj.basePrice;
+         }
+         if(isValid){
+             rst.updateGlj = tempObj;
+             if(reCalBasePrc){
+                 //重新计算定额基价对象
+                 rst.updateBasePrc = {gljId: tempObj.ID, gljType: tempObj.gljType, basePrice: tempObj.basePrice};
+             }
+         }
+         else {
+             for(let attr in backUpObj){
+                 tempObj[attr] = backUpObj[attr];
+             }
+         }
+         return rst;
+     },
+     //粘贴的数据是否是可添加的数据,只有含有编号,名称,类型才可添加
+     isValidObj: function(pasteObj) {
+        let me = repositoryGljObj;
+         if(!(pasteObj.code && typeof pasteObj.code !== 'undefined') || !(pasteObj.name && typeof pasteObj.name !== 'undefined') ||
+         !(pasteObj.gljType && typeof pasteObj.gljType !== 'undefined')){
+             return false;
+         }
+         if(pasteObj.gljType && typeof pasteObj.gljType !== 'undefined'){
+             let isExist = false;
+             for(let i = 0; i < me.distTypeTree.comboDatas.length; i++){
+                 if(me.distTypeTree.comboDatas[i].text === pasteObj.gljType){
+                     isExist = true;
+                     pasteObj.gljType = me.distTypeTree.comboDatas[i].value;
+                     pasteObj.shortName = me.distTypeTree.distTypes[me.distTypeTree.prefix + pasteObj.gljType].data.shortName;
+                     break;
+                 }
+             }
+             if(!isExist){
+                 return false;
+             }
+         }
+         if(pasteObj.code && typeof pasteObj.code !== 'undefined'){
+            for(let i = 0; i < me.gljList.length; i++){
+                if(me.gljList[i].code === pasteObj.code){
+                    return false;
+                }
+            }
+         }
+         pasteObj.basePrice = !isNaN(parseFloat(pasteObj.basePrice)) && (pasteObj.basePrice && typeof pasteObj.basePrice !== 'undefined') ? parseFloat(pasteObj.basePrice) : 0;
+         pasteObj.gljClass = me.gljCurTypeId;
+         return true;
+     },
+     onClipboardPasting: function(sender, args) {
+         var me = repositoryGljObj;
+         /*if (args.cellRange.colCount != me.setting.header.length || me.gljCurTypeId < 0 || me.parentNodeIds["_pNodeId_" + me.gljCurTypeId]) {
+          args.cancel = true;
+          }*/
+         if (me.gljCurTypeId < 0 ) {
+             args.cancel = true;
+         }
+     },
     onClipboardPasted: function(e, info) {
         var me = repositoryGljObj;
         var updateArr = [], addArr = [];
         var items = sheetCommonObj.analyzePasteData(me.setting, info);
-        var hasCacheItem = false;
-        for (var i = 0; i < items.length; i++) {
-            for (var j = 0; j < me.gljList.length; j++) {
-                if (me.gljList[j][me.setting.header[0].dataCode] == items[i][me.setting.header[0].dataCode]) {
-                    hasCacheItem = true;
-                    items[i]["ID"] = me.gljList[j]["ID"];
-                    break;
+        let beginRow = info.cellRange.row, endRow = info.cellRange.row + info.cellRange.rowCount - 1,
+            maxRow = me.currentCache.length - 1, updateItems = [], addItems = [], updateBasePrcArr = [] , updateCount, resumeArr = [];
+        if(endRow <= maxRow){
+            //updateItems = items;
+            for(let i = 0; i < items.length; i++){
+                let updateObj = me.validUpdateObj(items[i], info.cellRange.row + i);
+                if(updateObj && typeof updateObj.updateGlj !== 'undefined'){
+                    updateArr.push(updateObj.updateGlj);
+                    if(typeof updateObj.updateBasePrc !== 'undefined'){
+                        updateBasePrcArr.push(updateObj.updateBasePrc);
+                    }
+                }
+                else{
+                    resumeArr.push(info.cellRange.row + i);
+                }
+            }
+        }
+        else if(beginRow <= maxRow && endRow > maxRow){
+            updateCount = maxRow - beginRow + 1;
+            for(let i = 0; i < updateCount; i++){
+                let updateObj = me.validUpdateObj(items[i], info.cellRange.row + i);
+                if(updateObj && typeof updateObj.updateGlj !== 'undefined'){
+                    updateArr.push(updateObj.updateGlj);
+                    if(typeof updateObj.updateBasePrc !== 'undefined'){
+                        updateBasePrcArr.push(updateObj.updateBasePrc);
+                    }
+                }
+                else{
+                    resumeArr.push(info.cellRange.row + i);
+                }
+            }
+            if(info.cellRange.colCount === me.setting.header.length){
+                for(let i = updateCount ; i < items.length; i++){
+                    if(me.isValidObj(items[i])){
+                        addItems.push(items[i]);
+                        addArr.push(items[i]);
+                    }
+                    else{
+                        resumeArr.push(info.cellRange.row + i);
+                    }
+                }
+            }
+            else{
+                for(let i = updateCount ; i < items.length; i++){
+                    resumeArr.push(info.cellRange.row + i);
+                }
+            }
+        }
+        else{
+            if(info.cellRange.colCount === me.setting.header.length){
+                for(let i = 0; i < items.length; i++){
+                    if(me.isValidObj(items[i])){
+                        addArr.push(items[i]);
+                    }
+                    else{
+                        resumeArr.push(info.cellRange.row + i);
+                    }
                 }
             }
-            if (!hasCacheItem) {
-                items[i].gljType = me.gljCurTypeId;
-                addArr.push(items[i]);
-            } else {
-                updateArr.push(items[i]);
+            else{
+                for(let i = 0; i < items.length; i++){
+                    resumeArr.push(info.cellRange.row + i);
+                }
+            }
+        }
+        //repaint
+        if(resumeArr.length > 0){
+            info.sheet.suspendPaint();
+            for(let i = 0; i < resumeArr.length ; i++){
+                if(resumeArr[i] < me.currentCache.length){
+                    for(let col = 0; col < me.setting.header.length; col++){
+                        if(me.setting.header[col].dataCode === 'gljType'){
+                            let gljType = me.currentCache[resumeArr[i]][me.setting.header[col].dataCode];
+                            info.sheet.setValue(resumeArr[i], col, me.distTypeTree.distTypes["gljType" + gljType].data.fullName);
+                        }
+                        else{
+                            info.sheet.setValue(resumeArr[i], col, me.currentCache[resumeArr[i]][me.setting.header[col].dataCode]);
+                        }
+                    }
+                }
+                else{
+                    for(let col = 0; col < me.setting.header.length; col++){
+                        info.sheet.setValue(resumeArr[i], col, '');
+                    }
+                }
             }
+            info.sheet.resumePaint();
         }
         if (updateArr.length > 0 || addArr.length > 0) {
-            me.mixUpdateRequest(updateArr, addArr, []);
+           me.mixUpdateRequest(updateArr, addArr, []);
+        }
+        if(updateBasePrcArr.length > 0){
+           me.updateRationBasePrcRq(updateBasePrcArr);
         }
     },
-    updateRationBasePrcRq: function (gljObj) {
+    updateRationBasePrcRq: function (basePrcArr) {
         $.ajax({
             type: 'post',
             url: 'api/updateRationBasePrc',
-            data:{data: JSON.stringify({gljId: gljObj.gljId, basePrice: gljObj.basePrice, gljType: gljObj.gljType})},
+            data:{data: JSON.stringify({repId: pageOprObj.rationLibId, lastOpr: userAccount, basePrcArr: basePrcArr})},
             dataType: 'json',
             success: function (result) {
                 if(result.error){
@@ -507,7 +694,7 @@ var pageOprObj = {
         $.ajax({
             type:"POST",
             url:"api/mixUpdateGljItems",
-            data:{"repositoryId": me.currentRepositoryId, "updateItems": JSON.stringify(updateArr), "addItems": JSON.stringify(addArr), "removeIds": JSON.stringify(removeIds)},
+            data:{"repositoryId": me.currentRepositoryId, "lastOpr": userAccount, "updateItems": JSON.stringify(updateArr), "addItems": JSON.stringify(addArr), "removeIds": JSON.stringify(removeIds)},
             dataType:"json",
             cache:false,
             timeout:5000,
@@ -516,10 +703,14 @@ var pageOprObj = {
                     alert(result.message);
                     me.getRationItems(me.currentRepositoryId);
                 } else {
-                    console.log(`enterSc`);
                     me.updateCache(addArr, updateArr, removeIds, result);
                     me.sortGlj();
-                    me.currentCache = me.getCache();
+                    if(me.currentOprParent === 1){
+                        me.currentCache = me.getParentCache(me.parentNodeIds["_pNodeId_" + me.gljCurTypeId]);
+                    }
+                    else{
+                        me.currentCache = me.getCache();
+                    }
                     me.showGljItems(me.gljList, me.gljCurTypeId);
                 }
             },
@@ -528,6 +719,21 @@ var pageOprObj = {
             }
         })
     },
+     getParentCache: function (nodes) {
+        let me = repositoryGljObj, rst = [];
+        for(let i = 0; i < me.gljList.length; i++){
+            if(nodes.indexOf(me.gljList[i].gljClass) !== -1){
+                rst.push(me.gljList[i]);
+            }
+        }
+         rst.sort(function (a, b) {
+             let rst = 0;
+             if(a.code > b.code) rst = 1;
+             else if(a.code < b.code)rst = -1;
+             return rst;
+         });
+         return rst;
+     },
     getCache: function() {
         var me = this, rst = [];
         for (var i = 0; i < me.gljList.length; i++) {
@@ -589,13 +795,16 @@ var gljTypeTreeOprObj = {
         var me = repositoryGljObj,
             gljTypeId = treeNode.ID;
         me.gljCurTypeId = treeNode.ID;
-        me.currentCache = me.getCache();
+        //me.currentCache = me.getCache();
         me.showGljItems(me.gljList, gljTypeId);
-        console.log(me.gljCurTypeId);
         if (me.parentNodeIds["_pNodeId_" + treeNode.ID]) {
+            me.currentOprParent = 1;
+            me.currentCache = me.getParentCache(me.parentNodeIds["_pNodeId_" + treeNode.ID]);
             sheetCommonObj.lockCodeCells(me.workBook.getSheet(0), me.gljList.length);
             //sheetCommonObj.shieldAllCells(me.workBook.getSheet(0), me.setting);
         } else {
+            me.currentOprParent = 0;
+            me.currentCache = me.getCache();
             sheetCommonObj.unShieldAllCells(me.workBook.getSheet(0));
         }
     },
@@ -637,7 +846,7 @@ var gljTypeTreeOprObj = {
         $.ajax({
             type:"POST",
             url:"api/deleteGljNodes",
-            data:{"nodes": JSON.stringify(nodeIds), "preNodeId": preNodeId, "preNodeNextId": treeNode.NextSiblingID},
+            data:{"repId": pageOprObj.rationLibId, "lastOpr": userAccount, "nodes": JSON.stringify(nodeIds), "preNodeId": preNodeId, "preNodeNextId": treeNode.NextSiblingID},
             dataType:"json",
             cache:false,
             timeout:5000,
@@ -676,7 +885,7 @@ var gljTypeTreeOprObj = {
             $.ajax({
                 type:"POST",
                 url:"api/updateGljNodes",
-                data:{"nodes": JSON.stringify(reqData)},
+                data:{"repId": pageOprObj.rationLibId, "lastOpr": userAccount, "nodes": JSON.stringify(reqData)},
                 dataType:"json",
                 cache:false,
                 timeout:5000,
@@ -707,7 +916,7 @@ var gljTypeTreeOprObj = {
         $.ajax({
             type:"POST",
             url:"api/createNewGljTypeNode",
-            data:{"repositoryId": repositoryGljObj.currentRepositoryId,"lastNodeId": lastNodeId, "rawNodeData": JSON.stringify(rawNode)},
+            data:{"lastOpr": userAccount, "repositoryId": repositoryGljObj.currentRepositoryId,"lastNodeId": lastNodeId, "rawNodeData": JSON.stringify(rawNode)},
             dataType:"json",
             cache:false,
             timeout:1000,

+ 3 - 3
web/maintain/ration_repository/js/section_tree.js

@@ -66,7 +66,7 @@ var zTreeOprObj = {
         $.ajax({
             type:"POST",
             url:"api/createNewNode",
-            data:{"rationLibId":pageOprObj.rationLibId,"lastNodeId": lastNodeId, "rawNodeData": JSON.stringify(rawNode)},
+            data:{"rationLibId":pageOprObj.rationLibId,"lastNodeId": lastNodeId, "lastOpr": userAccount, "rawNodeData": JSON.stringify(rawNode)},
             dataType:"json",
             cache:false,
             timeout:1000,
@@ -109,7 +109,7 @@ var zTreeOprObj = {
         $.ajax({
             type:"POST",
             url:"api/deleteNodes",
-            data:{"nodes": JSON.stringify(nodeIds), "preNodeId": preNodeId, "preNodeNextId": treeNode.NextSiblingID},
+            data:{"repId": pageOprObj.rationLibId, "lastOpr": userAccount, "nodes": JSON.stringify(nodeIds), "preNodeId": preNodeId, "preNodeNextId": treeNode.NextSiblingID},
             dataType:"json",
             cache:false,
             timeout:5000,
@@ -149,7 +149,7 @@ var zTreeOprObj = {
             $.ajax({
                 type:"POST",
                 url:"api/updateNodes",
-                data:{"nodes": JSON.stringify(reqData)},
+                data:{"repId": pageOprObj.rationLibId,"lastOpr": userAccount, "nodes": JSON.stringify(reqData)},
                 dataType:"json",
                 cache:false,
                 timeout:5000,

web/maintain/report/css/templates/css/main.css → web/maintain/templates/css/main.css


+ 4 - 4
web/maintain/report/css/templates/html/bills.html

@@ -6,7 +6,7 @@
     <meta http-equiv="x-ua-compatible" content="ie=edge">
     <title>模板清单-Smartcost</title>
     <link rel="stylesheet" href="/lib/bootstrap/css/bootstrap.min.css">
-    <link rel="stylesheet" href="/web/maintain/report/css/templates/css/main.css">
+    <link rel="stylesheet" href="/web/maintain/templates/css/main.css">
     <link rel="stylesheet" href="/lib/font-awesome/font-awesome.min.css">
     <!--SpreadJs-->
     <link rel="stylesheet" href="/lib/spreadjs/sheets/css/gc.spread.sheets.excel2013lightGray.10.0.1.css" type="text/css">
@@ -87,7 +87,7 @@
 <script src="/lib/jquery/jquery.min.js"></script>
 <script src="/lib/tether/tether.min.js"></script>
 <script src="/lib/bootstrap/bootstrap.min.js"></script>
-<script src="/web/maintain/report/css/templates/js/global.js"></script>
+<script src="/web/maintain/templates/js/global.js"></script>
 <!-- SpreadJs -->
 <script type="text/javascript" src="/lib/spreadjs/sheets/gc.spread.sheets.all.10.0.1.min.js"></script>
 <script>GC.Spread.Sheets.LicenseKey = "559432293813965#A0y3iTOzEDOzkjMyMDN9UTNiojIklkI1pjIEJCLi4TPB9mM5AFNTd4cvZ7SaJUVy3CWKtWYXx4VVhjMpp7dYNGdx2ia9sEVlZGOTh7NRlTUwkWR9wEV4gmbjBDZ4ElR8N7cGdHVvEWVBtCOwIGW0ZmeYVWVr3mI0IyUiwCMzETN8kzNzYTM0IicfJye&Qf35VfiEzRwEkI0IyQiwiIwEjL6ByUKBCZhVmcwNlI0IiTis7W0ICZyBlIsIyNyMzM5ADI5ADNwcTMwIjI0ICdyNkIsIibj9SbvNmL4N7bjRnch56ciojIz5GRiwiI8+Y9sWY9QmZ0Jyp96uL9v6L0wap9biY9qiq95q197Wr9g+89iojIh94Wiqi";</script>
@@ -97,8 +97,8 @@
 <script type="text/javascript" src="/public/web/tree_sheet/tree_sheet_controller.js"></script>
 <script type="text/javascript" src="/public/web/tree_sheet/tree_sheet_helper.js"></script>
 <!-- service -->
-<script type="text/javascript" src="/web/maintain/report/css/templates/js/bills.js"></script>
-<script type="text/javascript" src="/web/maintain/report/css/templates/js/tp_bills_setting.js"></script>
+<script type="text/javascript" src="/web/maintain/templates/js/bills.js"></script>
+<script type="text/javascript" src="/web/maintain/templates/js/tp_bills_setting.js"></script>
 <script type="text/javascript" src="/public/web/common_ajax.js"></script>
 <script>
     autoFlashHeight();

+ 1 - 1
web/maintain/report/css/templates/js/bills.js

@@ -2,7 +2,7 @@
  * Created by Mai on 2017/4/17.
  */
 $(document).ready(function () {
-    var tempType = 3;
+    var tempType = 1;
     var FormatUpdateData = function (data) {
         var updateData = {};
         updateData['user_id'] = userID;

web/maintain/report/css/templates/js/global.js → web/maintain/templates/js/global.js


web/maintain/report/css/templates/js/tp_bills_setting.js → web/maintain/templates/js/tp_bills_setting.js