From f868d94b085f8bb9be0cf32862b924242d97e285 Mon Sep 17 00:00:00 2001 From: zjf <1799650030@qq.com> Date: Sun, 26 Oct 2025 22:16:22 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=8F=E6=95=B0=E7=82=B9=E4=BF=9D=E7=95=99?= =?UTF-8?q?=E4=B8=A4=E4=BD=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/ProfitReportServiceImpl.java | 44 ++++++++++++++- .../service/impl/SalesReportServiceImpl.java | 55 ++++++++++++++++++- 2 files changed, 96 insertions(+), 3 deletions(-) diff --git a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/ProfitReportServiceImpl.java b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/ProfitReportServiceImpl.java index 6c81aa49d..d1fbe73bf 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/ProfitReportServiceImpl.java +++ b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/ProfitReportServiceImpl.java @@ -12,6 +12,8 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import java.math.BigDecimal; +import java.math.RoundingMode; import java.util.List; /** @@ -30,23 +32,61 @@ public class ProfitReportServiceImpl implements ProfitReportService { @Override public Page page(Page page, ProfitReportQueryDTO queryDTO) { log.info("分页查询毛利报表,查询条件:{}", queryDTO); - return profitReportMapper.selectProfitReportPage(page, queryDTO, DataScope.of()); + Page result = profitReportMapper.selectProfitReportPage(page, queryDTO, DataScope.of()); + + // 确保所有 BigDecimal 字段保留两位小数 + result.getRecords().forEach(this::formatProfitReportVO); + + return result; } @Override public List list(ProfitReportQueryDTO queryDTO) { log.info("列表查询毛利报表,查询条件:{}", queryDTO); - return profitReportMapper.selectProfitReportList(queryDTO, DataScope.of()); + List result = profitReportMapper.selectProfitReportList(queryDTO, DataScope.of()); + + // 确保所有 BigDecimal 字段保留两位小数 + result.forEach(this::formatProfitReportVO); + + return result; } @Override public List exportExcel(ProfitReportQueryDTO queryDTO) { log.info("导出毛利报表,查询条件:{}", queryDTO); List list = profitReportMapper.selectProfitReportList(queryDTO, DataScope.of()); + + // 确保所有 BigDecimal 字段保留两位小数 + list.forEach(this::formatProfitReportVO); + List excelList = BeanUtils.toBean(list, ProfitReportExcelDTO.class); log.info("导出毛利报表成功,导出记录数:{}", excelList.size()); return excelList; } + + /** + * 格式化毛利报表VO的所有BigDecimal字段,保留两位小数 + */ + private void formatProfitReportVO(ProfitReportVO vo) { + if (vo.getSalesPrice() != null) { + vo.setSalesPrice(vo.getSalesPrice().setScale(2, RoundingMode.HALF_UP)); + } + if (vo.getCostPrice() != null) { + vo.setCostPrice(vo.getCostPrice().setScale(2, RoundingMode.HALF_UP)); + } + if (vo.getSalesAmount() != null) { + vo.setSalesAmount(vo.getSalesAmount().setScale(2, RoundingMode.HALF_UP)); + } + if (vo.getSalesCost() != null) { + vo.setSalesCost(vo.getSalesCost().setScale(2, RoundingMode.HALF_UP)); + } + if (vo.getGrossProfit() != null) { + vo.setGrossProfit(vo.getGrossProfit().setScale(2, RoundingMode.HALF_UP)); + } + if (vo.getProfitMargin() != null) { + vo.setProfitMargin(vo.getProfitMargin().setScale(2, RoundingMode.HALF_UP)); + } + } } diff --git a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/SalesReportServiceImpl.java b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/SalesReportServiceImpl.java index dea5be535..131b2c833 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/SalesReportServiceImpl.java +++ b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/SalesReportServiceImpl.java @@ -12,6 +12,8 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import java.math.BigDecimal; +import java.math.RoundingMode; import java.util.List; /** @@ -40,6 +42,22 @@ public class SalesReportServiceImpl implements SalesReportService { Page result = salesReportMapper.selectSalesReportPage(page, queryDTO, DataScope.of()); + // 确保所有 BigDecimal 字段保留两位小数 + result.getRecords().forEach(vo -> { + if (vo.getSalesPrice() != null) { + vo.setSalesPrice(vo.getSalesPrice().setScale(2, RoundingMode.HALF_UP)); + } + if (vo.getSalesAmount() != null) { + vo.setSalesAmount(vo.getSalesAmount().setScale(2, RoundingMode.HALF_UP)); + } + if (vo.getReturnAmount() != null) { + vo.setReturnAmount(vo.getReturnAmount().setScale(2, RoundingMode.HALF_UP)); + } + if (vo.getActualSalesAmount() != null) { + vo.setActualSalesAmount(vo.getActualSalesAmount().setScale(2, RoundingMode.HALF_UP)); + } + }); + log.info("查询结果数量: {} / 总数: {}", result.getRecords().size(), result.getTotal()); log.info("======================================"); @@ -49,13 +67,48 @@ public class SalesReportServiceImpl implements SalesReportService { @Override public List list(SalesReportQueryDTO queryDTO) { log.info("列表查询销售报表,查询条件:{}", queryDTO); - return salesReportMapper.selectSalesReportList(queryDTO, DataScope.of()); + List result = salesReportMapper.selectSalesReportList(queryDTO, DataScope.of()); + + // 确保所有 BigDecimal 字段保留两位小数 + result.forEach(vo -> { + if (vo.getSalesPrice() != null) { + vo.setSalesPrice(vo.getSalesPrice().setScale(2, RoundingMode.HALF_UP)); + } + if (vo.getSalesAmount() != null) { + vo.setSalesAmount(vo.getSalesAmount().setScale(2, RoundingMode.HALF_UP)); + } + if (vo.getReturnAmount() != null) { + vo.setReturnAmount(vo.getReturnAmount().setScale(2, RoundingMode.HALF_UP)); + } + if (vo.getActualSalesAmount() != null) { + vo.setActualSalesAmount(vo.getActualSalesAmount().setScale(2, RoundingMode.HALF_UP)); + } + }); + + return result; } @Override public List exportExcel(SalesReportQueryDTO queryDTO) { log.info("导出销售报表,查询条件:{}", queryDTO); List list = salesReportMapper.selectSalesReportList(queryDTO, DataScope.of()); + + // 确保所有 BigDecimal 字段保留两位小数 + list.forEach(vo -> { + if (vo.getSalesPrice() != null) { + vo.setSalesPrice(vo.getSalesPrice().setScale(2, RoundingMode.HALF_UP)); + } + if (vo.getSalesAmount() != null) { + vo.setSalesAmount(vo.getSalesAmount().setScale(2, RoundingMode.HALF_UP)); + } + if (vo.getReturnAmount() != null) { + vo.setReturnAmount(vo.getReturnAmount().setScale(2, RoundingMode.HALF_UP)); + } + if (vo.getActualSalesAmount() != null) { + vo.setActualSalesAmount(vo.getActualSalesAmount().setScale(2, RoundingMode.HALF_UP)); + } + }); + List excelList = BeanUtils.toBean(list, SalesReportExcelDTO.class); log.info("导出销售报表成功,导出记录数:{}", excelList.size()); return excelList;