From 09868ce503ce7ddbbdc9538631a9c19ef8d6b6db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=AD=E6=89=BF?= Date: Sun, 29 Sep 2024 09:35:54 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E4=B8=BB=E5=8A=A8=E6=8B=8D=E7=85=A7?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=AE=9A=E6=97=B6=E4=BB=BB=E5=8A=A1=E6=8E=A8?= =?UTF-8?q?=E9=80=81=E9=80=9A=E7=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/TerminalPhotoController.java | 2 +- .../model/TermChannelModel.java | 28 +++++++ .../dao/TerminalChannelMapperDao.java | 3 + .../mappers/TerminalChannelMapperDao.xml | 8 ++ .../timeTask/TermChannelTask.java | 75 +++++++++++++++++++ .../impl/TerminalPhotoServiceImpl.java | 48 +++++++----- 6 files changed, 145 insertions(+), 19 deletions(-) create mode 100644 xymanager_common/src/main/java/com/shxy/xymanager_common/model/TermChannelModel.java create mode 100644 xymanager_framework/src/main/java/com/shxy/xymanager_framework/timeTask/TermChannelTask.java diff --git a/xymanager_admin/src/main/java/com/shxy/xymanager_admin/controller/TerminalPhotoController.java b/xymanager_admin/src/main/java/com/shxy/xymanager_admin/controller/TerminalPhotoController.java index f3aaa6b..33f3b68 100644 --- a/xymanager_admin/src/main/java/com/shxy/xymanager_admin/controller/TerminalPhotoController.java +++ b/xymanager_admin/src/main/java/com/shxy/xymanager_admin/controller/TerminalPhotoController.java @@ -46,7 +46,7 @@ public class TerminalPhotoController extends BaseController { @ApiResponses({@ApiResponse(code = 200, message = "请求成功"), @ApiResponse(code = 400, message = "请求参数没填好"), @ApiResponse(code = 404, message = "请求路径没有或页面跳转路径不对")}) @RequestMapping("/takePic") @Log(title = "主动拍照", type = "查询") - public ResponseReult takePic(@Validated TerminalPhotoVo vo) { + public ResponseReult takePic(@RequestBody @Validated TerminalPhotoVo vo) { ServiceBody serviceBody = terminalPhotoService.takePic(vo); if (serviceBody.getCode() == ServiceStatus.SUCCESS) { return ResponseReult.success(serviceBody.getData()); diff --git a/xymanager_common/src/main/java/com/shxy/xymanager_common/model/TermChannelModel.java b/xymanager_common/src/main/java/com/shxy/xymanager_common/model/TermChannelModel.java new file mode 100644 index 0000000..3ed5e41 --- /dev/null +++ b/xymanager_common/src/main/java/com/shxy/xymanager_common/model/TermChannelModel.java @@ -0,0 +1,28 @@ +package com.shxy.xymanager_common.model; + + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; + +import java.io.Serializable; + +@Data +@AllArgsConstructor +@ApiModel(value = "记录拍照装置通道信息", description = "记录拍照装置通道信息描述") +public class TermChannelModel implements Serializable { + + @ApiModelProperty(value = "装置id", example = "123456") + private Integer termId; + + @ApiModelProperty(value = "通道id", example = "123456") + private Integer channelId; + + @ApiModelProperty(value = "拍照时间", example = "123456") + private Long photoTime; + + @ApiModelProperty(value = "当前时间", example = "123456") + private Long currentTime; + +} \ No newline at end of file diff --git a/xymanager_dao/src/main/java/com/shxy/xymanager_dao/dao/TerminalChannelMapperDao.java b/xymanager_dao/src/main/java/com/shxy/xymanager_dao/dao/TerminalChannelMapperDao.java index 9efa694..1f2a484 100644 --- a/xymanager_dao/src/main/java/com/shxy/xymanager_dao/dao/TerminalChannelMapperDao.java +++ b/xymanager_dao/src/main/java/com/shxy/xymanager_dao/dao/TerminalChannelMapperDao.java @@ -32,4 +32,7 @@ public interface TerminalChannelMapperDao { int updateByPrimaryKeySelective(TerminalChannelMapper record); int updateByPrimaryKey(TerminalChannelMapper record); + + TerminalChannelMapper selectByTermIdAndChannelId(@Param("termId") Integer termId, @Param("channelId")Integer channelId); + } \ No newline at end of file diff --git a/xymanager_dao/src/main/resources/mappers/TerminalChannelMapperDao.xml b/xymanager_dao/src/main/resources/mappers/TerminalChannelMapperDao.xml index de47267..a33b6e5 100644 --- a/xymanager_dao/src/main/resources/mappers/TerminalChannelMapperDao.xml +++ b/xymanager_dao/src/main/resources/mappers/TerminalChannelMapperDao.xml @@ -162,4 +162,12 @@ update_time = #{updateTime,jdbcType=TIMESTAMP} where id = #{id,jdbcType=INTEGER} + + + \ No newline at end of file diff --git a/xymanager_framework/src/main/java/com/shxy/xymanager_framework/timeTask/TermChannelTask.java b/xymanager_framework/src/main/java/com/shxy/xymanager_framework/timeTask/TermChannelTask.java new file mode 100644 index 0000000..54b8943 --- /dev/null +++ b/xymanager_framework/src/main/java/com/shxy/xymanager_framework/timeTask/TermChannelTask.java @@ -0,0 +1,75 @@ + +package com.shxy.xymanager_framework.timeTask; + +import com.shxy.xymanager_common.entity.TerminalChannelMapper; +import com.shxy.xymanager_common.entity.Terminals; +import com.shxy.xymanager_common.model.TermChannelModel; +import com.shxy.xymanager_dao.dao.TerminalChannelMapperDao; +import com.shxy.xymanager_framework.socket.WebSocketServer; +import com.shxy.xymanager_service.impl.TerminalPhotoServiceImpl; +import com.shxy.xymanager_service.service.CacheService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.Iterator; +import java.util.Map; + +@Component +@Slf4j +public class TermChannelTask { + + @Autowired + TerminalChannelMapperDao terminalChannelMapperDao; + + @Autowired + CacheService cacheService; + + @Resource + WebSocketServer webSocketServer; + + // 超时时间 分钟 5 + Integer overtime = 5; + + // 创建记录主动拍照参数 + // public static Map termChannelModelMap = new HashMap<>(); + + @Scheduled(fixedDelay = 30000) + public void queryTermChannelTime() { + if (!TerminalPhotoServiceImpl.termChannelModelMap.isEmpty()) { + Iterator iterator = TerminalPhotoServiceImpl.termChannelModelMap.keySet().iterator(); + while (iterator.hasNext()) { + String key = iterator.next(); + TermChannelModel model = TerminalPhotoServiceImpl.termChannelModelMap.get(key); + // 开始拍照的时间 + 5分钟 + Long currentTime = model.getCurrentTime() + (overtime * 60 * 1000); + if (System.currentTimeMillis() >= currentTime) { + iterator.remove(); + } else { + // TerminalChannelMapperExample terminalChannelMapperExample = new TerminalChannelMapperExample(); + // TerminalChannelMapperExample.Criteria criteria = terminalChannelMapperExample.createCriteria(); + // criteria.andTermIdEqualTo(model.getTermId()); + // criteria.andChannelIdEqualTo(model.getChannelId().byteValue()); + // 根据当前的装置id和通道id查询最新的图片时间 + // List terminalChannelMappers = terminalChannelMapperDao.selectByExample(terminalChannelMapperExample); + TerminalChannelMapper terminalChannelMapper = terminalChannelMapperDao.selectByTermIdAndChannelId(model.getTermId(), model.getChannelId()); + if (null != terminalChannelMapper) { + if (null != terminalChannelMapper.getPhotoTime()) { + Long photoTime = terminalChannelMapper.getPhotoTime().longValue(); + if (photoTime > model.getPhotoTime()) { + Map terminalMap = cacheService.getTerminalMap(); + Terminals terminals = terminalMap.get(model.getTermId()); + String str = "装置:" + terminals.getCmdid() + " 在通道" + model.getChannelId() + "拍的最新图片已上传"; + webSocketServer.sendNotice("photo", str); + System.out.println(str); + iterator.remove(); + } + } + } + } + } + } + } +} diff --git a/xymanager_service/src/main/java/com/shxy/xymanager_service/impl/TerminalPhotoServiceImpl.java b/xymanager_service/src/main/java/com/shxy/xymanager_service/impl/TerminalPhotoServiceImpl.java index dc932c0..782578e 100644 --- a/xymanager_service/src/main/java/com/shxy/xymanager_service/impl/TerminalPhotoServiceImpl.java +++ b/xymanager_service/src/main/java/com/shxy/xymanager_service/impl/TerminalPhotoServiceImpl.java @@ -72,6 +72,9 @@ public class TerminalPhotoServiceImpl implements TerminalPhotoService { @Autowired CacheService cacheService; + // 记录主动拍照参数 + public static Map termChannelModelMap = new HashMap<>(); + /** * 根据装置id和通道id获取图片 * @@ -95,9 +98,9 @@ public class TerminalPhotoServiceImpl implements TerminalPhotoService { Integer terminalid = vo.getTerminalid(); list = terminalPhotoDao.selectPhotoList(terminalid, channelid, BigInteger.valueOf(start), BigInteger.valueOf(end)); - List idlist = new ArrayList<>(); - for (TerminalPhoto tp:list) { - if (tp.getOrginalId()!=null) { + List idlist = new ArrayList<>(); + for (TerminalPhoto tp : list) { + if (tp.getOrginalId() != null) { idlist.add(tp.getOrginalId()); } } @@ -254,7 +257,7 @@ public class TerminalPhotoServiceImpl implements TerminalPhotoService { if (lineid == null || lineid.intValue() == -1) { dtos = dyLevelDao.selectDyAndLineAndTowerAnTermList(dyid, null, null, null, search, CommonStatus.EFFECTIVE.value()); } else { - if (towerid == null || towerid.intValue() == -1) { + if (towerid == null || towerid.intValue() == -1) { dtos = dyLevelDao.selectDyAndLineAndTowerAnTermList(dyid, lineid, null, null, search, CommonStatus.EFFECTIVE.value()); } else { if (termid == null || termid.intValue() == -1) { @@ -301,9 +304,9 @@ public class TerminalPhotoServiceImpl implements TerminalPhotoService { Map termchannelMapMap = cacheService.getTermChannelMapMap(); - List idlist = new ArrayList<>(); - for (TerminalPhoto tp:list) { - if (tp.getOrginalId()!=null) { + List idlist = new ArrayList<>(); + for (TerminalPhoto tp : list) { + if (tp.getOrginalId() != null) { idlist.add(tp.getOrginalId()); } } @@ -316,7 +319,7 @@ public class TerminalPhotoServiceImpl implements TerminalPhotoService { }); imgarlarmsList = terminalImgAlarmsDao.selectAlarmsByTermidAndPhotoId(list, labellist); } - beans = TerminalUtils.examPhotoBean(requestIp, list, terminalMap, lineMap, towerMap, termchannelMap, termchannelMapMap,imgarlarmsList); + beans = TerminalUtils.examPhotoBean(requestIp, list, terminalMap, lineMap, towerMap, termchannelMap, termchannelMapMap, imgarlarmsList); model.setList(beans); } } @@ -427,6 +430,15 @@ public class TerminalPhotoServiceImpl implements TerminalPhotoService { Integer channel = vo.getChannel(); Integer preset = vo.getPreset(); Integer captureType = vo.getCaptureType(); + // 获取当前系统时间 + Long currentTime = System.currentTimeMillis(); + // 根据当前的装置id和通道id查询当前最新的图片时间 + TerminalChannelMapper terminalChannelMapper = terminalChannelMapperDao.selectByTermIdAndChannelId(termId, channel); + if (null != terminalChannelMapper) { + Long photoTime = terminalChannelMapper.getPhotoTime().longValue(); + termChannelModelMap.put(termId + "_" + channel, new TermChannelModel(termId, channel, photoTime, currentTime)); + } + Map terminalMap = cacheService.getTerminalMap(); Terminals terminals = terminalMap.get(termId); String cmdid = null; @@ -541,7 +553,7 @@ public class TerminalPhotoServiceImpl implements TerminalPhotoService { List beans = new ArrayList<>(); if (CollectionUtil.isNotEmpty(list)) { for (TerminalChannelMapper item : list) { - if (item.getPhotoId() !=null) { + if (item.getPhotoId() != null) { photolist.add(item.getPhotoId()); } } @@ -552,16 +564,16 @@ public class TerminalPhotoServiceImpl implements TerminalPhotoService { Map towerMap = cacheService.getTowerMap(); List photoList = new ArrayList<>(); - if (photolist.size()>0) { + if (photolist.size() > 0) { photoList = terminalPhotoDao.selectPhotosByIdList(photolist); } List imgarlarmsList = new ArrayList<>(); - if (photoList.size()>0) { + if (photoList.size() > 0) { if (CollectionUtil.isNotEmpty(list)) { - List idlist = new ArrayList<>(); - for (TerminalPhoto tp:photoList) { - if (tp.getOrginalId()!=null) { + List idlist = new ArrayList<>(); + for (TerminalPhoto tp : photoList) { + if (tp.getOrginalId() != null) { idlist.add(tp.getOrginalId()); } } @@ -575,7 +587,7 @@ public class TerminalPhotoServiceImpl implements TerminalPhotoService { } } } - beans = TerminalUtils.setPhotoList(requestIp, list, lineMap, termchannelMapMap, terminalMap, termchannelMap, towerMap, photoList,imgarlarmsList); + beans = TerminalUtils.setPhotoList(requestIp, list, lineMap, termchannelMapMap, terminalMap, termchannelMap, towerMap, photoList, imgarlarmsList); } model.setList(beans); PageInfo pageData = PageUtils.getPageData(list); @@ -671,9 +683,9 @@ public class TerminalPhotoServiceImpl implements TerminalPhotoService { Map termchannelMap = cacheService.getTermChannelMap(); Map termchannelMapMap = cacheService.getTermChannelMapMap(); - List idlist = new ArrayList<>(); - for (TerminalPhoto tp:list) { - if (tp.getOrginalId()!=null) { + List idlist = new ArrayList<>(); + for (TerminalPhoto tp : list) { + if (tp.getOrginalId() != null) { idlist.add(tp.getOrginalId()); } }