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 = "支付金额不能为空!") @NotNull(message = "支付金额不能为空!")
@ApiModelProperty(value = "支付金额", required = true) @ApiModelProperty(value = "支付金额", required = true)
private BigDecimal payPrice; private BigDecimal payPrice;
@NotNull(message = "交易密码不能为空!") @NotNull(message = "支付方式不能为空!")
@ApiModelProperty(value = "交易密码", required = true) @ApiModelProperty(value = "支付方式", required = true)
private Integer payWay;
@ApiModelProperty(value = "交易密码")
private String transactionPassword; private String transactionPassword;
} }

View File

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

View File

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