package com.hz.employmentsite.services.impl.statistics; import com.hz.employmentsite.mapper.cquery.StatisticsCQuery; import com.hz.employmentsite.services.service.statistics.StatisticsService; import com.hz.employmentsite.util.DateUtils; import com.hz.employmentsite.vo.statistics.RegionSystemDataCount; import com.hz.employmentsite.vo.statistics.SystemDataCount; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.time.LocalDate; import java.util.*; @Service("StatisticsService") public class StatisticsServiceImpl implements StatisticsService { @Autowired private StatisticsCQuery statisticsCQuery; @Autowired private DateUtils dateUtils; /** * 查询指定时间段系统使用情况 * * @param startDate 开始时间 * @param endDate 结束时间 * @return 数据统计VO类集合 */ @Override public List findSystemDataCount(Date startDate, Date endDate) { List list = statisticsCQuery.findSystemDataCount(startDate, endDate); // 初始化总和变量 SystemDataCount totalData = new SystemDataCount("合计", "合计", "合计", "合计", 0, 0, 0, 0); // 遍历list,计算各项总和 for (SystemDataCount data : list) { totalData.setSiteUserCount(totalData.getSiteUserCount() + data.getSiteUserCount()); totalData.setCompanyCount(totalData.getCompanyCount() + data.getCompanyCount()); totalData.setPostCount(totalData.getPostCount() + data.getPostCount()); totalData.setJobUserCount(totalData.getJobUserCount() + data.getJobUserCount()); } // 将合计对象插入到list的第一个位置 list.add(0, totalData); // 计算每个县区的小计 Map regionCounts = new HashMap<>(); for (SystemDataCount data : list) { if (!data.getRegionName().equals("合计")) { String regionCode = data.getRegionCode(); if (!regionCounts.containsKey(regionCode)) { regionCounts.put(regionCode, new SystemDataCount(data.getSiteID(), "小计", data.getRegionCode(), data.getRegionName(), 0, 0, 0, 0)); } SystemDataCount regionTotal = regionCounts.get(regionCode); regionTotal.setSiteUserCount(regionTotal.getSiteUserCount() + data.getSiteUserCount()); regionTotal.setCompanyCount(regionTotal.getCompanyCount() + data.getCompanyCount()); regionTotal.setPostCount(regionTotal.getPostCount() + data.getPostCount()); regionTotal.setJobUserCount(regionTotal.getJobUserCount() + data.getJobUserCount()); } } // 将小计结果插入到每个相同regionCode的最前面 for (Map.Entry entry : regionCounts.entrySet()) { String regionCode = entry.getKey(); SystemDataCount regionTotal = entry.getValue(); // 找到相同regionCode的第一个位置 int index = 0; for (int i = 0; i < list.size(); i++) { if (list.get(i).getRegionCode().equals(regionCode)) { index = i; break; } } list.add(index, regionTotal); } return list; } /** * 查询指定月份的系统使用情况统计 * * @param dateStr 月份日期 * @return */ @Override public Map> findMonthSystemDataCount(String dateStr) { // 各区县的驿站工作人员统计数量 List> regionSiteUserCount = statisticsCQuery.findRegionSiteUserCount(); // 解析日期,获取每周的开始结束时间 List> weekDate = dateUtils.getWeekDateByMonth(dateStr); Map> result = new LinkedHashMap<>(); // 汇总数据 List sumData = new ArrayList<>(); // 创建一个 map 来存储 regionCode 和 siteUserCount 的对应关系 Map siteUserCountMap = new HashMap<>(); for (Map objectMap : regionSiteUserCount) { String regionCode = (String) objectMap.get("code"); String regionName = (String) objectMap.get("name"); int siteUserCount = ((Long) objectMap.get("siteUserCount")).intValue(); siteUserCountMap.put(regionCode, siteUserCount); // 计算合计数量 RegionSystemDataCount summaryData = new RegionSystemDataCount(regionCode, regionName, siteUserCount, 0, 0, 0); sumData.add(summaryData); } // 按每周的日期进行系统使用数据查询 for (int i = 0; i < weekDate.size(); i++) { // 获取当前周的开始日期和结束日期 LocalDate startDate = weekDate.get(i).get("startDate"); LocalDate endDate = weekDate.get(i).get("endDate"); // 查询当前周的系统使用数据 List contData = statisticsCQuery.findWeekSystemDataCount(startDate, endDate); // 创建合计数据 RegionSystemDataCount summaryData = new RegionSystemDataCount("100", "合计", 0, 0, 0, 0); // 填充驿站工作人员统计数量 for (RegionSystemDataCount dataCount : contData) { String regionCode = dataCount.getRegionCode(); if (siteUserCountMap.containsKey(regionCode)) { dataCount.setSiteUserCount(siteUserCountMap.get(regionCode)); } // 合计数据累加 summaryData.setSiteUserCount(summaryData.getSiteUserCount() + dataCount.getSiteUserCount()); summaryData.setCompanyCount(summaryData.getCompanyCount() + dataCount.getCompanyCount()); summaryData.setPostCount(summaryData.getPostCount() + dataCount.getPostCount()); summaryData.setJobUserCount(summaryData.getJobUserCount() + dataCount.getJobUserCount()); // 将各个区县的数据累加到汇总 for (RegionSystemDataCount sumDatum : sumData) { if (sumDatum.getRegionCode().equals(dataCount.getRegionCode())) { sumDatum.setSiteUserCount(dataCount.getSiteUserCount()); sumDatum.setCompanyCount(sumDatum.getCompanyCount() + dataCount.getCompanyCount()); sumDatum.setPostCount(sumDatum.getPostCount() + dataCount.getPostCount()); sumDatum.setJobUserCount(sumDatum.getJobUserCount() + dataCount.getJobUserCount()); } } } // 将汇总对象添加到结果中 contData.add(summaryData); // 保存结果 result.put("第" + (i + 1) + "周", contData); } // 计算汇总的合计 RegionSystemDataCount summaryData = new RegionSystemDataCount("100", "合计", 0, 0, 0, 0); for (RegionSystemDataCount sumDatum : sumData) { summaryData.setSiteUserCount(summaryData.getSiteUserCount() + sumDatum.getSiteUserCount()); summaryData.setCompanyCount(summaryData.getCompanyCount() + sumDatum.getCompanyCount()); summaryData.setPostCount(summaryData.getPostCount() + sumDatum.getPostCount()); summaryData.setJobUserCount(summaryData.getJobUserCount() + sumDatum.getJobUserCount()); } sumData.add(summaryData); result.put("汇总", sumData); return result; } }