[fix]修改红包和提现

This commit is contained in:
wangqx 2025-09-23 16:55:04 +08:00
parent eeb50d18b1
commit 3c770192fa
14 changed files with 190 additions and 122 deletions

View File

@ -24,6 +24,7 @@ import com.wzj.soopin.transaction.convert.ChargeConvert;
import com.wzj.soopin.transaction.convert.WithdrawConvert; import com.wzj.soopin.transaction.convert.WithdrawConvert;
import com.wzj.soopin.transaction.domain.bo.ChargeBO; import com.wzj.soopin.transaction.domain.bo.ChargeBO;
import com.wzj.soopin.transaction.domain.bo.WithdrawBO; import com.wzj.soopin.transaction.domain.bo.WithdrawBO;
import com.wzj.soopin.transaction.domain.po.Withdraw;
import com.wzj.soopin.transaction.enums.WithdrawType; import com.wzj.soopin.transaction.enums.WithdrawType;
import com.wzj.soopin.transaction.service.IAccountBillService; import com.wzj.soopin.transaction.service.IAccountBillService;
import com.wzj.soopin.transaction.service.IChargeService; import com.wzj.soopin.transaction.service.IChargeService;
@ -47,6 +48,8 @@ import org.dromara.common.social.config.properties.SocialProperties;
import org.dromara.common.social.utils.SocialUtils; import org.dromara.common.social.utils.SocialUtils;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal;
@RestController @RestController
@RequestMapping("/app/member") @RequestMapping("/app/member")
@Tag(name = "会员管理") @Tag(name = "会员管理")
@ -200,7 +203,15 @@ public class AppMemberController {
Long memberId = loginUser.getUserId(); Long memberId = loginUser.getUserId();
bo.setMemberId(memberId); bo.setMemberId(memberId);
bo.setType(WithdrawType.WALLET.getCode()); bo.setType(WithdrawType.WALLET.getCode());
return R.ok(withdrawService.withdrawWallet(withdrawConvert.toPo(bo))); Withdraw withdraw=withdrawConvert.toPo(bo);
withdrawService.withdraw(withdraw);
//检查提现金额是否小于1元 一元以下自动审批
if(withdraw.getMoney().compareTo(BigDecimal.ONE)<0){
//自动审批
bo.setId(withdraw.getId());
withdrawService.audit(bo);
}
return R.ok();
} }
@ -223,6 +234,4 @@ public class AppMemberController {
return R.ok(); return R.ok();
} }
} }

View File

@ -38,7 +38,7 @@ public class AppTenantController {
Long memberId = loginUser.getUserId(); Long memberId = loginUser.getUserId();
bo.setMemberId(memberId); bo.setMemberId(memberId);
bo.setType(WithdrawType.REVENUE.getCode()); bo.setType(WithdrawType.REVENUE.getCode());
return R.ok(withdrawService.withdrawRevenue(withdrawConvert.toPo(bo))); return R.ok(withdrawService.withdraw(withdrawConvert.toPo(bo)));
} }

View File

@ -232,6 +232,12 @@ public enum ResultCode {
CAN_NOT_RECHARGE_WALLET(32012, "不能使用余额进行充值"), CAN_NOT_RECHARGE_WALLET(32012, "不能使用余额进行充值"),
RECHARGE_PRICE_ERROR(32013, "充值金额错误"), RECHARGE_PRICE_ERROR(32013, "充值金额错误"),
WITHDRAW_ERROR(33000, "提现失败"),
WITHDRAW_AUDIT_ERROR(33001, "提现审核失败"),
WITHDRAW_WALLET_ERROR(33002, "提现到钱包失败"),
/** /**
* 售后 * 售后
*/ */

View File

@ -15,6 +15,8 @@ public enum MessageActionEnum {
ORDER_RECHARGE(30, "order"), //订单->充值 online ORDER_RECHARGE(30, "order"), //订单->充值 online
ORDER_PAY(31, "order"), //订单->订单交易成功通知 online ORDER_PAY(31, "order"), //订单->订单交易成功通知 online
ORDER_REFUND(32, "order"), //订单->退款结果通知 ORDER_REFUND(32, "order"), //订单->退款结果通知
ORDER_WITHDRAW_AUDIT(33, "order"), //订单->提现审核结果通知
ORDER_WITHDRAW_REFUSE(34, "order"), //订单->提现审核结果通知拒绝
GROUP_NOTIFY_CHECK(43, "groupNotify"), //群通知->进群申请 online GROUP_NOTIFY_CHECK(43, "groupNotify"), //群通知->进群申请 online
GROUP_NOTIFY_ACCEPT(44, "groupNotify"), // 群通知->进群审核审核通过 online GROUP_NOTIFY_ACCEPT(44, "groupNotify"), // 群通知->进群审核审核通过 online
GROUP_NOTIFY_FAIL(45, "groupNotify"), // 群通知->进群审核审核拒绝 online GROUP_NOTIFY_FAIL(45, "groupNotify"), // 群通知->进群审核审核拒绝 online
@ -52,4 +54,6 @@ public enum MessageActionEnum {
} }
return null; return null;
} }
} }

View File

@ -349,6 +349,32 @@ public class CommentServiceImpl extends ServiceImpl<CommentMapper, Comment> impl
childComment.setUpdateBy(username); childComment.setUpdateBy(username);
commentMapper.updateById(childComment); commentMapper.updateById(childComment);
} }
List<Comment> notifyList = new ArrayList<>();
notifyList.add(comment);
notifyList.addAll(childComments);
notifyList.forEach(c -> {
//给评论发送通知
MqUtil.sendIMMessage(buildOfflineMessage(c));
});
}
private MQMessage buildOfflineMessage(Comment comment) {
Map<String, Object> params = new HashMap<>();
params.put("userId", MessageActionEnum.SYSTEM_REPORT.getCode());
params.put("nickName", MessageActionEnum.SYSTEM_REPORT.getAccount());
params.put("toUserId", comment.getId());
params.put("commentId", comment.getId());
params.put("commentContent", comment.getContent());
params.put("action", MessageActionEnum.SYSTEM_REPORT.getAccount());
MQMessage mqMessage = new MQMessage();
mqMessage.setTag(MessageActionEnum.SYSTEM_REPORT.getAccount());
mqMessage.setData(params);
return mqMessage;
} }
@Override @Override
@ -375,11 +401,14 @@ public class CommentServiceImpl extends ServiceImpl<CommentMapper, Comment> impl
// 3) 发送站内消息根评论 -> 通知视频作者回复评论 -> 通知被回复用户 // 3) 发送站内消息根评论 -> 通知视频作者回复评论 -> 通知被回复用户
// 关注消息 // 给评论或者作者发送通知
MqUtil.sendIMMessage(buildMessage(bo)); MqUtil.sendIMMessage(buildCommentMessage(bo));
//检查是否有@
} }
private MQMessage buildMessage(CommentBO bo){ private MQMessage buildCommentMessage(CommentBO bo) {
Map<String, Object> params = new HashMap<>(); Map<String, Object> params = new HashMap<>();
LoginUser loginUser = LoginHelper.getLoginUser(); LoginUser loginUser = LoginHelper.getLoginUser();
if ("0".equals(bo.getFatherCommentId())) { if ("0".equals(bo.getFatherCommentId())) {

View File

@ -408,4 +408,12 @@ public class MemberServiceImpl extends ServiceImpl<MemberMapper,Member> implemen
Assert.isTrue(StrUtil.equals(smsCode, code), () -> new ServiceException("短信验证码错误")); Assert.isTrue(StrUtil.equals(smsCode, code), () -> new ServiceException("短信验证码错误"));
memberMapper.updateById(Member.builder().id(loginUser.getUserId()).status(Constants.MEMBER_ACCOUNT_STATUS.FORBIDDEN).build()); memberMapper.updateById(Member.builder().id(loginUser.getUserId()).status(Constants.MEMBER_ACCOUNT_STATUS.FORBIDDEN).build());
} }
@Override
@CacheEvict(value = GlobalConstants.MEMBER_KEY, key = "#id")
public boolean updateById(Member entity) {
return super.updateById(entity);
}
} }

View File

@ -0,0 +1,4 @@
package com.wzj.soopin.order.business;
public interface IAfterSaleBusiness {
}

View File

@ -0,0 +1,10 @@
package com.wzj.soopin.order.business.impl;
import com.wzj.soopin.order.convert.AftersaleConvert;
import com.wzj.soopin.order.domain.entity.Aftersale;
import com.wzj.soopin.order.domain.vo.AftersaleVO;
import com.wzj.soopin.order.service.AftersaleService;
import org.dromara.common.web.core.BusinessImpl;
public class AfterSaleBusiness {
}

View File

@ -1,17 +1,10 @@
package com.wzj.soopin.order.convert; package com.wzj.soopin.order.convert;
import com.wzj.soopin.member.domain.bo.MemberAddressBO;
import com.wzj.soopin.member.domain.po.MemberAddress;
import com.wzj.soopin.member.domain.vo.MemberAddressVO;
import com.wzj.soopin.order.domain.bo.AftersaleBo; import com.wzj.soopin.order.domain.bo.AftersaleBo;
import com.wzj.soopin.order.domain.entity.Aftersale; import com.wzj.soopin.order.domain.entity.Aftersale;
import com.wzj.soopin.order.domain.form.ManagerAftersaleOrderForm;
import com.wzj.soopin.order.domain.vo.AftersaleVO; import com.wzj.soopin.order.domain.vo.AftersaleVO;
import com.wzj.soopin.order.domain.vo.ManagerRefundOrderVO;
import org.dromara.common.web.core.BaseConverter; import org.dromara.common.web.core.BaseConverter;
import org.mapstruct.Mapper; import org.mapstruct.Mapper;
import java.util.List;
/** /**
* 订单售后 DO <=> DTO <=> VO / BO / Query * 订单售后 DO <=> DTO <=> VO / BO / Query
* *
@ -20,5 +13,4 @@ import java.util.List;
@Mapper(componentModel = "spring") @Mapper(componentModel = "spring")
public interface AftersaleConvert extends BaseConverter<AftersaleVO, AftersaleBo, Aftersale> { public interface AftersaleConvert extends BaseConverter<AftersaleVO, AftersaleBo, Aftersale> {
// List<AftersaleVO> dos2vos(List<Aftersale> list);
} }

View File

@ -1,11 +1,11 @@
package com.wzj.soopin.order.domain.bo; package com.wzj.soopin.order.domain.bo;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import com.wzj.soopin.order.domain.entity.Aftersale; import com.wzj.soopin.order.domain.entity.Aftersale;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
import org.dromara.common.core.domain.BaseBO;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal; import java.math.BigDecimal;
@ -13,7 +13,7 @@ import java.time.LocalDateTime;
@Data @Data
@Schema(description = "订单售后 查询 对象") @Schema(description = "订单售后 查询 对象")
public class AftersaleBo { public class AftersaleBo extends BaseBO<Aftersale> {
@Schema(description = "MEMBER_ID 精确匹配") @Schema(description = "MEMBER_ID 精确匹配")
private Long memberId; private Long memberId;
@ -64,7 +64,7 @@ public class AftersaleBo {
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime endTime; private LocalDateTime endTime;
public Wrapper<Aftersale> toWrapper() { public LambdaQueryWrapper<Aftersale> toWrapper() {
return new LambdaQueryWrapper<Aftersale>() return new LambdaQueryWrapper<Aftersale>()
.eq(memberId != null, Aftersale::getMemberId, memberId) .eq(memberId != null, Aftersale::getMemberId, memberId)
.eq(orderId != null, Aftersale::getOrderId, orderId) .eq(orderId != null, Aftersale::getOrderId, orderId)

View File

@ -31,6 +31,9 @@ import org.dromara.common.core.domain.R;
import org.dromara.common.core.domain.event.Constants; import org.dromara.common.core.domain.event.Constants;
import org.dromara.common.core.enums.AftersaleStatus; import org.dromara.common.core.enums.AftersaleStatus;
import org.dromara.common.core.enums.OrderRefundStatus; import org.dromara.common.core.enums.OrderRefundStatus;
import org.dromara.common.mq.domain.MQMessage;
import org.dromara.common.mq.enums.MessageActionEnum;
import org.dromara.common.mq.utils.MqUtil;
import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.satoken.utils.LoginHelper;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -232,8 +235,24 @@ public class AftersaleServiceImpl extends ServiceImpl<AftersaleMapper, Aftersale
if ((request.getOptType() == Constants.OptType.GIVING || (request.getOptType() == Constants.OptType.AGREE && aftersale.getType() == 1))) { if ((request.getOptType() == Constants.OptType.GIVING || (request.getOptType() == Constants.OptType.AGREE && aftersale.getType() == 1))) {
tradeRefund(aftersale, order, optDate, userId); tradeRefund(aftersale, order, optDate, userId);
} }
}
//发送成功通知
MqUtil.sendIMMessage(buildMessage(aftersale, MessageActionEnum.ORDER_REFUND));
}
private MQMessage buildMessage(Aftersale o, MessageActionEnum actionEnum) {
Map<String, Object> params = new HashMap<>();
Member sender=new Member();
sender.setUserId(Long.valueOf(actionEnum.getCode()));
params.put("sender", sender);
// params.put("receiver", memberService.getMemberInfo(o.getMemberId()));
params.put("object", o);
params.put("action", actionEnum.getAccount());
MQMessage mqMessage = new MQMessage();
mqMessage.setTag(actionEnum.getAccount());
mqMessage.setData(params);
return mqMessage;
}
public void tradeRefund(Aftersale returnApply, Order order, LocalDateTime optDate, Long userId) { public void tradeRefund(Aftersale returnApply, Order order, LocalDateTime optDate, Long userId) {
//查一下微信订单 //查一下微信订单
QueryWrapper<WechatPaymentHistory> qw = new QueryWrapper<>(); QueryWrapper<WechatPaymentHistory> qw = new QueryWrapper<>();

View File

@ -9,7 +9,6 @@ public interface IWithdrawService extends IService<Withdraw> {
boolean withdrawCallback(WithdrawBO withdraw); boolean withdrawCallback(WithdrawBO withdraw);
boolean withdrawWallet(Withdraw withdraw); boolean withdraw (Withdraw withdraw);
boolean withdrawRevenue (Withdraw withdraw);
} }

View File

@ -1,6 +1,7 @@
package com.wzj.soopin.transaction.service.impl; package com.wzj.soopin.transaction.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.wzj.soopin.content.domain.po.Comment;
import com.wzj.soopin.member.domain.po.Member; import com.wzj.soopin.member.domain.po.Member;
import com.wzj.soopin.transaction.domain.bo.WithdrawBO; import com.wzj.soopin.transaction.domain.bo.WithdrawBO;
import com.wzj.soopin.member.domain.po.MemberAccount; import com.wzj.soopin.member.domain.po.MemberAccount;
@ -19,10 +20,15 @@ import com.wzj.soopin.transaction.domain.vo.EasypayAccountVO;
import com.wzj.soopin.transaction.service.IAccountBillService; import com.wzj.soopin.transaction.service.IAccountBillService;
import com.wzj.soopin.transaction.service.IWithdrawService; import com.wzj.soopin.transaction.service.IWithdrawService;
import com.wzj.soopin.transaction.service.IEasypayService; import com.wzj.soopin.transaction.service.IEasypayService;
import com.wzj.soopin.transaction.util.SnowFlake;
import com.wzj.soopin.transaction.wechat.WechatPayConfig; import com.wzj.soopin.transaction.wechat.WechatPayConfig;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.constant.ResultCode;
import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.mq.domain.MQMessage;
import org.dromara.common.mq.enums.MessageActionEnum;
import org.dromara.common.mq.utils.MqUtil;
import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.system.domain.SysTenantAccount; import org.dromara.system.domain.SysTenantAccount;
import org.dromara.system.service.ISysTenantAccountService; import org.dromara.system.service.ISysTenantAccountService;
@ -30,9 +36,7 @@ import org.springframework.stereotype.Service;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.*;
import java.util.List;
import java.util.Objects;
/** /**
* 会员封禁 * 会员封禁
@ -60,22 +64,25 @@ public class WithdrawServiceImpl extends ServiceImpl<WithdrawMapper, Withdraw> i
private final IMemberService memberService; private final IMemberService memberService;
private final WechatPayConfig wechatPayConfig;
@Override @Override
public boolean audit(WithdrawBO bo) { public boolean audit(WithdrawBO bo) {
Withdraw withdraw = getById(bo.getId()); Withdraw withdraw = getById(bo.getId());
if (withdraw == null) { if (withdraw == null) {
throw new RuntimeException("提现申请不存在"); throw new RuntimeException("提现申请不存在");
} }
if (!Objects.equals(WithdrawAuditStatus.PENDING.getCode(), withdraw.getAuditStatus())) { if (!Objects.equals(WithdrawAuditStatus.PENDING.getCode(), withdraw.getStatus())) {
throw new RuntimeException("提现申请已处理"); throw new RuntimeException("提现申请已处理");
} }
//发起提现 //发起提现
try{ try{
wxPayService.initiateBatchTransferNew(buildWechatPayParam(bo)); wxPayService.initiateBatchTransferNew(buildWechatPayParam(withdraw));
}catch (ServiceException e){ }catch (ServiceException e){
log.error("提现申请失败",e); //提现失败
throw new RuntimeException("提现申请失败"); //发送通知
MqUtil.sendIMMessage(buildMessage(withdraw,MessageActionEnum.ORDER_WITHDRAW_AUDIT));
throw new ServiceException(ResultCode.WITHDRAW_AUDIT_ERROR);
} }
withdraw = Withdraw.builder().id(bo.getId()) withdraw = Withdraw.builder().id(bo.getId())
.auditReason(bo.getAuditReason()) .auditReason(bo.getAuditReason())
@ -84,14 +91,36 @@ public class WithdrawServiceImpl extends ServiceImpl<WithdrawMapper, Withdraw> i
.auditBy(LoginHelper.getUserId()) .auditBy(LoginHelper.getUserId())
.build(); .build();
this.updateById(withdraw); this.updateById(withdraw);
//发送成功通知
MqUtil.sendIMMessage(buildMessage(withdraw, MessageActionEnum.ORDER_WITHDRAW_AUDIT));
return true; return true;
} }
private MQMessage buildMessage(Withdraw o, MessageActionEnum actionEnum) {
Map<String, Object> params = new HashMap<>();
Member sender=new Member();
sender.setUserId(Long.valueOf(actionEnum.getCode()));
params.put("sender", sender);
params.put("receiver", memberService.getMemberInfo(o.getMemberId()));
params.put("object", o);
params.put("action", actionEnum.getAccount());
MQMessage mqMessage = new MQMessage();
mqMessage.setTag(actionEnum.getAccount());
mqMessage.setData(params);
return mqMessage;
}
private InitiateBatchTransferRequestNew buildWechatPayParam(WithdrawBO withdraw) { //sender
//receiver
//object
//action
private InitiateBatchTransferRequestNew buildWechatPayParam(Withdraw withdraw) {
InitiateBatchTransferRequestNew request = new InitiateBatchTransferRequestNew(); InitiateBatchTransferRequestNew request = new InitiateBatchTransferRequestNew();
WechatPayConfig wechatPayConfig = new WechatPayConfig();
//商户AppID //商户AppID
request.setAppid(wechatPayConfig.getAppId()); request.setAppid(wechatPayConfig.getAppId());
//商户单号 //商户单号
@ -104,7 +133,9 @@ public class WithdrawServiceImpl extends ServiceImpl<WithdrawMapper, Withdraw> i
Member member=memberService.getById(withdraw.getMemberId()); Member member=memberService.getById(withdraw.getMemberId());
request.setOpenid(member.getOpenId()); request.setOpenid(member.getOpenId());
//收款用户姓名 //收款用户姓名
if (request.getTransferAmount() > 30) {
request.setUserName(member.getNickname()); request.setUserName(member.getNickname());
}
//转账备注 //转账备注
request.setTransferRemark("提现"); request.setTransferRemark("提现");
//转账场景报备信息 佣金的固定类型 //转账场景报备信息 佣金的固定类型
@ -155,47 +186,8 @@ public class WithdrawServiceImpl extends ServiceImpl<WithdrawMapper, Withdraw> i
} }
public boolean withdrawRevenue(Withdraw withdraw) {
//调用三方支付平台获取用户余额
// TODO: 2025/9/10 这个地方不能用null 但是现在商户提现的业务不对暂时没有提现业务
SysTenantAccount tenantAccount = sysTenantAccountService.getByTenantId(null);
if (tenantAccount == null) {
throw new RuntimeException("用户不存在");
}
BigDecimal balance = tenantAccount.getRevenue();
EasypayAccountVO easypayAccountVO = easypayService.getEasypayAccount(withdraw.getMemberId());
if (easypayAccountVO == null) { public boolean withdraw (Withdraw withdraw) {
throw new RuntimeException("账户余额获取失败");
}
//生成费用
BigDecimal fee = withdraw.getMoney().multiply(new BigDecimal("0.01"));
withdraw.setFee(fee);
withdraw.setActualMoney(withdraw.getMoney().subtract(fee));
save(withdraw);
BigDecimal newBalance = balance.subtract(withdraw.getMoney());
tenantAccount.setRevenue(newBalance);
//锁定用户余额
sysTenantAccountService.updateById(tenantAccount);
//生成账单
AccountBill memberAccountChangeRecord = AccountBill.builder()
.accountId(withdraw.getMemberId())
.moneyBalance(balance.subtract(withdraw.getMoney()))
.beforeBalance(balance)
.afterBalance(newBalance)
.changeType(AccountBillChangeTypeEnum.OUT.getCode())
.changeDesc("提现锁定")
.source(AccountBillSourceEnum.WITHDRAW.getCode())
.build();
accountBillService.save(memberAccountChangeRecord);
return true;
}
public boolean withdrawWallet(Withdraw withdraw) {
MemberAccount memberAccount = memberAccountService.getMemberAccount(withdraw.getMemberId()); MemberAccount memberAccount = memberAccountService.getMemberAccount(withdraw.getMemberId());
if (memberAccount == null) { if (memberAccount == null) {
throw new RuntimeException("用户不存在"); throw new RuntimeException("用户不存在");
@ -206,9 +198,10 @@ public class WithdrawServiceImpl extends ServiceImpl<WithdrawMapper, Withdraw> i
throw new RuntimeException("用户余额不足"); throw new RuntimeException("用户余额不足");
} }
//生成费用 //生成费用
BigDecimal fee = withdraw.getMoney().multiply(new BigDecimal("0.01")); BigDecimal fee = withdraw.getMoney().multiply(new BigDecimal("0.00"));
withdraw.setFee(fee); withdraw.setFee(fee);
withdraw.setActualMoney(withdraw.getMoney().subtract(fee)); withdraw.setActualMoney(withdraw.getMoney().subtract(fee));
withdraw.setCode(SnowFlake.createStr("TX"));
save(withdraw); save(withdraw);
BigDecimal newBalance = balance.subtract(withdraw.getMoney()); BigDecimal newBalance = balance.subtract(withdraw.getMoney());

View File

@ -17,6 +17,7 @@ import com.wzj.soopin.transaction.domain.entity.TransferBillEntity;
import com.wzj.soopin.transaction.domain.entity.TransferDetailEntityNew; import com.wzj.soopin.transaction.domain.entity.TransferDetailEntityNew;
import com.wzj.soopin.transaction.wechat.WechatPayConfig; import com.wzj.soopin.transaction.wechat.WechatPayConfig;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import org.dromara.common.core.constant.ResultCode;
import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.exception.ServiceException;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -53,10 +54,11 @@ public class WxPayService {
*/ */
public InitiateBatchTransferResponseNew initiateBatchTransferNew(InitiateBatchTransferRequestNew request) { public InitiateBatchTransferResponseNew initiateBatchTransferNew(InitiateBatchTransferRequestNew request) {
logger.info("WxPayService.initiateBatchTransferNew request:{}", request.toString()); logger.info("WxPayService.initiateBatchTransferNew request:{}", request.toString());
try{ if(request.getUserName()!=null){
String encryptName = wxPayConfig.createEncryptor().encrypt(request.getUserName()); String encryptName = wxPayConfig.createEncryptor().encrypt(request.getUserName());
request.setUserName(encryptName); request.setUserName(encryptName);
}
String requestPath = "https://api.mch.weixin.qq.com/v3/fund-app/mch-transfer/transfer-bills"; String requestPath = "https://api.mch.weixin.qq.com/v3/fund-app/mch-transfer/transfer-bills";
HttpHeaders headers = new HttpHeaders(); HttpHeaders headers = new HttpHeaders();
headers.addHeader("Accept", MediaType.APPLICATION_JSON.getValue()); headers.addHeader("Accept", MediaType.APPLICATION_JSON.getValue());
@ -73,12 +75,6 @@ public class WxPayService {
HttpResponse<InitiateBatchTransferResponseNew> httpResponse = httpClient.execute(httpRequest, InitiateBatchTransferResponseNew.class); HttpResponse<InitiateBatchTransferResponseNew> httpResponse = httpClient.execute(httpRequest, InitiateBatchTransferResponseNew.class);
logger.info("WxPayService.initiateBatchTransferNew response:{}", httpResponse.getServiceResponse()); logger.info("WxPayService.initiateBatchTransferNew response:{}", httpResponse.getServiceResponse());
return httpResponse.getServiceResponse(); return httpResponse.getServiceResponse();
}catch (Exception e){
logger.error("WxPayService.initiateBatchTransferNew error:{}", e);
}
return null;
} }
/** /**
@ -244,6 +240,5 @@ public class WxPayService {
} }
} }