diff --git a/luoo_user/src/main/java/com/luoo/user/controller/MembershipController.java b/luoo_user/src/main/java/com/luoo/user/controller/MembershipController.java index 7843d26..0a86a54 100644 --- a/luoo_user/src/main/java/com/luoo/user/controller/MembershipController.java +++ b/luoo_user/src/main/java/com/luoo/user/controller/MembershipController.java @@ -5,6 +5,7 @@ import api.Result; import com.luoo.user.service.MembershipCodeService; import controller.BaseController; import io.swagger.annotations.*; +import java.util.List; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -25,30 +26,48 @@ import javax.validation.constraints.NotNull; @Api(tags = "会员模块") public class MembershipController extends BaseController { - @Autowired - private MembershipCodeService membershipCodeService; - - @ApiOperation(value = "1.生成会员码", notes = "仅限admin权限用户调用") - @GetMapping("/code/generate") - @GlobalInterceptor(checkAdminLogin = true) - @ApiImplicitParams(value = { - @ApiImplicitParam(name = "duration", value = "会员时长(天)", required = true, dataType = "Integer", paramType = "query") - }) - public Result generateMembershipCode(@RequestHeader(value = "Authorization", required = true) String authorization, - @NotNull Integer duration) { - return Result.success(membershipCodeService.generateMembershipCode(authorization, duration)); - } - - - @ApiOperation(value = "2.绑定会员码", notes = "仅限app用户调用") - @PostMapping("/code/bind") - @GlobalInterceptor(checkAppUserLogin = true) - @ApiImplicitParams(value = { - @ApiImplicitParam(name = "code", value = "会员码", required = true, dataType = "String", paramType = "query") - }) - public Result bindMembershipCode(@RequestHeader(value = "Authorization", required = true) String authorization, - @NotNull String code) { - membershipCodeService.bindMembershipCode(authorization, code); - return Result.success(); - } + @Autowired + private MembershipCodeService membershipCodeService; + + @ApiOperation(value = "1.生成会员码", notes = "仅限admin权限用户调用") + @GetMapping("/code/generate") + @GlobalInterceptor(checkAdminLogin = true) + @ApiImplicitParams(value = { + @ApiImplicitParam(name = "duration", value = "会员时长(天)", required = true, dataType = "Integer", paramType = "query") + }) + public Result generateMembershipCode( + @RequestHeader(value = "Authorization", required = true) String authorization, + @NotNull Integer duration) { + return Result.success(membershipCodeService.generateMembershipCode(authorization, duration)); + } + + @ApiOperation(value = "1.1 批量生成会员码", notes = "仅限admin权限用户调用") + @GetMapping("/code/generate/batch") + @GlobalInterceptor(checkAdminLogin = true) + @ApiImplicitParams(value = { + @ApiImplicitParam(name = "duration", value = "会员时长(天)", required = true, dataType = "Integer", paramType = "query"), + @ApiImplicitParam(name = "count", value = "生成数量", required = true, dataType = "Integer", paramType = "query") + }) + public Result> generateMembershipCodeBatch( + @RequestHeader(value = "Authorization", required = true) String authorization, + @NotNull Integer duration, + @NotNull Integer count) { + List list = membershipCodeService.generateMembershipCodeBatch(authorization, + duration, count); + return Result.success(list); + } + + + @ApiOperation(value = "2.绑定会员码", notes = "仅限app用户调用") + @PostMapping("/code/bind") + @GlobalInterceptor(checkAppUserLogin = true) + @ApiImplicitParams(value = { + @ApiImplicitParam(name = "code", value = "会员码", required = true, dataType = "String", paramType = "query") + }) + public Result bindMembershipCode( + @RequestHeader(value = "Authorization", required = true) String authorization, + @NotNull String code) { + membershipCodeService.bindMembershipCode(authorization, code); + return Result.success(); + } } diff --git a/luoo_user/src/main/java/com/luoo/user/service/MembershipCodeService.java b/luoo_user/src/main/java/com/luoo/user/service/MembershipCodeService.java index e55b45d..6c5ca37 100644 --- a/luoo_user/src/main/java/com/luoo/user/service/MembershipCodeService.java +++ b/luoo_user/src/main/java/com/luoo/user/service/MembershipCodeService.java @@ -8,6 +8,8 @@ import dto.UserLoginDto; import enums.MembershipEnums; import enums.UserVipStatusEnum; import exception.BizException; +import java.util.ArrayList; +import java.util.List; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -31,80 +33,99 @@ import java.util.UUID; @Slf4j public class MembershipCodeService { - private final MembershipCodeDao membershipCodeDao; + private final MembershipCodeDao membershipCodeDao; - private final IdWorker idWorker; + private final IdWorker idWorker; - private final JwtUtil jwtUtil; + private final JwtUtil jwtUtil; - private final UserInfoDao userInfoDao; + private final UserInfoDao userInfoDao; - public MembershipCodeService(JwtUtil jwtUtil, IdWorker idWorker, MembershipCodeDao membershipCodeDao, UserInfoDao userInfoDao) { - this.jwtUtil = jwtUtil; - this.idWorker = idWorker; - this.membershipCodeDao = membershipCodeDao; - this.userInfoDao = userInfoDao; - } + public MembershipCodeService(JwtUtil jwtUtil, IdWorker idWorker, + MembershipCodeDao membershipCodeDao, UserInfoDao userInfoDao) { + this.jwtUtil = jwtUtil; + this.idWorker = idWorker; + this.membershipCodeDao = membershipCodeDao; + this.userInfoDao = userInfoDao; + } - /** - * 创建会员码并保存 - * 会员码取UUID - * - * @param token token - * @param duration 会员时长(天) - * @return 会员码 - */ - @Transactional(rollbackFor = Exception.class) - public String generateMembershipCode(String token, Integer duration) { - UserLoginDto userLoginDto = jwtUtil.getUserLoginDto(token); + /** + * 创建会员码并保存 会员码取UUID + * + * @param token token + * @param duration 会员时长(天) + * @return 会员码 + */ + @Transactional(rollbackFor = Exception.class) + public String generateMembershipCode(String token, Integer duration) { + UserLoginDto userLoginDto = jwtUtil.getUserLoginDto(token); - // UUID作为会员码 - String code = UUID.randomUUID().toString(); - MembershipCode build = MembershipCode.builder() - .id(String.valueOf(idWorker.nextId())) - .code(code) - .status(MembershipEnums.CREATED.getCode()) - .duration(duration) - .createUser(userLoginDto.getUserId()) - .build(); - membershipCodeDao.save(build); - return code; - } + // UUID作为会员码 + String code = UUID.randomUUID().toString(); + MembershipCode build = MembershipCode.builder() + .id(String.valueOf(idWorker.nextId())) + .code(code) + .status(MembershipEnums.CREATED.getCode()) + .duration(duration) + .createUser(userLoginDto.getUserId()) + .build(); + membershipCodeDao.save(build); + return code; + } - /** - * 绑定会员码 - * - * @param token token - * @param code 会员码 - */ - @Transactional(rollbackFor = Exception.class) - public void bindMembershipCode(String token, String code) { - UserLoginDto userLoginDto = jwtUtil.getUserLoginDto(token); - MembershipCode membershipCode = membershipCodeDao.findMembershipCodeByCodeAndStatus(code, MembershipEnums.CREATED.getCode()); - if (membershipCode == null) { - throw new BizException("会员码不存在"); - } - // 处理会员码表 - membershipCode.setStatus(MembershipEnums.BIND.getCode()); - membershipCode.setUserId(userLoginDto.getUserId()); - membershipCode.setUpdateUser(userLoginDto.getUserId()); - membershipCodeDao.save(membershipCode); + /** + * 批量生成会员码 + * + * @param token token + * @param duration 会员时长(天) + * @param count 生成会员码数量 + * @return 会员码list + */ + @Transactional(rollbackFor = Exception.class) + public List generateMembershipCodeBatch(String token, Integer duration, Integer count) { + List result = new ArrayList<>(); + for (int i = 0; i < count; i++) { + String code = generateMembershipCode(token, duration); + result.add(code); + } + return result; + } - // 处理用户表 - UserInfo userInfo = userInfoDao.findById(userLoginDto.getUserId()).get(); - // 计算会员到期时间 - LocalDate vipExpireTime; - if(Objects.equals(UserVipStatusEnum.INITIAL.getCode(), userInfo.getVipStatus())){ - vipExpireTime = userInfo.getVipExpireTime().plusDays(membershipCode.getDuration()); - } else { - // 从今天开始,增加membershipCode的duration天 - userInfo.setVipStatus(UserVipStatusEnum.INITIAL.getCode()); - vipExpireTime = LocalDate.now().plusDays(membershipCode.getDuration()); - } - userInfo.setVipExpireTime(vipExpireTime); - // 无论如何当即设置为会员生效状态 - userInfo.setVipStatus(UserVipStatusEnum.ACTIVE.getCode()); - userInfoDao.save(userInfo); + /** + * 绑定会员码 + * + * @param token token + * @param code 会员码 + */ + @Transactional(rollbackFor = Exception.class) + public void bindMembershipCode(String token, String code) { + UserLoginDto userLoginDto = jwtUtil.getUserLoginDto(token); + MembershipCode membershipCode = membershipCodeDao.findMembershipCodeByCodeAndStatus(code, + MembershipEnums.CREATED.getCode()); + if (membershipCode == null) { + throw new BizException("会员码不存在"); + } + // 处理会员码表 + membershipCode.setStatus(MembershipEnums.BIND.getCode()); + membershipCode.setUserId(userLoginDto.getUserId()); + membershipCode.setUpdateUser(userLoginDto.getUserId()); + membershipCodeDao.save(membershipCode); + // 处理用户表 + UserInfo userInfo = userInfoDao.findById(userLoginDto.getUserId()).get(); + // 计算会员到期时间 + LocalDate vipExpireTime; + if (Objects.equals(UserVipStatusEnum.INITIAL.getCode(), userInfo.getVipStatus())) { + vipExpireTime = userInfo.getVipExpireTime().plusDays(membershipCode.getDuration()); + } else { + // 从今天开始,增加membershipCode的duration天 + userInfo.setVipStatus(UserVipStatusEnum.INITIAL.getCode()); + vipExpireTime = LocalDate.now().plusDays(membershipCode.getDuration()); } + userInfo.setVipExpireTime(vipExpireTime); + // 无论如何当即设置为会员生效状态 + userInfo.setVipStatus(UserVipStatusEnum.ACTIVE.getCode()); + userInfoDao.save(userInfo); + + } }