This commit is contained in:
777
2025-11-29 17:37:28 +08:00
parent 7f9b7bc639
commit 52ea057ea1
15 changed files with 159 additions and 15 deletions

View File

@@ -36,6 +36,10 @@ public class Account implements Serializable {
* 收益的彩币数量
*/
private Long incomeCoin;
/**
* 积分
*/
private Long points;
/**
* 充值总额
*/

View File

@@ -47,6 +47,8 @@ public class Goods implements Serializable {
private Long wxAmount;
@TableField(exist = false)
private Long aliAmountDiff;
@Schema(description = "赠送积分")
private Long givePoint;
/**
* 状态 0 可用 1不可用
*/

View File

@@ -83,6 +83,8 @@ public class RechargeOrder implements Serializable {
*/
private Boolean admin;
private Boolean distribution;
private Long adminId;
private String remark;

View File

@@ -19,6 +19,10 @@ public class AddRechargeOrderAdminDto {
* 调整的金额
*/
private Long rechargeCoin;
/**
* 是否参与分销
*/
private boolean distribution;
private String remark;
}

View File

@@ -0,0 +1,11 @@
package com.ruoyi.cai.dto.admin.vo.order;
import com.ruoyi.cai.domain.RechargeOrder;
import com.ruoyi.cai.dto.commom.consumer.RechargeConsumerResp;
import lombok.Data;
@Data
public class UpdateAdminRechargeOrderDTO {
private RechargeConsumerResp resp;
private RechargeOrder rechargeOrder;
}

View File

@@ -78,7 +78,7 @@ public enum SystemConfigEnum {
GREET_INTERVAL_MIN("30", "群打招呼的间隔时间(分钟)",SystemConfigGroupEnum.BUSINESS, new NumberSystemConfigCheck()),
ANCHOR_TOP_MIN("30", "小火箭置顶间隔时间(分钟)",SystemConfigGroupEnum.BUSINESS, new NumberSystemConfigCheck()),
OPEN_ALI_PAY("1", "是否开启四方支付宝支付",SystemConfigGroupEnum.BUSINESS,new BooleanSystemConfigCheck()),
OPEN_SOURCE_ALI_PAY("1", "是否开启原生支付宝支付",SystemConfigGroupEnum.BUSINESS,new BooleanSystemConfigCheck()),
OPEN_SOURCE_ALI_PAY("1", "是否开启原生支付宝支付(废弃)",SystemConfigGroupEnum.BUSINESS,new BooleanSystemConfigCheck()),
OPEN_WX_PAY("1", "是否开启微信支付",SystemConfigGroupEnum.BUSINESS,new BooleanSystemConfigCheck()),
ALI_PAY_FIRST("1", "支付宝支付显示是否在前面",SystemConfigGroupEnum.BUSINESS,new BooleanSystemConfigCheck()),
OPEN_WITHDRAW("1", "是否开启提现功能",SystemConfigGroupEnum.BUSINESS,new BooleanSystemConfigCheck()),

View File

@@ -5,6 +5,8 @@ import com.ruoyi.cai.domain.Account;
import com.ruoyi.cai.domain.ConsumeLog;
import com.ruoyi.cai.domain.Gift;
import com.ruoyi.cai.domain.User;
import com.ruoyi.cai.dto.AddRechargeOrderAdminDto;
import com.ruoyi.cai.dto.admin.vo.order.UpdateAdminRechargeOrderDTO;
import com.ruoyi.cai.dto.app.query.GiveGiftReq;
import com.ruoyi.cai.dto.app.query.GiveGuardReq;
import com.ruoyi.cai.dto.commom.consumer.GiftConsumerResp;
@@ -158,6 +160,26 @@ public class ConsumerManager {
@Autowired
private RankAdminManager rankAdminManager;
public RechargeConsumerResp rechargeOrderSuccessAdmin(AddRechargeOrderAdminDto dto){
UpdateAdminRechargeOrderDTO result = rechargeOrderService.updateAdminRechargeOrder(dto);
RechargeConsumerResp resp = result.getResp();
try {
amqpHttpProducer.sendCalculateSales(resp.getConsumeLogId()+"");
}catch (Exception e){
log.error("RabbitMq 发送失败, 充值分销流程流转失败!",e);
}
try {
Account account = accountService.getByUserId(resp.getUserId());
if(account != null){
Long totalCoin = account.getCoin() + account.getIncomeCoin();
yunxinHttpService.rechargeCoinSendMessage(resp.getUserId(), resp.getRechargeCoin(),totalCoin);
}
}catch (Exception e){
log.error("充值成功通知失败!",e);
}
return resp;
}
public RechargeConsumerResp rechargeOrderSuccess(String tradeNo, Map<String,String> params, String appId, PayTypeEnum payTypeEnum){
RechargeConsumerResp resp = rechargeOrderService.orderSuccess(tradeNo,params,appId,payTypeEnum);
if(resp.isSuccess()){

View File

@@ -0,0 +1,29 @@
package com.ruoyi.cai.pay;
import com.ruoyi.cai.trdpay.dto.v14.wechatJSAPI.WxJsapiParam;
import com.ruoyi.common.core.domain.R;
import lombok.Data;
import lombok.EqualsAndHashCode;
@EqualsAndHashCode(callSuper = true)
@Data
public class V14R<T> extends R<T> {
private WxJsapiParam wxJsapiParam;
public static <T> V14R<T> fail14(int code, String msg) {
return restResult14(null, code, msg);
}
private static <T> V14R<T> restResult14(T data, int code, String msg) {
V14R<T> r = new V14R<>();
r.setCode(code);
r.setData(data);
r.setMsg(msg);
return r;
}
public static <T> V14R<T> ok14(T data) {
return restResult14(data, SUCCESS, "操作成功");
}
}

View File

@@ -36,6 +36,8 @@ public interface AccountService extends IService<Account> {
void recharge(ConsumeLog consumeLog);
void rechargeAdminIgnoreAccount(ConsumeLog consumeLog);
Page<AccountAdminVo> pageAdmin(PageQuery pageQuery, AccountAdminVo bo);
boolean distribution(ConsumeLog consumeLog, Long userId, Long amount, AccountChangeCodeEnum accountChangeEnum);

View File

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.cai.domain.RechargeOrder;
import com.ruoyi.cai.dto.AddRechargeOrderAdminDto;
import com.ruoyi.cai.dto.admin.vo.order.UpdateAdminRechargeOrderDTO;
import com.ruoyi.cai.dto.app.query.order.AddRechargeOrderDto;
import com.ruoyi.cai.dto.ConsumeResp;
import com.ruoyi.cai.dto.admin.vo.RechargeOrderAdminVo;
@@ -29,7 +30,7 @@ public interface RechargeOrderService extends IService<RechargeOrder> {
RechargeConsumerResp orderSuccess(String orderNo, Map<String,String> params, String appId, PayTypeEnum payTypeEnum);
RechargeOrder updateAdminRechargeOrder(AddRechargeOrderAdminDto dto);
UpdateAdminRechargeOrderDTO updateAdminRechargeOrder(AddRechargeOrderAdminDto dto);
void setFastPay(String orderNo);
}

View File

@@ -232,6 +232,22 @@ public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> impl
consumeLogService.save(consumeLog);
}
@Transactional(rollbackFor = Exception.class)
@Override
public void rechargeAdminIgnoreAccount(ConsumeLog consumeLog){
log.info("开始管理員充值 consumeLog={}", JSON.toJSONString(consumeLog));
Long userId = consumeLog.getSourceUserId();
Long amount = consumeLog.getAmount();
User user = userService.getById(userId);
Account account = this.getByUserId(userId);
if(account == null || user == null){
throw new ServiceException("无效账号");
}
// 获取分销的比例和用户
consumeLogService.calculateInitFenxiao(consumeLog);
consumeLogService.save(consumeLog);
}
@Override
public Page<AccountAdminVo> pageAdmin(PageQuery pageQuery, AccountAdminVo bo) {

View File

@@ -7,14 +7,13 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.cai.domain.*;
import com.ruoyi.cai.dto.AddRechargeOrderAdminDto;
import com.ruoyi.cai.dto.admin.vo.order.UpdateAdminRechargeOrderDTO;
import com.ruoyi.cai.dto.app.query.order.AddRechargeOrderDto;
import com.ruoyi.cai.dto.ConsumeResp;
import com.ruoyi.cai.dto.admin.vo.RechargeOrderAdminVo;
import com.ruoyi.cai.dto.commom.consumer.RechargeConsumerResp;
import com.ruoyi.cai.enums.ConsumeLogType;
import com.ruoyi.cai.enums.account.AccountChangeCodeEnum;
import com.ruoyi.cai.enums.account.AccountTypeEnum;
import com.ruoyi.cai.enums.version.VersionPlatformEnum;
import com.ruoyi.cai.manager.IdManager;
import com.ruoyi.cai.mapper.AccountMapper;
import com.ruoyi.cai.mapper.RechargeOrderMapper;
@@ -142,7 +141,7 @@ public class RechargeOrderServiceImpl extends ServiceImpl<RechargeOrderMapper,Re
@Override
@Transactional(rollbackFor = Exception.class)
public RechargeOrder updateAdminRechargeOrder(AddRechargeOrderAdminDto dto){
public UpdateAdminRechargeOrderDTO updateAdminRechargeOrder(AddRechargeOrderAdminDto dto){
User user = userService.getByUserCode(dto.getUsercode());
if(user == null){
throw new ServiceException("用户不存在");
@@ -151,6 +150,14 @@ public class RechargeOrderServiceImpl extends ServiceImpl<RechargeOrderMapper,Re
if(accountTypeEnum == null){
throw new ServiceException("参数错误");
}
if(dto.isDistribution()){
if(dto.getRechargeCoin() <= 0){
throw new ServiceException("开启分销情况下,无法调整金额为负数");
}
if(accountTypeEnum != AccountTypeEnum.COIN){
throw new ServiceException("只有调整余额才能开启分销");
}
}
Long userId = user.getId();
Long traceId = IdManager.nextId();
RechargeOrder order = new RechargeOrder();
@@ -167,7 +174,16 @@ public class RechargeOrderServiceImpl extends ServiceImpl<RechargeOrderMapper,Re
order.setOperateIp(ServletUtils.getClientIP());
order.setAdmin(true);
order.setAdminId(LoginHelper.getUserId());
order.setRemark(dto.getRemark());
String remark = dto.getRemark();
if(dto.isDistribution()){
if(remark == null){
remark = "[参与分销]";
}else{
remark = "[参与分销]"+remark;
}
}
order.setRemark(remark);
order.setDistribution(dto.isDistribution());
order.setTraceId(traceId);
this.save(order);
Account account = accountService.getByUserId(userId);
@@ -200,9 +216,31 @@ public class RechargeOrderServiceImpl extends ServiceImpl<RechargeOrderMapper,Re
accountChangeLogService.saveLogAdmin(user.getId(),user.getUsercode(), AccountChangeCodeEnum.SYSTEM_INCOME_COIN_DECR,dto.getRechargeCoin(),traceId);
}
}
return order;
UpdateAdminRechargeOrderDTO result = new UpdateAdminRechargeOrderDTO();
result.setRechargeOrder(order);
// 分销逻辑
if(dto.isDistribution()){
ConsumeLog consumeLog = new ConsumeLog();
consumeLog.init(user,null);
consumeLog.setTraceId(traceId);
consumeLog.setType(ConsumeLogType.RECHARGE.getCode());
consumeLog.setAmount(order.getRechargeCoin());
accountService.rechargeAdminIgnoreAccount(consumeLog);
RechargeConsumerResp resp = new RechargeConsumerResp();
resp.setSuccess(true);
resp.setConsumeLogId(consumeLog.getId());
resp.setUserId(user.getId());
resp.setUser(user);
resp.setTraceId(traceId);
resp.setPrice(order.getPrice());
resp.setRechargeCoin(order.getRechargeCoin());
resp.setOrderNo(order.getOrderNo());
result.setResp(resp);
}
return result;
}
@Override
public void setFastPay(String orderNo) {
if(orderNo != null){