From 68d07ab13e4630679f2875e35f2b9ab98162a3b4 Mon Sep 17 00:00:00 2001 From: Flow <958079825@qq.com> Date: Tue, 2 Sep 2025 16:10:55 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=BE=E5=A4=87=E4=BC=9A=E5=91=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/device/DeviceController.java | 7 ++++ .../admin/device/vo/DeviceVipReqVO.java | 35 ++++++++++++++++++ .../system/service/device/DeviceService.java | 7 ++++ .../service/device/DeviceServiceImpl.java | 36 +++++++++++++++++++ 4 files changed, 85 insertions(+) create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/device/vo/DeviceVipReqVO.java 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