This commit is contained in:
张良(004796)
2024-01-03 18:30:13 +08:00
parent 1641b5f871
commit b22b4fba48
20 changed files with 393 additions and 65 deletions

View File

@@ -17,4 +17,6 @@ public interface UserMemberService extends IService<UserMember> {
Page<UserMemberAdminVo> pageAdmin(PageQuery pageQuery, UserMemberAdminVo bo);
UserMember getByUserId(Long userId);
void relieveMember(Long id);
}

View File

@@ -1,7 +1,11 @@
package com.ruoyi.cai.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.cai.domain.VipOrder;
import com.ruoyi.cai.dto.admin.vo.VipOrderAdminVo;
import com.ruoyi.cai.dto.dto.AddVipOrderDto;
import com.ruoyi.common.core.domain.PageQuery;
/**
* VIP订单Service接口
@@ -11,4 +15,13 @@ import com.ruoyi.cai.domain.VipOrder;
*/
public interface VipOrderService extends IService<VipOrder> {
VipOrder updateVipOrderAdmin(Long memberPriceId, Long userId);
VipOrder addVipOrder(AddVipOrderDto addVipOrder);
VipOrder getByOrderNo(String orderNo);
void orderSuccess(String orderNo);
Page<VipOrderAdminVo> pageAdmin(PageQuery pageQuery, VipOrderAdminVo bo);
}

View File

@@ -29,6 +29,14 @@ public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> impl
@Autowired
private ConsumeLogService consumeLogService;
@Autowired
private UserInviteService userInviteService;
@Autowired
private UserService userService;
@Autowired
private UnionUserService unionUserService;
@Autowired
private UnionService unionService;
@Override
@@ -77,15 +85,28 @@ public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> impl
consumeLogService.save(consumeLog);
return consumeLog;
}
@Autowired
private UserInviteService userInviteService;
@Autowired
private UserService userService;
@Autowired
private UnionUserService unionUserService;
@Autowired
private UnionService unionService;
@Override
@Transactional(rollbackFor = Exception.class)
public void withdraw(Long userId, Long incomeCoin){
Account account = this.getByUserId(userId);
if(account == null){
throw new ServiceException("无效账号");
}
if(account.getIncomeCoin() < incomeCoin){
throw new ServiceException(""+incomeCoin+"紫贝才可提现");
}
long incs = baseMapper.decrIncomeCoin(userId, incomeCoin);
if(incs <= 0){
throw new ServiceException(""+incomeCoin+"紫贝才可提现");
}
// TODO
}
@Override
public Page<AccountAdminVo> pageAdmin(PageQuery pageQuery, AccountAdminVo bo) {
return baseMapper.pageAdmin(pageQuery.build(),bo);
}
private void fenxiao(CaiConsumeLog consumeLog){
if(ConsumeLogType.PAY.getCode().equals(consumeLog.getType())){
@@ -153,25 +174,4 @@ public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> impl
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public void withdraw(Long userId, Long incomeCoin){
Account account = this.getByUserId(userId);
if(account == null){
throw new ServiceException("无效账号");
}
if(account.getIncomeCoin() < incomeCoin){
throw new ServiceException(""+incomeCoin+"紫贝才可提现");
}
long incs = baseMapper.decrIncomeCoin(userId, incomeCoin);
if(incs <= 0){
throw new ServiceException(""+incomeCoin+"紫贝才可提现");
}
}
@Override
public Page<AccountAdminVo> pageAdmin(PageQuery pageQuery, AccountAdminVo bo) {
return baseMapper.pageAdmin(pageQuery.build(),bo);
}
}

View File

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.cai.domain.UserMember;
import com.ruoyi.cai.dto.admin.vo.UserMemberAdminVo;
import com.ruoyi.cai.mapper.UserMemberMapper;
import com.ruoyi.cai.pay.MemberStatusEnum;
import com.ruoyi.cai.service.UserMemberService;
import com.ruoyi.common.core.domain.PageQuery;
import org.springframework.stereotype.Service;
@@ -28,4 +29,11 @@ public class UserMemberServiceImpl extends ServiceImpl<UserMemberMapper, UserMem
public UserMember getByUserId(Long userId) {
return this.getOne(Wrappers.lambdaQuery(UserMember.class).eq(UserMember::getUserId,userId).last("limit 1"));
}
@Override
public void relieveMember(Long id) {
this.update(Wrappers.lambdaUpdate(UserMember.class)
.eq(UserMember::getId,id)
.set(UserMember::getMemberStatus, MemberStatusEnum.FAIL.getCode()));
}
}

View File

@@ -1,12 +1,30 @@
package com.ruoyi.cai.service.impl;
import com.alibaba.fastjson2.JSON;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.cai.domain.MemberPrice;
import com.ruoyi.cai.domain.UserMember;
import com.ruoyi.cai.domain.VipOrder;
import com.ruoyi.cai.dto.admin.vo.VipOrderAdminVo;
import com.ruoyi.cai.dto.dto.AddVipOrderDto;
import com.ruoyi.cai.mapper.VipOrderMapper;
import com.ruoyi.cai.service.MemberSkillService;
import com.ruoyi.cai.service.VipOrderService;
import com.ruoyi.cai.pay.MemberStatusEnum;
import com.ruoyi.cai.pay.OrderNoUtil;
import com.ruoyi.cai.pay.PayStatusEnum;
import com.ruoyi.cai.pay.PlatformTypeEnum;
import com.ruoyi.cai.service.*;
import com.ruoyi.common.core.domain.PageQuery;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.helper.LoginHelper;
import com.ruoyi.common.utils.ServletUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
/**
* VIP订单Service业务层处理
@@ -15,10 +33,145 @@ import org.springframework.stereotype.Service;
* @date 2024-01-03
*/
@Service
@Slf4j
public class VipOrderServiceImpl extends ServiceImpl<VipOrderMapper,VipOrder> implements VipOrderService {
public void addVipOrder(){
@Autowired
private MemberPriceService memberPriceService;
@Autowired
private ConsumeLogService consumeLogService;
@Autowired
private UserService userService;
@Autowired
private UserMemberService userMemberService;
/**
* 强制修改VIP
* @return
*/
@Override
@Transactional(rollbackFor = Exception.class)
public VipOrder updateVipOrderAdmin(Long memberPriceId, Long userId){
MemberPrice memberPrice = memberPriceService.getById(memberPriceId);
if(memberPrice == null){
throw new ServiceException("VIP价格错误");
}
VipOrder vipOrder = new VipOrder();
vipOrder.setUserId(userId);
vipOrder.setVipId(memberPrice.getId());
vipOrder.setVipType(memberPrice.getMemberType());
vipOrder.setVipName(memberPrice.getName());
vipOrder.setVipExpire(memberPrice.getExpires());
vipOrder.setVipLongs(memberPrice.getLongs());
vipOrder.setPrice(memberPrice.getPrice());
vipOrder.setOrderNo(OrderNoUtil.createOrderNo(OrderNoUtil.VIP_ORDER_SUB));
vipOrder.setPayStatus(PayStatusEnum.NO_PAY.getCode());
vipOrder.setPlatformType(PlatformTypeEnum.ADMIN.name());
vipOrder.setOperateIp(ServletUtils.getClientIP());
vipOrder.setAdmin(true);
vipOrder.setAdminId(LoginHelper.getUserId());
this.save(vipOrder);
LocalDateTime now = LocalDateTime.now();
UserMember userMember = userMemberService.getByUserId(userId);
if(userMember == null){
userMember = new UserMember();
}
userMember.setUserId(userId);
userMember.setMemberType(memberPrice.getMemberType());
userMember.setExpire(memberPrice.getExpires());
userMember.setLongs(memberPrice.getLongs());
userMember.setExpireDate(now.plusDays(memberPrice.getExpires()));
userMember.setCreateTime(now);
userMember.setMemberStatus(MemberStatusEnum.NORMAL.getCode());
userMemberService.saveOrUpdate(userMember);
return vipOrder;
}
@Override
public VipOrder addVipOrder(AddVipOrderDto addVipOrder){
Long memberPriceId = addVipOrder.getMemberPriceId();
MemberPrice memberPrice = memberPriceService.getById(memberPriceId);
if(memberPrice == null){
throw new ServiceException("VIP价格错误");
}
VipOrder vipOrder = new VipOrder();
vipOrder.setUserId(addVipOrder.getUserId());
vipOrder.setVipId(memberPrice.getId());
vipOrder.setVipType(memberPrice.getMemberType());
vipOrder.setVipName(memberPrice.getName());
vipOrder.setVipExpire(memberPrice.getExpires());
vipOrder.setVipLongs(memberPrice.getLongs());
vipOrder.setPrice(memberPrice.getPrice());
vipOrder.setOrderNo(OrderNoUtil.createOrderNo(OrderNoUtil.VIP_ORDER_SUB));
vipOrder.setPayStatus(PayStatusEnum.READY_PAY.getCode());
this.save(vipOrder);
return vipOrder;
}
@Override
public VipOrder getByOrderNo(String orderNo){
return this.getOne(Wrappers.lambdaQuery(VipOrder.class).eq(VipOrder::getOrderNo,orderNo)
.last("limit 1"));
}
@Override
@Transactional(rollbackFor = Exception.class)
public void orderSuccess(String orderNo){
VipOrder vipOrder = this.getByOrderNo(orderNo);
if(vipOrder == null){
throw new ServiceException("订单不存在");
}
if(!PayStatusEnum.READY_PAY.getCode().equals(vipOrder.getPayStatus())){
log.error("订单支付状态错误!vipOrder={}", JSON.toJSONString(vipOrder));
throw new ServiceException("订单支付状态错误!");
}
boolean update = this.update(Wrappers.lambdaUpdate(VipOrder.class)
.eq(VipOrder::getOrderNo, vipOrder.getOrderNo())
.eq(VipOrder::getPayStatus, PayStatusEnum.READY_PAY.getCode())
.set(VipOrder::getPayStatus, PayStatusEnum.PAY.getCode()));
if(!update){
log.error("订单支付状态错误!vipOrder={}", JSON.toJSONString(vipOrder));
throw new ServiceException("订单支付状态错误!");
}
// 新增会员
incVip(vipOrder.getUserId(),vipOrder.getVipType(),vipOrder.getVipExpire(),vipOrder.getVipLongs());
}
public boolean incVip(Long userId,Integer memberType,Integer expire,Integer longs){
UserMember userMember = userMemberService.getByUserId(userId);
LocalDateTime createTime = LocalDateTime.now();
// 以前会员失效 , 买了不同的会员等级 不做续费操作
if(userMember == null ||
!MemberStatusEnum.NORMAL.getCode().equals(userMember.getMemberStatus()) || // 会员不可用
userMember.getExpireDate().isBefore(createTime) || // 时间已经失效了 定时任务还没有执行
!memberType.equals(userMember.getMemberType()) // 会员类型变更
){
if(userMember == null){
userMember = new UserMember();
}
userMember.setUserId(userId);
userMember.setMemberType(memberType);
userMember.setExpire(expire);
userMember.setLongs(longs);
userMember.setExpireDate(createTime.plusDays(expire));
userMember.setCreateTime(createTime);
userMember.setMemberStatus(MemberStatusEnum.NORMAL.getCode());
userMemberService.saveOrUpdate(userMember);
return true;
}
if(longs == 1){ // 已经是永久会员还买? 什么都不干
return true;
}
userMember.setCreateTime(createTime);
userMember.setExpireDate(userMember.getExpireDate().plusDays(expire));
userMember.setLongs(longs);
userMemberService.saveOrUpdate(userMember);
return true;
}
@Override
public Page<VipOrderAdminVo> pageAdmin(PageQuery pageQuery, VipOrderAdminVo bo) {
return baseMapper.pageAdmin(pageQuery.build(),bo);
}
}