diff --git a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/device/vo/DeviceSimpleRespVO.java b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/device/vo/DeviceSimpleRespVO.java new file mode 100644 index 0000000..50ee0fe --- /dev/null +++ b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/device/vo/DeviceSimpleRespVO.java @@ -0,0 +1,24 @@ +package cn.iocoder.yudao.module.product.controller.admin.device.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Schema(description = "管理后台 - 贩卖机信息精简 Response VO") +@Data +@NoArgsConstructor +@AllArgsConstructor +public class DeviceSimpleRespVO { + + @Schema(description = "设备编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private Long id; + + @Schema(description = "设备名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "贩卖机001") + private String name; + + @Schema(description = "设备IMEI", requiredMode = Schema.RequiredMode.REQUIRED, example = "123456789012345") + private String deviceId; + +} + diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserBindDeviceReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserBindDeviceReqVO.java new file mode 100644 index 0000000..97bf9db --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserBindDeviceReqVO.java @@ -0,0 +1,23 @@ +package cn.iocoder.yudao.module.system.controller.admin.user.vo.user; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import java.util.List; + +@Schema(description = "管理后台 - 用户绑定设备 Request VO") +@Data +public class UserBindDeviceReqVO { + + @Schema(description = "用户ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @NotNull(message = "用户ID不能为空") + private Long userId; + + @Schema(description = "设备ID列表", requiredMode = Schema.RequiredMode.REQUIRED, example = "[1, 2, 3]") + @NotEmpty(message = "设备ID列表不能为空") + private List deviceIds; + +} + diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserDeviceRespVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserDeviceRespVO.java new file mode 100644 index 0000000..69b6094 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserDeviceRespVO.java @@ -0,0 +1,19 @@ +package cn.iocoder.yudao.module.system.controller.admin.user.vo.user; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.List; + +@Schema(description = "管理后台 - 用户设备信息 Response VO") +@Data +public class UserDeviceRespVO { + + @Schema(description = "用户ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private Long userId; + + @Schema(description = "绑定的设备ID列表", example = "[1, 2, 3]") + private List deviceIds; + +} + diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/user/UserDeviceDO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/user/UserDeviceDO.java new file mode 100644 index 0000000..b8397f5 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/user/UserDeviceDO.java @@ -0,0 +1,42 @@ +package cn.iocoder.yudao.module.system.dal.dataobject.user; + +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 用户和设备关联 DO + * + * @author 芋道源码 + */ +@TableName("system_user_device") +@KeySequence("system_user_device_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +public class UserDeviceDO extends BaseDO { + + /** + * 自增主键 + */ + @TableId + private Long id; + + /** + * 用户 ID + * + * 关联 {@link AdminUserDO#getId()} + */ + private Long userId; + + /** + * 设备 ID + * + * 关联 product_device 表的 id + */ + private Long deviceId; + +} + diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/user/UserDeviceMapper.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/user/UserDeviceMapper.java new file mode 100644 index 0000000..abd33e0 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/user/UserDeviceMapper.java @@ -0,0 +1,104 @@ +package cn.iocoder.yudao.module.system.dal.mysql.user; + +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.module.system.dal.dataobject.user.UserDeviceDO; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import org.apache.ibatis.annotations.Mapper; + +import java.util.Collection; +import java.util.List; + +/** + * 用户和设备关联 Mapper + * + * @author 芋道源码 + */ +@Mapper +public interface UserDeviceMapper extends BaseMapperX { + + /** + * 根据用户ID查询设备关联列表 + * + * @param userId 用户ID + * @return 设备关联列表 + */ + default List selectListByUserId(Long userId) { + return selectList(UserDeviceDO::getUserId, userId); + } + + /** + * 根据设备ID查询用户关联列表 + * + * @param deviceId 设备ID + * @return 用户关联列表 + */ + default List selectListByDeviceId(Long deviceId) { + return selectList(UserDeviceDO::getDeviceId, deviceId); + } + + /** + * 根据用户ID和设备ID查询关联 + * + * @param userId 用户ID + * @param deviceId 设备ID + * @return 关联记录 + */ + default UserDeviceDO selectByUserIdAndDeviceId(Long userId, Long deviceId) { + return selectOne(new LambdaQueryWrapperX() + .eq(UserDeviceDO::getUserId, userId) + .eq(UserDeviceDO::getDeviceId, deviceId)); + } + + /** + * 根据用户ID删除设备关联 + * + * @param userId 用户ID + * @param deviceIds 设备ID集合 + */ + default void deleteByUserIdAndDeviceIds(Long userId, Collection deviceIds) { + delete(new LambdaQueryWrapperX() + .eq(UserDeviceDO::getUserId, userId) + .in(UserDeviceDO::getDeviceId, deviceIds)); + } + + /** + * 根据用户ID删除所有设备关联 + * + * @param userId 用户ID + */ + default void deleteByUserId(Long userId) { + delete(Wrappers.lambdaUpdate(UserDeviceDO.class).eq(UserDeviceDO::getUserId, userId)); + } + + /** + * 根据设备ID删除所有用户关联 + * + * @param deviceId 设备ID + */ + default void deleteByDeviceId(Long deviceId) { + delete(Wrappers.lambdaUpdate(UserDeviceDO.class).eq(UserDeviceDO::getDeviceId, deviceId)); + } + + /** + * 根据用户ID集合查询设备ID列表 + * + * @param userIds 用户ID集合 + * @return 设备关联列表 + */ + default List selectListByUserIds(Collection userIds) { + return selectList(UserDeviceDO::getUserId, userIds); + } + + /** + * 根据设备ID集合查询用户ID列表 + * + * @param deviceIds 设备ID集合 + * @return 用户关联列表 + */ + default List selectListByDeviceIds(Collection deviceIds) { + return selectList(UserDeviceDO::getDeviceId, deviceIds); + } + +} +