diff --git a/xymanager_admin/src/main/java/com/shxy/xymanager_admin/controller/TerminalExtController.java b/xymanager_admin/src/main/java/com/shxy/xymanager_admin/controller/TerminalExtController.java index c5bf41e..a5b3c03 100644 --- a/xymanager_admin/src/main/java/com/shxy/xymanager_admin/controller/TerminalExtController.java +++ b/xymanager_admin/src/main/java/com/shxy/xymanager_admin/controller/TerminalExtController.java @@ -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> 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 termList = new ArrayList<>(); + ServiceBody serviceBody = photoService.getPhotoList(requestIp, vo, termList); + if (serviceBody.getCode() == ServiceStatus.SUCCESS) { + TerminalPhotoSelectListModel model = serviceBody.getData(); + this.buildPhotoStat(termList, model.getList(), vo); + + List idList = new ArrayList<>(); + for (StatTerm st : termList) { + idList.add(st.getTermId()); + } + PageInfo 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 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 termList, List list, TerminalPhotoSelectVo vo) throws Exception { + for (StatTerm statTerm : termList) { + List 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 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; + } } diff --git a/xymanager_common/src/main/java/com/shxy/xymanager_common/dto/ScheduleDetailsDto.java b/xymanager_common/src/main/java/com/shxy/xymanager_common/dto/ScheduleDetailsDto.java index f65e339..7b82434 100644 --- a/xymanager_common/src/main/java/com/shxy/xymanager_common/dto/ScheduleDetailsDto.java +++ b/xymanager_common/src/main/java/com/shxy/xymanager_common/dto/ScheduleDetailsDto.java @@ -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) { diff --git a/xymanager_common/src/main/java/com/shxy/xymanager_common/model/StatChannel.java b/xymanager_common/src/main/java/com/shxy/xymanager_common/model/StatChannel.java index d705751..5ca2e57 100644 --- a/xymanager_common/src/main/java/com/shxy/xymanager_common/model/StatChannel.java +++ b/xymanager_common/src/main/java/com/shxy/xymanager_common/model/StatChannel.java @@ -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); } diff --git a/xymanager_common/src/main/java/com/shxy/xymanager_common/model/StatPreset.java b/xymanager_common/src/main/java/com/shxy/xymanager_common/model/StatPreset.java index 7c61e6d..fc99723 100644 --- a/xymanager_common/src/main/java/com/shxy/xymanager_common/model/StatPreset.java +++ b/xymanager_common/src/main/java/com/shxy/xymanager_common/model/StatPreset.java @@ -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; } diff --git a/xymanager_common/src/main/java/com/shxy/xymanager_common/model/StatTerm.java b/xymanager_common/src/main/java/com/shxy/xymanager_common/model/StatTerm.java index 106eead..98a19e4 100644 --- a/xymanager_common/src/main/java/com/shxy/xymanager_common/model/StatTerm.java +++ b/xymanager_common/src/main/java/com/shxy/xymanager_common/model/StatTerm.java @@ -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 channels = new ArrayList<>(); List weatherScheduleList = new ArrayList<>(); List weatherTimeList = new ArrayList<>(); + Integer weatherTotal = 0; List pullScheduleList = new ArrayList<>(); List 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()); + } } diff --git a/xymanager_service/src/main/java/com/shxy/xymanager_service/impl/CameraScheduleServiceImpl.java b/xymanager_service/src/main/java/com/shxy/xymanager_service/impl/CameraScheduleServiceImpl.java index 09e004c..135ae1c 100644 --- a/xymanager_service/src/main/java/com/shxy/xymanager_service/impl/CameraScheduleServiceImpl.java +++ b/xymanager_service/src/main/java/com/shxy/xymanager_service/impl/CameraScheduleServiceImpl.java @@ -75,6 +75,23 @@ public class CameraScheduleServiceImpl implements CameraScheduleService { List 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; }