From 0fe77fa3c5be0b6423dd50fff147af0256d1da62 Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Wed, 17 Sep 2025 16:59:40 +0800 Subject: [PATCH] =?UTF-8?q?refactor(oa):=20=E4=BC=98=E5=8C=96=E6=97=A5?= =?UTF-8?q?=E8=B6=8B=E5=8A=BF=E6=95=B0=E6=8D=AE=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 增加空数据处理:当源数据为空或无记录时,自动生成近7天的默认数据 - 完善数据转换:对value值进行空值处理,若无值则默认为0 --- .../impl/GearDashboardServiceImpl.java | 94 +++++++++++-------- 1 file changed, 56 insertions(+), 38 deletions(-) diff --git a/gear-oa/src/main/java/com/gear/oa/service/impl/GearDashboardServiceImpl.java b/gear-oa/src/main/java/com/gear/oa/service/impl/GearDashboardServiceImpl.java index eca4b3c..a7b40b5 100644 --- a/gear-oa/src/main/java/com/gear/oa/service/impl/GearDashboardServiceImpl.java +++ b/gear-oa/src/main/java/com/gear/oa/service/impl/GearDashboardServiceImpl.java @@ -23,90 +23,90 @@ import java.util.Map; @Service @RequiredArgsConstructor public class GearDashboardServiceImpl implements IGearDashboardService { - + private final GearDashboardMapper dashboardMapper; - + @Override public DashboardOverviewVO getDashboardOverview() { DashboardOverviewVO overview = new DashboardOverviewVO(); - + // 获取订单统计数据 overview.setOrderStatistics(getOrderStatistics()); - + // 获取薪资统计数据 overview.setSalaryStatistics(getSalaryStatistics()); - + // 获取库存排行数据 overview.setStockRanking(getStockRanking()); - + // 获取其他统计数据 overview.setOtherStatistics(getOtherStatistics()); - + return overview; } - + /** * 获取订单统计数据 */ private OrderStatisticsVO getOrderStatistics() { OrderStatisticsVO statistics = new OrderStatisticsVO(); - + // 获取今日、本周、本月订单数 statistics.setTodayOrderCount(dashboardMapper.getTodayOrderCount()); statistics.setWeekOrderCount(dashboardMapper.getWeekOrderCount()); statistics.setMonthOrderCount(dashboardMapper.getMonthOrderCount()); - + // 获取本周订单总金额 statistics.setWeekTotalAmount(dashboardMapper.getWeekOrderAmount()); - + // 获取近一周订单趋势 List> weeklyData = dashboardMapper.getWeeklyOrderTrend(); statistics.setWeeklyTrend(convertToTrendList(weeklyData)); - + // 计算增长率 Integer lastWeekCount = dashboardMapper.getLastWeekOrderCount(); statistics.setGrowthRate(calculateGrowthRate(statistics.getWeekOrderCount(), lastWeekCount)); - + return statistics; } - + /** * 获取薪资统计数据 */ private SalaryStatisticsVO getSalaryStatistics() { SalaryStatisticsVO statistics = new SalaryStatisticsVO(); - + // 获取今日、本周、本月薪资支出 statistics.setTodaySalary(dashboardMapper.getTodaySalary()); statistics.setWeekSalary(dashboardMapper.getWeekSalary()); statistics.setMonthSalary(dashboardMapper.getMonthSalary()); - + // 获取近一周薪资趋势 List> weeklyData = dashboardMapper.getWeeklySalaryTrend(); statistics.setWeeklyTrend(convertToTrendList(weeklyData)); - + // 计算增长率 BigDecimal lastWeekSalary = dashboardMapper.getLastWeekSalary(); statistics.setGrowthRate(calculateGrowthRate(statistics.getWeekSalary(), lastWeekSalary)); - + // 计算平均日薪资 if (statistics.getWeekSalary() != null) { statistics.setAvgDailySalary(statistics.getWeekSalary().divide(new BigDecimal(7), 2, RoundingMode.HALF_UP)); } - + return statistics; } - + /** * 获取库存排行数据 */ private List getStockRanking() { List rankings = dashboardMapper.getStockRanking(); - + // 设置排名 for (int i = 0; i < rankings.size(); i++) { rankings.get(i).setRank(i + 1); - + // 设置物品类型名称 String itemType = rankings.get(i).getItemType(); if ("product".equals(itemType)) { @@ -115,16 +115,16 @@ public class GearDashboardServiceImpl implements IGearDashboardService { rankings.get(i).setItemTypeName("原材料"); } } - + return rankings; } - + /** * 获取其他统计数据 */ private OtherStatisticsVO getOtherStatistics() { OtherStatisticsVO statistics = new OtherStatisticsVO(); - + statistics.setActiveCustomerCount(dashboardMapper.getActiveCustomerCount()); statistics.setPendingOrderCount(dashboardMapper.getPendingOrderCount()); statistics.setLowStockCount(dashboardMapper.getLowStockCount()); @@ -133,20 +133,34 @@ public class GearDashboardServiceImpl implements IGearDashboardService { statistics.setTodayAttendanceRate(dashboardMapper.getTodayAttendanceRate()); statistics.setTotalProductCount(dashboardMapper.getTotalProductCount()); statistics.setTotalSupplierCount(dashboardMapper.getTotalSupplierCount()); - + return statistics; } - + /** * 转换趋势数据 */ private List convertToTrendList(List> data) { List trends = new ArrayList<>(); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM-dd"); - + + // 如果数据为空或没有元素,则返回包含7天默认数据的列表 + if (data == null || data.isEmpty()) { + // 创建近7天的默认数据 + for (int i = 6; i >= 0; i--) { + DailyTrendVO trend = new DailyTrendVO(); + LocalDate date = LocalDate.now().minusDays(i); + trend.setDate(date.format(formatter)); + trend.setLabel(trend.getDate()); + trend.setValue(BigDecimal.ZERO); + trends.add(trend); + } + return trends; + } + for (Map item : data) { DailyTrendVO trend = new DailyTrendVO(); - + // 处理日期 Object dateObj = item.get("date"); if (dateObj instanceof LocalDate) { @@ -154,7 +168,7 @@ public class GearDashboardServiceImpl implements IGearDashboardService { } else if (dateObj instanceof String) { trend.setDate((String) dateObj); } - + // 处理数值 Object valueObj = item.get("value"); if (valueObj instanceof BigDecimal) { @@ -163,15 +177,19 @@ public class GearDashboardServiceImpl implements IGearDashboardService { trend.setValue(new BigDecimal((Integer) valueObj)); } else if (valueObj instanceof Long) { trend.setValue(new BigDecimal((Long) valueObj)); + } else { + // 如果没有值,则设置为0 + trend.setValue(BigDecimal.ZERO); } - + trend.setLabel(trend.getDate()); trends.add(trend); } - + return trends; } - + + /** * 计算增长率 */ @@ -179,20 +197,20 @@ public class GearDashboardServiceImpl implements IGearDashboardService { if (current == null || previous == null) { return BigDecimal.ZERO; } - + BigDecimal currentValue = convertToBigDecimal(current); BigDecimal previousValue = convertToBigDecimal(previous); - + if (previousValue.compareTo(BigDecimal.ZERO) == 0) { return currentValue.compareTo(BigDecimal.ZERO) > 0 ? new BigDecimal(100) : BigDecimal.ZERO; } - + return currentValue.subtract(previousValue) .divide(previousValue, 4, RoundingMode.HALF_UP) .multiply(new BigDecimal(100)) .setScale(2, RoundingMode.HALF_UP); } - + /** * 转换为BigDecimal */ @@ -208,4 +226,4 @@ public class GearDashboardServiceImpl implements IGearDashboardService { } return BigDecimal.ZERO; } -} \ No newline at end of file +}