diff --git a/src/main/java/com/bootdo/datasend/dianxin/domain/dto/DoorRecordDTO.java b/src/main/java/com/bootdo/datasend/dianxin/domain/dto/DoorRecordDTO.java new file mode 100644 index 0000000..317382b --- /dev/null +++ b/src/main/java/com/bootdo/datasend/dianxin/domain/dto/DoorRecordDTO.java @@ -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; +} diff --git a/src/main/java/com/bootdo/datasend/dianxin/domain/dto/DoorRequestDataDTO.java b/src/main/java/com/bootdo/datasend/dianxin/domain/dto/DoorRequestDataDTO.java new file mode 100644 index 0000000..da17991 --- /dev/null +++ b/src/main/java/com/bootdo/datasend/dianxin/domain/dto/DoorRequestDataDTO.java @@ -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 requestDataList; +} diff --git a/src/main/java/com/bootdo/datasend/dianxin/domain/dto/DoorRequestDataListDTO.java b/src/main/java/com/bootdo/datasend/dianxin/domain/dto/DoorRequestDataListDTO.java new file mode 100644 index 0000000..d6dae32 --- /dev/null +++ b/src/main/java/com/bootdo/datasend/dianxin/domain/dto/DoorRequestDataListDTO.java @@ -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; +} diff --git a/src/main/java/com/bootdo/datasend/dianxin/task/StandardTask.java b/src/main/java/com/bootdo/datasend/dianxin/task/StandardTask.java index 9ca79aa..bb0000d 100644 --- a/src/main/java/com/bootdo/datasend/dianxin/task/StandardTask.java +++ b/src/main/java/com/bootdo/datasend/dianxin/task/StandardTask.java @@ -2,10 +2,9 @@ package com.bootdo.datasend.dianxin.task; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.parser.Feature; +import com.alibaba.fastjson.serializer.SerializerFeature; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 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.dto.*; import com.bootdo.datasend.dianxin.service.*; @@ -17,6 +16,7 @@ import org.slf4j.LoggerFactory; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; +import org.springframework.web.client.RestTemplate; import java.util.ArrayList; import java.util.List; @@ -33,6 +33,8 @@ public class StandardTask { private final BaseVehicleRecordService vehicleRecordService; private final BaseDoorRecordService doorRecordService; + private final RestTemplate restTemplate; + /** * 功能描述: 高抛发送 */ @@ -184,7 +186,28 @@ public class StandardTask { list.add(requestDataListDTO); dataDTO.setRequestDataList(list); 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 boolean b = sendUserMq(dto); if (b) { @@ -235,19 +258,110 @@ public class StandardTask { requestDataListDTO.setGlobalPicBase64(Base64Util.getBase64ByUrl(h.getGlobalPic())); requestDataListDTO.setPlateNo(h.getPlateNo()); requestDataListDTO.setDeviceSN(h.getGbsChannelNo()); + requestDataListDTO.setPassDirection(StringKit.toString(deviceInfo.getDirection())); List 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/acceptDwCarRecord"; - //循环发送mq - boolean b = sendVehicleMq(dto); - if (b) { + try { + // 发送 POST 请求,这里假设接口返回类型为 String ,可根据实际调整 +// 消息队列发送 +// rabbitTemplate.convertAndSend(queueName, JSON.toJSONString(dto)); +// 调接口 + String result = restTemplate.postForObject(url, requestBody, String.class); + logger.info("调用接口返回结果:{}", result); + + // 若返回码符合成功逻辑(需看接口文档定义),更新发送状态 h.setIsSend(1); 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 lists = doorRecordService.list(new QueryWrapper() + .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 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()); + } + } } diff --git a/src/main/java/com/bootdo/util/AppConfig.java b/src/main/java/com/bootdo/util/AppConfig.java new file mode 100644 index 0000000..54d1b36 --- /dev/null +++ b/src/main/java/com/bootdo/util/AppConfig.java @@ -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(); + } +} \ No newline at end of file diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 04d82a8..31baff3 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -2,8 +2,8 @@ spring: datasource: #数据库 type: com.alibaba.druid.pool.DruidDataSource username: root - password: '1qaz!QAZ' - url: jdbc:mysql://221.229.107.118:30523/multidimensional_box?useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&serverTimezone=GMT + password: '!QAZ1qaz' + 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 driver-class-name: com.mysql.cj.jdbc.Driver initialSize: 5 # 配置初始化大小、最小、最大