This commit is contained in:
77
2024-03-24 19:07:45 +08:00
parent d0b1f961e8
commit e6611ea05e
45 changed files with 935 additions and 104 deletions

View File

@@ -1,7 +1,16 @@
package com.ruoyi.xq.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.common.core.domain.PageQuery;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.xq.domain.AccountChangeLog;
import com.ruoyi.xq.domain.User;
import com.ruoyi.xq.dto.admin.log.AccountChangeLogAdminVo;
import com.ruoyi.xq.dto.admin.user.req.UpdateIncomeCoinReq;
import com.ruoyi.xq.enums.user.AccountChangeCodeEnum;
import java.math.BigDecimal;
/**
* 账户明细Service接口
@@ -11,4 +20,11 @@ import com.ruoyi.xq.domain.AccountChangeLog;
*/
public interface AccountChangeLogService extends IService<AccountChangeLog> {
void saveLogNoAdminOfConsumer(User user,AccountChangeCodeEnum accountChangeCodeEnum, BigDecimal price,String traceId, Long tarUserId);
void saveLogNoAdmin(Long userId, AccountChangeCodeEnum accountChangeCodeEnum, BigDecimal withdrawPrice, String traceId);
void saveLogAdminOfSystem(User user, AccountChangeCodeEnum accountChangeCodeEnum, UpdateIncomeCoinReq bo, LoginUser loginUser);
Page<AccountChangeLogAdminVo> pageAdmin(PageQuery pageQuery, AccountChangeLogAdminVo bo);
}

View File

@@ -2,6 +2,7 @@ package com.ruoyi.xq.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.xq.domain.ConsumeLog;
import org.springframework.transaction.annotation.Transactional;
/**
* 分销记录Service接口
@@ -11,4 +12,8 @@ import com.ruoyi.xq.domain.ConsumeLog;
*/
public interface ConsumeLogService extends IService<ConsumeLog> {
ConsumeLog calculateInitFenxiao(ConsumeLog consumeLog);
@Transactional(rollbackFor = Exception.class)
void dealFenxiao(Long id, boolean system);
}

View File

@@ -3,11 +3,12 @@ package com.ruoyi.xq.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.common.core.domain.PageQuery;
import com.ruoyi.xq.domain.ConsumeLog;
import com.ruoyi.xq.domain.UserExtend;
import com.ruoyi.xq.dto.admin.user.UserExtendAdminVo;
import com.ruoyi.xq.dto.admin.user.req.UpdateIncomeCoinReq;
import com.ruoyi.xq.dto.admin.user.req.UpdateWxTransNumReq;
import org.springframework.transaction.annotation.Transactional;
import com.ruoyi.xq.enums.user.AccountChangeCodeEnum;
import java.math.BigDecimal;
@@ -19,14 +20,23 @@ import java.math.BigDecimal;
*/
public interface UserExtendService extends IService<UserExtend> {
boolean withdraw(Long userId, BigDecimal withdrawPrice);
boolean withdraw(Long userId, BigDecimal withdrawPrice,String traceId);
void resetWithdraw(Long userId, BigDecimal withdrawMoney, String traceId);
boolean incsWithdrawCount(Long userId, BigDecimal withdrawMonty);
boolean incsWithdrawTotal(Long userId, BigDecimal withdrawMonty);
boolean incsConsumeTotal(Long userId, BigDecimal consumeMonty);
Page<UserExtendAdminVo> pageAdmin(PageQuery pageQuery, UserExtendAdminVo bo);
void updateIncomeCoin(UpdateIncomeCoinReq bo);
boolean distribution(ConsumeLog consumer, Long userId, BigDecimal amount, AccountChangeCodeEnum changeCodeEnum);
void updateWxTransNum(UpdateWxTransNumReq bo);
UserExtend getByUserId(Long id);
}

View File

@@ -19,4 +19,7 @@ public interface UserInviteService extends IService<UserInvite> {
void unBindInviteUser(Long userId);
Page<UserInviteAdminVo> pageAdmin(PageQuery pageQuery, UserInviteAdminVo bo);
UserInvite getByUserId(Long sourceUserId);
}

View File

@@ -5,6 +5,10 @@ import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.common.core.domain.PageQuery;
import com.ruoyi.xq.domain.VipOrder;
import com.ruoyi.xq.dto.admin.vipOrder.VipOrderAdminVo;
import com.ruoyi.xq.dto.app.pay.ConsumeResp;
import com.ruoyi.xq.enums.pay.PlatformTypeEnum;
import java.util.Map;
/**
* VIP订单Service接口
@@ -16,4 +20,8 @@ public interface VipOrderService extends IService<VipOrder> {
VipOrder createVipOrder(Long userId, Long vipPriceSettingId);
Page<VipOrderAdminVo> pageApp(PageQuery pageQuery, VipOrderAdminVo bo);
VipOrder getByOrderNo(String orderNo);
ConsumeResp doSuccess(String orderNo, Map<String, String> params, String appId, PlatformTypeEnum platformTypeEnum);
}

View File

@@ -1,12 +1,29 @@
package com.ruoyi.xq.service.impl;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.core.domain.PageQuery;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.xq.domain.AccountChangeLog;
import com.ruoyi.xq.domain.User;
import com.ruoyi.xq.dto.admin.log.AccountChangeLogAdminVo;
import com.ruoyi.xq.dto.admin.user.req.UpdateIncomeCoinReq;
import com.ruoyi.xq.dto.common.user.MinUser;
import com.ruoyi.xq.enums.user.AccountCateEnum;
import com.ruoyi.xq.enums.user.AccountChangeCodeEnum;
import com.ruoyi.xq.mapper.AccountChangeLogMapper;
import com.ruoyi.xq.service.AccountChangeLogService;
import com.ruoyi.xq.service.UserService;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* 账户明细Service业务层处理
*
@@ -17,4 +34,95 @@ import org.springframework.stereotype.Service;
@Service
public class AccountChangeLogServiceImpl extends ServiceImpl<AccountChangeLogMapper,AccountChangeLog> implements AccountChangeLogService {
@Autowired
private UserService userService;
@Override
public void saveLogNoAdminOfConsumer(User user, AccountChangeCodeEnum accountChangeCodeEnum, BigDecimal price, String traceId, Long tarUserId) {
AccountChangeLog accountChangeLog = new AccountChangeLog();
accountChangeLog.setUserId(user.getId());
accountChangeLog.setUsercode(user.getUsercode());
accountChangeLog.setTarUserId(tarUserId);
MinUser tarMinUser = userService.getMinUserById(tarUserId);
if(tarMinUser != null){
accountChangeLog.setTarUsercode(tarMinUser.getUsercode());
}
accountChangeLog.setCateId(accountChangeCodeEnum.getCate().getCode());
accountChangeLog.setChangeType(accountChangeCodeEnum.getCode());
accountChangeLog.setChangeValue(price);
accountChangeLog.setTraceId(traceId);
accountChangeLog.setIsAdmin(0);
this.save(accountChangeLog);
}
@Override
public void saveLogNoAdmin(Long userId, AccountChangeCodeEnum accountChangeCodeEnum, BigDecimal withdrawPrice, String traceId) {
MinUser minUser = userService.getMinUserById(userId);
AccountChangeLog accountChangeLog = new AccountChangeLog();
accountChangeLog.setUserId(minUser.getId());
accountChangeLog.setUsercode(minUser.getUsercode());
accountChangeLog.setCateId(accountChangeCodeEnum.getCate().getCode());
accountChangeLog.setChangeType(accountChangeCodeEnum.getCode());
accountChangeLog.setChangeValue(withdrawPrice);
accountChangeLog.setTraceId(traceId);
accountChangeLog.setIsAdmin(0);
this.save(accountChangeLog);
}
@Override
public void saveLogAdminOfSystem(User user, AccountChangeCodeEnum accountChangeCodeEnum, UpdateIncomeCoinReq bo, LoginUser loginUser) {
AccountChangeLog accountChangeLog = new AccountChangeLog();
accountChangeLog.setUserId(user.getId());
accountChangeLog.setUsercode(user.getUsercode());
accountChangeLog.setCateId(accountChangeCodeEnum.getCate().getCode());
accountChangeLog.setChangeType(accountChangeCodeEnum.getCode());
accountChangeLog.setChangeValue(bo.getRechargeCoin());
accountChangeLog.setRemark(bo.getRemark());
accountChangeLog.setIsAdmin(1);
if(loginUser != null){
accountChangeLog.setAdminId(loginUser.getUserId());
accountChangeLog.setAdminName(loginUser.getUsername());
}
this.save(accountChangeLog);
}
@Override
public Page<AccountChangeLogAdminVo> pageAdmin(PageQuery pageQuery, AccountChangeLogAdminVo bo) {
Page<AccountChangeLogAdminVo> result = baseMapper.pageAdmin(pageQuery.build(), bo);
List<AccountChangeLogAdminVo> records = result.getRecords();
List<Long> userIds = records.stream().map(AccountChangeLog::getUserId).collect(Collectors.toList());
List<User> usersList = userService.listByIds(userIds);
Map<Long, User> userMap = usersList.stream().collect(Collectors.toMap(User::getId, Function.identity()));
for (AccountChangeLogAdminVo record : records) {
User user = userMap.get(record.getUserId());
if(user != null){
record.setNickname(user.getNickname());
record.setAvatar(user.getAvatar());
record.setMobile(user.getMobile());
}
AccountChangeCodeEnum accountChangeCodeEnum = AccountChangeCodeEnum.getByCode(record.getChangeType());
if(accountChangeCodeEnum != null){
AccountCateEnum cate = accountChangeCodeEnum.getCate();
record.setCateName(cate.getText());
switch (cate){
case SYSTEM_TRANS:
double price = record.getChangeValue().doubleValue();
String content = String.format("系统调整手动%s收益: %s", price > 0 ? "新增" : "减少", price);
record.setContent(content);
break;
case WITHDRAW:
record.setContent(accountChangeCodeEnum.getText());
break;
case AWARD_INVITE:
record.setContent(accountChangeCodeEnum.getText());
break;
default:
break;
}
}
}
return result;
}
}

View File

@@ -1,10 +1,31 @@
package com.ruoyi.xq.service.impl;
import com.alibaba.fastjson2.JSON;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.helper.LoginHelper;
import com.ruoyi.xq.domain.ConsumeLog;
import com.ruoyi.xq.domain.User;
import com.ruoyi.xq.domain.UserExtend;
import com.ruoyi.xq.domain.UserInvite;
import com.ruoyi.xq.enums.consumer.ConsumeLogStatus;
import com.ruoyi.xq.enums.consumer.ConsumerTypeEnum;
import com.ruoyi.xq.enums.user.AccountChangeCodeEnum;
import com.ruoyi.xq.mapper.ConsumeLogMapper;
import com.ruoyi.xq.service.ConsumeLogService;
import com.ruoyi.xq.service.UserExtendService;
import com.ruoyi.xq.service.UserInviteService;
import com.ruoyi.xq.service.UserService;
import com.ruoyi.xq.util.CaiNumUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.BooleanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
/**
* 分销记录Service业务层处理
@@ -13,6 +34,98 @@ import org.springframework.stereotype.Service;
* @date 2024-03-20
*/
@Service
@Slf4j
public class ConsumeLogServiceImpl extends ServiceImpl<ConsumeLogMapper,ConsumeLog> implements ConsumeLogService {
@Autowired
private UserInviteService userInviteService;
@Autowired
private UserService userService;
@Autowired
private UserExtendService userExtendService;
@Override
public ConsumeLog calculateInitFenxiao(ConsumeLog consumeLog){
Long sourceUserId = consumeLog.getSourceUserId();
UserInvite userInvite = userInviteService.getByUserId(sourceUserId);
if(userInvite != null){
User oneUser = userService.getById(userInvite.getInviteId());
if(oneUser != null){
UserExtend userExtend = userExtendService.getByUserId(oneUser.getId());
consumeLog.setOneRate(userExtend.getVipInviteRate());
consumeLog.setOneUserId(oneUser.getId());
consumeLog.setOneUsercode(oneUser.getUsercode());
consumeLog.setOnePhone(oneUser.getMobile());
consumeLog.setOneJoin(userInvite.getEnableRate());
consumeLog.setOneAmount(CaiNumUtil.coin(consumeLog.getAmount(),consumeLog.getOneRate()));
}
}
consumeLog.setCalculateStatus(true);
return consumeLog;
}
@Override
@Transactional(rollbackFor = Exception.class)
public void dealFenxiao(Long id,boolean system){
ConsumeLog consumer = this.getById(id);
if(consumer == null){
return;
}
if(!ConsumeLogStatus.READY.getCode().equals(consumer.getStatus())){
// 已经分销完成,无需继续分销
return;
}
if(!BooleanUtils.isTrue(consumer.getCalculateStatus())){
// 先计算
boolean update = this.update(Wrappers.lambdaUpdate(ConsumeLog.class)
.eq(ConsumeLog::getId, id)
.eq(ConsumeLog::getCalculateStatus, false)
.set(ConsumeLog::getOpCreate, LocalDateTime.now())
.set(ConsumeLog::getCalculateStatus, true));
if(update){
consumer = calculateInitFenxiao(consumer);
consumer.setCalculateStatus(true);
this.updateById(consumer);
}
}
String opName = "system";
Long opId = null;
if(!system){
LoginUser loginUser = LoginHelper.getLoginUser();
if(loginUser != null){
opName = loginUser.getUsername();
opId = loginUser.getUserId();
}
}
// 分销
boolean update = this.update(Wrappers.lambdaUpdate(ConsumeLog.class)
.eq(ConsumeLog::getId, id)
.eq(ConsumeLog::getStatus, ConsumeLogStatus.READY.getCode())
.set(ConsumeLog::getOpName, opName)
.set(ConsumeLog::getOpId, opId)
.set(ConsumeLog::getStatus, ConsumeLogStatus.ALREADY.getCode()));
if(!update){
log.error("无需分销 consumer={}", JSON.toJSONString(consumer));
return;
}
ConsumerTypeEnum code = ConsumerTypeEnum.getByCode(consumer.getType());
if(code == null){
log.error("分销失败 BusinessEnum状态错误! consumerLog={}",JSON.toJSONString(consumer));
throw new ServiceException("分销失败!请联系管理员排查问题!");
}
try {
boolean oneInviteSend = false;
// 计算一级
if(consumer.getOneUserId() != null && BooleanUtils.isTrue(consumer.getOneJoin())
&& consumer.getOneAmount() != null && consumer.getOneAmount().doubleValue() > 0){
AccountChangeCodeEnum changeCodeEnum = ConsumerTypeEnum.getOneInviteChange(code);
oneInviteSend = userExtendService.distribution(consumer, consumer.getOneUserId(), consumer.getOneAmount(), changeCodeEnum);
}
}catch (Exception e){
log.error("分销发生未知错误,请联系开发检查!",e);
}
}
}

View File

@@ -1,11 +1,13 @@
package com.ruoyi.xq.service.impl;
import cn.hutool.core.util.NumberUtil;
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.common.core.domain.PageQuery;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.helper.LoginHelper;
import com.ruoyi.xq.domain.ConsumeLog;
import com.ruoyi.xq.domain.User;
import com.ruoyi.xq.domain.UserExtend;
import com.ruoyi.xq.domain.WxTransOrder;
@@ -14,16 +16,20 @@ import com.ruoyi.xq.dto.admin.user.req.UpdateIncomeCoinReq;
import com.ruoyi.xq.dto.admin.user.req.UpdateWxTransNumReq;
import com.ruoyi.xq.enums.common.OrderTypeEnum;
import com.ruoyi.xq.enums.common.SystemConfigEnum;
import com.ruoyi.xq.enums.consumer.ConsumerTypeEnum;
import com.ruoyi.xq.enums.pay.PayStatusEnum;
import com.ruoyi.xq.enums.pay.PlatformTypeEnum;
import com.ruoyi.xq.enums.user.AccountChangeCodeEnum;
import com.ruoyi.xq.enums.wxtrans.WxTransSourceEnum;
import com.ruoyi.xq.manager.OrderNoUtil;
import com.ruoyi.xq.manager.SystemConfigManager;
import com.ruoyi.xq.mapper.UserExtendMapper;
import com.ruoyi.xq.service.AccountChangeLogService;
import com.ruoyi.xq.service.UserExtendService;
import com.ruoyi.xq.service.UserService;
import com.ruoyi.xq.service.WxTransOrderService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -38,6 +44,7 @@ import java.math.BigDecimal;
*/
@RequiredArgsConstructor
@Service
@Slf4j
public class UserExtendServiceImpl extends ServiceImpl<UserExtendMapper,UserExtend> implements UserExtendService {
@Autowired
private UserService userService;
@@ -45,12 +52,14 @@ public class UserExtendServiceImpl extends ServiceImpl<UserExtendMapper,UserExte
private WxTransOrderService wxTransOrderService;
@Autowired
private SystemConfigManager systemConfigManager;
@Autowired
private AccountChangeLogService accountChangeLogService;
@Override
public boolean withdraw(Long userId, BigDecimal withdrawPrice){
public boolean withdraw(Long userId, BigDecimal withdrawPrice,String traceId){
boolean success = baseMapper.decrIncome(userId, withdrawPrice);
if(success){
// TODO 记录金额流水
accountChangeLogService.saveLogNoAdmin(userId, AccountChangeCodeEnum.WITHDRAW, withdrawPrice, traceId);
}
return success;
}
@@ -59,7 +68,7 @@ public class UserExtendServiceImpl extends ServiceImpl<UserExtendMapper,UserExte
public void resetWithdraw(Long userId, BigDecimal withdrawMoney, String traceId) {
boolean success = baseMapper.incrIncome(userId, withdrawMoney);
if(success){
// TODO 记录金额流水
accountChangeLogService.saveLogNoAdmin(userId, AccountChangeCodeEnum.WITHDRAW_FAIL, withdrawMoney, traceId);
}
}
@@ -69,10 +78,15 @@ public class UserExtendServiceImpl extends ServiceImpl<UserExtendMapper,UserExte
* @param withdrawMonty
*/
@Override
public boolean incsWithdrawCount(Long userId, BigDecimal withdrawMonty){
public boolean incsWithdrawTotal(Long userId, BigDecimal withdrawMonty){
return baseMapper.incsWithdrawCount(userId,withdrawMonty);
}
@Override
public boolean incsConsumeTotal(Long userId, BigDecimal consumeMonty) {
return baseMapper.incsConsumeTotal(userId,consumeMonty);
}
@Override
public Page<UserExtendAdminVo> pageAdmin(PageQuery pageQuery, UserExtendAdminVo bo) {
@@ -90,6 +104,31 @@ public class UserExtendServiceImpl extends ServiceImpl<UserExtendMapper,UserExte
if(!income){
throw new ServiceException("调整失败,请保证调整后金额不为负数");
}
if(bo.getRechargeCoin().doubleValue() > 0){ // 正数
accountChangeLogService.saveLogAdminOfSystem(user, AccountChangeCodeEnum.SYSTEM_INCOME_COIN_INCS, bo,LoginHelper.getLoginUser());
}else if(bo.getRechargeCoin().doubleValue() < 0){ // 负数
accountChangeLogService.saveLogAdminOfSystem(user, AccountChangeCodeEnum.SYSTEM_INCOME_COIN_INCS, bo,LoginHelper.getLoginUser());
}
}
@Override
public boolean distribution(ConsumeLog consumer, Long userId, BigDecimal amount, AccountChangeCodeEnum changeCodeEnum) {
User user = userService.getById(userId);
UserExtend userExtend = this.getByUserId(userId);
if(userExtend == null || user == null){
log.error("分销失败,无效账号 userId={}",userId);
return false;
}
if(amount == null || changeCodeEnum == null){
log.error("分销失败,参数错误 amount={},accountChangeEnum={}",amount,changeCodeEnum);
return false;
}
baseMapper.incrIncome(userId, amount);
if(ConsumerTypeEnum.VIP.getCode().equals(consumer.getType())){
accountChangeLogService.saveLogNoAdminOfConsumer(user, changeCodeEnum,amount,consumer.getTraceId(), consumer.getSourceUserId());
return true;
}
return false;
}
@Override
@@ -119,4 +158,9 @@ public class UserExtendServiceImpl extends ServiceImpl<UserExtendMapper,UserExte
wxTransOrderService.save(wxTransOrder);
}
@Override
public UserExtend getByUserId(Long userId) {
return this.getOne(Wrappers.lambdaQuery(UserExtend.class).eq(UserExtend::getUserId, userId).last("limit 1"));
}
}

View File

@@ -73,4 +73,9 @@ public class UserInviteServiceImpl extends ServiceImpl<UserInviteMapper, UserInv
public Page<UserInviteAdminVo> pageAdmin(PageQuery pageQuery, UserInviteAdminVo bo) {
return baseMapper.pageAdmin(pageQuery.build(), bo);
}
@Override
public UserInvite getByUserId(Long sourceUserId) {
return this.getOne(Wrappers.lambdaQuery(UserInvite.class).eq(UserInvite::getUserId, sourceUserId).last("limit 1"));
}
}

View File

@@ -14,7 +14,6 @@ import com.ruoyi.xq.dto.app.withdraw.WithdrawListPageQuery;
import com.ruoyi.xq.enums.common.AuditEnum;
import com.ruoyi.xq.enums.common.OrderTypeEnum;
import com.ruoyi.xq.enums.common.TraceIdEnum;
import com.ruoyi.xq.enums.user.UserAuthTypeEnum;
import com.ruoyi.xq.manager.OrderNoUtil;
import com.ruoyi.xq.manager.TraceIdManager;
import com.ruoyi.xq.mapper.UserWithdrawMapper;
@@ -55,11 +54,11 @@ public class UserWithdrawServiceImpl extends ServiceImpl<UserWithdrawMapper,User
if(withdrawSetting == null){
throw new ServiceException("提现参数错误");
}
boolean withdraw = userExtendService.withdraw(userId, withdrawSetting.getMoney());
String traceId = TraceIdManager.gen(TraceIdEnum.WITHDRAW);
boolean withdraw = userExtendService.withdraw(userId, withdrawSetting.getMoney(),traceId);
if(!withdraw){
throw new ServiceException("提现失败,余额不足");
}
String traceId = TraceIdManager.gen(TraceIdEnum.WITHDRAW);
String orderNo = OrderNoUtil.gen(OrderTypeEnum.WITHDRAW);
UserWithdraw userWithdraw = new UserWithdraw();
userWithdraw.setUserId(user.getId());
@@ -97,7 +96,8 @@ public class UserWithdrawServiceImpl extends ServiceImpl<UserWithdrawMapper,User
.set(UserWithdraw::getAuditTime, LocalDateTime.now())
.set(UserWithdraw::getAuditRemark, "审核成功"));
if(flag){
UserWithdraw userWithdraw = this.getById(id);
userExtendService.incsWithdrawTotal(userWithdraw.getUserId(), userWithdraw.getWithdrawMoney());
if(autoTrans){
// TODO 自动打款
}

View File

@@ -1,23 +1,34 @@
package com.ruoyi.xq.service.impl;
import com.alibaba.fastjson.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.common.core.domain.PageQuery;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.xq.domain.ConsumeLog;
import com.ruoyi.xq.domain.User;
import com.ruoyi.xq.domain.VipOrder;
import com.ruoyi.xq.domain.VipPrice;
import com.ruoyi.xq.dto.admin.vipOrder.VipOrderAdminVo;
import com.ruoyi.xq.dto.app.pay.ConsumeResp;
import com.ruoyi.xq.enums.common.OrderTypeEnum;
import com.ruoyi.xq.enums.common.TraceIdEnum;
import com.ruoyi.xq.enums.consumer.ConsumerTypeEnum;
import com.ruoyi.xq.enums.pay.PayStatusEnum;
import com.ruoyi.xq.enums.pay.PlatformTypeEnum;
import com.ruoyi.xq.enums.vip.VipTimeEnum;
import com.ruoyi.xq.enums.vip.VipTypeEnum;
import com.ruoyi.xq.manager.OrderNoUtil;
import com.ruoyi.xq.manager.TraceIdManager;
import com.ruoyi.xq.mapper.VipOrderMapper;
import com.ruoyi.xq.service.UserService;
import com.ruoyi.xq.service.VipOrderService;
import com.ruoyi.xq.service.VipPriceService;
import com.ruoyi.xq.service.*;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Map;
/**
* VIP订单Service业务层处理
@@ -33,6 +44,11 @@ public class VipOrderServiceImpl extends ServiceImpl<VipOrderMapper,VipOrder> im
private VipPriceService vipPriceService;
@Autowired
private UserService userService;
@Autowired
private UserVipService userVipService;
@Autowired
private ConsumeLogService consumeLogService;
@Override
public VipOrder createVipOrder(Long userId, Long vipPriceSettingId) {
VipPrice vipPrice = vipPriceService.getById(vipPriceSettingId);
@@ -48,6 +64,8 @@ public class VipOrderServiceImpl extends ServiceImpl<VipOrderMapper,VipOrder> im
vipOrder.setVipType(vipPrice.getVipType());
vipOrder.setVipTime(vipPrice.getVipTime());
vipOrder.setVipPrice(vipPrice.getVipPrice());
VipTimeEnum vipTimeEnum = VipTimeEnum.getByCode(vipPrice.getVipTime());
vipOrder.setVipMonth(vipTimeEnum.getMonth());
vipOrder.setOrderNo(orderNo);
vipOrder.setOrderName(vipPrice.getVipName());
vipOrder.setPayStatus(PayStatusEnum.READY_PAY.getCode());
@@ -59,4 +77,53 @@ public class VipOrderServiceImpl extends ServiceImpl<VipOrderMapper,VipOrder> im
public Page<VipOrderAdminVo> pageApp(PageQuery pageQuery, VipOrderAdminVo bo) {
return baseMapper.pageApp(pageQuery.build(), bo);
}
@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 ConsumeResp doSuccess(String orderNo, Map<String, String> params, String appId, PlatformTypeEnum payTypeEnum){
VipOrder vipOrder = this.getByOrderNo(orderNo);
if(vipOrder == null){
ConsumeResp resp = new ConsumeResp();
resp.setSuccess(false);
return resp;
}
String traceId = TraceIdManager.gen(TraceIdEnum.VIP);
boolean success = this.update(Wrappers.lambdaUpdate(VipOrder.class)
.eq(VipOrder::getId, vipOrder.getId())
.eq(VipOrder::getPayStatus, PayStatusEnum.READY_PAY.getCode())
.set(VipOrder::getPayStatus, PayStatusEnum.PAY.getCode())
.set(VipOrder::getTraceId, traceId)
.set(VipOrder::getReturnContent, JSON.toJSONString(params))
.set(VipOrder::getAppid,appId)
.set(VipOrder::getPlatformType, payTypeEnum.getCode()));
if(!success){
ConsumeResp resp = new ConsumeResp();
resp.setSuccess(false);
return resp;
}
User user = userService.getById(vipOrder.getUserId());
userVipService.incsVip(user, vipOrder.getVipType(), vipOrder.getVipMonth());
ConsumeLog consumeLog = new ConsumeLog();
consumeLog.init(user);
consumeLog.setTraceId(traceId);
consumeLog.setType(ConsumerTypeEnum.VIP.getCode());
consumeLog.setAmount(vipOrder.getVipPrice());
consumeLogService.calculateInitFenxiao(consumeLog);
if(consumeLog.getOneUserId() != null){
consumeLogService.save(consumeLog);
}
ConsumeResp resp = new ConsumeResp();
resp.setConsumerId(consumeLog.getId());
resp.setPrice(vipOrder.getVipPrice());
resp.setUserId(vipOrder.getUserId());
resp.setTraceId(traceId);
resp.setSuccess(true);
return resp;
}
}