diff --git a/common/src/main/java/com/mh/common/page/PageRequest.java b/common/src/main/java/com/mh/common/page/PageRequest.java index 0853802..97ed3dd 100644 --- a/common/src/main/java/com/mh/common/page/PageRequest.java +++ b/common/src/main/java/com/mh/common/page/PageRequest.java @@ -20,7 +20,7 @@ public class PageRequest { /** * 每页数量 */ - private Map columnFilter = new HashMap(); + private Map columnFilters = new HashMap(); public int getPageNum() { return pageNum; @@ -34,13 +34,13 @@ public class PageRequest { public void setPageSize(int pageSize) { this.pageSize = pageSize; } - public Map getColumnFilter() { - return columnFilter; + public Map getColumnFilters() { + return columnFilters; } - public void setColumnFilter(Map columnFilters) { - this.columnFilter = columnFilters; + public void setColumnFilters(Map columnFilters) { + this.columnFilters = columnFilters; } public ColumnFilter getColumnFilter(String name) { - return columnFilter.get(name); + return columnFilters.get(name); } } diff --git a/user-service/src/main/java/com/mh/user/controller/EnergyDataController.java b/user-service/src/main/java/com/mh/user/controller/EnergyDataController.java index e042c23..c58bcc9 100644 --- a/user-service/src/main/java/com/mh/user/controller/EnergyDataController.java +++ b/user-service/src/main/java/com/mh/user/controller/EnergyDataController.java @@ -10,11 +10,13 @@ import com.mh.user.entity.EnergyDataEntity; import com.mh.user.entity.EnergyEntity; import com.mh.user.model.EnergyModel; import com.mh.user.service.EnergyDataService; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.ArrayList; import java.util.List; +@Slf4j @RestController @RequestMapping("energyData") public class EnergyDataController { @@ -46,14 +48,14 @@ public class EnergyDataController { public HttpResult queryMomEnergyData(@RequestBody EnergyModel energyModel){ try{ String projectId=energyModel.getProjectId(); - if(projectId!=null && projectId.length()>0){ + if(projectId!=null && !projectId.isEmpty()){ PageResult result = energyDataService.queryMomEnergyData(energyModel); return HttpResult.ok(result); }else{ return HttpResult.error(); } }catch (Exception e){ -// e.printStackTrace(); + log.error("查询数据异常", e); return HttpResult.error("查询出错!"); } @@ -64,15 +66,14 @@ public class EnergyDataController { public HttpResult queryYoyEnergyData(@RequestBody EnergyModel energyModel){ try{ String projectId=energyModel.getProjectId(); - if(projectId!=null && projectId.length()>0){ - List list=energyDataService.queryEnergyData(energyModel); - int count=energyDataService.getEnergyDataCount(energyModel); - return HttpResult.ok(count,list); + if(projectId!=null && !projectId.isEmpty()){ + PageResult result = energyDataService.queryYoyEnergyData(energyModel); + return HttpResult.ok(result); }else{ return HttpResult.error(); } }catch (Exception e){ -// e.printStackTrace(); + log.error("查询数据异常", e); return HttpResult.error("查询出错!"); } diff --git a/user-service/src/main/java/com/mh/user/controller/SysDictController.java b/user-service/src/main/java/com/mh/user/controller/SysDictController.java index af14c70..2e435b8 100644 --- a/user-service/src/main/java/com/mh/user/controller/SysDictController.java +++ b/user-service/src/main/java/com/mh/user/controller/SysDictController.java @@ -67,4 +67,10 @@ public class SysDictController { return HttpResult.ok(sysDictService.findByType(type)); } + @SysLogger(value="系统字典管理",optDesc = "根据设备类型查询系统字典管理") + @GetMapping("/queryTypes") + public HttpResult queryTypes() { + return HttpResult.ok(sysDictService.queryTypes()); + } + } diff --git a/user-service/src/main/java/com/mh/user/dto/EnergyMomYoyDataDTO.java b/user-service/src/main/java/com/mh/user/dto/EnergyMomYoyDataDTO.java index 9bb0437..533fd25 100644 --- a/user-service/src/main/java/com/mh/user/dto/EnergyMomYoyDataDTO.java +++ b/user-service/src/main/java/com/mh/user/dto/EnergyMomYoyDataDTO.java @@ -1,6 +1,7 @@ package com.mh.user.dto; import java.math.BigDecimal; +import java.math.RoundingMode; public class EnergyMomYoyDataDTO { @@ -65,7 +66,10 @@ public class EnergyMomYoyDataDTO { } public BigDecimal getElect() { - return elect; + if (this.elect != null) { + return this.elect.setScale(2, RoundingMode.HALF_UP); + } + return null; } public void setElect(BigDecimal elect) { @@ -73,7 +77,10 @@ public class EnergyMomYoyDataDTO { } public BigDecimal getCl() { - return cl; + if (this.cl != null) { + return this.cl.setScale(2, RoundingMode.HALF_UP); + } + return null; } public void setCl(BigDecimal cl) { @@ -81,7 +88,10 @@ public class EnergyMomYoyDataDTO { } public BigDecimal getCop() { - return cop; + if (this.cop != null) { + return this.cop.setScale(2, RoundingMode.HALF_UP); + } + return null; } public void setCop(BigDecimal cop) { @@ -89,7 +99,10 @@ public class EnergyMomYoyDataDTO { } public BigDecimal getLastElect() { - return lastElect; + if (this.lastElect != null) { + return this.lastElect.setScale(2, RoundingMode.HALF_UP); + } + return null; } public void setLastElect(BigDecimal lastElect) { @@ -97,7 +110,10 @@ public class EnergyMomYoyDataDTO { } public BigDecimal getLastCl() { - return lastCl; + if (this.lastCl != null) { + return this.lastCl.setScale(2, RoundingMode.HALF_UP); + } + return null; } public void setLastCl(BigDecimal lastCl) { @@ -105,6 +121,9 @@ public class EnergyMomYoyDataDTO { } public BigDecimal getLastCop() { + if (this.lastCop != null) { + return this.lastCop.setScale(2, RoundingMode.HALF_UP); + } return lastCop; } diff --git a/user-service/src/main/java/com/mh/user/mapper/EnergyDataMapper.java b/user-service/src/main/java/com/mh/user/mapper/EnergyDataMapper.java index a785f19..07176f8 100644 --- a/user-service/src/main/java/com/mh/user/mapper/EnergyDataMapper.java +++ b/user-service/src/main/java/com/mh/user/mapper/EnergyDataMapper.java @@ -93,7 +93,7 @@ public interface EnergyDataMapper extends BaseMapper { @Param("queryType") int queryType); @SelectProvider(type = EnergyDataProvider.class, method = "queryMomEnergyHourAndDayData") - @Results(id = "mom_yoy", value = { + @Results(id = "mom", value = { @Result(property = "curDate", column = "cur_date"), @Result(property = "projectId", column = "project_id"), @Result(property = "projectName", column = "project_name"), @@ -116,4 +116,29 @@ public interface EnergyDataMapper extends BaseMapper { @Param("lastStartDate") String lastStartDate, @Param("lastEndDate") String lastEndDate, @Param("dateType") String dateType); + + @SelectProvider(type = EnergyDataProvider.class, method = "queryYoyEnergyHourAndDayData") + @Results(id = "yoy", value = { + @Result(property = "curDate", column = "cur_date"), + @Result(property = "projectId", column = "project_id"), + @Result(property = "projectName", column = "project_name"), + @Result(property = "ambTemp", column = "amb_Temp"), + @Result(property = "humidity", column = "humidity"), + @Result(property = "elect", column = "elect"), + @Result(property = "cl", column = "cl"), + @Result(property = "cop", column = "cop"), + @Result(property = "last_elect", column = "lastElect"), + @Result(property = "last_cl", column = "lastCl"), + @Result(property = "last_cop", column = "lastCop"), + @Result(property = "elect_ratio", column = "electRatio"), + @Result(property = "cl_ratio", column = "clRatio"), + @Result(property = "cop_ratio", column = "copRatio") + }) + List queryYoyEnergyHourAndDayData(@Param("tableName") String tableName, + @Param("projectId") String projectId, + @Param("startDate") String startDate, + @Param("endDate") String endDate, + @Param("lastStartDate") String lastStartDate, + @Param("lastEndDate") String lastEndDate, + @Param("dateType") String dateType); } diff --git a/user-service/src/main/java/com/mh/user/mapper/provider/EnergyDataProvider.java b/user-service/src/main/java/com/mh/user/mapper/provider/EnergyDataProvider.java index 80ef5c6..9ea5934 100644 --- a/user-service/src/main/java/com/mh/user/mapper/provider/EnergyDataProvider.java +++ b/user-service/src/main/java/com/mh/user/mapper/provider/EnergyDataProvider.java @@ -347,11 +347,7 @@ public class EnergyDataProvider { " cop, " + " project_id, " + " convert(datetime, "); - if ("day".equals(params.get("dateType"))) { - sql.append(" concat(cur_date, ' 00:00:00')) as change_cur_date "); - } else if ("hour".equals(params.get("dateType"))) { - sql.append(" concat(cur_date, ':00:00')) as change_cur_date "); - } + concatMomSql(params, sql); sql.append( " from " + " ${tableName} " + @@ -369,11 +365,7 @@ public class EnergyDataProvider { " cop, " + " project_id, " + " convert(datetime, "); - if ("day".equals(params.get("dateType"))) { - sql.append(" concat(cur_date, ' 00:00:00')) as change_cur_date "); - } else if ("hour".equals(params.get("dateType"))) { - sql.append(" concat(cur_date, ':00:00')) as change_cur_date "); - } + concatMomSql(params, sql); sql.append( " from " + " ${tableName} " + @@ -401,4 +393,98 @@ public class EnergyDataProvider { " t1.cur_date "); return sql.toString(); } + + private static void concatMomSql(Map params, StringBuilder sql) { + if ("year".equals(params.get("dateType"))) { + sql.append(" concat(cur_date, '-01-01 00:00:00')) as change_cur_date "); + } else if ("month".equals(params.get("dateType"))) { + sql.append(" concat(cur_date, '-01 00:00:00')) as change_cur_date "); + } else if ("day".equals(params.get("dateType"))) { + sql.append(" concat(cur_date, ' 00:00:00')) as change_cur_date "); + } else if ("hour".equals(params.get("dateType"))) { + sql.append(" concat(cur_date, ':00:00')) as change_cur_date "); + } + } + + public String queryYoyEnergyHourAndDayData(Map params) { + StringBuilder sql = new StringBuilder(); + sql.append("select " + + " t1.cur_date, " + + " t1.elect, " + + " t1.cl, " + + " t1.cop, " + + " t1.project_id, " + + " pi2.project_name, " + + " t2.elect as last_elect, " + + " t2.cl as last_cl, " + + " t2.cop as last_cop, " + + " case " + + " when t2.elect > 0 then concat(convert(decimal(18, 2),(t1.elect - t2.elect)/ t2.elect * 100), '%') " + + " when t2.elect = 0 then '0' " + + " else '上期无数据' " + + " end elect_ratio, " + + " case " + + " when t2.cl > 0 then concat(convert(decimal(18, 2),(t1.cl - t2.cl)/ t2.cl * 100), '%') " + + " when t2.cl = 0 then '0' " + + " else '上期无数据' " + + " end cl_ratio, " + + " case " + + " when t2.cop > 0 then concat(convert(decimal(18, 2),(t1.cop - t2.cop)/ t2.cop * 100), '%') " + + " when t2.cop = 0 then '0' " + + " else '上期无数据' " + + " end cop_ratio, " + + " ht.amb_temp, " + + " ht.humidity " + + "from " + + " ( " + + " select " + + " cur_date, " + + " elect, " + + " cl, " + + " cop, " + + " project_id, " + + " convert(datetime, "); + concatMomSql(params, sql); + sql.append(" from " + + " ${tableName} " + + " where " + + " cur_date >= #{startDate} " + + " and cur_date <= #{endDate} " + + " and project_id = #{projectId} " + + " ) t1 " + + " left join " + + " ( " + + " select " + + " cur_date, " + + " elect, " + + " cl, " + + " cop, " + + " project_id, " + + " convert(datetime, "); + concatMomSql(params, sql); + sql.append(" from " + + " ${tableName} " + + " where " + + " cur_date >= #{lastStartDate} " + + " and cur_date <= #{lastEndDate} " + + " and project_id = #{projectId} " + + " ) t2 " + + " on " + + " t1.change_cur_date = dateadd(year, 1, t2.change_cur_date) " + + " left join hour_temperature ht " + + " on " + + " ht.cur_date = t1.change_cur_date " + + " left join ( " + + " select " + + " id, " + + " project_name " + + " from " + + " project_info " + + " where " + + " id = #{projectId}) pi2 " + + " on " + + " pi2.id = t1.project_id " + + "order by t1.cur_date "); + return sql.toString(); + } } diff --git a/user-service/src/main/java/com/mh/user/service/EnergyDataService.java b/user-service/src/main/java/com/mh/user/service/EnergyDataService.java index 1d937c8..c91b760 100644 --- a/user-service/src/main/java/com/mh/user/service/EnergyDataService.java +++ b/user-service/src/main/java/com/mh/user/service/EnergyDataService.java @@ -14,4 +14,6 @@ public interface EnergyDataService { int getEnergyDataCount(EnergyModel energyModel); PageResult queryMomEnergyData(EnergyModel energyModel); + + PageResult queryYoyEnergyData(EnergyModel energyModel); } diff --git a/user-service/src/main/java/com/mh/user/service/SysDictService.java b/user-service/src/main/java/com/mh/user/service/SysDictService.java index 1f68cad..ea93af0 100644 --- a/user-service/src/main/java/com/mh/user/service/SysDictService.java +++ b/user-service/src/main/java/com/mh/user/service/SysDictService.java @@ -29,4 +29,6 @@ public interface SysDictService extends CurdService { void createDictDataCache(); List findCacheByType(String type); + + List queryTypes(); } diff --git a/user-service/src/main/java/com/mh/user/service/impl/EnergyDataServiceImpl.java b/user-service/src/main/java/com/mh/user/service/impl/EnergyDataServiceImpl.java index 85b3539..cb0e832 100644 --- a/user-service/src/main/java/com/mh/user/service/impl/EnergyDataServiceImpl.java +++ b/user-service/src/main/java/com/mh/user/service/impl/EnergyDataServiceImpl.java @@ -11,6 +11,7 @@ import com.mh.user.entity.EnergyDataEntity; import com.mh.user.mapper.EnergyDataMapper; import com.mh.user.model.EnergyModel; import com.mh.user.service.EnergyDataService; +import com.mh.user.utils.ExchangeStringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -142,6 +143,58 @@ public class EnergyDataServiceImpl implements EnergyDataService { newEndDayDate = newEndDayDate.minusDays(1).withHour(23).withMinute(59).withSecond(59); } lastEndDate = newEndDayDate.format(dayMatter); + break; + case 4: + tableName = "energy_data_month"; + dateType = "month"; + // 假设传入的时间格式为 "2023" + String yearStr = startDate; + + // 1. 获取当前年份 + int year = Integer.parseInt(yearStr); + + // 2. 计算今年的开始月份 + int startMonth = 1; + + // 3. 获取当前月份 + LocalDate now = LocalDate.now(); + int currentMonth = now.getMonthValue(); + + // 4. 计算环比月份 + int yearForComparison = year; + int monthForComparison = currentMonth - 1; + if (monthForComparison == 0) { + monthForComparison = 12; + yearForComparison = year - 1; + } + + int lastMonth = startMonth - 1; + int lastYear = year; + if (lastMonth == 0) { + lastMonth = 12; + lastYear = year - 1; + } + + // 当前时间 + startDate = year + "-" + ExchangeStringUtil.addZeroForNum(String.valueOf(startMonth), 2); + endDate = year + "-" + ExchangeStringUtil.addZeroForNum(String.valueOf(currentMonth), 2); + + // 环比时间 + lastStartDate = lastYear + "-" + ExchangeStringUtil.addZeroForNum(String.valueOf(lastMonth), 2); + lastEndDate = yearForComparison + "-" + ExchangeStringUtil.addZeroForNum(String.valueOf(monthForComparison), 2); + break; + case 5: + tableName = "energy_data_year"; + dateType = "year"; + // 假设传入的时间格式为 "2023" + // 1. 获取当前年份 + int startYear = Integer.parseInt(startDate); + int endYear = Integer.parseInt(endDate); + + // 环比时间 + lastStartDate = String.valueOf(startYear - 1); + lastEndDate = String.valueOf(endYear - 1); + break; default: break; } @@ -160,4 +213,128 @@ public class EnergyDataServiceImpl implements EnergyDataService { dateType); return MybatisPageHelper.getPageResult(pageRequest, new PageInfo<>(resultList)); } + + @Override + public PageResult queryYoyEnergyData(EnergyModel energyModel) { + String projectId=energyModel.getProjectId(); + String startDate=energyModel.getStartDate(); + String endDate=energyModel.getEndDate(); + int page=energyModel.getPage(); + int limit=energyModel.getLimit(); + int type=energyModel.getType(); + int queryType=energyModel.getQueryType(); + + String lastStartDate = ""; + String lastEndDate = ""; + String tableName = "energy_data_hour"; + String dateType = "hour"; + + if (StringUtils.isBlank(endDate)) { + endDate = startDate; + } + + switch (type) { + case 1: + // 按十分钟查询 + break; + case 2: + // 按小时查询 + startDate = startDate + " 00"; + endDate = endDate + " 23"; + + // 定义日期时间格式 + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH"); + + // startDate 减一年 + LocalDateTime startDateTime = LocalDateTime.parse(startDate, formatter); + LocalDateTime newStartDateTime = startDateTime.minusYears(1); + lastStartDate = newStartDateTime.format(formatter); + + + // endDate 减一年 + LocalDateTime endDateTime = LocalDateTime.parse(endDate, formatter); + LocalDateTime newEndDateTime = endDateTime.minusYears(1); + lastEndDate = newEndDateTime.format(formatter); + break; + case 3: + tableName = "energy_data_day"; + dateType = "day"; + // 按天查询 + YearMonth yearMonthStart = YearMonth.parse(startDate, DateTimeFormatter.ofPattern("yyyy-MM")); + LocalDate firstDayOfMonth = yearMonthStart.atDay(1); + LocalDate lastDayOfMonth = yearMonthStart.atEndOfMonth(); + + startDate = firstDayOfMonth.toString(); + endDate = lastDayOfMonth.toString(); + + // 定义日期时间格式 + DateTimeFormatter dayMatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + + // startDate 减一年 + LocalDateTime startDayDate = LocalDateTime.parse(startDate + "T00:00:00", DateTimeFormatter.ISO_LOCAL_DATE_TIME); + LocalDateTime newStartDayDate = startDayDate.minusYears(1); + lastStartDate = newStartDayDate.format(dayMatter); + + // endDate 减一年 + LocalDateTime endDayDate = LocalDateTime.parse(endDate + "T23:59:59", DateTimeFormatter.ISO_LOCAL_DATE_TIME); + LocalDateTime newEndDayDate = endDayDate.minusYears(1); + if (newEndDayDate.getDayOfMonth() == 1) { + newEndDayDate = newEndDayDate.minusYears(1).withHour(23).withMinute(59).withSecond(59); + } + lastEndDate = newEndDayDate.format(dayMatter); + break; + case 4: + tableName = "energy_data_month"; + dateType = "month"; + // 假设传入的时间格式为 "2023" + String yearStr = startDate; + + // 1. 获取当前年份 + int year = Integer.parseInt(yearStr); + + // 2. 计算今年的开始月份 + int startMonth = 1; + + // 3. 获取当前月份 + LocalDate now = LocalDate.now(); + int currentMonth = now.getMonthValue(); + + // 当前时间 + startDate = year + "-" + ExchangeStringUtil.addZeroForNum(String.valueOf(startMonth), 2); + endDate = year + "-" + ExchangeStringUtil.addZeroForNum(String.valueOf(currentMonth), 2); + + // 环比时间 + lastStartDate = year-1 + "-" + ExchangeStringUtil.addZeroForNum(String.valueOf(startMonth), 2); + lastEndDate = year-1 + "-" + ExchangeStringUtil.addZeroForNum(String.valueOf(currentMonth), 2); + break; + case 5: + tableName = "energy_data_year"; + dateType = "year"; + // 假设传入的时间格式为 "2023" + // 1. 获取当前年份 + int startYear = Integer.parseInt(startDate); + int endYear = Integer.parseInt(endDate); + + // 环比时间 + lastStartDate = String.valueOf(startYear - 1); + lastEndDate = String.valueOf(endYear - 1); + break; + default: + break; + } + PageRequest pageRequest = new PageRequest(); + if (page != 0) { + PageHelper.startPage(page, limit); + pageRequest.setPageNum(page); + pageRequest.setPageSize(limit); + } + List resultList = energyDataMapper.queryYoyEnergyHourAndDayData(tableName, + projectId, + startDate, + endDate, + lastStartDate, + lastEndDate, + dateType); + return MybatisPageHelper.getPageResult(pageRequest, new PageInfo<>(resultList)); + } } diff --git a/user-service/src/main/java/com/mh/user/service/impl/SysDictServiceImpl.java b/user-service/src/main/java/com/mh/user/service/impl/SysDictServiceImpl.java index 3f13b21..c6991b9 100644 --- a/user-service/src/main/java/com/mh/user/service/impl/SysDictServiceImpl.java +++ b/user-service/src/main/java/com/mh/user/service/impl/SysDictServiceImpl.java @@ -80,15 +80,21 @@ public class SysDictServiceImpl implements SysDictService { @Override public PageResult findPage(PageRequest pageRequest) { - String systemID = StringUtils.getColumnFilterValue(pageRequest, "systemId"); + String systemId = StringUtils.getColumnFilterValue(pageRequest, "systemId"); + String type = StringUtils.getColumnFilterValue(pageRequest, "type"); // 设置分页参数 int pageNum = pageRequest.getPageNum(); int pageSize = pageRequest.getPageSize(); if (pageNum != 0) { PageHelper.startPage(pageNum, pageSize); } - List sysDictList = sysDictMapper.selectList( - new QueryWrapper().orderByDesc("create_time")); + QueryWrapper sysDictQueryWrapper = new QueryWrapper<>(); + if (!StringUtils.isBlank(type)) { + sysDictQueryWrapper.eq("type", type); + } + sysDictQueryWrapper.ne("parent_id", 0); + sysDictQueryWrapper.orderByDesc("create_time"); + List sysDictList = sysDictMapper.selectList(sysDictQueryWrapper); return MybatisPageHelper.getPageResult(pageRequest, new PageInfo<>(sysDictList)); } @@ -136,4 +142,9 @@ public class SysDictServiceImpl implements SysDictService { } return sysDictList.stream().filter(item -> item.getType().equals(type)).collect(Collectors.toList()); } + + @Override + public List queryTypes() { + return sysDictMapper.selectList(new QueryWrapper().eq("parent_id", 0).orderByAsc("sort")); + } }