This commit is contained in:
李京通 2025-06-17 17:48:58 +08:00
parent 59ee7a2509
commit 4572ff144c
6 changed files with 219 additions and 8 deletions

View File

@ -0,0 +1,17 @@
package com.bootdo.datasend.dianxin.domain.dto;
import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @Description DoorRecordDTO
* @Author lijingtong
* @Date 2025-06-17
*/
@NoArgsConstructor
@Data
public class DoorRecordDTO {
@JSONField(name = "requestData")
private DoorRequestDataDTO requestData;
}

View File

@ -0,0 +1,21 @@
package com.bootdo.datasend.dianxin.domain.dto;
import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/**
* @Description DoorRequestDataDTO
* @Author lijingtong
* @Date 2025-06-17
*/
@NoArgsConstructor
@Data
public class DoorRequestDataDTO {
@JSONField(name = "requestFlag")
private String requestFlag;
@JSONField(name = "requestDataList")
private List<DoorRequestDataListDTO> requestDataList;
}

View File

@ -0,0 +1,45 @@
package com.bootdo.datasend.dianxin.domain.dto;
import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @Description DoorRequestDataListDTO
* @Author lijingtong
* @Date 2025-06-17
*/
@NoArgsConstructor
@Data
public class DoorRequestDataListDTO {
// 多维网关设备SN
@JSONField(name = "gatewaySN")
private String gatewaySN;
// 设备(国标)编码
@JSONField(name = "deviceSN")
private String deviceSN;
// 门禁验证方式
@JSONField(name = "validType")
private Integer validType;
// 卡号/人脸编码(证件号码MD5)
@JSONField(name = "cardNo")
private String cardNo;
// 验证结果
@JSONField(name = "validResult")
private Integer validResult;
// 通行时间
@JSONField(name = "passTime")
private String passTime;
// 通行方向
@JSONField(name = "passDirection")
private Integer passDirection;
// 人脸图base64编码
@JSONField(name = "personPicBase64")
private String personPicBase64;
// 全景图base64编码
@JSONField(name = "globalPicBase64")
private String globalPicBase64;
// 人员姓名
@JSONField(name = "userName")
private String userName;
}

View File

@ -2,10 +2,9 @@ package com.bootdo.datasend.dianxin.task;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.parser.Feature; import com.alibaba.fastjson.parser.Feature;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.bootdo.datasend.dianxin.cache.DeviceCache; import com.bootdo.datasend.dianxin.cache.DeviceCache;
import com.bootdo.datasend.dianxin.cache.DirectionCache;
import com.bootdo.datasend.dianxin.cache.OrientationCache;
import com.bootdo.datasend.dianxin.domain.*; import com.bootdo.datasend.dianxin.domain.*;
import com.bootdo.datasend.dianxin.domain.dto.*; import com.bootdo.datasend.dianxin.domain.dto.*;
import com.bootdo.datasend.dianxin.service.*; import com.bootdo.datasend.dianxin.service.*;
@ -17,6 +16,7 @@ import org.slf4j.LoggerFactory;
import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.scheduling.annotation.Scheduled; import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -33,6 +33,8 @@ public class StandardTask {
private final BaseVehicleRecordService vehicleRecordService; private final BaseVehicleRecordService vehicleRecordService;
private final BaseDoorRecordService doorRecordService; private final BaseDoorRecordService doorRecordService;
private final RestTemplate restTemplate;
/** /**
* 功能描述: 高抛发送 * 功能描述: 高抛发送
*/ */
@ -184,7 +186,28 @@ public class StandardTask {
list.add(requestDataListDTO); list.add(requestDataListDTO);
dataDTO.setRequestDataList(list); dataDTO.setRequestDataList(list);
dto.setRequestData(dataDTO); dto.setRequestData(dataDTO);
String requestBody = JSON.toJSONString(dto);
// 比如队列名称是 instruction||{gatewaySN} 需替换成实际的 gatewaySN
String gatewaySN = deviceInfo != null ? deviceInfo.getGeminiSn() : "";
String queueName = "instruction||" + gatewaySN;
String url = "http://180.101.177.39:10010/api/zdyq-equipment/dwBoxRecord/accept";
try {
// 发送 POST 请求这里假设接口返回类型为 String 可根据实际调整
// 消息队列发送
// rabbitTemplate.convertAndSend(queueName, JSON.toJSONString(dto));
// 调接口
String result = restTemplate.postForObject(url, requestBody, String.class);
logger.info("调用接口返回结果:{}", result);
// 若返回码符合成功逻辑需看接口文档定义更新发送状态
h.setIsSend(1);
userRecordService.saveOrUpdate(h);
logger.info("人脸抓拍记录发送成功:" + h.getId());
} catch (Exception e) {
logger.error("调用接口发送数据失败,记录 ID{},异常:{}", h.getId(), e.getMessage());
}
//循环发送mq //循环发送mq
boolean b = sendUserMq(dto); boolean b = sendUserMq(dto);
if (b) { if (b) {
@ -235,19 +258,110 @@ public class StandardTask {
requestDataListDTO.setGlobalPicBase64(Base64Util.getBase64ByUrl(h.getGlobalPic())); requestDataListDTO.setGlobalPicBase64(Base64Util.getBase64ByUrl(h.getGlobalPic()));
requestDataListDTO.setPlateNo(h.getPlateNo()); requestDataListDTO.setPlateNo(h.getPlateNo());
requestDataListDTO.setDeviceSN(h.getGbsChannelNo()); requestDataListDTO.setDeviceSN(h.getGbsChannelNo());
requestDataListDTO.setPassDirection(StringKit.toString(deviceInfo.getDirection())); requestDataListDTO.setPassDirection(StringKit.toString(deviceInfo.getDirection()));
List<VehicleRequestDataListDTO> list = new ArrayList<>(); List<VehicleRequestDataListDTO> list = new ArrayList<>();
list.add(requestDataListDTO); list.add(requestDataListDTO);
dataDTO.setRequestDataList(list); dataDTO.setRequestDataList(list);
dto.setRequestData(dataDTO); dto.setRequestData(dataDTO);
// String requestBody = JSON.toJSONString(dto);
String requestBody = JSON.toJSONString(dto, SerializerFeature.BrowserCompatible);
// 比如队列名称是 instruction||{gatewaySN} 需替换成实际的 gatewaySN
String gatewaySN = deviceInfo != null ? deviceInfo.getGeminiSn() : "";
String queueName = "instruction||" + gatewaySN;
String url = "http://180.101.177.39:10010/api/zdyq-equipment/dwBoxRecord/acceptDwCarRecord";
//循环发送mq try {
boolean b = sendVehicleMq(dto); // 发送 POST 请求这里假设接口返回类型为 String 可根据实际调整
if (b) { // 消息队列发送
// rabbitTemplate.convertAndSend(queueName, JSON.toJSONString(dto));
// 调接口
String result = restTemplate.postForObject(url, requestBody, String.class);
logger.info("调用接口返回结果:{}", result);
// 若返回码符合成功逻辑需看接口文档定义更新发送状态
h.setIsSend(1); h.setIsSend(1);
vehicleRecordService.saveOrUpdate(h); vehicleRecordService.saveOrUpdate(h);
logger.info("车辆抓拍记录发送成功:" + h.getId()); logger.info("人脸抓拍记录发送成功:" + h.getId());
} catch (Exception e) {
logger.error("调用接口发送数据失败,记录 ID{},异常:{}", h.getId(), e.getMessage());
} }
}
}
/**
* 人脸门禁
*/
@Scheduled(cron = "0/5 * * * * ? ")
public void doorRecord() {
List<BaseDoorRecord> lists = doorRecordService.list(new QueryWrapper<BaseDoorRecord>()
.eq("is_send", "0")
.last("limit 100")
);
for (BaseDoorRecord h : lists) {
String deviceId = h.getCameraIp();
String deviceCacheStr = DeviceCache.get(deviceId);
String passDirection = "";
DevopsDeviceInfo deviceInfo = null;
if ("".equals(StringKit.toString(deviceCacheStr))) {
logger.info("当前设备缓存中不存在:" + deviceId);
} else {
logger.info("当前设备获取到缓存:" + deviceId);
deviceInfo = JSON.parseObject(deviceCacheStr, DevopsDeviceInfo.class, Feature.IgnoreNotMatch);
}
DoorRecordDTO dto = new DoorRecordDTO();
DoorRequestDataDTO dataDTO = new DoorRequestDataDTO();
dataDTO.setRequestFlag("1");
DoorRequestDataListDTO requestDataListDTO = new DoorRequestDataListDTO();
if (deviceInfo != null) {
requestDataListDTO.setGatewaySN(deviceInfo.getGeminiSn());
}
requestDataListDTO.setDeviceSN(h.getGbsChannelNo());
requestDataListDTO.setValidType(Integer.valueOf(h.getDirection()));
requestDataListDTO.setPassTime(StringKit.toString(h.getPassTime()));
requestDataListDTO.setGlobalPicBase64(Base64Util.getBase64ByUrl(h.getPersonPic()));
requestDataListDTO.setCardNo(h.getIdcard());
requestDataListDTO.setDeviceSN(h.getGbsChannelNo());
requestDataListDTO.setUserName(h.getUserName());
requestDataListDTO.setValidResult(Integer.valueOf(h.getOpenResult()));
requestDataListDTO.setPassDirection(deviceInfo.getDirection());
List<DoorRequestDataListDTO> list = new ArrayList<>();
list.add(requestDataListDTO);
dataDTO.setRequestDataList(list);
dto.setRequestData(dataDTO);
// String requestBody = JSON.toJSONString(dto);
String requestBody = JSON.toJSONString(dto, SerializerFeature.BrowserCompatible);
// 比如队列名称是 instruction||{gatewaySN} 需替换成实际的 gatewaySN
String gatewaySN = deviceInfo != null ? deviceInfo.getGeminiSn() : "";
String queueName = "instruction||" + gatewaySN;
String url = "http://180.101.177.39:10010/api/zdyq-equipment/dwBoxRecord/acceptDwUserRecord";
try {
// 发送 POST 请求这里假设接口返回类型为 String 可根据实际调整
// 消息队列发送
// rabbitTemplate.convertAndSend(queueName, JSON.toJSONString(dto));
// 调接口
String result = restTemplate.postForObject(url, requestBody, String.class);
logger.info("调用接口返回结果:{}", result);
// 若返回码符合成功逻辑需看接口文档定义更新发送状态
h.setIsSend(1);
doorRecordService.saveOrUpdate(h);
logger.info("人脸抓拍记录发送成功:" + h.getId());
} catch (Exception e) {
logger.error("调用接口发送数据失败,记录 ID{},异常:{}", h.getId(), e.getMessage());
}
} }
} }

View File

@ -0,0 +1,14 @@
package com.bootdo.util;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
@Configuration
public class AppConfig {
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
}

View File

@ -2,8 +2,8 @@ spring:
datasource: #数据库 datasource: #数据库
type: com.alibaba.druid.pool.DruidDataSource type: com.alibaba.druid.pool.DruidDataSource
username: root username: root
password: '1qaz!QAZ' password: '!QAZ1qaz'
url: jdbc:mysql://221.229.107.118:30523/multidimensional_box?useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&serverTimezone=GMT url: jdbc:mysql://221.229.107.118:30557/multidimensional_box?useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&serverTimezone=GMT
# url: jdbc:mysql://127.0.0.1:55306/multidimensional_box?useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&serverTimezone=GMT # url: jdbc:mysql://127.0.0.1:55306/multidimensional_box?useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&serverTimezone=GMT
driver-class-name: com.mysql.cj.jdbc.Driver driver-class-name: com.mysql.cj.jdbc.Driver
initialSize: 5 # 配置初始化大小、最小、最大 initialSize: 5 # 配置初始化大小、最小、最大