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<HeatMapDTO> 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<HeatMapVo> heatMapVos = new ArrayList<>();
|
if (type.equals("day")){
|
ArrayList<TimeHourVo> 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<TimeHourVo> 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<TimeHourVo> 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<String> 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<Map<String,Object>> 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<String, Object> 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);
|
}
|
|
}
|