bug修复

This commit is contained in:
guo 2024-03-01 15:28:50 +08:00
parent eced94a9ef
commit 448aa2bf8d
7 changed files with 332 additions and 4 deletions

View File

@ -1,6 +1,7 @@
package com.zhgd.xmgl.call;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
@ -12,6 +13,8 @@ import com.zhgd.xmgl.base.HikvisionCarInfo;
import com.zhgd.xmgl.base.HikvisionEventsPictureRq;
import com.zhgd.xmgl.base.HikvisionOrganization;
import com.zhgd.xmgl.base.SubscribeEventQo;
import com.zhgd.xmgl.modules.basicdata.entity.HikvisionRequestRetry;
import com.zhgd.xmgl.modules.basicdata.mapper.HikvisionRequestRetryMapper;
import com.zhgd.xmgl.modules.car.entity.CarInfo;
import com.zhgd.xmgl.modules.car.entity.CarPassRecord;
import com.zhgd.xmgl.modules.car.mapper.CarPassRecordMapper;
@ -32,16 +35,14 @@ import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Lazy;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import springfox.documentation.annotations.ApiIgnore;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Objects;
import java.util.*;
@Slf4j
@RestController
@ -61,6 +62,21 @@ public class HikvisionCall {
@Autowired
@Lazy
private CarPassRecordMapper carPassRecordMapper;
@Autowired
@Lazy
private HikvisionRequestRetryMapper hikvisionRequestRetryMapper;
/**
* 海康请求失败重试定时
*/
@Scheduled(cron = "4 0 0 * * ?")
public void getMonthAmmeterTask() {
List<HikvisionRequestRetry> hikvisionRequestRetries = hikvisionRequestRetryMapper.selectList(new LambdaQueryWrapper<HikvisionRequestRetry>()
.lt(HikvisionRequestRetry::getRequestNum, 4));
for (HikvisionRequestRetry retry : hikvisionRequestRetries) {
HikvisionUtil.doPost(retry.getHost(), retry.getPath(), retry.getBody(), null, retry.getAppKey(), retry.getAppSecret());
}
}
public void addWorkerForHikvision(WorkerInfo workerInfo) {
Project project = projectMapper.selectOne(new LambdaQueryWrapper<Project>().eq(Project::getProjectSn, workerInfo.getProjectSn()));
@ -120,6 +136,18 @@ public class HikvisionCall {
String host = "https://" + project.getArtemisConfigHost();
String body = getWorkerJson(workerInfo);
HikvisionUtil.doPost(host, path, body, null, project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret());
editWorkerFace(workerInfo, project);
}
private void editWorkerFace(WorkerInfo workerInfo, Project project) {
final String ARTEMIS_PATH = "/artemis";
final String path = ARTEMIS_PATH + "/api/resource/v1/face/single/update";
String host = "https://" + project.getArtemisConfigHost();
JSONObject jo = new JSONObject();
jo.put("personId", workerInfo.getId());
jo.put("faceData", Base64Util.convertFileToBase64(PathUtil.reviseSlash(imageUrlPrefix + "/" + workerInfo.getFieldAcquisitionUrl())));
HikvisionUtil.doPost(host, path, jo.toJSONString(), null, project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret());
}
@ -135,6 +163,51 @@ public class HikvisionCall {
jsonBody.put("personIds", Arrays.asList(workerInfo.getId()));
String body = jsonBody.toJSONString();
HikvisionUtil.doPost(host, path, body, null, project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret());
deleteWorkerFace(workerInfo, project);
}
private void deleteWorkerFace(WorkerInfo workerInfo, Project project) {
ArrayList<String> workerFaceIds = getWorkerFaceIds(workerInfo, project);
if (CollUtil.isNotEmpty(workerFaceIds)) {
for (String workerFaceId : workerFaceIds) {
sendDeleteWorkerFace(project, workerFaceId);
}
}
}
private void sendDeleteWorkerFace(Project project, String workerFaceId) {
final String ARTEMIS_PATH = "/artemis";
final String path = ARTEMIS_PATH + "/api/resource/v1/face/single/delete";
String host = "https://" + project.getArtemisConfigHost();
JSONObject jo = new JSONObject();
jo.put("faceId", workerFaceId);
HikvisionUtil.doPost(host, path, jo.toJSONString(), null, project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret());
}
private ArrayList<String> getWorkerFaceIds(WorkerInfo workerInfo, Project project) {
final String ARTEMIS_PATH = "/artemis";
final String path = ARTEMIS_PATH + "/api/resource/v1/person/condition/personInfo";
String host = "https://" + project.getArtemisConfigHost();
JSONObject jo = new JSONObject();
jo.put("paramName", "personId");
jo.put("paramValue", Arrays.asList(String.valueOf(workerInfo.getId())));
String rs = HikvisionUtil.doPost(host, path, jo.toJSONString(), null, project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret());
JSONObject joData = HikvisionUtil.getJSONObjectData(rs);
ArrayList<String> ids = new ArrayList<>();
if (joData != null) {
Integer total = joData.getInteger("total");
if (Objects.equals(total, 1)) {
JSONArray jsonArray = joData.getJSONArray("list");
for (int i = 0; i < jsonArray.size(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
ids.add(jsonObject.getString("personPhotoIndexCode"));
}
}
}
return ids;
}
public void addCarInfoForHikvision(CarInfo carInfo) {

View File

@ -0,0 +1,100 @@
package com.zhgd.xmgl.modules.basicdata.entity;
import java.io.Serializable;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import org.jeecgframework.poi.excel.annotation.Excel;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
/**
* @Description: 海康请求重试表
* @author pds
* @date 2024-03-01
* @version V1.0
*/
@Data
@TableName("hikvision_request_retry")
@ApiModel(value = "HikvisionRequestRetry实体类", description = "HikvisionRequestRetry")
public class HikvisionRequestRetry implements Serializable {
private static final long serialVersionUID = 1L;
/**
* id
*/
@TableId(type = IdType.ASSIGN_ID)
@ApiModelProperty(value = "id")
private Long id;
private String host;
private String path;
/**
* 请求URL
*/
@Excel(name = "请求URL", width = 15)
@ApiModelProperty(value = "请求URL")
private String url;
/**
* 请求方法1GET2POST
*/
@Excel(name = "请求方法1GET2POST", width = 15)
@ApiModelProperty(value = "请求方法1GET2POST")
private Integer method;
/**
* 请求参数
*/
@Excel(name = "请求参数", width = 15)
@ApiModelProperty(value = "请求参数")
private String param;
/**
* 请求body
*/
@Excel(name = "请求body", width = 15)
@ApiModelProperty(value = "请求body")
private String body;
/**
* 上次请求结果
*/
@Excel(name = "上次请求结果", width = 15)
@ApiModelProperty(value = "上次请求结果")
private String lastResult;
/**
* 请求次数
*/
@Excel(name = "请求次数", width = 15)
@ApiModelProperty(value = "请求次数")
private Integer requestNum;
/**
* appKey
*/
@Excel(name = "appKey", width = 15)
@ApiModelProperty(value = "appKey")
private String appKey;
/**
* appSecret
*/
@Excel(name = "appSecret", width = 15)
@ApiModelProperty(value = "appSecret")
private String appSecret;
/**
* 创建时间
*/
@Excel(name = "创建时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "创建时间")
private Date createTime;
/**
* 更新时间 yyyy-MM-dd HH:mm:ss
*/
@Excel(name = "更新时间 yyyy-MM-dd HH:mm:ss", width = 20, format = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "更新时间 yyyy-MM-dd HH:mm:ss")
private Date updateTime;
}

View File

@ -0,0 +1,19 @@
package com.zhgd.xmgl.modules.basicdata.mapper;
import java.util.List;
import com.zhgd.xmgl.modules.basicdata.entity.HikvisionRequestRetry;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @Description: 海康请求重试表
* @author pds
* @date 2024-03-01
* @version V1.0
*/
@Mapper
public interface HikvisionRequestRetryMapper extends BaseMapper<HikvisionRequestRetry> {
}

View File

@ -0,0 +1,4 @@
<?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.zhgd.xmgl.modules.basicdata.mapper.HikvisionRequestRetryMapper">
</mapper>

View File

@ -0,0 +1,25 @@
package com.zhgd.xmgl.modules.basicdata.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.zhgd.xmgl.modules.basicdata.entity.HikvisionRequestRetry;
import java.util.HashMap;
import java.util.List;
/**
* @Description: 海康请求重试表
* @author pds
* @date 2024-03-01
* @version V1.0
*/
public interface IHikvisionRequestRetryService extends IService<HikvisionRequestRetry> {
IPage<HikvisionRequestRetry> queryPageList(HashMap<String, Object> paramMap);
List<HikvisionRequestRetry> queryList(HashMap<String, Object> paramMap);
void add(HikvisionRequestRetry hikvisionRequestRetry);
void edit(HikvisionRequestRetry hikvisionRequestRetry);
}

View File

@ -0,0 +1,69 @@
package com.zhgd.xmgl.modules.basicdata.service.impl;
import com.zhgd.xmgl.modules.basicdata.entity.HikvisionRequestRetry;
import com.zhgd.xmgl.modules.basicdata.mapper.HikvisionRequestRetryMapper;
import com.zhgd.xmgl.modules.basicdata.service.IHikvisionRequestRetryService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zhgd.jeecg.common.system.query.QueryGenerator;
import com.zhgd.xmgl.util.PageUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import java.util.HashMap;
import java.util.List;
import com.zhgd.xmgl.util.RefUtil;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.beans.factory.annotation.Autowired;
/**
* @Description: 海康请求重试表
* @author pds
* @date 2024-03-01
* @version V1.0
*/
@Service
@Transactional(rollbackFor = Exception.class)
public class HikvisionRequestRetryServiceImpl extends ServiceImpl<HikvisionRequestRetryMapper, HikvisionRequestRetry> implements IHikvisionRequestRetryService {
@Autowired
private HikvisionRequestRetryMapper hikvisionRequestRetryMapper;
@Override
public IPage<HikvisionRequestRetry> queryPageList(HashMap<String, Object> paramMap) {
QueryWrapper<HikvisionRequestRetry> queryWrapper = getQueryWrapper(paramMap);
Page<HikvisionRequestRetry> page = PageUtil.getPage(paramMap);
IPage<HikvisionRequestRetry> pageList = this.page(page, queryWrapper);
pageList.setRecords(dealList(pageList.getRecords()));
return pageList;
}
@Override
public List<HikvisionRequestRetry> queryList(HashMap<String, Object> paramMap) {
QueryWrapper<HikvisionRequestRetry> queryWrapper = getQueryWrapper(paramMap);
return dealList(this.list(queryWrapper));
}
private QueryWrapper<HikvisionRequestRetry> getQueryWrapper(HashMap<String, Object> paramMap) {
String alias = "";
QueryWrapper<HikvisionRequestRetry> queryWrapper = QueryGenerator.initPageQueryWrapper(HikvisionRequestRetry.class, paramMap, alias);
queryWrapper.orderByDesc(alias + RefUtil.fieldNameUlc(HikvisionRequestRetry::getId));
return queryWrapper;
}
private List<HikvisionRequestRetry> dealList(List<HikvisionRequestRetry> list) {
return list;
}
@Override
public void add(HikvisionRequestRetry hikvisionRequestRetry) {
hikvisionRequestRetry.setId(null);
baseMapper.insert(hikvisionRequestRetry);
}
@Override
public void edit(HikvisionRequestRetry hikvisionRequestRetry) {
baseMapper.updateById(hikvisionRequestRetry);
}
}

View File

@ -1,11 +1,17 @@
package com.zhgd.xmgl.util;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.hikvision.artemis.sdk.Client;
import com.hikvision.artemis.sdk.Request;
import com.hikvision.artemis.sdk.Response;
import com.hikvision.artemis.sdk.constant.Constants;
import com.hikvision.artemis.sdk.enums.Method;
import com.zhgd.xmgl.modules.basicdata.entity.HikvisionRequestRetry;
import com.zhgd.xmgl.modules.basicdata.mapper.HikvisionRequestRetryMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;
@ -14,7 +20,16 @@ import java.util.Map;
* 海康接口
*/
@Slf4j
@Component
public class HikvisionUtil {
private static HikvisionRequestRetryMapper hikvisionRequestRetryMapper;
@Autowired
public void setHikvisionRequestRetryMapper(HikvisionRequestRetryMapper hikvisionRequestRetryMapper) {
HikvisionUtil.hikvisionRequestRetryMapper = hikvisionRequestRetryMapper;
}
public static String doPost(String host, String path, String body, Map<String, String> querys, String appKey, String appSecret) {
log.info("HikvisionUtil#doPost.url:{}", host + path);
String responseStr = null;
@ -31,6 +46,18 @@ public class HikvisionUtil {
log.info("HikvisionUtil#doPost.getResponseResult:{}", responseStr);
} catch (Exception var10) {
var10.printStackTrace();
HikvisionRequestRetry entity = new HikvisionRequestRetry();
entity.setUrl(host + path);
entity.setHost(host);
entity.setPath(path);
entity.setMethod(2);
entity.setParam(JSON.toJSONString(querys));
entity.setBody(body);
entity.setLastResult(null);
entity.setRequestNum(1);
entity.setAppKey(appKey);
entity.setAppSecret(appSecret);
hikvisionRequestRetryMapper.insert(entity);
}
return responseStr;
}
@ -47,4 +74,15 @@ public class HikvisionUtil {
return responseStr;
}
public static JSONObject getJSONObjectData(String rs) {
JSONObject rsJo = JSONObject.parseObject(rs);
Integer code = rsJo.getInteger("code");
if (code == 0) {
return rsJo.getJSONObject("data");
} else {
log.error("海康解析结果失败:{}", rs);
return null;
}
}
}