From 23dc2f2759a03587a0686497b29ba8d0c3f6f254 Mon Sep 17 00:00:00 2001 From: lg Date: Tue, 11 Nov 2025 16:15:57 +0800 Subject: [PATCH] =?UTF-8?q?bug=E4=BF=AE=E6=94=B9=E9=94=80=E8=B4=A7?= =?UTF-8?q?=E6=B8=85=E5=8D=95excel=E5=AF=BC=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/XzdTbwjBusinessBid.java | 17 +-- .../domain/bo/XzdTbwjBusinessBidBo.java | 10 +- .../domain/vo/XzdTbwjBusinessBidVo.java | 17 +-- .../impl/XzdBiddingDocumentServiceImpl.java | 4 +- .../domain/vo/XzdSubcontractVo.java | 2 +- .../refundDeposit/domain/XzdFbhtzbjth.java | 5 + .../domain/bo/XzdFbhtzbjthBo.java | 4 + .../domain/vo/XzdFbhtzbjthVo.java | 5 + .../AppreciationInvoiceController.java | 13 +++ .../zengzhishui/domain/XzdXhqd.java | 19 +++- .../zengzhishui/domain/bo/XzdXhqdBo.java | 11 +- .../zengzhishui/domain/vo/XzdXhqdVo.java | 13 ++- .../service/IAppreciationInvoiceService.java | 6 + .../impl/AppreciationInvoiceServiceImpl.java | 21 ++++ .../service/impl/XzdXhqdServiceImpl.java | 2 +- .../dromara/xzd/utilS/ExcelXhqdProcessor.java | 107 ++++++++++++++++++ 16 files changed, 215 insertions(+), 41 deletions(-) create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/utilS/ExcelXhqdProcessor.java diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/biddingManagement/biddingDocumentList/domain/XzdTbwjBusinessBid.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/biddingManagement/biddingDocumentList/domain/XzdTbwjBusinessBid.java index 34458796..069d9a07 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/biddingManagement/biddingDocumentList/domain/XzdTbwjBusinessBid.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/biddingManagement/biddingDocumentList/domain/XzdTbwjBusinessBid.java @@ -6,6 +6,7 @@ import lombok.Data; import lombok.EqualsAndHashCode; import java.io.Serial; +import java.math.BigDecimal; /** * 投标文件-商务标对象 xzd_tbwj_business_bid @@ -29,7 +30,7 @@ public class XzdTbwjBusinessBid { /** * 标底价 */ - private Long bidPrice; + private BigDecimal bidPrice; /** * 投标文件ID @@ -39,37 +40,37 @@ public class XzdTbwjBusinessBid { /** * 折扣率 */ - private Long discountRate; + private BigDecimal discountRate; /** * 最高限价 */ - private Long ceilingPrice; + private BigDecimal ceilingPrice; /** * 成本价 */ - private Long costPrice; + private BigDecimal costPrice; /** * 投标报价 */ - private Long totalBidPrice; + private BigDecimal totalBidPrice; /** * 毛利率 */ - private Long feeRate; + private BigDecimal feeRate; /** * 投标税率 */ - private Long bidTaxRate; + private BigDecimal bidTaxRate; /** * 备用金 */ - private Long pettyCash; + private BigDecimal pettyCash; /** * 编制部门 diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/biddingManagement/biddingDocumentList/domain/bo/XzdTbwjBusinessBidBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/biddingManagement/biddingDocumentList/domain/bo/XzdTbwjBusinessBidBo.java index 2a4ff978..d6d46500 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/biddingManagement/biddingDocumentList/domain/bo/XzdTbwjBusinessBidBo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/biddingManagement/biddingDocumentList/domain/bo/XzdTbwjBusinessBidBo.java @@ -30,7 +30,7 @@ public class XzdTbwjBusinessBidBo extends BaseEntity { /** * 标底价 */ - private Long bidPrice; + private BigDecimal bidPrice; /** * 折扣率 @@ -40,18 +40,18 @@ public class XzdTbwjBusinessBidBo extends BaseEntity { /** * 最高限价 */ - private Long ceilingPrice; + private BigDecimal ceilingPrice; /** * 成本价 */ - private Long costPrice; + private BigDecimal costPrice; /** * 投标报价 */ @NotNull(message = "投标报价不能为空", groups = { AddGroup.class, EditGroup.class }) - private Long totalBidPrice; + private BigDecimal totalBidPrice; /** * 毛利率 @@ -71,7 +71,7 @@ public class XzdTbwjBusinessBidBo extends BaseEntity { /** * 备用金 */ - private Long pettyCash; + private BigDecimal pettyCash; /** * 编制部门 diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/biddingManagement/biddingDocumentList/domain/vo/XzdTbwjBusinessBidVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/biddingManagement/biddingDocumentList/domain/vo/XzdTbwjBusinessBidVo.java index be2276be..cf821a29 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/biddingManagement/biddingDocumentList/domain/vo/XzdTbwjBusinessBidVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/biddingManagement/biddingDocumentList/domain/vo/XzdTbwjBusinessBidVo.java @@ -10,6 +10,7 @@ import org.dromara.xzd.biddingManagement.biddingDocumentList.domain.XzdTbwjBusin import java.io.Serial; import java.io.Serializable; +import java.math.BigDecimal; import java.util.Date; @@ -43,49 +44,49 @@ public class XzdTbwjBusinessBidVo implements Serializable { * 标底价 */ @ExcelProperty(value = "标底价") - private Long bidPrice; + private BigDecimal bidPrice; /** * 折扣率 */ @ExcelProperty(value = "折扣率") - private Long discountRate; + private BigDecimal discountRate; /** * 最高限价 */ @ExcelProperty(value = "最高限价") - private Long ceilingPrice; + private BigDecimal ceilingPrice; /** * 成本价 */ @ExcelProperty(value = "成本价") - private Long costPrice; + private BigDecimal costPrice; /** * 投标报价 */ @ExcelProperty(value = "投标报价") - private Long totalBidPrice; + private BigDecimal totalBidPrice; /** * 毛利率 */ @ExcelProperty(value = "毛利率") - private Long feeRate; + private BigDecimal feeRate; /** * 投标税率 */ @ExcelProperty(value = "投标税率") - private Long bidTaxRate; + private BigDecimal bidTaxRate; /** * 备用金 */ @ExcelProperty(value = "备用金") - private Long pettyCash; + private BigDecimal pettyCash; /** * 编制部门 diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/biddingManagement/biddingDocumentList/service/impl/XzdBiddingDocumentServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/biddingManagement/biddingDocumentList/service/impl/XzdBiddingDocumentServiceImpl.java index e123e265..a859ef02 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/biddingManagement/biddingDocumentList/service/impl/XzdBiddingDocumentServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/biddingManagement/biddingDocumentList/service/impl/XzdBiddingDocumentServiceImpl.java @@ -201,9 +201,9 @@ public class XzdBiddingDocumentServiceImpl extends ServiceImpl> addExcel(@RequestParam("file") MultipartFile files) { + return R.ok(appreciationInvoiceService.addExcel(files)); + } } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/domain/XzdXhqd.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/domain/XzdXhqd.java index a2ef8058..5ad7fa48 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/domain/XzdXhqd.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/domain/XzdXhqd.java @@ -73,16 +73,23 @@ public class XzdXhqd extends BaseEntity { * 税率 */ private BigDecimal taxRate; + /** + * 折扣金额 + */ + private BigDecimal discountAmount; /** - * 税额 + * 优惠政策类型 */ - private BigDecimal taxAmount; + private String preferentialPolicy; + + +// 煤炭种类 + private String typesCoal; + + + - /** - * 备注 - */ - private String remark; /** * 文件ID diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/domain/bo/XzdXhqdBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/domain/bo/XzdXhqdBo.java index 753dc018..e4d648b6 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/domain/bo/XzdXhqdBo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/domain/bo/XzdXhqdBo.java @@ -73,15 +73,18 @@ public class XzdXhqdBo extends BaseEntity { private BigDecimal taxRate; /** - * 税额 + * 折扣金额 */ - private BigDecimal taxAmount; + private BigDecimal discountAmount; /** - * 备注 + * 优惠政策类型 */ - private String remark; + private String preferentialPolicy; + + // 煤炭种类 + private String typesCoal; /** * 文件ID */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/domain/vo/XzdXhqdVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/domain/vo/XzdXhqdVo.java index 4e09639a..bf9ab14f 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/domain/vo/XzdXhqdVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/domain/vo/XzdXhqdVo.java @@ -89,17 +89,18 @@ public class XzdXhqdVo implements Serializable { private BigDecimal taxRate; /** - * 税额 + * 折扣金额 */ - @ExcelProperty(value = "税额") - private BigDecimal taxAmount; + private BigDecimal discountAmount; /** - * 备注 + * 优惠政策类型 */ - @ExcelProperty(value = "备注") - private String remark; + private String preferentialPolicy; + + // 煤炭种类 + private String typesCoal; /** * 文件ID */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/service/IAppreciationInvoiceService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/service/IAppreciationInvoiceService.java index 0936cab8..f0ded2d4 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/service/IAppreciationInvoiceService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/service/IAppreciationInvoiceService.java @@ -7,6 +7,9 @@ import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.PageQuery; import com.baomidou.mybatisplus.extension.service.IService; +import org.dromara.xzd.fapiaotaizhang.zengzhishui.domain.vo.XzdXhqdVo; +import org.springframework.web.multipart.MultipartFile; + import java.util.Collection; import java.util.List; @@ -67,4 +70,7 @@ public interface IAppreciationInvoiceService extends IService ids, Boolean isValid); + + + List addExcel(MultipartFile files); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/service/impl/AppreciationInvoiceServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/service/impl/AppreciationInvoiceServiceImpl.java index 9f955918..0ba5a117 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/service/impl/AppreciationInvoiceServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/service/impl/AppreciationInvoiceServiceImpl.java @@ -24,12 +24,14 @@ import org.dromara.xzd.fapiaotaizhang.zengzhishui.domain.TaxInfo; import org.dromara.xzd.fapiaotaizhang.zengzhishui.domain.XzdXhqd; import org.dromara.xzd.fapiaotaizhang.zengzhishui.domain.bo.XzdXhqdBo; import org.dromara.xzd.fapiaotaizhang.zengzhishui.domain.vo.TaxInfoVo; +import org.dromara.xzd.fapiaotaizhang.zengzhishui.domain.vo.XzdXhqdVo; import org.dromara.xzd.fapiaotaizhang.zengzhishui.service.ITaxInfoService; import org.dromara.xzd.fapiaotaizhang.zengzhishui.service.IXzdXhqdService; import org.dromara.xzd.service.IXzdContractDetailsService; import org.dromara.xzd.service.IXzdCorrespondentList; import org.dromara.xzd.service.IXzdProjectService; import org.dromara.xzd.service.impl.XzdProjectServiceImpl; +import org.dromara.xzd.utilS.ExcelXhqdProcessor; import org.dromara.xzd.zijinjihua.yueduzijinbiangeng.domain.FinancialRevenuePlanAlteration; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.event.EventListener; @@ -39,7 +41,10 @@ import org.dromara.xzd.fapiaotaizhang.zengzhishui.domain.vo.AppreciationInvoiceV import org.dromara.xzd.fapiaotaizhang.zengzhishui.domain.AppreciationInvoice; import org.dromara.xzd.fapiaotaizhang.zengzhishui.mapper.AppreciationInvoiceMapper; import org.dromara.xzd.fapiaotaizhang.zengzhishui.service.IAppreciationInvoiceService; +import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; +import java.io.InputStream; import java.util.*; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -264,6 +269,22 @@ public class AppreciationInvoiceServiceImpl extends ServiceImpl 0; } + @Override + public List addExcel(MultipartFile file) { + + + List res = new ArrayList<>(); + String name = file.getOriginalFilename(); + try { + InputStream inputStream = file.getInputStream(); + res = ExcelXhqdProcessor.parseExcel(inputStream, name); + + } catch (Exception e) { + throw new RuntimeException(e); + } + return res; + } + /** * 总体流程监听(例如: 草稿,撤销,退回,作废,终止,已完成,单任务完成等) * 正常使用只需#processEvent.flowCode=='leave1' diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/service/impl/XzdXhqdServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/service/impl/XzdXhqdServiceImpl.java index 60589854..8eccef78 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/service/impl/XzdXhqdServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/service/impl/XzdXhqdServiceImpl.java @@ -81,7 +81,7 @@ public class XzdXhqdServiceImpl extends ServiceImpl impl lqw.eq(bo.getUnitPrice() != null, XzdXhqd::getUnitPrice, bo.getUnitPrice()); lqw.eq(bo.getAmount() != null, XzdXhqd::getAmount, bo.getAmount()); lqw.eq(bo.getTaxRate() != null, XzdXhqd::getTaxRate, bo.getTaxRate()); - lqw.eq(bo.getTaxAmount() != null, XzdXhqd::getTaxAmount, bo.getTaxAmount()); + lqw.eq(StringUtils.isNotBlank(bo.getFileId()), XzdXhqd::getFileId, bo.getFileId()); return lqw; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/utilS/ExcelXhqdProcessor.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/utilS/ExcelXhqdProcessor.java new file mode 100644 index 00000000..66a97cc8 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/utilS/ExcelXhqdProcessor.java @@ -0,0 +1,107 @@ +package org.dromara.xzd.utilS; + +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.ss.usermodel.*; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.dromara.xzd.fapiaotaizhang.zengzhishui.domain.vo.XzdXhqdVo; + +import java.io.InputStream; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; + +public class ExcelXhqdProcessor { + + + public static List parseExcel(InputStream inputStream, String fileName) throws Exception { + List xzdXhqdVos = new ArrayList<>(); + + Workbook workbook; + if (fileName.endsWith(".xlsx")) { + workbook = new XSSFWorkbook(inputStream); + } else if (fileName.endsWith(".xls")) { + workbook = new HSSFWorkbook(inputStream); + } else { + throw new IllegalArgumentException("不支持的Excel格式"); + } + + Sheet sheet = workbook.getSheetAt(0); + Boolean flow =false; + + // 从第二行开始读取(跳过标题行) + for (int i = 0; i <= sheet.getLastRowNum(); i++) { + Row row = sheet.getRow(i); + if (!flow){ + if(!"项目名称".equals(getCellValue(row.getCell(0)))){ + i++; + continue; + }else { + i++; + flow=true; + continue; + } + } + if (row == null) continue; + + XzdXhqdVo xhqdVo = new XzdXhqdVo(); + + // 读取单元格数据 + xhqdVo.setName(getCellValue(row.getCell(0))); + xhqdVo.setMaterialCode(getCellValue(row.getCell(1))); + xhqdVo.setSpec(getCellValue(row.getCell(2))); + xhqdVo.setUnit(getCellValue(row.getCell(3))); + xhqdVo.setQuantity(convertBasic(getCellValue(row.getCell(4)))); + xhqdVo.setUnitPrice(convertBasic(getCellValue(row.getCell(5)))); + xhqdVo.setAmount(convertBasic(getCellValue(row.getCell(6)))); + xhqdVo.setTaxRate(convertBasic(getCellValue(row.getCell(7)))); + xhqdVo.setDiscountAmount(convertBasic(getCellValue(row.getCell(8)))); + xhqdVo.setPreferentialPolicy(getCellValue(row.getCell(9))); + xhqdVo.setTypesCoal(getCellValue(row.getCell(10))); + + xzdXhqdVos.add(xhqdVo); + } + + workbook.close(); + return xzdXhqdVos; + } + + private static String getCellValue(Cell cell) { + if (cell == null) return ""; + + switch (cell.getCellType()) { + case STRING: + return cell.getStringCellValue().trim(); + case NUMERIC: + if (DateUtil.isCellDateFormatted(cell)) { + return cell.getDateCellValue().toString(); + } else { + return String.valueOf((int) cell.getNumericCellValue()); + } + case BOOLEAN: + return String.valueOf(cell.getBooleanCellValue()); + case FORMULA: + return cell.getCellFormula(); + default: + return ""; + } + } + + private static Integer parseInt(String value) { + try { + return Integer.parseInt(value); + } catch (NumberFormatException e) { + return null; + } + } + public static BigDecimal convertBasic(String numberStr) { + if (numberStr == null || numberStr.trim().isEmpty()) { + return null; // 或者抛出异常 + } + return new BigDecimal(numberStr.trim()); + } + + + + + +}