123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- 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<SystemDataCount> findSystemDataCount(Date startDate, Date endDate) {
- List<SystemDataCount> 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<String, SystemDataCount> 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<String, SystemDataCount> 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<String, List<RegionSystemDataCount>> findMonthSystemDataCount(String dateStr) {
- // 各区县的驿站工作人员统计数量
- List<Map<String, Object>> regionSiteUserCount = statisticsCQuery.findRegionSiteUserCount();
- // 解析日期,获取每周的开始结束时间
- List<Map<String, LocalDate>> weekDate = dateUtils.getWeekDateByMonth(dateStr);
- Map<String, List<RegionSystemDataCount>> result = new LinkedHashMap<>();
- // 汇总数据
- List<RegionSystemDataCount> sumData = new ArrayList<>();
- // 创建一个 map 来存储 regionCode 和 siteUserCount 的对应关系
- Map<String, Integer> siteUserCountMap = new HashMap<>();
- for (Map<String, Object> 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<RegionSystemDataCount> 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;
- }
- }
|