diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/device/DeviceController.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/device/DeviceController.java index 704e663d18..5c8b038813 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/device/DeviceController.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/device/DeviceController.java @@ -144,4 +144,11 @@ public class DeviceController { return success(true); } + @PutMapping("/updateVip") + @Operation(summary = "更新设备会员信息(开通/续费)") + public CommonResult updateDeviceVip(@Valid @RequestBody DeviceVipReqVO vipReqVO) { + deviceService.updateDeviceVip(vipReqVO); + return success(true); + } + } \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/device/vo/DeviceVipReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/device/vo/DeviceVipReqVO.java new file mode 100644 index 0000000000..f36d88f5ce --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/device/vo/DeviceVipReqVO.java @@ -0,0 +1,35 @@ +package cn.iocoder.yudao.module.system.controller.admin.device.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import javax.validation.constraints.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 设备会员信息更新 Request VO") +@Data +public class DeviceVipReqVO { + + @Schema(description = "设备编号", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "设备编号不能为空") + private String devicecode; + + @Schema(description = "机构ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1001") + @NotNull(message = "机构ID不能为空") + private Integer orgid; + + @Schema(description = "会员开始时间", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "会员开始时间不能为空") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime vipstarttime; + + @Schema(description = "会员结束时间", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "会员结束时间不能为空") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime vipendtime; + + @Schema(description = "是否会员", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "是否会员不能为空") + private Integer isvip; + +} \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/device/DeviceService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/device/DeviceService.java index f080cfdaca..707ed847e1 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/device/DeviceService.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/device/DeviceService.java @@ -106,4 +106,11 @@ public interface DeviceService { * 将过期的VIP设备的isvip字段设为0,devicestatus设为2 */ void processExpiredVipDevices(); + + /** + * 更新设备会员信息 + * + * @param vipReqVO 会员信息更新参数 + */ + void updateDeviceVip(@Valid DeviceVipReqVO vipReqVO); } \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/device/DeviceServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/device/DeviceServiceImpl.java index 3580e01b69..e2daff33f6 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/device/DeviceServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/device/DeviceServiceImpl.java @@ -221,4 +221,40 @@ public class DeviceServiceImpl implements DeviceService { log.info("成功处理 {} 个过期的VIP设备", expiredVipDevices.size()); } + @Override + public void updateDeviceVip(DeviceVipReqVO vipReqVO) { + // 校验设备是否存在 + DeviceDO device = deviceMapper.selectOne(DeviceDO::getDevicecode, vipReqVO.getDevicecode()); + if (device == null) { + throw exception(DEVICE_NOT_EXISTS); + } + + // 记录日志 + log.info("开始更新设备 {} 的VIP信息,机构ID: {}", vipReqVO.getDevicecode(), vipReqVO.getOrgid()); + + // 创建更新对象 + DeviceDO updateObj = new DeviceDO(); + updateObj.setOrgid(vipReqVO.getOrgid()); + updateObj.setVipstarttime(vipReqVO.getVipstarttime()); + updateObj.setVipendtime(vipReqVO.getVipendtime()); + updateObj.setIsvip(vipReqVO.getIsvip()); + updateObj.setUpdatetime(LocalDateTime.now()); + + // 如果设置为VIP,同时更新设备状态为在线 + if (vipReqVO.getIsvip() == 1) { + updateObj.setDevicestatus(1); // 1表示在线 + } + + // 使用 LambdaUpdateWrapper 进行精确更新 + LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); + wrapper.eq(DeviceDO::getDevicecode, vipReqVO.getDevicecode()); + + int updateCount = deviceMapper.update(updateObj, wrapper); + if (updateCount > 0) { + log.info("设备 {} VIP信息更新成功", vipReqVO.getDevicecode()); + } else { + log.error("设备 {} VIP信息更新失败", vipReqVO.getDevicecode()); + } + } + } \ No newline at end of file