人脸设备对接

This commit is contained in:
pengjie 2025-07-21 10:44:43 +08:00
parent 7e71847287
commit 6e0f08bfa9
6 changed files with 156 additions and 23 deletions

View File

@ -1,6 +1,11 @@
package com.zhgd.mqtt.server;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.zhgd.xmgl.constant.Cts;
import com.zhgd.xmgl.modules.worker.service.IWorkerInfoService;
import com.zhgd.xmgl.modules.xz.service.IXzHikvisionSyncService;
import org.apache.commons.lang3.StringUtils;
import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
import org.slf4j.Logger;
@ -10,12 +15,17 @@ import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.integration.annotation.ServiceActivator;
import org.springframework.integration.channel.DirectChannel;
import org.springframework.integration.core.MessageProducer;
import org.springframework.integration.mqtt.core.DefaultMqttPahoClientFactory;
import org.springframework.integration.mqtt.core.MqttPahoClientFactory;
import org.springframework.integration.mqtt.inbound.MqttPahoMessageDrivenChannelAdapter;
import org.springframework.integration.mqtt.outbound.MqttPahoMessageHandler;
import org.springframework.integration.mqtt.support.DefaultPahoMessageConverter;
import org.springframework.messaging.MessageChannel;
import org.springframework.messaging.MessageHandler;
import javax.annotation.Resource;
/**
* @program: itbgp
* @description:
@ -62,6 +72,8 @@ public class MqttConfig {
@Value("${mqtt.consumer.defaultTopic}")
private String consumerDefaultTopic;
@Resource
private IXzHikvisionSyncService xzHikvisionSyncService;
/**
* MQTT连接器选项
@ -131,7 +143,7 @@ public class MqttConfig {
* MQTT消息订阅绑定消费者
*
* @return {@link org.springframework.integration.core.MessageProducer}
*//*
*/
@Bean
public MessageProducer inbound() {
// 可以同时消费订阅多个Topic
@ -145,24 +157,23 @@ public class MqttConfig {
// 设置订阅通道
adapter.setOutputChannel(mqttInboundChannel());
return adapter;
}*/
}
/**
* MQTT信息通道消费者
*
* @return {@link org.springframework.messaging.MessageChannel}
*//*
*/
@Bean(name = CHANNEL_NAME_IN)
public MessageChannel mqttInboundChannel() {
return new DirectChannel();
}
*/
/**
* MQTT消息处理器消费者
*
* @return {@link org.springframework.messaging.MessageHandler}
*/
/*@Bean
@Bean
@ServiceActivator(inputChannel = CHANNEL_NAME_IN)
public MessageHandler handler() {
return message -> {
@ -171,6 +182,15 @@ public class MqttConfig {
Object payLoad = message.getPayload();
LOGGER.info("主题:{},消息接收到的数据:{}", message.getHeaders().get("mqtt_receivedTopic"),payLoad);
LOGGER.error("===================={}============", payLoad);
// if (topic.contains("mqtt/face/")) {
// JSONObject jsonObject = JSONObject.parseObject(payLoad.toString());
// if (jsonObject.getString("code").equals("200")) {
// JSONArray jsonArray = jsonObject.getJSONObject("info").getJSONArray("AddSucInfo");
// xzHikvisionSyncService.mqttAck(topic.split("/")[2], jsonArray, 1);
// JSONArray errorArray = jsonObject.getJSONObject("info").getJSONArray("AddErrInfo");
// xzHikvisionSyncService.mqttAck(topic.split("/")[2], errorArray, 0);
// }
// }
};
}*/
}
}

View File

@ -1,5 +1,6 @@
package com.zhgd.xmgl.modules.xz.service;
import com.alibaba.fastjson.JSONArray;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.zhgd.xmgl.modules.xz.entity.XzHikvisionSync;
@ -67,4 +68,6 @@ public interface IXzHikvisionSyncService extends IService<XzHikvisionSync> {
* @throws Exception
*/
void retry(Map<String, Object> paramMap) throws Exception;
void mqttAck(String deviceSn, JSONArray workerIds, Integer isSuccess);
}

View File

@ -1,6 +1,9 @@
package com.zhgd.xmgl.modules.xz.service.impl;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
@ -26,6 +29,7 @@ import com.zhgd.xmgl.modules.xz.enums.XzHikvisionSyncOperateEnum;
import com.zhgd.xmgl.modules.xz.enums.XzHikvisionSyncTypeEnum;
import com.zhgd.xmgl.modules.xz.mapper.XzHikvisionSyncMapper;
import com.zhgd.xmgl.modules.xz.service.IXzHikvisionSyncService;
import com.zhgd.xmgl.modules.xz.special.entity.XzGasAnalyze;
import com.zhgd.xmgl.util.PageUtil;
import com.zhgd.xmgl.util.RefUtil;
import com.zhgd.xmgl.util.ThreadLocalUtil;
@ -37,6 +41,7 @@ import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import java.util.stream.Collectors;
/**
* @Description: 星纵-海康同步数据
@ -251,4 +256,35 @@ public class XzHikvisionSyncServiceImpl extends ServiceImpl<XzHikvisionSyncMappe
}
}
@Override
public void mqttAck(String deviceSn, JSONArray ackInfo, Integer isSuccess) {
List<XzHikvisionSync> syncList = new ArrayList<>();
for (Object ack : ackInfo) {
JSONObject obj = JSONObject.parseObject(JSON.toJSONString(ack));
String customId = obj.getString("customId");
WorkerInfo workerInfo = workerInfoMapper.selectById(customId);
if (workerInfo != null) {
build(syncList, workerInfo, deviceSn, isSuccess);
}
}
if (syncList.size() > 0) {
this.saveBatch(syncList);
}
}
private void build(List<XzHikvisionSync> syncList, WorkerInfo workerInfo, String deviceSn, Integer isSuccess) {
XzHikvisionSync sync = new XzHikvisionSync();
sync.setProjectSn(workerInfo.getProjectSn());
sync.setType(1);
sync.setOperate(1);
sync.setDeviceSn(deviceSn);
sync.setWhoId(workerInfo.getId());
sync.setIsSuccess(isSuccess);
sync.setCreateDate(new Date());
sync.setUpdateDate(new Date());
sync.setBigType(1);
syncList.add(sync);
syncList.add(sync);
}
}

View File

@ -30,6 +30,7 @@ import com.zhgd.xmgl.modules.project.entity.ProjectExternalSystemService;
import com.zhgd.xmgl.modules.project.entity.ProjectUfaceConfig;
import com.zhgd.xmgl.modules.project.mapper.ProjectExternalSystemServiceMapper;
import com.zhgd.xmgl.modules.project.mapper.ProjectMapper;
import com.zhgd.xmgl.modules.project.mapper.ProjectUfaceConfigMapper;
import com.zhgd.xmgl.modules.project.service.IProjectUfaceConfigService;
import com.zhgd.xmgl.modules.quality.entity.QualityRegion;
import com.zhgd.xmgl.modules.quality.service.IQualityRegionService;
@ -40,10 +41,7 @@ import com.zhgd.xmgl.modules.worker.mapper.WorkerInfoMapper;
import com.zhgd.xmgl.modules.worker.service.*;
import com.zhgd.xmgl.modules.worker.service.impl.WorkerInfoServiceImpl;
import com.zhgd.xmgl.modules.worker.service.IDangongWorkerFaceStatusService;
import com.zhgd.xmgl.modules.xz.entity.XzCertificateExpireAlarmRecord;
import com.zhgd.xmgl.modules.xz.entity.XzWorkerSafeWatchAlarm;
import com.zhgd.xmgl.modules.xz.entity.XzWorkerSafeWatchConfig;
import com.zhgd.xmgl.modules.xz.entity.XzWorkerSafeWatchManager;
import com.zhgd.xmgl.modules.xz.entity.*;
import com.zhgd.xmgl.modules.xz.security.entity.XzSecurityInspectTaskItemRecord;
import com.zhgd.xmgl.modules.xz.security.entity.XzSecurityInspectTaskRecord;
import com.zhgd.xmgl.modules.xz.security.entity.XzSecurityQualityInspectionRecord;
@ -52,14 +50,12 @@ import com.zhgd.xmgl.modules.xz.security.mapper.XzSecurityInspectTaskItemRecordM
import com.zhgd.xmgl.modules.xz.security.mapper.XzSecurityInspectTaskRecordMapper;
import com.zhgd.xmgl.modules.xz.security.mapper.XzSecurityQualityInspectionRecordMapper;
import com.zhgd.xmgl.modules.xz.security.service.IXzSecurityQualityInspectionRecordService;
import com.zhgd.xmgl.modules.xz.service.IXzHikvisionSyncService;
import com.zhgd.xmgl.modules.xz.service.IXzWorkerSafeWatchAlarmService;
import com.zhgd.xmgl.modules.xz.service.IXzWorkerSafeWatchConfigService;
import com.zhgd.xmgl.modules.xz.service.IXzWorkerSafeWatchManagerService;
import com.zhgd.xmgl.modules.xz.service.impl.XzCertificateExpireAlarmRecordServiceImpl;
import com.zhgd.xmgl.util.Base64Util;
import com.zhgd.xmgl.util.ElecardUtil;
import com.zhgd.xmgl.util.MapBuilder;
import com.zhgd.xmgl.util.NumberUtils;
import com.zhgd.xmgl.util.*;
import lombok.extern.slf4j.Slf4j;
import net.javacrumbs.shedlock.core.SchedulerLock;
import org.apache.commons.lang3.StringUtils;
@ -77,6 +73,8 @@ import java.util.concurrent.CompletableFuture;
import java.util.function.Function;
import java.util.stream.Collectors;
import static com.zhgd.xmgl.modules.project.enums.ProjectUfaceConfigSupplierTypeEnum.MQTT;
/**
* @program: wisdomSite
* @description: 劳务人员定时任务
@ -149,6 +147,14 @@ public class WorkerTask {
@Autowired
private IDangongWorkerFaceStatusService dangongWorkerFaceStatusService;
@Lazy
@Autowired
private IXzHikvisionSyncService xzHikvisionSyncService;
@Lazy
@Autowired
private ProjectUfaceConfigMapper projectUfaceConfigMapper;
/**
* 定时修改用户码状态
*/
@ -942,10 +948,23 @@ public class WorkerTask {
// /**
// * MQTT同步下发人员信息
// */
// @Scheduled(cron = "0 0/10 * * * ?")
// @Scheduled(cron = "0 0/15 * * * ?")
// @SchedulerLock(name = "mqttIssuedWorkerInfo", lockAtMostFor = 1000 * 55, lockAtLeastFor = 1000 * 55)
// @RequestMapping("mqttIssuedWorkerInfo")
// public void mqttIssuedWorkerInfo() {
//
// List<ProjectUfaceConfig> configList = projectUfaceConfigMapper.selectList(Wrappers.<ProjectUfaceConfig>lambdaQuery()
// .eq(ProjectUfaceConfig::getSupplierType, MQTT.getCode())
// .eq(ProjectUfaceConfig::getIssueDev, 1));
// for (ProjectUfaceConfig projectUfaceConfig : configList) {
// List<XzHikvisionSync> list = xzHikvisionSyncService.list(Wrappers.<XzHikvisionSync>lambdaQuery()
// .eq(XzHikvisionSync::getProjectSn, projectUfaceConfig.getProjectSn())
// .eq(XzHikvisionSync::getIsSuccess, 0)
// .eq(XzHikvisionSync::getType, 1)
// .eq(XzHikvisionSync::getBigType, 1));
// for (XzHikvisionSync sync : list) {
// WorkerInfo workerInfo = workerInfoMapper.selectById(sync.getWhoId());
// MqttFaceDevUtil.addOrUpdatePerson(workerInfo, sync.getDeviceSn());
// }
// }
// }
}

View File

@ -11,9 +11,7 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import java.util.*;
/**
* MQTT下发人员信息
@ -49,6 +47,29 @@ public class MqttFaceDevUtil {
}
}
/**
* 添加修改人员
*
* @param workerInfo
* @param devSn
*/
public static void addOrUpdatePersonList(List<WorkerInfo> workerInfo, String devSn) {
if (StrUtil.isNotBlank(devSn)) {
String[] splitArr = StringUtils.split(devSn, ",");
for (int i = 0; i < splitArr.length; i++) {
String ds = splitArr[i];
Map<String, Object> map = build(workerInfo);
String payload = JSON.toJSONString(map);
String topic = mqttTopic + ds;
log.info("发送主题信息:{},主题为:{}", payload, topic);
IMqttSender mqttSender = SpringContextUtils.getBean(IMqttSender.class);
mqttSender.sendToMqtt(topic, 2, payload);
}
} else {
log.info("未查询到设备sn");
}
}
/**
* 删除人员
*
@ -78,8 +99,11 @@ public class MqttFaceDevUtil {
private static Map<String, Object> build(WorkerInfo workerInfo) {
Map<String, Object> map = new HashMap<>();
map.put("messageId", "ID:" + System.currentTimeMillis() + ":" + workerInfo.getPersonSn());
map.put("operator", "EditPerson");
map.put("messageId", "ID:" + System.currentTimeMillis() + ":" + workerInfo.getProjectSn());
map.put("DataBegin", "BeginFlag");
map.put("operator", "EditPersonsNew");
map.put("PersonNum", 1);
List<Map<String, Object>> infoList = new ArrayList<>();
Map<String, Object> info = new HashMap<>();
info.put("customId", workerInfo.getPersonSn());
info.put("name", workerInfo.getWorkerName());
@ -94,7 +118,38 @@ public class MqttFaceDevUtil {
info.put("personType", 0);
info.put("cardType", 0);
info.put("pic", basePath + "/" + workerInfo.getFieldAcquisitionUrl());
map.put("info", info);
infoList.add(info);
map.put("info", infoList);
map.put("DataEnd", "EndFlag");
return map;
}
private static Map<String, Object> build(List<WorkerInfo> workerInfos) {
Map<String, Object> map = new HashMap<>();
map.put("messageId", "ID:" + System.currentTimeMillis() + ":" + workerInfos.get(0).getProjectSn());
map.put("DataBegin", "BeginFlag");
map.put("operator", "EditPersonsNew");
map.put("PersonNum", 1);
List<Map<String, Object>> infoList = new ArrayList<>();
for (WorkerInfo workerInfo : workerInfos) {
Map<String, Object> info = new HashMap<>();
info.put("customId", workerInfo.getPersonSn());
info.put("name", workerInfo.getWorkerName());
info.put("nation", 1);
info.put("gender", workerInfo.getSex() - 1);
info.put("birthday", workerInfo.getBirthday());
info.put("address", workerInfo.getNowPlace());
info.put("idCard", workerInfo.getIdCard());
info.put("tempCardType", 0);
info.put("telnum1", workerInfo.getPhoneNumber());
info.put("native", workerInfo.getNativePlace());
info.put("personType", 0);
info.put("cardType", 0);
info.put("pic", basePath + "/" + workerInfo.getFieldAcquisitionUrl());
infoList.add(info);
}
map.put("info", infoList);
map.put("DataEnd", "EndFlag");
return map;
}
}

View File

@ -71,7 +71,7 @@ mqtt.url=tcp://jxj.zhgdyun.com:1883
mqtt.producer.clientId=mqttProd
mqtt.producer.defaultTopic=topic1
mqtt.consumer.clientId=mqttConsumer
mqtt.consumer.defaultTopic=topic1
mqtt.consumer.defaultTopic=topic1,mqtt/face/+/Ack
#mqtt.consumer.defaultTopic=/P114101/202203010084
#server.http2.enabled=true
#server.ssl.key-store=classpath:www.cscec1b1.com.jks