处理企业付款
This commit is contained in:
@ -25,5 +25,9 @@ public class TemplateBean {
|
||||
private String deliveryId;
|
||||
private String payType;
|
||||
private Long uid;
|
||||
/**
|
||||
* 提现申请ID
|
||||
*/
|
||||
private Long extractId;
|
||||
|
||||
}
|
||||
|
@ -20,7 +20,8 @@ public enum TemplateListenEnum {
|
||||
TYPE_4("4","充值成功通知"),
|
||||
TYPE_5("5","在线买单/收款成功通知"),
|
||||
TYPE_6("6","商家收款通知"),
|
||||
TYPE_7("7","用户下单未支付通知");
|
||||
TYPE_7("7","用户下单未支付通知"),
|
||||
TYPE_8("8","用户体现通知");
|
||||
private String value;
|
||||
private String desc;
|
||||
|
||||
|
@ -9,6 +9,7 @@
|
||||
package co.yixiang.modules.activity.service.impl;
|
||||
|
||||
import cn.hutool.core.util.NumberUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import co.yixiang.api.YshopException;
|
||||
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.PayTypeEnum;
|
||||
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.modules.activity.domain.YxUserExtract;
|
||||
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.service.YxUserBillService;
|
||||
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 com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.github.binarywang.wxpay.exception.WxPayException;
|
||||
import com.github.pagehelper.PageInfo;
|
||||
import lombok.AllArgsConstructor;
|
||||
import org.springframework.context.ApplicationEventPublisher;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Propagation;
|
||||
@ -58,7 +67,7 @@ public class YxUserExtractServiceImpl extends BaseServiceImpl<YxUserExtractMappe
|
||||
private final YxUserExtractMapper yxUserExtractMapper;
|
||||
private final YxUserService userService;
|
||||
private final YxUserBillService billService;
|
||||
|
||||
private final ApplicationEventPublisher publisher;
|
||||
|
||||
/**
|
||||
* 开始提现
|
||||
@ -222,29 +231,14 @@ public class YxUserExtractServiceImpl extends BaseServiceImpl<YxUserExtractMappe
|
||||
userService.incBrokeragePrice(resources.getExtractPrice(),resources.getUid());
|
||||
|
||||
resources.setFailTime(new Date());
|
||||
|
||||
}else{
|
||||
//模板消息支付成功发布事件
|
||||
TemplateBean templateBean = TemplateBean.builder()
|
||||
.extractId( resources.getId())
|
||||
.templateType(TemplateListenEnum.TYPE_8.getValue())
|
||||
.build();
|
||||
publisher.publishEvent(new TemplateEvent(this,templateBean));
|
||||
}
|
||||
|
||||
//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{
|
||||
throw new BadRequestException("不是微信用户无法退款");
|
||||
}
|
||||
|
||||
}
|
||||
**/
|
||||
|
||||
this.saveOrUpdate(resources);
|
||||
}
|
||||
}
|
||||
|
@ -9,14 +9,26 @@
|
||||
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.event.TemplateBean;
|
||||
import co.yixiang.event.TemplateEvent;
|
||||
import co.yixiang.event.TemplateListenEnum;
|
||||
import co.yixiang.exception.BadRequestException;
|
||||
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.WeixinPayService;
|
||||
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 org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.ApplicationEvent;
|
||||
@ -25,6 +37,8 @@ import org.springframework.scheduling.annotation.Async;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author hupeng
|
||||
@ -33,64 +47,106 @@ import java.math.BigDecimal;
|
||||
@Slf4j
|
||||
@Component
|
||||
public class TemplateListener implements SmartApplicationListener {
|
||||
|
||||
@Autowired
|
||||
private WeixinTemplateService weixinTemplateService;
|
||||
@Autowired
|
||||
private WeixinPayService weixinPayService;
|
||||
@Autowired
|
||||
private WeiXinSubscribeService weiXinSubscribeService;
|
||||
@Autowired
|
||||
private YxUserService userService;
|
||||
@Autowired
|
||||
private WeixinTemplateService weixinTemplateService;
|
||||
@Autowired
|
||||
private WeixinPayService weixinPayService;
|
||||
@Autowired
|
||||
private WeiXinSubscribeService weiXinSubscribeService;
|
||||
@Autowired
|
||||
private YxUserExtractService yxUserExtractService;
|
||||
@Autowired
|
||||
private WeixinPayService payService;
|
||||
@Autowired
|
||||
private YxUserBillService billService;
|
||||
//@Autowired
|
||||
//private MqProducer mqProducer;
|
||||
|
||||
@Override
|
||||
public boolean supportsEventType(Class<? extends ApplicationEvent> aClass) {
|
||||
return aClass == TemplateEvent.class;
|
||||
}
|
||||
@Override
|
||||
public boolean supportsEventType(Class<? extends ApplicationEvent> aClass) {
|
||||
return aClass == TemplateEvent.class;
|
||||
}
|
||||
|
||||
@Async
|
||||
@Override
|
||||
public void onApplicationEvent(ApplicationEvent applicationEvent) {
|
||||
//转换事件类型
|
||||
TemplateEvent templateEvent = (TemplateEvent) applicationEvent;
|
||||
//获取注册用户对象信息
|
||||
TemplateBean templateBean = templateEvent.getTemplateBean();
|
||||
log.info("模板事件类型:{}",templateBean.getTemplateType());
|
||||
switch (TemplateListenEnum.toType(templateBean.getTemplateType())){
|
||||
case TYPE_1:
|
||||
weixinTemplateService.paySuccessNotice(templateBean.getOrderId()
|
||||
,templateBean.getPrice(),templateBean.getUid());
|
||||
weiXinSubscribeService.paySuccessNotice(templateBean.getOrderId()
|
||||
,templateBean.getPrice(),templateBean.getUid());
|
||||
break;
|
||||
case TYPE_2:
|
||||
//处理退款与消息
|
||||
if(PayTypeEnum.WEIXIN.getValue().equals(templateBean.getPayType())){
|
||||
BigDecimal bigDecimal = new BigDecimal("100");
|
||||
int payPrice = bigDecimal.multiply(new BigDecimal(templateBean.getPrice())).intValue();
|
||||
weixinPayService.refundOrder(templateBean.getOrderId(),payPrice);
|
||||
}
|
||||
@Async
|
||||
@Override
|
||||
public void onApplicationEvent(ApplicationEvent applicationEvent) {
|
||||
//转换事件类型
|
||||
TemplateEvent templateEvent = (TemplateEvent) applicationEvent;
|
||||
//获取注册用户对象信息
|
||||
TemplateBean templateBean = templateEvent.getTemplateBean();
|
||||
log.info("模板事件类型:{}", templateBean.getTemplateType());
|
||||
switch (TemplateListenEnum.toType(templateBean.getTemplateType())) {
|
||||
case TYPE_1:
|
||||
weixinTemplateService.paySuccessNotice(templateBean.getOrderId()
|
||||
, templateBean.getPrice(), templateBean.getUid());
|
||||
weiXinSubscribeService.paySuccessNotice(templateBean.getOrderId()
|
||||
, templateBean.getPrice(), templateBean.getUid());
|
||||
break;
|
||||
case TYPE_2:
|
||||
//处理退款与消息
|
||||
if (PayTypeEnum.WEIXIN.getValue().equals(templateBean.getPayType())) {
|
||||
BigDecimal bigDecimal = new BigDecimal("100");
|
||||
int payPrice = bigDecimal.multiply(new BigDecimal(templateBean.getPrice())).intValue();
|
||||
weixinPayService.refundOrder(templateBean.getOrderId(), payPrice);
|
||||
}
|
||||
|
||||
weixinTemplateService.refundSuccessNotice(templateBean.getOrderId(),templateBean.getPrice(),
|
||||
templateBean.getUid(),templateBean.getTime());
|
||||
break;
|
||||
case TYPE_3:
|
||||
weixinTemplateService.deliverySuccessNotice(templateBean.getOrderId(),templateBean.getDeliveryName(),
|
||||
templateBean.getDeliveryId(),templateBean.getUid());
|
||||
break;
|
||||
case TYPE_4:
|
||||
weixinTemplateService.rechargeSuccessNotice(templateBean.getTime(),templateBean.getPrice(),
|
||||
templateBean.getUid());
|
||||
break;
|
||||
weixinTemplateService.refundSuccessNotice(templateBean.getOrderId(), templateBean.getPrice(),
|
||||
templateBean.getUid(), templateBean.getTime());
|
||||
break;
|
||||
case TYPE_3:
|
||||
weixinTemplateService.deliverySuccessNotice(templateBean.getOrderId(), templateBean.getDeliveryName(),
|
||||
templateBean.getDeliveryId(), templateBean.getUid());
|
||||
break;
|
||||
case TYPE_4:
|
||||
weixinTemplateService.rechargeSuccessNotice(templateBean.getTime(), templateBean.getPrice(),
|
||||
templateBean.getUid());
|
||||
break;
|
||||
case TYPE_7:
|
||||
//使用MQ延时消息
|
||||
//mqProducer.sendMsg("yshop-topic", 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;
|
||||
default:
|
||||
//todo
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user