From 5a2e90f67c6c45c7c145104be5d3e6bcd45023a8 Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Mon, 14 Apr 2025 20:59:20 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E5=BC=80=E9=97=A8=E3=80=81=E5=85=B3?= =?UTF-8?q?=E9=97=A8=E5=88=A4=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/constant/enums/MerchantTypeEnum.java | 3 +- .../hard/api/dto/HardDoorFlowOpenDto.java | 4 +- .../controller/HardDoorFlowController.java | 5 + .../hard/service/HardDoorFlowService.java | 12 +++ .../hard/service/HardDoorManagerService.java | 5 + .../service/impl/HardDoorFlowServiceImpl.java | 97 +++++++++++++++++-- .../manager/HardDoorManagerServiceImpl.java | 40 +++++--- 7 files changed, 144 insertions(+), 22 deletions(-) diff --git a/pjcloud-common/pjcloud-common-core/src/main/java/com/bsd/pjcloud/common/core/constant/enums/MerchantTypeEnum.java b/pjcloud-common/pjcloud-common-core/src/main/java/com/bsd/pjcloud/common/core/constant/enums/MerchantTypeEnum.java index 81fb03f69..e65f74aad 100644 --- a/pjcloud-common/pjcloud-common-core/src/main/java/com/bsd/pjcloud/common/core/constant/enums/MerchantTypeEnum.java +++ b/pjcloud-common/pjcloud-common-core/src/main/java/com/bsd/pjcloud/common/core/constant/enums/MerchantTypeEnum.java @@ -6,7 +6,8 @@ import lombok.RequiredArgsConstructor; @RequiredArgsConstructor @Getter public enum MerchantTypeEnum { - CANTEEN("1", "食堂"), + OTHER_CANTEEN("0", "其他食堂"), + CANTEEN("1", "自营食堂"), SUPERMARKET("2", "合作商家"), SELF_SUPERMARKET("3", "自营商家"), ; diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/HardDoorFlowOpenDto.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/HardDoorFlowOpenDto.java index 142e84517..84180e1e5 100644 --- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/HardDoorFlowOpenDto.java +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/HardDoorFlowOpenDto.java @@ -18,8 +18,8 @@ public class HardDoorFlowOpenDto { /** * 智能柜编号 */ - @NotEmpty(message = "货柜编号不能为空") - private String cabinetNo; + @NotNull(message = "货柜编号不能为空") + private Integer cabinetNo; /** * 流程类型 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 a69810649..9dc1ec9bb 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 @@ -40,6 +40,11 @@ public class HardDoorFlowController { private final HardDoorFlowService hardDoorFlowService; + /* ************************************* start 远程调用 start ************************************* */ + + + /* ************************************* end 远程调用 end ************************************* */ + /* ************************************* start app start ************************************* */ 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 53b6b78dd..468c7e59c 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 @@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.extension.service.IService; 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.DoorVideoCallbackDto; public interface HardDoorFlowService extends IService { @@ -27,4 +29,14 @@ public interface HardDoorFlowService extends IService { * 上架开门 */ void openDoorRepertory(HardDoorFlowOpenDto dto); + + /** + * 处理开门回调 + */ + void disposeLocakCallback(DoorOpenCallbackDto dto); + + /** + * 处理视频回调 + */ + void disposeVideoCallback(DoorVideoCallbackDto dto); } \ No newline at end of file diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardDoorManagerService.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardDoorManagerService.java index 8dce4677c..f771a0531 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardDoorManagerService.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardDoorManagerService.java @@ -22,6 +22,11 @@ public interface HardDoorManagerService extends IService */ void bind(HardDoorManagerEntity dto); + /** + * 刷新设备信息 + */ + HardDoorManagerEntity refresh(String deviceCode); + /** * 音量修改 */ 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 3380aeb92..3de9156e4 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 @@ -9,12 +9,15 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.bsd.pjcloud.common.core.constant.enums.YesNoEnum; import com.bsd.pjcloud.hard.api.dto.HardDoorFlowOpenDto; import com.bsd.pjcloud.hard.api.entity.HardDoorFlowEntity; +import com.bsd.pjcloud.hard.api.entity.manager.HardDoorManagerEntity; import com.bsd.pjcloud.hard.api.vo.manager.HardDoorManagerVo; 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.vo.door.DoorOpenVo; import com.bsd.pjcloud.thirdparty.vo.door.DoorStatusVo; import lombok.RequiredArgsConstructor; @@ -35,6 +38,8 @@ import java.util.List; @Service public class HardDoorFlowServiceImpl extends ServiceImpl implements HardDoorFlowService { + private static final String TAG = "智能柜流程"; + private final HardDoorManagerService hardDoorManagerService; private final RemoterThirdDoorApiService thirdDoorApiService; @@ -46,18 +51,26 @@ public class HardDoorFlowServiceImpl extends ServiceImpl list = JSONUtil.toList(hardDoorStatus.getCabinetList(), DoorStatusVo.Cabinet.class); + validateCabinetStatus(list, dto.getCabinetNo()); // 请求开门 DoorOpenDto openDto = BeanUtil.toBean(dto, DoorOpenDto.class); - openDto.setOutOpenNo(hardDoorVo.getDeviceCode()); - openDto.setOutOpenNo(dto.getCabinetNo()); - openDto.setDeviceCode(String.valueOf(saveObj.getId())); + openDto.setDeviceCode(hardDoorVo.getDeviceCode()); + openDto.setCabinetNo(dto.getCabinetNo()); + openDto.setOutOpenNo(String.valueOf(saveObj.getId())); openDto.setEventType(Integer.valueOf(dto.getOpenType().getType())); DoorOpenVo openVo = thirdDoorApiService.open(openDto).getData(); - if (ObjectUtil.isEmpty(openVo) || !openVo.isSuccess()) throw new RuntimeException("开门失败"); + if (ObjectUtil.isEmpty(openVo) || !openVo.isSuccess()) throw new RuntimeException(openVo.getMessage()); HardDoorFlowEntity updateObj = HardDoorFlowEntity.builder().id(saveObj.getId()).requestOpenDto(JSONUtil.toJsonStr(openDto)).requestOpenVo(JSONUtil.toJsonStr(openVo)).requestOpenTime(LocalDateTime.now()).build(); // 是否开门成功 updateObj.setIsOpen(YesNoEnum.YES.getCode()); baseMapper.updateById(updateObj); + // 刷新状态 + hardDoorManagerService.refresh(hardDoorVo.getDeviceCode()); } @@ -81,9 +94,9 @@ public class HardDoorFlowServiceImpl extends ServiceImpl list, Integer cabinetNo) { + list.stream().filter(v -> ObjectUtil.equals(v.getCabinetNo(), cabinetNo)).findFirst().ifPresentOrElse( + status -> { + if (ObjectUtil.equals(status.getSaleStatus(), 1)) { + // throw new RuntimeException("该货柜为在售,不能开门"); + } + }, + () -> { + throw new RuntimeException("货柜不存在"); + } + ); + } + private HardDoorFlowServiceImpl getSelf() { return SpringUtil.getBean(getClass()); } diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/manager/HardDoorManagerServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/manager/HardDoorManagerServiceImpl.java index 53a640a9a..1aca69f3b 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/manager/HardDoorManagerServiceImpl.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/manager/HardDoorManagerServiceImpl.java @@ -2,6 +2,7 @@ package com.bsd.pjcloud.hard.service.impl.manager; import cn.hutool.core.util.ObjectUtil; import cn.hutool.json.JSONUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.bsd.pjcloud.common.data.datascope.DataScope; @@ -20,6 +21,7 @@ import com.bsd.pjcloud.thirdparty.vo.door.DoorVolumeVo; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; /** @@ -50,6 +52,7 @@ public class HardDoorManagerServiceImpl extends ServiceImpl() + .eq(HardDoorManagerEntity::getDeviceCode, deviceCode) + .orderByDesc(HardDoorManagerEntity::getCreateTime) + .last("limit 1") + ); + if (ObjectUtil.isEmpty(hardDoorDetail)) throw new RuntimeException("刷新失败,设备不存在"); DoorStatusDto statusDto = new DoorStatusDto(); - statusDto.setDeviceCode(bindVo.getDeviceCode()); + statusDto.setDeviceCode(deviceCode); DoorStatusVo statusVo = thirdDoorApiService.status(statusDto).getData(); if (!statusVo.isSuccess()) { throw new RuntimeException(statusVo.getMessage()); } - // 查询设备详情 - HardDoorManagerEntity hardDoorManagerDetail = baseMapper.selectById(dto.getId()); - // 更新设备信息 HardDoorManagerEntity updateObj = new HardDoorManagerEntity(); - updateObj.setDeviceCode(bindVo.getDeviceCode()); - updateObj.setId(hardDoorManagerDetail.getId()); + updateObj.setId(hardDoorDetail.getId()); updateObj.setPowerStatus(statusVo.getPowerStatus()); updateObj.setNetStatus(statusVo.getNetStatus()); updateObj.setNetStatus(statusVo.getSaleStatus()); @@ -108,16 +129,13 @@ public class HardDoorManagerServiceImpl extends ServiceImpl