diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeMember/StoreMemberCreateVO.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeMember/StoreMemberCreateVO.java index 52c460bf7..9eb895ef6 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeMember/StoreMemberCreateVO.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeMember/StoreMemberCreateVO.java @@ -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; } diff --git a/xkt/src/main/java/com/ruoyi/xkt/dto/storeMember/StoreMemberCreateDTO.java b/xkt/src/main/java/com/ruoyi/xkt/dto/storeMember/StoreMemberCreateDTO.java index b1100fc7c..39a471139 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/dto/storeMember/StoreMemberCreateDTO.java +++ b/xkt/src/main/java/com/ruoyi/xkt/dto/storeMember/StoreMemberCreateDTO.java @@ -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; diff --git a/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreMemberServiceImpl.java b/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreMemberServiceImpl.java index fdc25c3e5..3828ddb31 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreMemberServiceImpl.java +++ b/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreMemberServiceImpl.java @@ -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() - .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() + .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() + .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(), "恭喜您!购买:实力质造 会员成功!");