feat:人脸下发

This commit is contained in:
dzc committed 2025-01-14 15:27:45 +08:00
1 parent a49b913e9f
commit 79be68e8dc
10 files changed
+99 -13

No files matched your search

@@ -58,5 +58,5 @@ public interface RemoteMqttEventService {
*/
@NoToken
@GetMapping("/mqtt/send-face-change-msg")
R<Boolean> sendFaceChangeMsg(@RequestParam Long mchDeptId);
R<Boolean> sendFaceChangeMsg(@RequestParam List<Long> parentDeptList, @RequestParam Long userId);
}
@@ -5,7 +5,7 @@ import com.bsd.pjcloud.mqtt.constant.MqttActionEnum;
import lombok.Data;
@Data
public class MqttBaseDto<T> {
public class MqttBaseDto<T extends MqttHardBaseMsg> {
// 商户id
private Long merchantDeptId;
@@ -0,0 +1,11 @@
package com.bsd.pjcloud.mqtt.dto.hard;
import com.bsd.pjcloud.mqtt.dto.MqttHardBaseMsg;
import lombok.Data;
@Data
public class HardCustomerMsg extends MqttHardBaseMsg {
private String userId;
}
+6
View File
@@ -79,6 +79,12 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>com.bsd</groupId>
<artifactId>pjcloud-wallet-api</artifactId>
<version>5.7.0</version>
<scope>compile</scope>
</dependency>
</dependencies>
<profiles>
<profile>
@@ -5,13 +5,20 @@ import com.bsd.pjcloud.common.core.util.R;
import com.bsd.pjcloud.common.security.annotation.Inner;
import com.bsd.pjcloud.mqtt.constant.MqttActionEnum;
import com.bsd.pjcloud.mqtt.dto.MqttBaseDto;
import com.bsd.pjcloud.mqtt.dto.hard.HardCustomerMsg;
import com.bsd.pjcloud.mqtt.service.MqttEventService;
import com.bsd.pjcloud.wallet.api.feign.RemoteMchService;
import com.bsd.pjcloud.wallet.api.vo.MchManageVo;
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpHeaders;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
@RestController
@RequiredArgsConstructor
@RequestMapping("/mqtt")
@@ -21,6 +28,8 @@ public class MqttEventController {
private final MqttEventService mqttEventService;
private final RemoteMchService remoteMchService;
@Inner
@PostMapping("/send-default-msg")
public R<Boolean> sendDefaultMsg(@RequestBody MqttBaseDto dto) {
@@ -100,10 +109,16 @@ public class MqttEventController {
*/
@Inner
@GetMapping("/send-face-change-msg")
public R<Boolean> sendFaceChangeMsg(@RequestParam Long mchDeptId) {
MqttBaseDto dto = new MqttBaseDto<>();
dto.setMerchantDeptId(mchDeptId);
public R<Boolean> sendFaceChangeMsg(@RequestParam List<Long> parentDeptList, @RequestParam Long userId) {
MqttBaseDto dto = new MqttBaseDto();
MchManageVo mchDept = remoteMchService.getFirstMch(parentDeptList).getData();
if (ObjectUtil.isNotEmpty(mchDept)) {
dto.setMerchantDeptId(mchDept.getDeptId());
}
dto.setAction(MqttActionEnum.FACE);
HardCustomerMsg msg = new HardCustomerMsg();
msg.setUserId(String.valueOf(userId));
dto.setData(msg);
return R.ok(mqttEventService.defaultAction(dto));
}
@@ -14,8 +14,9 @@ public class MqttEventService {
private final MqttService mqttService;
public <T extends MqttBaseDto> Boolean defaultAction(T dto) {
MqttHardBaseMsg msg = new MqttHardBaseMsg();
MqttHardBaseMsg msg = dto.getData();
msg.setAction(dto.getAction());
mqttService.publish(dto.getQos(), false, dto.getTopic(), JSON.toJSONString(msg));
return true;
+6
View File
@@ -204,6 +204,12 @@
<groupId>com.bsd</groupId>
<artifactId>pjcloud-common-idempotent</artifactId>
</dependency>
<dependency>
<groupId>com.bsd</groupId>
<artifactId>pjcloud-mqtt-api</artifactId>
<version>5.7.0</version>
<scope>compile</scope>
</dependency>
</dependencies>
@@ -68,6 +68,14 @@ public interface SysDeptService extends IService<SysDept> {
*/
List<SysDept> listDescendant(Long deptId);
/**
* 获得指定部门的所有父部门
*
* @param deptId 部门编号
* @return 父部门列表
*/
List<SysDept> getParentDeptList(Long deptId);
/**
* 获取部门负责人
*
@@ -103,6 +111,7 @@ public interface SysDeptService extends IService<SysDept> {
/**
* 根据部门名查询部门
*
* @param names 部门名
* @return
*/
@@ -220,6 +220,24 @@ public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept> impl
return resDeptList;
}
@Override
public List<SysDept> getParentDeptList(Long deptId) {
LinkedList<SysDept> parentList = new LinkedList<>();
findParentDeptList(deptId, parentList);
return parentList;
}
private void findParentDeptList(Long id, LinkedList<SysDept> parentList) {
SysDept currentDept = baseMapper.selectById(id);
if (currentDept != null) {
parentList.add(currentDept);
Long parentId = currentDept.getParentId();
if (parentId != null) {
findParentDeptList(parentId, parentList);
}
}
}
/**
* 获取部门负责人
* <p>
@@ -1,6 +1,5 @@
package com.bsd.pjcloud.admin.service.impl;
import cn.hutool.core.lang.tree.Tree;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -9,16 +8,14 @@ import com.bsd.pjcloud.admin.api.dto.SysUserFaceDto;
import com.bsd.pjcloud.admin.api.entity.SysDept;
import com.bsd.pjcloud.admin.api.entity.SysUser;
import com.bsd.pjcloud.admin.api.entity.SysUserFaceEntity;
import com.bsd.pjcloud.admin.api.utils.DataUtil;
import com.bsd.pjcloud.admin.api.vo.SysUserFaceVo;
import com.bsd.pjcloud.admin.mapper.SysUserFaceMapper;
import com.bsd.pjcloud.admin.service.SysDeptService;
import com.bsd.pjcloud.admin.service.SysUserFaceService;
import com.bsd.pjcloud.admin.service.SysUserService;
import com.bsd.pjcloud.common.core.constant.enums.YesNoEnum;
import com.bsd.pjcloud.common.core.exception.CheckedException;
import com.bsd.pjcloud.common.core.util.CollectionUtils;
import com.bsd.pjcloud.common.data.datascope.DataScope;
import com.bsd.pjcloud.mqtt.api.feign.RemoteMqttEventService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@@ -42,6 +39,8 @@ public class SysUserFaceServiceImpl extends ServiceImpl<SysUserFaceMapper, SysUs
private final SysUserService sysUserService;
private final SysDeptService sysDeptService;
private final RemoteMqttEventService remoteMqttEventService;
@Override
public Long create(SysUserFaceEntity sysUserFace) {
// 插入
@@ -52,6 +51,8 @@ public class SysUserFaceServiceImpl extends ServiceImpl<SysUserFaceMapper, SysUs
updateObj.setId(sysUserFace.getId());
updateObj.setAutoCode(String.valueOf(count));
baseMapper.updateById(updateObj);
// 发送mq
sendFaceMq(List.of(sysUserFace.getUserId()));
return sysUserFace.getId();
}
@@ -62,15 +63,21 @@ public class SysUserFaceServiceImpl extends ServiceImpl<SysUserFaceMapper, SysUs
throw new CheckedException("人脸样本表不存在");
}
baseMapper.selectById(userFace.getUserId());
// 发送mq
sendFaceMq(List.of(sysUserFace.getUserId()));
}
@Override
public void delByIds(ArrayList<Long> list) {
if (ObjectUtil.isEmpty(list)) return;
// 发送mq
List<SysUserFaceEntity> faceList = baseMapper.selectList(new LambdaQueryWrapper<SysUserFaceEntity>()
.in(SysUserFaceEntity::getId, list)
);
if (ObjectUtil.isNotEmpty(faceList)) {
sendFaceMq(faceList.stream().map(SysUserFaceEntity::getUserId).toList());
}
baseMapper.deleteBatchIds(list);
list.forEach(v -> {
// 发送mq给硬件设备
});
}
@Override
@@ -94,4 +101,17 @@ public class SysUserFaceServiceImpl extends ServiceImpl<SysUserFaceMapper, SysUs
public SysUserFaceVo join(Long id) {
return baseMapper.join(id);
}
// 发送mq
private void sendFaceMq(List<Long> userIds) {
if (ObjectUtil.isEmpty(userIds)) return;
List<SysUser> list = sysUserService.list(new LambdaQueryWrapper<SysUser>().in(SysUser::getUserId, userIds));
if (ObjectUtil.isEmpty(list)) return;
for (SysUser v : list) {
List<SysDept> parentDeptList = sysDeptService.getParentDeptList(v.getDeptId());
if (ObjectUtil.isEmpty(parentDeptList)) continue;
List<Long> deptIds = parentDeptList.stream().map(SysDept::getDeptId).toList();
remoteMqttEventService.sendFaceChangeMsg(deptIds, v.getUserId());
}
}
}