package com.moral.api.controller; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.ObjectUtils; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import java.time.LocalDate; import java.time.temporal.ChronoUnit; import java.util.ArrayList; import java.util.Date; import java.util.List; import com.moral.api.pojo.dto.dataDisplay.HeatMapDTO; import com.moral.api.service.DataDisplayService; import com.moral.api.vo.HeatMapVo; import com.moral.api.vo.TimeHourVo; import com.moral.constant.ResultMessage; import com.moral.util.DateUtils; /** * Description //todo * * @author swb * @ClassName HeatMapController * @date 2023.12.11 15:20 */ @Slf4j @Api(tags = {"区域热力图"}) @RestController @RequestMapping("/heatMap") public class HeatMapController { @Autowired private DataDisplayService dataDisplayService; @GetMapping("query") @ApiOperation("热力图显示") public ResultMessage getHeatMap(@RequestParam @ApiParam(value = "code",name = "区域码") String code, @RequestParam @ApiParam(value = "startTime",name = "开始时间") String startTime, @RequestParam @ApiParam(value = "type",name= "因子类型") String type, @RequestParam @ApiParam(value = "form",name= "时间类型") String form){ List heatMapData = dataDisplayService.getHeatMapData(code, startTime, type, form); return ResultMessage.ok(ObjectUtils.isEmpty(heatMapData)?"0":heatMapData); } @GetMapping("queryTime") @ApiOperation("查询时间") public ResultMessage getHeatMap(@RequestParam @ApiParam(value = "startTime",name = "开始时间") String startTime, @RequestParam @ApiParam(value = "endTime",name= "结束类型") String endTime, @RequestParam @ApiParam(value = "type",name= "时间类型") String type){ ArrayList heatMapVos = new ArrayList<>(); if (type.equals("day")){ ArrayList timeHourVos = new ArrayList<>(); String[] splitStart = startTime.split("-"); String[] splitEnd = endTime.split("-"); LocalDate startDate = LocalDate.of(Integer.parseInt(splitStart[0]), Integer.parseInt(splitStart[1]), Integer.parseInt(splitStart[2])); LocalDate endDate = LocalDate.of(Integer.parseInt(splitEnd[0]), Integer.parseInt(splitEnd[1]), Integer.parseInt(splitEnd[2])); long daysBetween = ChronoUnit.DAYS.between(startDate, endDate); for (int i = 0; i <= daysBetween; i++) { HeatMapVo heatMapVo = new HeatMapVo(); LocalDate date = startDate.plusDays(i); heatMapVo.setId(i); heatMapVo.setName(date.toString()); heatMapVo.setHourListTime(timeHourVos); heatMapVos.add(heatMapVo); } }else if (type.equals("month")){ ArrayList timeHourVos = new ArrayList<>(); String[] splitStart = startTime.split("-"); String[] splitEnd = endTime.split("-"); //结束时间月份的天数 int monthDay = DateUtils.getMonthDay(DateUtils.getDate(endTime,DateUtils.yyyy_MM_EN)); LocalDate startDate = LocalDate.of(Integer.parseInt(splitStart[0]), Integer.parseInt(splitStart[1]),1); LocalDate endDate = LocalDate.of(Integer.parseInt(splitEnd[0]), Integer.parseInt(splitEnd[1]),monthDay); long daysBetween = ChronoUnit.DAYS.between(startDate, endDate); for (int i = 0; i <= daysBetween; i++) { HeatMapVo heatMapVo = new HeatMapVo(); LocalDate date = startDate.plusDays(i); heatMapVo.setId(i); heatMapVo.setName(date.toString()); heatMapVo.setHourListTime(timeHourVos); heatMapVos.add(heatMapVo); } }else { int id = 0; int idHour = -1; Date ks = DateUtils.getDate(startTime,"yyyy-MM-dd HH"); Date js = DateUtils.getDateAddHour(DateUtils.getDate(endTime,"yyyy-MM-dd HH"),1); String name = DateUtils.dateToDateString(ks,DateUtils.yyyy_MM_dd_EN); List hourListTime = new ArrayList<>(); while (DateUtils.isTimeBefor(js,ks)){ idHour++; HeatMapVo heatMapVo = new HeatMapVo(); String nameEndTime = DateUtils.dateToDateString(ks,DateUtils.yyyy_MM_dd_EN); String time = DateUtils.dateToDateString(ks,"HH"); String ksTime = DateUtils.dateToDateString(ks,"yyyy-MM-dd HH"); TimeHourVo hourVo = new TimeHourVo(); heatMapVo.setName(name); heatMapVo.setId(id); if(name.equals(nameEndTime)){ heatMapVo.setId(id); heatMapVo.setName(name); hourVo.setName(time); hourVo.setId(idHour); hourListTime.add(hourVo); if(ksTime.equals(endTime)){ heatMapVo.setHourListTime(hourListTime); heatMapVos.add(heatMapVo); } }else { id++; if(ksTime.equals(endTime)){ heatMapVo.setHourListTime(hourListTime); heatMapVos.add(heatMapVo); hourListTime = new ArrayList<>(); hourVo = new TimeHourVo(); heatMapVo = new HeatMapVo(); hourVo.setName("00"); hourVo.setId(idHour++); hourListTime.add(hourVo); heatMapVo.setId(id); heatMapVo.setName(nameEndTime); heatMapVo.setHourListTime(hourListTime); heatMapVos.add(heatMapVo); }else { name = nameEndTime; heatMapVo.setHourListTime(hourListTime); heatMapVos.add(heatMapVo); hourListTime = new ArrayList<>(); hourVo.setName(time); hourVo.setId(idHour); hourListTime.add(hourVo); } } ks = DateUtils.getDateAddHour(ks,1); } if(CollectionUtils.isNotEmpty(heatMapVos)){ heatMapVos.get(0).setIdLength(idHour); } /* String[] splitStart = startTime.split("-"); String[] s1 = splitStart[2].split(" "); String[] splitEnd = endTime.split("-"); String[] s2 = splitEnd[2].split(" "); //获取天时间 LocalDate startDate = LocalDate.of(Integer.parseInt(splitStart[0]), Integer.parseInt(splitStart[1]),Integer.parseInt(s1[0])); LocalDate endDate = LocalDate.of(Integer.parseInt(splitEnd[0]), Integer.parseInt(splitEnd[1]),Integer.parseInt(s2[0])); long daysBetween = ChronoUnit.DAYS.between(startDate, endDate); //获取小时 LocalDateTime startDateTime = LocalDateTime.of(Integer.parseInt(splitStart[0]), Integer.parseInt(splitStart[1]), Integer.parseInt(s1[0]), Integer.parseInt(s1[1]), 0); LocalDateTime endDateTime = LocalDateTime.of(Integer.parseInt(splitEnd[0]), Integer.parseInt(splitEnd[1]), Integer.parseInt(s2[0]), Integer.parseInt(s2[1]), 0); List hourList = new ArrayList<>(); LocalDateTime currentDateTime = startDateTime; while (currentDateTime.isBefore(endDateTime) || currentDateTime.equals(endDateTime)) { hourList.add(currentDateTime.toString()); currentDateTime = currentDateTime.plusHours(1); } for (int i = 0; i <= daysBetween; i++) { ArrayList> list = new ArrayList<>(); HeatMapVo heatMapVo = new HeatMapVo(); LocalDate date = startDate.plusDays(i); heatMapVo.setId(i); heatMapVo.setName(date.toString()); for (int i1 = 0; i1 < hourList.size(); i1++) { HashMap map = new HashMap<>(); if (hourList.get(i).contains(date.toString())){ map.put("name",hourList.get(i).substring(11,16)); list.add(map); } } heatMapVo.setHourList(list); heatMapVos.add(heatMapVo); }*/ } return ResultMessage.ok(ObjectUtils.isEmpty(heatMapVos)?"0":heatMapVos); } }