feat:智能柜货柜生成

This commit is contained in:
dzc committed 2025-04-15 18:32:03 +08:00
1 parent e962da405b
commit b2d7db1f52
13 files changed
+276 -20

No files matched your search

+26
View File
@@ -71,6 +71,32 @@ CREATE TABLE hard_door_manager
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_general_ci COMMENT ='柜子设备管理';
-- ----------------------------
-- Table structure for hard_door_cabinet
-- ----------------------------
DROP TABLE IF EXISTS `hard_door_cabinet`;
CREATE TABLE hard_door_cabinet
(
id bigint NOT NULL COMMENT '编号',
hard_door_id bigint NOT NULL COMMENT '智能柜编号',
cabinet_no int NOT NULL COMMENT '货柜编号(1,2)',
is_lock_online varchar(16) NOT NULL COMMENT '锁在线1:在线;2:离线;',
lock_status int NOT NULL COMMENT '锁状态1:开锁;2:关锁;',
door_status int NOT NULL COMMENT '门状态1:门关;2:门开',
sale_status int NOT NULL COMMENT '货柜售卖状态1:在售;2:停售',
qr_code varchar(256) DEFAULT NULL COMMENT '二维码',
# 其他字段
create_by varchar(64) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建人',
create_time datetime DEFAULT NULL COMMENT '创建时间',
update_by varchar(64) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '修改人',
update_time datetime DEFAULT NULL COMMENT '修改时间',
del_flag char(1) COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '删除标记',
tenant_id bigint DEFAULT NULL COMMENT '租户ID',
PRIMARY KEY (id)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_general_ci COMMENT ='智能柜货柜';
-- ----------------------------
-- Table structure for hard_door_flow
-- ----------------------------
@@ -0,0 +1,27 @@
package com.bsd.pjcloud.hard.api.constant;
import cn.hutool.core.util.ObjectUtil;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
/**
* 硬件授权类型
*/
@AllArgsConstructor
@Getter
public enum HardAuthTypeEnum {
HARD_DDOR_AUTH("10", "智能柜授权"),
;
private final String type;
private final String description;
public static HardAuthTypeEnum valueOfByType(String type) {
if (ObjectUtil.isEmpty(type)) return null;
return Arrays.stream(values()).filter(v -> ObjectUtil.equals(type, v.getType())).findFirst().get();
}
}
@@ -1,6 +1,7 @@
package com.bsd.pjcloud.hard.api.dto;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
@Data
@@ -14,9 +15,15 @@ public class HardAuthAppDto {
/**
* 智能柜设备id
*/
@NotEmpty(message = "智能柜设备id不能为空")
@NotNull(message = "智能柜设备id不能为空")
private Long doorHardId;
/**
* 货柜编号
*/
@NotNull(message = "货柜编号不能为空")
private Integer cabinetNo;
/**
* 是否授权
*/
@@ -0,0 +1,115 @@
package com.bsd.pjcloud.hard.api.entity.manager;
import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import com.bsd.pjcloud.common.core.util.TenantTable;
import java.time.LocalDateTime;
/**
* 智能柜货柜
*
* @author dzc
* @date 2025-04-15 18:28:46
*/
@Data
@TenantTable
@TableName("hard_door_cabinet")
@EqualsAndHashCode(callSuper = true)
@Schema(description = "智能柜货柜")
public class HardDoorCabinetEntity extends Model<HardDoorCabinetEntity> {
/**
* 编号
*/
@TableId(type = IdType.ASSIGN_ID)
@Schema(description="编号")
private Long id;
/**
* 智能柜编号
*/
@Schema(description="智能柜编号")
private Long hardDoorId;
/**
* 货柜编号(1,2)
*/
@Schema(description="货柜编号(1,2)")
private Integer cabinetNo;
/**
* 锁在线1:在线;2:离线;
*/
@Schema(description="锁在线1:在线;2:离线;")
private String isLockOnline;
/**
* 锁状态1:开锁;2:关锁;
*/
@Schema(description="锁状态1:开锁;2:关锁;")
private Integer lockStatus;
/**
* 门状态1:门关;2:门开
*/
@Schema(description="门状态1:门关;2:门开")
private Integer doorStatus;
/**
* 货柜售卖状态1:在售;2:停售
*/
@Schema(description="货柜售卖状态1:在售;2:停售")
private Integer saleStatus;
/**
* 二维码
*/
@Schema(description="二维码")
private String qrCode;
/**
* 创建人
*/
@TableField(fill = FieldFill.INSERT)
@Schema(description="创建人")
private String createBy;
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
@Schema(description="创建时间")
private LocalDateTime createTime;
/**
* 修改人
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
@Schema(description="修改人")
private String updateBy;
/**
* 修改时间
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
@Schema(description="修改时间")
private LocalDateTime updateTime;
/**
* 删除标记
*/
@TableLogic
@TableField(fill = FieldFill.INSERT)
@Schema(description="删除标记")
private String delFlag;
/**
* 租户ID
*/
@Schema(description="租户ID")
private Long tenantId;
}
@@ -14,6 +14,7 @@ import com.bsd.pjcloud.hard.api.dto.HardAuthDto;
import com.bsd.pjcloud.hard.api.entity.HardAuthEntity;
import com.bsd.pjcloud.hard.api.vo.HardAuthVo;
import com.bsd.pjcloud.hard.service.HardAuthService;
import jakarta.validation.Valid;
import org.springframework.security.access.prepost.PreAuthorize;
import com.bsd.pjcloud.common.excel.annotation.ResponseExcel;
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
@@ -42,8 +43,7 @@ public class HardAuthController {
@Operation(summary = "app智能柜授权", description = "app智能柜授权")
@PostMapping("/app/auth-hard-door")
@PreAuthorize("@pms.hasPermission('hard_hardAuth_view')")
public R appAuthHardDoor(@RequestBody HardAuthAppDto dto) {
public R appAuthHardDoor(@Valid @RequestBody HardAuthAppDto dto) {
PjcloudUser user = SecurityUtils.getUser();
dto.setUserId(user.getId());
return R.ok(hardAuthService.appAuthHardDoor(dto));
@@ -0,0 +1,11 @@
package com.bsd.pjcloud.hard.mapper.manager;
import com.bsd.pjcloud.common.data.datascope.PjcloudBaseMapper;
import com.bsd.pjcloud.hard.api.entity.manager.HardDoorCabinetEntity;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface HardDoorCabinetMapper extends PjcloudBaseMapper<HardDoorCabinetEntity> {
}
@@ -0,0 +1,8 @@
package com.bsd.pjcloud.hard.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.bsd.pjcloud.hard.api.entity.manager.HardDoorCabinetEntity;
public interface HardDoorCabinetService extends IService<HardDoorCabinetEntity> {
}
@@ -31,4 +31,9 @@ public interface HardDoorManagerService extends IService<HardDoorManagerEntity>
* 音量修改
*/
void changeVolume(HardChangeVolume dto);
/**
* 校验设备和货柜编号
*/
HardDoorManagerVo checkDeviceAndCabinet(Long hardDoorId, Integer cabinetNo);
}
@@ -6,24 +6,31 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.bsd.pjcloud.admin.api.feign.RemoteUserService;
import com.bsd.pjcloud.admin.api.utils.DataUtil;
import com.bsd.pjcloud.admin.api.vo.UserVO;
import com.bsd.pjcloud.common.core.constant.enums.YesNoEnum;
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.constant.HardAuthTypeEnum;
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;
import com.bsd.pjcloud.hard.api.entity.manager.HardDoorManagerEntity;
import com.bsd.pjcloud.hard.api.entity.manager.HardManagerEntity;
import com.bsd.pjcloud.hard.api.utils.HardUtil;
import com.bsd.pjcloud.hard.api.vo.HardAuthVo;
import com.bsd.pjcloud.hard.api.vo.manager.HardDoorManagerVo;
import com.bsd.pjcloud.hard.mapper.HardAuthMapper;
import com.bsd.pjcloud.hard.mapper.manager.HardDoorManagerMapper;
import com.bsd.pjcloud.hard.mapper.manager.HardManagerMapper;
import com.bsd.pjcloud.hard.service.HardAuthService;
import com.bsd.pjcloud.hard.service.HardDoorManagerService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
@@ -36,7 +43,10 @@ import java.util.List;
@Service
public class HardAuthServiceImpl extends ServiceImpl<HardAuthMapper, HardAuthEntity> implements HardAuthService {
private final HardDoorManagerService hardDoorManagerService;
private final HardManagerMapper hardManagerMapper;
private final HardDoorManagerMapper hardDoorManagerMapper;
private final RemoteUserService remoteUserService;
@@ -52,10 +62,18 @@ public class HardAuthServiceImpl extends ServiceImpl<HardAuthMapper, HardAuthEnt
*/
@Override
public Long appAuthHardDoor(HardAuthAppDto dto) {
// 检验智能柜
HardDoorManagerVo hardDoorDetail = hardDoorManagerService.checkDeviceAndCabinet(dto.getDoorHardId(), dto.getCabinetNo());
HardAuthEntity insetObj = HardAuthEntity.builder()
.userId(dto.getUserId())
.hardId(hardDoorDetail.getHardId())
.authType(HardAuthTypeEnum.HARD_DDOR_AUTH.getType())
.authStatus(dto.getAuthStatus())
.authTime(LocalDateTime.now())
.isDone(YesNoEnum.NO.getCode())
.build();
return 0L;
baseMapper.insert(insetObj);
return insetObj.getId();
}
private void disposeList(List<HardAuthVo> list, HardAuthDto dto) {
@@ -79,7 +79,7 @@ public class HardDoorFlowServiceImpl extends ServiceImpl<HardDoorFlowMapper, Har
@Transactional(rollbackFor = Exception.class)
public void openDoorAccess(HardDoorFlowOpenDto dto) {
// 查询智能柜
HardDoorManagerVo doorDetail = checkDeviceAndCabinet(dto.getHardDoorId(), dto.getCabinetNo());
HardDoorManagerVo doorDetail = hardDoorManagerService.checkDeviceAndCabinet(dto.getHardDoorId(), dto.getCabinetNo());
getSelf().openDoor(dto, doorDetail);
}
@@ -89,7 +89,7 @@ public class HardDoorFlowServiceImpl extends ServiceImpl<HardDoorFlowMapper, Har
@Override
public void closeAccess(HardDoorFlowOpenDto dto) {
// 查询智能柜
HardDoorManagerVo doorDetail = checkDeviceAndCabinet(dto.getHardDoorId(), dto.getCabinetNo());
HardDoorManagerVo doorDetail = hardDoorManagerService.checkDeviceAndCabinet(dto.getHardDoorId(), dto.getCabinetNo());
// 请求关门
DoorOpenDto openDto = BeanUtil.toBean(dto, DoorOpenDto.class);
openDto.setDeviceCode(doorDetail.getDeviceCode());
@@ -180,20 +180,6 @@ public class HardDoorFlowServiceImpl extends ServiceImpl<HardDoorFlowMapper, Har
}
}
/**
* 校验设备和货柜编号
*/
private HardDoorManagerVo checkDeviceAndCabinet(Long hardDoorId, Integer cabinetNo) {
// 查询智能柜
HardDoorManagerVo doorDetail = hardDoorManagerService.getByHardId(hardDoorId);
if (ObjectUtil.isEmpty(doorDetail)) throw new RuntimeException("智能柜不存在");
List<DoorStatusVo.Cabinet> cabinetList = JSONUtil.toList(doorDetail.getCabinetList(), DoorStatusVo.Cabinet.class);
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("货柜不存在");
}
return doorDetail;
}
/**
* 判断货柜状态
@@ -0,0 +1,14 @@
package com.bsd.pjcloud.hard.service.impl.manager;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.bsd.pjcloud.hard.api.entity.manager.HardDoorCabinetEntity;
import com.bsd.pjcloud.hard.mapper.manager.HardDoorCabinetMapper;
import com.bsd.pjcloud.hard.service.HardDoorCabinetService;
import org.springframework.stereotype.Service;
/**
* 智能柜货柜
*/
@Service
public class HardDoorCabinetServiceImpl extends ServiceImpl<HardDoorCabinetMapper, HardDoorCabinetEntity> implements HardDoorCabinetService {
}
@@ -24,6 +24,8 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
import java.util.List;
/**
* 智能柜设置
*/
@@ -163,4 +165,19 @@ public class HardDoorManagerServiceImpl extends ServiceImpl<HardDoorManagerMappe
updateObj.setMediaVolume(dto.getMediaVolume());
baseMapper.updateById(updateObj);
}
/**
* 校验设备和货柜编号
*/
public HardDoorManagerVo checkDeviceAndCabinet(Long hardDoorId, Integer cabinetNo) {
// 查询智能柜
HardDoorManagerVo doorDetail = getByHardId(hardDoorId);
if (ObjectUtil.isEmpty(doorDetail)) throw new RuntimeException("智能柜不存在");
List<DoorStatusVo.Cabinet> cabinetList = JSONUtil.toList(doorDetail.getCabinetList(), DoorStatusVo.Cabinet.class);
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("货柜不存在");
}
return doorDetail;
}
}
@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.bsd.pjcloud.hard.mapper.manager.HardDoorCabinetMapper">
<resultMap id="hardDoorCabinetMap" type="com.bsd.pjcloud.hard.api.entity.manager.HardDoorCabinetEntity">
<id property="id" column="id"/>
<result property="hardDoorId" column="hard_door_id"/>
<result property="cabinetNo" column="cabinet_no"/>
<result property="isLockOnline" column="is_lock_online"/>
<result property="lockStatus" column="lock_status"/>
<result property="doorStatus" column="door_status"/>
<result property="saleStatus" column="sale_status"/>
<result property="qrCode" column="qr_code"/>
<result property="createBy" column="create_by"/>
<result property="createTime" column="create_time"/>
<result property="updateBy" column="update_by"/>
<result property="updateTime" column="update_time"/>
<result property="delFlag" column="del_flag"/>
<result property="tenantId" column="tenant_id"/>
</resultMap>
</mapper>