[fix]修改红包和提现
This commit is contained in:
parent
eeb50d18b1
commit
3c770192fa
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -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, "提现到钱包失败"),
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 售后
|
* 售后
|
||||||
*/
|
*/
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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,13 +401,16 @@ 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())) {
|
||||||
// 评论视频,通知视频作者
|
// 评论视频,通知视频作者
|
||||||
if (bo.getVlogerId() != null && !bo.getVlogerId().isEmpty()
|
if (bo.getVlogerId() != null && !bo.getVlogerId().isEmpty()
|
||||||
@ -402,8 +431,8 @@ public class CommentServiceImpl extends ServiceImpl<CommentMapper, Comment> impl
|
|||||||
params.put("nickName", loginUser.getNickname());
|
params.put("nickName", loginUser.getNickname());
|
||||||
params.put("toUserId", father.getCommentUserId());
|
params.put("toUserId", father.getCommentUserId());
|
||||||
params.put("vlogId", bo.getVlogId());
|
params.put("vlogId", bo.getVlogId());
|
||||||
params.put("commentId",father.getId());
|
params.put("commentId", father.getId());
|
||||||
params.put("commentContent",father.getContent());
|
params.put("commentContent", father.getContent());
|
||||||
params.put("action", MessageActionEnum.INTERACTION_REPLY.getAccount());
|
params.put("action", MessageActionEnum.INTERACTION_REPLY.getAccount());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,4 @@
|
|||||||
|
package com.wzj.soopin.order.business;
|
||||||
|
|
||||||
|
public interface IAfterSaleBusiness {
|
||||||
|
}
|
@ -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 {
|
||||||
|
}
|
@ -1,24 +1,16 @@
|
|||||||
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
|
||||||
*
|
*
|
||||||
* @author zcc
|
* @author zcc
|
||||||
*/
|
*/
|
||||||
@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);
|
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
|
@ -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<>();
|
||||||
|
@ -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);
|
|
||||||
}
|
}
|
||||||
|
@ -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());
|
||||||
|
@ -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;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -155,7 +151,7 @@ public class WxPayService {
|
|||||||
.merchantSerialNumber(WechatPayConfig.getMchSerialNo())
|
.merchantSerialNumber(WechatPayConfig.getMchSerialNo())
|
||||||
.apiV3Key(WechatPayConfig.getApiV3Key())
|
.apiV3Key(WechatPayConfig.getApiV3Key())
|
||||||
.build();
|
.build();
|
||||||
logger.info("WxPayService.wxPaySuccessCallback request : wechatPaySerial is [{}] , wechatSignature is [{}] , wechatTimestamp is [{}] , wechatpayNonce is [{}] , requestBody is [{}]",wechatPaySerial,wechatSignature,wechatTimestamp,wechatpayNonce,requestBody);
|
logger.info("WxPayService.wxPaySuccessCallback request : wechatPaySerial is [{}] , wechatSignature is [{}] , wechatTimestamp is [{}] , wechatpayNonce is [{}] , requestBody is [{}]", wechatPaySerial, wechatSignature, wechatTimestamp, wechatpayNonce, requestBody);
|
||||||
// 3. 初始化 NotificationParser
|
// 3. 初始化 NotificationParser
|
||||||
NotificationParser parser = new NotificationParser((NotificationConfig) config);
|
NotificationParser parser = new NotificationParser((NotificationConfig) config);
|
||||||
try {
|
try {
|
||||||
@ -244,6 +240,5 @@ public class WxPayService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user