@@ -8,7 +8,6 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl ;
import com.github.yulichang.wrapper.MPJLambdaWrapper ;
import com.peanut.common.utils.ShiroUtils ;
import com.peanut.config.Constants ;
import com.peanut.modules.book.service.BookBuyConfigService ;
import com.peanut.modules.book.service.BuyOrderService ;
import com.peanut.modules.book.service.MyUserService ;
@@ -21,11 +20,13 @@ import com.peanut.modules.master.service.UserCourseBuyService;
import com.peanut.modules.pay.refund.entity.PayRefundOrder ;
import com.peanut.modules.pay.refund.service.PayRefundOrderService ;
import com.peanut.modules.pay.weChatPay.config.WechatPayConfig ;
import com.peanut.modules.pay.weChatPay.dto.WeChatRefundInfo ;
import com.peanut.modules.pay.weChatPay.dto.WechatPaymentInfo ;
import com.peanut.modules.pay.weChatPay.service.WxpayService ;
import com.peanut.modules.pay.weChatPay.util.HttpUtils ;
import com.peanut.modules.pay.weChatPay.util.WechatPayValidator ;
import com.peanut.modules.pay.weChatPay.util.WxPayUtil ;
import com.qiniu.util.Json ;
import lombok.extern.slf4j.Slf4j ;
import org.springframework.beans.factory.annotation.Autowired ;
import org.springframework.stereotype.Service ;
@@ -79,10 +80,6 @@ public class WxpayServiceImpl extends ServiceImpl<PayWechatOrderDao, PayWechatOr
@Autowired
private JfTransactionDetailsDao jfTransactionDetailsDao ;
@Autowired
private BuyOrderRefundService buyOrderRefundService ;
@Autowired
private BuyOrderRefundLogService buyOrderRefundLogService ;
@Autowired
private UserVipService userVipService ;
@Autowired
private CouponService couponService ;
@@ -94,6 +91,12 @@ public class WxpayServiceImpl extends ServiceImpl<PayWechatOrderDao, PayWechatOr
private AiVipLogService aiVipLogService ;
@Autowired
private UserCourseBuyLogDao userCourseBuyLogDao ;
@Autowired
private BuyOrderRefundLogService buyOrderRefundLogService ;
@Autowired
private MyUserService myUserService ;
@Autowired
private BuyOrderRefundService buyOrderRefundService ;
@Override
public void prepay ( WechatPaymentInfo paymentInfo ) {
@@ -141,6 +144,7 @@ public class WxpayServiceImpl extends ServiceImpl<PayWechatOrderDao, PayWechatOr
} else {
responseJson = wxPayUtil . doPostWexinV3 ( wechatPayConfig . getPayUrl ( ) , json . toJSONString ( ) , " " ) ;
}
System . out . println ( responseJson ) ;
String prepayId = responseJson . getString ( " prepay_id " ) ;
if ( paymentInfo . getBuyOrderId ( ) = = null ) {
payWechatOrderService . add ( paymentInfo . getOrderSn ( ) , prepayId ) ;
@@ -355,6 +359,71 @@ public class WxpayServiceImpl extends ServiceImpl<PayWechatOrderDao, PayWechatOr
return responseJson . toJSONString ( ) ;
}
@Override
public void refund ( WeChatRefundInfo refundInfo ) {
Map < String , Object > paramMap = new HashMap < > ( ) ;
BigDecimal refund = new BigDecimal ( refundInfo . getRefundAmount ( ) . toString ( ) ) ;
//原订单总金额
BigDecimal total = refundInfo . getTotalAmount ( ) ;
// 这里 * 100, 微信支付单位为 ‘分’
BigDecimal hand = new BigDecimal ( " 100 " ) ;
Map < String , Object > amountMap = new HashMap < > ( ) ;
amountMap . put ( " refund " , refund . multiply ( hand ) ) ;
amountMap . put ( " total " , total . multiply ( hand ) . intValue ( ) ) ;
amountMap . put ( " currency " , " CNY " ) ;
paramMap . put ( " amount " , amountMap ) ;
paramMap . put ( " out_refund_no " , refundInfo . getRefundNo ( ) ) ;
//微信支付订单号
paramMap . put ( " out_trade_no " , refundInfo . getOrderSn ( ) ) ;
//退款原因
paramMap . put ( " reason " , refundInfo . getRemark ( ) ) ;
String appid = " " ;
if ( refundInfo . getAppName ( ) = = null | | " " . equals ( refundInfo . getAppName ( ) ) ) {
appid = wechatPayConfig . getAppId ( ) ;
} else if ( " zmzm " . equals ( refundInfo . getAppName ( ) ) ) {
appid = wechatPayConfig . getZmzmappId ( ) ;
} else if ( " wumen " . equals ( refundInfo . getAppName ( ) ) ) {
appid = wechatPayConfig . getWumenappId ( ) ;
} else if ( " xlkj " . equals ( refundInfo . getAppName ( ) ) ) {
appid = wechatPayConfig . getXlkjappId ( ) ;
} else if ( " thyy " . equals ( refundInfo . getAppName ( ) ) ) {
appid = wechatPayConfig . getThyyappId ( ) ;
}
// app id
paramMap . put ( " appid " , appid ) ;
String notify_url = wechatPayConfig . getRefundNotifyUrl ( ) ;
String mchName = " " ;
if ( " trainingClass " . equals ( refundInfo . getOrderType ( ) ) | | " lsorder " . equals ( refundInfo . getOrderType ( ) ) ) {
mchName = " LS " ;
notify_url = wechatPayConfig . getLsRefundNotifyUrl ( ) ;
}
paramMap . put ( " notify_url " , notify_url ) ;
JSONObject json = JSONObject . parseObject ( JSON . toJSONString ( paramMap ) ) ;
log . info ( " =======微信退款申请请求参数:{} " , json . toJSONString ( ) ) ;
log . info ( " >>>>>>>>>>App请求微信退款申请接口 " ) ;
JSONObject responseJson = wxPayUtil . doPostWexinV3 ( wechatPayConfig . getRefundUrl ( ) , json . toJSONString ( ) , mchName ) ;
// JSONObject responseJson = new JSONObject();
// responseJson.put("status","SUCCESS");
// responseJson.put("refund_id",System.currentTimeMillis());
System . out . println ( responseJson ) ;
log . info ( " >>>>>>>>>>>微信退款返回的信息是 resJson = {} " , responseJson . toJSONString ( ) ) ;
if ( " SUCCESS " . equals ( responseJson . get ( " status " ) ) ) {
buyOrderRefundLogService . insertRefundLog ( refundInfo . getRefundId ( ) , 1 , 2 ) ;
BuyOrderRefund buyOrderRefund = buyOrderRefundService . getById ( refundInfo . getRefundId ( ) ) ;
buyOrderRefund . setWxRefundNo ( responseJson . getString ( " refund_id " ) ) ;
buyOrderRefundService . updateById ( buyOrderRefund ) ;
} else {
buyOrderRefundLogService . insertRefundLog ( refundInfo . getRefundId ( ) , 1 , 3 ) ;
}
// return responseJson.toJSONString();
}
private void userCoinJf ( BuyOrder order ) {
MyUserEntity userEntity = userService . getById ( order . getUserId ( ) ) ;
userEntity . setJf ( userEntity . getJf ( ) . subtract ( order . getJfDeduction ( ) ) ) ;
@@ -378,6 +447,18 @@ public class WxpayServiceImpl extends ServiceImpl<PayWechatOrderDao, PayWechatOr
// 解密resource中的通知数据
String resource = bodyMap . get ( " resource " ) . toString ( ) ;
Map < String , Object > resourceMap = WechatPayValidator . decryptFromResource ( resource , wechatPayConfig . getApiV3Key ( ) , 2 ) ;
/*BuyOrder orderFalse = buyOrderService.getOne(new QueryWrapper<BuyOrder>().eq("user_id",149299).orderByDesc("order_id"));
BuyOrderRefund refundFalse = buyOrderRefundService.getOne(new QueryWrapper<BuyOrderRefund>().eq("user_id",149299).orderByDesc("id"));
Map<String, Object> resourceMap = new HashMap<>();
resourceMap.put("refund_status","SUCCESS");
resourceMap.put("out_trade_no",orderFalse.getOrderSn());
resourceMap.put("refund_id",System.currentTimeMillis());
resourceMap.put("out_refund_no",refundFalse.getRefundNo());
Map<String,BigDecimal> amount = new HashMap<>();
amount.put("refund",orderFalse.getRealMoney());
resourceMap.put("amount",amount);*/
log . info ( " 微信退款回调结果 msg={} " , resourceMap ) ;
if ( " SUCCESS " . equals ( resourceMap . get ( " refund_status " ) . toString ( ) ) ) {
log . info ( " >>>>>>>>>>>微信退款成功!<<<<<<<<<<<<< " ) ;
@@ -385,15 +466,40 @@ public class WxpayServiceImpl extends ServiceImpl<PayWechatOrderDao, PayWechatOr
w . selectAll ( BuyOrder . class ) ;
w . leftJoin ( PayWechatOrderEntity . class , PayWechatOrderEntity : : getOrderSn , BuyOrder : : getOrderSn ) ;
w . eq ( " t1.order_id " , resourceMap . get ( " transaction_id " ) . toString ( ) ) ;
BuyOrder order = buyOrderService . getOne ( w ) ;
BuyOrderRefund buyOrderRefund = buyOrderRefundService . getOne ( new QueryWrapper < BuyOrderRefund > ( ) . eq ( " order_id " , order . getOrderId ( ) ) ) ;
buyOrderRefund . setStatus ( 1 ) ;
buyOrderRefundService . updateById ( buyOrderRefund ) ;
buyOrderRefundLogService . insertRefundLog ( buyOrderRefund . getId ( ) , 4 , 1 ) ;
PayRefundOrder refund = new PayRefundOrder ( ) ;
refund . setPayType ( " 1 " ) ;
refund . setOrderId ( order . getOrderId ( ) ) ;
refund . setTradeNo ( resourceMap . get ( " transaction_id " ) . toString ( ) ) ;
refund . setOutTradeNo ( resourceMap . get ( " out_trade_no " ) . toString ( ) ) ;
refund . setRefundFee ( ( ( Map ) resourceMap . get ( " amount " ) ) . get ( " refund " ) . toString ( ) ) ;
refundOrderService . save ( refund ) ;
MyUserEntity user = myUserService . getById ( order . getUserId ( ) ) ;
BuyOrderRefund refundInfo = buyOrderRefundService . getOne ( new QueryWrapper < BuyOrderRefund > ( ) . eq ( " order_id " , order . getOrderId ( ) ) ) ;
refundInfo . setStatus ( 1 ) ;
refundInfo . setWxRefundNo ( resourceMap . get ( " refund_id " ) . toString ( ) ) ;
buyOrderRefundService . updateById ( refundInfo ) ;
buyOrderService . refundOrder ( order , user , refundInfo . getId ( ) ) ;
buyOrderRefundLogService . insertRefundLog ( refundInfo . getId ( ) , 1 , 1 ) ;
buyOrderService . updateOrderStatus ( order . getUserId ( ) , order . getOrderSn ( ) , " 6 " ) ;
// refundOrderService.businessOpt(order);
} else {
if ( resourceMap . containsKey ( " out_refund_no " ) ) {
String refundNo = resourceMap . get ( " out_refund_no " ) . toString ( ) ;
BuyOrderRefund refundInfo = buyOrderRefundService . getOne ( new QueryWrapper < BuyOrderRefund > ( ) . eq ( " refund_no " , refundNo ) ) ;
refundInfo . setStatus ( 2 ) ;
refundInfo . setWxRefundNo ( resourceMap . get ( " refund_id " ) . toString ( ) ) ;
buyOrderRefundService . updateById ( refundInfo ) ;
buyOrderRefundLogService . insertRefundLog ( refundInfo . getId ( ) , 1 , 3 , resourceMap . get ( " reason " ) . toString ( ) ) ;
}
buyOrderService . refundOrder ( ) ;
}
}
@Override
@@ -413,6 +519,7 @@ public class WxpayServiceImpl extends ServiceImpl<PayWechatOrderDao, PayWechatOr
w . leftJoin ( PayWechatOrderEntity . class , PayWechatOrderEntity : : getOrderSn , BuyOrder : : getOrderSn ) ;
w . eq ( " t1.order_id " , resourceMap . get ( " transaction_id " ) . toString ( ) ) ;
BuyOrder order = buyOrderService . getOne ( w ) ;
PayRefundOrder refund = new PayRefundOrder ( ) ;
refund . setPayType ( " 1 " ) ;
refund . setOrderId ( order . getOrderId ( ) ) ;
@@ -420,17 +527,32 @@ public class WxpayServiceImpl extends ServiceImpl<PayWechatOrderDao, PayWechatOr
refund . setOutTradeNo ( resourceMap . get ( " out_trade_no " ) . toString ( ) ) ;
refund . setRefundFee ( ( ( Map ) resourceMap . get ( " amount " ) ) . get ( " refund " ) . toString ( ) ) ;
refundOrderService . save ( refund ) ;
if ( Constants . ORDER_STATUS_REFUND . equals ( order . getOrderStatus ( ) ) ) {
BuyOrderRefund buyOrderRefund = buyOrderRefundService . getOne ( new LambdaQueryWrapper < BuyOrderRefund > ( )
. eq ( BuyOrderRefund : : getOrderId , order . getOrderId ( ) )
. orderByDesc ( BuyOrderRefund : : getId )
. last ( " limit 1 " ) ) ;
if ( buyOrderRefund ! = null ) {
buyOrderRefundLogService . insertRefundLog ( buyOrderRefund . getId ( ) , 4 , 1 ) ;
}
} else {
refundOrderService . businessOpt ( order ) ;
//refundOrderService.businessOpt(order);
MyUserEntity user = myUserService . getById ( order . getUserId ( ) ) ;
BuyOrderRefund refundInfo = buyOrderRefundService . getOne ( new QueryWrapper < BuyOrderRefund > ( ) . eq ( " order_id " , order . getOrderId ( ) ) ) ;
refundInfo . setStatus ( 1 ) ;
refundInfo . setWxRefundNo ( resourceMap . get ( " refund_id " ) . toString ( ) ) ;
buyOrderRefundService . updateById ( refundInfo ) ;
buyOrderService . refundOrder ( order , user , refundInfo . getId ( ) ) ;
buyOrderRefundLogService . insertRefundLog ( refundInfo . getId ( ) , 1 , 1 ) ;
buyOrderService . updateOrderStatus ( order . getUserId ( ) , order . getOrderSn ( ) , " 6 " ) ;
} else {
if ( resourceMap . containsKey ( " out_refund_no " ) ) {
String refundNo = resourceMap . get ( " out_refund_no " ) . toString ( ) ;
BuyOrderRefund refundInfo = buyOrderRefundService . getOne ( new QueryWrapper < BuyOrderRefund > ( ) . eq ( " refund_no " , refundNo ) ) ;
refundInfo . setStatus ( 2 ) ;
refundInfo . setWxRefundNo ( resourceMap . get ( " refund_id " ) . toString ( ) ) ;
buyOrderRefundService . updateById ( refundInfo ) ;
buyOrderRefundLogService . insertRefundLog ( refundInfo . getId ( ) , 1 , 3 , resourceMap . get ( " reason " ) . toString ( ) ) ;
}
}
}