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} + +