Browse Source

Merge branch 'master' of http://192.168.1.12:3000/SmartCost/ConstructionCost

TonyKang 8 years ago
parent
commit
5860e0f942

+ 6 - 0
modules/main/models/bills_sub_schemas.js

@@ -19,4 +19,10 @@ var flagsSchema = new Schema({
     flag: Number
 });
 
+var changesSchema = new Schema({
+    addGLJ: String,
+    modifyGLJ:String,
+    deleteGLJ:String
+});
+
 module.exports = {feesSchema: feesSchema, flagsSchema: flagsSchema};

+ 237 - 0
modules/ration_glj/facade/glj_calculate_facade.js

@@ -0,0 +1,237 @@
+/**
+ * Created by chen on 2017/7/12.
+ */
+
+
+let mongoose = require('mongoose');
+let _=require("lodash");
+let ration_glj = mongoose.model('ration_glj');
+let ration = mongoose.model('ration');
+let ration_coe = mongoose.model('ration_coe');
+let std_ration_lib_ration_items = mongoose.model('std_ration_lib_ration_items');
+
+module.exports={
+    calculateQuantity:calculateQuantity
+}
+//辅助定额调整、替换工料机、标准附注条件调整、添加工料机、自定义消耗量(包括删除工料机)、自定义乘系数、市场单价调整
+let stateSeq ={
+    ass:1,
+    replase:2,
+    coe:3,
+    add:4,
+    cusQuantity:5,
+    cusCoe:6,
+    adjMak:7
+}
+
+
+async function calculateQuantity(query,isMarkPriceAjust){
+    try {
+         let  result ={
+             glj_result:[],
+             rationID:query.rationID
+         };
+         let impactRation = await ration.findOne({projectID:query.projectID,ID:query.rationID});
+         let gljList = await ration_glj.find(query)//{projectID:query.projectID,rationID:query.rationID}
+         let coeList = await ration_coe.find({projectID:query.projectID,rationID:query.rationID}).sort('seq').exec();
+         let assList=[];
+         let assRation = null;
+         let adjustState=[];
+         if(impactRation._doc.hasOwnProperty("rationAssList")&&impactRation.rationAssList.length>0){
+             for(let i=0;i<impactRation.rationAssList.length;i++){
+                 let times = calculateTimes(impactRation.rationAssList[i]);
+                 if(times!=0){
+                     assRation = await  std_ration_lib_ration_items.findOne({rationRepId:impactRation.libID,code:impactRation.rationAssList[i].assistCode});
+                     assList.push({times:times,assRation:assRation})
+                     adjustState.push({index:stateSeq.ass,content:impactRation.rationAssList[i].name+" "+impactRation.rationAssList[i].actualValue+" : +"+impactRation.rationAssList[i].assistCode+"x"+times});
+                     }
+                 }
+         }
+         for(let i =0;i<gljList.length;i++ ){
+             let r = await calculateQuantityPerGLJ(gljList[i],impactRation,coeList,assList,adjustState,isMarkPriceAjust);
+             result.glj_result.push(r);
+         }
+         console.log(result.glj_result);
+        if(isMarkPriceAjust==null){
+            await ration_glj.bulkWrite(generateUpdateTasks(result.glj_result));
+        }
+         adjustState= _.sortByOrder(adjustState, ['index'], ['asc']);
+         adjustState=_.map(adjustState, _.property('content'));
+         let adjustStateString = adjustState.join(';');
+         await ration.update({projectID:query.projectID,ID:query.rationID},{adjustState:adjustStateString});
+         result.adjustState=adjustStateString;
+         return result;
+    }catch (err){
+        console.log(err);
+        throw err;
+    }
+}
+
+function generateUpdateTasks(result) {
+    let tasks = [];
+    for(let i =0;i<result.length;i++){
+        let task= {
+            updateOne: {
+                filter: result[i].query,
+                update: result[i].doc
+            }
+        }
+        tasks.push(task);
+    }
+    return tasks;
+}
+
+
+async function calculateQuantityPerGLJ(glj,ration,coeList,assList,adjustState,isMarkPriceAjust) {
+    let quantity =  glj.quantity;
+    let result={
+        query:{
+            ID:glj.ID,
+            projectID:glj.projectID
+        },
+        doc:{
+            quantity: quantity,
+            customQuantity:glj.customQuantity
+        }
+    };
+    try {
+        if(isMarkPriceAjust==null){
+            if(!glj._doc.hasOwnProperty('customQuantity')||glj.customQuantity==null){
+                quantity =glj.rationItemQuantity;
+                quantity =calculateAss(quantity,assList,glj);
+                quantity = calculateQuantityByCoes(quantity,coeList,glj);
+            }else {
+                quantity = glj.customQuantity;
+            }
+            let customerCoe = _.last(coeList);
+            if(customerCoe.isAdjust==1){
+                quantity = calculateQuantityByCustomerCoes(quantity,customerCoe,glj);
+            }
+            result.doc.quantity =quantity;
+        }
+        generateAdjustState(glj,coeList,adjustState);
+        return result;
+    }catch (err){
+        throw err;
+    }
+}
+
+function calculateAss(quantity,assList,glj) {
+    for(let i=0;i<assList.length;i++){
+        let assglj = _.find(assList[i].assRation.rationGljList,function (aglj) {
+            return aglj.gljId == glj.GLJID
+        })
+        if(assglj){
+            let calQuantity = assglj.consumeAmt*assList[i].times;
+            quantity += calQuantity
+        }
+    }
+    return quantity;
+}
+
+function generateAdjustState(glj,coeList,adjustState) {
+   //替换工料机 and  添加工料机
+
+    // to do
+
+  //标准附注条件调整 + 自定义乘系数
+    for(let i=0;i<coeList.length;i++){
+        if(coeList[i].isAdjust==1){
+            if(i==coeList.length-1){
+                adjustState.push({index:stateSeq.cusCoe,content:coeList[i].content});
+            }else {
+                adjustState.push({index:stateSeq.coe,content:"调 : "+coeList[i].content});
+            }
+        }
+    }
+
+ //自定义消耗量
+    if(glj._doc.hasOwnProperty('customQuantity')){
+        if(glj.customQuantity!==null){
+            adjustState.push({index:stateSeq.cusQuantity,content:glj.code+'量'+glj.customQuantity});
+        }
+    }
+    //市场单价调整
+    if(glj._doc.hasOwnProperty('marketPriceAdjust')&&glj.marketPriceAdjust!=0){
+        //0101005价66.00
+        adjustState.push({index:stateSeq.adjMak,content:glj.code+'价'+glj.marketPriceAdjust});
+    }
+
+    return adjustState;
+}
+
+
+function calculateTimes(ass){
+    let times =(ass.actualValue-ass.stdValue)/ass.stepValue;
+
+    if(ass.carryBit=='四舍五入'){
+        times = _.round(times,ass.decimal);
+    }else if (ass.carryBit=='进一'){
+        times =_.ceil(times,ass.decimal);
+    }
+    return times;
+}
+
+function calculateQuantityByCoes(quantity,coeList,glj){
+    let coeQuantity = quantity;
+    if(coeList.length>1){
+        for(let i=0;i<coeList.length-1;i++){
+            coeQuantity = everyCoe(coeQuantity,coeList[i],glj);
+        }
+    }
+    return coeQuantity;
+}
+
+function everyCoe(quantity,coe,glj) {
+    let coeQuantity = quantity;
+    if(coe.isAdjust==1){
+        for(let i=0;i<coe.coes.length;i++){
+            if(coe.coes[i].coeType=='单个'&&coe.coes[i].gljCode==glj.code){
+                coeQuantity = getCalculateResult(coeQuantity,coe.coes[i]);
+            } else if(coe.coes[i].coeType=='定额'){
+                coeQuantity = getCalculateResult(coeQuantity,coe.coes[i]);
+            }else if(coe.coes[i].coeType==glj.gljDistType){
+                coeQuantity = getCalculateResult(coeQuantity,coe.coes[i]);
+            }
+        }
+    }
+    return coeQuantity;
+}
+
+
+function calculateQuantityByCustomerCoes(quantify,coe,glj) {
+    let rationAmount = coe.coes[0].amount;
+    if(_.every(coe.coes,'amount',rationAmount)){
+        return getCalculateResult(quantify, coe.coes[0])
+    }else {
+        for(let i=1;i<coe.coes.length;i++){
+            if(coe.coes[i].coeType.search(glj.gljDistType)!=-1){
+                return getCalculateResult(quantify,coe.coes[i])
+            }
+        }
+    }
+    return quantify
+}
+
+function getCalculateResult(quantify,c) {
+    let q = quantify;
+    switch (c.operator){
+        case '+' :
+            q = q + c.amount;
+            break;
+        case '-' :
+            q = q - c.amount;
+            break;
+        case '*' :
+            q = q * c.amount;
+            break;
+        case '/' :
+            q = q / c.amount;
+            break;
+        case '=' :
+             q = c.amount;
+            break;
+    }
+    return q;
+
+}

+ 25 - 26
modules/ration_glj/facade/ration_ass_facade.js

@@ -9,6 +9,7 @@ let async_n = require("async");
 let std_ration_lib_ration_items = mongoose.model('std_ration_lib_ration_items');
 let rationModel = mongoose.model('ration');
 let ration_glj = mongoose.model('ration_glj');
+let glj_calculate_facade = require('./glj_calculate_facade');
 
 module.exports={
     save:save,
@@ -28,8 +29,7 @@ function create_ration_ass(user_id,datas) {
 function update_ration_ass(user_id,datas) {
     return function (callback) {
         let editAss = datas.query.editAss;
-        let times =calculateTimes(editAss);
-        doRationAssAdjust(datas.query.ration,editAss,times,datas.doc).then(function (result) {
+        doRationAssAdjust(datas.query.ration,datas.doc).then(function (result) {
             console.log(result);
             if(result.err){
                 callback(result.err,'')
@@ -39,13 +39,29 @@ function update_ration_ass(user_id,datas) {
                     data:{
                         updateTpye:commonConsts.UT_UPDATE,
                         doc:datas.doc,
-                        ration_glj_list:result.ration_glj_list,
                         rationID:datas.query.ration.ID,
                         editIndex:datas.query.editIndex,
                         actualValue:editAss.actualValue
                     }
                 };
-                callback(null,newObject);
+                let ration_glj_data ={
+                    moduleName:'ration_glj',
+                    data:{
+                        updateTpye:commonConsts.UT_UPDATE,
+                        quantityRefresh:true,
+                        glj_result:result.cal_result.glj_result
+                    }
+                };
+                let ration_data ={
+                    moduleName:'ration',
+                    data:{
+                        updateTpye:commonConsts.UT_UPDATE,
+                        stateRefresh:true,
+                        rationID:result.cal_result.rationID,
+                        adjustState:result.cal_result.adjustState
+                    }
+                };
+                callback(null,[newObject,ration_glj_data,ration_data]);
             }
         })
 
@@ -53,26 +69,19 @@ function update_ration_ass(user_id,datas) {
 
 };
 
-async function doRationAssAdjust(ration,ass,times,doc) {
+async function doRationAssAdjust(ration,doc) {
     let result ={
         err:null,
-        ration_glj_list:[]
+        cal_result:[]
     }
     try{
-        let assRation =await std_ration_lib_ration_items.findOne({rationRepId:ration.libID,code:ass.assistCode});
-        let gljList = assRation.rationGljList;
-        for(let i=0;i<gljList.length;i++){
-            let glj = gljList[i];
-            let calQuantity = glj.consumeAmt*times;
-            let update_ration_glj = await ration_glj.findOne({rationID:ration.ID,projectID:ration.projectID,GLJID:glj.gljId});
-            let newQuantity = update_ration_glj.rationItemQuantity+calQuantity;
-            await ration_glj.update({rationID:ration.ID,projectID:ration.projectID,GLJID:glj.gljId},{quantity:newQuantity});
-            result.ration_glj_list.push({ID:update_ration_glj.ID,quantity:newQuantity,rationID:ration.ID});
-        }
         await rationModel.update({projectID:ration.projectID,ID:ration.ID},doc);
+        let cal_result = await glj_calculate_facade.calculateQuantity({projectID:ration.projectID,rationID:ration.ID});
+        result.cal_result=cal_result;
         return result;
     }catch (err){
         result.err = err;
+        console.log(err);
         return result;
     }
 }
@@ -84,16 +93,6 @@ function delete_ration_ass(user_id,datas) {
 
 };
 
-function calculateTimes(ass){
-    let times =(ass.actualValue-ass.stdValue)/ass.stepValue;
-
-    if(ass.carryBit=='四舍五入'){
-        times = _.round(times,ass.decimal);
-    }else if (ass.carryBit=='进一'){
-        times =_.ceil(times,ass.decimal);
-    }
-    return times;
-}
 
 
 

+ 157 - 2
modules/ration_glj/facade/ration_coe_facade.js

@@ -10,6 +10,8 @@ let _=require("lodash");
 let async_n = require("async");
 let coeMolde = mongoose.model('std_ration_lib_coe_list');
 let ration_coe = mongoose.model('ration_coe');
+let glj_calculate_facade = require('./glj_calculate_facade');
+
 
 module.exports={
     save:save,
@@ -21,6 +23,11 @@ let operationMap={
     'ut_update':update_ration_coe,
     'ut_delete':delete_ration_coe
 };
+let updateFunctionMap = {
+    'normalUpdate':normalUpdate,
+    'updateCustomerCoe':updateCustomerCoe,
+    'adjustUpdate':adjustUpdate
+}
 
 function create_ration_coe(user_id,datas) {
     return function (callback) {
@@ -49,10 +56,18 @@ function create_ration_coe(user_id,datas) {
                 });
             }
         })
-
     }
 }
+
 function update_ration_coe(user_id,datas) {
+    if(datas.updateFunction){
+        return updateFunctionMap[datas.updateFunction](user_id,datas);
+    }else {
+        return normalUpdate(user_id,datas);
+    }
+}
+
+function normalUpdate(user_id,datas) {
     return function(callback) {
         ration_coe.update(datas.query,datas.doc,(err,result)=>{
             if(err){
@@ -66,11 +81,151 @@ function update_ration_coe(user_id,datas) {
                         doc:datas.doc
                     }
                 }
-                callback(null,returndata)
+                callback(null,returndata);
+            }
+        })
+    }
+}
+
+function updateCustomerCoe(user_id,datas) {
+    return function(callback) {
+        doCustomerCoeUpdateTasks(datas).then((result)=>{
+            if(result.err){
+                callback(result.err,'');
+            }else {
+                let coeReturn = {
+                    moduleName:'ration_coe',
+                    data:{
+                        updateTpye:commonConsts.UT_UPDATE,
+                        query:result.coeResult.query,
+                        doc:result.coeResult.doc
+                    }
+                }
+                let ration_glj_data ={
+                    moduleName:'ration_glj',
+                    data:{
+                        updateTpye:commonConsts.UT_UPDATE,
+                        quantityRefresh:true,
+                        glj_result:result.cal_result.glj_result
+                    }
+                };
+                let ration_data ={
+                    moduleName:'ration',
+                    data:{
+                        updateTpye:commonConsts.UT_UPDATE,
+                        stateRefresh:true,
+                        rationID:result.cal_result.rationID,
+                        adjustState:result.cal_result.adjustState
+                    }
+                };
+                callback(null,[coeReturn,ration_glj_data,ration_data]);
+                console.log('update end');
+            }
+        })
+
+    }
+}
+
+ function adjustUpdate(user_id,datas) {
+    return function(callback) {
+        doAdjustUpdate(datas).then((result)=>{
+            if(result.err){
+                callback(result.err,'');
+            }else {
+                let coeReturn = {
+                    moduleName:'ration_coe',
+                    data:{
+                        updateTpye:commonConsts.UT_UPDATE,
+                        query:datas.query,
+                        doc:datas.doc
+                    }
+                }
+                let ration_glj_data ={
+                    moduleName:'ration_glj',
+                    data:{
+                        updateTpye:commonConsts.UT_UPDATE,
+                        quantityRefresh:true,
+                        glj_result:result.cal_result.glj_result
+                    }
+                };
+                let ration_data ={
+                    moduleName:'ration',
+                    data:{
+                        updateTpye:commonConsts.UT_UPDATE,
+                        stateRefresh:true,
+                        rationID:result.cal_result.rationID,
+                        adjustState:result.cal_result.adjustState
+                    }
+                };
+                callback(null,[coeReturn,ration_glj_data,ration_data]);
+                console.log('update end');
             }
         })
     }
 }
+
+async function doAdjustUpdate (datas){
+    let result = {
+        err:null
+    }
+    try{
+        await ration_coe.update(datas.query,datas.doc);
+        let cal_result = await glj_calculate_facade.calculateQuantity({projectID:datas.query.projectID,rationID:datas.query.rationID});
+        result.cal_result =cal_result;
+        console.log(result);
+        return result;
+    }catch (err){
+        result.err = err;
+        console.log(err);
+        return result;
+    }
+}
+
+async function doCustomerCoeUpdateTasks(datas) {
+    let result = {
+        err:null
+    }
+    try{
+        let doc =datas.doc;
+        doc.isAdjust = 1;
+        doc.content = generationContent(doc.coes);
+        let query = {
+            ID:datas.query.ID,
+            projectID:datas.query.projectID
+        }
+        await ration_coe.update(query,datas.doc);
+        result.coeResult ={
+                query:query,
+                doc:doc
+        };
+        let cal_result = await glj_calculate_facade.calculateQuantity({projectID:datas.query.projectID,rationID:datas.query.rationID});
+        result.cal_result =cal_result;
+        console.log(result);
+        return result;
+    }catch (err){
+        result.err = err;
+        console.log(err);
+        return result;
+    }
+}
+
+function generationContent(coes) {
+    let rationAmount = coes[0].amount;
+    let string ='';
+    if(_.every(coes,'amount',rationAmount)){
+        string = coes[0].coeType + 'x'+rationAmount;
+    }else {
+        let context_arr =[];
+        for(let i =1;i<coes.length;i++){
+            context_arr.push( coes[i].coeType + 'x'+coes[i].amount);
+        }
+        string = context_arr.join(',');
+
+    }
+    return string;
+}
+
+
 function delete_ration_coe(data) {
     return function (callback) {
         ration_coe.deleteMany({projectID: data.projectID, rationID: data.ID},(err,result)=>{

+ 94 - 19
modules/ration_glj/facade/ration_glj_facade.js

@@ -14,6 +14,17 @@ let std_ration_lib_glj_list_model = mongoose.model('std_ration_lib_glj_list');
 let async_n = require("async");
 let ration = mongoose.model('ration');
 let ration_coe_facade = require('./ration_coe_facade');
+let ration_coe = mongoose.model('ration_coe');
+let std_ration_lib_ration_items = mongoose.model('std_ration_lib_ration_items');
+let glj_calculate_facade = require('./glj_calculate_facade');
+
+
+module.exports={
+    save:save,
+    getData:getData,
+    deleteByRation:deleteByRation,
+    getQuantityByProjectGLJ:getQuantityByProjectGLJ
+}
 
 let operationMap={
     'ut_create':create_ration_glj,
@@ -22,15 +33,11 @@ let operationMap={
 };
 let updateFunctionMap = {
     'normalUpdate':normalUpdate,
-    'marketPriceAdjustUpdate':marketPriceAdjustUpdate
-}
+    'marketPriceAdjustUpdate':marketPriceAdjustUpdate,
+    'customQuantityUpdate':customQuantityUpdate
+};
+
 
-module.exports={
-    save:save,
-    getData:getData,
-    deleteByRation:deleteByRation,
-    getQuantityByProjectGLJ:getQuantityByProjectGLJ
-}
 
 
 /**
@@ -165,7 +172,6 @@ function update_ration_glj(user_id,datas) {
     }else {
         return normalUpdate(user_id,datas);
     }
-
 }
 
 function normalUpdate(user_id,datas){
@@ -188,25 +194,85 @@ function normalUpdate(user_id,datas){
     }
 }
 
+function customQuantityUpdate(user_id,datas){
+    return function(callback) {
+        doCustomQuantityUpdate(datas).then((result)=>{
+            if(result.err){
+                callback(result.err,'');
+            }else {
+                let ration_glj_data ={
+                    moduleName:'ration_glj',
+                    data:{
+                        updateTpye:commonConsts.UT_UPDATE,
+                        quantityRefresh:true,
+                        glj_result:result.cal_result.glj_result
+                    }
+                };
+                let ration_data ={
+                    moduleName:'ration',
+                    data:{
+                        updateTpye:commonConsts.UT_UPDATE,
+                        stateRefresh:true,
+                        rationID:result.cal_result.rationID,
+                        adjustState:result.cal_result.adjustState
+                    }
+                };
+                callback(null,[ration_glj_data,ration_data]);
+            }
+        })
+    }
+}
+
+async function doCustomQuantityUpdate(datas){
+    let result = {
+        err:null
+    }
+    try{
+        await ration_glj.update(datas.query,datas.doc);
+        let cal_result = await glj_calculate_facade.calculateQuantity({projectID:datas.query.projectID,rationID:datas.query.rationID});
+        result.cal_result =cal_result;
+        console.log(result);
+        return result;
+    }catch (err){
+        result.err = err;
+        console.log(err);
+        return result;
+    }
+}
+
 
 function marketPriceAdjustUpdate(user_id,datas) {
     return function (callback) {
         updateprojectGljAndRationGLJ(datas.query,datas.doc).then((result)=>{
-            let returndata ={
-                moduleName:'ration_glj',
-                data:{
-                    updateTpye:commonConsts.UT_UPDATE,
-                    query:datas.query,
-                    doc:result
+            if(result.err){
+                callback(result.err,'');
+            }else {
+                let returndata ={
+                    moduleName:'ration_glj',
+                    data:{
+                        updateTpye:commonConsts.UT_UPDATE,
+                        query:datas.query,
+                        doc:result.doc
+                    }
+                };
+                let ration_data ={
+                    moduleName:'ration',
+                    data:{
+                        updateTpye:commonConsts.UT_UPDATE,
+                        stateRefresh:true,
+                        rationID:datas.query.rationID,
+                        adjustState:result.adjustState
+                    }
                 }
+                callback(null,[returndata,ration_data]);
             }
-            callback(null,returndata)
         })
 
     }
 }
 
 async function updateprojectGljAndRationGLJ(query,doc) {
+    let returnresult={};
     try {
         let gljListModel = new GLJListModel();
         let result = await gljListModel.modifyMarketPrice(doc);
@@ -218,11 +284,20 @@ async function updateprojectGljAndRationGLJ(query,doc) {
             name : result.name,
             code:result.code
         };
-        let updateresult = await ration_glj.findOneAndUpdate(query, updateDoc)
-        return updateDoc;
+        let updateresult = await ration_glj.findOneAndUpdate(query, updateDoc);
+        let stateResult =  await glj_calculate_facade.calculateQuantity({projectID:query.projectID,rationID:query.rationID},true);
+
+         returnresult ={
+            err:null,
+            doc :updateDoc,
+            adjustState:stateResult.adjustState
+        }
+        return returnresult;
 
         } catch (error) {
+           returnresult.err = error;
             console.log(error);
+            return returnresult
          }
 }
 
@@ -401,4 +476,4 @@ function commonCallback(callback,result,err) {
     }else {
         callback(null,result);
     }
-}
+}

+ 2 - 2
modules/ration_glj/models/ration_coe.js

@@ -6,9 +6,9 @@ var mongoose = require('mongoose'),
 
 var coeSchema = mongoose.Schema({
     coeType: String,                // 系数类型,指作用范围:// 单个(如:111量0.001)、人工类、材料类、机械类、全部(如:定额×0.925)。
-    gljID: Number,                  // 要调整的工料机ID(当coeType=0时有效)
+    gljCode: String,                  // 要调整的工料机ID(当coeType=0时有效)
     operator: String,               // 运算符(*、+、-、=)
-    amount: String,                 // 调整的量
+    amount: Number,                 // 调整的量
     _id: false
 });
 

+ 6 - 5
modules/users/routes/boot_route.js

@@ -8,10 +8,11 @@
 import express from "express";
 import BootController from "../controllers/boot_controller";
 
-let router = express.Router();
-let bootController = new BootController();
+module.exports=function (app){
+    let router = express.Router();
+    let bootController = new BootController();
 
 // 引导页面
-router.get('/:area', bootController.boot);
-
-module.exports = router;
+    router.get('/:area', bootController.boot);
+    app.use('/boot', router);
+};

+ 13 - 12
modules/users/routes/login_route.js

@@ -8,19 +8,20 @@
 import express from "express";
 import LoginController from "../controllers/login_controller";
 
-let router = express.Router();
-let loginController = new LoginController();
 
-// 登录页面action
-router.get('/login', loginController.index);
-router.get('/', loginController.index);
+module.exports = function (app) {
+    let  router = express.Router();
+    let loginController = new LoginController();
+    // 登录页面action
+    router.get('/login', loginController.index);
+    router.get('/', loginController.index);
 
 // 登录操作
-router.post('/login', loginController.login);
+    router.post('/login', loginController.login);
 
-router.get("/logout", function (req, res) {
-    delete req.session.sessionUser;
-    res.redirect("/");
-});
-
-module.exports = router;
+    router.get("/logout", function (req, res) {
+        delete req.session.sessionUser;
+        res.redirect("/");
+    });
+    app.use('/',router)
+};

+ 9 - 7
modules/users/routes/user_route.js

@@ -8,12 +8,14 @@
 import Express from "express";
 import UserController from "../controllers/user_controller";
 
-const router = Express.Router();
-const userController = new UserController();
+module.exports = function (app) {
 
-// action定义区域
-router.get('/info', userController.info);
-router.get('/safe', userController.safe);
-router.post('/info', userController.saveData);
+    const router = Express.Router();
+    const userController = new UserController();
 
-module.exports = router;
+// action定义区域
+    router.get('/info', userController.info);
+    router.get('/safe', userController.safe);
+    router.post('/info', userController.saveData);
+    app.use('/user',router);
+};

+ 10 - 3
server.js

@@ -73,9 +73,16 @@ app.use(function (req, res, next) {
 });
 
 // 用户相关路由区域
-app.use('/', require("./modules/users/routes/login_route"));
-app.use('/boot', require("./modules/users/routes/boot_route"));
-app.use('/user', require("./modules/users/routes/user_route"));
+//app.use('/', require("./modules/users/routes/login_route"));
+
+require("./modules/users/routes/login_route")(app);
+require("./modules/users/routes/boot_route")(app);
+require("./modules/users/routes/user_route")(app);
+
+
+
+
+
 
 // 项目工料机相关
 app.use('/glj', require("./modules/glj/routes/glj_router"));

+ 1 - 1
test/tmp_data/bills_grid_setting.js

@@ -366,7 +366,7 @@ var BillsGridSetting ={
                 ]
             },
             "data":{
-                "field":"",
+                "field":"adjustState",
                 "vAlign":1,
                 "hAlign":0,
                 "font":"Arial"

File diff suppressed because it is too large
+ 3 - 1
web/building_saas/main/html/main.html


+ 12 - 2
web/building_saas/main/js/models/project.js

@@ -19,8 +19,12 @@ var PROJECT = {
         tools.doAfterUpdate = function(result){
             if (!result) { return }
             result.forEach(function(item){
-                if (me.modules[item.moduleName]){
-                    me.modules[item.moduleName].doAfterUpdate(item.err, item.data);
+                if(_.isArray(item)){
+                    item.forEach(function (e) {
+                        me.eachItem(e);
+                    })
+                }else {
+                    me.eachItem(item)
                 }
             });
         };
@@ -42,6 +46,12 @@ var PROJECT = {
             //me.test(result[0].data[0]);
             callback(0);
         };
+        tools.eachItem=function(item){
+            if (me.modules[item.moduleName]){
+                me.modules[item.moduleName].doAfterUpdate(item.err, item.data);
+            }
+        };
+
         /*tools.test = function(data){
             me._project.beginUpdate('修改名称');
             data.name = 'test';

+ 18 - 2
web/building_saas/main/js/models/ration.js

@@ -54,10 +54,26 @@ var Ration = {
             this.maxRationID(ID);
         }
 
-        // 提交数据后更新前端缓存
+        // refresh after update
         ration.prototype.doAfterUpdate = function(err, data){
-            // to do
+            if(data.stateRefresh){
+                this.refreshAdjustState(data);
+            }
         };
+        ration.prototype.refreshAdjustState = function(data){
+            var controller = projectObj.mainController;
+             var dataIndex = _.findIndex(this.datas,function(item) {
+                 return item.ID ==data.rationID;
+             });
+            this.datas[dataIndex].adjustState = data.adjustState;
+            var selected = controller.sheet.getSelections();
+            var col =   _.findIndex(BillsGridSetting.cols,function (col) {
+                return col.data.field =='adjustState';
+            })
+            controller.sheet.getCell(selected[0].row,col).value(data.adjustState);
+            console.log(data.adjustState);
+        }
+
 
         ration.prototype.getTempRationData = function (id, billsID, serialNo) {
             var newData = {'ID': id, 'serialNo': serialNo, projectID: this.project.ID()};

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

@@ -42,7 +42,7 @@ var ration_ass = {
         ration_ass.prototype.refreshAfterUpdate=function(data){
             console.log(data)
             this.updateRation(data.rationID,data.doc);
-            this.updateRationGLJ(data.ration_glj_list);
+            //this.updateRationGLJ(data.ration_glj_list);
             gljOprObj.assSheetData[data.editIndex].actualValue = data.actualValue;
             sheetCommonObj.showData(gljOprObj.assSheet,gljOprObj.assSetting,gljOprObj.assSheetData);
         };

+ 20 - 3
web/building_saas/main/js/models/ration_coe.js

@@ -48,7 +48,7 @@ var ration_coe = {
         };
         ration_coe.prototype.refreshAfterUpdate=function(data){
             var coe_list = projectObj.project.ration_coe.datas;
-            var coe_index= _.findIndex(coe_list,(coe)=>{
+            var coe_index= _.findIndex(coe_list,function(coe){
                 return coe.ID==data.query.ID&&coe.projectID==data.query.projectID;
             })
             _.forEach(data.doc, function(n, key) {
@@ -84,6 +84,7 @@ var ration_coe = {
                     newCoe.name = '自定义系数';
                     newCoe.content='人工×1,材料×1,机械×1,主材×1,设备×1';
                     newCoe.isAdjust=0;
+                    newCoe.coes = this.getCustomerCoeData();
                 }else {
                     newCoe.coeID= data.rationCoeList[i];
                 }
@@ -92,6 +93,17 @@ var ration_coe = {
             criteria.updateType = 'ut_create';
             return criteria;
         };
+        ration_coe.prototype.getCustomerCoeData = function () {
+            var coeList = [];
+            coeList.push({ amount:1, operator:'*', gljCode:null, coeType:'定额'});
+            coeList.push({ amount:1, operator:'*', gljCode:null, coeType:'人工'});
+            coeList.push({ amount:1, operator:'*', gljCode:null, coeType:'材料'});
+            coeList.push({ amount:1, operator:'*', gljCode:null, coeType:'机械'});
+            coeList.push({ amount:1, operator:'*', gljCode:null, coeType:'主材'});
+            coeList.push({ amount:1, operator:'*', gljCode:null, coeType:'设备'});
+            return coeList;
+        };
+
         ration_coe.prototype.getUpdateData=function(type,query,doc,callfunction){
             var updateData = [];
             var newobj = {
@@ -110,15 +122,20 @@ var ration_coe = {
         ration_coe.prototype.adjustCoeClick = function(recode,newval){
             var query = {
                 'ID':recode.ID,
-                'projectID': recode.projectID
+                'projectID': recode.projectID,
+                'rationID':recode.rationID
             };
             var doc ={
                 isAdjust:newval,
             };
-            var updateData = this.getUpdateData('ut_update',query,doc);
+            var updateData = this.getUpdateData('ut_update',query,doc,'adjustUpdate');
             project.pushNow('updateRationCOE',[this.getSourceType()],updateData);
         };
 
+        ration_coe.prototype.updateCustomerCoe = function (data) {
+            var updateData = this.getUpdateData('ut_update',data.query,data.doc,'updateCustomerCoe');
+            project.pushNow('updateCustomerCoe',[this.getSourceType()],updateData);
+        };
         ration_coe.prototype.deleteByRation = function(ration){
             var coe_list = projectObj.project.ration_coe.datas;
             var newList =_.filter(coe_list,(coe)=>{

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

@@ -64,17 +64,29 @@ var ration_glj = {
             // SheetDataHelper.loadSheetData(setting, rationLibObj.sectionRationsSpread.getActiveSheet(), datas);
         };
         ration_glj.prototype.refreshAfterUpdate=function(data){
+            console.log(data);
+            var rationID =0;
+            var me = this;
+            if(data.quantityRefresh){
+                data.glj_result.forEach(function (item) {
+                    rationID= me.refreshEachItme(item.doc,item.query);
+                })
+            }else {
+                rationID= me.refreshEachItme(data.doc,data.query);
+            }
+            var showList = _.filter(projectObj.project.ration_glj.datas,{'rationID':rationID});
+            gljOprObj.sheetData=showList;
+            sheetCommonObj.showData(gljOprObj.sheet,gljOprObj.setting,showList);
+        };
+        ration_glj.prototype.refreshEachItme = function (doc,query) {
             var glj_list = projectObj.project.ration_glj.datas;
             var glj_index= _.findIndex(glj_list,(glj)=>{
-                return glj.ID==data.query.ID&&glj.projectID==data.query.projectID;
+                return glj.ID==query.ID&&glj.projectID==query.projectID;
             })
-            _.forEach(data.doc, function(n, key) {
+            _.forEach(doc, function(n, key) {
                 glj_list[glj_index][key] = n;
             });
-
-            var showList = _.filter(glj_list,{'projectID':data.query.projectID,'rationID':glj_list[glj_index].rationID});
-            gljOprObj.sheetData=showList;
-           sheetCommonObj.showData(gljOprObj.sheet,gljOprObj.setting,showList);
+            return glj_list[glj_index].rationID;
         };
         ration_glj.prototype.refreshAfterDelete=function(data){
             var glj_list = projectObj.project.ration_glj.datas;
@@ -211,23 +223,34 @@ var ration_glj = {
             updateData.push(newobj);
             return updateData;
         };
-        ration_glj.prototype.customQuantityUpdate = function(recode,newVal){
+        ration_glj.prototype.customQuantityUpdate = function(recode,newVal,text){
             var query = {
                 'ID':recode.ID,
-                'projectID': recode.projectID
+                'projectID': recode.projectID,
+                'rationID':recode.rationID
             };
-            var doc ={
-                customQuantity:newVal,
-                quantity:newVal
-            };
-            var updateData = this.getUpdateData('ut_update',query,doc);
+            var doc;
+            if(text===null){
+                doc ={
+                    customQuantity:null
+                };
+            }else {
+                doc ={
+                    customQuantity:newVal,
+                    quantity:newVal
+                };
+            }
+
+
+            var updateData = this.getUpdateData('ut_update',query,doc,'customQuantityUpdate');
             project.pushNow('updateRationGLJ',[this.getSourceType()],updateData);
 
         };
         ration_glj.prototype.marketPriceAdjustUpdate = function (recode,newVal) {
             var query = {
                 'ID':recode.ID,
-                'projectID': recode.projectID
+                'projectID': recode.projectID,
+                'rationID':recode.rationID
             };
             var doc ={
                 market_price:newVal,

File diff suppressed because it is too large
+ 130 - 28
web/building_saas/main/js/views/glj_view.js