蔡德晨 5 vuotta sitten
vanhempi
commit
e3b28afec6

+ 1 - 0
src/main/java/com/jeeplus/modules/sg/overheadline/mapper/OverheadLineMapper.java

@@ -19,4 +19,5 @@ public interface OverheadLineMapper {
     void updateDate(JkxlDetailFee jkxlDetailFee);
     void updateList(@Param("list") List<JkxlDetailFee> list);
     void delete(String id);
+
 }

+ 1 - 1
src/main/java/com/jeeplus/modules/sg/overheadline/mapper/xml/OverheadLineMapper.xml

@@ -8,6 +8,7 @@
          a.short_id as wbsCode,
          a.parent_node as parentNode,
          a.fee_type as feeType,
+         a.level as hierarchy,
          b.id,
          b.original_total_cost as originalTotalCost,
          b.original_rg_cost as originalRgCost,
@@ -75,7 +76,6 @@
 		 </where>
 	</select>
 
-
 	<select id="findList"  resultType="com.jeeplus.modules.sg.overheadline.entity.JkxlDetailFee">
 		 SELECT
 		 a.id as wbsId,

+ 471 - 0
src/main/java/com/jeeplus/modules/sg/overheadline/service/OverheadLineService.java

@@ -941,5 +941,476 @@ public List<JkxlDetailFee> findList(String id,String type){
         feeAdjustService.save(jkxlAdjustFee2);
     }
 
+    //通信线路保存数据
+    @Transactional(readOnly = false)
+    public void saveTx(MultipartFile file,WbsItem wbsItem) throws IOException, InvalidFormatException {
+        String id = wbsItem.getId();
+        String type = wbsItem.getType();
+        WbsItem wbsItem1 = itemService.get(id);
+        if(wbsItem1 == null){
+            wbsItem.setDelFlag("0");
+            //保存项目
+            itemService.save(wbsItem);
+        }
+        List<JkxlDetailFee> jkxlDetailFees = overheadLineMapper.findList(id,type);
+        if(jkxlDetailFees != null && jkxlDetailFees.size()>0){
+            overheadLineMapper.delete(id);
+            feeAdjustService.delete(id);
+            settlementService.delete(id);
+        }
+        //获取调差系数
+        double[] tcRate = new double[3];
+        tcRate[0] = ruleRatioService.getValueByName(BashInfo.RATIO_RGTC).getValue()/100;
+        tcRate[1] = ruleRatioService.getValueByName(BashInfo.RATIO_CLTC).getValue()/100;
+        tcRate[2] = ruleRatioService.getValueByName(BashInfo.RATIO_JXTC).getValue()/100;
+        //读取表格
+        ImportExcel total = new ImportExcel(file,1,new String[]{BashInfo.SHEET_HZB,BashInfo.SHEET_HZB1,BashInfo.SHEET_HZB2},true );  //工程项目竣工结算汇总表
+        ImportExcel csqd = new ImportExcel(file,1,new String[]{BashInfo.SHEET_CSB,BashInfo.SHEET_CSB1},true);  // 措施项目清单计价表(一)
+        ImportExcel csqd2 = new ImportExcel(file,1,BashInfo.SHEET_CSB2,false);  // 措施项目清单计价表(二)
+        ImportExcel gf = new ImportExcel(file,1,BashInfo.SHEET_GFQD,true);  //规费项目清单计价表
+        ImportExcel qt = new ImportExcel(file,1,BashInfo.SHEET_QTFY,true);  //其他项目清单计价表
+//        ImportExcel fbrcg = new ImportExcel(file,1,new String[]{BashInfo.SHEET_FBRCG,BashInfo.SHEET_FBRCG1,BashInfo.SHEET_FBRCG2,BashInfo.SHEET_ZBRCG,BashInfo.SHEET_ZBRCG1},true);   //发包人采购材料设备计价表
+        ImportExcel cbrsb = new ImportExcel(file,1,new String[]{BashInfo.SHEET_TBRCG,BashInfo.SHEET_CBRCG},false);//承包人采购设备计价表
+        List<Settlement> settlementList =  SettementUtil.getComparison(total);
+        double cbperson = 0.0;
+        double word1total =  ExcelUtil.getDouble(csqd,BashInfo.QT_HJ,0,4);//获取措施费清单计价表一
+        double word2total=0.0;
+        double csFees2 = ExcelUtil.getDouble(total,BashInfo.CSXM2,1,2);//措施费二
+        double otherDlTotal =  ExcelUtil.getDouble(qt,BashInfo.QT_HJ,0,2);//获取其他项目费合计
+        double feesDlCount =  ExcelUtil.getDouble(gf,BashInfo.QT_HJ,0,4);//获取规费合计
+        int[] comlumn2 = {12,15};//定义所要数组
+        List<JkxlAdjustFee> wsbFees = BashInfo.getWsbFee(total);
+        double wsbfee = 0.00;
+        double jzgc = ExcelUtil.getDouble(total,BashInfo.HZ_JZGC,1,2);//汇总表建筑金额
+        double azgc = ExcelUtil.getDouble(total,BashInfo.HZ_AZGC,1,2);//汇总表安装金额
+        double texRate = ExcelUtil.getTexRate(total); //获取税率
+        double fbfxFee = ExcelUtil.getDouble(total,BashInfo.JS_FBFX,1,2);  //分部分项工程费
+        double jzcsRate = BashInfo.getJzRate(csqd); //获取建筑措施费率
+        double[] azcsRate = BashInfo.getAzRate(csqd); //获取安装措施费率
+        double[] jzgfRate = BashInfo.getJzGfRate(gf);  //获取建筑规费率
+        double[] azgfRate = BashInfo.getAzGfRate(gf);  //获取安装规费率
+        double[] qtFees = BashInfo.getQtFees(qt);  //获取其他费用
+        double gcjsFee = BashInfo.getGcjsFee(total);  //获取工程结算价
+        double tax = 0.00; //税金
+        double totalfee = 0.00;  //合计
+        //获取补税额
+        double btex = BashInfo.getBtex(total);
+        //承包人采购设备费
+        if(ImportExcel.getSheet(cbrsb) != null){
+            cbperson = ExcelUtil.getDouble(cbrsb,BashInfo.QT_HJ,0,6);//投标人合计
+        }
+        double cbrfee = ExcelUtil.getDouble(total,BashInfo.QT_CBRSB,1,2);
+        //安装措施费
+        double azCsFee = BashInfo.getAzCsfee(csqd);
+        double[] csJzFee = BashInfo.getJzCsfee(csqd); //建筑措施费
+        //规费
+        double azGf = BashInfo.getAzGf(gf);
+        //获取结算表中基础数据
+        double jsCs = ExcelUtil.getDouble(total,BashInfo.JS_CSXM,1,2);
+        double jsGf = ExcelUtil.getDouble(total,BashInfo.JS_GF,1,2);
+//        double jsTex = ExcelUtil.getTex(total);
+        List<JkxlDetailFee> list = new ArrayList<>();
+        if(jzgc !=0.00 && azgc == 0.00){
+            ImportExcel jzqd = new ImportExcel(file,1,BashInfo.SHEET_JZFBFXJJ,true);  //建筑分部分项工程量清单计价表
+            ImportExcel jzhz = new ImportExcel(file,1,SubstationInfo.SHEET_JZHZB,true );   //通信线路建筑工程费用汇总表
+            double built1Total = ExcelUtil.getDouble(jzhz,BashInfo.QT_HJ,0,2);//建筑分布分项工程量清单计价表合计
+            double[] builtTotal={built1Total,0.00};
+            double[] division1total=ExcelUtil.getDoubleArray(jzqd,SubstationInfo.JZMX_BJZ,2,comlumn2);//建筑分部分项比对数据清单合计
+            double[] division = {division1total[0],division1total[1],0.00,0.00};
+            //---结算取值汇总结束
+            double[] originalTotalJzFees = ExcelUtil.getDoubleArray(jzhz,BashInfo.TXHZ_JZ,1,2); //获取建筑合计费
+            double[] zjgcJzFees = ExcelUtil.getDoubleArray(jzhz,BashInfo.TXHZ_JZ,1,3);  //获取建筑直接工程费
+            double[][] originalJzFees = ExcelUtil.getDoubleArrays(jzqd,BashInfo.TXMX_JZ,2, new int[]{13, 14, 15, 17}); //获取建筑原始费用
+//            double fbrJzFee = ExcelUtil.getDouble(fbrcg,BashInfo.QT_XJ,0,6); //建筑发包人采购计价表合计金额
+            double fbrJzFee = ExcelUtil.getDouble(jzqd,SubstationInfo.JZMX_BJZ,2,15);
+            double zjgcJzTotal = ExcelUtil.getDouble(jzhz,BashInfo.QT_HJ,0,3);//建筑直接工程费合计
+            double[] aqwmJzFees = ExcelUtil.getDoubleArray(csqd,BashInfo.CS_AQWM,1, new int[]{3, 4});  //建筑安全文明施工费
+            double jxslJz = 0.00;
+            if(fbrJzFee != 0.00){
+                double zgJz = zjgcJzTotal-(aqwmJzFees[1]/(aqwmJzFees[0]/100));
+                jxslJz = zgJz/(fbrJzFee-zgJz); //建筑进项税率
+            }
+            boolean flag = BashInfo.getFlag(originalTotalJzFees,zjgcJzFees);
+            //电缆结算汇总
+            List<Settlement> dlSettlements = SettementUtil.getDLComparison(settlementList,builtTotal,division,word1total,word2total,otherDlTotal,feesDlCount,cbperson);
+            Boolean f = SettementUtil.getFlag;
+            //数据核验并保存数据库
+            settlementService.save(dlSettlements,id);
+            for(int i=0;i<originalTotalJzFees.length;i++){
+                JkxlDetailFee jkxlDetailFee = new JkxlDetailFee();
+                double originalTotalCost = originalTotalJzFees[i]; //原合计
+                double otherFee = qtFees[2]/fbfxFee*originalTotalCost;  //其他费用
+                double zjgcJzFee = zjgcJzFees[i];//直接工程费
+                double originalRgCost = originalJzFees[i][0];// 原人工费
+                double rgCost = originalRgCost/(1+tcRate[0]);  //后人工费
+                double originalCbrCost = originalJzFees[i][1];  //原承包人采购
+                double cbrCost = originalCbrCost/(1+tcRate[1]);  //后承包人采购
+                double originalFbrCost = originalJzFees[i][2];  //原发包人采购
+                double fbrCost = originalFbrCost/(1+jxslJz); //后发包人采购
+                double originalJxrCost = originalJzFees[i][3];   //原机械费
+                double jxCost = originalJxrCost/(1+tcRate[2]); //后机械费
+                double rate = (zjgcJzFee-originalFbrCost)/(zjgcJzTotal-fbrJzFee); //比例
+                double measuresFee1 = (zjgcJzFee-originalFbrCost/(1+jxslJz)*jxslJz)*csJzFee[0]+csJzFee[1]*rate; //措施费一(1)
+//                double measuresFee1 = (zjgcJzFee-(originalFbrCost/(1+jxslJz)*jxslJz))*jzcsRate; //措施费一(2)
+                double measuresFee2 = 0.00;   //措施费一(1)
+                double measuresFee3 = csFees2*originalTotalCost/fbfxFee; //措施费二
+                double fees = (zjgcJzFee-(originalFbrCost/(1+jxslJz)*jxslJz))*jzgfRate[0]+(zjgcJzFee-(originalFbrCost/(1+jxslJz)*jxslJz))*jzgfRate[1]*0.2;  //规费
+                if(f){
+                    tax = (originalTotalCost+measuresFee1+measuresFee2+measuresFee3+fees+otherFee-originalFbrCost)*texRate; //税金
+                    totalfee = originalTotalCost+measuresFee1+measuresFee2+measuresFee3+fees+otherFee+tax-originalFbrCost; //合计
+                } else {
+                    tax = (originalTotalCost + measuresFee1 + measuresFee2 + measuresFee3 + fees + otherFee) * texRate; //税金
+                    totalfee = originalTotalCost+measuresFee1+measuresFee2+measuresFee3+fees+otherFee+tax; //合计
+                }
+                jkxlDetailFee.setOriginalTotalCost(originalTotalCost);
+//            jkxlDetailFee.setOriginalRate(orRate);
+                jkxlDetailFee.setOriginalRgCost(originalRgCost);
+                jkxlDetailFee.setRgCost(rgCost);
+                jkxlDetailFee.setOriginalCbrCost(originalCbrCost);
+                jkxlDetailFee.setCbrCost(cbrCost);
+                jkxlDetailFee.setOriginalFbrCost(originalFbrCost);
+                jkxlDetailFee.setFbrCost(fbrCost);
+                jkxlDetailFee.setOriginalJxCost(originalJxrCost);
+                jkxlDetailFee.setJxCost(jxCost);
+                jkxlDetailFee.setMeasuresFee1(measuresFee1);
+                jkxlDetailFee.setMeasuresFee2(measuresFee2);
+                jkxlDetailFee.setMeasuresFee3(measuresFee3);
+                jkxlDetailFee.setFees(fees);
+                jkxlDetailFee.setOtherCost(otherFee);
+                jkxlDetailFee.setTex(tax);
+                jkxlDetailFee.setTotalFee(totalfee);
+                jkxlDetailFee.setZjgcFee(zjgcJzFee);
+                jkxlDetailFee.setWbsCode(BashInfo.JZTXWBSIDS [i]);
+                jkxlDetailFee.setId(id);
+                list.add(jkxlDetailFee);
+            }
+
+        } else if(jzgc ==0.00 && azgc != 0.00){
+            ImportExcel azqd = new ImportExcel(file,1,BashInfo.SHEET_AZFBFXJJ,true);  //安装分部分项工程量清单计价表
+            ImportExcel azhz = new ImportExcel(file,1,SubstationInfo.SHEET_HZHZB ,true);   //电缆线路安装工程费用汇总表
+            double built2Total = ExcelUtil.getDouble(azhz,BashInfo.QT_HJ,0,2);//安装分部分项工程量清单计合计
+            double[] builtTotal={0.00,built2Total};
+            double[] division2total=ExcelUtil.getDoubleArray(azqd,SubstationInfo.AZMX_BDZAZ,2,comlumn2);//安装分部分项比对数据清单合计
+            double[] division = {0.00,0.00,division2total[0],division2total[1]};
+            //结算汇总取值结束
+            double[] originalTotalAzFees = ExcelUtil.getDoubleArray(azhz,BashInfo.HZ_AZ,1,2); //获取安装合计费
+            double[] zjgcAzFees = ExcelUtil.getDoubleArray(azhz,BashInfo.TXHZ_AZ,1,3);  //获取安装直接工程费
+            double[] rgFees = ExcelUtil.getDoubleArray(azhz,BashInfo.TXHZ_AZ,1,4);  //人工费
+            double[][] originalAzFees = ExcelUtil.getDoubleArrays(azqd,BashInfo.TXMX_AZ,2, new int[]{13, 14, 15, 17}); //获取安装原始费用
+//            double fbrAzFee = BashInfo.getFbrAzFee(fbrcg);  //安装发包人采购计价表合计金额
+            double fbrAzFee = ExcelUtil.getDouble(azqd,SubstationInfo.AZMX_BDZAZ,2,15);
+            double zjgcAzTotal = ExcelUtil.getDouble(azhz,BashInfo.QT_HJ,0,3);//安装直接工程费合计
+            double rgAzTotal = ExcelUtil.getDouble(azhz,BashInfo.QT_HJ,0,4);//安装人工费费合计
+            double[] aqwmAzFees = BashInfo.getAqwfAzFee(csqd);  //建筑安全文明施工费
+            double jxslAz = 0.00;
+            if(fbrAzFee != 0.00){
+                double zgAz = zjgcAzTotal-(aqwmAzFees[1]/(aqwmAzFees[0]/100));
+                jxslAz = zgAz/(fbrAzFee-zgAz); //安装进项税率
+            }
+            boolean flag = BashInfo.getFlag(originalTotalAzFees,zjgcAzFees);
+            //结算汇总
+            List<Settlement> dlSettlements = SettementUtil.getDLComparison(settlementList,builtTotal,division,word1total,word2total,otherDlTotal,feesDlCount,cbperson);
+            Boolean f = SettementUtil.getFlag;
+            //数据核验并保存数据库
+            settlementService.save(dlSettlements,id);
+            for(int i=0;i<originalTotalAzFees.length;i++){
+                JkxlDetailFee jkxlDetailFee = new JkxlDetailFee();
+                double originalTotalCost = originalTotalAzFees[i]; //原合计
+                double otherFee = qtFees[2]/fbfxFee*originalTotalCost;  //其他费用
+                double zjgcAzFee = zjgcAzFees[i];//直接工程费
+                double rgAzFee = rgFees[i];//人工费
+                double originalRgCost = originalAzFees[i][0];// 原人工费
+                double rgRate = originalRgCost/rgAzTotal; //比例
+                double rgCost = originalRgCost/(1+tcRate[0]);  //后人工费
+                double originalCbrCost = originalAzFees[i][1];  //原承包人采购
+                double cbrCost = originalCbrCost/(1+tcRate[1]);  //后承包人采购
+                double originalFbrCost = originalAzFees[i][2];  //原发包人采购
+                double fbrCost = originalFbrCost/(1+jxslAz); //后发包人采购
+                double originalJxrCost = originalAzFees[i][3];   //原机械费
+                double jxCost = originalJxrCost/(1+tcRate[2]); //后机械费
+//                double measuresFee1 = (zjgcAzFee-originalFbrCost/(1+jxslAz)*jxslAz)*azcsRate[0]+(rgAzFee/(1+tcRate[0])*azcsRate[1]); //措施费一(1)
+                double measuresFee1 = (zjgcAzFee-originalFbrCost/(1+jxslAz)*jxslAz)*azcsRate[0]+azCsFee*rgRate; //措施费一(1)
+                double measuresFee2 = 0.00;   //措施费一(2)
+                double measuresFee3 = csFees2*originalTotalCost/fbfxFee; //措施费二
+//                double fees = rgAzFee/(1+tcRate[0])*azgfRate[0]+rgAzFee/(1+tcRate[0])*azgfRate[1]*1.2;  //规费
+                double fees = rgRate*azGf;  //规费
+                if(f){
+                    tax = (originalTotalCost+measuresFee1+measuresFee2+measuresFee3+fees+otherFee-originalFbrCost)*texRate; //税金
+                    totalfee = originalTotalCost+measuresFee1+measuresFee2+measuresFee3+fees+otherFee+tax-originalFbrCost; //合计
+                } else {
+                    tax = (originalTotalCost + measuresFee1 + measuresFee2 + measuresFee3 + fees + otherFee) * texRate; //税金
+                    totalfee = originalTotalCost+measuresFee1+measuresFee2+measuresFee3+fees+otherFee+tax; //合计
+                }
+                jkxlDetailFee.setOriginalTotalCost(originalTotalCost);
+                jkxlDetailFee.setOriginalRgCost(originalRgCost);
+                jkxlDetailFee.setRgCost(rgCost);
+                jkxlDetailFee.setOriginalCbrCost(originalCbrCost);
+                jkxlDetailFee.setCbrCost(cbrCost);
+                jkxlDetailFee.setOriginalFbrCost(originalFbrCost);
+                jkxlDetailFee.setFbrCost(fbrCost);
+                jkxlDetailFee.setOriginalJxCost(originalJxrCost);
+                jkxlDetailFee.setJxCost(jxCost);
+                jkxlDetailFee.setMeasuresFee1(measuresFee1);
+                jkxlDetailFee.setMeasuresFee2(measuresFee2);
+                jkxlDetailFee.setMeasuresFee3(measuresFee3);
+                jkxlDetailFee.setFees(fees);
+                jkxlDetailFee.setOtherCost(otherFee);
+                jkxlDetailFee.setTex(tax);
+                jkxlDetailFee.setTotalFee(totalfee);
+                jkxlDetailFee.setZjgcFee(zjgcAzFee);
+                jkxlDetailFee.setWbsCode(BashInfo.AZTXWBSIDS[i]);
+                jkxlDetailFee.setId(id);
+                list.add(jkxlDetailFee);
+            }
+
+        } else {
+            ImportExcel jzqd = new ImportExcel(file, 1, BashInfo.SHEET_JZFBFXJJ,true);  //建筑分部分项工程量清单计价表
+            ImportExcel azqd = new ImportExcel(file, 1, BashInfo.SHEET_AZFBFXJJ,true);  //安装分部分项工程量清单计价表
+            ImportExcel jzhz = new ImportExcel(file, 1, SubstationInfo.SHEET_JZHZB,true);   //电缆线路建筑工程费用汇总表
+            ImportExcel azhz = new ImportExcel(file, 1, SubstationInfo.SHEET_HZHZB,true);   //电缆线路安装工程费用汇总表
+            double built1Total = ExcelUtil.getDouble(jzhz,BashInfo.QT_HJ,0,2);//建筑分布分项工程量清单计价表合计
+            double built2Total = ExcelUtil.getDouble(azhz,BashInfo.QT_HJ,0,2);//安装分部分项工程量清单计合计
+            double[] builtTotal={built1Total,built2Total};
+            double[] division1total=ExcelUtil.getDoubleArray(jzqd,SubstationInfo.JZMX_BJZ,2,comlumn2);//建筑分部分项比对数据清单合计
+            double[] division2total=ExcelUtil.getDoubleArray(azqd,SubstationInfo.AZMX_BDZAZ,2,comlumn2);//安装分部分项比对数据清单合计
+            double[] division = {division1total[0],division1total[1],division2total[0],division2total[1]};
+            //结算汇总结束
+            double[] originalTotalJzFees = ExcelUtil.getDoubleArray(jzhz,BashInfo.TXHZ_JZ,1,2); //获取建筑合计费
+            double[] originalTotalAzFees = ExcelUtil.getDoubleArray(azhz,BashInfo.TXHZ_AZ,1,2); //获取安装合计费
+            double[] zjgcJzFees = ExcelUtil.getDoubleArray(jzhz,BashInfo.TXHZ_JZ,1,3);  //获取建筑直接工程费
+            double[] zjgcAzFees = ExcelUtil.getDoubleArray(azhz,BashInfo.TXHZ_AZ,1,3);  //获取安装直接工程费
+            double[] rgAzFees = ExcelUtil.getDoubleArray(azhz,BashInfo.TXHZ_AZ,1,4);  //获取安装人工费
+            double[][] originalJzFees = ExcelUtil.getDoubleArrays(jzqd,BashInfo.TXMX_JZ,2, new int[]{13, 14, 15, 17}); //获取建筑原始费用
+            double[][] originalAzFees = ExcelUtil.getDoubleArrays(azqd,BashInfo.TXMX_AZ,2, new int[]{13, 14, 15, 17}); //获取安装原始费用
+//            double fbrJzFee = ExcelUtil.getDouble(fbrcg,BashInfo.QT_XJ,0,6); //建筑发包人采购计价表合计金额
+////            double fbrAzFee = BashInfo.getFbrAzFee(fbrcg);  //安装发包人采购计价表合计金额
+            double fbrJzFee = ExcelUtil.getDouble(jzqd,SubstationInfo.JZMX_BJZ,2,15);
+            double fbrAzFee = ExcelUtil.getDouble(azqd,SubstationInfo.AZMX_BDZAZ,2,15);
+            double zjgcJzTotal = ExcelUtil.getDouble(jzhz,BashInfo.QT_HJ,0,3);//建筑直接工程费合计
+            double zjgcAzTotal = ExcelUtil.getDouble(azhz,BashInfo.QT_HJ,0,3);//安装直接工程费合计
+            double rgAzTotal = ExcelUtil.getDouble(azhz,BashInfo.QT_HJ,0,4);//安装人工费费合计
+            double[] aqwmJzFees = ExcelUtil.getDoubleArray(csqd,BashInfo.CS_AQWM,1, new int[]{3, 4});  //建筑安全文明施工费
+            double[] aqwmAzFees = BashInfo.getAqwfAzFee(csqd);  //安装安全文明施工费
+            double jxslJz = 0.00;
+            double jxslAz = 0.00;
+            if(texRate>0.05) {
+                if (fbrJzFee != 0.00) {
+                    double zgJz = zjgcJzTotal - (aqwmJzFees[1] / (aqwmJzFees[0] / 100));
+                    jxslJz = zgJz / (fbrJzFee - zgJz); //建筑进项税率
+                }
+                if (fbrAzFee != 0.00) {
+                    double zgAz = zjgcAzTotal - (aqwmAzFees[1] / (aqwmAzFees[0] / 100));
+                    jxslAz = zgAz / (fbrAzFee - zgAz); //安装进项税率
+                }
+            }
+            boolean flagJz = BashInfo.getFlag(originalTotalJzFees,zjgcJzFees);
+            boolean flagAz = BashInfo.getFlag(originalTotalAzFees,zjgcAzFees);
+            boolean flag = false;
+            if(flagJz && flagAz){
+                flag = true;
+            }
+            List<Settlement> dlSettlements = SettementUtil.getDLComparison(settlementList,builtTotal,division,word1total,word2total,otherDlTotal,feesDlCount,cbperson);
+            Boolean f = SettementUtil.getFlag;
+            //数据核验并保存数据库
+            settlementService.save(dlSettlements,id);
+            //将本体工程费用明细存入集合
+            for(int i=0;i<originalTotalJzFees.length;i++){
+                JkxlDetailFee jkxlDetailFee = new JkxlDetailFee();
+                double originalTotalCost = originalTotalJzFees[i]; //原合计
+                double otherFee = qtFees[2]/fbfxFee*originalTotalCost;  //其他费用
+                double zjgcJzFee = zjgcJzFees[i];//直接工程费
+                double originalRgCost = originalJzFees[i][0];// 原人工费
+                double rgCost = originalRgCost/(1+tcRate[0]);  //后人工费
+                double originalCbrCost = originalJzFees[i][1];  //原承包人采购
+                double cbrCost = originalCbrCost/(1+tcRate[1]);  //后承包人采购
+                double originalFbrCost = originalJzFees[i][2];  //原发包人采购
+                double fbrCost = originalFbrCost/(1+jxslJz); //后发包人采购
+                double originalJxrCost = originalJzFees[i][3];   //原机械费
+                double jxCost = originalJxrCost/(1+tcRate[2]); //后机械费
+                double rate = (zjgcJzFee-originalFbrCost)/(zjgcJzTotal-fbrJzFee); //比例
+//                double measuresFee1 = (zjgcJzFee-(originalFbrCost/(1+jxslJz)*jxslJz))*jzcsRate; //措施费一(2)
+                double measuresFee1 = (zjgcJzFee-originalFbrCost/(1+jxslJz)*jxslJz)*csJzFee[0]+csJzFee[1]*rate; //措施费一(1)
+                double measuresFee2 = 0.00;   //措施费一(1)
+                double measuresFee3 = csFees2*originalTotalCost/fbfxFee; //措施费二
+                double fees = (zjgcJzFee-(originalFbrCost/(1+jxslJz)*jxslJz))*jzgfRate[0]+(zjgcJzFee-(originalFbrCost/(1+jxslJz)*jxslJz))*jzgfRate[1]*0.2;  //规费
+                if(f){
+                    tax = (originalTotalCost+measuresFee1+measuresFee2+measuresFee3+fees+otherFee-originalFbrCost)*texRate; //税金
+                    totalfee = originalTotalCost+measuresFee1+measuresFee2+measuresFee3+fees+otherFee+tax-originalFbrCost; //合计
+                } else {
+                    tax = (originalTotalCost + measuresFee1 + measuresFee2 + measuresFee3 + fees + otherFee) * texRate; //税金
+                    totalfee = originalTotalCost+measuresFee1+measuresFee2+measuresFee3+fees+otherFee+tax; //合计
+                }
+                jkxlDetailFee.setOriginalTotalCost(originalTotalCost);
+                jkxlDetailFee.setOriginalRgCost(originalRgCost);
+                jkxlDetailFee.setRgCost(rgCost);
+                jkxlDetailFee.setOriginalCbrCost(originalCbrCost);
+                jkxlDetailFee.setCbrCost(cbrCost);
+                jkxlDetailFee.setOriginalFbrCost(originalFbrCost);
+                jkxlDetailFee.setFbrCost(fbrCost);
+                jkxlDetailFee.setOriginalJxCost(originalJxrCost);
+                jkxlDetailFee.setJxCost(jxCost);
+                jkxlDetailFee.setMeasuresFee1(measuresFee1);
+                jkxlDetailFee.setMeasuresFee2(measuresFee2);
+                jkxlDetailFee.setMeasuresFee3(measuresFee3);
+                jkxlDetailFee.setFees(fees);
+                jkxlDetailFee.setOtherCost(otherFee);
+                jkxlDetailFee.setTex(tax);
+                jkxlDetailFee.setTotalFee(totalfee);
+                jkxlDetailFee.setZjgcFee(zjgcJzFee);
+                jkxlDetailFee.setWbsCode(BashInfo.JZTXWBSIDS [i]);
+                jkxlDetailFee.setId(id);
+                list.add(jkxlDetailFee);
+            }
+            for(int i=0;i<originalTotalAzFees.length;i++){
+                JkxlDetailFee jkxlDetailFee = new JkxlDetailFee();
+                double originalTotalCost = originalTotalAzFees[i]; //原合计
+                double otherFee = qtFees[2]/fbfxFee*originalTotalCost;  //其他费用
+                double zjgcAzFee = zjgcAzFees[i];//直接工程费
+                double rgAzFee = rgAzFees[i];//人工费
+                double originalRgCost = originalAzFees[i][0];// 原人工费
+                double rgRate = originalRgCost/rgAzTotal; //比例
+                double rgCost = originalRgCost/(1+tcRate[0]);  //后人工费
+                double originalCbrCost = originalAzFees[i][1];  //原承包人采购
+                double cbrCost = originalCbrCost/(1+tcRate[1]);  //后承包人采购
+                double originalFbrCost = originalAzFees[i][2];  //原发包人采购
+                double fbrCost = originalFbrCost/(1+jxslAz); //后发包人采购
+                double originalJxrCost = originalAzFees[i][3];   //原机械费
+                double jxCost = originalJxrCost/(1+tcRate[2]); //后机械费
+//                double measuresFee1 = (zjgcAzFee-originalFbrCost/(1+jxslAz)*jxslAz)*azcsRate[0]+(rgAzFee/(1+tcRate[0])*azcsRate[1]); //措施费一(1)
+                double measuresFee1 = (zjgcAzFee-originalFbrCost/(1+jxslAz)*jxslAz)*azcsRate[0]+azCsFee*rgRate; //措施费一(1)
+                double measuresFee2 = 0.00;   //措施费一(2)
+                double measuresFee3 = csFees2*originalTotalCost/fbfxFee; //措施费二
+//                double fees = rgAzFee/(1+tcRate[0])*azgfRate[0]+rgAzFee/(1+tcRate[0])*azgfRate[1]*1.2;  //规费
+                double fees = rgRate*azGf;  //规费
+                if(f){
+                    tax = (originalTotalCost+measuresFee1+measuresFee2+measuresFee3+fees+otherFee-originalFbrCost)*texRate; //税金
+                    totalfee = originalTotalCost+measuresFee1+measuresFee2+measuresFee3+fees+otherFee+tax-originalFbrCost; //合计
+                } else {
+                    tax = (originalTotalCost + measuresFee1 + measuresFee2 + measuresFee3 + fees + otherFee) * texRate; //税金
+                    totalfee = originalTotalCost+measuresFee1+measuresFee2+measuresFee3+fees+otherFee+tax; //合计
+                }
+                jkxlDetailFee.setOriginalTotalCost(originalTotalCost);
+                jkxlDetailFee.setOriginalRgCost(originalRgCost);
+                jkxlDetailFee.setRgCost(rgCost);
+                jkxlDetailFee.setOriginalCbrCost(originalCbrCost);
+                jkxlDetailFee.setCbrCost(cbrCost);
+                jkxlDetailFee.setOriginalFbrCost(originalFbrCost);
+                jkxlDetailFee.setFbrCost(fbrCost);
+                jkxlDetailFee.setOriginalJxCost(originalJxrCost);
+                jkxlDetailFee.setJxCost(jxCost);
+                jkxlDetailFee.setMeasuresFee1(measuresFee1);
+                jkxlDetailFee.setMeasuresFee2(measuresFee2);
+                jkxlDetailFee.setMeasuresFee3(measuresFee3);
+                jkxlDetailFee.setFees(fees);
+                jkxlDetailFee.setOtherCost(otherFee);
+                jkxlDetailFee.setTex(tax);
+                jkxlDetailFee.setTotalFee(totalfee);
+                jkxlDetailFee.setZjgcFee(zjgcAzFee);
+                jkxlDetailFee.setWbsCode(BashInfo.AZTXWBSIDS[i]);
+                jkxlDetailFee.setId(id);
+                list.add(jkxlDetailFee);
+            }
+        }
+        double tz = 0.00; //总合计金额
+        double texTotal = 0.00; //税合计金额
+        for(JkxlDetailFee jkxlDetailFee : list){
+            texTotal += jkxlDetailFee.getTex();
+        }
+        //其他费用补税
+        if(qtFees[0]+qtFees[1] != 0.00) {
+            for (JkxlDetailFee jkxlDetailFee : list) {
+                double tex = jkxlDetailFee.getTex();
+                double total1 = jkxlDetailFee.getTotalFee();
+                double rate = tex / texTotal;
+                double tzTex = (qtFees[0] + qtFees[1]) * rate * texRate;
+                jkxlDetailFee.setTex(tex + tzTex);
+                jkxlDetailFee.setTotalFee(total1 + tzTex);
+            }
+        }
+        //补税
+        if(btex != 0.00){
+            double tex1 = 0.00;
+            for(JkxlDetailFee jkxlDetailFee : list){
+                tex1 += jkxlDetailFee.getTex();
+            }
+            for(JkxlDetailFee jkxlDetailFee : list){
+                double tex = jkxlDetailFee.getTex();
+                double total1 = jkxlDetailFee.getTotalFee();
+                double rate = tex/tex1;
+                jkxlDetailFee.setTex(tex+btex*rate);
+                jkxlDetailFee.setTotalFee(total1+btex*rate);
+            }
+        }
+        //承包人设备费
+        if(cbrfee != 0.00){
+            for(JkxlDetailFee jkxlDetailFee : list){
+                double total1 = jkxlDetailFee.getTotalFee();
+                if(jkxlDetailFee.getWbsCode().equals("49320000") && jkxlDetailFee.getTotalFee() != 0.00){
+                    jkxlDetailFee.setTotalFee(total1+cbrfee);
+                } else {
+                    double rate = jkxlDetailFee.getOriginalTotalCost()/fbfxFee;
+                    jkxlDetailFee.setTotalFee(total1+cbrfee*rate);
+                }
+            }
+        }
+        //分摊差额
+        double cstotal1 = 0.00;
+        double cstotal2 = 0.00;
+        double cstotal3 = 0.00;
+        double gftotal = 0.00;
+//        double textotal = 0.00;
+        double zjgcTotal = 0.00;
+        for(JkxlDetailFee jkxlDetailFee2 :list){
+            cstotal1 += jkxlDetailFee2.getMeasuresFee1();
+            cstotal2 += jkxlDetailFee2.getMeasuresFee2();
+            cstotal3 += jkxlDetailFee2.getMeasuresFee3();
+            gftotal  += jkxlDetailFee2.getFees();
+            zjgcTotal += jkxlDetailFee2.getZjgcFee();
+        }
+        for(JkxlDetailFee jkxlDetailFee1 : list){
+            double ftRate = jkxlDetailFee1.getZjgcFee()/zjgcTotal;
+            double csft = (jsCs-(cstotal1+cstotal2+cstotal3))*ftRate;
+            double gfft = (jsGf-gftotal)*ftRate;
+            double sgft = (csft+gfft)*texRate;
+            jkxlDetailFee1.setMeasuresFee1(jkxlDetailFee1.getMeasuresFee1()+csft);
+            jkxlDetailFee1.setFees(jkxlDetailFee1.getFees()+gfft);
+            jkxlDetailFee1.setTex(jkxlDetailFee1.getTex()+sgft);
+            jkxlDetailFee1.setTotalFee(jkxlDetailFee1.getTotalFee()+csft+gfft);
+        }
+        //计算差额
+        for(JkxlDetailFee jkxlDetailFee : list){
+            tz += jkxlDetailFee.getTotalFee();
+        }
+        if(wsbFees != null && wsbFees.size()>0){
+            for(JkxlAdjustFee jkxlAdjustFee : wsbFees){
+                jkxlAdjustFee.setId(id);
+                feeAdjustService.save(jkxlAdjustFee);
+                double fee = jkxlAdjustFee.getFee();
+                if(jkxlAdjustFee.getType().contains("减") || jkxlAdjustFee.getType().contains("扣")){
+                    fee = fee* -1;
+                }
+                wsbfee += fee;
+            }
+        }
+        double gxFee = Math.abs(gcjsFee-tz-qtFees[0]-qtFees[1]-wsbfee);
+        //将其他费用存入集合
+        JkxlDetailFee jkxlDetailFee1 = new JkxlDetailFee();
+        JkxlDetailFee jkxlDetailFee2 = new JkxlDetailFee();
+        jkxlDetailFee1.setId(id);
+        jkxlDetailFee1.setWbsCode("44120000");
+        jkxlDetailFee1.setTotalFee(qtFees[0]);
+        jkxlDetailFee2.setWbsCode("44220000");
+        jkxlDetailFee2.setTotalFee(qtFees[1]);
+        jkxlDetailFee2.setId(id);
+        list.add(jkxlDetailFee1);
+        list.add(jkxlDetailFee2);
+        overheadLineMapper.saveList(list);
+        JkxlAdjustFee jkxlAdjustFee2 = new JkxlAdjustFee();
+        jkxlAdjustFee2.setId(id);
+        jkxlAdjustFee2.setType(BashInfo.CE);
+        jkxlAdjustFee2.setFee(gxFee);
+        feeAdjustService.save(jkxlAdjustFee2);
+    }
+
 
 }

+ 25 - 1
src/main/java/com/jeeplus/modules/sg/overheadline/util/BashInfo.java

@@ -53,6 +53,14 @@ public class BashInfo {
     public static final String MX_TSJSY = "5 调试及试验";
     public static final String MX_DLJC = "6 电缆监测(控)系统";
 
+
+    public static final String MX_FHGL = "1 复合光缆线路";
+    public static final String MX_JKGL = "2 架空光缆/音频电缆线路";
+    public static final String MX_JMGL = "3 直埋光缆/音频电缆线路";
+    public static final String MX_GDGL= "4 管道光缆线路/音频电缆线路";
+
+
+
     public static final String RATIO_RGTC = "人工调差系数";
     public static final String RATIO_CLTC = "材料调差系数";
     public static final String RATIO_JXTC = "机械调差系数";
@@ -72,6 +80,7 @@ public class BashInfo {
     public static final String GCJS = "工程结算价";
     public static final String TBJG = "竣工结算价合计";
     public static final String TBJG1 = "投标报价";
+    public static final String TBJG2 = "最终结算价";
     public static final String CE = "差额";
     public static final String CS_JZ = "建筑措施项目";
     public static final String CS_AZ = "安装措施项目";
@@ -92,6 +101,7 @@ public class BashInfo {
     public static final String HZ_FZ = "辅助工程";
     public static final String HZ_CH = "措施项目";
 
+
     public static final String HZ_TSF = "土石方";
     public static final String HZ_GZW = "构筑物";
     public static final String HZ_FZGC= "辅助工程";
@@ -104,6 +114,11 @@ public class BashInfo {
     public static final String HZ_JZGC = "建筑工程";
     public static final String HZ_AZGC = "安装工程";
 
+    public static final String HZ_FHGL = "复合光缆线路";
+    public static final String HZ_JKGL = "架空光缆/音频电缆线路";
+    public static final String HZ_JMGL = "直埋光缆/音频电缆线路";
+    public static final String HZ_GDGL= "管道光缆线路/音频电缆线路";
+
 
     public static final String TZ_RGF = "人工费";
     public static final String TZ_CBRCG = "承包分采购";
@@ -150,6 +165,15 @@ public class BashInfo {
     public static final String[] MX_AZ = {MX_DLQ,MX_DLFS,MX_DLFJ,MX_DLFH,MX_TSJSY,MX_DLJC};
 
 
+    //通信线路
+    public static final String[] JZTXWBSIDS = {"69110000","69120000"};
+    public static final String[] AZTXWBSIDS = {"69310000","69320000","69330000","69340000"};
+    public static final String[] TXHZ_JZ = {HZ_TSF,HZ_GZW};
+    public static final String[] TXHZ_AZ = {HZ_FHGL,HZ_JKGL,HZ_JMGL,HZ_GDGL};
+    public static final String[] TXMX_JZ = {MX_TSF,MX_GZW};
+    public static final String[] TXMX_AZ = {MX_FHGL,MX_JKGL,MX_JMGL,MX_GDGL};
+
+
 
     /**
      *获取架线工程措施费率
@@ -572,7 +596,7 @@ public class BashInfo {
         double gcjs = 0.00;
         for(int i=0;i<lastRow;i++){
             String type = importExcel.getValue(i+1,1);
-            if(type.equals(TBJG) || type.equals(GCJS) || type.equals(TBJG1)){
+            if(type.equals(TBJG) || type.equals(GCJS) || type.equals(TBJG1) || type.equals(TBJG2)){
                 gcjs = importExcel.getDouble(i+1,2);
             }
         }