master:档口购买会员功能完善;

pull/1121/head
liujiang 2025-10-06 16:26:54 +08:00
parent 27ecbd68a6
commit 3106815cc2
3 changed files with 56 additions and 27 deletions

View File

@ -24,8 +24,10 @@ public class StoreMemberCreateVO {
@NotNull(message = "支付金额不能为空!")
@ApiModelProperty(value = "支付金额", required = true)
private BigDecimal payPrice;
@NotNull(message = "交易密码不能为空!")
@ApiModelProperty(value = "交易密码", required = true)
@NotNull(message = "支付方式不能为空!")
@ApiModelProperty(value = "支付方式", required = true)
private Integer payWay;
@ApiModelProperty(value = "交易密码")
private String transactionPassword;
}

View File

@ -4,6 +4,7 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
/**
@ -15,10 +16,15 @@ import java.math.BigDecimal;
@Accessors(chain = true)
public class StoreMemberCreateDTO {
@ApiModelProperty(value = "档口ID")
@NotNull(message = "档口ID不能为空!")
@ApiModelProperty(value = "档口ID", required = true)
private Long storeId;
@ApiModelProperty(value = "支付金额")
@NotNull(message = "支付金额不能为空!")
@ApiModelProperty(value = "支付金额", required = true)
private BigDecimal payPrice;
@NotNull(message = "支付方式不能为空!")
@ApiModelProperty(value = "支付方式", required = true)
private Integer payWay;
@ApiModelProperty(value = "交易密码")
private String transactionPassword;

View File

@ -13,15 +13,11 @@ import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.xkt.domain.Store;
import com.ruoyi.xkt.domain.StoreMember;
import com.ruoyi.xkt.dto.advertRound.AdRoundStoreBoughtResDTO;
import com.ruoyi.xkt.dto.storeMember.StoreMemberCreateDTO;
import com.ruoyi.xkt.dto.storeMember.StoreMemberExpireResDTO;
import com.ruoyi.xkt.dto.storeMember.StoreMemberPageDTO;
import com.ruoyi.xkt.dto.storeMember.StoreMemberPageResDTO;
import com.ruoyi.xkt.enums.NoticeOwnerType;
import com.ruoyi.xkt.enums.NoticeType;
import com.ruoyi.xkt.enums.StoreMemberLevel;
import com.ruoyi.xkt.enums.UserNoticeType;
import com.ruoyi.xkt.enums.*;
import com.ruoyi.xkt.mapper.StoreMapper;
import com.ruoyi.xkt.mapper.StoreMemberMapper;
import com.ruoyi.xkt.service.IAssetService;
@ -34,8 +30,10 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
/**
@ -67,26 +65,49 @@ public class StoreMemberServiceImpl implements IStoreMemberService {
if (!SecurityUtils.isAdmin()) {
throw new ServiceException("当前用户非管理员账号,无权限操作!", HttpStatus.ERROR);
}
//校验推广支付方式是否存在
AdPayWay.of(createDTO.getPayWay());
// 校验使用余额情况下,密码是否正确
if (Objects.equals(createDTO.getPayWay(), AdPayWay.BALANCE.getValue())
&& !assetService.checkTransactionPassword(createDTO.getStoreId(), createDTO.getTransactionPassword())) {
throw new ServiceException("支付密码错误!请重新输入", HttpStatus.ERROR);
}
Optional.ofNullable(createDTO.getStoreId()).orElseThrow(() -> new RuntimeException("档口ID不能为空!"));
Optional.ofNullable(createDTO.getPayPrice()).orElseThrow(() -> new RuntimeException("购买金额不能为空!"));
StoreMember storeMember = new StoreMember();
storeMember.setStoreId(createDTO.getStoreId());
// 最低等级会员:实力质造
storeMember.setLevel(StoreMemberLevel.STRENGTH_CONSTRUCT.getValue());
storeMember.setStartTime(java.sql.Date.valueOf(LocalDate.now()));
// 过期时间设置为1年后
storeMember.setEndTime(java.sql.Date.valueOf(LocalDate.now().plusYears(1)));
storeMember.setVoucherDate(java.sql.Date.valueOf(LocalDate.now()));
storeMember.setCreateBy(SecurityUtils.getUsername());
int count = this.storeMemberMapper.insert(storeMember);
// 将档口权重增加1
Store store = Optional.ofNullable(this.storeMapper.selectOne(new LambdaQueryWrapper<Store>()
.eq(Store::getId, createDTO.getStoreId()).eq(Store::getDelFlag, Constants.UNDELETED)))
.orElseThrow(() -> new ServiceException("档口不存在!", HttpStatus.ERROR));
store.setStoreWeight(ObjectUtils.defaultIfNull(store.getStoreWeight(), 0) + 1);
this.storeMapper.updateById(store);
// 将档口会员信息添加到 redis 中
redisCache.setCacheObject(CacheConstants.STORE_MEMBER + createDTO.getStoreId(), storeMember);
// 看是否已存在会员
StoreMember storeMember = this.storeMemberMapper.selectOne(new LambdaQueryWrapper<StoreMember>()
.eq(StoreMember::getStoreId, createDTO.getStoreId()).eq(StoreMember::getDelFlag, Constants.UNDELETED));
int count;
// 已存在会员,则在之前的基础上续期
if (ObjectUtils.isNotEmpty(storeMember)) {
// 续期结束时间在原来基础上再加一年
Date memberEndTime = storeMember.getEndTime();
// 直接增加一年
Date memberEndTimePlus = Date.from(memberEndTime.toInstant().atZone(ZoneId.systemDefault()).toLocalDate()
.plusYears(1).atStartOfDay(ZoneId.systemDefault()).toInstant());
storeMember.setEndTime(memberEndTimePlus);
storeMember.setUpdateBy(SecurityUtils.getUsername());
count = this.storeMemberMapper.updateById(storeMember);
} else {
storeMember = new StoreMember();
storeMember.setStoreId(createDTO.getStoreId());
// 最低等级会员:实力质造
storeMember.setLevel(StoreMemberLevel.STRENGTH_CONSTRUCT.getValue());
storeMember.setStartTime(java.sql.Date.valueOf(LocalDate.now()));
// 过期时间设置为1年后
storeMember.setEndTime(java.sql.Date.valueOf(LocalDate.now().plusYears(1)));
storeMember.setVoucherDate(java.sql.Date.valueOf(LocalDate.now()));
storeMember.setCreateBy(SecurityUtils.getUsername());
count = this.storeMemberMapper.insert(storeMember);
// 将档口权重增加1
Store store = Optional.ofNullable(this.storeMapper.selectOne(new LambdaQueryWrapper<Store>()
.eq(Store::getId, createDTO.getStoreId()).eq(Store::getDelFlag, Constants.UNDELETED)))
.orElseThrow(() -> new ServiceException("档口不存在!", HttpStatus.ERROR));
store.setStoreWeight(ObjectUtils.defaultIfNull(store.getStoreWeight(), 0) + 1);
this.storeMapper.updateById(store);
// 将档口会员信息添加到 redis 中
redisCache.setCacheObject(CacheConstants.STORE_MEMBER + createDTO.getStoreId(), storeMember);
}
// 新增订购成功的消息通知
this.noticeService.createSingleNotice(SecurityUtils.getUserId(), "购买会员成功!", NoticeType.NOTICE.getValue(), NoticeOwnerType.SYSTEM.getValue(),
createDTO.getStoreId(), UserNoticeType.SYSTEM_MSG.getValue(), "恭喜您!购买:实力质造 会员成功!");