Bläddra i källkod

feat: 导入电子招标文件、控制价文件、导入excel清单,导入后分部分项工程下的分项应默认有一定额空行,方便用户直接输入

TASK #3496
vian 4 år sedan
förälder
incheckning
1036196820

+ 19 - 9
modules/main/controllers/bills_controller.js

@@ -12,16 +12,9 @@ let raiton_facade = require("../facade/ration_facade");
 let stdBillsModel = mongoose.model('std_bills_lib_bills');
 let stdBillJobsModel = mongoose.model('std_bills_lib_jobContent');
 let stdBillCharacterModel = mongoose.model('std_bills_lib_itemCharacter');
-const { fixedFlag } = require('../../../public/common_constants');
+const { fixedFlag, billType, rationType } = require('../../../public/common_constants');
 let LZString = require('lz-string');
 const uuidV1 = require('uuid/v1');
-const billType ={
-    DXFY:1,//大项费用
-    FB:2,//分部
-    FX:3,//分项
-    BILL:4,//清单
-    BX:5//补项
-};
 //上传的09表、广联达表
 const uploadType = {lj: 'lj', gld: 'gld'};
 // 上传控件
@@ -317,11 +310,28 @@ async function importSheet(position, excelBills, userID, projectID, stdData){
         let deleteDatas = await billsData.deepDeleteBill([fixedBill], userID);
         //新增清单数据
         await billsData.importBills(excelBills);
+        // 如果导入招标、控制价文件、每个分项底下自动生成一条空定额
+        const rations = [];
+        excelBills.forEach(bills => {
+            if (bills.type === billType.FX) {
+                const emptyRation = {
+                    projectID: bills.projectID,
+                    ID: uuidV1(),
+                    billsItemID: bills.ID,
+                    serialNo: 1,
+                    type: rationType.ration,
+                };
+                rations.push(emptyRation);
+            }
+        });
+        if (rations.length) {
+            await ration_model.model.insertMany(rations);
+        }
         //返回数据以更新前端
         if(insertFixedBill){
             excelBills.push(insertFixedBill);
         }
-        return {fixedBill: fixedBill, insert: {bill: excelBills, ration: []}, remove: {bill: deleteDatas.bill, ration: deleteDatas.ration}};
+        return {fixedBill: fixedBill, insert: {bill: excelBills, ration: rations}, remove: {bill: deleteDatas.bill, ration: deleteDatas.ration}};
 }
 
 

+ 12 - 0
web/building_saas/main/js/views/project_view.js

@@ -3284,6 +3284,18 @@ function doAfterImportPosition(positionData){
         }
         ProjectController.syncDisplayNewNodes(projectObj.mainController, newNodes);
     }
+    if (positionData.insert.ration.length) {
+        const rationNodes = [];
+        positionData.insert.ration.forEach(ration => {
+            projectObj.project.Ration.datas.push(ration);
+            const rationNode = projectObj.project.mainTree.insert(ration.billsItemID, -1, ration.ID);
+            rationNode.source = ration;
+            rationNode.sourceType = projectObj.project.Ration.getSourceType();
+            rationNode.data = ration;
+            rationNodes.push(rationNode);
+        });
+        ProjectController.syncDisplayNewNodes(projectObj.mainController, rationNodes);
+    }
 }
 //导入后更新操作
 function doAfterImport(resData){

+ 11 - 0
web/over_write/js/chongqing_2018_import.js

@@ -1492,6 +1492,17 @@ const importXML = (() => {
             delete bills.items;
             delete bills.rations;
             rst.bills.push(bills);
+            // 如果导入招标、控制价文件、每个分项底下自动生成一条空定额
+            if (importFileKind !== FileKind.tender && bills.type === billType.FX) {
+                const emptyRation = {
+                    projectID: tenderData.ID,
+                    ID: uuid.v1(),
+                    billsItemID: bills.ID,
+                    serialNo: 1,
+                    type: rationType.ration,
+                };
+                rst.ration.push(emptyRation);
+            }
         });
         return rst;
         function handleRation(billsData) {

+ 34 - 22
web/over_write/js/guangdong_2018_import.js

@@ -1520,29 +1520,41 @@ const importXML = (() => {
             rationQuantityDetails: [],
         };
         billsData
-            .filter(bills => bills.rations && bills.rations.length)
             .forEach(bills => {
-                bills.rations.forEach(ration => {
-                    // TODO 取费专业不知如何取,暂时取单位工程取费专业(导出的文件没有可用的取费专业字段,因此需要后端匹配标准定额)
-                    // 如果标准定额有取费专业,则会替换掉这里设置的取费专业
-                    ration.programID = tenderData.property.projectEngineering;
-                    ration.ID = uuid.v1();
-                    ration.projectID = tenderData.ID;
-                    ration.billsItemID = bills.ID;
-                    ration.contain = getContain(bills, ration);
-                    // 工程量明细
-                    transformQuantityDetails(tenderData.ID, ration.quantityDetails, ration.ID, 'rationID');
-                    ration.quantityEXP = getQuantityEXP(bills, ration);
-                    if (ration.quantityDetails) {
-                        rst.rationQuantityDetails.push(...ration.quantityDetails);
-                    }
-                    rst.ration.push(ration);
-                    // 定额人材机
-                    rst.rationGLJ.push(...transformRationGLJs(bills, ration));
-                    // 定额系数
-                    rst.rationCoe.push(generateRationCoe(ration));
-                });
-            });
+                if (bills.rations && bills.rations.length) {
+                    bills.rations.forEach(ration => {
+                        // TODO 取费专业不知如何取,暂时取单位工程取费专业(导出的文件没有可用的取费专业字段,因此需要后端匹配标准定额)
+                        // 如果标准定额有取费专业,则会替换掉这里设置的取费专业
+                        ration.programID = tenderData.property.projectEngineering;
+                        ration.ID = uuid.v1();
+                        ration.projectID = tenderData.ID;
+                        ration.billsItemID = bills.ID;
+                        ration.contain = getContain(bills, ration);
+                        // 工程量明细
+                        transformQuantityDetails(tenderData.ID, ration.quantityDetails, ration.ID, 'rationID');
+                        ration.quantityEXP = getQuantityEXP(bills, ration);
+                        if (ration.quantityDetails) {
+                            rst.rationQuantityDetails.push(...ration.quantityDetails);
+                        }
+                        rst.ration.push(ration);
+                        // 定额人材机
+                        rst.rationGLJ.push(...transformRationGLJs(bills, ration));
+                        // 定额系数
+                        rst.rationCoe.push(generateRationCoe(ration));
+                    });
+                } else if (importFileKind !== FileKind.tender && bills.type === billType.FX) {
+                    // 如果导入招标、控制价文件、每个分项底下自动生成一条空定额
+                    const emptyRation = {
+                        projectID: tenderData.ID,
+                        ID: uuid.v1(),
+                        billsItemID: bills.ID,
+                        serialNo: 1,
+                        type: rationType.ration,
+                        jobContentText: bills.jobContent && bills.jobContent[0] && bills.jobContent[0].content || ''
+                    };
+                    rst.ration.push(emptyRation);
+                }
+            })
         return rst;
 
         // 含量:定额工程量/清单工程量