diff --git a/db/800pjcloudx_hardware.sql b/db/800pjcloudx_hardware.sql index 82aafe10..2bbe880d 100644 --- a/db/800pjcloudx_hardware.sql +++ b/db/800pjcloudx_hardware.sql @@ -56,7 +56,6 @@ CREATE TABLE hard_door_manager signal_intensity int DEFAULT NULL COMMENT 'sim 信号强度。大于-95 表示信号强度好;-95 到-105 表示信号强度中等;小于-105 表示信号差;', signal_ratio int DEFAULT NULL COMMENT '信噪比,体现信道传输质量的参数。大于 15 表示质量好;15 到 0 表示质量中等;小于等于 0 表示质量差;', signal_time datetime DEFAULT NULL COMMENT 'sim 信号值更新时间。yyyy-MM-dd HH:mm:ss', - cabinet_list text DEFAULT NULL COMMENT '货柜列表JSON', restart_time datetime DEFAULT NULL COMMENT '上次重启时间', system_volume int DEFAULT 0 COMMENT '系统音量', media_volume int DEFAULT 0 COMMENT '媒体音量', diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/manager/HardDoorManagerEntity.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/manager/HardDoorManagerEntity.java index 19ad596b..5e21a10f 100644 --- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/manager/HardDoorManagerEntity.java +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/entity/manager/HardDoorManagerEntity.java @@ -114,12 +114,6 @@ public class HardDoorManagerEntity extends Model { @Schema(description = "sim 信号值更新时间。yyyy-MM-dd HH:mm:ss") private LocalDateTime signalTime; - /** - * 货柜列表JSON - */ - @Schema(description = "货柜列表JSON") - private String cabinetList; - /** * 上次重启时间 */ diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/manager/HardDoorCabinetCodeVo.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/manager/HardDoorCabinetCodeVo.java new file mode 100644 index 00000000..b8a2343d --- /dev/null +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/manager/HardDoorCabinetCodeVo.java @@ -0,0 +1,18 @@ +package com.bsd.pjcloud.hard.api.vo.manager; + +import lombok.Data; + +@Data +public class HardDoorCabinetCodeVo { + + /** + * 智能柜id + */ + private String hardDoorId; + + /** + * 货柜编号 + */ + private String cabinetNo; + +} diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/manager/HardDoorManagerVo.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/manager/HardDoorManagerVo.java index 40565e1a..242a1513 100644 --- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/manager/HardDoorManagerVo.java +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/manager/HardDoorManagerVo.java @@ -1,8 +1,11 @@ package com.bsd.pjcloud.hard.api.vo.manager; +import com.bsd.pjcloud.hard.api.entity.manager.HardDoorCabinetEntity; import com.bsd.pjcloud.hard.api.entity.manager.HardDoorManagerEntity; import lombok.Data; +import java.util.List; + @Data public class HardDoorManagerVo extends HardDoorManagerEntity { /** @@ -12,4 +15,6 @@ public class HardDoorManagerVo extends HardDoorManagerEntity { private String hardType; + private List cabinetList; + } diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/manager/HardDoorManagerController.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/manager/HardDoorManagerController.java index 48f424e1..f5c1a36d 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/manager/HardDoorManagerController.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/manager/HardDoorManagerController.java @@ -13,8 +13,8 @@ import com.bsd.pjcloud.hard.api.dto.manager.HardDoorManagerDto; import com.bsd.pjcloud.hard.api.dto.spu.HardChangeVolume; import com.bsd.pjcloud.hard.api.entity.manager.HardDoorManagerEntity; import com.bsd.pjcloud.hard.api.vo.manager.HardDoorManagerVo; +import com.bsd.pjcloud.hard.service.HardDoorCabinetService; import com.bsd.pjcloud.hard.service.HardDoorManagerService; -import com.bsd.pjcloud.thirdparty.dto.door.DoorVolumeDto; import org.springframework.security.access.prepost.PreAuthorize; import com.bsd.pjcloud.common.excel.annotation.ResponseExcel; import io.swagger.v3.oas.annotations.security.SecurityRequirement; @@ -39,6 +39,7 @@ import java.util.List; public class HardDoorManagerController { private final HardDoorManagerService hardDoorManagerService; + private final HardDoorCabinetService hardDoorCabinetService; @Operation(summary = "绑定设备", description = "绑定设备") @PostMapping("/bind") @@ -48,6 +49,12 @@ public class HardDoorManagerController { return R.ok(); } + @Operation(summary = "刷新智能柜货柜二维码", description = "刷新智能柜货柜二维码") + @GetMapping("/refresh-qr-code") + public R refreshQrCode(@RequestParam Long hardDoorId, @RequestParam Integer cabinetNo) { + return R.ok(hardDoorCabinetService.refreshQrCode(hardDoorId, cabinetNo)); + } + @Operation(summary = "音量修改", description = "音量修改") @PostMapping("/change-volume") public R changeVolume(@Validated @RequestBody HardChangeVolume dto) { diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardDoorCabinetService.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardDoorCabinetService.java index 87c34c1b..aea015e2 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardDoorCabinetService.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardDoorCabinetService.java @@ -2,7 +2,18 @@ package com.bsd.pjcloud.hard.service; import com.baomidou.mybatisplus.extension.service.IService; import com.bsd.pjcloud.hard.api.entity.manager.HardDoorCabinetEntity; +import com.bsd.pjcloud.thirdparty.vo.door.DoorStatusVo; + +import java.util.List; public interface HardDoorCabinetService extends IService { + void saveOrUpdate(Long hardDoorId, List list); + + List getListByHardDoorId(Long hardDoorId); + + /** + * 刷新智能柜货柜二维码 + */ + String refreshQrCode(Long hardDoorId, Integer cabinetNo); } \ No newline at end of file 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 b1259229..6805f11d 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 @@ -50,11 +50,8 @@ public class HardDoorFlowServiceImpl extends ServiceImpl list = JSONUtil.toList(hardDoorStatus.getCabinetList(), DoorStatusVo.Cabinet.class); - validateCabinetStatus(list, dto.getCabinetNo()); + // 校验设备和货柜编号 + hardDoorStatus = hardDoorManagerService.checkDeviceAndCabinet(dto.getHardDoorId(), dto.getCabinetNo()); // 请求开门 DoorOpenDto openDto = BeanUtil.toBean(dto, DoorOpenDto.class); openDto.setDeviceCode(hardDoorVo.getDeviceCode()); @@ -181,22 +178,6 @@ 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/HardDoorCabinetServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/manager/HardDoorCabinetServiceImpl.java index 5da0d4e0..eb45e6ee 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/manager/HardDoorCabinetServiceImpl.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/manager/HardDoorCabinetServiceImpl.java @@ -1,14 +1,112 @@ package com.bsd.pjcloud.hard.service.impl.manager; +import cn.hutool.core.codec.Base64; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.json.JSONUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.bsd.pjcloud.admin.api.feign.RemoteFileService; +import com.bsd.pjcloud.common.core.util.QRCodeImageGenerator; +import com.bsd.pjcloud.common.core.util.R; import com.bsd.pjcloud.hard.api.entity.manager.HardDoorCabinetEntity; +import com.bsd.pjcloud.hard.api.vo.manager.HardDoorCabinetCodeVo; import com.bsd.pjcloud.hard.mapper.manager.HardDoorCabinetMapper; import com.bsd.pjcloud.hard.service.HardDoorCabinetService; +import com.bsd.pjcloud.thirdparty.vo.door.DoorStatusVo; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.mock.web.MockMultipartFile; import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.multipart.MultipartFile; + +import java.io.ByteArrayInputStream; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + /** * 智能柜货柜 */ +@Validated +@Slf4j +@RequiredArgsConstructor @Service public class HardDoorCabinetServiceImpl extends ServiceImpl implements HardDoorCabinetService { + private final RemoteFileService remoteFileService; + + @Override + public void saveOrUpdate(Long hardDoorId, List list) { + List cabinetList = baseMapper.selectList(new LambdaQueryWrapper() + .eq(HardDoorCabinetEntity::getHardDoorId, hardDoorId) + ); + if (ObjectUtil.isEmpty(cabinetList)) { + List addList = new ArrayList<>(); + for (DoorStatusVo.Cabinet cabinet : list) { + HardDoorCabinetEntity entity = new HardDoorCabinetEntity(); + entity.setHardDoorId(hardDoorId); + entity.setCabinetNo(cabinet.getCabinetNo()); + entity.setIsLockOnline(cabinet.getIsLockOnline()); + entity.setLockStatus(cabinet.getLockStatus()); + entity.setDoorStatus(cabinet.getDoorStatus()); + entity.setSaleStatus(cabinet.getSaleStatus()); + addList.add(entity); + } + baseMapper.insert(addList); + return; + } + for (DoorStatusVo.Cabinet cabinet : list) { + cabinetList.stream().filter(i -> ObjectUtil.equals(i.getCabinetNo(), cabinet.getCabinetNo())) + .findFirst() + .ifPresent(i -> { + i.setIsLockOnline(cabinet.getIsLockOnline()); + i.setLockStatus(cabinet.getLockStatus()); + i.setDoorStatus(cabinet.getDoorStatus()); + i.setSaleStatus(cabinet.getSaleStatus()); + baseMapper.updateById(i); + }); + } + } + + @Override + public List getListByHardDoorId(Long hardDoorId) { + return baseMapper.selectList(new LambdaQueryWrapper() + .eq(HardDoorCabinetEntity::getHardDoorId, hardDoorId) + ); + } + + /** + * 刷新智能柜货柜二维码 + */ + @Override + public String refreshQrCode(Long hardDoorId, Integer cabinetNo) { + // 查找货柜 + HardDoorCabinetEntity cabinetDetail = baseMapper.selectOne(new LambdaQueryWrapper() + .eq(HardDoorCabinetEntity::getHardDoorId, hardDoorId) + .eq(HardDoorCabinetEntity::getCabinetNo, cabinetNo) + ); + if (ObjectUtil.isEmpty(cabinetDetail)) throw new RuntimeException("货柜不存在"); + HardDoorCabinetCodeVo cabinetCodeVo = new HardDoorCabinetCodeVo(); + cabinetCodeVo.setHardDoorId(String.valueOf(hardDoorId)); + cabinetCodeVo.setCabinetNo(String.valueOf(cabinetNo)); + // 生成二维码 + String coeContent = Base64.encode(JSONUtil.toJsonStr(cabinetCodeVo)); + try { + byte[] bytes = QRCodeImageGenerator.generateQrCodeImage(coeContent, 300); + MultipartFile multipartFile = new MockMultipartFile("file", hardDoorId + "-" + System.currentTimeMillis() + ".png", "image/png", new ByteArrayInputStream(bytes)); + R upload = remoteFileService.innerUpload(multipartFile, null, null, null); + Map data = (Map) upload.getData(); + String url = (String) data.get("url"); + // 更新 + HardDoorCabinetEntity updateObj = new HardDoorCabinetEntity(); + updateObj.setId(cabinetDetail.getId()); + updateObj.setQrCode(url); + baseMapper.updateById(updateObj); + return url; + } catch (Exception e) { + log.error("refreshQrCode刷新智能柜货柜二维码,hardDoorId:{},cabinetNo:{}", hardDoorId, cabinetNo, e); + throw new RuntimeException("刷新二维码失败"); + } + } } \ No newline at end of file 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 6d94a43d..54494f08 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 @@ -1,16 +1,17 @@ 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; import com.bsd.pjcloud.hard.api.dto.manager.HardDoorManagerDto; import com.bsd.pjcloud.hard.api.dto.spu.HardChangeVolume; +import com.bsd.pjcloud.hard.api.entity.manager.HardDoorCabinetEntity; import com.bsd.pjcloud.hard.api.entity.manager.HardDoorManagerEntity; import com.bsd.pjcloud.hard.api.vo.manager.HardDoorManagerVo; import com.bsd.pjcloud.hard.mapper.manager.HardDoorManagerMapper; +import com.bsd.pjcloud.hard.service.HardDoorCabinetService; import com.bsd.pjcloud.hard.service.HardDoorManagerService; import com.bsd.pjcloud.thirdparty.api.feign.RemoterThirdDoorApiService; import com.bsd.pjcloud.thirdparty.dto.door.*; @@ -35,6 +36,8 @@ import java.util.List; @Service public class HardDoorManagerServiceImpl extends ServiceImpl implements HardDoorManagerService { + private final HardDoorCabinetService hardDoorCabinetService; + private final RemoterThirdDoorApiService thirdDoorApiService; @Override @@ -47,7 +50,14 @@ public class HardDoorManagerServiceImpl extends ServiceImpl cabinetList = hardDoorCabinetService.getListByHardDoorId(hardDoor.getId()); + if (ObjectUtil.isNotEmpty(cabinetList)) { + hardDoor.setCabinetList(cabinetList); + } + } + return hardDoor; } /** @@ -131,10 +141,8 @@ public class HardDoorManagerServiceImpl extends ServiceImpl cabinetList = JSONUtil.toList(doorDetail.getCabinetList(), DoorStatusVo.Cabinet.class); + List cabinetList = hardDoorCabinetService.getListByHardDoorId(hardDoorId); if (ObjectUtil.isEmpty(cabinetList)) throw new RuntimeException("货柜不存在"); if (ObjectUtil.isEmpty(cabinetList.stream().filter(i -> ObjectUtil.equals(i.getCabinetNo(), cabinetNo)).findFirst().orElse(null))) { throw new RuntimeException("货柜不存在"); diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/manager/HardDoorManagerMapper.xml b/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/manager/HardDoorManagerMapper.xml index 8d250e41..45745f45 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/manager/HardDoorManagerMapper.xml +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/resources/mapper/manager/HardDoorManagerMapper.xml @@ -18,7 +18,6 @@ - @@ -46,7 +45,6 @@ a.signal_intensity, a.signal_ratio, a.signal_time, - a.cabinet_list, a.restart_time, a.system_volume, a.media_volume,