diff --git a/yxt-supervise-monitor-api/src/main/java/com/yxt/supervise/monitor/api/entity/CallPolice.java b/yxt-supervise-monitor-api/src/main/java/com/yxt/supervise/monitor/api/entity/CallPolice.java index b0406e1..6c847da 100644 --- a/yxt-supervise-monitor-api/src/main/java/com/yxt/supervise/monitor/api/entity/CallPolice.java +++ b/yxt-supervise-monitor-api/src/main/java/com/yxt/supervise/monitor/api/entity/CallPolice.java @@ -1,5 +1,6 @@ package com.yxt.supervise.monitor.api.entity; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; import com.yxt.common.core.domain.EntityWithId; @@ -51,4 +52,16 @@ public class CallPolice extends EntityWithId { @ApiModelProperty("信息内容") private String content; + + @TableField(exist = false) + @ApiModelProperty("设备名称") + private String name; + + @TableField(exist = false) + @ApiModelProperty("设备位置") + private String position; + + @TableField(exist = false) + @ApiModelProperty("报警类型") + private String callType; } diff --git a/yxt-supervise-monitor-api/src/main/java/com/yxt/supervise/monitor/api/entity/Device.java b/yxt-supervise-monitor-api/src/main/java/com/yxt/supervise/monitor/api/entity/Device.java index 6b644d1..2a560e1 100644 --- a/yxt-supervise-monitor-api/src/main/java/com/yxt/supervise/monitor/api/entity/Device.java +++ b/yxt-supervise-monitor-api/src/main/java/com/yxt/supervise/monitor/api/entity/Device.java @@ -54,4 +54,7 @@ public class Device extends EntityWithId { @ApiModelProperty("位置") private String position; + + @ApiModelProperty("序列号") + private String serialNumber; } diff --git a/yxt-supervise-monitor-api/src/main/java/com/yxt/supervise/monitor/api/entity/DeviceImage.java b/yxt-supervise-monitor-api/src/main/java/com/yxt/supervise/monitor/api/entity/DeviceImage.java index 9e01de8..8adee75 100644 --- a/yxt-supervise-monitor-api/src/main/java/com/yxt/supervise/monitor/api/entity/DeviceImage.java +++ b/yxt-supervise-monitor-api/src/main/java/com/yxt/supervise/monitor/api/entity/DeviceImage.java @@ -38,7 +38,8 @@ public class DeviceImage extends EntityWithId { private String isDelete; @ApiModelProperty("修改时间") - private String modifyTime; + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date modifyTime; @ApiModelProperty("是否可用") private String isEnable; @@ -63,4 +64,13 @@ public class DeviceImage extends EntityWithId { @ApiModelProperty("拍照后") private String imgAfter; + + @ApiModelProperty("组号(第几个摄像头)") + private String channelNo; + + @ApiModelProperty("是否展示(只展示最新数据)") + private String isShow; + + @ApiModelProperty("相似度") + private String similarity; } diff --git a/yxt-supervise-monitor-biz/pom.xml b/yxt-supervise-monitor-biz/pom.xml index 1e5eec9..66fd93a 100644 --- a/yxt-supervise-monitor-biz/pom.xml +++ b/yxt-supervise-monitor-biz/pom.xml @@ -89,6 +89,23 @@ org.projectlombok lombok + + + org.springframework.boot + spring-boot-starter-web + + + + org.projectlombok + lombok + true + + + org.springframework.boot + spring-boot-starter-test + test + + diff --git a/yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/callpolice/YCallPoliceMapper.java b/yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/callpolice/YCallPoliceMapper.java index 80110c1..504cc18 100644 --- a/yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/callpolice/YCallPoliceMapper.java +++ b/yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/callpolice/YCallPoliceMapper.java @@ -1,5 +1,6 @@ package com.yxt.supervise.monitor.biz.callpolice; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.yxt.supervise.monitor.api.entity.CallPolice; @@ -11,7 +12,6 @@ import org.apache.ibatis.annotations.Param; public interface YCallPoliceMapper extends BaseMapper { - IPage getDevicePage(); + IPage getCallPolicePage(IPage page, @Param("ew") QueryWrapper queryWrapper); - Integer getByMsgId(@Param("msgId") String msgId); } diff --git a/yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/callpolice/YCallPoliceMapper.xml b/yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/callpolice/YCallPoliceMapper.xml new file mode 100644 index 0000000..4b04b83 --- /dev/null +++ b/yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/callpolice/YCallPoliceMapper.xml @@ -0,0 +1,10 @@ + + + + + \ No newline at end of file diff --git a/yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/callpolice/YCallPoliceService.java b/yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/callpolice/YCallPoliceService.java index 3b395bd..8a84ef4 100644 --- a/yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/callpolice/YCallPoliceService.java +++ b/yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/callpolice/YCallPoliceService.java @@ -28,6 +28,9 @@ import java.util.Map; @Service public class YCallPoliceService extends ServiceImpl { + @Resource + YCallPoliceMapper yCallPoliceMapper; + public IPage getCallPolicePage(Map searchVo, PageVo pageVo) { IPage page = new com.baomidou.mybatisplus.extension.plugins.pagination.Page<>(); page.setSize(pageVo.getSize()); @@ -36,16 +39,25 @@ public class YCallPoliceService extends ServiceImpl queryWrapper = new QueryWrapper<>(); if (StrUtil.isNotBlank(searchVo.get("name"))) { - queryWrapper.like("name", searchVo.get("name")); + queryWrapper.like("d.name", searchVo.get("name")); } - if (StrUtil.isNotBlank(searchVo.get("type"))) { - queryWrapper.eq("type", searchVo.get("type")); + if (StrUtil.isNotBlank(searchVo.get("startTime"))) { + queryWrapper.gt("t.createTime", searchVo.get("startTime")); + if (StrUtil.isNotBlank(searchVo.get("endTime"))) { + queryWrapper.lt("t.createTime", searchVo.get("endTime")); + } } - queryWrapper.eq("isDelete", 0); +// if (StrUtil.isNotBlank(searchVo.get("type"))) { +// queryWrapper.eq("t.type", searchVo.get("type")); +// } + queryWrapper.eq("t.isDelete", 0); IPage athleteBOIPage = null; try { - athleteBOIPage = baseMapper.selectPage(page, queryWrapper); + athleteBOIPage = yCallPoliceMapper.getCallPolicePage(page, queryWrapper); + athleteBOIPage.getRecords().forEach(oo -> { + oo.setCallType("设备报警消息"); + }); } catch (Exception e) { System.out.println(e); athleteBOIPage = null; diff --git a/yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/callpolice/YDeviceImageMapper.xml b/yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/callpolice/YDeviceImageMapper.xml deleted file mode 100644 index 4a6d4d6..0000000 --- a/yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/callpolice/YDeviceImageMapper.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/device/YDeviceRest.java b/yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/device/YDeviceRest.java index 28e79cf..4462abf 100644 --- a/yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/device/YDeviceRest.java +++ b/yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/device/YDeviceRest.java @@ -28,6 +28,15 @@ public class YDeviceRest { return rb; } + @ApiOperation("分页获取设备状态列表") + @GetMapping("/getDeviceStatusPage") + public ResultBean getDeviceStatusPage(@RequestParam Map searchVo, + @ModelAttribute PageVo pageVo) { + ResultBean rb = ResultBean.fireSuccess(); + rb.setData(yDeviceService.getDeviceStatusPage(searchVo, pageVo)); + return rb; + } + @ApiOperation("添加设备组") @PostMapping("/createDeviceGroup") public ResultBean createDeviceGroup(Device device) { diff --git a/yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/device/YDeviceService.java b/yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/device/YDeviceService.java index b29b591..cc8f2a1 100644 --- a/yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/device/YDeviceService.java +++ b/yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/device/YDeviceService.java @@ -1,6 +1,8 @@ package com.yxt.supervise.monitor.biz.device; import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONAware; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -19,7 +21,9 @@ import java.io.IOException; import java.security.KeyManagementException; import java.security.KeyStoreException; import java.security.NoSuchAlgorithmException; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; @Service @@ -53,11 +57,46 @@ public class YDeviceService extends ServiceImpl { return athleteBOIPage; } + + public IPage getDeviceStatusPage(Map searchVo, PageVo pageVo) { + String url = "https://api2.hik-cloud.com/api/v1/open/basic/devices/list?groupNo=A1181&pageNo=" + pageVo.getCurrent() + "&pageSize=" + pageVo.getSize(); + String result = ""; + try { + result = HttpUtils.sendGet(url, SyncService.haiKangToken); + } catch (Exception e) { + System.out.println(e); + } + JSONObject jsonObject = JSONObject.parseObject(result); + JSONObject dataJson = (JSONObject) jsonObject.get("data"); + JSONArray jsonArray = (JSONArray) dataJson.get("rows"); + String deviceSerial = ""; + IPage iPage = new Page<>(); + List list = new ArrayList<>(); + for (Object obj : jsonArray) { + JSONObject objJson = (JSONObject) obj; + deviceSerial = objJson.get("deviceSerial").toString(); + + QueryWrapper wrapper = new QueryWrapper<>(); + if (StrUtil.isNotBlank(searchVo.get("type"))) { + wrapper.eq("type", searchVo.get("type")); + } + wrapper.eq("serialNumber", deviceSerial); + List listSmall = this.list(wrapper); + if (listSmall.size() > 0) { + listSmall.get(0).setStatus(objJson.get("deviceStatus").toString()); // 设备状态 0:离线 1:在线 + list.add(listSmall.get(0)); + } + } + iPage.setRecords(list); + iPage.setCurrent(pageVo.getCurrent()); + iPage.setSize(pageVo.getSize()); + return iPage; + } + + public ResultBean createDevice(Device device) { ResultBean rb = ResultBean.fireSuccess(); return rb.setData(this.save(device)); - - // // 先给海康接口添加设备 如果失败直接返回失败 // String url = "https://api2.hik-cloud.com/api/v1/open/basic/devices/create"; // Map param = new HashMap<>(); @@ -89,21 +128,25 @@ public class YDeviceService extends ServiceImpl { public ResultBean removeDeviceByIds(String idStr) { - ResultBean rb = ResultBean.fireFail(); + ResultBean rb = ResultBean.fireSuccess(); String[] ids = idStr.split(","); for (String id : ids) { - String url = "https://api2.hik-cloud.com/api/v1/open/basic/devices/delete"; - Map param = new HashMap<>(); - param.put("deviceSerial", id); // 设备序列号 string -// String paramJson = JSONObject.toJSONString(param); - String result = HttpUtils.sendPostMap(url, param, SyncService.haiKangToken); - JSONObject jsonObject = JSONObject.parseObject(result); - if ("200".equals(jsonObject.get("code").toString())) { - rb.setData(this.removeById(id)); - } + rb.setData(this.removeById(id)); } +// for (String id : ids) { +// String url = "https://api2.hik-cloud.com/api/v1/open/basic/devices/delete"; +// Map param = new HashMap<>(); +// param.put("deviceSerial", id); // 设备序列号 string +//// String paramJson = JSONObject.toJSONString(param); +// String result = HttpUtils.sendPostMap(url, param, SyncService.haiKangToken); +// JSONObject jsonObject = JSONObject.parseObject(result); +// if ("200".equals(jsonObject.get("code").toString())) { +// rb.setData(this.removeById(id)); +// } +// } + return rb; } } diff --git a/yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/deviceImage/YDeviceImageRest.java b/yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/deviceImage/YDeviceImageRest.java index 4d3042b..4d07f98 100644 --- a/yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/deviceImage/YDeviceImageRest.java +++ b/yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/deviceImage/YDeviceImageRest.java @@ -1,12 +1,16 @@ package com.yxt.supervise.monitor.biz.deviceImage; +import com.alibaba.fastjson.JSONObject; import com.yxt.common.core.result.ResultBean; import com.yxt.supervise.monitor.api.vo.PageVo; +import com.yxt.supervise.monitor.biz.scheduled.SyncService; +import com.yxt.supervise.monitor.biz.util.HttpUtils; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import java.util.HashMap; import java.util.Map; @Api(tags = "设备控制器") @@ -15,19 +19,55 @@ import java.util.Map; public class YDeviceImageRest { @Autowired - private YDeviceImageService yDeviceService; + private YDeviceImageService yDeviceImageService; @ApiOperation("分页获取设备抓拍列表") @GetMapping("/getDeviceImagePage") public ResultBean getDeviceImagePage(@RequestParam Map searchVo, - @ModelAttribute PageVo pageVo) { - yDeviceService.getDeviceImageBefore(); + @ModelAttribute PageVo pageVo) { ResultBean rb = ResultBean.fireSuccess(); -// rb.setData(yDeviceService.getDeviceImagePage(searchVo, pageVo)); + rb.setData(yDeviceImageService.getDeviceImagePage(searchVo, pageVo)); return rb; } + @ApiOperation("单条获取抓拍信息") + @GetMapping("/getDeviceImageById") + public ResultBean getDeviceImageById(@RequestParam String id) { + ResultBean rb = ResultBean.fireSuccess(); + rb.setData(yDeviceImageService.getById(id)); + return rb; + } + + + @ApiOperation("单条获取抓拍信息") + @GetMapping("/getShiPinByChannelNo") + public ResultBean getShiPinByChannelNo(@RequestParam String channelNo) { + String spToken = ""; + String url = "https://api2.hik-cloud.com/v1/ezviz/account/info"; + try { + String result = HttpUtils.sendGet(url, SyncService.haiKangToken); + JSONObject jsonObject = JSONObject.parseObject(result); + JSONObject dataJson = (JSONObject) jsonObject.get("data"); + String appKey = dataJson.get("appKey").toString(); + spToken = dataJson.get("token").toString(); + } catch (Exception e) { + System.out.println(e); + } + + String vCode = "yxt123"; // 网络录像机验证码 + String deviceSerial = "L20560109"; //网络录像机序列号 + String spUrl = "https://open.ys7.com/console/jssdk/pc.html?url=ezopen://" + + vCode + "@open.ys7.com/" + + deviceSerial + "/" + + channelNo + ".hd.live&accessToken=" + + spToken + "&themeId=pcLive"; + + ResultBean rb = ResultBean.fireSuccess(); + rb.setData(spUrl); + return rb; + } + } diff --git a/yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/deviceImage/YDeviceImageService.java b/yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/deviceImage/YDeviceImageService.java index 3868a90..30a1ee2 100644 --- a/yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/deviceImage/YDeviceImageService.java +++ b/yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/deviceImage/YDeviceImageService.java @@ -4,6 +4,7 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -13,12 +14,15 @@ import com.yxt.supervise.monitor.api.entity.DeviceImage; import com.yxt.supervise.monitor.api.vo.PageVo; import com.yxt.supervise.monitor.biz.scheduled.SyncService; import com.yxt.supervise.monitor.biz.util.HttpUtils; +import com.yxt.supervise.monitor.biz.util.ImageCompareUtil; import com.yxt.supervise.monitor.biz.util.ImageDownloadUtil; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.io.IOException; +import java.util.Date; import java.util.HashMap; +import java.util.List; import java.util.Map; @Service @@ -39,6 +43,8 @@ public class YDeviceImageService extends ServiceImpl athleteBOIPage = null; try { @@ -51,9 +57,9 @@ public class YDeviceImageService extends ServiceImpl param = new HashMap<>(); param.put("deviceSerial", "L20560109"); // 设备序列号 string @@ -67,10 +73,57 @@ public class YDeviceImageService extends ServiceImpl wrapper = new QueryWrapper<>(); + wrapper.eq("isShow", "1"); + wrapper.eq("channelNo", channelNo); + wrapper.orderByDesc("createTime"); + List deviceImageList = this.list(wrapper); + + DeviceImage deviceImage = new DeviceImage(); + deviceImage.setDeviceSerial("L20560109"); + deviceImage.setCreateTime(new Date()); + deviceImage.setChannelNo(channelNo); + deviceImage.setIsShow("1"); + + if (deviceImageList.size() > 0) { + DeviceImage deviceImageExit = deviceImageList.get(0); + String convertImage = deviceImageExit.getImgAfter(); + deviceImage.setImgBefore(convertImage); + deviceImage.setImgAfter(SyncService.imagePath + channelNo + "/" + picName); + String similar = String.valueOf(ImageCompareUtil.compareImage(convertImage, SyncService.imagePath + channelNo + "/" + picName)); + String[] similarSplit = similar.split("\\."); + if (similarSplit.length > 0) { + deviceImage.setSimilarity(similarSplit[0] + "%"); + }else{ + deviceImage.setSimilarity(similar + "%"); + } + deviceImage.setModifyTime(new Date()); + + // 添加之前先把历史数据isShow改成不展示 + this.flushDeviceImageIsShow(channelNo); + this.save(deviceImage); + } else { + deviceImage.setImgBefore(SyncService.imagePath + channelNo + "/" + picName); + deviceImage.setImgAfter(SyncService.imagePath + channelNo + "/" + picName); + deviceImage.setSimilarity("100%"); + this.save(deviceImage); + } + + } + + + private void flushDeviceImageIsShow(String channelNo) { + UpdateWrapper wrapper = new UpdateWrapper<>(); + wrapper.eq("channelNo", channelNo); + wrapper.set("isShow", 0); + this.update(wrapper); } } diff --git a/yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/messageInfo/YMessageInfoService.java b/yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/messageInfo/YMessageInfoService.java index 35d6da9..e31586a 100644 --- a/yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/messageInfo/YMessageInfoService.java +++ b/yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/messageInfo/YMessageInfoService.java @@ -5,13 +5,17 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.yxt.supervise.monitor.api.entity.CallPolice; +import com.yxt.supervise.monitor.api.entity.Device; import com.yxt.supervise.monitor.api.entity.DeviceLog; import com.yxt.supervise.monitor.api.entity.MessageInfo; import com.yxt.supervise.monitor.api.vo.MessageVo; import com.yxt.supervise.monitor.biz.callpolice.YCallPoliceMapper; +import com.yxt.supervise.monitor.biz.device.YDeviceMapper; +import com.yxt.supervise.monitor.biz.device.YDeviceService; import com.yxt.supervise.monitor.biz.devicelog.YDeviceLogMapper; import com.yxt.supervise.monitor.biz.scheduled.SyncService; import com.yxt.supervise.monitor.biz.util.HttpUtils; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -29,6 +33,9 @@ public class YMessageInfoService extends ServiceImpl saveMessageInfo() { String url = "https://api2.hik-cloud.com/api/v1/mq/consumer/messages"; @@ -48,6 +55,17 @@ public class YMessageInfoService extends ServiceImpl messageList = JSONObject.parseArray(jsonStr, MessageVo.class); for (MessageVo messageVo : messageList) { + // 根据设备序列号查找本地数据库里面的设备ID + String deviceId = ""; + JSONObject deviceIdJson = JSONObject.parseObject(messageVo.getContent()); + String devSerial = deviceIdJson.get("devSerial").toString(); + QueryWrapper deviceQueryWrapper = new QueryWrapper<>(); + deviceQueryWrapper.eq("serialNumber", devSerial); + List devices = yDeviceMapper.selectList(deviceQueryWrapper); + if (devices.size() > 0) { + deviceId = devices.get(0).getId().toString(); + } + QueryWrapper wrapper = new QueryWrapper<>(); wrapper.eq("msgId", messageVo.getMsgId()); int msgCount = this.count(wrapper); @@ -58,6 +76,7 @@ public class YMessageInfoService extends ServiceImpl - - - \ No newline at end of file diff --git a/yxt-supervise-monitor-biz/src/main/resources/task-config.properties b/yxt-supervise-monitor-biz/src/main/resources/task-config.properties new file mode 100644 index 0000000..722947e --- /dev/null +++ b/yxt-supervise-monitor-biz/src/main/resources/task-config.properties @@ -0,0 +1,3 @@ +scheduleTime.cron=0/30 * * * * ? + +scheduleTime.timer=15000 \ No newline at end of file