123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- package com.welampiot.service.impl;
- import com.welampiot.dao.NetCardInfoLogDao;
- import com.welampiot.dto.NetCardInfoLogDTO;
- import com.welampiot.service.NetCardInfoLogService;
- import com.welampiot.utils.ToolUtils;
- import com.welampiot.vo.NetCardLogVO;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import java.text.DecimalFormat;
- import java.time.LocalDate;
- import java.time.format.DateTimeFormatter;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Map;
- import java.util.stream.Collectors;
- @Service
- public class NetCardInfoLogServiceImpl implements NetCardInfoLogService {
- @Autowired
- private NetCardInfoLogDao netCardInfoLogDao;
- @Override
- public NetCardLogVO getNetCardLogListByLogVO(NetCardLogVO netCardLogVO) {
- String nowDate = ToolUtils.getNowDate();
- String[] split = nowDate.split("-");
- String year = split[0];
- String month = split[1];
- String monthStr = year + "-" + month;
- if (netCardLogVO.getDataType() == 1) {
- return getNetCardLogListByLampIdAndYear(netCardLogVO.getLampId(), year, month);
- }
- return getNetCardLogListByLampIdAndMonth(netCardLogVO.getLampId(), year, monthStr);
- }
- @Override
- public NetCardLogVO getNetCardLogListByLampIdAndMonth(Integer lampId, String year, String month) {
- List<NetCardInfoLogDTO> logs = netCardInfoLogDao.getNetCardLogListByLampIdAndMonth(lampId, month);
- // 按日期分组,取每个日期的最后一笔记录
- Map<LocalDate, NetCardInfoLogDTO> dailyLogs = logs.stream()
- .collect(Collectors.toMap(
- log -> parseLocalDate(log.getUpdateTime()),
- log -> log,
- (existing, replacement) -> existing.getUpdateTime().compareTo(replacement.getUpdateTime()) > 0 ? existing : replacement
- ));
- // 计算每天的流量使用量
- List<Object> dataList = new ArrayList<>();
- List<Object> dateList = new ArrayList<>();
- LocalDate firstDayOfMonth = LocalDate.parse(month + "-01", DateTimeFormatter.ofPattern("yyyy-MM-dd"));
- LocalDate lastDayOfMonth = firstDayOfMonth.withDayOfMonth(firstDayOfMonth.lengthOfMonth());
- DecimalFormat df = new DecimalFormat("0.##");
- for (LocalDate date = firstDayOfMonth; !date.isAfter(lastDayOfMonth); date = date.plusDays(1)) {
- NetCardInfoLogDTO currentLog = dailyLogs.get(date);
- NetCardInfoLogDTO previousLog = dailyLogs.get(date.minusDays(1));
- double usage = 0.0;
- if (currentLog != null) {
- if (previousLog == null) {
- usage = currentLog.getUseGprs(); // 第一天的流量
- } else {
- usage = currentLog.getUseGprs() - previousLog.getUseGprs();
- }
- }
- dataList.add(df.format(usage));
- dateList.add(date.toString());
- }
- NetCardLogVO netCardLogVO1 = new NetCardLogVO();
- netCardLogVO1.setDateList(dateList);
- netCardLogVO1.setDataList(dataList);
- return netCardLogVO1;
- }
- @Override
- public NetCardLogVO getNetCardLogListByLampIdAndYear(Integer lampId, String year, String month) {
- List<NetCardInfoLogDTO> logs = netCardInfoLogDao.getNetCardLogListByLampIdAndYear(lampId, year);
- // 创建一个包含所有月份的列表
- List<String> allMonths = new ArrayList<>();
- for (int i = 1; i <= 12; i++) {
- allMonths.add(String.format("%s-%02d", year, i));
- }
- // 将 logs 转换为 Map,键为月份,值为 NetCardInfoLogDTO
- Map<String, NetCardInfoLogDTO> monthlyLogs = logs.stream()
- .collect(Collectors.toMap(
- log -> log.getUpdateTime().substring(0, 7), // 取前7个字符,即 "YYYY-MM"
- log -> log,
- (existing, replacement) -> existing.getUpdateTime().compareTo(replacement.getUpdateTime()) > 0 ? existing : replacement
- ));
- // 初始化 dataList 和 dateList
- List<Object> dataList = new ArrayList<>();
- List<Object> dateList = new ArrayList<>();
- DecimalFormat df = new DecimalFormat("0.##");
- // 遍历所有月份,填充 dataList 和 dateList
- for (String months : allMonths) {
- NetCardInfoLogDTO log = monthlyLogs.get(months);
- double usage = log != null ? log.getUseGprs() : 0.0;
- dataList.add(df.format(usage));
- dateList.add(months);
- }
- NetCardLogVO netCardLogVO = new NetCardLogVO();
- netCardLogVO.setDateList(dateList);
- netCardLogVO.setDataList(dataList);
- return netCardLogVO;
- }
- private LocalDate parseLocalDate(String dateStr) {
- DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
- return LocalDate.parse(dateStr, formatter);
- }
- }
|