init
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -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"));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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"));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 自动打款
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user