diff --git a/pjcloud-mqtt/pjcloud-mqtt-api/src/main/java/com/bsd/pjcloud/mqtt/api/feign/RemoteMqttEventService.java b/pjcloud-mqtt/pjcloud-mqtt-api/src/main/java/com/bsd/pjcloud/mqtt/api/feign/RemoteMqttEventService.java index 758bae1da..c806ef342 100644 --- a/pjcloud-mqtt/pjcloud-mqtt-api/src/main/java/com/bsd/pjcloud/mqtt/api/feign/RemoteMqttEventService.java +++ b/pjcloud-mqtt/pjcloud-mqtt-api/src/main/java/com/bsd/pjcloud/mqtt/api/feign/RemoteMqttEventService.java @@ -58,5 +58,5 @@ public interface RemoteMqttEventService { */ @NoToken @GetMapping("/mqtt/send-face-change-msg") - R sendFaceChangeMsg(@RequestParam Long mchDeptId); + R sendFaceChangeMsg(@RequestParam List parentDeptList, @RequestParam Long userId); } diff --git a/pjcloud-mqtt/pjcloud-mqtt-api/src/main/java/com/bsd/pjcloud/mqtt/dto/MqttBaseDto.java b/pjcloud-mqtt/pjcloud-mqtt-api/src/main/java/com/bsd/pjcloud/mqtt/dto/MqttBaseDto.java index f1dc10c1a..0b36dda5e 100644 --- a/pjcloud-mqtt/pjcloud-mqtt-api/src/main/java/com/bsd/pjcloud/mqtt/dto/MqttBaseDto.java +++ b/pjcloud-mqtt/pjcloud-mqtt-api/src/main/java/com/bsd/pjcloud/mqtt/dto/MqttBaseDto.java @@ -5,7 +5,7 @@ import com.bsd.pjcloud.mqtt.constant.MqttActionEnum; import lombok.Data; @Data -public class MqttBaseDto { +public class MqttBaseDto { // 商户id private Long merchantDeptId; diff --git a/pjcloud-mqtt/pjcloud-mqtt-api/src/main/java/com/bsd/pjcloud/mqtt/dto/hard/HardCustomerMsg.java b/pjcloud-mqtt/pjcloud-mqtt-api/src/main/java/com/bsd/pjcloud/mqtt/dto/hard/HardCustomerMsg.java new file mode 100644 index 000000000..be90f0c66 --- /dev/null +++ b/pjcloud-mqtt/pjcloud-mqtt-api/src/main/java/com/bsd/pjcloud/mqtt/dto/hard/HardCustomerMsg.java @@ -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; + +} diff --git a/pjcloud-mqtt/pjcloud-mqtt-biz/pom.xml b/pjcloud-mqtt/pjcloud-mqtt-biz/pom.xml index 126dc1db5..1e7b5c842 100644 --- a/pjcloud-mqtt/pjcloud-mqtt-biz/pom.xml +++ b/pjcloud-mqtt/pjcloud-mqtt-biz/pom.xml @@ -79,6 +79,12 @@ org.springframework.boot spring-boot-starter-test + + com.bsd + pjcloud-wallet-api + 5.7.0 + compile + diff --git a/pjcloud-mqtt/pjcloud-mqtt-biz/src/main/java/com/bsd/pjcloud/mqtt/controller/MqttEventController.java b/pjcloud-mqtt/pjcloud-mqtt-biz/src/main/java/com/bsd/pjcloud/mqtt/controller/MqttEventController.java index 7fd01978f..8583672df 100644 --- a/pjcloud-mqtt/pjcloud-mqtt-biz/src/main/java/com/bsd/pjcloud/mqtt/controller/MqttEventController.java +++ b/pjcloud-mqtt/pjcloud-mqtt-biz/src/main/java/com/bsd/pjcloud/mqtt/controller/MqttEventController.java @@ -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 sendDefaultMsg(@RequestBody MqttBaseDto dto) { @@ -100,10 +109,16 @@ public class MqttEventController { */ @Inner @GetMapping("/send-face-change-msg") - public R sendFaceChangeMsg(@RequestParam Long mchDeptId) { - MqttBaseDto dto = new MqttBaseDto<>(); - dto.setMerchantDeptId(mchDeptId); + public R sendFaceChangeMsg(@RequestParam List 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)); } diff --git a/pjcloud-mqtt/pjcloud-mqtt-biz/src/main/java/com/bsd/pjcloud/mqtt/service/MqttEventService.java b/pjcloud-mqtt/pjcloud-mqtt-biz/src/main/java/com/bsd/pjcloud/mqtt/service/MqttEventService.java index 8a121ab8e..2890b3ced 100644 --- a/pjcloud-mqtt/pjcloud-mqtt-biz/src/main/java/com/bsd/pjcloud/mqtt/service/MqttEventService.java +++ b/pjcloud-mqtt/pjcloud-mqtt-biz/src/main/java/com/bsd/pjcloud/mqtt/service/MqttEventService.java @@ -14,8 +14,9 @@ public class MqttEventService { private final MqttService mqttService; + public 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; diff --git a/pjcloud-upms/pjcloud-upms-biz/pom.xml b/pjcloud-upms/pjcloud-upms-biz/pom.xml index e821294fc..974ebddbe 100644 --- a/pjcloud-upms/pjcloud-upms-biz/pom.xml +++ b/pjcloud-upms/pjcloud-upms-biz/pom.xml @@ -204,6 +204,12 @@ com.bsd pjcloud-common-idempotent + + com.bsd + pjcloud-mqtt-api + 5.7.0 + compile + diff --git a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/SysDeptService.java b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/SysDeptService.java index 9632ad48e..6838c954b 100644 --- a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/SysDeptService.java +++ b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/SysDeptService.java @@ -68,6 +68,14 @@ public interface SysDeptService extends IService { */ List listDescendant(Long deptId); + /** + * 获得指定部门的所有父部门 + * + * @param deptId 部门编号 + * @return 父部门列表 + */ + List getParentDeptList(Long deptId); + /** * 获取部门负责人 * @@ -103,6 +111,7 @@ public interface SysDeptService extends IService { /** * 根据部门名查询部门 + * * @param names 部门名 * @return */ diff --git a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/impl/SysDeptServiceImpl.java b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/impl/SysDeptServiceImpl.java index 949954d19..4587fd1ee 100644 --- a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/impl/SysDeptServiceImpl.java +++ b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/impl/SysDeptServiceImpl.java @@ -220,6 +220,24 @@ public class SysDeptServiceImpl extends ServiceImpl impl return resDeptList; } + @Override + public List getParentDeptList(Long deptId) { + LinkedList parentList = new LinkedList<>(); + findParentDeptList(deptId, parentList); + return parentList; + } + + private void findParentDeptList(Long id, LinkedList parentList) { + SysDept currentDept = baseMapper.selectById(id); + if (currentDept != null) { + parentList.add(currentDept); + Long parentId = currentDept.getParentId(); + if (parentId != null) { + findParentDeptList(parentId, parentList); + } + } + } + /** * 获取部门负责人 *

diff --git a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/impl/SysUserFaceServiceImpl.java b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/impl/SysUserFaceServiceImpl.java index 81fbe5847..cfb7fcafc 100644 --- a/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/impl/SysUserFaceServiceImpl.java +++ b/pjcloud-upms/pjcloud-upms-biz/src/main/java/com/bsd/pjcloud/admin/service/impl/SysUserFaceServiceImpl.java @@ -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 list) { if (ObjectUtil.isEmpty(list)) return; + // 发送mq + List faceList = baseMapper.selectList(new LambdaQueryWrapper() + .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 userIds) { + if (ObjectUtil.isEmpty(userIds)) return; + List list = sysUserService.list(new LambdaQueryWrapper().in(SysUser::getUserId, userIds)); + if (ObjectUtil.isEmpty(list)) return; + for (SysUser v : list) { + List parentDeptList = sysDeptService.getParentDeptList(v.getDeptId()); + if (ObjectUtil.isEmpty(parentDeptList)) continue; + List deptIds = parentDeptList.stream().map(SysDept::getDeptId).toList(); + remoteMqttEventService.sendFaceChangeMsg(deptIds, v.getUserId()); + } + } } \ No newline at end of file