From 7bc31dc69e68158186c9fb22b051140a4633581e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E8=89=AF=28004796=29?= Date: Tue, 12 Mar 2024 15:27:05 +0800 Subject: [PATCH] init --- .../xq/controller/UserAuthController.java | 5 +- .../ruoyi/xq/controller/UserController.java | 19 ++++ .../xq/controller/UserVipController.java | 43 ++++----- .../xq/controller/VipOrderController.java | 5 +- .../java/com/ruoyi/xq/domain/VipOrder.java | 6 +- .../xq/dto/admin/user/UserAuthAdminVo.java | 15 ++++ .../xq/dto/admin/user/UserVipAdminVo.java | 15 ++++ .../xq/dto/admin/user/req/AddVipReq.java | 10 +++ .../dto/admin/vipOrder/VipOrderAdminVo.java | 12 +++ .../com/ruoyi/xq/enums/vip/VipTypeEnum.java | 13 ++- .../com/ruoyi/xq/mapper/UserAuthMapper.java | 4 + .../com/ruoyi/xq/mapper/UserVipMapper.java | 4 + .../com/ruoyi/xq/mapper/VipOrderMapper.java | 4 + .../com/ruoyi/xq/service/UserAuthService.java | 5 ++ .../com/ruoyi/xq/service/UserVipService.java | 12 +++ .../com/ruoyi/xq/service/VipOrderService.java | 5 ++ .../xq/service/impl/UserAuthServiceImpl.java | 8 ++ .../xq/service/impl/UserVipServiceImpl.java | 89 ++++++++++++++++++- .../xq/service/impl/VipOrderServiceImpl.java | 8 ++ .../resources/mapper/xq/UserAuthMapper.xml | 42 ++++----- .../resources/mapper/xq/UserVipMapper.xml | 27 +++--- .../resources/mapper/xq/VipOrderMapper.xml | 37 ++++---- 22 files changed, 298 insertions(+), 90 deletions(-) create mode 100644 ruoyi-xq/src/main/java/com/ruoyi/xq/dto/admin/user/UserAuthAdminVo.java create mode 100644 ruoyi-xq/src/main/java/com/ruoyi/xq/dto/admin/user/UserVipAdminVo.java create mode 100644 ruoyi-xq/src/main/java/com/ruoyi/xq/dto/admin/user/req/AddVipReq.java create mode 100644 ruoyi-xq/src/main/java/com/ruoyi/xq/dto/admin/vipOrder/VipOrderAdminVo.java diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/controller/UserAuthController.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/controller/UserAuthController.java index 33d69b5..fc8a3a3 100644 --- a/ruoyi-xq/src/main/java/com/ruoyi/xq/controller/UserAuthController.java +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/controller/UserAuthController.java @@ -13,6 +13,7 @@ import com.ruoyi.common.core.validate.AddGroup; import com.ruoyi.common.core.validate.EditGroup; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.xq.domain.UserAuth; +import com.ruoyi.xq.dto.admin.user.UserAuthAdminVo; import com.ruoyi.xq.service.UserAuthService; import lombok.RequiredArgsConstructor; import org.springframework.validation.annotation.Validated; @@ -41,8 +42,8 @@ public class UserAuthController extends BaseController { */ @SaCheckPermission("xq:userAuth:list") @GetMapping("/list") - public TableDataInfo list(UserAuth bo, PageQuery pageQuery) { - Page page = userAuthService.page(pageQuery.build(), Wrappers.lambdaQuery(bo)); + public TableDataInfo list(UserAuthAdminVo bo, PageQuery pageQuery) { + Page page = userAuthService.pageApp(pageQuery, bo); return TableDataInfo.build(page); } diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/controller/UserController.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/controller/UserController.java index 61a1840..a9b5561 100644 --- a/ruoyi-xq/src/main/java/com/ruoyi/xq/controller/UserController.java +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/controller/UserController.java @@ -15,12 +15,15 @@ import com.ruoyi.common.enums.BusinessType; import com.ruoyi.xq.domain.User; import com.ruoyi.xq.service.UserService; import lombok.RequiredArgsConstructor; +import org.apache.commons.lang3.StringUtils; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; /** * 用户管理 @@ -46,6 +49,22 @@ public class UserController extends BaseController { return TableDataInfo.build(page); } + @GetMapping("/getByUsercode") + public R getByUsercode(String usercode){ + return R.ok(userService.getByUsercode(usercode)); + } + + @GetMapping("/listByUserCode") + public R> listByUserCode(String usercode, int limit){ + if(limit == 0){ + limit = 40; + } + List users = userService.list(Wrappers.lambdaQuery(User.class) + .select(User::getUsercode) + .like(StringUtils.isNotEmpty(usercode), User::getUsercode, usercode) + .last("limit " + limit)); + return R.ok(users.stream().map(User::getUsercode).collect(Collectors.toList())); + } /** * 获取用户管理详细信息 diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/controller/UserVipController.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/controller/UserVipController.java index 8f540a9..6d9e2ef 100644 --- a/ruoyi-xq/src/main/java/com/ruoyi/xq/controller/UserVipController.java +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/controller/UserVipController.java @@ -12,7 +12,11 @@ import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.validate.AddGroup; import com.ruoyi.common.core.validate.EditGroup; import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.xq.domain.User; import com.ruoyi.xq.domain.UserVip; +import com.ruoyi.xq.dto.admin.user.UserVipAdminVo; +import com.ruoyi.xq.dto.admin.user.req.AddVipReq; +import com.ruoyi.xq.service.UserService; import com.ruoyi.xq.service.UserVipService; import lombok.RequiredArgsConstructor; import org.springframework.validation.annotation.Validated; @@ -35,14 +39,15 @@ import java.util.Arrays; public class UserVipController extends BaseController { private final UserVipService userVipService; + private final UserService userService; /** * 查询VIP用户列表 */ @SaCheckPermission("xq:userVip:list") @GetMapping("/list") - public TableDataInfo list(UserVip bo, PageQuery pageQuery) { - Page page = userVipService.page(pageQuery.build(), Wrappers.lambdaQuery(bo)); + public TableDataInfo list(UserVipAdminVo bo, PageQuery pageQuery) { + Page page = userVipService.pageApp(pageQuery, bo); return TableDataInfo.build(page); } @@ -58,38 +63,28 @@ public class UserVipController extends BaseController { return R.ok(userVipService.getById(id)); } - /** - * 新增VIP用户 - */ @SaCheckPermission("xq:userVip:add") @Log(title = "VIP用户", businessType = BusinessType.INSERT) @RepeatSubmit() - @PostMapping() - public R add(@Validated(AddGroup.class) @RequestBody UserVip bo) { - return toAjax(userVipService.save(bo)); - } - - /** - * 修改VIP用户 - */ - @SaCheckPermission("xq:userVip:edit") - @Log(title = "VIP用户", businessType = BusinessType.UPDATE) - @RepeatSubmit() - @PutMapping() - public R edit(@Validated(EditGroup.class) @RequestBody UserVip bo) { - return toAjax(userVipService.updateById(bo)); + @PostMapping("/addVip") + public R addVip(@RequestBody AddVipReq bo) { + User user = userService.getByUsercode(bo.getUsercode()); + if(user == null){ + return R.fail("用户不存在!"); + } + userVipService.updateVipOrderAdmin(bo,user); + return R.ok(); } /** * 删除VIP用户 * - * @param ids 主键串 */ @SaCheckPermission("xq:userVip:remove") @Log(title = "VIP用户", businessType = BusinessType.DELETE) - @DeleteMapping("/{ids}") - public R remove(@NotEmpty(message = "主键不能为空") - @PathVariable Long[] ids) { - return toAjax(userVipService.removeBatchByIds(Arrays.asList(ids))); + @DeleteMapping("/{id}") + public R remove(@NotNull(message = "主键不能为空") @PathVariable Long id) { + userVipService.removeVip(id); + return R.ok(); } } diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/controller/VipOrderController.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/controller/VipOrderController.java index a26c620..70c09e2 100644 --- a/ruoyi-xq/src/main/java/com/ruoyi/xq/controller/VipOrderController.java +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/controller/VipOrderController.java @@ -13,6 +13,7 @@ import com.ruoyi.common.core.validate.AddGroup; import com.ruoyi.common.core.validate.EditGroup; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.xq.domain.VipOrder; +import com.ruoyi.xq.dto.admin.vipOrder.VipOrderAdminVo; import com.ruoyi.xq.service.VipOrderService; import lombok.RequiredArgsConstructor; import org.springframework.validation.annotation.Validated; @@ -41,8 +42,8 @@ public class VipOrderController extends BaseController { */ @SaCheckPermission("xq:vipOrder:list") @GetMapping("/list") - public TableDataInfo list(VipOrder bo, PageQuery pageQuery) { - Page page = vipOrderService.page(pageQuery.build(), Wrappers.lambdaQuery(bo)); + public TableDataInfo list(VipOrderAdminVo bo, PageQuery pageQuery) { + Page page = vipOrderService.pageApp(pageQuery, bo); return TableDataInfo.build(page); } diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/domain/VipOrder.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/domain/VipOrder.java index cdd97e0..2ab0395 100644 --- a/ruoyi-xq/src/main/java/com/ruoyi/xq/domain/VipOrder.java +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/domain/VipOrder.java @@ -41,6 +41,10 @@ public class VipOrder implements Serializable { * 1-普通会员 2-黄金会员 3-钻石会员 */ private Integer vipType; + /** + * 开通月份 + */ + private Integer vipMonth; /** * 1-月卡 2-季卡 3-年卡 */ @@ -81,7 +85,7 @@ public class VipOrder implements Serializable { /** * 是否为后台管理新增 */ - private String admin; + private Boolean admin; /** * 后台操作管理员ID */ diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/dto/admin/user/UserAuthAdminVo.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/dto/admin/user/UserAuthAdminVo.java new file mode 100644 index 0000000..8352065 --- /dev/null +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/dto/admin/user/UserAuthAdminVo.java @@ -0,0 +1,15 @@ +package com.ruoyi.xq.dto.admin.user; + +import com.ruoyi.xq.domain.UserAuth; +import lombok.Data; + +@Data +public class UserAuthAdminVo extends UserAuth { + /** + * 昵称 + */ + private String nickname; + private String mobile; + + private String avatar; +} diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/dto/admin/user/UserVipAdminVo.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/dto/admin/user/UserVipAdminVo.java new file mode 100644 index 0000000..25e192e --- /dev/null +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/dto/admin/user/UserVipAdminVo.java @@ -0,0 +1,15 @@ +package com.ruoyi.xq.dto.admin.user; + +import com.ruoyi.xq.domain.UserVip; +import lombok.Data; + +@Data +public class UserVipAdminVo extends UserVip { + /** + * 昵称 + */ + private String nickname; + private String mobile; + + private String avatar; +} diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/dto/admin/user/req/AddVipReq.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/dto/admin/user/req/AddVipReq.java new file mode 100644 index 0000000..2d8a0a6 --- /dev/null +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/dto/admin/user/req/AddVipReq.java @@ -0,0 +1,10 @@ +package com.ruoyi.xq.dto.admin.user.req; + +import lombok.Data; + +@Data +public class AddVipReq { + private String usercode; + private Integer openVipType; + private Integer openVipMonthNum; +} diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/dto/admin/vipOrder/VipOrderAdminVo.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/dto/admin/vipOrder/VipOrderAdminVo.java new file mode 100644 index 0000000..6f1cdf9 --- /dev/null +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/dto/admin/vipOrder/VipOrderAdminVo.java @@ -0,0 +1,12 @@ +package com.ruoyi.xq.dto.admin.vipOrder; + +import com.ruoyi.xq.domain.VipOrder; +import lombok.Data; + +@Data +public class VipOrderAdminVo extends VipOrder { + private String nickname; + private String mobile; + + private String avatar; +} diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/enums/vip/VipTypeEnum.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/enums/vip/VipTypeEnum.java index c037e9d..677b839 100644 --- a/ruoyi-xq/src/main/java/com/ruoyi/xq/enums/vip/VipTypeEnum.java +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/enums/vip/VipTypeEnum.java @@ -1,13 +1,14 @@ package com.ruoyi.xq.enums.vip; import lombok.Getter; -import org.springframework.web.bind.annotation.GetMapping; + +import java.util.Arrays; @Getter public enum VipTypeEnum { - ONE(1,"一级会员"), - TWO(2,"二级会员"), - THREE(3,"三级会员"), + ONE(1,"普通会员"), + TWO(2,"黄金会员"), + THREE(3,"钻石会员"), ; private final Integer code; private final String text; @@ -16,4 +17,8 @@ public enum VipTypeEnum { this.code = code; this.text = text; } + + public static VipTypeEnum getByCode(Integer code){ + return Arrays.stream(VipTypeEnum.values()).filter(i -> i.getCode().equals(code)).findFirst().orElse(null); + } } diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/mapper/UserAuthMapper.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/mapper/UserAuthMapper.java index 6c8dd93..d9f8092 100644 --- a/ruoyi-xq/src/main/java/com/ruoyi/xq/mapper/UserAuthMapper.java +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/mapper/UserAuthMapper.java @@ -1,7 +1,10 @@ package com.ruoyi.xq.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.xq.domain.UserAuth; +import com.ruoyi.xq.dto.admin.user.UserAuthAdminVo; +import org.apache.ibatis.annotations.Param; /** * 用户认证管理Mapper接口 @@ -11,4 +14,5 @@ import com.ruoyi.xq.domain.UserAuth; */ public interface UserAuthMapper extends BaseMapper { + Page pageApp(@Param("build") Page build, @Param("bo") UserAuthAdminVo bo); } diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/mapper/UserVipMapper.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/mapper/UserVipMapper.java index 90f84a6..4011097 100644 --- a/ruoyi-xq/src/main/java/com/ruoyi/xq/mapper/UserVipMapper.java +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/mapper/UserVipMapper.java @@ -1,7 +1,10 @@ package com.ruoyi.xq.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.xq.domain.UserVip; +import com.ruoyi.xq.dto.admin.user.UserVipAdminVo; +import org.apache.ibatis.annotations.Param; /** * VIP用户Mapper接口 @@ -11,4 +14,5 @@ import com.ruoyi.xq.domain.UserVip; */ public interface UserVipMapper extends BaseMapper { + Page pageApp(@Param("build") Page build, @Param("bo") UserVipAdminVo bo); } diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/mapper/VipOrderMapper.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/mapper/VipOrderMapper.java index 3f1846f..2f139b4 100644 --- a/ruoyi-xq/src/main/java/com/ruoyi/xq/mapper/VipOrderMapper.java +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/mapper/VipOrderMapper.java @@ -1,7 +1,10 @@ package com.ruoyi.xq.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.xq.domain.VipOrder; +import com.ruoyi.xq.dto.admin.vipOrder.VipOrderAdminVo; +import org.apache.ibatis.annotations.Param; /** * VIP订单Mapper接口 @@ -11,4 +14,5 @@ import com.ruoyi.xq.domain.VipOrder; */ public interface VipOrderMapper extends BaseMapper { + Page pageApp(@Param("build") Page build, @Param("bo") VipOrderAdminVo bo); } diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/service/UserAuthService.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/service/UserAuthService.java index a46724e..2841136 100644 --- a/ruoyi-xq/src/main/java/com/ruoyi/xq/service/UserAuthService.java +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/service/UserAuthService.java @@ -1,7 +1,10 @@ package com.ruoyi.xq.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.xq.domain.UserAuth; +import com.ruoyi.xq.dto.admin.user.UserAuthAdminVo; /** * 用户认证管理Service接口 @@ -11,4 +14,6 @@ import com.ruoyi.xq.domain.UserAuth; */ public interface UserAuthService extends IService { UserAuth getByUserId(Long userId); + + Page pageApp(PageQuery pageQuery, UserAuthAdminVo bo); } diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/service/UserVipService.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/service/UserVipService.java index 9f195de..82ef6b4 100644 --- a/ruoyi-xq/src/main/java/com/ruoyi/xq/service/UserVipService.java +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/service/UserVipService.java @@ -1,8 +1,13 @@ package com.ruoyi.xq.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.common.core.domain.PageQuery; +import com.ruoyi.xq.domain.User; import com.ruoyi.xq.domain.UserVip; import com.ruoyi.xq.domain.VipOrder; +import com.ruoyi.xq.dto.admin.user.UserVipAdminVo; +import com.ruoyi.xq.dto.admin.user.req.AddVipReq; /** * VIP用户Service接口 @@ -18,4 +23,11 @@ public interface UserVipService extends IService { UserVip getByUserVipMaster(Long userId); + void updateVipOrderAdmin(AddVipReq bo, User user); + + void incsVip(User user, Integer vipType, Integer vipMonth); + + Page pageApp(PageQuery pageQuery, UserVipAdminVo bo); + + void removeVip(Long id); } diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/service/VipOrderService.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/service/VipOrderService.java index ba7645e..77bf93b 100644 --- a/ruoyi-xq/src/main/java/com/ruoyi/xq/service/VipOrderService.java +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/service/VipOrderService.java @@ -1,7 +1,10 @@ package com.ruoyi.xq.service; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.xq.domain.VipOrder; +import com.ruoyi.xq.dto.admin.vipOrder.VipOrderAdminVo; /** * VIP订单Service接口 @@ -11,4 +14,6 @@ import com.ruoyi.xq.domain.VipOrder; */ public interface VipOrderService extends IService { VipOrder createVipOrder(Long userId, Long vipPriceSettingId); + + Page pageApp(PageQuery pageQuery, VipOrderAdminVo bo); } diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/service/impl/UserAuthServiceImpl.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/service/impl/UserAuthServiceImpl.java index cac14c8..f0e3e9e 100644 --- a/ruoyi-xq/src/main/java/com/ruoyi/xq/service/impl/UserAuthServiceImpl.java +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/service/impl/UserAuthServiceImpl.java @@ -1,8 +1,11 @@ package com.ruoyi.xq.service.impl; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.xq.domain.UserAuth; +import com.ruoyi.xq.dto.admin.user.UserAuthAdminVo; import com.ruoyi.xq.mapper.UserAuthMapper; import com.ruoyi.xq.service.UserAuthService; import org.springframework.stereotype.Service; @@ -21,4 +24,9 @@ public class UserAuthServiceImpl extends ServiceImpl im return this.getOne(Wrappers.lambdaQuery(UserAuth.class) .eq(UserAuth::getUserId, userId)); } + + @Override + public Page pageApp(PageQuery pageQuery, UserAuthAdminVo bo) { + return baseMapper.pageApp(pageQuery.build(), bo); + } } diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/service/impl/UserVipServiceImpl.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/service/impl/UserVipServiceImpl.java index 9193a65..db57ba5 100644 --- a/ruoyi-xq/src/main/java/com/ruoyi/xq/service/impl/UserVipServiceImpl.java +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/service/impl/UserVipServiceImpl.java @@ -1,15 +1,32 @@ package com.ruoyi.xq.service.impl; +import cn.hutool.extra.spring.SpringUtil; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.core.domain.PageQuery; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.helper.LoginHelper; +import com.ruoyi.xq.domain.User; import com.ruoyi.xq.domain.UserVip; +import com.ruoyi.xq.domain.VipOrder; +import com.ruoyi.xq.dto.admin.user.UserVipAdminVo; +import com.ruoyi.xq.dto.admin.user.req.AddVipReq; +import com.ruoyi.xq.enums.common.OrderTypeEnum; +import com.ruoyi.xq.enums.pay.PayStatusEnum; import com.ruoyi.xq.enums.vip.VipStatusEnum; +import com.ruoyi.xq.enums.vip.VipTypeEnum; +import com.ruoyi.xq.manager.OrderNoUtil; import com.ruoyi.xq.mapper.UserVipMapper; import com.ruoyi.xq.service.UserVipService; -import lombok.RequiredArgsConstructor; +import com.ruoyi.xq.service.VipOrderService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import java.time.LocalDate; import java.time.LocalDateTime; +import java.time.LocalTime; import java.util.Comparator; import java.util.List; @@ -19,10 +36,12 @@ import java.util.List; * @author 77 * @date 2024-03-04 */ -@RequiredArgsConstructor @Service public class UserVipServiceImpl extends ServiceImpl implements UserVipService { + @Autowired + private VipOrderService vipOrderService; + @Override public UserVip getUserVip(Long userId, Integer vipType){ return this.getOne(Wrappers.lambdaQuery(UserVip.class) @@ -50,4 +69,70 @@ public class UserVipServiceImpl extends ServiceImpl imple return userVipList.stream().max(Comparator.comparing(UserVip::getVipType)).orElse(null); } + /** + * 后台管理强制覆盖VIP + * @param bo + * @param user + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void updateVipOrderAdmin(AddVipReq bo, User user) { + VipTypeEnum vipTypeEnum = VipTypeEnum.getByCode(bo.getOpenVipType()); + if(vipTypeEnum == null || bo.getOpenVipMonthNum() == null || bo.getOpenVipMonthNum() < 1){ + throw new ServiceException("参数异常!"); + } + String text = String.format("管理员开通%s %s个月", vipTypeEnum.getText(), bo.getOpenVipMonthNum()); + VipOrder vipOrder = new VipOrder(); + vipOrder.setUserId(user.getId()); + vipOrder.setUsercode(user.getUsercode()); + vipOrder.setVipType(vipTypeEnum.getCode()); + vipOrder.setVipMonth(bo.getOpenVipMonthNum()); + vipOrder.setOrderName(text); + vipOrder.setOrderNo(OrderNoUtil.gen(OrderTypeEnum.VIP)); + vipOrder.setPayStatus(PayStatusEnum.NO_PAY.getCode()); + vipOrder.setAdmin(true); + vipOrder.setAdminId(LoginHelper.getUserId()); + vipOrderService.save(vipOrder); + UserVipService userVipService = SpringUtil.getBean(UserVipService.class); + userVipService.incsVip(user,bo.getOpenVipType(),bo.getOpenVipMonthNum()); + } + + @Override + public void incsVip(User user, Integer vipType, Integer vipMonth){ + // TODO 加锁 + UserVip userVip = this.getUserVip(user.getId(),vipType); + LocalDateTime now = LocalDateTime.now(); + // 以前会员失效 + if(userVip == null || + !VipStatusEnum.NORMAL.getCode().equals(userVip.getVipStatus()) || // 会员不可用 + userVip.getVipTimeout().isBefore(now)){ + if(userVip == null){ + userVip = new UserVip(); + } + userVip.setUserId(user.getId()); + userVip.setUsercode(user.getUsercode()); + userVip.setVipType(vipType); + LocalDate expireDate = now.plusMonths(vipMonth).plusDays(1).toLocalDate(); + userVip.setVipTimeout(LocalDateTime.of(expireDate, LocalTime.MIN)); + userVip.setVipStatus(VipStatusEnum.NORMAL.getCode()); + this.saveOrUpdate(userVip); + }else{ + userVip.setVipTimeout(userVip.getVipTimeout().plusMonths(vipMonth)); + this.saveOrUpdate(userVip); + } + } + + @Override + public Page pageApp(PageQuery pageQuery, UserVipAdminVo bo) { + return baseMapper.pageApp(pageQuery.build(), bo); + } + + @Override + public void removeVip(Long id) { + this.update(Wrappers.lambdaUpdate(UserVip.class) + .eq(UserVip::getId,id) + .set(UserVip::getVipStatus, VipStatusEnum.CLOSE.getCode())); + } + + } diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/service/impl/VipOrderServiceImpl.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/service/impl/VipOrderServiceImpl.java index 2015a40..5516fe6 100644 --- a/ruoyi-xq/src/main/java/com/ruoyi/xq/service/impl/VipOrderServiceImpl.java +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/service/impl/VipOrderServiceImpl.java @@ -1,10 +1,13 @@ package com.ruoyi.xq.service.impl; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.xq.domain.User; import com.ruoyi.xq.domain.VipOrder; import com.ruoyi.xq.domain.VipPrice; +import com.ruoyi.xq.dto.admin.vipOrder.VipOrderAdminVo; import com.ruoyi.xq.enums.common.OrderTypeEnum; import com.ruoyi.xq.enums.pay.PayStatusEnum; import com.ruoyi.xq.manager.OrderNoUtil; @@ -51,4 +54,9 @@ public class VipOrderServiceImpl extends ServiceImpl im this.save(vipOrder); return vipOrder; } + + @Override + public Page pageApp(PageQuery pageQuery, VipOrderAdminVo bo) { + return baseMapper.pageApp(pageQuery.build(), bo); + } } diff --git a/ruoyi-xq/src/main/resources/mapper/xq/UserAuthMapper.xml b/ruoyi-xq/src/main/resources/mapper/xq/UserAuthMapper.xml index f1a819a..43d9aca 100644 --- a/ruoyi-xq/src/main/resources/mapper/xq/UserAuthMapper.xml +++ b/ruoyi-xq/src/main/resources/mapper/xq/UserAuthMapper.xml @@ -3,31 +3,23 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - - - - - - - - - - - - - - - - - - - - - - - - - + diff --git a/ruoyi-xq/src/main/resources/mapper/xq/UserVipMapper.xml b/ruoyi-xq/src/main/resources/mapper/xq/UserVipMapper.xml index 0dad345..5e3be7a 100644 --- a/ruoyi-xq/src/main/resources/mapper/xq/UserVipMapper.xml +++ b/ruoyi-xq/src/main/resources/mapper/xq/UserVipMapper.xml @@ -4,16 +4,23 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - - - - - - - - - - + diff --git a/ruoyi-xq/src/main/resources/mapper/xq/VipOrderMapper.xml b/ruoyi-xq/src/main/resources/mapper/xq/VipOrderMapper.xml index 51c8803..002b20e 100644 --- a/ruoyi-xq/src/main/resources/mapper/xq/VipOrderMapper.xml +++ b/ruoyi-xq/src/main/resources/mapper/xq/VipOrderMapper.xml @@ -4,26 +4,23 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - - - - - - - - - - - - - - - - - - - - +