|
|
|
@ -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<String> generateMembershipCodeBatch(String token, Integer duration, Integer count) {
|
|
|
|
|
List<String> 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);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|