zhangweicheng 6 years ago
parent
commit
15263b972e

+ 36 - 5
modules/fee_rates/facade/fee_rates_facade.js

@@ -33,7 +33,8 @@ module.exports={
     updateFeeRates:updateFeeRates,
     updateFeeRates:updateFeeRates,
     updateRates:update_rates,
     updateRates:update_rates,
     feeRateFileSaveAs:feeRateFileSaveAs,
     feeRateFileSaveAs:feeRateFileSaveAs,
-    getFeeRateByID:getFeeRateByID
+    getFeeRateByID:getFeeRateByID,
+    changeFeeRateFile:changeFeeRateFile
 };
 };
 let operationMap={
 let operationMap={
     'ut_create':create_fee_rate,
     'ut_create':create_fee_rate,
@@ -401,7 +402,7 @@ async function updateFeeRates(datas){//批量更新费率
 async function changeFeeRateFileFromCurrent(jdata){
 async function changeFeeRateFileFromCurrent(jdata){
     let data = JSON.parse(jdata);
     let data = JSON.parse(jdata);
     let newFeeRateFile=data.newFeeRateFile;
     let newFeeRateFile=data.newFeeRateFile;
-    let result = await  projectsModel.findOneAndUpdate({ID:data.projectID},{'property.feeFile':newFeeRateFile});
+    await changeFeeRateFile(data,newFeeRateFile,0);
     let feeRateData = await feeRateFileModel.findOne({'ID':newFeeRateFile.id});
     let feeRateData = await feeRateFileModel.findOne({'ID':newFeeRateFile.id});
     if(feeRateData!==null){
     if(feeRateData!==null){
         let feeRate = await feeRateModel.findOne({ID:feeRateData.feeRateID});
         let feeRate = await feeRateModel.findOne({ID:feeRateData.feeRateID});
@@ -412,10 +413,40 @@ async function changeFeeRateFileFromCurrent(jdata){
     return feeRateData;
     return feeRateData;
 }
 }
 
 
+async function changeFeeRateFile(projectData,feeRateFile,type,userID) {
+    let temFile=null,newFeeRateFile = {};
+    if(type == 0){//从本建设项目中替换,直接赋值
+        temFile =  feeRateFile
+    }else if(type == 1) {//从其它建设项目中复制
+        let oldFeeRateFile = await feeRateFileModel.findOne({'ID':feeRateFile.id});
+        let feeRate = await feeRateModel.findOne({ID:oldFeeRateFile.feeRateID});
+        let newFeeRate={};
+        newFeeRate.ID=uuidV1();
+        newFeeRate.rates =feeRate.rates;
+        newFeeRateFile.ID = uuidV1();
+        newFeeRateFile.name = feeRateFile.name;
+        newFeeRateFile.userID = userID;
+        newFeeRateFile.libName = oldFeeRateFile.libName;
+        newFeeRateFile.libID=oldFeeRateFile.libID;
+        newFeeRateFile.rootProjectID = projectData.rootProjectID;
+        newFeeRateFile.feeRateID =newFeeRate.ID;
+        await feeRateModel.create(newFeeRate);
+        await feeRateFileModel.create(newFeeRateFile);
+        temFile={
+            id:newFeeRateFile.ID,
+            name:feeRateFile.name
+        }
+        newFeeRateFile.rates=newFeeRate.rates;//构建返回数据
+    }
+    await  projectsModel.findOneAndUpdate({ID:projectData.projectID},{'property.feeFile':temFile});
+    return newFeeRateFile
+}
+
+
 async function changeFeeRateFileFromOthers(jdata) {
 async function changeFeeRateFileFromOthers(jdata) {
     let data = JSON.parse(jdata);
     let data = JSON.parse(jdata);
-    console.log(data);
-    let feeRateFile = await feeRateFileModel.findOne({'ID':data.feeRateFileID});
+    let newFeeRateFile = await changeFeeRateFile(data,{id:data.feeRateFileID,name:data.name},1,data.userID);
+   /* let feeRateFile = await feeRateFileModel.findOne({'ID':data.feeRateFileID});
     let feeRate = await feeRateModel.findOne({ID:feeRateFile.feeRateID});
     let feeRate = await feeRateModel.findOne({ID:feeRateFile.feeRateID});
     let newFeeRate={};
     let newFeeRate={};
     newFeeRate.ID=uuidV1();
     newFeeRate.ID=uuidV1();
@@ -435,7 +466,7 @@ async function changeFeeRateFileFromOthers(jdata) {
         name:data.name
         name:data.name
     }
     }
     await projectsModel.findOneAndUpdate({ID:data.projectID},{'property.feeFile':feeFile});
     await projectsModel.findOneAndUpdate({ID:data.projectID},{'property.feeFile':feeFile});
-    newFeeRateFile.rates=newFeeRate.rates;
+    newFeeRateFile.rates=newFeeRate.rates;*/
     newFeeRateFile.usageProjects=await getUsageProjects(newFeeRateFile.ID);
     newFeeRateFile.usageProjects=await getUsageProjects(newFeeRateFile.ID);
     return newFeeRateFile;
     return newFeeRateFile;
 }
 }

+ 10 - 10
modules/main/facade/project_facade.js

@@ -24,7 +24,8 @@ module.exports = {
     updateNodes:updateNodes,
     updateNodes:updateNodes,
     calcInstallationFee:calcInstallationFee,
     calcInstallationFee:calcInstallationFee,
     saveProperty: saveProperty,
     saveProperty: saveProperty,
-    getDefaultColSetting: getDefaultColSetting
+    getDefaultColSetting: getDefaultColSetting,
+    markProjectsToChange:markProjectsToChange
 };
 };
 
 
 async function calcInstallationFee(data) {
 async function calcInstallationFee(data) {
@@ -214,9 +215,7 @@ async function updateNodes(datas){
 
 
 //data = {feeRateID:111111,projectID:1245}; type = feeRate
 //data = {feeRateID:111111,projectID:1245}; type = feeRate
 async function markUpdateProject(data,type) {
 async function markUpdateProject(data,type) {
-    let tasks=[];
     let query = {deleteInfo:null};
     let query = {deleteInfo:null};
-    let result = null;
     if(type=="feeRate"){//更改了费率
     if(type=="feeRate"){//更改了费率
         query['property.feeFile.id'] = data.feeRateID;
         query['property.feeFile.id'] = data.feeRateID;
     }
     }
@@ -224,15 +223,16 @@ async function markUpdateProject(data,type) {
         query['property.unitPriceFile.id'] = data.unitFileID;//unitPriceFile
         query['property.unitPriceFile.id'] = data.unitFileID;//unitPriceFile
     }
     }
     let projects = await projectsModel.find(query);
     let projects = await projectsModel.find(query);
+    return await markProjectsToChange(projects,type,data.projectID);
+}
+
+async function markProjectsToChange(projects,type,extProjectID){
+    let tasks=[];
     for(let p of projects){
     for(let p of projects){
-        if(p.ID!=data.projectID){//当前项目不用更新
-            tasks.push(generateMarkTask(type,p.ID));
-        }
-    }
-    if(tasks.length>0){
-        result = await projectsModel.bulkWrite(tasks);
+        if(extProjectID && p.ID===extProjectID) continue;//排除当前项目
+        tasks.push(generateMarkTask(type,p.ID));
     }
     }
-    return result;
+    return tasks.length>0 ? await projectsModel.bulkWrite(tasks):null;
 }
 }
 
 
 async function removeProjectMark(projectID) {
 async function removeProjectMark(projectID) {

+ 2 - 0
modules/pm/controllers/pm_controller.js

@@ -650,6 +650,8 @@ module.exports = {
         try{
         try{
             let data = JSON.parse(req.body.data);
             let data = JSON.parse(req.body.data);
             console.log(data);
             console.log(data);
+            await pm_facade.changeFile(data.projects,data.userID,data.fileID,data.name,data.from,data.type);
+
            // let summaryInfo = await pm_facade.getSummaryInfo(data.projectIDs);
            // let summaryInfo = await pm_facade.getSummaryInfo(data.projectIDs);
             callback(req, res, 0, 'success', []);
             callback(req, res, 0, 'success', []);
         }
         }

+ 19 - 2
modules/pm/facade/pm_facade.js

@@ -4,6 +4,7 @@
 let mongoose = require('mongoose');
 let mongoose = require('mongoose');
 let _ = require("lodash");
 let _ = require("lodash");
 let feeRate_facade = require('../../fee_rates/facade/fee_rates_facade');
 let feeRate_facade = require('../../fee_rates/facade/fee_rates_facade');
+let project_facade = require('../../main/facade/project_facade');
 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 projectModel = mongoose.model('projects');
 let projectModel = mongoose.model('projects');
@@ -23,6 +24,7 @@ let rationGLJModel = mongoose.model('ration_glj');
 let rationCoeModel = mongoose.model('ration_coe');
 let rationCoeModel = mongoose.model('ration_coe');
 let rationInstallationModel = mongoose.model('ration_installation');
 let rationInstallationModel = mongoose.model('ration_installation');
 let quantityDetailModel = mongoose.model('quantity_detail');
 let quantityDetailModel = mongoose.model('quantity_detail');
+let rationTemplateModel = mongoose.model('ration_template');
 let userModel = mongoose.model('user');
 let userModel = mongoose.model('user');
 let compleGljSectionModel = mongoose.model('complementary_glj_section');
 let compleGljSectionModel = mongoose.model('complementary_glj_section');
 let compleGljSectionTModel = mongoose.model('complementary_glj_section_templates');
 let compleGljSectionTModel = mongoose.model('complementary_glj_section_templates');
@@ -206,7 +208,8 @@ async function copyProject(userID, compilationID,data,newProjectID = null) {
         copyRationSubList(originalID,newProjectID,billMap.uuidMaping,rationMap.uuidMaping,projectGLJMap.IDMap,rationGLJModel),
         copyRationSubList(originalID,newProjectID,billMap.uuidMaping,rationMap.uuidMaping,projectGLJMap.IDMap,rationGLJModel),
         copyRationSubList(originalID,newProjectID,billMap.uuidMaping,rationMap.uuidMaping,projectGLJMap.IDMap,rationCoeModel),
         copyRationSubList(originalID,newProjectID,billMap.uuidMaping,rationMap.uuidMaping,projectGLJMap.IDMap,rationCoeModel),
         copyRationSubList(originalID,newProjectID,billMap.uuidMaping,rationMap.uuidMaping,projectGLJMap.IDMap,quantityDetailModel),
         copyRationSubList(originalID,newProjectID,billMap.uuidMaping,rationMap.uuidMaping,projectGLJMap.IDMap,quantityDetailModel),
-        copyRationSubList(originalID,newProjectID,billMap.uuidMaping,rationMap.uuidMaping,projectGLJMap.IDMap,rationInstallationModel)
+        copyRationSubList(originalID,newProjectID,billMap.uuidMaping,rationMap.uuidMaping,projectGLJMap.IDMap,rationInstallationModel),
+        copyRationSubList(originalID,newProjectID,billMap.uuidMaping,rationMap.uuidMaping,projectGLJMap.IDMap,rationTemplateModel)
     ];
     ];
     if(originalProperty.calcProgramFile){
     if(originalProperty.calcProgramFile){
         copyTasks.push(commonCopy(newProjectID,originalProperty.calcProgramFile.ID,calcProgramFileID,calcProgramsModel));
         copyTasks.push(commonCopy(newProjectID,originalProperty.calcProgramFile.ID,calcProgramFileID,calcProgramsModel));
@@ -294,6 +297,7 @@ async function copyRations(newProjectID,billsIDMap,rationMap,projectGLJIDMap) {
         if(doc.billsItemID){
         if(doc.billsItemID){
             doc.billsItemID = billsIDMap[doc.billsItemID]?billsIDMap[doc.billsItemID]:-1;
             doc.billsItemID = billsIDMap[doc.billsItemID]?billsIDMap[doc.billsItemID]:-1;
         }
         }
+        if(doc.referenceRationID) doc.referenceRationID = uuidMaping[doc.referenceRationID]?uuidMaping[doc.referenceRationID]:undefined;
         //绑定定类型的工料机 项目工料机ID
         //绑定定类型的工料机 项目工料机ID
         doc.type==3&&doc.projectGLJID&&projectGLJIDMap[doc.projectGLJID]?doc.projectGLJID = projectGLJIDMap[doc.projectGLJID]:'';
         doc.type==3&&doc.projectGLJID&&projectGLJIDMap[doc.projectGLJID]?doc.projectGLJID = projectGLJIDMap[doc.projectGLJID]:'';
     }
     }
@@ -963,6 +967,19 @@ async function copyCompleGljSection(userId, compilationId) {
     }
     }
 }
 }
 
 
-async function changeFile(datas,from,type){//from:feeRate或单价文件,type从单前建设项目还是从其它建设项目中复制
+async function changeFile(datas,userID,fileID,name,from,type){//from 费率或单价文件,type从单前建设项目还是从其它建设项目中复制
+    let projectIDs = [],newFile = {id:fileID,name:name};//计录从其它项目中复制的文件,选中多个的时候只需复制一次
+    let projectUpdateType = from == "feeRateFile"?"feeRate":"unitFile";
+    if(from == "feeRateFile"){
+        for(let d of datas){
+            let tem_file = await feeRate_facade.changeFeeRateFile(d, newFile,type,userID);
+            if(type == 1 && tem_file){//从建设项目复制时,只有第一次需要复制,剩下的就相当于使用同个建设项目的情况了
+                newFile = {id:tem_file.ID,name:tem_file.name};
+                type = 0;
+            }
+            projectIDs.push({ID:d.projectID})
+        }
+    }
+    await project_facade.markProjectsToChange(projectIDs,projectUpdateType)//项目标记为待刷新状态
 
 
 }
 }

+ 10 - 7
web/building_saas/pm/js/pm_newMain.js

@@ -1227,28 +1227,31 @@ const projTreeObj = {
         }
         }
     },
     },
     confirmFileChange :async function(){
     confirmFileChange :async function(){
-        let selectProjects =[],fileID=null,from = $("#mr_from").val();
+        let selectProjects =[],fileID=null,from = $("#mr_from").val(),name='';
         for(let i of this.replaceTree.items){
         for(let i of this.replaceTree.items){
-            if(i.data.selected === 1) selectProjects.push(i)
+            if(i.data.selected === 1) selectProjects.push({projectID:i.data.ID,rootProjectID:i.data['property']['rootProjectID']})
         }
         }
         if(selectProjects.length > 0){
         if(selectProjects.length > 0){
             let type = parseInt($("input[name='select_from']:checked").val());//0 从当前建设项目,1从其它建设项目中复制
             let type = parseInt($("input[name='select_from']:checked").val());//0 从当前建设项目,1从其它建设项目中复制
             if(type == 0){
             if(type == 0){
                 fileID = $("#currentOptions").val();
                 fileID = $("#currentOptions").val();
+                name = $("#currentOptions").find("option:selected").text()
             }else {
             }else {
                 fileID = $("#otherFileOptions").val();
                 fileID = $("#otherFileOptions").val();
+                name = $("#otherFileOptions").find("option:selected").text()
             }
             }
             if(fileID == null || fileID == undefined|| fileID ==""){
             if(fileID == null || fileID == undefined|| fileID ==""){
                 alert("请选择替换文件")
                 alert("请选择替换文件")
             }
             }
-            await projTreeObj.postChangeFile({projects:selectProjects,fileID:fileID,type:type,from:from});
-
-
-
+            await projTreeObj.postChangeFile({projects:selectProjects,fileID:fileID,name:name,type:type,from:from});
         }
         }
     },
     },
     postChangeFile:async function(data){
     postChangeFile:async function(data){
-       let result = await ajaxPost("/pm/api/changeFile",data);
+        data.user_id = userID;
+        $.bootstrapLoading.start();
+        let result = await ajaxPost("/pm/api/changeFile",data);
+        $.bootstrapLoading.end();
+        projTreeObj.refreshWhenFileDateChange(data.projects[0].projectID);
         console.log(result);
         console.log(result);
     },
     },
     checkFileName:async function (fileID,name,type) {
     checkFileName:async function (fileID,name,type) {