处理企业付款
This commit is contained in:
@ -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;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
|
||||||
@ -55,37 +76,72 @@ public class TemplateListener implements SmartApplicationListener {
|
|||||||
TemplateEvent templateEvent = (TemplateEvent) applicationEvent;
|
TemplateEvent templateEvent = (TemplateEvent) applicationEvent;
|
||||||
//获取注册用户对象信息
|
//获取注册用户对象信息
|
||||||
TemplateBean templateBean = templateEvent.getTemplateBean();
|
TemplateBean templateBean = templateEvent.getTemplateBean();
|
||||||
log.info("模板事件类型:{}",templateBean.getTemplateType());
|
log.info("模板事件类型:{}", templateBean.getTemplateType());
|
||||||
switch (TemplateListenEnum.toType(templateBean.getTemplateType())){
|
switch (TemplateListenEnum.toType(templateBean.getTemplateType())) {
|
||||||
case TYPE_1:
|
case TYPE_1:
|
||||||
weixinTemplateService.paySuccessNotice(templateBean.getOrderId()
|
weixinTemplateService.paySuccessNotice(templateBean.getOrderId()
|
||||||
,templateBean.getPrice(),templateBean.getUid());
|
, templateBean.getPrice(), templateBean.getUid());
|
||||||
weiXinSubscribeService.paySuccessNotice(templateBean.getOrderId()
|
weiXinSubscribeService.paySuccessNotice(templateBean.getOrderId()
|
||||||
,templateBean.getPrice(),templateBean.getUid());
|
, templateBean.getPrice(), templateBean.getUid());
|
||||||
break;
|
break;
|
||||||
case TYPE_2:
|
case TYPE_2:
|
||||||
//处理退款与消息
|
//处理退款与消息
|
||||||
if(PayTypeEnum.WEIXIN.getValue().equals(templateBean.getPayType())){
|
if (PayTypeEnum.WEIXIN.getValue().equals(templateBean.getPayType())) {
|
||||||
BigDecimal bigDecimal = new BigDecimal("100");
|
BigDecimal bigDecimal = new BigDecimal("100");
|
||||||
int payPrice = bigDecimal.multiply(new BigDecimal(templateBean.getPrice())).intValue();
|
int payPrice = bigDecimal.multiply(new BigDecimal(templateBean.getPrice())).intValue();
|
||||||
weixinPayService.refundOrder(templateBean.getOrderId(),payPrice);
|
weixinPayService.refundOrder(templateBean.getOrderId(), payPrice);
|
||||||
}
|
}
|
||||||
|
|
||||||
weixinTemplateService.refundSuccessNotice(templateBean.getOrderId(),templateBean.getPrice(),
|
weixinTemplateService.refundSuccessNotice(templateBean.getOrderId(), templateBean.getPrice(),
|
||||||
templateBean.getUid(),templateBean.getTime());
|
templateBean.getUid(), templateBean.getTime());
|
||||||
break;
|
break;
|
||||||
case TYPE_3:
|
case TYPE_3:
|
||||||
weixinTemplateService.deliverySuccessNotice(templateBean.getOrderId(),templateBean.getDeliveryName(),
|
weixinTemplateService.deliverySuccessNotice(templateBean.getOrderId(), templateBean.getDeliveryName(),
|
||||||
templateBean.getDeliveryId(),templateBean.getUid());
|
templateBean.getDeliveryId(), templateBean.getUid());
|
||||||
break;
|
break;
|
||||||
case TYPE_4:
|
case TYPE_4:
|
||||||
weixinTemplateService.rechargeSuccessNotice(templateBean.getTime(),templateBean.getPrice(),
|
weixinTemplateService.rechargeSuccessNotice(templateBean.getTime(), templateBean.getPrice(),
|
||||||
templateBean.getUid());
|
templateBean.getUid());
|
||||||
break;
|
break;
|
||||||
case TYPE_7:
|
case TYPE_7:
|
||||||
//使用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
|
||||||
|
Reference in New Issue
Block a user