Browse Source

设备状态列表查询

报警列表优化
质物检测对比相似度列表 详情 视频接入摄像头
master
yangzongjia 2 years ago
parent
commit
33b26fc505
  1. 13
      yxt-supervise-monitor-api/src/main/java/com/yxt/supervise/monitor/api/entity/CallPolice.java
  2. 3
      yxt-supervise-monitor-api/src/main/java/com/yxt/supervise/monitor/api/entity/Device.java
  3. 12
      yxt-supervise-monitor-api/src/main/java/com/yxt/supervise/monitor/api/entity/DeviceImage.java
  4. 17
      yxt-supervise-monitor-biz/pom.xml
  5. 4
      yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/callpolice/YCallPoliceMapper.java
  6. 10
      yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/callpolice/YCallPoliceMapper.xml
  7. 22
      yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/callpolice/YCallPoliceService.java
  8. 4
      yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/callpolice/YDeviceImageMapper.xml
  9. 9
      yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/device/YDeviceRest.java
  10. 67
      yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/device/YDeviceService.java
  11. 48
      yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/deviceImage/YDeviceImageRest.java
  12. 59
      yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/deviceImage/YDeviceImageService.java
  13. 21
      yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/messageInfo/YMessageInfoService.java
  14. 63
      yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/scheduled/SyncDetection.java
  15. 3
      yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/scheduled/SyncService.java
  16. 22
      yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/scheduled/SyncUpdater.java
  17. 5
      yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/util/ImageCompareUtil.java
  18. 4
      yxt-supervise-monitor-biz/src/main/resources/mapper/YDeviceImageMapper.xml
  19. 3
      yxt-supervise-monitor-biz/src/main/resources/task-config.properties

13
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; package com.yxt.supervise.monitor.api.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import com.yxt.common.core.domain.EntityWithId; import com.yxt.common.core.domain.EntityWithId;
@ -51,4 +52,16 @@ public class CallPolice extends EntityWithId {
@ApiModelProperty("信息内容") @ApiModelProperty("信息内容")
private String content; private String content;
@TableField(exist = false)
@ApiModelProperty("设备名称")
private String name;
@TableField(exist = false)
@ApiModelProperty("设备位置")
private String position;
@TableField(exist = false)
@ApiModelProperty("报警类型")
private String callType;
} }

3
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("位置") @ApiModelProperty("位置")
private String position; private String position;
@ApiModelProperty("序列号")
private String serialNumber;
} }

12
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; private String isDelete;
@ApiModelProperty("修改时间") @ApiModelProperty("修改时间")
private String modifyTime; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date modifyTime;
@ApiModelProperty("是否可用") @ApiModelProperty("是否可用")
private String isEnable; private String isEnable;
@ -63,4 +64,13 @@ public class DeviceImage extends EntityWithId {
@ApiModelProperty("拍照后") @ApiModelProperty("拍照后")
private String imgAfter; private String imgAfter;
@ApiModelProperty("组号(第几个摄像头)")
private String channelNo;
@ApiModelProperty("是否展示(只展示最新数据)")
private String isShow;
@ApiModelProperty("相似度")
private String similarity;
} }

17
yxt-supervise-monitor-biz/pom.xml

@ -89,6 +89,23 @@
<groupId>org.projectlombok</groupId> <groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId> <artifactId>lombok</artifactId>
</dependency> </dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies> </dependencies>
<build> <build>

4
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; 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.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.yxt.supervise.monitor.api.entity.CallPolice; import com.yxt.supervise.monitor.api.entity.CallPolice;
@ -11,7 +12,6 @@ import org.apache.ibatis.annotations.Param;
public interface YCallPoliceMapper extends BaseMapper<CallPolice> { public interface YCallPoliceMapper extends BaseMapper<CallPolice> {
IPage<Device> getDevicePage(); IPage<CallPolice> getCallPolicePage(IPage<CallPolice> page, @Param("ew") QueryWrapper<CallPolice> queryWrapper);
Integer getByMsgId(@Param("msgId") String msgId);
} }

10
yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/callpolice/YCallPoliceMapper.xml

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.yxt.supervise.monitor.biz.callpolice.YCallPoliceMapper">
<select id="getCallPolicePage" resultType="com.yxt.supervise.monitor.api.entity.CallPolice">
select t.createTime, t.msgType, d.name, d.position
from y_call_police t
inner join y_device d on t.deviceId = d.id
${ew.customSqlSegment}
</select>
</mapper>

22
yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/callpolice/YCallPoliceService.java

@ -28,6 +28,9 @@ import java.util.Map;
@Service @Service
public class YCallPoliceService extends ServiceImpl<YCallPoliceMapper, CallPolice> { public class YCallPoliceService extends ServiceImpl<YCallPoliceMapper, CallPolice> {
@Resource
YCallPoliceMapper yCallPoliceMapper;
public IPage<CallPolice> getCallPolicePage(Map<String, String> searchVo, PageVo pageVo) { public IPage<CallPolice> getCallPolicePage(Map<String, String> searchVo, PageVo pageVo) {
IPage<CallPolice> page = new com.baomidou.mybatisplus.extension.plugins.pagination.Page<>(); IPage<CallPolice> page = new com.baomidou.mybatisplus.extension.plugins.pagination.Page<>();
page.setSize(pageVo.getSize()); page.setSize(pageVo.getSize());
@ -36,16 +39,25 @@ public class YCallPoliceService extends ServiceImpl<YCallPoliceMapper, CallPolic
QueryWrapper<CallPolice> queryWrapper = new QueryWrapper<>(); QueryWrapper<CallPolice> queryWrapper = new QueryWrapper<>();
if (StrUtil.isNotBlank(searchVo.get("name"))) { 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"))) { if (StrUtil.isNotBlank(searchVo.get("startTime"))) {
queryWrapper.eq("type", searchVo.get("type")); 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<CallPolice> athleteBOIPage = null; IPage<CallPolice> athleteBOIPage = null;
try { try {
athleteBOIPage = baseMapper.selectPage(page, queryWrapper); athleteBOIPage = yCallPoliceMapper.getCallPolicePage(page, queryWrapper);
athleteBOIPage.getRecords().forEach(oo -> {
oo.setCallType("设备报警消息");
});
} catch (Exception e) { } catch (Exception e) {
System.out.println(e); System.out.println(e);
athleteBOIPage = null; athleteBOIPage = null;

4
yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/callpolice/YDeviceImageMapper.xml

@ -1,4 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.yxt.supervise.monitor.biz.callpolice.YCallPoliceMapper">
</mapper>

9
yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/device/YDeviceRest.java

@ -28,6 +28,15 @@ public class YDeviceRest {
return rb; return rb;
} }
@ApiOperation("分页获取设备状态列表")
@GetMapping("/getDeviceStatusPage")
public ResultBean getDeviceStatusPage(@RequestParam Map<String, String> searchVo,
@ModelAttribute PageVo pageVo) {
ResultBean rb = ResultBean.fireSuccess();
rb.setData(yDeviceService.getDeviceStatusPage(searchVo, pageVo));
return rb;
}
@ApiOperation("添加设备组") @ApiOperation("添加设备组")
@PostMapping("/createDeviceGroup") @PostMapping("/createDeviceGroup")
public ResultBean createDeviceGroup(Device device) { public ResultBean createDeviceGroup(Device device) {

67
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; package com.yxt.supervise.monitor.biz.device;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONAware;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
@ -19,7 +21,9 @@ import java.io.IOException;
import java.security.KeyManagementException; import java.security.KeyManagementException;
import java.security.KeyStoreException; import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException; import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
@Service @Service
@ -53,11 +57,46 @@ public class YDeviceService extends ServiceImpl<YDeviceMapper, Device> {
return athleteBOIPage; return athleteBOIPage;
} }
public IPage<Device> getDeviceStatusPage(Map<String, String> 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<Device> iPage = new Page<>();
List<Device> list = new ArrayList<>();
for (Object obj : jsonArray) {
JSONObject objJson = (JSONObject) obj;
deviceSerial = objJson.get("deviceSerial").toString();
QueryWrapper<Device> wrapper = new QueryWrapper<>();
if (StrUtil.isNotBlank(searchVo.get("type"))) {
wrapper.eq("type", searchVo.get("type"));
}
wrapper.eq("serialNumber", deviceSerial);
List<Device> 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) { public ResultBean createDevice(Device device) {
ResultBean rb = ResultBean.fireSuccess(); ResultBean rb = ResultBean.fireSuccess();
return rb.setData(this.save(device)); return rb.setData(this.save(device));
// // 先给海康接口添加设备 如果失败直接返回失败 // // 先给海康接口添加设备 如果失败直接返回失败
// String url = "https://api2.hik-cloud.com/api/v1/open/basic/devices/create"; // String url = "https://api2.hik-cloud.com/api/v1/open/basic/devices/create";
// Map<String, Object> param = new HashMap<>(); // Map<String, Object> param = new HashMap<>();
@ -89,21 +128,25 @@ public class YDeviceService extends ServiceImpl<YDeviceMapper, Device> {
public ResultBean removeDeviceByIds(String idStr) { public ResultBean removeDeviceByIds(String idStr) {
ResultBean rb = ResultBean.fireFail(); ResultBean rb = ResultBean.fireSuccess();
String[] ids = idStr.split(","); String[] ids = idStr.split(",");
for (String id : ids) { for (String id : ids) {
String url = "https://api2.hik-cloud.com/api/v1/open/basic/devices/delete"; rb.setData(this.removeById(id));
Map<String, Object> 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));
}
} }
// for (String id : ids) {
// String url = "https://api2.hik-cloud.com/api/v1/open/basic/devices/delete";
// Map<String, Object> 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; return rb;
} }
} }

48
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; package com.yxt.supervise.monitor.biz.deviceImage;
import com.alibaba.fastjson.JSONObject;
import com.yxt.common.core.result.ResultBean; import com.yxt.common.core.result.ResultBean;
import com.yxt.supervise.monitor.api.vo.PageVo; 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.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.Map; import java.util.Map;
@Api(tags = "设备控制器") @Api(tags = "设备控制器")
@ -15,19 +19,55 @@ import java.util.Map;
public class YDeviceImageRest { public class YDeviceImageRest {
@Autowired @Autowired
private YDeviceImageService yDeviceService; private YDeviceImageService yDeviceImageService;
@ApiOperation("分页获取设备抓拍列表") @ApiOperation("分页获取设备抓拍列表")
@GetMapping("/getDeviceImagePage") @GetMapping("/getDeviceImagePage")
public ResultBean getDeviceImagePage(@RequestParam Map<String, String> searchVo, public ResultBean getDeviceImagePage(@RequestParam Map<String, String> searchVo,
@ModelAttribute PageVo pageVo) { @ModelAttribute PageVo pageVo) {
yDeviceService.getDeviceImageBefore();
ResultBean rb = ResultBean.fireSuccess(); ResultBean rb = ResultBean.fireSuccess();
// rb.setData(yDeviceService.getDeviceImagePage(searchVo, pageVo)); rb.setData(yDeviceImageService.getDeviceImagePage(searchVo, pageVo));
return rb; 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;
}
} }

59
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 cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 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.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 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.api.vo.PageVo;
import com.yxt.supervise.monitor.biz.scheduled.SyncService; import com.yxt.supervise.monitor.biz.scheduled.SyncService;
import com.yxt.supervise.monitor.biz.util.HttpUtils; 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 com.yxt.supervise.monitor.biz.util.ImageDownloadUtil;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.io.IOException; import java.io.IOException;
import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
@Service @Service
@ -39,6 +43,8 @@ public class YDeviceImageService extends ServiceImpl<YDeviceImageMapper, DeviceI
queryWrapper.eq("type", searchVo.get("type")); queryWrapper.eq("type", searchVo.get("type"));
} }
queryWrapper.eq("isDelete", 0); queryWrapper.eq("isDelete", 0);
queryWrapper.eq("isShow", 1);
queryWrapper.orderByAsc("channelNo");
IPage<DeviceImage> athleteBOIPage = null; IPage<DeviceImage> athleteBOIPage = null;
try { try {
@ -51,9 +57,9 @@ public class YDeviceImageService extends ServiceImpl<YDeviceImageMapper, DeviceI
} }
public void getDeviceImageBefore() { public void getImage(String channelNo) {
// 访问接口 把图片保存到本地
String url = "https://api2.hik-cloud.com/api/v1/open/basic/channels/actions/capture"; String url = "https://api2.hik-cloud.com/api/v1/open/basic/channels/actions/capture";
String channelNo = "4";
String picName = ""; String picName = "";
Map<String, Object> param = new HashMap<>(); Map<String, Object> param = new HashMap<>();
param.put("deviceSerial", "L20560109"); // 设备序列号 string param.put("deviceSerial", "L20560109"); // 设备序列号 string
@ -67,10 +73,57 @@ public class YDeviceImageService extends ServiceImpl<YDeviceImageMapper, DeviceI
String day = DateUtil.format(DateUtil.date(), "yyyyMMddHHmmss"); String day = DateUtil.format(DateUtil.date(), "yyyyMMddHHmmss");
picName = day + channelNo + ".png"; picName = day + channelNo + ".png";
try { try {
ImageDownloadUtil.download(picUrl,SyncService.imagePath,picName); ImageDownloadUtil.download(picUrl, SyncService.imagePath + channelNo, picName);
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
// 入库操作
QueryWrapper<DeviceImage> wrapper = new QueryWrapper<>();
wrapper.eq("isShow", "1");
wrapper.eq("channelNo", channelNo);
wrapper.orderByDesc("createTime");
List<DeviceImage> 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<DeviceImage> wrapper = new UpdateWrapper<>();
wrapper.eq("channelNo", channelNo);
wrapper.set("isShow", 0);
this.update(wrapper);
} }
} }

21
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.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yxt.supervise.monitor.api.entity.CallPolice; 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.DeviceLog;
import com.yxt.supervise.monitor.api.entity.MessageInfo; import com.yxt.supervise.monitor.api.entity.MessageInfo;
import com.yxt.supervise.monitor.api.vo.MessageVo; import com.yxt.supervise.monitor.api.vo.MessageVo;
import com.yxt.supervise.monitor.biz.callpolice.YCallPoliceMapper; 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.devicelog.YDeviceLogMapper;
import com.yxt.supervise.monitor.biz.scheduled.SyncService; import com.yxt.supervise.monitor.biz.scheduled.SyncService;
import com.yxt.supervise.monitor.biz.util.HttpUtils; import com.yxt.supervise.monitor.biz.util.HttpUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
@ -29,6 +33,9 @@ public class YMessageInfoService extends ServiceImpl<YMessageInfoMapper, Message
@Resource @Resource
YDeviceLogMapper yDeviceLogMapper; YDeviceLogMapper yDeviceLogMapper;
@Resource
YDeviceMapper yDeviceMapper;
public List<CallPolice> saveMessageInfo() { public List<CallPolice> saveMessageInfo() {
String url = "https://api2.hik-cloud.com/api/v1/mq/consumer/messages"; String url = "https://api2.hik-cloud.com/api/v1/mq/consumer/messages";
@ -48,6 +55,17 @@ public class YMessageInfoService extends ServiceImpl<YMessageInfoMapper, Message
String jsonStr = jsonArray.toJSONString(); String jsonStr = jsonArray.toJSONString();
List<MessageVo> messageList = JSONObject.parseArray(jsonStr, MessageVo.class); List<MessageVo> messageList = JSONObject.parseArray(jsonStr, MessageVo.class);
for (MessageVo messageVo : messageList) { for (MessageVo messageVo : messageList) {
// 根据设备序列号查找本地数据库里面的设备ID
String deviceId = "";
JSONObject deviceIdJson = JSONObject.parseObject(messageVo.getContent());
String devSerial = deviceIdJson.get("devSerial").toString();
QueryWrapper<Device> deviceQueryWrapper = new QueryWrapper<>();
deviceQueryWrapper.eq("serialNumber", devSerial);
List<Device> devices = yDeviceMapper.selectList(deviceQueryWrapper);
if (devices.size() > 0) {
deviceId = devices.get(0).getId().toString();
}
QueryWrapper<MessageInfo> wrapper = new QueryWrapper<>(); QueryWrapper<MessageInfo> wrapper = new QueryWrapper<>();
wrapper.eq("msgId", messageVo.getMsgId()); wrapper.eq("msgId", messageVo.getMsgId());
int msgCount = this.count(wrapper); int msgCount = this.count(wrapper);
@ -58,6 +76,7 @@ public class YMessageInfoService extends ServiceImpl<YMessageInfoMapper, Message
messageInfo.setMsgType(messageVo.getMsgType()); messageInfo.setMsgType(messageVo.getMsgType());
messageInfo.setContent(messageVo.getContent()); messageInfo.setContent(messageVo.getContent());
messageInfo.setCreateTime(new Date()); messageInfo.setCreateTime(new Date());
messageInfo.setDeviceId(deviceId);
this.save(messageInfo); this.save(messageInfo);
// 判断是日志信息,添加到日志表 // 判断是日志信息,添加到日志表
@ -68,6 +87,7 @@ public class YMessageInfoService extends ServiceImpl<YMessageInfoMapper, Message
deviceLog.setMsgId(messageVo.getMsgId()); deviceLog.setMsgId(messageVo.getMsgId());
deviceLog.setContent(messageVo.getContent()); deviceLog.setContent(messageVo.getContent());
deviceLog.setCreateTime(new Date()); deviceLog.setCreateTime(new Date());
deviceLog.setDeviceId(deviceId);
yDeviceLogMapper.insert(deviceLog); yDeviceLogMapper.insert(deviceLog);
} }
@ -80,6 +100,7 @@ public class YMessageInfoService extends ServiceImpl<YMessageInfoMapper, Message
callPolice.setMsgType(messageVo.getMsgType()); callPolice.setMsgType(messageVo.getMsgType());
callPolice.setContent(messageVo.getContent()); callPolice.setContent(messageVo.getContent());
callPolice.setCreateTime(new Date()); callPolice.setCreateTime(new Date());
callPolice.setDeviceId(deviceId);
yCallPoliceMapper.insert(callPolice); yCallPoliceMapper.insert(callPolice);
} }
} }

63
yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/scheduled/SyncDetection.java

@ -0,0 +1,63 @@
package com.yxt.supervise.monitor.biz.scheduled;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONObject;
import com.yxt.supervise.monitor.biz.deviceImage.YDeviceImageService;
import com.yxt.supervise.monitor.biz.util.HttpUtils;
import com.yxt.supervise.monitor.biz.util.ImageDownloadUtil;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.scheduling.Trigger;
import org.springframework.scheduling.TriggerContext;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;
import org.springframework.scheduling.support.CronTrigger;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
@Data
@Slf4j
@Component
@PropertySource("classpath:/task-config.properties")
public class SyncDetection implements SchedulingConfigurer {
@Value("${scheduleTime.cron}")
private String cron;
@Autowired
YDeviceImageService yDeviceImageService;
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
// 动态使用cron表达式设置循环间隔
taskRegistrar.addTriggerTask(
new Runnable() {
@Override
public void run() {
// yDeviceImageService.getImage("1");
// yDeviceImageService.getImage("2");
// yDeviceImageService.getImage("3");
// yDeviceImageService.getImage("4");
}
},
new Trigger() {
@Override
public Date nextExecutionTime(TriggerContext triggerContext) {
// 使用CronTrigger触发器,可动态修改cron表达式来操作循环规则
CronTrigger cronTrigger = new CronTrigger(cron);
Date nextExecutionTime = cronTrigger.nextExecutionTime(triggerContext);
return nextExecutionTime;
}
});
}
}

3
yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/scheduled/SyncService.java

@ -35,7 +35,8 @@ public class SyncService {
YMessageInfoService yMessageInfoService; YMessageInfoService yMessageInfoService;
public static String haiKangToken = ""; public static String haiKangToken = "";
public static final String imagePath = "/root/supervise/images"; // public static final String imagePath = "/root/supervise/images/";
public static final String imagePath = "D:\\resources\\download\\";
public static String haiKangMessageConsumer = ""; public static String haiKangMessageConsumer = "";
@PostConstruct @PostConstruct

22
yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/scheduled/SyncUpdater.java

@ -0,0 +1,22 @@
package com.yxt.supervise.monitor.biz.scheduled;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@Slf4j
@RestController
@RequiredArgsConstructor
public class SyncUpdater {
private final SyncDetection scheduleTask;
@GetMapping("/updateCron")
public void updateCron(String cron) {
log.info("new cron :{}", cron);
scheduleTask.setCron(cron);
}
}

5
yxt-supervise-monitor-biz/src/main/java/com/yxt/supervise/monitor/biz/util/ImageCompareUtil.java

@ -19,7 +19,7 @@ public class ImageCompareUtil {
private static Logger Log = LoggerFactory.getLogger(ImageCompareUtil.class); private static Logger Log = LoggerFactory.getLogger(ImageCompareUtil.class);
public static void compareImage(String targetImageUrl, String baseImageUrl) { public static double compareImage(String targetImageUrl, String baseImageUrl) {
/** /**
@ -76,8 +76,9 @@ public class ImageCompareUtil {
baseImage.release(); baseImage.release();
targetImage.release(); targetImage.release();
return total - nonZeroPercent;
} else { } else {
return 0.0;
} }
} }

4
yxt-supervise-monitor-biz/src/main/resources/mapper/YDeviceImageMapper.xml

@ -1,4 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.yxt.supervise.monitor.biz.demoidentity.DemoIdentityMapper">
</mapper>

3
yxt-supervise-monitor-biz/src/main/resources/task-config.properties

@ -0,0 +1,3 @@
scheduleTime.cron=0/30 * * * * ?
scheduleTime.timer=15000
Loading…
Cancel
Save