处理企业付款

This commit is contained in:
朱耘稷
2020-12-08 22:14:37 +08:00
parent e9a7a2052f
commit b9ed5775eb
4 changed files with 124 additions and 69 deletions

View File

@ -25,5 +25,9 @@ public class TemplateBean {
private String deliveryId; private String deliveryId;
private String payType; private String payType;
private Long uid; private Long uid;
/**
* 提现申请ID
*/
private Long extractId;
} }

View File

@ -20,7 +20,8 @@ public enum TemplateListenEnum {
TYPE_4("4","充值成功通知"), TYPE_4("4","充值成功通知"),
TYPE_5("5","在线买单/收款成功通知"), TYPE_5("5","在线买单/收款成功通知"),
TYPE_6("6","商家收款通知"), TYPE_6("6","商家收款通知"),
TYPE_7("7","用户下单未支付通知"); TYPE_7("7","用户下单未支付通知"),
TYPE_8("8","用户体现通知");
private String value; private String value;
private String desc; private String desc;

View File

@ -9,6 +9,7 @@
package co.yixiang.modules.activity.service.impl; package co.yixiang.modules.activity.service.impl;
import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import co.yixiang.api.YshopException; import co.yixiang.api.YshopException;
import co.yixiang.common.service.impl.BaseServiceImpl; import co.yixiang.common.service.impl.BaseServiceImpl;
@ -17,6 +18,9 @@ import co.yixiang.dozer.service.IGenerator;
import co.yixiang.enums.BillDetailEnum; import co.yixiang.enums.BillDetailEnum;
import co.yixiang.enums.PayTypeEnum; import co.yixiang.enums.PayTypeEnum;
import co.yixiang.enums.ShopCommonEnum; import co.yixiang.enums.ShopCommonEnum;
import co.yixiang.event.TemplateBean;
import co.yixiang.event.TemplateEvent;
import co.yixiang.event.TemplateListenEnum;
import co.yixiang.exception.BadRequestException; import co.yixiang.exception.BadRequestException;
import co.yixiang.modules.activity.domain.YxUserExtract; import co.yixiang.modules.activity.domain.YxUserExtract;
import co.yixiang.modules.activity.param.UserExtParam; import co.yixiang.modules.activity.param.UserExtParam;
@ -27,9 +31,14 @@ import co.yixiang.modules.activity.service.mapper.YxUserExtractMapper;
import co.yixiang.modules.user.domain.YxUser; import co.yixiang.modules.user.domain.YxUser;
import co.yixiang.modules.user.service.YxUserBillService; import co.yixiang.modules.user.service.YxUserBillService;
import co.yixiang.modules.user.service.YxUserService; import co.yixiang.modules.user.service.YxUserService;
import co.yixiang.modules.user.service.dto.WechatUserDto;
import co.yixiang.modules.user.service.dto.YxWechatUserDto;
import co.yixiang.utils.FileUtil; import co.yixiang.utils.FileUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.github.binarywang.wxpay.exception.WxPayException;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Propagation;
@ -58,7 +67,7 @@ public class YxUserExtractServiceImpl extends BaseServiceImpl<YxUserExtractMappe
private final YxUserExtractMapper yxUserExtractMapper; private final YxUserExtractMapper yxUserExtractMapper;
private final YxUserService userService; private final YxUserService userService;
private final YxUserBillService billService; private final YxUserBillService billService;
private final ApplicationEventPublisher publisher;
/** /**
* 开始提现 * 开始提现
@ -222,29 +231,14 @@ public class YxUserExtractServiceImpl extends BaseServiceImpl<YxUserExtractMappe
userService.incBrokeragePrice(resources.getExtractPrice(),resources.getUid()); userService.incBrokeragePrice(resources.getExtractPrice(),resources.getUid());
resources.setFailTime(new Date()); resources.setFailTime(new Date());
}
//todo 此处为企业付款,没经过测试
/**
boolean isTest = true;
if(!isTest){
YxWechatUserDto wechatUser = generator.convert(wechatUserService.getOne(new LambdaQueryWrapper<YxWechatUser>().eq("uid",resources.getUid())),YxWechatUserDto.class);
if(ObjectUtil.isNotNull(wechatUser)){
try {
payService.entPay(wechatUser.getOpenid(),resources.getId().toString(),
resources.getRealName(),
resources.getExtractPrice().multiply(new BigDecimal(100)).intValue());
} catch (WxPayException e) {
throw new BadRequestException(e.getMessage());
}
}else{ }else{
throw new BadRequestException("不是微信用户无法退款"); //模板消息支付成功发布事件
TemplateBean templateBean = TemplateBean.builder()
.extractId( resources.getId())
.templateType(TemplateListenEnum.TYPE_8.getValue())
.build();
publisher.publishEvent(new TemplateEvent(this,templateBean));
} }
}
**/
this.saveOrUpdate(resources); this.saveOrUpdate(resources);
} }
} }

View File

@ -9,14 +9,26 @@
package co.yixiang.modules.mp.listener; package co.yixiang.modules.mp.listener;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.ObjectUtil;
import co.yixiang.enums.BillDetailEnum;
import co.yixiang.enums.PayTypeEnum; import co.yixiang.enums.PayTypeEnum;
import co.yixiang.event.TemplateBean; import co.yixiang.event.TemplateBean;
import co.yixiang.event.TemplateEvent; import co.yixiang.event.TemplateEvent;
import co.yixiang.event.TemplateListenEnum; import co.yixiang.event.TemplateListenEnum;
import co.yixiang.exception.BadRequestException;
import co.yixiang.message.rocketmq.MqProducer; import co.yixiang.message.rocketmq.MqProducer;
import co.yixiang.modules.activity.domain.YxUserExtract;
import co.yixiang.modules.activity.service.YxUserExtractService;
import co.yixiang.modules.mp.service.WeiXinSubscribeService; import co.yixiang.modules.mp.service.WeiXinSubscribeService;
import co.yixiang.modules.mp.service.WeixinPayService; import co.yixiang.modules.mp.service.WeixinPayService;
import co.yixiang.modules.mp.service.WeixinTemplateService; import co.yixiang.modules.mp.service.WeixinTemplateService;
import co.yixiang.modules.user.domain.YxUser;
import co.yixiang.modules.user.service.YxUserBillService;
import co.yixiang.modules.user.service.YxUserService;
import co.yixiang.modules.user.service.dto.WechatUserDto;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.github.binarywang.wxpay.exception.WxPayException;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEvent; import org.springframework.context.ApplicationEvent;
@ -25,6 +37,8 @@ import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Date;
import java.util.UUID;
/** /**
* @author hupeng * @author hupeng
@ -33,13 +47,20 @@ import java.math.BigDecimal;
@Slf4j @Slf4j
@Component @Component
public class TemplateListener implements SmartApplicationListener { public class TemplateListener implements SmartApplicationListener {
@Autowired
private YxUserService userService;
@Autowired @Autowired
private WeixinTemplateService weixinTemplateService; private WeixinTemplateService weixinTemplateService;
@Autowired @Autowired
private WeixinPayService weixinPayService; private WeixinPayService weixinPayService;
@Autowired @Autowired
private WeiXinSubscribeService weiXinSubscribeService; private WeiXinSubscribeService weiXinSubscribeService;
@Autowired
private YxUserExtractService yxUserExtractService;
@Autowired
private WeixinPayService payService;
@Autowired
private YxUserBillService billService;
//@Autowired //@Autowired
//private MqProducer mqProducer; //private MqProducer mqProducer;
@ -86,6 +107,41 @@ public class TemplateListener implements SmartApplicationListener {
//使用MQ延时消息 //使用MQ延时消息
//mqProducer.sendMsg("yshop-topic", templateBean.getOrderId()); //mqProducer.sendMsg("yshop-topic", templateBean.getOrderId());
log.info("投递延时订单id [{}]", templateBean.getOrderId()); log.info("投递延时订单id [{}]", templateBean.getOrderId());
break;
case TYPE_8:
YxUserExtract resources = yxUserExtractService.getById(templateBean.getExtractId());
Boolean success = false;
YxUser user = userService.getById(resources.getUid());
if (user != null) {
WechatUserDto wechatUser = user.getWxProfile();
if (ObjectUtil.isNotNull(wechatUser)) {
try {
String nonce_str = UUID.randomUUID().toString().replace("-", "");
payService.entPay(wechatUser.getOpenid(), nonce_str,
resources.getRealName(),
resources.getExtractPrice().multiply(new BigDecimal(100)).intValue());
success = true;
} catch (WxPayException e) {
log.error("退款失败,原因:{}",e.getMessage());
}
}
}
if (!success) {
String mark = "提现失败,退回佣金" + resources.getExtractPrice() + "";
double balance = NumberUtil.add(user.getBrokeragePrice(), resources.getExtractPrice()).doubleValue();
//插入流水
billService.income(resources.getUid(), "提现失败", BillDetailEnum.CATEGORY_1.getValue(),
BillDetailEnum.TYPE_4.getValue(), resources.getExtractPrice().doubleValue(), balance,
mark, resources.getId().toString());
//返回提现金额
userService.incBrokeragePrice(resources.getExtractPrice(), resources.getUid());
resources.setFailTime(new Date());
yxUserExtractService.updateById(resources);
}
break; break;
default: default:
//todo //todo