From cbfb174a12252d376d1dbb1581c2a49885a338ae Mon Sep 17 00:00:00 2001
From: dzc <2388224167@qq.com>
Date: Tue, 15 Apr 2025 16:57:48 +0800
Subject: [PATCH] =?UTF-8?q?feat:=E4=BA=BA=E5=91=98=E8=A7=92=E8=89=B2?=
=?UTF-8?q?=E6=90=9C=E7=B4=A2?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pjcloud-hardware/pjcloud-hardware-api/pom.xml | 6 +
.../pjcloud/hard/api/dto/HardAuthAppDto.java | 7 ++
.../hard/api/feign/RemoteHardDoorService.java | 41 +++++++
...mework.cloud.openfeign.FeignClient.imports | 1 +
.../hard/controller/HardAuthController.java | 14 ++-
.../controller/HardDoorFlowController.java | 32 ++++++
.../pjcloud/hard/service/HardAuthService.java | 6 +
.../hard/service/HardDoorFlowService.java | 7 ++
.../service/impl/HardAuthServiceImpl.java | 9 ++
.../service/impl/HardDoorFlowServiceImpl.java | 14 ++-
.../impl/spu/HardSpuJoinServiceImpl.java | 1 +
.../service/impl/spu/HardSpuServiceImpl.java | 22 +++-
.../dto/door/DoorStatusCallbackDto.java | 91 +++++++++++++++
.../vo/door/DoorOpenCallbackVo.java | 7 --
.../vo/door/DoorVideoCallbackVo.java | 7 --
.../door/ThirdDoorApiController.java | 29 +++--
.../service/ThirdDoorApiService.java | 8 +-
.../impl/door/ThirdDoorApiServiceImpl.java | 104 ++++++++++++++++--
.../main/resources/mapper/SysUserMapper.xml | 7 ++
19 files changed, 373 insertions(+), 40 deletions(-)
create mode 100644 pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/HardAuthAppDto.java
create mode 100644 pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/feign/RemoteHardDoorService.java
create mode 100644 pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/dto/door/DoorStatusCallbackDto.java
delete mode 100644 pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/door/DoorOpenCallbackVo.java
delete mode 100644 pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/door/DoorVideoCallbackVo.java
diff --git a/pjcloud-hardware/pjcloud-hardware-api/pom.xml b/pjcloud-hardware/pjcloud-hardware-api/pom.xml
index e83d2502..f52a0899 100644
--- a/pjcloud-hardware/pjcloud-hardware-api/pom.xml
+++ b/pjcloud-hardware/pjcloud-hardware-api/pom.xml
@@ -52,5 +52,11 @@
org.apache.commons
commons-lang3
+
+ com.bsd
+ pjcloud-thirdparty-api
+ 5.7.0
+ compile
+
diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/HardAuthAppDto.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/HardAuthAppDto.java
new file mode 100644
index 00000000..570ad93d
--- /dev/null
+++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/HardAuthAppDto.java
@@ -0,0 +1,7 @@
+package com.bsd.pjcloud.hard.api.dto;
+
+import lombok.Data;
+
+@Data
+public class HardAuthAppDto {
+}
diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/feign/RemoteHardDoorService.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/feign/RemoteHardDoorService.java
new file mode 100644
index 00000000..8292b077
--- /dev/null
+++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/feign/RemoteHardDoorService.java
@@ -0,0 +1,41 @@
+package com.bsd.pjcloud.hard.api.feign;
+
+
+import com.bsd.pjcloud.common.core.constant.ServiceNameConstants;
+import com.bsd.pjcloud.common.core.util.R;
+import com.bsd.pjcloud.common.feign.annotation.NoToken;
+import com.bsd.pjcloud.hard.api.entity.order.HardOrderEntity;
+import com.bsd.pjcloud.thirdparty.dto.door.DoorOpenCallbackDto;
+import com.bsd.pjcloud.thirdparty.dto.door.DoorStatusCallbackDto;
+import com.bsd.pjcloud.thirdparty.dto.door.DoorStatusDto;
+import com.bsd.pjcloud.thirdparty.dto.door.DoorVideoCallbackDto;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+import java.util.List;
+
+@FeignClient(contextId = "remoteHardDoorService", value = ServiceNameConstants.HARDWARE_SERVICE)
+public interface RemoteHardDoorService {
+
+ /**
+ * 处理柜子开门回调
+ */
+ @NoToken
+ @PostMapping("/hard-door-flow/dispose-locak-callback")
+ R> disposeLocakCallback(@RequestBody DoorOpenCallbackDto dto);
+
+ /**
+ * 处理柜子视频回调
+ */
+ @NoToken
+ @PostMapping("/hard-door-flow/dispose-video-callback")
+ R> disposeVideoCallback(@RequestBody DoorVideoCallbackDto dto);
+
+ /**
+ * 处理柜子视频回调
+ */
+ @NoToken
+ @PostMapping("/hard-door-flow/dispose-status-callback")
+ R> disposeStatusCallback(@RequestBody DoorStatusCallbackDto dto);
+}
diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/resources/META-INF/spring/org.springframework.cloud.openfeign.FeignClient.imports b/pjcloud-hardware/pjcloud-hardware-api/src/main/resources/META-INF/spring/org.springframework.cloud.openfeign.FeignClient.imports
index 66471f54..910612a7 100644
--- a/pjcloud-hardware/pjcloud-hardware-api/src/main/resources/META-INF/spring/org.springframework.cloud.openfeign.FeignClient.imports
+++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/resources/META-INF/spring/org.springframework.cloud.openfeign.FeignClient.imports
@@ -1,2 +1,3 @@
+com.bsd.pjcloud.hard.api.feign.RemoteHardDoorService
com.bsd.pjcloud.hard.api.feign.RemoteHardOrderService
com.bsd.pjcloud.hard.api.feign.RemoteHardThirdSelfZyService
\ No newline at end of file
diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/HardAuthController.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/HardAuthController.java
index e136e13a..fd10e637 100644
--- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/HardAuthController.java
+++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/HardAuthController.java
@@ -2,12 +2,12 @@ package com.bsd.pjcloud.hard.controller;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.collection.CollUtil;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bsd.pjcloud.common.core.util.R;
import com.bsd.pjcloud.common.data.datascope.DataScope;
import com.bsd.pjcloud.common.log.annotation.SysLog;
+import com.bsd.pjcloud.hard.api.dto.HardAuthAppDto;
import com.bsd.pjcloud.hard.api.dto.HardAuthDto;
import com.bsd.pjcloud.hard.api.entity.HardAuthEntity;
import com.bsd.pjcloud.hard.api.vo.HardAuthVo;
@@ -23,7 +23,6 @@ import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import java.util.List;
-import java.util.Objects;
/**
* 硬件授权
@@ -37,6 +36,17 @@ public class HardAuthController {
private final HardAuthService hardAuthService;
+ /* ************************************* start app start ************************************* */
+
+ @Operation(summary = "app智能柜授权", description = "app智能柜授权")
+ @PostMapping("/app/auth-hard-door")
+ @PreAuthorize("@pms.hasPermission('hard_hardAuth_view')")
+ public R appAuthHardDoor(@RequestBody HardAuthAppDto dto) {
+ return R.ok(hardAuthService.appAuthHardDoor(dto));
+ }
+
+ /* ************************************* end app end ************************************* */
+
@Operation(summary = "分页查询", description = "分页查询")
@GetMapping("/page-join")
@PreAuthorize("@pms.hasPermission('hard_hardAuth_view')")
diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/HardDoorFlowController.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/HardDoorFlowController.java
index 9dc1ec9b..5a31e8f4 100644
--- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/HardDoorFlowController.java
+++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/HardDoorFlowController.java
@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bsd.pjcloud.common.core.util.R;
import com.bsd.pjcloud.common.log.annotation.SysLog;
+import com.bsd.pjcloud.common.security.annotation.Inner;
import com.bsd.pjcloud.common.security.service.PjcloudUser;
import com.bsd.pjcloud.common.security.util.SecurityUtils;
import com.bsd.pjcloud.hard.api.constant.HardDoorFlowEnum;
@@ -14,6 +15,9 @@ import com.bsd.pjcloud.hard.api.constant.HardDoorOpenTypeEnum;
import com.bsd.pjcloud.hard.api.dto.HardDoorFlowOpenDto;
import com.bsd.pjcloud.hard.api.entity.HardDoorFlowEntity;
import com.bsd.pjcloud.hard.service.HardDoorFlowService;
+import com.bsd.pjcloud.thirdparty.dto.door.DoorOpenCallbackDto;
+import com.bsd.pjcloud.thirdparty.dto.door.DoorStatusCallbackDto;
+import com.bsd.pjcloud.thirdparty.dto.door.DoorVideoCallbackDto;
import org.springframework.security.access.prepost.PreAuthorize;
import com.bsd.pjcloud.common.excel.annotation.ResponseExcel;
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
@@ -42,7 +46,35 @@ public class HardDoorFlowController {
/* ************************************* start 远程调用 start ************************************* */
+ /**
+ * 处理柜子开门回调
+ */
+ @Inner()
+ @PostMapping("/dispose-locak-callback")
+ public R disposeLocakCallback(@RequestBody DoorOpenCallbackDto dto) {
+ hardDoorFlowService.disposeLocakCallback(dto);
+ return R.ok();
+ }
+ /**
+ * 处理柜子视频回调
+ */
+ @Inner()
+ @PostMapping("/dispose-video-callback")
+ public R disposeVideoCallback(@RequestBody DoorVideoCallbackDto dto) {
+ hardDoorFlowService.disposeVideoCallback(dto);
+ return R.ok();
+ }
+
+ /**
+ * 处理柜子状态回调
+ */
+ @Inner()
+ @PostMapping("/dispose-status-callback")
+ public R disposeStatusCallback(@RequestBody DoorStatusCallbackDto dto) {
+ hardDoorFlowService.disposeStatusCallback(dto);
+ return R.ok();
+ }
/* ************************************* end 远程调用 end ************************************* */
/* ************************************* start app start ************************************* */
diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardAuthService.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardAuthService.java
index 4285a585..2aecdcc1 100644
--- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardAuthService.java
+++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardAuthService.java
@@ -3,6 +3,7 @@ package com.bsd.pjcloud.hard.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.bsd.pjcloud.common.data.datascope.DataScope;
+import com.bsd.pjcloud.hard.api.dto.HardAuthAppDto;
import com.bsd.pjcloud.hard.api.dto.HardAuthDto;
import com.bsd.pjcloud.hard.api.entity.HardAuthEntity;
import com.bsd.pjcloud.hard.api.vo.HardAuthVo;
@@ -10,4 +11,9 @@ import com.bsd.pjcloud.hard.api.vo.HardAuthVo;
public interface HardAuthService extends IService {
Page scopePageJoin(Page page, HardAuthDto dto, DataScope dataScope);
+
+ /**
+ * app智能柜授权
+ */
+ Long appAuthHardDoor(HardAuthAppDto dto);
}
\ No newline at end of file
diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardDoorFlowService.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardDoorFlowService.java
index 468c7e59..4d83685e 100644
--- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardDoorFlowService.java
+++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardDoorFlowService.java
@@ -5,6 +5,8 @@ import com.bsd.pjcloud.hard.api.dto.HardDoorFlowOpenDto;
import com.bsd.pjcloud.hard.api.entity.HardDoorFlowEntity;
import com.bsd.pjcloud.hard.api.vo.manager.HardDoorManagerVo;
import com.bsd.pjcloud.thirdparty.dto.door.DoorOpenCallbackDto;
+import com.bsd.pjcloud.thirdparty.dto.door.DoorStatusCallbackDto;
+import com.bsd.pjcloud.thirdparty.dto.door.DoorStatusDto;
import com.bsd.pjcloud.thirdparty.dto.door.DoorVideoCallbackDto;
public interface HardDoorFlowService extends IService {
@@ -39,4 +41,9 @@ public interface HardDoorFlowService extends IService {
* 处理视频回调
*/
void disposeVideoCallback(DoorVideoCallbackDto dto);
+
+ /**
+ * 处理柜子状态回调
+ */
+ void disposeStatusCallback(DoorStatusCallbackDto dto);
}
\ No newline at end of file
diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardAuthServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardAuthServiceImpl.java
index 434d0b8a..5615bee7 100644
--- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardAuthServiceImpl.java
+++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardAuthServiceImpl.java
@@ -9,6 +9,7 @@ import com.bsd.pjcloud.admin.api.vo.UserVO;
import com.bsd.pjcloud.common.core.util.CollectionUtils;
import com.bsd.pjcloud.common.core.util.R;
import com.bsd.pjcloud.common.data.datascope.DataScope;
+import com.bsd.pjcloud.hard.api.dto.HardAuthAppDto;
import com.bsd.pjcloud.hard.api.dto.HardAuthDto;
import com.bsd.pjcloud.hard.api.dto.manager.HardManagerDto;
import com.bsd.pjcloud.hard.api.entity.HardAuthEntity;
@@ -46,6 +47,14 @@ public class HardAuthServiceImpl extends ServiceImpl list, HardAuthDto dto) {
if (ObjectUtil.isEmpty(list)) return;
// 设备
diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardDoorFlowServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardDoorFlowServiceImpl.java
index 3de9156e..f09205b9 100644
--- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardDoorFlowServiceImpl.java
+++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/HardDoorFlowServiceImpl.java
@@ -15,9 +15,7 @@ import com.bsd.pjcloud.hard.mapper.HardDoorFlowMapper;
import com.bsd.pjcloud.hard.service.HardDoorFlowService;
import com.bsd.pjcloud.hard.service.HardDoorManagerService;
import com.bsd.pjcloud.thirdparty.api.feign.RemoterThirdDoorApiService;
-import com.bsd.pjcloud.thirdparty.dto.door.DoorOpenCallbackDto;
-import com.bsd.pjcloud.thirdparty.dto.door.DoorOpenDto;
-import com.bsd.pjcloud.thirdparty.dto.door.DoorVideoCallbackDto;
+import com.bsd.pjcloud.thirdparty.dto.door.*;
import com.bsd.pjcloud.thirdparty.vo.door.DoorOpenVo;
import com.bsd.pjcloud.thirdparty.vo.door.DoorStatusVo;
import lombok.RequiredArgsConstructor;
@@ -172,6 +170,16 @@ public class HardDoorFlowServiceImpl extends ServiceImpl joinList = BeanUtils.toBean(list, HardSpuJoinVo.class);
diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/spu/HardSpuServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/spu/HardSpuServiceImpl.java
index 2e4c8f0a..434cecf0 100644
--- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/spu/HardSpuServiceImpl.java
+++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/spu/HardSpuServiceImpl.java
@@ -153,8 +153,16 @@ public class HardSpuServiceImpl extends ServiceImpl()
+ .eq(HardSpuJoinEntity::getHardDoorNumber, spuJoinDetail.getHardDoorNumber())
+ .eq(HardSpuJoinEntity::getSpuId, spuDetail.getId())
+ );
+ if (doorCount > 0) throw new RuntimeException("该层已有相同商品");
LambdaUpdateWrapper updateObj = new LambdaUpdateWrapper()
- .set(HardSpuJoinEntity::getSpuId, dto.getHardSpuId())
+ .set(HardSpuJoinEntity::getSpuId, spuDetail.getId())
.eq(HardSpuJoinEntity::getId, dto.getId());
hardSpuJoinService.update(updateObj);
}
@@ -283,6 +291,18 @@ public class HardSpuServiceImpl extends ServiceImpl cabinetList;
+
+ @Data
+ public static class Cabinet {
+
+ /**
+ * 货柜号(1,2)
+ */
+ private Integer cabinetNo;
+
+ /**
+ * 锁在线1:在线;2:离线
+ */
+ private String isLockOnline;
+
+ /**
+ * 锁状态1:锁关;2:锁开
+ */
+ private Integer lockStatus;
+
+ /**
+ * 门状态1:门关;2:门开
+ */
+ private Integer doorStatus;
+
+ /**
+ * 货柜售卖状态1:在售;2:停售
+ */
+ private Integer saleStatus;
+
+ }
+}
diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/door/DoorOpenCallbackVo.java b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/door/DoorOpenCallbackVo.java
deleted file mode 100644
index 4e223094..00000000
--- a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/door/DoorOpenCallbackVo.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package com.bsd.pjcloud.thirdparty.vo.door;
-
-import lombok.Data;
-
-@Data
-public class DoorOpenCallbackVo {
-}
diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/door/DoorVideoCallbackVo.java b/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/door/DoorVideoCallbackVo.java
deleted file mode 100644
index d51a92f2..00000000
--- a/pjcloud-thirdparty/pjcloud-thirdparty-api/src/main/java/com/bsd/pjcloud/thirdparty/vo/door/DoorVideoCallbackVo.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package com.bsd.pjcloud.thirdparty.vo.door;
-
-import lombok.Data;
-
-@Data
-public class DoorVideoCallbackVo {
-}
diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/door/ThirdDoorApiController.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/door/ThirdDoorApiController.java
index ffc54f24..792808d0 100644
--- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/door/ThirdDoorApiController.java
+++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/controller/door/ThirdDoorApiController.java
@@ -1,6 +1,7 @@
package com.bsd.pjcloud.thirdparty.controller.door;
+import cn.hutool.json.JSONUtil;
import com.bsd.pjcloud.common.core.util.R;
import com.bsd.pjcloud.common.security.annotation.Inner;
import com.bsd.pjcloud.thirdparty.dto.door.*;
@@ -10,11 +11,16 @@ import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
+import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.http.server.ServletServerHttpRequest;
+import org.springframework.web.bind.annotation.*;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.nio.charset.StandardCharsets;
+import java.util.Map;
@RestController
@RequiredArgsConstructor
@@ -84,22 +90,25 @@ public class ThirdDoorApiController {
@Inner(value = false)
@Operation(summary = "门锁开关通知回调")
@PostMapping("/callback/open")
- public R callbackOpen(@RequestBody DoorOpenCallbackDto dto) {
- return R.ok(thirdDoorApiService.callbackOpen(dto));
+ public void callbackOpen(HttpEntity httpEntity, @RequestHeader Map headers) {
+ String body = httpEntity.getBody();
+ thirdDoorApiService.callbackOpen(body, headers);
}
@Inner(value = false)
@Operation(summary = "视频地址通知回调")
@PostMapping("/callback/video")
- public R callbackVideo(@RequestBody DoorVideoCallbackDto dto) {
- return R.ok(thirdDoorApiService.callbackVideo(dto));
+ public void callbackVideo(HttpEntity httpEntity, @RequestHeader Map headers) {
+ String body = httpEntity.getBody();
+ thirdDoorApiService.callbackVideo(body, headers);
}
@Inner(value = false)
@Operation(summary = "设备状态通知回调")
@PostMapping("/callback/status")
- public R callbackStatus(@RequestBody DoorStatusDto dto) {
- return R.ok(thirdDoorApiService.callbackStatus(dto));
+ public void callbackStatus(HttpEntity httpEntity, @RequestHeader Map headers) {
+ String body = httpEntity.getBody();
+ thirdDoorApiService.callbackStatus(body, headers);
}
diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdDoorApiService.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdDoorApiService.java
index f68b4d06..70c23b62 100644
--- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdDoorApiService.java
+++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/ThirdDoorApiService.java
@@ -4,6 +4,8 @@ package com.bsd.pjcloud.thirdparty.service;
import com.bsd.pjcloud.thirdparty.dto.door.*;
import com.bsd.pjcloud.thirdparty.vo.door.*;
+import java.util.Map;
+
public interface ThirdDoorApiService {
/**
@@ -44,15 +46,15 @@ public interface ThirdDoorApiService {
/**
* 门锁开关通知回调
*/
- DoorOpenCallbackVo callbackOpen(DoorOpenCallbackDto dto);
+ void callbackOpen(String json, Map headers);
/**
* 视频地址通知回调
*/
- DoorVideoCallbackVo callbackVideo(DoorVideoCallbackDto dto);
+ void callbackVideo(String json, Map headers);
/**
* 设备状态通知回调
*/
- DoorStatusVo callbackStatus(DoorStatusDto dto);
+ void callbackStatus(String json, Map headers);
}
diff --git a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/door/ThirdDoorApiServiceImpl.java b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/door/ThirdDoorApiServiceImpl.java
index 6874d546..a7bdf34d 100644
--- a/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/door/ThirdDoorApiServiceImpl.java
+++ b/pjcloud-thirdparty/pjcloud-thirdparty-biz/src/main/java/com/bsd/pjcloud/thirdparty/service/impl/door/ThirdDoorApiServiceImpl.java
@@ -3,6 +3,7 @@ package com.bsd.pjcloud.thirdparty.service.impl.door;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.json.JSONUtil;
+import com.bsd.pjcloud.hard.api.feign.RemoteHardDoorService;
import com.bsd.pjcloud.thirdparty.config.DoorConfig;
import com.bsd.pjcloud.thirdparty.dto.door.*;
import com.bsd.pjcloud.thirdparty.entity.door.ThirdDoorLogEntity;
@@ -31,6 +32,8 @@ public class ThirdDoorApiServiceImpl implements ThirdDoorApiService {
private final ThirdDoorLogService doorLogService;
+ private final RemoteHardDoorService remoteHardDoorService;
+
/**
* 设备注册
*/
@@ -275,25 +278,81 @@ public class ThirdDoorApiServiceImpl implements ThirdDoorApiService {
* 门锁开关通知回调
*/
@Override
- public DoorOpenCallbackVo callbackOpen(DoorOpenCallbackDto dto) {
- return null;
+ public void callbackOpen(String json, Map headers) {
+ DoorOpenCallbackDto dto = JSONUtil.toBean(json, DoorOpenCallbackDto.class);
+ boolean isSign = apiParseSign(json, headers);
+ if (!isSign) {
+ log.error("|{}| callbackOpen 签名错误", TAG);
+ return;
+ }
+ long startTime = System.currentTimeMillis();
+ DoorApi.Api api = DoorApi.OPEN_CALLBACK.setBaseUrl(doorConfig.getBaseUrl());
+ ThirdDoorLogEntity logEntity = api.getInitLogEntity();
+ logEntity.setReq(json);
+ try {
+ remoteHardDoorService.disposeLocakCallback(dto);
+ } catch (Exception e) {
+ String error = String.format("|%s||callbackOpen|意外的错误error|%s|stack|%s|", TAG, e.getMessage(), Arrays.toString(e.getStackTrace()));
+ log.error(error);
+ logEntity.setError(error);
+ } finally {
+ logEntity.setTimeConsuming(Long.toString(System.currentTimeMillis() - startTime));
+ doorLogService.save(logEntity);
+ }
}
/**
* 视频地址通知回调
*/
@Override
- public DoorVideoCallbackVo callbackVideo(DoorVideoCallbackDto dto) {
- return null;
+ public void callbackVideo(String json, Map headers) {
+ DoorVideoCallbackDto dto = JSONUtil.toBean(json, DoorVideoCallbackDto.class);
+ boolean isSign = apiParseSign(json, headers);
+ if (!isSign) {
+ log.error("|{}| callbackVideo 签名错误", TAG);
+ return;
+ }
+ long startTime = System.currentTimeMillis();
+ DoorApi.Api api = DoorApi.OPEN_CALLBACK.setBaseUrl(doorConfig.getBaseUrl());
+ ThirdDoorLogEntity logEntity = api.getInitLogEntity();
+ logEntity.setReq(json);
+ try {
+ remoteHardDoorService.disposeVideoCallback(dto);
+ } catch (Exception e) {
+ String error = String.format("|%s||callbackVideo|意外的错误error|%s|stack|%s|", TAG, e.getMessage(), Arrays.toString(e.getStackTrace()));
+ log.error(error);
+ logEntity.setError(error);
+ } finally {
+ logEntity.setTimeConsuming(Long.toString(System.currentTimeMillis() - startTime));
+ doorLogService.save(logEntity);
+ }
}
/**
* 设备状态通知回调
*/
@Override
- public DoorStatusVo callbackStatus(DoorStatusDto dto) {
-
- return null;
+ public void callbackStatus(String json, Map headers) {
+ DoorStatusCallbackDto dto = JSONUtil.toBean(json, DoorStatusCallbackDto.class);
+ boolean isSign = apiParseSign(json, headers);
+ if (!isSign) {
+ log.error("|{}| callbackStatus 签名错误", TAG);
+ return;
+ }
+ long startTime = System.currentTimeMillis();
+ DoorApi.Api api = DoorApi.OPEN_CALLBACK.setBaseUrl(doorConfig.getBaseUrl());
+ ThirdDoorLogEntity logEntity = api.getInitLogEntity();
+ logEntity.setReq(json);
+ try {
+ remoteHardDoorService.disposeStatusCallback(dto);
+ } catch (Exception e) {
+ String error = String.format("|%s||callbackStatus|意外的错误error|%s|stack|%s|", TAG, e.getMessage(), Arrays.toString(e.getStackTrace()));
+ log.error(error);
+ logEntity.setError(error);
+ } finally {
+ logEntity.setTimeConsuming(Long.toString(System.currentTimeMillis() - startTime));
+ doorLogService.save(logEntity);
+ }
}
/**
@@ -319,4 +378,35 @@ public class ThirdDoorApiServiceImpl implements ThirdDoorApiService {
header.put("sign", List.of(map.get("sign")));
return header;
}
+
+ /**
+ * 接口解签
+ */
+ private boolean apiParseSign(String json, Map headers) {
+ if (ObjectUtil.isEmpty(headers)) {
+ log.error("|{}|apiParseSign 接口解签错误headers为空dto|{}|headers|{}|", TAG, json, JSONUtil.toJsonStr(headers));
+ return false;
+ }
+ String appid = headers.get("Appid");
+ String noncestr = headers.get("Noncestr");
+ String timestamp = headers.get("Timestamp");
+ String sign = headers.get("Sign");
+ if (ObjectUtil.notEqual(doorConfig.getAppId(), appid)) {
+ log.error("|{}|apiParseSign 接口解签错误appId错误dto|{}|headers|{}|", TAG, json, JSONUtil.toJsonStr(headers));
+ return false;
+ }
+ // 计算正确的sign
+ String successSign = "";
+ successSign += doorConfig.getAppId() + "&";
+ successSign += doorConfig.getAppKey() + "&";
+ successSign += noncestr + "&";
+ successSign += timestamp + "&";
+ successSign += json;
+ String successSignMd5 = DigestUtils.md5Hex(successSign);
+ if (ObjectUtil.notEqual(successSignMd5.toLowerCase(), sign.toLowerCase())) {
+ log.error("|{}|apiParseSign 接口解签错误sign错误dto|{}|headers|{}|", TAG, json, JSONUtil.toJsonStr(headers));
+ return false;
+ }
+ return true;
+ }
}
diff --git a/pjcloud-upms/pjcloud-upms-biz/src/main/resources/mapper/SysUserMapper.xml b/pjcloud-upms/pjcloud-upms-biz/src/main/resources/mapper/SysUserMapper.xml
index 22b807bd..201249c4 100644
--- a/pjcloud-upms/pjcloud-upms-biz/src/main/resources/mapper/SysUserMapper.xml
+++ b/pjcloud-upms/pjcloud-upms-biz/src/main/resources/mapper/SysUserMapper.xml
@@ -174,6 +174,7 @@
FROM
sys_user u
LEFT JOIN sys_dept d ON d.dept_id = u.dept_id
+ LEFT JOIN sys_user_role urole ON urole.user_id = u.user_id
u.del_flag = '0'
@@ -193,6 +194,12 @@
AND u.dept_id = #{query.deptId}
+
+ and urole.role_id IN
+
+ #{v}
+
+