package cn.iocoder.yudao.module.mes.service.home; import cn.iocoder.yudao.module.mes.controller.admin.home.vo.MesBagCodeHomeStatusRespVO; import cn.iocoder.yudao.module.mes.controller.admin.home.vo.MesBagCodeHomeSummaryRespVO; import cn.iocoder.yudao.module.mes.controller.admin.home.vo.MesBagCodeHomeTrendRespVO; import cn.iocoder.yudao.module.mes.dal.mysql.home.MesBagCodeHomeStatisticsMapper; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; /** * MES 基础数据与一袋一码 首页统计 Service 实现类 * * @author 超级管理员 */ @Service public class MesBagCodeHomeStatisticsServiceImpl implements MesBagCodeHomeStatisticsService { @Resource private MesBagCodeHomeStatisticsMapper homeStatisticsMapper; @Override public MesBagCodeHomeSummaryRespVO getHomeSummary() { MesBagCodeHomeSummaryRespVO summary = new MesBagCodeHomeSummaryRespVO(); // 1. 基础数据 summary.setMdmItemCount(getCount(homeStatisticsMapper.selectMdmItemCount())); summary.setMesItemCount(getCount(homeStatisticsMapper.selectMesItemCount())); summary.setItemTypeCount(getCount(homeStatisticsMapper.selectItemTypeCount())); summary.setUnitMeasureCount(getCount(homeStatisticsMapper.selectUnitMeasureCount())); // 2. 一袋一码 summary.setLineCount(getCount(homeStatisticsMapper.selectLineCount())); summary.setBatchCount(getCount(homeStatisticsMapper.selectBatchCount())); summary.setBagCodeCount(getCount(homeStatisticsMapper.selectBagCodeCount())); summary.setPalletCount(getCount(homeStatisticsMapper.selectPalletCount())); // 3. 状态分布 summary.setBatchStatusList(toStatusList(homeStatisticsMapper.selectBatchCountGroupByStatus())); summary.setBagCodeStatusList(toStatusList(homeStatisticsMapper.selectBagCodeCountGroupByStatus())); return summary; } @Override public List getBagCodeTrend(Integer days) { LocalDate endDate = LocalDate.now().plusDays(1); LocalDate startDate = endDate.minusDays(days); LocalDateTime beginTime = startDate.atStartOfDay(); LocalDateTime endTime = endDate.atStartOfDay(); // 查询数据库 List> dbData = homeStatisticsMapper.selectDailyBagCodeTrend(beginTime, endTime); Map> dateMap = new LinkedHashMap<>(); for (Map row : dbData) { dateMap.put((String) row.get("date"), row); } // 补全所有日期(无数据的日期填 0) DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd"); List result = new ArrayList<>(); for (LocalDate d = startDate; d.isBefore(endDate); d = d.plusDays(1)) { String dateStr = d.format(fmt); Map row = dateMap.get(dateStr); MesBagCodeHomeTrendRespVO vo = new MesBagCodeHomeTrendRespVO(); vo.setDate(dateStr); vo.setCount(row != null ? ((Number) row.get("count")).longValue() : 0L); result.add(vo); } return result; } // ========== 工具方法 ========== private Long getCount(Long count) { return count != null ? count : 0L; } private List toStatusList(List> stats) { List result = new ArrayList<>(); if (stats == null) { return result; } for (Map stat : stats) { Integer status = ((Number) stat.get("status")).intValue(); Long count = ((Number) stat.get("count")).longValue(); result.add(new MesBagCodeHomeStatusRespVO(status, count)); } return result; } }