From 2764bda72c28cec6a05cace9f52d9ac0a84c1714 Mon Sep 17 00:00:00 2001 From: xs Date: Fri, 3 Apr 2026 11:07:04 +0800 Subject: [PATCH] =?UTF-8?q?1.4.1=E5=90=8E=E7=AB=AF=EF=BC=9A=20=20=20=20fix?= =?UTF-8?q?(=E5=B8=82=E5=9C=BA=E9=A2=84=E7=AE=97):=20=20=20=20=E9=A2=84?= =?UTF-8?q?=E7=AE=97=E9=87=91=E9=A2=9D=E9=83=BD=E6=94=B9=E4=B8=BA=E5=85=83?= =?UTF-8?q?=E3=80=82=20=20=20=20=E5=AF=BC=E5=87=BA=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E5=90=8D=E6=A0=BC=E5=BC=8F=EF=BC=9AS-XXX=5F=20=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E5=90=8D=E7=A7=B0=5F=20=E9=A2=84=E7=AE=97=E8=A1=A8?= =?UTF-8?q?=EF=BC=8C=E5=AF=BC=E5=87=BA=E6=A8=A1=E6=9D=BF=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E3=80=82=20=20=20=20=E9=A2=84=E7=AE=97=E4=BA=BA=E5=B7=A5?= =?UTF-8?q?=E6=A0=87=E5=87=86=EF=BC=9A=E6=B7=BB=E5=8A=A0=E9=83=A8=E9=97=A8?= =?UTF-8?q?=E4=B8=8B=E6=8B=89=E6=A1=86=E9=80=89=E6=8B=A9=E6=8F=90=E9=86=92?= =?UTF-8?q?=E3=80=82=20=20=20=20=E9=A2=84=E7=AE=97=E6=9D=90=E6=96=99?= =?UTF-8?q?=E8=B4=B9=20=E9=80=89=E6=8B=A9=E6=A0=87=E5=87=86=E7=89=A9?= =?UTF-8?q?=E6=96=99=E3=80=81=E9=9D=9E=E6=A0=87=E5=87=86=E7=89=A9=E6=96=99?= =?UTF-8?q?=E6=96=B9=E5=BC=8F=E4=BC=98=E5=8C=96=E3=80=82=20=20=20=20?= =?UTF-8?q?=E9=A2=84=E7=AE=97=E6=9D=90=E6=96=99=E8=B4=B9=E6=9D=90=E6=96=99?= =?UTF-8?q?=E5=90=8D=E7=A7=B0=E6=94=B9=E4=B8=BA=E7=89=A9=E6=96=99=E5=90=8D?= =?UTF-8?q?=E7=A7=B0=E3=80=82=20=20=20=20=E9=A2=84=E7=AE=97=E5=AE=89?= =?UTF-8?q?=E8=A3=85=E8=B4=B9=EF=BC=8C=E5=88=86=E4=B8=BA=E6=89=BF=E5=8C=85?= =?UTF-8?q?=E3=80=81=E9=9D=9E=E6=89=BF=E5=8C=85=E7=B1=BB=E5=9E=8B=EF=BC=8C?= =?UTF-8?q?=E6=89=BF=E5=8C=85=E5=8F=AA=E5=A1=AB=E9=87=91=E9=A2=9D=E3=80=82?= =?UTF-8?q?=20=20=20=20=E9=A2=84=E7=AE=97=E5=B7=AE=E6=97=85=E8=B4=B9?= =?UTF-8?q?=EF=BC=8C=E6=B7=BB=E5=8A=A0=E5=88=97=E9=AB=98=E6=B8=A9=E8=A1=A5?= =?UTF-8?q?=E8=B4=B4=EF=BC=88=E5=85=83=EF=BC=89=E3=80=81=E8=89=B0=E8=8B=A6?= =?UTF-8?q?=E8=A1=A5=E8=B4=B4=EF=BC=88=E5=85=83=EF=BC=89=E3=80=82=20=20=20?= =?UTF-8?q?=20=E5=85=B6=E4=BB=96=E8=B4=B9=E7=94=A8=E7=9A=84=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E6=94=B9=E4=B8=BA=E4=B8=8B=E6=8B=89=E6=A1=86=E5=8F=AF?= =?UTF-8?q?=E8=BE=93=E5=87=BA=EF=BC=8C=E5=8E=BB=E6=8E=89=E8=BF=90=E8=BE=93?= =?UTF-8?q?=E8=B4=B9=E3=80=82=20=20=20=20=E9=A2=84=E7=AE=97=E8=A1=A8?= =?UTF-8?q?=E5=90=88=E5=90=8C=E5=87=80=E9=A2=9D=E5=8F=AF=E4=BB=A5=E7=BC=96?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../oa/erp/domain/ErpBudgetInstallCost.java | 5 + .../oa/erp/domain/ErpBudgetTravelCost.java | 21 ++ .../erp/domain/bo/ErpBudgetInstallCostBo.java | 7 + .../erp/domain/bo/ErpBudgetTravelCostBo.java | 21 ++ .../erp/domain/vo/ErpBudgetInstallCostVo.java | 6 + .../erp/domain/vo/ErpBudgetTravelCostVo.java | 20 ++ .../MarketProjectBudgetExcelExporter.java | 205 +++++++++++------- 7 files changed, 202 insertions(+), 83 deletions(-) diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/ErpBudgetInstallCost.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/ErpBudgetInstallCost.java index 985bdb90..96d2f4c2 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/ErpBudgetInstallCost.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/ErpBudgetInstallCost.java @@ -33,6 +33,11 @@ public class ErpBudgetInstallCost extends TenantEntity { */ private Long budgetId; + /** + * 类型(1、非承包,2、承包) + */ + private String installType; + /** * 项目ID */ diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/ErpBudgetTravelCost.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/ErpBudgetTravelCost.java index 1e6c7503..53bbba0d 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/ErpBudgetTravelCost.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/ErpBudgetTravelCost.java @@ -83,6 +83,16 @@ public class ErpBudgetTravelCost extends TenantEntity { */ private BigDecimal subsidyCosts; + /** + * 高温补贴(元) + */ + private BigDecimal highTempSubsidy; + + /** + * 艰苦补贴(元) + */ + private BigDecimal hardshipSubsidy; + /** * 小计(元) */ @@ -138,6 +148,17 @@ public class ErpBudgetTravelCost extends TenantEntity { */ private BigDecimal reduceSubsidyCosts; + /** + * 降成本高温补贴(元) + */ + private BigDecimal reduceHighTempSubsidy; + + /** + * 降成本艰苦补贴(元) + */ + private BigDecimal reduceHardshipSubsidy; + + /** * 降成本小计(元) */ diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpBudgetInstallCostBo.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpBudgetInstallCostBo.java index d52f5314..12dec08f 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpBudgetInstallCostBo.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpBudgetInstallCostBo.java @@ -35,6 +35,13 @@ public class ErpBudgetInstallCostBo extends BaseEntity { @NotNull(message = "预算ID,关联erp_budget_info不能为空", groups = { AddGroup.class, EditGroup.class }) private Long budgetId; + /** + * 类型(1、非承包,2、承包) + */ + @NotBlank(message = "类型(1、非承包,2、承包)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String installType; + + /** * 项目ID */ diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpBudgetTravelCostBo.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpBudgetTravelCostBo.java index 86808f0e..91869862 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpBudgetTravelCostBo.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpBudgetTravelCostBo.java @@ -84,6 +84,17 @@ public class ErpBudgetTravelCostBo extends BaseEntity { */ private BigDecimal subsidyCosts; + /** + * 高温补贴(元) + */ + private BigDecimal highTempSubsidy; + + /** + * 艰苦补贴(元) + */ + private BigDecimal hardshipSubsidy; + + /** * 小计(元) */ @@ -139,6 +150,16 @@ public class ErpBudgetTravelCostBo extends BaseEntity { */ private BigDecimal reduceSubsidyCosts; + /** + * 降成本高温补贴(元) + */ + private BigDecimal reduceHighTempSubsidy; + + /** + * 降成本艰苦补贴(元) + */ + private BigDecimal reduceHardshipSubsidy; + /** * 降成本小计(元) */ diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpBudgetInstallCostVo.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpBudgetInstallCostVo.java index 70bee696..e7fcf90d 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpBudgetInstallCostVo.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpBudgetInstallCostVo.java @@ -41,6 +41,12 @@ public class ErpBudgetInstallCostVo implements Serializable { @ExcelProperty(value = "预算ID,关联erp_budget_info") private Long budgetId; + /** + * 类型(1、非承包,2、承包) + */ + @ExcelProperty(value = "类型(1、非承包,2、承包)", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "1=、非承包,2=、承包") + private String installType; /** * 项目ID */ diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpBudgetTravelCostVo.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpBudgetTravelCostVo.java index 3a279943..92e91fa2 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpBudgetTravelCostVo.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpBudgetTravelCostVo.java @@ -105,6 +105,16 @@ public class ErpBudgetTravelCostVo implements Serializable { @ExcelDictFormat(readConverterExp = "元=") private BigDecimal subsidyCosts; + /** + * 高温补贴(元) + */ + private BigDecimal highTempSubsidy; + + /** + * 艰苦补贴(元) + */ + private BigDecimal hardshipSubsidy; + /** * 小计(元) */ @@ -173,6 +183,16 @@ public class ErpBudgetTravelCostVo implements Serializable { @ExcelDictFormat(readConverterExp = "元=") private BigDecimal reduceSubsidyCosts; + /** + * 降成本高温补贴(元) + */ + private BigDecimal reduceHighTempSubsidy; + + /** + * 降成本艰苦补贴(元) + */ + private BigDecimal reduceHardshipSubsidy; + /** * 降成本小计(元) */ diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/excel/MarketProjectBudgetExcelExporter.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/excel/MarketProjectBudgetExcelExporter.java index 0622bd80..6512d36d 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/excel/MarketProjectBudgetExcelExporter.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/excel/MarketProjectBudgetExcelExporter.java @@ -216,9 +216,9 @@ public class MarketProjectBudgetExcelExporter extends BaseExcelExporter { budget.getContractAmount() != null ? budget.getContractAmount().doubleValue() : 0.0, formRightStyle); createCell(amountRow1, 2, "合同净额:", formLeftStyle); - Cell netAmountCell = amountRow1.createCell(3); - netAmountCell.setCellFormula("B4/1.13"); // 假设税率为13% - netAmountCell.setCellStyle(formFormulaStyle); + createNumericCell(amountRow1, 3, + budget.getNetContractAmount() != null ? budget.getNetContractAmount().doubleValue() : 0.0, + formRightStyle); // 金额信息行2 Row amountRow2 = sheet.createRow(rowNum++); @@ -250,7 +250,7 @@ public class MarketProjectBudgetExcelExporter extends BaseExcelExporter { createCell(baseInfoRow, 0, "项目预算期间:", formLeftStyle); createCell(baseInfoRow, 1, budget.getDuringOperation(), formRightStyle); createCell(baseInfoRow, 2, "单位:", formLeftStyle); - createCell(baseInfoRow, 3, "万元", formRightStyle); + createCell(baseInfoRow, 3, "元", formRightStyle); return rowNum; } @@ -537,7 +537,7 @@ public class MarketProjectBudgetExcelExporter extends BaseExcelExporter { private int createMaterialTotalRow(Sheet sheet, int dataStartRow, int rowNum) { Row totalRow = sheet.createRow(rowNum); - createMergedCell(sheet, totalRow, 0, 3, "合计(万元)", headerStyle); + createMergedCell(sheet, totalRow, 0, 3, "合计(元)", headerStyle); createCell(totalRow, 4, "/", headerStyle); Cell totalQuantity1 = totalRow.createCell(5); @@ -545,7 +545,7 @@ public class MarketProjectBudgetExcelExporter extends BaseExcelExporter { totalQuantity1.setCellStyle(footerFormulaStyle); Cell totalAmount1 = totalRow.createCell(6); - totalAmount1.setCellFormula(String.format("SUM(G%d:G%d)/10000", dataStartRow, rowNum)); + totalAmount1.setCellFormula(String.format("SUM(G%d:G%d)", dataStartRow, rowNum)); totalAmount1.setCellStyle(footerFormulaStyle); createCell(totalRow, 7, "/", headerStyle); @@ -555,7 +555,7 @@ public class MarketProjectBudgetExcelExporter extends BaseExcelExporter { totalQuantity2.setCellStyle(footerFormulaStyle); Cell totalAmount2 = totalRow.createCell(9); - totalAmount2.setCellFormula(String.format("SUM(J%d:J%d)/10000", dataStartRow, rowNum)); + totalAmount2.setCellFormula(String.format("SUM(J%d:J%d)", dataStartRow, rowNum)); totalAmount2.setCellStyle(footerFormulaStyle); createCell(totalRow, 10, "", headerStyle); @@ -617,8 +617,8 @@ public class MarketProjectBudgetExcelExporter extends BaseExcelExporter { Row headerRow = sheet.createRow(rowNum++); String[] leftHeaders = {"人员类别", "人数", "累计时间(月)", - "月平均投入比例(%)", "人工标准(元/人月)", "金额(万元)", "人员类别", "人数", "累计时间(月)", - "月平均投入比例(%)", "人工标准(元/人月)", "金额(万元)", ""}; + "月平均投入比例(%)", "人工标准(元/人月)", "金额(元)", "人员类别", "人数", "累计时间(月)", + "月平均投入比例(%)", "人工标准(元/人月)", "金额(元)", ""}; for (int i = 0; i < leftHeaders.length; i++) { Cell cell = headerRow.createCell(i + 2); @@ -669,7 +669,7 @@ public class MarketProjectBudgetExcelExporter extends BaseExcelExporter { createNumericCell(dataRow, 6, artificialStandard, dataStyle); Cell amountCell = dataRow.createCell(7); - amountCell.setCellFormula("D" + (rowNum) + "*E" + (rowNum) + "*F" + (rowNum) + "*G" + (rowNum) + "/10000"); + amountCell.setCellFormula("D" + (rowNum) + "*E" + (rowNum) + "*F" + (rowNum) + "*G" + (rowNum)); amountCell.setCellStyle(formulaStyle); // 降成本后预算成本 @@ -684,7 +684,7 @@ public class MarketProjectBudgetExcelExporter extends BaseExcelExporter { createNumericCell(dataRow, 12, reduceArtificialStandard, dataStyle); Cell reduceAmountCell = dataRow.createCell(13); - reduceAmountCell.setCellFormula("J" + (rowNum) + "*K" + (rowNum) + "*L" + (rowNum) + "*M" + (rowNum) + "/10000"); + reduceAmountCell.setCellFormula("J" + (rowNum) + "*K" + (rowNum) + "*L" + (rowNum) + "*M" + (rowNum)); reduceAmountCell.setCellStyle(formulaStyle); // 降成本方案 @@ -709,7 +709,7 @@ public class MarketProjectBudgetExcelExporter extends BaseExcelExporter { createNumericCell(emptyRow, i, value, dataStyle); } Cell priceCell = emptyRow.createCell(7); - priceCell.setCellFormula(String.format("D%d*E%d*F%d*G%d/10000", rowNum, rowNum, rowNum, rowNum)); + priceCell.setCellFormula(String.format("D%d*E%d*F%d*G%d", rowNum, rowNum, rowNum, rowNum)); priceCell.setCellStyle(formulaStyle); createCell(emptyRow, 8, "", dataStyle); @@ -719,7 +719,7 @@ public class MarketProjectBudgetExcelExporter extends BaseExcelExporter { } Cell reducePriceCell = emptyRow.createCell(13); - reducePriceCell.setCellFormula(String.format("J%d*K%d*L%d*M%d/10000", rowNum, rowNum, rowNum, rowNum)); + reducePriceCell.setCellFormula(String.format("J%d*K%d*L%d*M%d", rowNum, rowNum, rowNum, rowNum)); reducePriceCell.setCellStyle(formulaStyle); createCell(emptyRow, 14, "", dataStyle); @@ -801,8 +801,8 @@ public class MarketProjectBudgetExcelExporter extends BaseExcelExporter { Row headerRow = sheet.createRow(rowNum++); String[] headers = {"人员类别", "人数", "累计时间(月)", - "月平均投入比例(%)", "人工标准(元/人月)", "金额(万元)", "人员类别", "人数", "累计时间(月)", - "月平均投入比例(%)", "人工标准(元/人月)", "金额(万元)", ""}; + "月平均投入比例(%)", "人工标准(元/人月)", "金额(元)", "人员类别", "人数", "累计时间(月)", + "月平均投入比例(%)", "人工标准(元/人月)", "金额(元)", ""}; for (int i = 0; i < headers.length; i++) { Cell cell = headerRow.createCell(i + 2); @@ -845,31 +845,33 @@ public class MarketProjectBudgetExcelExporter extends BaseExcelExporter { Double peopleNumber = detail.getPeopleNumber() != null ? detail.getPeopleNumber().doubleValue() : null; Double cumulativeTime = detail.getCumulativeTime() != null ? detail.getCumulativeTime().doubleValue() : null; Double artificialStandard = detail.getArtificialStandard() != null ? detail.getArtificialStandard().doubleValue() : null; + Double price = detail.getPrice() != null ? detail.getPrice().doubleValue() : null; createCell(dataRow, 2, detail.getPersonnelCategory(), dataStyle); createNumericCell(dataRow, 3, peopleNumber, dataStyle); createNumericCell(dataRow, 4, cumulativeTime, dataStyle); createNumericCell(dataRow, 5, detail.getMonthRate() == null ? BigDecimal.ZERO : detail.getMonthRate().divide(new BigDecimal(100), 2, RoundingMode.HALF_UP), percentStyle); createNumericCell(dataRow, 6, artificialStandard, dataStyle); - - Cell amountCell = dataRow.createCell(7); - amountCell.setCellFormula("D" + (rowNum) + "*E" + (rowNum) + "*F" + (rowNum) + "*G" + (rowNum) + "/10000"); - amountCell.setCellStyle(formulaStyle); + createNumericCell(dataRow, 7, price, dataStyle); +// Cell amountCell = dataRow.createCell(7); +// amountCell.setCellFormula("D" + (rowNum) + "*E" + (rowNum) + "*F" + (rowNum) + "*G" + (rowNum)); +// amountCell.setCellStyle(formulaStyle); // 降成本后预算成本 Double reducePeopleNumber = detail.getReducePeopleNumber() != null ? detail.getReducePeopleNumber().doubleValue() : null; Double reduceCumulativeTime = detail.getReduceCumulativeTime() != null ? detail.getReduceCumulativeTime().doubleValue() : null; Double reduceArtificialStandard = detail.getReduceArtificialStandard() != null ? detail.getReduceArtificialStandard().doubleValue() : null; + Double reducePrice = detail.getReducePrice() != null ? detail.getReducePrice().doubleValue() : null; createCell(dataRow, 8, detail.getReducePersonnelCategory(), dataStyle); createNumericCell(dataRow, 9, reducePeopleNumber, dataStyle); createNumericCell(dataRow, 10, reduceCumulativeTime, dataStyle); createNumericCell(dataRow, 11, detail.getReduceMonthRate() == null ? BigDecimal.ZERO : detail.getReduceMonthRate().divide(new BigDecimal(100), 2, RoundingMode.HALF_UP), percentStyle); createNumericCell(dataRow, 12, reduceArtificialStandard, dataStyle); - - Cell reduceAmountCell = dataRow.createCell(13); - reduceAmountCell.setCellFormula("J" + (rowNum) + "*K" + (rowNum) + "*L" + (rowNum) + "*M" + (rowNum) + "/10000"); - reduceAmountCell.setCellStyle(formulaStyle); + createNumericCell(dataRow, 13, reducePrice, dataStyle); +// Cell reduceAmountCell = dataRow.createCell(13); +// reduceAmountCell.setCellFormula("J" + (rowNum) + "*K" + (rowNum) + "*L" + (rowNum) + "*M" + (rowNum)); +// reduceAmountCell.setCellStyle(formulaStyle); // 降成本方案 createCell(dataRow, 14, detail.getReduceProposal(), dataStyle); @@ -893,7 +895,7 @@ public class MarketProjectBudgetExcelExporter extends BaseExcelExporter { createNumericCell(emptyRow, i, value, dataStyle); } Cell priceCell = emptyRow.createCell(7); - priceCell.setCellFormula(String.format("D%d*E%d*F%d*G%d/10000", rowNum, rowNum, rowNum, rowNum)); + priceCell.setCellFormula(String.format("D%d*E%d*F%d*G%d", rowNum, rowNum, rowNum, rowNum)); priceCell.setCellStyle(formulaStyle); createCell(emptyRow, 8, "", dataStyle); @@ -903,7 +905,7 @@ public class MarketProjectBudgetExcelExporter extends BaseExcelExporter { } Cell reducePriceCell = emptyRow.createCell(13); - reducePriceCell.setCellFormula(String.format("J%d*K%d*L%d*M%d/10000", rowNum, rowNum, rowNum, rowNum)); + reducePriceCell.setCellFormula(String.format("J%d*K%d*L%d*M%d", rowNum, rowNum, rowNum, rowNum)); reducePriceCell.setCellStyle(formulaStyle); createCell(emptyRow, 14, "", dataStyle); @@ -975,17 +977,17 @@ public class MarketProjectBudgetExcelExporter extends BaseExcelExporter { int rowNum = startRowNum; Row row1 = sheet.createRow(rowNum++); - createMergedCell(sheet, row1, 0, 23, "差旅费预算明细表", titleStyle); + createMergedCell(sheet, row1, 0, 27, "差旅费预算明细表", titleStyle); Row row2 = sheet.createRow(rowNum++); - createMergedCell(sheet, row2, 0, 1, "", mergedHeaderStyle); - createMergedCell(sheet, row2, 2, 11, "预算成本", mergedHeaderStyle); - createMergedCell(sheet, row2, 12, 22, "降成本后预算成本", mergedHeaderStyle); - createCell(row2, 23, "降成本方案", mergedHeaderStyle); + createMergedCell(sheet, row2, 0, 0, "", mergedHeaderStyle); + createMergedCell(sheet, row2, 1, 13, "预算成本", mergedHeaderStyle); + createMergedCell(sheet, row2, 14, 26, "降成本后预算成本", mergedHeaderStyle); + createCell(row2, 27, "降成本方案", mergedHeaderStyle); Row headerRow = sheet.createRow(rowNum++); - String[] headers = {"序号", "出差地点", "事由", "次数", "人数", "天数", "住宿标准(元)", "往返路费(元)", "住宿费", "补贴(元)", "小计(元)", - "序号", "出差地点", "事由", "次数", "人数", "天数", "住宿标准(元)", "往返路费(元)", "住宿费", "补贴(元)", "小计(元)", ""}; + String[] headers = {"序号", "出差地点", "事由", "次数", "人数", "天数", "住宿标准(元)", "往返路费(元)", "住宿费", "补贴(元)","高温补贴(元)","艰苦补贴(元)", "小计(元)", + "序号", "出差地点", "事由", "次数", "人数", "天数", "住宿标准(元)", "往返路费(元)", "住宿费", "补贴(元)","高温补贴(元)","艰苦补贴(元)", "小计(元)", ""}; for (int i = 0; i < headers.length; i++) { Cell cell = headerRow.createCell(i + 1); @@ -994,7 +996,7 @@ public class MarketProjectBudgetExcelExporter extends BaseExcelExporter { } // 设置列宽 - int[] widths = {8, 8, 15, 15, 10, 12, 12, 18, 18, 18, 18, 20, 8, 15, 15, 10, 12, 12, 18, 18, 18, 18, 20, 23}; + int[] widths = {8, 8, 15, 15, 10, 12, 12, 18, 18, 18,18,18,18, 20, 8, 15, 15, 10, 12, 12, 18, 18, 18, 18, 18,18,20, 23}; for (int i = 0; i < widths.length; i++) { sheet.setColumnWidth(i, widths[i] * 256); } @@ -1030,6 +1032,8 @@ public class MarketProjectBudgetExcelExporter extends BaseExcelExporter { Double days = detail.getDays() != null ? detail.getDays().doubleValue() : null; Double stayStandard = detail.getStayStandard() != null ? detail.getStayStandard().doubleValue() : null; Double travelExpenses = detail.getTravelExpenses() != null ? detail.getTravelExpenses().doubleValue() : null; + Double highTemperatureSubsidy = detail.getHighTempSubsidy() != null ? detail.getHighTempSubsidy().doubleValue() : null; + Double hardshipSubsidy = detail.getHardshipSubsidy() != null ? detail.getHardshipSubsidy().doubleValue() : null; createCell(dataRow, 1, detail.getSortOrder().toString(), dataStyle); createCell(dataRow, 2, detail.getTripLocation(), dataStyle); createCell(dataRow, 3, detail.getReason(), dataStyle); @@ -1045,11 +1049,14 @@ public class MarketProjectBudgetExcelExporter extends BaseExcelExporter { accommodationCell.setCellStyle(formulaStyle); Cell subsidyCell = dataRow.createCell(10); - subsidyCell.setCellFormula("50*G" + (rowNum) + "*F" + (rowNum)); + subsidyCell.setCellFormula("90*G" + (rowNum) + "*F" + (rowNum)); subsidyCell.setCellStyle(formulaStyle); - Cell subtotalCell = dataRow.createCell(11); - subtotalCell.setCellFormula("(I" + (rowNum) + "+J" + (rowNum) + "+K" + (rowNum) + ")"); + createNumericCell(dataRow, 11, highTemperatureSubsidy, dataStyle); + createNumericCell(dataRow, 12, hardshipSubsidy, dataStyle); + + Cell subtotalCell = dataRow.createCell(13); + subtotalCell.setCellFormula("(I" + (rowNum) + "+J" + (rowNum) + "+K" + (rowNum) + "+L" + (rowNum) + "+M" + (rowNum) + ")"); subtotalCell.setCellStyle(formulaStyle); // 降成本后预算成本 @@ -1058,29 +1065,34 @@ public class MarketProjectBudgetExcelExporter extends BaseExcelExporter { Double reduceDays = detail.getReduceDayNumber() != null ? detail.getReduceDayNumber().doubleValue() : null; Double reduceStayStandard = detail.getReduceStayStandard() != null ? detail.getReduceStayStandard().doubleValue() : null; Double reduceTravelExpenses = detail.getReduceTravelExpenses() != null ? detail.getReduceTravelExpenses().doubleValue() : null; - createCell(dataRow, 12, detail.getReduceSortOrder().toString(), dataStyle); - createCell(dataRow, 13, detail.getReduceTripLocation(), dataStyle); - createCell(dataRow, 14, detail.getReduceReason(), dataStyle); - createNumericCell(dataRow, 15, reduceFrequency, dataStyle); - createNumericCell(dataRow, 16, reducePeopleNumber, dataStyle); - createNumericCell(dataRow, 17, reduceDays, dataStyle); - createNumericCell(dataRow, 18, reduceStayStandard, dataStyle); - createNumericCell(dataRow, 19, reduceTravelExpenses, dataStyle); + Double reduceHighTemperatureSubsidy = detail.getReduceHighTempSubsidy() != null ? detail.getReduceHighTempSubsidy().doubleValue() : null; + Double reduceHardshipSubsidy = detail.getReduceHardshipSubsidy() != null ? detail.getReduceHardshipSubsidy().doubleValue() : null; + createCell(dataRow, 14, detail.getReduceSortOrder().toString(), dataStyle); + createCell(dataRow, 15, detail.getReduceTripLocation(), dataStyle); + createCell(dataRow, 16, detail.getReduceReason(), dataStyle); + createNumericCell(dataRow, 17, reduceFrequency, dataStyle); + createNumericCell(dataRow, 18, reducePeopleNumber, dataStyle); + createNumericCell(dataRow, 19, reduceDays, dataStyle); + createNumericCell(dataRow, 20, reduceStayStandard, dataStyle); + createNumericCell(dataRow, 21, reduceTravelExpenses, dataStyle); // 公式计算 - Cell reduceAccommodationCell = dataRow.createCell(20); - reduceAccommodationCell.setCellFormula("S" + (rowNum) + "*R" + (rowNum) + "*Q" + (rowNum)); + Cell reduceAccommodationCell = dataRow.createCell(22); + reduceAccommodationCell.setCellFormula("S" + (rowNum) + "*T" + (rowNum) + "*U" + (rowNum)); reduceAccommodationCell.setCellStyle(formulaStyle); - Cell reduceSubsidyCell = dataRow.createCell(21); - reduceSubsidyCell.setCellFormula("50*R" + (rowNum) + "*Q" + (rowNum)); + Cell reduceSubsidyCell = dataRow.createCell(23); + reduceSubsidyCell.setCellFormula("90*T" + (rowNum) + "*S" + (rowNum)); reduceSubsidyCell.setCellStyle(formulaStyle); - Cell reduceSubtotalCell = dataRow.createCell(22); - reduceSubtotalCell.setCellFormula("(T" + (rowNum) + "+U" + (rowNum) + "+V" + (rowNum) + ")"); + createNumericCell(dataRow, 24, reduceHighTemperatureSubsidy, dataStyle); + createNumericCell(dataRow, 25, reduceHardshipSubsidy, dataStyle); + + Cell reduceSubtotalCell = dataRow.createCell(26); + reduceSubtotalCell.setCellFormula("(V" + (rowNum) + "+W" + (rowNum) + "+X" + (rowNum) + "+Y" + (rowNum)+ "+Z" + (rowNum)+ ")"); reduceSubtotalCell.setCellStyle(formulaStyle); - createCell(dataRow, 23, detail.getReduceProposal(), dataStyle); + createCell(dataRow, 27, detail.getReduceProposal(), dataStyle); return rowNum; } @@ -1094,13 +1106,13 @@ public class MarketProjectBudgetExcelExporter extends BaseExcelExporter { int fillRows = targetSize - dataSize; while (fillRows > 0) { + Double value = null; Row emptyRow = sheet.createRow(rowNum++); for (int i = 1; i < 4; i++) { createCell(emptyRow, i, "", dataStyle); } for (int i = 4; i < 9; i++) { - Double value = null; createNumericCell(emptyRow, i, value, dataStyle); } Cell accommodationFeeCell = emptyRow.createCell(9); @@ -1109,31 +1121,39 @@ public class MarketProjectBudgetExcelExporter extends BaseExcelExporter { Cell subsidyFeeCell = emptyRow.createCell(10); subsidyFeeCell.setCellFormula(String.format("90*F%d*G%d", rowNum, rowNum)); subsidyFeeCell.setCellStyle(formulaStyle); - Cell subtotalCell = emptyRow.createCell(11); - subtotalCell.setCellFormula(String.format("I%d+J%d+K%d", rowNum, rowNum, rowNum)); + + createNumericCell(emptyRow, 11, value, dataStyle); + createNumericCell(emptyRow, 12, value, dataStyle); + + Cell subtotalCell = emptyRow.createCell(13); + subtotalCell.setCellFormula(String.format("I%d+J%d+K%d+L%d+M%d", rowNum, rowNum, rowNum, rowNum, rowNum)); subtotalCell.setCellStyle(formulaStyle); - for (int i = 12; i < 15; i++) { + for (int i = 14; i < 17; i++) { createCell(emptyRow, i, "", dataStyle); } - for (int i = 15; i < 20; i++) { - Double value = null; + for (int i = 17; i < 22; i++) { createNumericCell(emptyRow, i, value, dataStyle); } - Cell reduceAccommodationFeeCell = emptyRow.createCell(20); - reduceAccommodationFeeCell.setCellFormula(String.format("Q%d*R%d*S%d", rowNum, rowNum, rowNum)); + + Cell reduceAccommodationFeeCell = emptyRow.createCell(22); + reduceAccommodationFeeCell.setCellFormula(String.format("S%d*T%d*U%d", rowNum, rowNum, rowNum)); reduceAccommodationFeeCell.setCellStyle(formulaStyle); - Cell reduceSubsidyFeeCell = emptyRow.createCell(21); - reduceSubsidyFeeCell.setCellFormula(String.format("90*Q%d*R%d", rowNum, rowNum)); + Cell reduceSubsidyFeeCell = emptyRow.createCell(23); + reduceSubsidyFeeCell.setCellFormula(String.format("90*S%d*T%d", rowNum, rowNum)); reduceSubsidyFeeCell.setCellStyle(formulaStyle); - Cell reduceSubtotalCell = emptyRow.createCell(22); - reduceSubtotalCell.setCellFormula(String.format("T%d+U%d+V%d", rowNum, rowNum, rowNum)); + + createNumericCell(emptyRow, 24, value, dataStyle); + createNumericCell(emptyRow, 25, value, dataStyle); + + Cell reduceSubtotalCell = emptyRow.createCell(26); + reduceSubtotalCell.setCellFormula(String.format("V%d+W%d+X%d+Y%d+Z%d", rowNum, rowNum, rowNum, rowNum, rowNum)); reduceSubtotalCell.setCellStyle(formulaStyle); - createCell(emptyRow, 23, "", dataStyle); + createCell(emptyRow, 27, "", dataStyle); fillRows--; } @@ -1162,30 +1182,49 @@ public class MarketProjectBudgetExcelExporter extends BaseExcelExporter { totalSubsidy1.setCellFormula(String.format("SUM(K%d:K%d)", dataStartRow, rowNum)); totalSubsidy1.setCellStyle(footerFormulaStyle); - Cell totalSubtotal1 = totalRow.createCell(11); - totalSubtotal1.setCellFormula(String.format("SUM(L%d:L%d)", dataStartRow, rowNum)); + Cell highTemperatureSubsidy = totalRow.createCell(11); + highTemperatureSubsidy.setCellFormula(String.format("SUM(L%d:L%d)", dataStartRow, rowNum)); + highTemperatureSubsidy.setCellStyle(footerFormulaStyle); + + Cell hardshipSubsidy = totalRow.createCell(12); + hardshipSubsidy.setCellFormula(String.format("SUM(M%d:M%d)", dataStartRow, rowNum)); + hardshipSubsidy.setCellStyle(footerFormulaStyle); + + Cell totalSubtotal1 = totalRow.createCell(13); + totalSubtotal1.setCellFormula(String.format("SUM(N%d:N%d)", dataStartRow, rowNum)); totalSubtotal1.setCellStyle(footerFormulaStyle); - // 降成本后预算成本合计 - createMergedCell(sheet, totalRow, 12, 18, "合计", headerStyle); - Cell totalRoundTrip2 = totalRow.createCell(19); - totalRoundTrip2.setCellFormula(String.format("SUM(T%d:T%d)", dataStartRow, rowNum)); + + // 降成本后预算成本合计 + createMergedCell(sheet, totalRow, 14, 20, "合计", headerStyle); + + Cell totalRoundTrip2 = totalRow.createCell(21); + totalRoundTrip2.setCellFormula(String.format("SUM(V%d:V%d)", dataStartRow, rowNum)); totalRoundTrip2.setCellStyle(footerFormulaStyle); - Cell totalAccommodation2 = totalRow.createCell(20); - totalAccommodation2.setCellFormula(String.format("SUM(U%d:U%d)", dataStartRow, rowNum)); + Cell totalAccommodation2 = totalRow.createCell(22); + totalAccommodation2.setCellFormula(String.format("SUM(W%d:W%d)", dataStartRow, rowNum)); totalAccommodation2.setCellStyle(footerFormulaStyle); - Cell totalSubsidy2 = totalRow.createCell(21); - totalSubsidy2.setCellFormula(String.format("SUM(V%d:V%d)", dataStartRow, rowNum)); + Cell totalSubsidy2 = totalRow.createCell(23); + totalSubsidy2.setCellFormula(String.format("SUM(X%d:X%d)", dataStartRow, rowNum)); totalSubsidy2.setCellStyle(footerFormulaStyle); - Cell totalSubtotal2 = totalRow.createCell(22); - totalSubtotal2.setCellFormula(String.format("SUM(W%d:W%d)", dataStartRow, rowNum)); + Cell reduceHighTemperatureSubsidy = totalRow.createCell(24); + reduceHighTemperatureSubsidy.setCellFormula(String.format("SUM(Y%d:Y%d)", dataStartRow, rowNum)); + reduceHighTemperatureSubsidy.setCellStyle(footerFormulaStyle); + + Cell reduceHardshipSubsidy = totalRow.createCell(25); + reduceHardshipSubsidy.setCellFormula(String.format("SUM(Z%d:Z%d)", dataStartRow, rowNum)); + reduceHardshipSubsidy.setCellStyle(footerFormulaStyle); + + Cell totalSubtotal2 = totalRow.createCell(26); + totalSubtotal2.setCellFormula(String.format("SUM(AA%d:AA%d)", dataStartRow, rowNum)); totalSubtotal2.setCellStyle(footerFormulaStyle); - createCell(totalRow, 23, "", dataStyle); + + createCell(totalRow, 27, "", dataStyle); return rowNum; } @@ -1372,14 +1411,14 @@ public class MarketProjectBudgetExcelExporter extends BaseExcelExporter { private void setupFormulaForTravel(Row row, int excelRowNum) { Integer totalRow = sheetTotalRowMap.get(SHEET_TRAVEL); if (totalRow != null) { - // 预算成本(万元)= 差旅费!L列合计/10000 + // 预算成本(元)= 差旅费!L列合计 Cell budgetCostCell = row.createCell(2); - budgetCostCell.setCellFormula(String.format("%s!L%d/10000", SHEET_TRAVEL, totalRow + 1)); + budgetCostCell.setCellFormula(String.format("%s!N%d", SHEET_TRAVEL, totalRow + 1)); budgetCostCell.setCellStyle(formulaStyle); - // 降成本后预算成本(万元)= 差旅费!W列合计/10000 + // 降成本后预算成本(元)= 差旅费!W列合计 Cell reducedCostCell = row.createCell(3); - reducedCostCell.setCellFormula(String.format("%s!W%d/10000", SHEET_TRAVEL, totalRow + 1)); + reducedCostCell.setCellFormula(String.format("%s!AA%d", SHEET_TRAVEL, totalRow + 1)); reducedCostCell.setCellStyle(formulaStyle); } else { createCell(row, 2, "", dataStyle); @@ -1394,11 +1433,11 @@ public class MarketProjectBudgetExcelExporter extends BaseExcelExporter { Integer totalRow = sheetTotalRowMap.get(SHEET_OTHER); if (totalRow != null) { Cell budgetCostCell = row.createCell(2); - budgetCostCell.setCellFormula(String.format("%s!C%d/10000", SHEET_OTHER, totalRow + 1)); + budgetCostCell.setCellFormula(String.format("%s!C%d", SHEET_OTHER, totalRow + 1)); budgetCostCell.setCellStyle(formulaStyle); Cell reducedCostCell = row.createCell(3); - reducedCostCell.setCellFormula(String.format("%s!E%d/10000", SHEET_OTHER, totalRow + 1)); + reducedCostCell.setCellFormula(String.format("%s!E%d", SHEET_OTHER, totalRow + 1)); reducedCostCell.setCellStyle(formulaStyle); } else { createCell(row, 2, "", dataStyle);