diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/device/KwMeterDataController.java b/mallinkAdmin/src/main/java/com/iformall/controller/device/KwMeterDataController.java index 5ef9e575c..0cc98f259 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/device/KwMeterDataController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/device/KwMeterDataController.java @@ -10,6 +10,8 @@ import com.iformall.domain.dto.KwMeterDataDto; import com.iformall.domain.po.KwMeterData; +import com.iformall.domain.vo.KwMeterDataVo; +import com.iformall.enums.EnumMeterDataReportType; import com.iformall.service.kw.KwMeterDataService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; @@ -20,7 +22,13 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; -import java.util.List; +import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; +import java.time.temporal.TemporalAdjusters; +import java.util.*; @RestController @RequestMapping("kwMeterData") @@ -36,14 +44,53 @@ public class KwMeterDataController extends BaseController { @ApiImplicitParams({ @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true), @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)}) - @SystemControllerLog(description = "电表设备-设备列表") + @SystemControllerLog(description = "电表设备-电表数据") public Result list(@ModelAttribute KwMeterDataDto kwMeterDataDto, Integer pageNum, Integer pageSize) { if (kwMeterDataDto == null) kwMeterDataDto = new KwMeterDataDto(); kwMeterDataDto.setTenantId(getTenantId()); - return new ResultData(kwMeterDataService.listVoAsPage(kwMeterDataDto, pageNum,pageSize)); + return new ResultData(kwMeterDataService.listVoAsPage(kwMeterDataDto, pageNum, pageSize)); } + @ApiOperation("数据列表") + @GetMapping("listPower") + @SystemControllerLog(description = "电表设备-电表数据") + public Result listPower(@ModelAttribute KwMeterDataDto kwMeterDataDto) { + if (kwMeterDataDto == null) kwMeterDataDto = new KwMeterDataDto(); + kwMeterDataDto.setTenantId(getTenantId()); + + List kwMeterDataVos = kwMeterDataService.findVoList(kwMeterDataDto); + + List monthDailyPower = new ArrayList<>(); + + if (kwMeterDataDto.getReportTime() != null + && kwMeterDataDto.getReportType().equals(EnumMeterDataReportType.DAY.getCode())) { + Date date = null; + try { + date = new SimpleDateFormat("yyyy-MM").parse(kwMeterDataDto.getReportTime()); + } catch (Exception e) { + return new ResultData(ErrorCode.SYS_PARAMETER_ERROR); + } + + LocalDate localDate= LocalDateTime.ofInstant(date.toInstant(),ZoneId.systemDefault()).toLocalDate(); + int days = localDate.lengthOfMonth(); + LocalDate firstDate = localDate.with(TemporalAdjusters.firstDayOfMonth()); + for (int i = 0; i < days; i++) { + String dateStr = DateTimeFormatter.ofPattern("yyyy-MM-dd").format(firstDate.plusDays(i)); + Optional optionalKwMeterDataVo = kwMeterDataVos.stream().filter(md -> md.getReportTime().equals(dateStr)).findFirst(); + if (optionalKwMeterDataVo.isPresent()) + monthDailyPower.add(optionalKwMeterDataVo.get()); + else { + KwMeterDataVo kwMeterDataVo = new KwMeterDataVo(); + kwMeterDataVo.setReportTime(dateStr); + monthDailyPower.add(kwMeterDataVo); + } + } + return new ResultData(monthDailyPower); + } + + return new ResultData(kwMeterDataVos); + } @ApiOperation("获取电量") @GetMapping("getPower") @@ -63,5 +110,4 @@ public class KwMeterDataController extends BaseController { return new ResultData(kwMeterDataService.getPower(kwMeterDataDto)); } - } diff --git a/mallinkCallback/src/main/java/com/iformall/controller/device/KwBoxV1Controller.java b/mallinkCallback/src/main/java/com/iformall/controller/device/KwBoxV1Controller.java index 56d4ec484..94a0aff44 100644 --- a/mallinkCallback/src/main/java/com/iformall/controller/device/KwBoxV1Controller.java +++ b/mallinkCallback/src/main/java/com/iformall/controller/device/KwBoxV1Controller.java @@ -171,7 +171,7 @@ public class KwBoxV1Controller extends BaseController { Instant instant = deviceTime.toInstant(); ZoneId zone = ZoneId.systemDefault(); LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zone); - if (localDateTime.getYear() == 1980) + if (localDateTime.getYear() != LocalDateTime.now().getYear()) deviceTime = new Date(); List> metersData = (List>)paramMap.get("meters"); @@ -230,8 +230,14 @@ public class KwBoxV1Controller extends BaseController { Date deviceTime = null; try { deviceTime=simpleDateFormat.parse(time); - } catch(Exception e) { - return new ResultData(ErrorCode.SYS_PARAMETER_ERROR); + } catch(Exception e1) { + simpleDateFormat=new SimpleDateFormat("yy/MM/dd,HH:mm:ss+00"); + simpleDateFormat.setTimeZone(TimeZone.getTimeZone("GMT+:00:00")); + try { + deviceTime=simpleDateFormat.parse(time); + } catch(Exception e2) { + return new ResultData(ErrorCode.SYS_PARAMETER_ERROR); + } } switch(cmd) diff --git a/mallinkService/src/main/java/com/iformall/domain/dto/KwMeterDataDto.java b/mallinkService/src/main/java/com/iformall/domain/dto/KwMeterDataDto.java index 6cac00eda..e9911fc69 100644 --- a/mallinkService/src/main/java/com/iformall/domain/dto/KwMeterDataDto.java +++ b/mallinkService/src/main/java/com/iformall/domain/dto/KwMeterDataDto.java @@ -60,13 +60,18 @@ public class KwMeterDataDto extends BaseEntity { @io.swagger.annotations.ApiModelProperty(value = "商户ID", name = "merchantId") private Long merchantId; + public static enum Field { - Id_ASC("`id` ASC"), - Id_DESC("`id` DESC"), - DeviceTime_ASC("`device_time` ASC"), - DeviceTime_DESC("`device_time` DESC"), - CreateTime_ASC("`create_time` ASC"), - CreateTime_DESC("`create_time` DESC"); + RecordStartTime_ASC("`recordStartTime` ASC"), + RecordStartTime_DESC("`recordStartTime` DESC"), + RecordEndTime_ASC("`recordEndTime` ASC"), + RecordEndTime_DESC("`recordEndTime` DESC"), + UsedPower_ASC("`usedPower` ASC"), + UsedPower_DESC("`usedPower` DESC"), + TotalEndTime_ASC("`totalPower` ASC"), + TotalEndTime_DESC("`totalPower` DESC"), + ReportTime_ASC("`reportTime` ASC"), + ReportTime_DESC("`reportTime` DESC"); private String value; Field(String value) { diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxChartServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxChartServiceImpl.java index 850843729..36ebf44ea 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxChartServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxChartServiceImpl.java @@ -349,7 +349,7 @@ public class WxChartServiceImpl implements WxChartDataService { } /** - * 业态分析 + * 用电分析 * @param tenantId * @return */ @@ -378,6 +378,7 @@ public class WxChartServiceImpl implements WxChartDataService { } } + resultMap.put("monthDailyPower",monthDailyPower); kwMeterDataDto.setReportType(EnumMeterDataReportType.BY_HOUR.getCode()); @@ -390,7 +391,36 @@ public class WxChartServiceImpl implements WxChartDataService { kwMeterDataDto.setEndTime(addDay(1)); kwMeterDataDto.setTenantId(tenantId); KwMeterDataVo currentPower = kwMeterDataService.getPower(kwMeterDataDto); - resultMap.put("currentPower",currentPower); + if (currentPower.getTotalPower() != null) + resultMap.put("totalPower",currentPower.getTotalPower()); + if (currentPower.getUsedPower() != null) + resultMap.put("UsedPower",currentPower.getUsedPower()); + + kwMeterDataDto.setStartTime(addDay(-60)); + kwMeterDataDto.setEndTime(addDay(-30)); + kwMeterDataDto.setTenantId(tenantId); + KwMeterDataVo lastMonthPower = kwMeterDataService.getPower(kwMeterDataDto); + if (lastMonthPower.getTotalPower() != null) + resultMap.put("lastTotalPower",lastMonthPower.getTotalPower()); + if (lastMonthPower.getUsedPower() != null) + resultMap.put("lastUsedPower",lastMonthPower.getUsedPower()); + + + if (lastMonthPower.getTotalPower() !=null && currentPower.getTotalPower() != null) { + double hbd = (double) (currentPower.getTotalPower() - lastMonthPower.getTotalPower()) / lastMonthPower.getTotalPower() * 100; + double hb = new BigDecimal(hbd).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); + resultMap.put("totalPowerRate", hb + "%"); + } else { + resultMap.put("totalPowerRate", "--" + "%"); + } + + if (lastMonthPower.getUsedPower() !=null && currentPower.getUsedPower() != null) { + double hbd = (double) (currentPower.getUsedPower() - lastMonthPower.getUsedPower()) / lastMonthPower.getUsedPower() * 100; + double hb = new BigDecimal(hbd).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); + resultMap.put("usedPowerRate", hb + "%"); + } else { + resultMap.put("usedPowerRate", "--" + "%"); + } KwMeter kwMeter = new KwMeter(); kwMeter.setTenantId(tenantId); @@ -409,10 +439,6 @@ public class WxChartServiceImpl implements WxChartDataService { int meterMerchantCount = kwMerchantMeterService.selectCount(kwMerchantMeter); resultMap.put("meterMerchantCount",meterMerchantCount); - - - - return new ResultData(resultMap); } diff --git a/mallinkService/src/main/java/com/iformall/service/kw/impl/KwMeterDataServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/kw/impl/KwMeterDataServiceImpl.java index 09190b5c3..095c6740c 100644 --- a/mallinkService/src/main/java/com/iformall/service/kw/impl/KwMeterDataServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/kw/impl/KwMeterDataServiceImpl.java @@ -32,11 +32,15 @@ public class KwMeterDataServiceImpl implements KwMeterDataService { @Override public PageInfo listVoAsPage(KwMeterDataDto kwMeterDataDto, Integer pageIndex, Integer pageSize) { + if (kwMeterDataDto.getSortColumn() == null) + kwMeterDataDto.setSortColumns(KwMeterDataDto.Field.ReportTime_DESC); return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> kwMeterDataMapper.findVoList(kwMeterDataDto)); } @Override public List findVoList(KwMeterDataDto kwMeterDataDto) { + if (kwMeterDataDto.getSortColumn() == null) + kwMeterDataDto.setSortColumns(KwMeterDataDto.Field.ReportTime_ASC); return kwMeterDataMapper.findVoList(kwMeterDataDto); } @@ -93,10 +97,8 @@ public class KwMeterDataServiceImpl implements KwMeterDataService { if (usedPower.getTotalPower()==null) usedPower.setTotalPower(dto.getEndNumber()); - if (usedPower.getLastTotalPower()==null || usedPower.getTotalPower() == null) - return null; - - usedPower.setUsedPower(usedPower.getTotalPower() - usedPower.getLastTotalPower()); + if (usedPower.getLastTotalPower()!=null && usedPower.getTotalPower() != null) + usedPower.setUsedPower(usedPower.getTotalPower() - usedPower.getLastTotalPower()); return usedPower; } diff --git a/mallinkService/src/main/resources/mapper/KwMeterDataMapper.xml b/mallinkService/src/main/resources/mapper/KwMeterDataMapper.xml index 9bffbd5fc..e2aea070b 100644 --- a/mallinkService/src/main/resources/mapper/KwMeterDataMapper.xml +++ b/mallinkService/src/main/resources/mapper/KwMeterDataMapper.xml @@ -163,7 +163,7 @@ ,temp.meter_id - order by temp.reportTime asc + order by ${sortColumns}