zhangweicheng 7 yıl önce
ebeveyn
işleme
1055c922c3

+ 9 - 4
modules/glj/controllers/glj_controller.js

@@ -14,6 +14,8 @@ 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 mongoose = require('mongoose');
+let ration = mongoose.model('ration');
 
 const ProjectModel = require('../../pm/models/project_model').project;
 class GLJController extends BaseController {
@@ -552,7 +554,7 @@ class GLJController extends BaseController {
         res.json(result);
     }
 
-    async addGlj(req,res){
+    async modifyKeyValue(req,res){//修改工料机关键的属性:名称、类型、规格、型号等
         let result={
             error:0
         }
@@ -560,9 +562,12 @@ class GLJController extends BaseController {
             let data = req.body.data;
             data = JSON.parse(data);
             let gljListModel = new GLJListModel();
-            // 添加项目工料机
-            let datas = await gljListModel.addList(data);
-            result.data=datas;
+            let ration_data = await ration.findOne(data.ration);
+            //  修改项目工料机
+            let projcetGLJ = await gljListModel.modifyGLJ(data.updateData,ration_data);
+
+           // let datas = await gljListModel.addList(data);
+            result.data=projcetGLJ;
         }catch (err){
             logger.err(err);
             result.error=1;

+ 17 - 4
modules/glj/models/glj_list_model.js

@@ -377,7 +377,7 @@ class GLJListModel extends BaseModel {
         let unitPriceFileId = unitPriceFile.id;
         let unitPriceModel = new UnitPriceModel();
         let [unitPriceData, isAdd] = await unitPriceModel.addUnitPrice(data, unitPriceFileId,"modify");
-        let gljData={};
+        let gljData=null;
         if(isAdd){ //如果是新增,则新增一条新的项目工料机
             data.code = unitPriceData.code;
             gljData  = await this.insertGLJWhenIsAdd(data,ration_glj,unitPriceFileId);
@@ -390,8 +390,15 @@ class GLJListModel extends BaseModel {
                 type:data.type,
                 unit:data.unit
             }
-            gljData = await this.findDataByCondition(condition,{_id: 0});
-            if(!gljData){
+            let gljList = await this.findDataByCondition(condition,{_id: 0},false);
+            if(gljList&&gljList.length>0){
+                for(let tem of gljList){
+                    if(tem.code == unitPriceData.code){
+                        gljData = tem;
+                    }
+                }
+            }
+            if(gljData==null){
                 data.code = unitPriceData.code;
                 gljData  = await this.insertGLJWhenIsAdd(data,ration_glj,unitPriceFileId);
             }
@@ -408,7 +415,13 @@ class GLJListModel extends BaseModel {
         if (glj.type === GLJTypeConst.CONCRETE || glj.type === GLJTypeConst.MORTAR ||
             glj.type === GLJTypeConst.MIX_RATIO || glj.type === GLJTypeConst.GENERAL_MACHINE){
             // 配合比数据插入
-            let connect_key =this.getIndex(ration_glj,['code','name','specs','unit','type']);
+            let key_array = [];
+            if(ration_glj.subType){//定额类型的工料机和定额工料机的key有点不同subType
+                key_array=  ['code','name','specs','unit','subType'];
+            }else {
+                key_array=  ['code','name','specs','unit','type'];
+            }
+            let connect_key =this.getIndex(ration_glj,key_array);
             let connect_key_n =this.getIndex(glj,['code','name','specs','unit','type']);
             //先查找配合比数据是否已经存在
             let mixRatioModel = new MixRatioModel();

+ 3 - 1
modules/glj/models/unit_price_model.js

@@ -121,7 +121,9 @@ class UnitPriceModel extends BaseModel {
         };
         if(data.from=='cpt'){//如果是来自补充工料机,则都添加新增标记
             insertData.is_add=1;
-        }else if (unitPriceData&&unitPriceData.length>0) {// 如果原始编码能找到,但不存在一样的编号,名称,单位.型号等,更改code和添加新增标记
+        }
+
+        if (unitPriceData&&unitPriceData.length>0) {// 如果原始编码能找到,但不存在一样的编号,名称,单位.型号等,更改code和添加新增标记
             insertData.code = data.original_code+"-"+unitPriceData.length;
             insertData.is_add=1;
         }

+ 1 - 1
modules/glj/routes/glj_router.js

@@ -22,7 +22,7 @@ router.post('/change-file', gljController.init, gljController.changeUnitPriceFil
 router.post('/save-as', gljController.init, gljController.unitPriceSaveAs);
 router.post('/get-composition', gljController.init, gljController.getComposition);
 router.post('/updatePrice', gljController.init, gljController.updateUnitPrice);
-router.post('/add',gljController.init, gljController.addGlj)
+router.post('/modifyKeyValue',gljController.init, gljController.modifyKeyValue);
 
 router.get('/test', gljController.init, gljController.test);
 router.get('/testModify', gljController.init, gljController.testModify);

+ 1 - 0
modules/main/models/ration.js

@@ -66,6 +66,7 @@ let rationSchema = new Schema({
     specs:String,//规格型号
     shortName:String,//缩写
     customQuantity:String,//自定义消耗
+    adjCoe:Number,
     from:{type: String,default:'std'}//std, cpt  来自标准工料机库、补充工料机库
 
 });

+ 0 - 1
modules/ration_glj/facade/ration_glj_facade.js

@@ -717,7 +717,6 @@ async function insertGLJAsRation(data) {
     let gljList = data.gljList;
     //先更新counter
     let counter = await projCounter.model.findOneAndUpdate({projectID:data.projectID},{ration:data.rationCount},{new:true});
-    console.log(counter);
     if(data.hasOwnProperty("selectedSerialNo")){ //如果需要,更新序列号。
         let query={
             projectID:data.projectID,

+ 10 - 0
public/web/scMathUtil.js

@@ -159,6 +159,16 @@ let scMathUtil = {
     isNumber : function (obj) {
         return obj === +obj;
     },
+    roundForObj:function(obj,decimal){
+        let me = this;
+        let value;
+        if(me.isNumber(obj)){
+            value = me.roundTo(obj,-decimal)
+        }else {
+            value = me.roundTo(Number(obj),-decimal);
+        }
+        return value
+    },
     roundToString:function(obj,decimal){
         let me = this;
         let value;

+ 5 - 0
web/building_saas/css/main.css

@@ -323,4 +323,9 @@ body {
 label.title{
     display: inline-block;
     width: 100px;
+}
+.modal-feeRate {max-width: 550px}
+
+.gc-column-header-cell{
+    text-align: center!important;
 }

+ 70 - 0
web/building_saas/main/js/models/project_glj.js

@@ -154,10 +154,80 @@ ProjectGLJ.prototype.updatePriceFromRG=function(recode,updateField,newval){
     }
 };
 
+ProjectGLJ.prototype.updatePropertyFromMainSpread = function (node,updateField,newval) {
+   if(updateField=="contain"){
+
+   }else {
+       this.updateGLJProperty(node,updateField,newval);
+   }
+};
+
+
+ProjectGLJ.prototype.updateGLJProperty=function (node,updateField,newval) {
+    let rationTypeGLJ = node.data;
+    let postData = {};
+    if(rationTypeGLJ[updateField]==newval){
+        return;
+    }
+    let data ={
+        glj_id: rationTypeGLJ.GLJID,
+        project_id: rationTypeGLJ.projectID,
+        code: rationTypeGLJ.code,
+        original_code:rationTypeGLJ.original_code,
+        name: rationTypeGLJ.name,
+        shortName:rationTypeGLJ.shortName,
+        specs: rationTypeGLJ.specs,
+        unit: rationTypeGLJ.unit,
+        type:rationTypeGLJ.subType,
+        type_of_work:rationTypeGLJ.subType,
+        base_price: rationTypeGLJ.basePrice,
+        market_price: rationTypeGLJ.basePrice,
+        repositoryId:rationTypeGLJ.repositoryId,
+        adjCoe:rationTypeGLJ.adjCoe,
+        from:rationTypeGLJ.from?rationTypeGLJ.from:'std'//std:标准工料机库, cpt:补充工料机库
+    };
+    if(updateField=='subType'){
+        data.type = newval;
+        data.type_of_work = newval;
+        data.shortName = this.getShortNameByID(newval);
+    }else {
+        data[updateField]=newval;
+    }
+    postData.ration = {
+        ID:rationTypeGLJ.ID,
+        projectID:rationTypeGLJ.projectID
+    };
+    postData.updateData = data;
+    $.bootstrapLoading.start();
+    CommonAjax.post("/glj/modifyKeyValue",postData,function (result) {
+        console.log(result);  //更新节点信息
+        rationTypeGLJ[updateField]=newval;
+        rationTypeGLJ.projectGLJID = result.id;
+        rationTypeGLJ.code = result.code;
+        rationTypeGLJ.basePrice = result.unit_price.base_price;
+        rationTypeGLJ.marketUnitFee = result.unit_price.market_price;
+        rationTypeGLJ.isAdd = result.unit_price.is_add;
+        rationTypeGLJ.isEstimate=result.is_evaluate;
+        rationTypeGLJ.shortName = result.unit_price.short_name;
+        //触发计算并更新节点信息
+        node.changed=true;
+        projectObj.project.projectGLJ.loadData(function () {
+            projectObj.project.calcProgram.calculate(node);
+            projectObj.project.calcProgram.saveNode(node);
+            $.bootstrapLoading.end();
+        });//重新加载项目工料机数据
+        //上面两步都是异步操作,这句应该是要等上面两步做完了再执行的
+    },function (err) {
+        $.bootstrapLoading.end();
+    });
+    
+}
+
 ProjectGLJ.prototype.updateBasePriceFromRG=function(recode,updateField,newval){
     let me = this;
     let projectGljs = this.datas.gljList;
     let glj = _.find(projectGljs,{'id':recode.projectGLJID});
+    console.log(glj);
     if(glj){
         let data = {id:glj.unit_price.id,field:updateField,newval:newval};
         let callback =function (data) {

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

@@ -653,11 +653,11 @@ var ration_glj = {
                 var mixRatioMap = projectGLJData.mixRatioMap;
                 var glj = _.find(projectGljs,{'id':ration.projectGLJID});
                 if(glj){
+                    ration.basePrice=glj.unit_price.base_price;
                     ration.marketUnitFee=glj.unit_price.market_price;
                     //ration_gljs[i].adjustPrice=glj.adjust_price;
                     ration.isEstimate=glj.is_evaluate;
                     ration.isAdd=glj.unit_price.is_add;
-                    ration.adjustPrice=projectObj.project.projectGLJ.getAdjustPrice(glj);
                     var connect_index = gljOprObj.getIndex(glj,['code','name','specs','unit','subType'])
                     if(mixRatioMap.hasOwnProperty(connect_index)){
                         var mixRatios = gljOprObj.getMixRationShowDatas(mixRatioMap[connect_index],projectGljs);

+ 6 - 0
web/building_saas/main/js/views/glj_view.js

@@ -606,9 +606,13 @@ var gljOprObj = {
               if(glj.isMixRatio==true){//如果是用于显示的组成物,则不用计算,跳过
                   continue;
               }
+              quantity = scMathUtil.roundForObj(quantity,getDecimal("ration.quantity"));
+              glj.quantity=scMathUtil.roundForObj(glj.quantity,getDecimal("glj.quantity"));
               glj.totalQuantity = scMathUtil.roundToString(quantity*glj.quantity,getDecimal("glj.quantity"));
               if(glj.hasOwnProperty('subList')){//需要计算glj下挂的组成物的总消耗量
                   for(let subG of glj.subList){
+                      subG.rationItemQuantity=scMathUtil.roundForObj(subG.rationItemQuantity,getDecimal("glj.quantity"));
+                      glj.totalQuantity=scMathUtil.roundForObj(glj.totalQuantity,getDecimal("glj.quantity"));
                       subG.totalQuantity = scMathUtil.roundToString(subG.rationItemQuantity*glj.totalQuantity,getDecimal("glj.quantity"));
                   }
               }
@@ -794,6 +798,8 @@ var gljOprObj = {
             }
         }else {
             if(value!=null){
+                projectObj.project.projectGLJ.updatePropertyFromMainSpread(node,fieldName,value)
+                return;
                 //update
             }
         }