feat: 增加图片覆冰天气的按时间表统计

dev
huangfeng 1 month ago
parent 1ee99b2189
commit 56ba3b6c4c

@ -4,11 +4,15 @@ import com.github.pagehelper.PageInfo;
import com.shxy.xymanager_common.annotation.Log;
import com.shxy.xymanager_common.base.BaseController;
import com.shxy.xymanager_common.base.ResponseReult;
import com.shxy.xymanager_common.bean.ServiceBody;
import com.shxy.xymanager_common.bean.ServiceStatus;
import com.shxy.xymanager_common.entity.*;
import com.shxy.xymanager_common.excel.TerminalExcel;
import com.shxy.xymanager_common.exception.ApiException;
import com.shxy.xymanager_common.model.*;
import com.shxy.xymanager_common.util.EasyExcelUtil;
import com.shxy.xymanager_common.util.xinyin.HeaderUtil;
import com.shxy.xymanager_common.vo.TerminalPhotoSelectVo;
import com.shxy.xymanager_common.vo.TerminalSelectVo;
import com.shxy.xymanager_dao.dao.TerminalPositionsMapper;
import com.shxy.xymanager_dao.dao.TerminalStatusDao;
@ -16,6 +20,7 @@ import com.shxy.xymanager_service.service.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpHeaders;
import org.springframework.util.CollectionUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@ -53,6 +58,8 @@ public class TerminalExtController extends BaseController {
TerminalExtService terminalExtService;
@Resource
TerminalSimcardService simcardService;
@Resource
CameraScheduleService cameraScheduleService;
@PostMapping("importTerminal")
@ -312,4 +319,76 @@ public class TerminalExtController extends BaseController {
}
return ResponseReult.success("OK");
}
@ApiOperation(value = "图片覆冰天气的按时间表统计", notes = "图片覆冰天气的按时间表统计接口", httpMethod = "POST")
@RequestMapping("/getScheduleStat")
@Log(title = "图片覆冰天气的按时间表统计", type = "统计")
public ResponseReult<List<StatTerm>> getScheduleStat(@RequestHeader HttpHeaders headers, @RequestBody @Validated TerminalPhotoSelectVo vo) throws Exception {
String requestIp = HeaderUtil.getRequestIp(headers);
vo.setPageindex(1);
vo.setPagesize(100000);
if (vo.getInterval() == null) {
vo.setInterval(10);
}
List<StatTerm> termList = new ArrayList<>();
ServiceBody<TerminalPhotoSelectListModel> serviceBody = photoService.getPhotoList(requestIp, vo, termList);
if (serviceBody.getCode() == ServiceStatus.SUCCESS) {
TerminalPhotoSelectListModel model = serviceBody.getData();
this.buildPhotoStat(termList, model.getList(), vo);
List<Integer> idList = new ArrayList<>();
for (StatTerm st : termList) {
idList.add(st.getTermId());
}
PageInfo<Weathers> weatherPage = weatherService.list(null, null, idList,
vo.getStarttime().getTime() / 1000, vo.getEndtime().getTime() / 1000, 1, 100000);
if (!CollectionUtils.isEmpty(weatherPage.getList())) {
for (Weathers weather : weatherPage.getList()) {
StatTerm term = this.findStatTerm(termList, weather.getTermId(), weather.getCmdid());
term.addWeather(weather);
}
}
PageInfo<LeadPulls> pullPage = leadPullsService.list(null, null, idList,
vo.getStarttime().getTime() / 1000, vo.getEndtime().getTime() / 1000, 1, 100000);
if (!CollectionUtils.isEmpty(pullPage.getList())) {
for (LeadPulls pull : pullPage.getList()) {
StatTerm term = this.findStatTerm(termList, pull.getTermId(), pull.getCmdid());
term.addLeadPulls(pull);
}
}
return ResponseReult.success(termList);
} else {
return ResponseReult.error(serviceBody.getCode(), serviceBody.getMsg());
}
}
private void buildPhotoStat(List<StatTerm> termList, List<TerminalPhotoSelectListModel.PhotoBean> list, TerminalPhotoSelectVo vo) throws Exception {
for (StatTerm statTerm : termList) {
List<CameraSchedule> scheduleList = cameraScheduleService.list(statTerm.getTermId());
statTerm.initScheduleList(scheduleList, vo.getStarttime().getTime(), vo.getEndtime().getTime(), vo.getInterval());
}
if (list != null) {
for (TerminalPhotoSelectListModel.PhotoBean photo : list) {
StatTerm term = this.findStatTerm(termList, photo.getTermid(), photo.getCmdid());
term.addPhoto(photo);
}
}
}
private StatTerm findStatTerm(List<StatTerm> list, Integer termId, String cmdid) {
StatTerm the = null;
for (StatTerm item : list) {
if (item.getTermId() == termId) {
the = item;
break;
}
}
if (the == null) {
the = new StatTerm();
the.setTermId(termId);
the.setCmdid(cmdid);
list.add(the);
}
return the;
}
}

@ -14,16 +14,13 @@ import java.util.List;
@Data
public class ScheduleDetailsDto implements Serializable {
private Integer id;
private Integer scheduleId;
private Integer hour;
private Integer minute;
private Integer preset;
private String day;
private Integer before = 0;
private Integer delay = 0;
private static final long serialVersionUID = 1L;
@ -41,7 +38,7 @@ public class ScheduleDetailsDto implements Serializable {
return hour * 60 + minute;
}
public boolean match(String day, int min, int before, int delay) {
public boolean match(String day, int min) {
if (day.equals(this.day)) {
int cal = this.calMinute();
if (cal >= min) {

@ -85,6 +85,8 @@ public class StatChannel implements Serializable {
item.setHour(detail.getHour());
item.setMinute(detail.getMinute());
item.setPreset(presetId);
item.setBefore(detail.getBefore());
item.setDelay(detail.getDelay());
item.setDay(day);
the.addSchedule(item);
}

@ -25,23 +25,8 @@ public class StatPreset implements Serializable {
int minute = calendar.get(Calendar.MINUTE);
minute = hour * 60 + minute;
total++;
int before = 1;
int delay = 1;
if (scheduleList.size() < 49) {
before = 2;
delay = 25;
} else if (scheduleList.size() < 145) {
before = 1;
delay = 8;
} else if (scheduleList.size() < 289) {
before = 1;
delay = 3;
} else {
before = 0;
delay = 0;
}
for (ScheduleDetailsDto detail : scheduleList) {
if (detail.match(day, minute, before, delay)) {
if (detail.match(day, minute)) {
detail.getTimeList().add(photo.getPhotoTime());
return;
}

@ -3,12 +3,13 @@ package com.shxy.xymanager_common.model;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.shxy.xymanager_common.dto.ScheduleDetailsDto;
import com.shxy.xymanager_common.entity.CameraSchedule;
import com.shxy.xymanager_common.entity.LeadPulls;
import com.shxy.xymanager_common.entity.Weathers;
import com.shxy.xymanager_common.util.DateUtil;
import lombok.Data;
import org.springframework.util.CollectionUtils;
import java.io.Serializable;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
@ -23,8 +24,10 @@ public class StatTerm implements Serializable {
List<StatChannel> channels = new ArrayList<>();
List<ScheduleDetailsDto> weatherScheduleList = new ArrayList<>();
List<Date> weatherTimeList = new ArrayList<>();
Integer weatherTotal = 0;
List<ScheduleDetailsDto> pullScheduleList = new ArrayList<>();
List<Date> pullTimeList = new ArrayList<>();
Integer pullTotal = 0;
public void addPhoto(TerminalPhotoSelectListModel.PhotoBean photo) {
StatChannel the = null;
@ -63,6 +66,18 @@ public class StatTerm implements Serializable {
date = DateUtil.getDayZero(date);
int startM = 0;
int endM = 24 * 60;
int before = 0;
int delay = 0;
if (interval >= 30) {
before = 2;
delay = 25;
} else if (interval >= 10) {
before = 1;
delay = 8;
} else if (interval >= 5) {
before = 1;
delay = 3;
}
boolean hasNext = true;
while (hasNext) {
String day = DateUtil.format(date, "yyyy-MM-dd");
@ -75,10 +90,14 @@ public class StatTerm implements Serializable {
hasNext = false;
} else {
ScheduleDetailsDto item = new ScheduleDetailsDto();
item.setBefore(before);
item.setDelay(delay);
item.initMinute(m);
item.setDay(day);
weatherScheduleList.add(item);
ScheduleDetailsDto item2 = new ScheduleDetailsDto();
item2.setBefore(before);
item2.setDelay(delay);
item2.initMinute(m);
item2.setDay(day);
pullScheduleList.add(item2);
@ -107,4 +126,38 @@ public class StatTerm implements Serializable {
the.initScheduleList(schedule.getList(), start, end);
}
}
public void addWeather(Weathers weather) {
String day = DateUtil.format(weather.getUpdateDate(), "yyyy-MM-dd");
Calendar calendar = Calendar.getInstance();
calendar.setTime(weather.getUpdateDate());
int hour = calendar.get(Calendar.HOUR_OF_DAY);
int minute = calendar.get(Calendar.MINUTE);
minute = hour * 60 + minute;
weatherTotal++;
for (ScheduleDetailsDto detail : weatherScheduleList) {
if (detail.match(day, minute)) {
detail.getTimeList().add(weather.getUpdateDate());
return;
}
}
weatherTimeList.add(weather.getUpdateDate());
}
public void addLeadPulls(LeadPulls pull) {
String day = DateUtil.format(pull.getUpdateDate(), "yyyy-MM-dd");
Calendar calendar = Calendar.getInstance();
calendar.setTime(pull.getUpdateDate());
int hour = calendar.get(Calendar.HOUR_OF_DAY);
int minute = calendar.get(Calendar.MINUTE);
minute = hour * 60 + minute;
pullTotal++;
for (ScheduleDetailsDto detail : pullScheduleList) {
if (detail.match(day, minute)) {
detail.getTimeList().add(pull.getUpdateDate());
return;
}
}
pullTimeList.add(pull.getUpdateDate());
}
}

@ -75,6 +75,23 @@ public class CameraScheduleServiceImpl implements CameraScheduleService {
List<ScheduleDetailsDto> list = model.getGroupData();
if (item.getProtocol() == 65290 || item.getProtocol() == 65298) {
list = this.changeSchedule(list);
} else {
int before = 0;
int delay = 0;
if (list.size() <= 48) {
before = 2;
delay = 25;
} else if (list.size() <= 144) {
before = 1;
delay = 8;
} else if (list.size() <= 288) {
before = 1;
delay = 3;
}
for (ScheduleDetailsDto detail : list) {
detail.setBefore(before);
detail.setDelay(delay);
}
}
item.setList(list);
}
@ -88,6 +105,18 @@ public class CameraScheduleServiceImpl implements CameraScheduleService {
ScheduleDetailsDto second = list.get(1);
ScheduleDetailsDto third = list.get(2);
int interval = first.getHour() * 60 + first.getMinute();
int before = 0;
int delay = 0;
if (interval >= 30) {
before = 2;
delay = 25;
} else if (interval >= 10) {
before = 1;
delay = 8;
} else if (interval >= 5) {
before = 1;
delay = 3;
}
int start = second.getHour() * 60 + second.getMinute();
int end = third.getHour() * 60 + third.getMinute();
if (end < start) {
@ -99,6 +128,8 @@ public class CameraScheduleServiceImpl implements CameraScheduleService {
ScheduleDetailsDto item = new ScheduleDetailsDto();
item.initMinute(start);
item.setPreset(second.getPreset());
item.setBefore(before);
item.setDelay(delay);
result.add(item);
start = start + interval;
}

Loading…
Cancel
Save