NetCardInfoLogServiceImpl.java 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. package com.welampiot.service.impl;
  2. import com.welampiot.dao.NetCardInfoLogDao;
  3. import com.welampiot.dto.NetCardInfoLogDTO;
  4. import com.welampiot.service.NetCardInfoLogService;
  5. import com.welampiot.utils.ToolUtils;
  6. import com.welampiot.vo.NetCardLogVO;
  7. import org.springframework.beans.factory.annotation.Autowired;
  8. import org.springframework.stereotype.Service;
  9. import java.text.DecimalFormat;
  10. import java.time.LocalDate;
  11. import java.time.format.DateTimeFormatter;
  12. import java.util.ArrayList;
  13. import java.util.List;
  14. import java.util.Map;
  15. import java.util.stream.Collectors;
  16. @Service
  17. public class NetCardInfoLogServiceImpl implements NetCardInfoLogService {
  18. @Autowired
  19. private NetCardInfoLogDao netCardInfoLogDao;
  20. @Override
  21. public NetCardLogVO getNetCardLogListByLogVO(NetCardLogVO netCardLogVO) {
  22. String nowDate = ToolUtils.getNowDate();
  23. String[] split = nowDate.split("-");
  24. String year = split[0];
  25. String month = split[1];
  26. if (netCardLogVO.getDataType() == 1) {
  27. return getNetCardLogListByLampIdAndYear(netCardLogVO.getLampId(), year, month);
  28. }
  29. return getNetCardLogListByLampIdAndMonth(netCardLogVO.getLampId(), year, month);
  30. }
  31. @Override
  32. public NetCardLogVO getNetCardLogListByLampIdAndMonth(Integer lampId, String year, String month) {
  33. List<NetCardInfoLogDTO> logs = netCardInfoLogDao.getNetCardLogListByLampIdAndMonth(lampId, month);
  34. // 按日期分组,取每个日期的最后一笔记录
  35. Map<LocalDate, NetCardInfoLogDTO> dailyLogs = logs.stream()
  36. .collect(Collectors.toMap(
  37. log -> parseLocalDate(log.getUpdateTime()),
  38. log -> log,
  39. (existing, replacement) -> existing.getUpdateTime().compareTo(replacement.getUpdateTime()) > 0 ? existing : replacement
  40. ));
  41. // 计算每天的流量使用量
  42. List<Object> dataList = new ArrayList<>();
  43. List<Object> dateList = new ArrayList<>();
  44. LocalDate firstDayOfMonth = LocalDate.parse(year + "-" + month + "-01", DateTimeFormatter.ofPattern("yyyy-MM-dd"));
  45. LocalDate lastDayOfMonth = firstDayOfMonth.withDayOfMonth(firstDayOfMonth.lengthOfMonth());
  46. DecimalFormat df = new DecimalFormat("0.##");
  47. for (LocalDate date = firstDayOfMonth; !date.isAfter(lastDayOfMonth); date = date.plusDays(1)) {
  48. NetCardInfoLogDTO currentLog = dailyLogs.get(date);
  49. NetCardInfoLogDTO previousLog = dailyLogs.get(date.minusDays(1));
  50. double usage = 0.0;
  51. if (currentLog != null) {
  52. if (previousLog == null) {
  53. usage = currentLog.getUseGprs(); // 第一天的流量
  54. } else {
  55. usage = currentLog.getUseGprs() - previousLog.getUseGprs();
  56. }
  57. }
  58. dataList.add(df.format(usage));
  59. dateList.add(date.toString());
  60. }
  61. NetCardLogVO netCardLogVO1 = new NetCardLogVO();
  62. netCardLogVO1.setDateList(dateList);
  63. netCardLogVO1.setDataList(dataList);
  64. return netCardLogVO1;
  65. }
  66. @Override
  67. public NetCardLogVO getNetCardLogListByLampIdAndYear(Integer lampId, String year, String month) {
  68. List<NetCardInfoLogDTO> logs = netCardInfoLogDao.getNetCardLogListByLampIdAndYear(lampId, year);
  69. // 创建一个包含所有月份的列表
  70. List<String> allMonths = new ArrayList<>();
  71. for (int i = 1; i <= 12; i++) {
  72. allMonths.add(String.format("%s-%02d", year, i));
  73. }
  74. // 按月份分组,取每个月的最后一笔记录
  75. Map<String, NetCardInfoLogDTO> monthlyLogs = logs.stream()
  76. .collect(Collectors.toMap(
  77. log -> log.getUpdateTime().substring(0, 7), // 取前7个字符,即 "YYYY-MM"
  78. log -> log,
  79. (existing, replacement) -> existing.getUpdateTime().compareTo(replacement.getUpdateTime()) > 0 ? existing : replacement
  80. ));
  81. // 初始化 dataList 和 dateList
  82. List<Object> dataList = new ArrayList<>();
  83. List<Object> dateList = new ArrayList<>();
  84. DecimalFormat df = new DecimalFormat("0.##");
  85. // 遍历所有月份,填充 dataList 和 dateList
  86. for (String months : allMonths) {
  87. NetCardInfoLogDTO log = monthlyLogs.get(month);
  88. double usage = log != null ? log.getUseGprs() : 0.0;
  89. dataList.add(df.format(usage));
  90. dateList.add(months);
  91. }
  92. NetCardLogVO netCardLogVO = new NetCardLogVO();
  93. netCardLogVO.setDateList(dateList);
  94. netCardLogVO.setDataList(dataList);
  95. return netCardLogVO;
  96. }
  97. private LocalDate parseLocalDate(String dateStr) {
  98. DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
  99. return LocalDate.parse(dateStr, formatter);
  100. }
  101. }