zhangweicheng 7 years ago
parent
commit
9f10446a8c

+ 25 - 18
modules/glj/controllers/glj_controller.js

@@ -14,6 +14,7 @@ import UnitPriceFileModel from "../models/unit_price_file_model";
 let logger = require("../../../logs/log_helper").logger;
 let consts = require('../../main/models/project_consts');
 let glj_type_util = require('../../../public/cache/std_glj_type_util');
+let ration_glj_facade = require('../../ration_glj/facade/ration_glj_facade');
 let mongoose = require('mongoose');
 let ration = mongoose.model('ration');
 let projectModel = mongoose.model('projects');
@@ -244,23 +245,29 @@ class GLJController extends BaseController {
             let gljList = data.gljList, parentInfo = data.parentInfo,mixRatios = [];
             let projectGljModel = new GLJListModel();
             let mixRatioModel = new MixRatioModel();
-            for(let g of gljList){
-                let newProjectGLJ = await projectGljModel.addList(g,parentInfo.unit_price_file_id);
-                let mixRatio = {
-                    glj_id:newProjectGLJ.glj_id,
-                    consumption:0,
-                    unit_price_file_id:parentInfo.unit_price_file_id,
-                    connect_key:parentInfo.connect_key,
-                    type: newProjectGLJ.type,
-                    code: newProjectGLJ.code,
-                    specs:newProjectGLJ.specs,
-                    name:newProjectGLJ.name,
-                    unit:newProjectGLJ.unit,
-                    model:newProjectGLJ.model
-                };
-                newProjectGLJ.ratio_data = await mixRatioModel.add(mixRatio);
-                mixRatios.push(newProjectGLJ);
+            if(gljList.length > 0){
+                let [unitFileId,ext] = await ration_glj_facade.prepareExtData(gljList[0].project_id,request.session.sessionCompilation);
+                console.log(ext);
+                for(let g of gljList){
+                    let newProjectGLJ = await projectGljModel.addList(g,unitFileId,ext);
+                    let mixRatio = {
+                        glj_id:newProjectGLJ.glj_id,
+                        consumption:0,
+                        unit_price_file_id:unitFileId,
+                        connect_key:parentInfo.connect_key,
+                        type: newProjectGLJ.type,
+                        code: newProjectGLJ.code,
+                        specs:newProjectGLJ.specs,
+                        name:newProjectGLJ.name,
+                        unit:newProjectGLJ.unit,
+                        model:newProjectGLJ.model
+                    };
+                    newProjectGLJ.ratio_data = await mixRatioModel.add(mixRatio);
+                    mixRatios.push(newProjectGLJ);
+                }
+
             }
+
             result.data = mixRatios;
         }catch (err){
             logger.err(err);
@@ -494,7 +501,7 @@ class GLJController extends BaseController {
             if (!copyResult) {
                 throw '复制数据失败';
             }
-           await ProjectModel.updateUnitFileToProject(projectId,{id:addResult.id,name:addResult.name});
+            await ProjectModel.updateUnitFileToProject(projectId,{id:addResult.id,name:addResult.name});
             responseData.data = addResult;
         } catch (error) {
             responseData.err = 1;
@@ -765,7 +772,7 @@ class GLJController extends BaseController {
             //  修改项目工料机
             let projcetGLJ = await gljListModel.modifyGLJ(data.updateData,ration_data);
 
-           // let datas = await gljListModel.addList(data);
+            // let datas = await gljListModel.addList(data);
             result.data=projcetGLJ;
         }catch (err){
             logger.err(err);

+ 49 - 49
modules/main/controllers/bills_controller.js

@@ -98,11 +98,11 @@ module.exports = {
                 delete updateData[index];
             }
         }
-       /* // 更新项目属性
-        const propertyUpdateData = {
-            property: 'addRule',
-            data: settingData
-        };*/
+        /* // 更新项目属性
+         const propertyUpdateData = {
+         property: 'addRule',
+         data: settingData
+         };*/
         //const projectResult = await ProjectsData.updateProjectProperty(findSet.projectID, propertyUpdateData);
 
         const result = await billsData.updateBill(findSet, updateData);
@@ -183,7 +183,7 @@ module.exports = {
         try {
             let data = req.body.data;
             data = JSON.parse(data);
-            let pasteResult = await bill_facade.pasteBlock(data);
+            let pasteResult = await bill_facade.pasteBlock(data,req.session.sessionCompilation);
             result.data = pasteResult;
         }catch (err){
             logger.err(err);
@@ -266,49 +266,49 @@ module.exports = {
 };
 
 async function importSheet(position, excelBills, userID, projectID, stdData){
-        //导入位置的有固定行
-        let flag = getImportFlag(position);
-        if(!flag){
-            throw 'excel数据错误';
+    //导入位置的有固定行
+    let flag = getImportFlag(position);
+    if(!flag){
+        throw 'excel数据错误';
+    }
+    let fixedBill = await billsData.model.findOne({projectID: projectID, 'flags.flag': flag, deleteInfo: null});
+    let insertFixedBill = null;
+    //导入xx措施项目,若不存在此固定清单,则先插入相关固定清单
+    if(!fixedBill){
+        //分部分项工程(不可删除)应存在
+        if(flag === fixedFlag.SUB_ENGINERRING){
+            throw '项目不存在分部分项工程'
         }
-        let fixedBill = await billsData.model.findOne({projectID: projectID, 'flags.flag': flag, deleteInfo: null});
-        let insertFixedBill = null;
-        //导入xx措施项目,若不存在此固定清单,则先插入相关固定清单
-        if(!fixedBill){
-            //分部分项工程(不可删除)应存在
-            if(flag === fixedFlag.SUB_ENGINERRING){
-                throw '项目不存在分部分项工程'
-            }
-            //措施项目是否存在
-            let csxm = await billsData.model.findOne({projectID: projectID, 'flags.flag': fixedFlag.MEASURE, deleteInfo: null});
-            if(!csxm){
-                throw '项目不存在措施项目'
-            }
-            //插入清单固定行(施工技术措施项目、施工组织措施项目可删除)
-            insertFixedBill = {projectID: projectID, name: flag === fixedFlag.CONSTRUCTION_TECH ? '施工技术措施项目' : '施工组织措施项目', code: '1',
-                ID: uuidV1(), NextSiblingID: -1, ParentID: csxm.ID, flags: [{fieldName: 'fixed', flag: flag}], type: billType.BILL};
-            //更新前节点
-            let preDatas = await billsData.model.find({projectID: projectID, ParentID: csxm.ID, deleteInfo: null});
-            for(let preData of preDatas){
-                if(preData.NextSiblingID == -1){
-                    await billsData.model.update({ID: preData.ID}, {$set: {NextSiblingID: insertFixedBill.ID}});
-                    break;
-                }
-            }
-            await billsData.model.create(insertFixedBill);
-            fixedBill = insertFixedBill;
+        //措施项目是否存在
+        let csxm = await billsData.model.findOne({projectID: projectID, 'flags.flag': fixedFlag.MEASURE, deleteInfo: null});
+        if(!csxm){
+            throw '项目不存在措施项目'
         }
-        //将excel清单数据转换成完整清单数据(设置ParentID、匹配标准清单库)
-        parseToCompleteBills(excelBills, fixedBill, stdData);
-        //删除相关数据
-        let deleteDatas = await billsData.deepDeleteBill([fixedBill], userID);
-        //新增清单数据
-        await billsData.importBills(excelBills);
-        //返回数据以更新前端
-        if(insertFixedBill){
-            excelBills.push(insertFixedBill);
+        //插入清单固定行(施工技术措施项目、施工组织措施项目可删除)
+        insertFixedBill = {projectID: projectID, name: flag === fixedFlag.CONSTRUCTION_TECH ? '施工技术措施项目' : '施工组织措施项目', code: '1',
+            ID: uuidV1(), NextSiblingID: -1, ParentID: csxm.ID, flags: [{fieldName: 'fixed', flag: flag}], type: billType.BILL};
+        //更新前节点
+        let preDatas = await billsData.model.find({projectID: projectID, ParentID: csxm.ID, deleteInfo: null});
+        for(let preData of preDatas){
+            if(preData.NextSiblingID == -1){
+                await billsData.model.update({ID: preData.ID}, {$set: {NextSiblingID: insertFixedBill.ID}});
+                break;
+            }
         }
-        return {fixedBill: fixedBill, insert: {bill: excelBills, ration: []}, remove: {bill: deleteDatas.bill, ration: deleteDatas.ration}};
+        await billsData.model.create(insertFixedBill);
+        fixedBill = insertFixedBill;
+    }
+    //将excel清单数据转换成完整清单数据(设置ParentID、匹配标准清单库)
+    parseToCompleteBills(excelBills, fixedBill, stdData);
+    //删除相关数据
+    let deleteDatas = await billsData.deepDeleteBill([fixedBill], userID);
+    //新增清单数据
+    await billsData.importBills(excelBills);
+    //返回数据以更新前端
+    if(insertFixedBill){
+        excelBills.push(insertFixedBill);
+    }
+    return {fixedBill: fixedBill, insert: {bill: excelBills, ration: []}, remove: {bill: deleteDatas.bill, ration: deleteDatas.ration}};
 }
 
 
@@ -466,9 +466,9 @@ function  generateUpdateTasks(data,projectID,user_id) {
                     }
                 }
             }
-           /* task.updateOne.update={
-                deleteInfo:deleteInfo
-            };*/
+            /* task.updateOne.update={
+             deleteInfo:deleteInfo
+             };*/
         }else {
             task.updateOne.update=updateData[key];
         }

+ 25 - 22
modules/main/facade/bill_facade.js

@@ -70,11 +70,11 @@ module.exports={
         if(tasks.length > 0){
             result =await bill_Model.bulkWrite(tasks);
         }
-       return result;
+        return result;
     },
-    pasteBlock : async function(data){
+    pasteBlock : async function(data,compilation){
         let pasteTasks = [
-            pasteRationsAndRationGLJ(data.rations,data.ration_gljs),//这一步会花费比较多时间
+            pasteRationsAndRationGLJ(data.rations,data.ration_gljs,compilation),//这一步会花费比较多时间
             pasteOtherData(data)
         ];
         let [rationsAndRationGLJ,resultMap] = await Promise.all(pasteTasks);
@@ -148,19 +148,22 @@ async function pasteOtherData(data) {
     return {bills:bills,quantity_details:quantity_details,ration_coes:ration_coes,ration_installations:ration_installations,ration_templates:ration_templates,updateData:updateData}
 }
 
-async function pasteRationsAndRationGLJ (rations,ration_gljs) {
+async function pasteRationsAndRationGLJ (rations,ration_gljs,compilation) {
     let projectGljModel = new GLJListModel();
-    let gljMap = {};
-    let new_ration_gljs=[];
+    let gljMap = {}, new_ration_gljs=[],projectID=null;
+    if(rations.length > 0) projectID = rations[0].projectID;
+    if(projectID==null && ration_gljs.length > 0) projectID = ration_gljs[0].projectID;
+    if(projectID == null) return {rations:rations,new_ration_gljs:new_ration_gljs};
+    let [unitFileId,ext] = await ration_glj_facade.prepareExtData(projectID,compilation);
     //先根据定额类型的工料机,插入到项目工料机中
     for(let r of rations){
         if(r.type == rationType.gljRation){
-            await getProjectGLJ(r,rationKeyArray,gljMap);
+            await getProjectGLJ(r,rationKeyArray,gljMap,unitFileId,ext);
         }
     }
 
     for(let rg of ration_gljs){
-        await getProjectGLJ(rg,gljKeyArray,gljMap);
+        await getProjectGLJ(rg,gljKeyArray,gljMap,unitFileId,ext);
         let temRecord = ration_glj_facade.createNewRecord(rg);
         rg.rcode?temRecord.rcode = rg.rcode:'';
         rg.hasOwnProperty("customQuantity")?temRecord.customQuantity = rg.customQuantity:'';
@@ -170,16 +173,16 @@ async function pasteRationsAndRationGLJ (rations,ration_gljs) {
     rations.length>0?await insertMany(rations,ration_Model):'';
     new_ration_gljs.length>0?await insertMany(new_ration_gljs,ration_glj_Model):'';
 
-    return{rations:rations,new_ration_gljs:new_ration_gljs};
+    return {rations:rations,new_ration_gljs:new_ration_gljs};
 
-    async function getProjectGLJ (glj,keyArray,gljMap) {
+    async function getProjectGLJ (glj,keyArray,gljMap,unitFileId,ext) {
         let keyIndex = projectGljModel.getIndex(glj,keyArray);
         let pgljResult = null;
         if(gljMap[keyIndex]){
             pgljResult = gljMap[keyIndex]
         }else {
             let p_glj = ration_glj_facade.getGLJSearchInfo(glj);
-            pgljResult = await projectGljModel.addList(p_glj);//逐条添加到项目工料机
+            pgljResult = await projectGljModel.addList(p_glj,unitFileId,ext);//逐条添加到项目工料机
             gljMap[keyIndex] = pgljResult;
         }
         setResult(glj,pgljResult);
@@ -217,17 +220,17 @@ function generateBillTasks(data) {
                     }
                 }
             };
-          /*  let task={
-                updateOne:{
-                    filter:{
-                        ID:d_ID,
-                        projectID:projectID
-                    },
-                    update :{
-                        deleteInfo:deleteInfo
-                    }
-                }
-            };*/
+            /*  let task={
+             updateOne:{
+             filter:{
+             ID:d_ID,
+             projectID:projectID
+             },
+             update :{
+             deleteInfo:deleteInfo
+             }
+             }
+             };*/
             tasks.push(task);
         }
     }

+ 31 - 30
modules/ration_glj/facade/ration_glj_facade.js

@@ -51,7 +51,8 @@ module.exports = {
     createNewRecord:createNewRecord,
     getGLJSearchInfo:getGLJSearchInfo,
     updateRationGLJFromDoc:updateRationGLJFromDoc,
-    getGLJLibByEngineerID:getGLJLibByEngineerID
+    getGLJLibByEngineerID:getGLJLibByEngineerID,
+    prepareExtData:prepareExtData
 }
 
 let operationMap = {
@@ -88,11 +89,11 @@ async function getQuantityByProjectGLJ(condition) {
         'deleteInfo': null
     };
 
-   /* $and: [
-        {'projectID': condition.projectID},
-        {'ID': {$in: rationList}},
-        {'deleteInfo': null}
-    ]*/
+    /* $and: [
+     {'projectID': condition.projectID},
+     {'ID': {$in: rationList}},
+     {'deleteInfo': null}
+     ]*/
     let rations = await ration.find(rationQuery, ['ID', 'quantity']);
     let rationsTime = +new Date();
     console.log("取定额消耗量时间-----"+(rationsTime - getQuantity));
@@ -325,13 +326,13 @@ function delete_ration_glj(user_id, datas) {
         deleteByID(datas, callback);
         //callback(new Error("删除子数据失败!"),null)
         //这个方法已经不用,先注释,稳定后再删除
-       /* if (datas.deleteType == "RATION") {
-            deleteByRation(datas, callback);
-        } else if (datas.deleteType == "BILL") {
-            deleteByBill(user_id, datas, callback);
-        } else {
-            deleteByID(datas, callback);
-        }*/
+        /* if (datas.deleteType == "RATION") {
+         deleteByRation(datas, callback);
+         } else if (datas.deleteType == "BILL") {
+         deleteByBill(user_id, datas, callback);
+         } else {
+         deleteByID(datas, callback);
+         }*/
     }
 }
 
@@ -860,23 +861,23 @@ async function changAdjustState(data, rationList) {
 }
 
 async function getGLJDataByCodes(data,compilation) {
-  let  gljLibId = await getGLJLibByEngineerID(data.engineerID);
-  let gljDatas = [];
-  if(gljLibId){
-     let stdList =   await  std_glj_lib_gljList_model.find({'repositoryId':gljLibId,code:{'$in':data.codes}});
-     if(stdList.length > 0){
-         let property = await projectDao.getProjectProperty(data.projectID);
-         let ext = projectDao.getExtendData(property,compilation);//多单价处理
-         for(let s of stdList){
-             let tem = JSON.parse(JSON.stringify(s));
-             if(ext && ext.priceField && tem && tem.priceProperty){
-                 tem.basePrice =  tem.priceProperty[ext.priceField];
-             }
-             gljDatas.push(tem);
-
-         }
-     }
-  }
+    let  gljLibId = await getGLJLibByEngineerID(data.engineerID);
+    let gljDatas = [];
+    if(gljLibId){
+        let stdList =   await  std_glj_lib_gljList_model.find({'repositoryId':gljLibId,code:{'$in':data.codes}});
+        if(stdList.length > 0){
+            let property = await projectDao.getProjectProperty(data.projectID);
+            let ext = projectDao.getExtendData(property,compilation);//多单价处理
+            for(let s of stdList){
+                let tem = JSON.parse(JSON.stringify(s));
+                if(ext && ext.priceField && tem && tem.priceProperty){
+                    tem.basePrice =  tem.priceProperty[ext.priceField];
+                }
+                gljDatas.push(tem);
+
+            }
+        }
+    }
     return gljDatas
 }
 

+ 34 - 28
public/web/gljUtil.js

@@ -96,17 +96,17 @@ let gljUtil = {
     },
     getRationGLJTenderQuantity:function (ration_glj,ration,q_decimal,scMathUtil) {
         let coeMap = {
-          1:'labour',  //人工
-          2:'material',//材料
-          3:'machine',//机械
-          4:'main', //主材
-          5:'equipment'//设备
+            1:'labour',  //人工
+            2:'material',//材料
+            3:'machine',//机械
+            4:'main', //主材
+            5:'equipment'//设备
         };
         let typeString = ration_glj.type +"";
         let coeField = "";
         for(let key in coeMap){
             if(typeString.indexOf(key)!= -1){
-              coeField = coeMap[key];
+                coeField = coeMap[key];
             }
         }
         let coe = ration.quantityCoe&&this.isNotEmpty(ration.quantityCoe[coeField])?ration.quantityCoe[coeField]:1;
@@ -124,9 +124,9 @@ let gljUtil = {
         return this.isDef(str) && str!="";
     },
     getSubdivisionAndTechBillsLeavesID:function (billsDatas) {//分别取分部分项和技术措施项目的所有叶子清单ID
-         if(typeof (projectObj) !== 'undefined'){//存在,说明在前端调用
-             return [projectObj.project.Bills.getSubdivisionProjectLeavesID(),projectObj.project.Bills.getTechLeavesID()];
-         }
+        if(typeof (projectObj) !== 'undefined'){//存在,说明在前端调用
+            return [projectObj.project.Bills.getSubdivisionProjectLeavesID(),projectObj.project.Bills.getTechLeavesID()];
+        }
         let parentMap ={};
         let subdivisionBillID  = null,techBillID = null,sIDs = [],tIDS = [];
         for(let b of billsDatas){
@@ -213,22 +213,22 @@ let gljUtil = {
 
         if (this.notEditType.indexOf(glj.unit_price.type)!=-1&&glj.ratio_data.length>0) {//对于混凝土、配合比、砂浆、机械台班等有组成物的材料,价格需根据组成物计算得出。
             //2018-09-07 需求修改,定额价不按组成物的量和价实时计算出来,直接取单价文件中的定额价
-       /*     let p =0;
-            for(let ratio of glj.ratio_data){
-                let tem =  _.find( projectGLJDatas.gljList,{
-                    'code': ratio.code,
-                    'name': ratio.name,
-                    'specs':ratio.specs,
-                    'type': ratio.type,
-                    'unit': ratio.unit
-                });
-                if(tem){
-                    let priceData=this.getGLJPrice(tem,projectGLJDatas,calcOptions,labourCoeDatas,decimalObj,true,_,scMathUtil);
-                    let temP = scMathUtil.roundForObj(priceData.basePrice*scMathUtil.roundForObj(ratio.consumption,quantity_decimal),process_decimal);
-                    p = scMathUtil.roundForObj(temP + p,process_decimal);
-                }
-            }
-            return scMathUtil.roundForObj(p,price_hasM_decimal);*/
+            /*     let p =0;
+             for(let ratio of glj.ratio_data){
+             let tem =  _.find( projectGLJDatas.gljList,{
+             'code': ratio.code,
+             'name': ratio.name,
+             'specs':ratio.specs,
+             'type': ratio.type,
+             'unit': ratio.unit
+             });
+             if(tem){
+             let priceData=this.getGLJPrice(tem,projectGLJDatas,calcOptions,labourCoeDatas,decimalObj,true,_,scMathUtil);
+             let temP = scMathUtil.roundForObj(priceData.basePrice*scMathUtil.roundForObj(ratio.consumption,quantity_decimal),process_decimal);
+             p = scMathUtil.roundForObj(temP + p,process_decimal);
+             }
+             }
+             return scMathUtil.roundForObj(p,price_hasM_decimal);*/
 
             return scMathUtil.roundForObj(glj.unit_price.base_price,price_hasM_decimal);
         }else {
@@ -298,9 +298,15 @@ let gljUtil = {
     getGljTypeSeq:function () {
         let gljType = this.gljType;
         return   [gljType.LABOUR,gljType.MAIN_MATERIAL,gljType.CONCRETE,gljType.MORTAR,gljType.MIX_RATIO,gljType.COMMERCIAL_CONCRETE,
-                gljType.COMMERCIAL_MORTAR,gljType.GENERAL_MATERIAL,gljType.OTHER_MATERIAL,gljType.GENERAL_MACHINE,gljType.INSTRUMENT,gljType.OTHER_MACHINE_USED,
-                gljType.MACHINE_COMPOSITION,gljType.MACHINE_LABOUR,gljType.FUEL_POWER_FEE,gljType.DEPRECIATION_FEE,gljType.INSPECTION_FEE,gljType.MAINTENANCE,
-                gljType.DISMANTLING_FREIGHT_FEE,gljType.VERIFICATION_FEE,gljType.OTHER_FEE,gljType.EQUIPMENT,gljType.MANAGEMENT_FEE,gljType.PROFIT,gljType.GENERAL_RISK_FEE]
+            gljType.COMMERCIAL_MORTAR,gljType.GENERAL_MATERIAL,gljType.OTHER_MATERIAL,gljType.GENERAL_MACHINE,gljType.INSTRUMENT,gljType.OTHER_MACHINE_USED,
+            gljType.MACHINE_COMPOSITION,gljType.MACHINE_LABOUR,gljType.FUEL_POWER_FEE,gljType.DEPRECIATION_FEE,gljType.INSPECTION_FEE,gljType.MAINTENANCE,
+            gljType.DISMANTLING_FREIGHT_FEE,gljType.VERIFICATION_FEE,gljType.OTHER_FEE,gljType.EQUIPMENT,gljType.MANAGEMENT_FEE,gljType.PROFIT,gljType.GENERAL_RISK_FEE]
+    },
+    sortRationGLJ:function (list) {
+        list = _.sortByAll(list, [function (item) {
+            return _.indexOf(gljTypeSeq,item.type)
+        }, "code"])
+        return list;
     },
     fixedFlag : {
         // 分部分项工程

+ 14 - 14
web/building_saas/main/js/models/ration_glj.js

@@ -62,7 +62,7 @@ let ration_glj = {
         };
 
         ration_glj.prototype.getGLJListByRationID = function (rationID) {
-           return  _.filter(this.datas, {'rationID': rationID})
+            return  _.filter(this.datas, {'rationID': rationID})
         };
 
 
@@ -149,7 +149,7 @@ let ration_glj = {
             projectObj.project.projectGLJ.loadData();
         };
         ration_glj.prototype.getDataByID = function (ID) {
-           return _.find(this.datas,{'ID':ID});
+            return _.find(this.datas,{'ID':ID});
         };
 
         ration_glj.prototype.refreshAfterSave = function (data) {
@@ -195,12 +195,12 @@ let ration_glj = {
                     node.source = data;
                     node.data = data;
                 }
-               return node;
+                return node;
             }
         };
 
         ration_glj.prototype.addToMainTree = function (datas) {
-            datas = sortRationGLJ(datas);
+            datas = gljUtil.sortRationGLJ(datas);
             for (let data of datas) {
                 if (this.needShowToTree(data)) {
                     gljOprObj.setGLJPrice(data);
@@ -516,7 +516,7 @@ let ration_glj = {
             if(gljUtil.isDef(name)){
                 node.data.name = name;
             }
-           return node
+            return node
         };
         ration_glj.prototype.getGLJData = function (cb) {
             let property = projectInfoObj.projectInfo.property;
@@ -524,13 +524,13 @@ let ration_glj = {
             CommonAjax.get('/rationGlj/getGLJData/'+engineerID, function (data) {
                 //编办中有多单价设置
                 if(data.datas.priceProperties && data.datas.priceProperties.length > 0){
-                     let tem = _.find(data.datas.priceProperties,{region:property.region,taxModel:parseInt(property.taxType)});
-                     if(tem){
-                         let dataCode = tem.price.dataCode;
-                         for(let glj of data.datas.stdGLJ){
-                             if(glj.priceProperty && gljUtil.isDef(glj.priceProperty[dataCode])) glj.basePrice = glj.priceProperty[dataCode];
-                         }
-                     }
+                    let tem = _.find(data.datas.priceProperties,{region:property.region,taxModel:parseInt(property.taxType)});
+                    if(tem){
+                        let dataCode = tem.price.dataCode;
+                        for(let glj of data.datas.stdGLJ){
+                            if(glj.priceProperty && gljUtil.isDef(glj.priceProperty[dataCode])) glj.basePrice = glj.priceProperty[dataCode];
+                        }
+                    }
                 };
                 cb(data);
             })
@@ -874,7 +874,7 @@ let ration_glj = {
             let gljList = _.filter(this.datas, function (n) {
                 return n.rationID == rationID && (n.type == gljType.MAIN_MATERIAL || n.type == gljType.EQUIPMENT)
             });
-            gljList = sortRationGLJ(gljList);
+            gljList = gljUtil.sortRationGLJ(gljList);
             return gljOprObj.combineWithProjectGlj(gljList);
         };
         ration_glj.prototype.transferToNodeData = function (data) {
@@ -950,7 +950,7 @@ let ration_glj = {
             return false
         };
         ration_glj.prototype.findGLJNodeByID = function (ID) {
-           return projectObj.project.mainTree.findNode(ID);
+            return projectObj.project.mainTree.findNode(ID);
         };
         ration_glj.prototype.findRationNodeByID = function (ID) {
             return projectObj.project.mainTree.findNode(ID);

+ 57 - 64
web/building_saas/main/js/views/glj_view.js

@@ -376,24 +376,24 @@ var gljOprObj = {
     },
     onCellDoubleClick:function (sender, args) {
         // 含组成物的材料市场价改为只读,改为双击无反应不提示
-      /*  var me = gljOprObj;
-        var header = me.setting.header;
-        if (args.row >= me.sheetData.length) {
-            return;
-        }
-        if (header[args.col] && header[args.col].dataCode == 'marketPrice') {
-            if(me.hasComposition(me.sheetData[args.row])){
-                alert("当前工料机的市场价由组成物计算得出,不可直接修改。");
-            }
-        }
-        if (header[args.col] && header[args.col].dataCode == 'basePrice') {
-            var isAdd = me.sheetData[args.row].isAdd;
-            if(isAdd==1){//是新增但没有组成物时允许修改定额价
-                if(me.hasComposition(me.sheetData[args.row])){//如果有组成物,不可修改
-                    alert("当前工料机的定额价由组成物计算得出,不可直接修改。");
-                }
-            }
-        }*/
+        /*  var me = gljOprObj;
+         var header = me.setting.header;
+         if (args.row >= me.sheetData.length) {
+         return;
+         }
+         if (header[args.col] && header[args.col].dataCode == 'marketPrice') {
+         if(me.hasComposition(me.sheetData[args.row])){
+         alert("当前工料机的市场价由组成物计算得出,不可直接修改。");
+         }
+         }
+         if (header[args.col] && header[args.col].dataCode == 'basePrice') {
+         var isAdd = me.sheetData[args.row].isAdd;
+         if(isAdd==1){//是新增但没有组成物时允许修改定额价
+         if(me.hasComposition(me.sheetData[args.row])){//如果有组成物,不可修改
+         alert("当前工料机的定额价由组成物计算得出,不可直接修改。");
+         }
+         }
+         }*/
     },
     onClipboardChanged: function (sender, info) {
         let cDatas = sheetCommonObj.getTableData(info.sheet, null);
@@ -407,7 +407,7 @@ var gljOprObj = {
         if (_.includes(me.setting.view.lockColumns, args.col))  return false;//如果是锁定的列,不能编辑
         if(recode != undefined){
             if(recode.isMixRatio){//对于组成物列
-               return dataCode == 'marketPrice'//允许修改组成物市单价,其它的不可以
+                return dataCode == 'marketPrice'//允许修改组成物市单价,其它的不可以
             }else {
                 if (dataCode && dataCode == 'marketPrice') {
                     return !me.marketPriceReadOnly({data:me.sheetData[args.row]});
@@ -514,7 +514,7 @@ var gljOprObj = {
                     if($('#linkGLJ').hasClass('active')){
                         this.showRationGLJData(node);
                         subObj.showGljSubTabData();
-                       // MaterialController.showReplaceDiv(node);
+                        // MaterialController.showReplaceDiv(node);
                     }
                     if($('#linkAZZJF').hasClass('active')) installationFeeObj.showRationInstallationData(node);
                     if($('#linkMBZM').hasClass('active')) mbzm_obj.showMBZMData(node);
@@ -552,13 +552,13 @@ var gljOprObj = {
             if(node.sourceType==ModuleNames.ration){
                 this.calcMixRationTotalQuantity(gljList,node.data.quantity);
             }else {
-               let totalQuantity = this.getTotalQuantity(node.data);
-               this.calcMixRationTotalQuantity(gljList,totalQuantity)
+                let totalQuantity = this.getTotalQuantity(node.data);
+                this.calcMixRationTotalQuantity(gljList,totalQuantity)
             }
         }
         this.sheetData = gljList;
         this.sheet.setRowCount(0);
-        this.sheetData = sortRationGLJ(this.sheetData);
+        this.sheetData = gljUtil.sortRationGLJ(this.sheetData);
         this.sheet.getRange(-1, 0, -1, 1).cellType(this.getTreeNodeCellType([]));
         sheetCommonObj.showData(this.sheet, this.setting, this.sheetData);
         //初始选择
@@ -587,7 +587,7 @@ var gljOprObj = {
         let selected = this.sheet.getSelections();
         this.combineWithProjectGlj(this.sheetData);
         this.sheet.setRowCount(0);
-        this.sheetData = sortRationGLJ(this.sheetData);
+        this.sheetData = gljUtil.sortRationGLJ(this.sheetData);
         this.sumQuantity();//计算总消耗量
         this.addMixRatioToShow();//显示组成物信息
         this.initRationTree(init,this.getUnitPriceCodeMap());
@@ -622,7 +622,7 @@ var gljOprObj = {
                     if(codeMap[preCode]) {
                         codeMap[preCode].push({text:displayText,value:connectKey});
                     }else {
-                       codeMap[preCode]=[{text:displayText ,value:connectKey}];
+                        codeMap[preCode]=[{text:displayText ,value:connectKey}];
                     }
                 }
             }
@@ -648,9 +648,9 @@ var gljOprObj = {
     },
     getCodeOptions:function (recode,codeMap) {
         let options = [];
-          if(recode.isMixRatio ===true){
-              return null;
-          }
+        if(recode.isMixRatio ===true){
+            return null;
+        }
         let code = recode.code;
         if(code) {
             let preCode = code.split("-")[0];
@@ -827,7 +827,7 @@ var gljOprObj = {
             }
             temRationGLJs.push(tem);
         }
-        temRationGLJs = _.sortBy(temRationGLJs, 'code');
+        temRationGLJs = gljUtil.sortRationGLJ(temRationGLJs);
         return temRationGLJs;
     },
     showQuantityDetailData: function (node) {
@@ -931,7 +931,7 @@ var gljOprObj = {
                 return true;
             }
         }
-       return false;
+        return false;
     },
     updateRationTypeGLJ: function (value, node, fieldName,editingText) {
         let newval;
@@ -1184,14 +1184,14 @@ var gljOprObj = {
                     let node = project.ration_glj.updateGLJNodeAfterReplace(data);
                     if(node) nodes.push(node);
                     /*if (project.ration_glj.needShowToTree(data)) {//当替换的是主材或设备时,刷新对应的树节点
-                        var node = project.ration_glj.findGLJNodeByID(data.ID);
-                        if (node) {
-                            project.ration_glj.transferToNodeData(data);
-                            node.source = data;
-                            node.data = data;
-                        }
-                        node ? nodes.push(node) : "";
-                    }*/
+                     var node = project.ration_glj.findGLJNodeByID(data.ID);
+                     if (node) {
+                     project.ration_glj.transferToNodeData(data);
+                     node.source = data;
+                     node.data = data;
+                     }
+                     node ? nodes.push(node) : "";
+                     }*/
                     //project.ration_glj.addToMainTree(data);
                     selected.data.adjustState = result.adjustState;
                     selected.data.name = result.name;
@@ -1217,7 +1217,7 @@ var gljOprObj = {
             //let n_index = me.getIndex(data.query, gljKeyArray);
             let nodes = [];
             _.forEach(project.ration_glj.datas, function (t) {
-           //     let t_index = me.getIndex(t, gljKeyArray);
+                //     let t_index = me.getIndex(t, gljKeyArray);
                 if (updateMap[t.ID]) {
                     me.updateProperty(t, data.doc);
                     me.updateProperty(t, updateMap[t.ID]);
@@ -1456,12 +1456,12 @@ $(function () {
             gljOprObj.GLJSelection = [];
             projectGljObject.filterLibGLJForMixRatio();
             /*selections = projectGljObject.mixRatioData;  添加组成物的时候先不选中
-            gljOprObj.GLJSelection = [];
-            for(let s of selections){
-                let s_key = gljOprObj.getIndex(s, gljKeyArray);
-                selectMap[s_key] = true;
-                gljOprObj.GLJSelection.push(s_key);
-            }*/
+             gljOprObj.GLJSelection = [];
+             for(let s of selections){
+             let s_key = gljOprObj.getIndex(s, gljKeyArray);
+             selectMap[s_key] = true;
+             gljOprObj.GLJSelection.push(s_key);
+             }*/
         }
         for(let item of gljOprObj.gljLibSheetData){
             let item_key = gljOprObj.getIndex(item, gljLibKeyArray);
@@ -1502,21 +1502,21 @@ $(function () {
             gljOprObj.initSelection({row: 0});
             //gljOprObj.gljLibSheetData = gljOprObj[val];
             /*gljOprObj.filterLibGLJSheetData();
-            gljOprObj.showLibGLJSheetData();*/
+             gljOprObj.showLibGLJSheetData();*/
         }
     });
-/*    //工料机搜索
-    $('#gljSearchKeyword').change(function () {
-        gljOprObj.filterLibGLJSheetData();
-        gljOprObj.showLibGLJSheetData();
-    });
+    /*    //工料机搜索
+     $('#gljSearchKeyword').change(function () {
+     gljOprObj.filterLibGLJSheetData();
+     gljOprObj.showLibGLJSheetData();
+     });
      $('#gljSearchKeyword').bind('keypress', function (e) {
-        if(e.keyCode === 13){
-            alert('2');
-            $(this).blur();
-            return false;
-        }
-    });*/
+     if(e.keyCode === 13){
+     alert('2');
+     $(this).blur();
+     return false;
+     }
+     });*/
     $('#gljSearchKeyword').bind('keyup', function (e) {
         gljOprObj.filterLibGLJSheetData();
         gljOprObj.showLibGLJSheetData();
@@ -1644,13 +1644,6 @@ function getDecimal(fieldID, node) {
 }
 
 
-function sortRationGLJ(list) {
-    list = _.sortByAll(list, [function (item) {
-        return _.indexOf(gljTypeSeq,item.type)
-    }, "code"])
-    return list;
-}
-
 function compareRationGLJ(a, b) {
     if ((a.type + "") < (b.type + "")) {
         return true

+ 12 - 12
web/building_saas/main/js/views/main_tree_col.js

@@ -24,11 +24,11 @@ let MainTreeCol = {
             }
         },
         quantity:function (node) {
-          if(node.sourceType === projectObj.project.ration_glj.getSourceType()){
-              return gljOprObj.getTotalQuantity(node.data);
-          }else {
-              return calcTools.uiNodeQty(node)?calcTools.uiNodeQty(node):null;
-          }
+            if(node.sourceType === projectObj.project.ration_glj.getSourceType()){
+                return gljOprObj.getTotalQuantity(node.data);
+            }else {
+                return calcTools.uiNodeQty(node)?calcTools.uiNodeQty(node):null;
+            }
         },
         // CSL, 2017-11-28
         calcProgramName: function (node) {
@@ -251,7 +251,7 @@ let MainTreeCol = {
             if(MainTreeCol.readOnly.bills(node)&&(node.data.type==billType.DXFY||node.data.type==billType.FB)){//在大项费用、分部行,计量单位只读。
                 return true;
             }else {
-               return calcTools.isRationItem(node);
+                return calcTools.isRationItem(node);
             }
         },
         forContentCharacter: function (node) {
@@ -270,14 +270,14 @@ let MainTreeCol = {
         unit: function (node,setting) {
             let tips = "";
             //在这里做要不要显示的判断
-             if(node.sourceType == ModuleNames.bills &&projectObj.ifItemCharHiden(setting)){//清单、并且项目特征列隐藏的时候悬浮提示
+            if(node.sourceType == ModuleNames.bills &&projectObj.ifItemCharHiden(setting)){//清单、并且项目特征列隐藏的时候悬浮提示
                 tips = node.data.itemCharacterText?node.data.itemCharacterText:'';
-             }
+            }
             if(node.sourceType == ModuleNames.ration && node.data.type == rationType.ration){//定额类型时,显示人材机,工作内容等
                 //这里的人材机需要进行过滤,在初始化时组装会影响性能,应实时显示
                 tips = MainTreeCol.getRationUnitTips
             }
-             let dynamicCombo = sheetCommonObj.getTipsCombo(true,tips,setting,node);//sheetCommonObj.getDynamicCombo(true);
+            let dynamicCombo = sheetCommonObj.getTipsCombo(true,tips,setting,node);//sheetCommonObj.getDynamicCombo(true);
             dynamicCombo.itemHeight(10).items(['m', 'm2', 'm3', 'km', 't', 'kg', '台班', '工日', '昼夜', '元', '项', '处', '个', '件',
                 '根', '组', '系统', '台', '套', '株', '丛', '缸', '支', '只', '块', '座', '对', '份', '樘', '攒', '榀']).editable(true);
             return dynamicCombo;
@@ -291,7 +291,7 @@ let MainTreeCol = {
         },
         quantity:function (node) {
             if(!MainTreeCol.readOnly.forQuantity(node)){
-              return  quantityEditObj.getQuantityEditCellType();
+                return  quantityEditObj.getQuantityEditCellType();
             }
         },
         calcBase: function () {
@@ -442,7 +442,7 @@ let MainTreeCol = {
         let tips="";
         let ration_glj = projectObj.project.ration_glj;
         let gljList = gljOprObj.filterGljByRation(node.data, ration_glj.datas);
-        gljList = sortRationGLJ(gljList);
+        gljList = gljUtil.sortRationGLJ(gljList);
         for(let glj of gljList){
             tips += `${glj.code} ${glj.name}${glj.specs ? '&nbsp;&nbsp;&nbsp;' + glj.specs : ''}&nbsp;&nbsp&nbsp;${glj.unit}&nbsp;&nbsp;&nbsp;${glj.quantity}<br>`;
         }
@@ -633,7 +633,7 @@ $('#poj-set').on('shown.bs.modal', function (e) {
                 sheet.setValue(row, 0, orgData);
             }
         });
-    }  
+    }
 });
 
 $('#poj-set').on('hidden.bs.modal', function (e) {

+ 24 - 23
web/building_saas/main/js/views/project_glj_view.js

@@ -194,11 +194,12 @@ projectGljObject={
             if(gljId !== projectObj.project.projectGLJ.getRatioId){//两个id不一致说明不是最新的请求,不用往下执行。
                 return;
             }
-            let rationList =[];
+            let ratioList =[];
             for(let glj of data){
-                rationList.push(me.getMixRatioSheetData(glj)) ;
+                ratioList.push(me.getMixRatioSheetData(glj)) ;
             }
-            me.mixRatioData = rationList;
+            ratioList = gljUtil.sortRationGLJ(ratioList);
+            me.mixRatioData = ratioList;
             me.mixRatioSheet.setRowCount(0);
             sheetCommonObj.showData(me.mixRatioSheet, me.mixRatioSetting,me.mixRatioData);
             me.mixRatioSheet.setRowCount(me.mixRatioData.length);
@@ -287,7 +288,7 @@ projectGljObject={
         let newSel = args.newSelections[0];
         let oldSel = args.oldSelections?args.oldSelections[0]:{};
         if(newSel.row != oldSel.row){
-           me.projectGljRowChang();
+            me.projectGljRowChang();
         }
         me.projectGljSheet.repaint();
     },
@@ -845,7 +846,7 @@ projectGljObject={
         parentMarketPrice = parentMarketPrice.toDecimal(getDecimal("glj.unitPrice"));
         parentBasePrice = parentBasePrice.toDecimal(getDecimal("glj.unitPrice"));
         return [parentMarketPrice, parentBasePrice];
-        
+
     },
     onProjectGLJValueChange:function (e,info) {//me.projectGljSetting
         let projectGLJ = projectObj.project.projectGLJ;
@@ -948,22 +949,22 @@ projectGljObject={
     },
     checkData : function(col,setting, value) {
         return sheetCommonObj.checkData(col,setting, value);
-     /*   let result = true;
-        let validator = setting.header[col].validator !== undefined ? setting.header[col].validator : null;
-        if (validator === null) {
-            return result;
-        }
-        switch (validator) {
-            case 'number':
-                let regular = /^\d+(\.\d+)?$/;
-                result = regular.test(value);
-                break;
-            case 'boolean':
-                let booleanValue = [true, false];
-                result = booleanValue.indexOf(value) >= 0;
-                break;
-        }
-        return result;*/
+        /*   let result = true;
+         let validator = setting.header[col].validator !== undefined ? setting.header[col].validator : null;
+         if (validator === null) {
+         return result;
+         }
+         switch (validator) {
+         case 'number':
+         let regular = /^\d+(\.\d+)?$/;
+         result = regular.test(value);
+         break;
+         case 'boolean':
+         let booleanValue = [true, false];
+         result = booleanValue.indexOf(value) >= 0;
+         break;
+         }
+         return result;*/
     },
     getProjectGLJSelected:function () {
         let me = projectGljObject;
@@ -1301,7 +1302,7 @@ $(function () {
                 //$('#renameUnitFileConfirm').attr("disabled","disabled");
             }else {
                 $("#renameError_unitFile").hide();
-               // $('#renameUnitFileConfirm').removeAttr("disabled");
+                // $('#renameUnitFileConfirm').removeAttr("disabled");
             }
         });
 
@@ -1317,7 +1318,7 @@ $(function () {
             }else {
                 $("#renameError_unitFile").hide();
                 $('#rename-unitFile').modal('hide');
-               // $('#renameUnitFileConfirm').removeAttr("disabled");
+                // $('#renameUnitFileConfirm').removeAttr("disabled");
                 let data = {project_id: scUrlUtil.GetQueryString('project'), change_id: changeUnitPriceId, type: 1,newName:newName};
                 projectObj.project.projectGLJ.changeFile(data,function () {
                     projectGljObject.changeFileCallback();