Browse Source

Merge branch 'master' of http://smartcost.f3322.net:3000/SmartCost/ConstructionCost

olym 7 years ago
parent
commit
3582baf39c

+ 4 - 3
modules/fee_rates/controllers/fee_rates_controller.js

@@ -7,7 +7,7 @@ let mongoose = require('mongoose');
 let feeRateModel = mongoose.model('fee_rates');
 let feeRateModel = mongoose.model('fee_rates');
 let feeRateFileModel = mongoose.model('fee_rate_file');
 let feeRateFileModel = mongoose.model('fee_rate_file');
 let feeRateFacde=require('../facade/fee_rates_facade');
 let feeRateFacde=require('../facade/fee_rates_facade');
-
+let logger = require("../../../logs/log_helper").logger;
 let template = require('./feerate_template');
 let template = require('./feerate_template');
 /*
 /*
 var stdFeeRateLibs = require('../../std_fee_rate_libs/models/std_fee_rate_libs');
 var stdFeeRateLibs = require('../../std_fee_rate_libs/models/std_fee_rate_libs');
@@ -80,13 +80,14 @@ function libNames(req, res) {
 }
 }
 
 
 
 
-function getFeeRateStandards(req, res) {
+async function getFeeRateStandards(req, res) {
     let result={
     let result={
         error:0
         error:0
     }
     }
     try {
     try {
         let data = req.body.data;
         let data = req.body.data;
-        let feeRateStandards= feeRateFacde.getFeeRateStandardsByProjectID(data.rootProjectID);
+        data = JSON.parse(data);
+        let feeRateStandards= await feeRateFacde.getFeeRateStandardsByProjectID(data.projectID);
         result.data= feeRateStandards;
         result.data= feeRateStandards;
     }catch (err){
     }catch (err){
         console.log(err);
         console.log(err);

+ 55 - 42
modules/fee_rates/facade/fee_rates_facade.js

@@ -8,11 +8,13 @@ let feeRateModel = mongoose.model('fee_rates');
 let feeRateFileModel = mongoose.model('fee_rate_file');
 let feeRateFileModel = mongoose.model('fee_rate_file');
 let std_fee_rate_lib_model = mongoose.model('std_fee_rate_libs');
 let std_fee_rate_lib_model = mongoose.model('std_fee_rate_libs');
 let project_feerate_temp = mongoose.model('project_feerate_temp');
 let project_feerate_temp = mongoose.model('project_feerate_temp');
+let projectsModel = require("../../pm/models/project_schema");
 let consts = require('../../main/models/project_consts');
 let consts = require('../../main/models/project_consts');
 let _=require("lodash");
 let _=require("lodash");
 let template = require('../controllers/feerate_template');
 let template = require('../controllers/feerate_template');
 let logger = require("../../../logs/log_helper").logger;
 let logger = require("../../../logs/log_helper").logger;
 const uuidV1 = require('uuid/v1');
 const uuidV1 = require('uuid/v1');
+let EngineeringLibModel = require("../../users/models/engineering_lib_model");
 
 
 module.exports={
 module.exports={
     save:save,
     save:save,
@@ -186,14 +188,18 @@ async function getFeeRateData(projectID) {
     }
     }
     try {
     try {
         //
         //
-        let tem = await project_feerate_temp.findOne({projectID:projectID});//暂时取tem表的记录
-        if (tem){
-            let feeRateData = await feeRateFileModel.findOne({'ID':tem.feeRateFileID,deleteInfo:null});
-            let feeRate = await feeRateModel.findOne({ID:feeRateData.feeRateID});
-            feeRateData._doc.rates = feeRate.rates;
-            //
-            feeRateData._doc.usageProjects=getUsageProjects(feeRateData.ID);
-            result.datas = feeRateData;
+        let project =  await projectsModel.findOne({ID:projectID});
+        if (project&&project.property&&project.property.feeFile){
+            let feeRateData = await feeRateFileModel.findOne({'ID':project.property.feeFile,deleteInfo:null});
+            if(feeRateData===null){
+                result.datas=[];
+            }else {
+                let feeRate =  await feeRateModel.findOne({ID:feeRateData.feeRateID});
+                feeRateData._doc.rates = feeRate?feeRate.rates:[];
+                //
+                feeRateData._doc.usageProjects=await getUsageProjects(feeRateData.ID);
+                result.datas = feeRateData;
+            }
         }else {
         }else {
             result.datas=[];
             result.datas=[];
         }
         }
@@ -206,12 +212,8 @@ async function getFeeRateData(projectID) {
     return result;
     return result;
 }
 }
 
 
-function getUsageProjects(feeRateID){
-   //从数据库中查,项目结构暂时还没做 todo
-    var projects = [];
-    projects.push({ID:99,name:'单价调整'});
-    projects.push({ID:100,name:'工程02'});
-    projects.push({ID:101,name:'建筑工程'});
+async function getUsageProjects(feeRateID){
+    let projects = await projectsModel.find({'property.feeFile':feeRateID,'deleteInfo':null});
     return projects;
     return projects;
 }
 }
 
 
@@ -224,14 +226,19 @@ function commonCallback(callback,result,err) {
     }
     }
 }
 }
 
 
-function getFeeRateStandardsByProjectID(rootProjectID) {
-    //这里应该从项目配置中读取 to do, 暂时使用模板文件里的数据
-    let t1 = template.feerate_template1;
-    let t2 = template.feerate_template2;
-
+async function getFeeRateStandardsByProjectID(projectID) {
+    logger.info("get feeRate standard, projectID:"+projectID)
     let feeRateStandards=[];
     let feeRateStandards=[];
-    feeRateStandards.push({ID:t1.ID,libName:t1.libName});
-    feeRateStandards.push({ID:t2.ID,libName:t2.libName});
+    let project =  await projectsModel.findOne({ID:projectID});
+    let engineeringLibModel = new EngineeringLibModel();
+    let engineeringInfo = project !== null && project.property.engineering_id !== undefined ?
+        await engineeringLibModel.getEngineering(project.property.engineering_id) : null;
+    if(engineeringInfo!=null){
+        let fee_lib = engineeringInfo.fee_lib;
+        for(let lib of fee_lib){
+            feeRateStandards.push({ID:lib.id,libName:lib.name});
+        }
+    }
     return feeRateStandards;
     return feeRateStandards;
 }
 }
 
 
@@ -254,27 +261,33 @@ async function changeFeeRateStandard(jdata){
     return doc;
     return doc;
 }
 }
 
 
-async function newFeeRateFile(data){
-  /*  data = {
-   libID:2,
-   rootProjectID:113,
-   name:'费率1'
-    }*/
-    let template = await std_fee_rate_lib_model.findOne({"ID":data.libID});
-    let newFeeRate = {};
-    newFeeRate.ID =uuidV1();
-    newFeeRate.rates=template.rates;
-    await feeRateModel.create(newFeeRate);
-    let doc={
-        libID:data.libID,
-        libName:template.libName,
-        feeRateID: newFeeRate.ID,
-        rootProjectID:data.rootProjectID,
-        name:data.name
-    };
-    doc.ID = uuidV1();
-    await feeRateFileModel.create(doc);
-    return doc;
+async function newFeeRateFile(updateData){
+    if(updateData.property !== null){
+        let property = updateData.property;
+        logger.info("Create new feeRate file for project :"+updateData.ID);
+        let libID = property.feeFile;
+        let rootProjectID = property.rootProjectID;
+        let name = updateData.name;
+        let doc={
+            rootProjectID:rootProjectID,
+            name:name
+        };
+        if(libID!== ''){
+            let template = await std_fee_rate_lib_model.findOne({"ID":libID});
+            let newFeeRate = {};
+            newFeeRate.ID =uuidV1();
+            newFeeRate.rates=template.rates;
+            await feeRateModel.create(newFeeRate);
+            doc.libID = libID;
+            doc.libName = template.libName;
+            doc.feeRateID =  newFeeRate.ID;
+        }
+
+        doc.ID = uuidV1();
+        await feeRateFileModel.create(doc);
+        return doc.ID;
+    }
+    return null;
 }
 }
 
 
 
 

+ 4 - 1
modules/pm/models/project_model.js

@@ -6,6 +6,8 @@ let counter = require("../../../public/counter/counter.js");
 
 
 let newProjController = require('../controllers/new_proj_controller');
 let newProjController = require('../controllers/new_proj_controller');
 let copyProjController = require('../controllers/copy_proj_controller');
 let copyProjController = require('../controllers/copy_proj_controller');
+let feeRateFacade = require('../../fee_rates/facade/fee_rates_facade');
+let logger = require("../../../logs/log_helper").logger;
 
 
 let Projects = require("./project_schema");
 let Projects = require("./project_schema");
 let projectType = {
 let projectType = {
@@ -70,7 +72,8 @@ ProjectsDAO.prototype.updateUserProjects = async function(userId, datas, callbac
                     callback(1, '同级目录已存在相同名称数据.', null);
                     callback(1, '同级目录已存在相同名称数据.', null);
                     return;
                     return;
                 }
                 }
-
+                let  feeRateFileID = await feeRateFacade.newFeeRateFile(data.updateData);
+                newProject.property.feeFile = feeRateFileID?feeRateFileID:-1;
                 newProject.save(async function (err, result) {
                 newProject.save(async function (err, result) {
                     if (!err && result._doc.projType === projectType.tender) {
                     if (!err && result._doc.projType === projectType.tender) {
                         newProjController.copyTemplateData(data.updateData.property, newProject.ID, updateAll);
                         newProjController.copyTemplateData(data.updateData.property, newProject.ID, updateAll);

+ 13 - 8
modules/ration_glj/facade/ration_glj_facade.js

@@ -83,7 +83,7 @@ function combineQuantity(results) {
 
 
 
 
 function get_lib_glj_info(ration_glj) {
 function get_lib_glj_info(ration_glj) {
-    return function (cb) {
+    return function (result,cb) {
         std_glj_lib_gljList_model.findOne({'ID':ration_glj.GLJID},(err,glj)=>{
         std_glj_lib_gljList_model.findOne({'ID':ration_glj.GLJID},(err,glj)=>{
                 if(err){
                 if(err){
                 cb(err,'')
                 cb(err,'')
@@ -95,8 +95,10 @@ function get_lib_glj_info(ration_glj) {
                 ration_glj.basePrice = glj.basePrice;
                 ration_glj.basePrice = glj.basePrice;
                 ration_glj.shortName = glj.shortName;
                 ration_glj.shortName = glj.shortName;
                 ration_glj.type = glj.gljType;
                 ration_glj.type = glj.gljType;
-                getInfoFromProjectGLJ(ration_glj).then(function (result) {
-                    if(result){
+                ration_glj.repositoryId = glj.ration_glj
+                getInfoFromProjectGLJ(ration_glj).then(function (info) {
+                    if(info){
+                        result.datas.push(info);
                         cb(null,result);
                         cb(null,result);
                     }else {
                     }else {
                         cb(new Error('get project glj error'),null);
                         cb(new Error('get project glj error'),null);
@@ -111,7 +113,7 @@ function get_lib_glj_info(ration_glj) {
 
 
 async function getInfoFromProjectGLJ(ration_glj) {
 async function getInfoFromProjectGLJ(ration_glj) {
      let data = {
      let data = {
-         glj_id: ration_glj.glj_repository_id,
+         glj_id: ration_glj.GLJID,
          project_id: ration_glj.projectID,
          project_id: ration_glj.projectID,
          code: ration_glj.code,
          code: ration_glj.code,
          name: ration_glj.name,
          name: ration_glj.name,
@@ -120,7 +122,8 @@ async function getInfoFromProjectGLJ(ration_glj) {
          type: ration_glj.type,
          type: ration_glj.type,
          type_of_work: ration_glj.type,
          type_of_work: ration_glj.type,
          base_price: ration_glj.basePrice,
          base_price: ration_glj.basePrice,
-         market_price: ration_glj.basePrice
+         market_price: ration_glj.basePrice,
+         repositoryId:ration_glj.repositoryId
      };
      };
 
 
      try {
      try {
@@ -142,16 +145,17 @@ function create_ration_glj(user_id,datas) {
     return function (callback) {
     return function (callback) {
         let ration_glj_list=datas.ration_glj_list;
         let ration_glj_list=datas.ration_glj_list;
         var tasks=[];
         var tasks=[];
+        tasks.push(startingTask("get glj info"))
         for(let i =0;i<ration_glj_list.length;i++){
         for(let i =0;i<ration_glj_list.length;i++){
             ration_glj_list[i].ID = uuidV1();
             ration_glj_list[i].ID = uuidV1();
             tasks.push(get_lib_glj_info(ration_glj_list[i]))
             tasks.push(get_lib_glj_info(ration_glj_list[i]))
         }
         }
-        async_n.parallel(tasks,(err,results)=>{
+        async_n.waterfall(tasks,(err,results)=>{
             if(err){
             if(err){
                 callback(err,results)
                 callback(err,results)
             }else {
             }else {
                 let newRecords =[];
                 let newRecords =[];
-                for (let r of results){
+                for (let r of results.datas){
                     if(r){
                     if(r){
                         newRecords.push(r)
                         newRecords.push(r)
                     }
                     }
@@ -395,7 +399,8 @@ function  deleteByID(datas,callback){
 function startingTask(processName){
 function startingTask(processName){
     return function(asyncCallBack){
     return function(asyncCallBack){
         var result = {
         var result = {
-            processName : processName
+            processName : processName,
+            datas:[]
         };
         };
         asyncCallBack(null, result);
         asyncCallBack(null, result);
     };
     };

+ 1 - 0
modules/ration_glj/models/ration_glj.js

@@ -7,6 +7,7 @@ var mongoose = require('mongoose'),
 var ration_glj = new Schema({
 var ration_glj = new Schema({
     ID:String,
     ID:String,
     GLJID:Number,
     GLJID:Number,
+    repositoryId:Number,
     projectID: Number,
     projectID: Number,
     rationID:Number,
     rationID:Number,
     projectGLJID:Number,
     projectGLJID:Number,

+ 10 - 4
public/calc_util.js

@@ -22,16 +22,22 @@ let executeObj = {
             base = me.calcBase[calcBaseName];
             base = me.calcBase[calcBaseName];
 
 
         if (base != null) {
         if (base != null) {
-            let price = 0, tmpSum = 0;
+            let price = 0, aprice = 0, mprice = 0, tmpSum = 0;
             for (let glj of me.treeNode.data.gljList) {
             for (let glj of me.treeNode.data.gljList) {
                 if (base.gljTypes.indexOf(glj.type) >= 0) {
                 if (base.gljTypes.indexOf(glj.type) >= 0) {
                     if (base.calcType == baseCalc){ price = glj["basePrice"];}
                     if (base.calcType == baseCalc){ price = glj["basePrice"];}
                     else if (base.calcType == adjustCalc){price = glj["adjustPrice"];}
                     else if (base.calcType == adjustCalc){price = glj["adjustPrice"];}
                     else if (base.calcType == budgetCalc){price = glj["marketPrice"];}
                     else if (base.calcType == budgetCalc){price = glj["marketPrice"];}
-                    else if (base.calcType == diffCalc){price = glj["marketPrice"] - glj["adjustPrice"];};
+                    else if (base.calcType == diffCalc){
+                        aprice = glj["adjustPrice"];
+                        if (!aprice) aprice = 0;
+                        mprice = glj["marketPrice"];
+                        if (!mprice) mprice = 0;
+                        price = mprice - aprice;
+                    };
+                    if (!price) price = 0;
+                    tmpSum = tmpSum + glj["quantity"] * price;
                 };
                 };
-                tmpSum = tmpSum + glj["quantity"] * price;
-                glj = null;
             };
             };
             rst = tmpSum;
             rst = tmpSum;
         };
         };

+ 2 - 2
test/tmp_data/test_ration_calc/ration_calc_base.js

@@ -60,7 +60,7 @@ let rationCalcBase = [
     },{
     },{
         'dispName': '人工费价差',
         'dispName': '人工费价差',
         'calcFun': 'diff',
         'calcFun': 'diff',
-        'calcType': budgetCalc,
+        'calcType': diffCalc,
         'gljTypes': [gljType.LABOUR]
         'gljTypes': [gljType.LABOUR]
     },{
     },{
         'dispName': '材料费价差',
         'dispName': '材料费价差',
@@ -75,7 +75,7 @@ let rationCalcBase = [
     },{
     },{
         'dispName': '主材费',
         'dispName': '主材费',
         'calcFun': 'budget',
         'calcFun': 'budget',
-        'calcType': diffCalc,
+        'calcType': budgetCalc,
         'gljTypes': [gljType.MAIN_MATERIAL]
         'gljTypes': [gljType.MAIN_MATERIAL]
     },{
     },{
         'dispName': '设备费',
         'dispName': '设备费',

+ 10 - 14
web/building_saas/fee_rates/fee_rate.html

@@ -17,23 +17,19 @@
     </div>
     </div>
 </div>
 </div>
 <div class="container-fluid">
 <div class="container-fluid">
-    <div class="row">
-        <div class="col-lg-12 p-0">
-            <div class="row">
-                <div class="col-lg-6">
-                    <div class="form-inline py-1">
-                        <label class="mx-2" >基于&nbsp;&nbsp;<span id="feeRateLibName">重庆渝建发[2016]35号</span></label>
-                        <a class="btn btn-sm ml-1" href="#" data-toggle="modal" data-target="#set-lv" id="setNewFeeRate"><i class="fa fa-cog"></i> 重选标准</a>
-                    </div>
-                    <div class=" grid  main-data-top" id="divFee"></div>
-                </div>
-                <div class="col-lg-4">
-                    <div class="py-1"><input type="checkbox" id="cascadeSet" checked >统一设置相同参数</div>
-                    <div class="grid  main-data-top py-1" id="subRate"></div>
+        <div class="row">
+            <div class="main-content col-lg-8 p-0">
+                <div class="form-inline py-1">
+                    <label class="mx-2" >基于&nbsp;&nbsp;<span id="feeRateLibName">重庆渝建发[2016]35号</span></label>
+                    <a class="btn btn-sm ml-1" href="#" data-toggle="modal" data-target="#set-lv" id="setNewFeeRate"><i class="fa fa-cog"></i> 重选标准</a>
                 </div>
                 </div>
+                <div class=" grid  main-data-full-fl" id="divFee"></div>
+            </div>
+            <div class="col-lg-4 p-0">
+                <div class="py-1"><input type="checkbox" id="cascadeSet" checked >统一设置相同参数</div>
+                <div class="grid  py-1" id="subRate"></div>
             </div>
             </div>
         </div>
         </div>
-    </div>
 </div>
 </div>
 <!--弹出更换-->
 <!--弹出更换-->
 <div class="modal fade" id="change-lv" data-backdrop="static">
 <div class="modal fade" id="change-lv" data-backdrop="static">

+ 7 - 6
web/building_saas/main/js/models/calc_program.js

@@ -122,7 +122,7 @@ let calcTemplates = [
                 feeRateID: 101,
                 feeRateID: 101,
                 expression: "@('3') + @('5') + @('7')",
                 expression: "@('3') + @('5') + @('7')",
                 compiledExpr: "",
                 compiledExpr: "",
-                statement: "定额基价人工费",
+                statement: "[定额基价人工费]+[定额基价材料费]+[定额基价机械费]",
                 memo: "渝建发[2014]27号"
                 memo: "渝建发[2014]27号"
             },
             },
             {
             {
@@ -134,7 +134,7 @@ let calcTemplates = [
                 feeRateID: 301,
                 feeRateID: 301,
                 expression: "@('3') + @('5') + @('7')",
                 expression: "@('3') + @('5') + @('7')",
                 compiledExpr: "",
                 compiledExpr: "",
-                statement: "定额基价人工费"
+                statement: "[定额基价人工费]+[定额基价材料费]+[定额基价机械费]"
             },
             },
             {
             {
                 ID: "13",
                 ID: "13",
@@ -145,7 +145,7 @@ let calcTemplates = [
                 feeRateID: 701,
                 feeRateID: 701,
                 expression: "@('3') + @('5') + @('7')",
                 expression: "@('3') + @('5') + @('7')",
                 compiledExpr: "",
                 compiledExpr: "",
-                statement: "定额基价人工费",
+                statement: "[定额基价人工费]+[定额基价材料费]+[定额基价机械费]",
                 memo: "同定额包干费"
                 memo: "同定额包干费"
             },
             },
             {
             {
@@ -164,7 +164,8 @@ let calcTemplates = [
                 name: "人工费价差",
                 name: "人工费价差",
                 fieldName: "labourDiff",
                 fieldName: "labourDiff",
                 dispExpr: "[人工费价差]",
                 dispExpr: "[人工费价差]",
-                expression: "base('市场价格人工费') - base('定额基价人工费(调整后)')",
+                // expression: "base('市场价格人工费') - base('定额基价人工费(调整后)')",
+                expression: "base('人工费价差')",
                 compiledExpr: "",
                 compiledExpr: "",
                 statement: "市场价格人工费-调整后的定额人工费(基价)"
                 statement: "市场价格人工费-调整后的定额人工费(基价)"
             },
             },
@@ -174,7 +175,7 @@ let calcTemplates = [
                 name: "材料费价差",
                 name: "材料费价差",
                 fieldName: "materialDiff",
                 fieldName: "materialDiff",
                 dispExpr: "[材料费价差]",
                 dispExpr: "[材料费价差]",
-                expression: "base('市场价格材料费') - base('定额基价材料费(调整后)')",
+                expression: "base('材料费价差')",
                 compiledExpr: "",
                 compiledExpr: "",
                 statement: "市场价格材料费-定额基价材料费"
                 statement: "市场价格材料费-定额基价材料费"
             },
             },
@@ -184,7 +185,7 @@ let calcTemplates = [
                 name: "机械费价差",
                 name: "机械费价差",
                 fieldName: "machineDiff",
                 fieldName: "machineDiff",
                 dispExpr: "[机械费价差]",
                 dispExpr: "[机械费价差]",
-                expression: "base('市场价格机械费') - base('定额基价机械费(调整后)')",
+                expression: "base('机械费价差')",
                 compiledExpr: "",
                 compiledExpr: "",
                 statement: "市场价格机械费-调整后的定额基价机械费(基价)"
                 statement: "市场价格机械费-调整后的定额基价机械费(基价)"
             },
             },

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

@@ -310,7 +310,8 @@ var ration_glj = {
                 market_price:newVal,
                 market_price:newVal,
                 code:recode.code,
                 code:recode.code,
                 name:recode.name,
                 name:recode.name,
-                project_id:recode.projectID
+                project_id:recode.projectID,
+                repositoryId:recode.repositoryId
             };
             };
          /*   code: '01010101',
          /*   code: '01010101',
                 market_price: '40',
                 market_price: '40',

+ 1 - 1
web/building_saas/main/js/views/fee_rate_view.js

@@ -236,7 +236,7 @@ var feeRateObject={
         }
         }
     },
     },
     getFeeRateStandards:function (callback) {
     getFeeRateStandards:function (callback) {
-        CommonAjax.post('/feeRates/getFeeRateStandards', {"rootProjectID": this.activateFeeRate.rootProjectID}, function (data) {
+        CommonAjax.post('/feeRates/getFeeRateStandards', {"projectID": projectObj.project.ID()}, function (data) {
             if (data) {
             if (data) {
                 callback(data);
                 callback(data);
             }
             }

+ 1 - 1
web/building_saas/main/js/views/glj_view.js

@@ -35,7 +35,7 @@ var gljOprObj = {
             lockedCells: [{row: -1, col: 3, rowCount: -1, colCount: 1}],
             lockedCells: [{row: -1, col: 3, rowCount: -1, colCount: 1}],
             lockColumns:[0,1,2,3,4,5,7,8,9,10,12]
             lockColumns:[0,1,2,3,4,5,7,8,9,10,12]
         },
         },
-        notEditedType: ['混凝土','砂浆','配合比','机械']
+        notEditedType: ['砼','桨','配比','机']
     },
     },
     coeSetting:{
     coeSetting:{
         header:[
         header:[

+ 3 - 0
web/building_saas/pm/js/pm_main.js

@@ -820,6 +820,9 @@ function AddFolder() {
 function GetUpdateData(parent, next, name, property, newId, type) {
 function GetUpdateData(parent, next, name, property, newId, type) {
     let data = [];
     let data = [];
     let updateData = {};
     let updateData = {};
+    let rootProject = parent ? parent.parent : Tree._root;
+    let rootProjectID = rootProject ? rootProject.id() : -1;
+    property.rootProjectID=rootProjectID;
     updateData['updateType'] = type.updateType === undefined ? 'new' : type.updateType;
     updateData['updateType'] = type.updateType === undefined ? 'new' : type.updateType;
     updateData['updateData'] = {};
     updateData['updateData'] = {};
     if (newId !== '') {
     if (newId !== '') {