From e021e32a6ff0ec216f69c24f7ea929798bdce4c5 Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期二, 05 十一月 2019 11:37:58 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/div' into div --- fanli/src/main/java/com/yeshi/fanli/service/impl/shop/BanLiShopOrderPayServiceImpl.java | 94 +++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 87 insertions(+), 7 deletions(-) diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/shop/BanLiShopOrderPayServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/shop/BanLiShopOrderPayServiceImpl.java index 14fc3b4..12c8bcc 100644 --- a/fanli/src/main/java/com/yeshi/fanli/service/impl/shop/BanLiShopOrderPayServiceImpl.java +++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/shop/BanLiShopOrderPayServiceImpl.java @@ -11,6 +11,12 @@ import org.yeshi.utils.exception.WXOrderException; import org.yeshi.utils.wx.WXPayUtil; +import com.aliyun.openservices.ons.api.Message; +import com.aliyun.openservices.ons.api.Producer; +import com.aliyun.openservices.ons.api.SendResult; +import com.google.gson.Gson; +import com.yeshi.fanli.dto.mq.order.OrderTopicTagEnum; +import com.yeshi.fanli.dto.mq.order.body.BanLiShopOrderMQMsg; import com.yeshi.fanli.entity.redpack.RedPackDetail; import com.yeshi.fanli.entity.shop.BanLiShopGoods; import com.yeshi.fanli.entity.shop.BanLiShopGoodsClass; @@ -26,8 +32,9 @@ import com.yeshi.fanli.service.inter.shop.BanLiShopGoodsSetService; import com.yeshi.fanli.service.inter.shop.BanLiShopOrderPayService; import com.yeshi.fanli.service.inter.shop.BanLiShopOrderService; -import com.yeshi.fanli.util.Constant; import com.yeshi.fanli.util.factory.RedPackDetailFactory; +import com.yeshi.fanli.util.rocketmq.MQTopicName; +import com.yeshi.fanli.util.wx.BanLiShopWXPayUtil; @Service public class BanLiShopOrderPayServiceImpl implements BanLiShopOrderPayService { @@ -49,6 +56,9 @@ @Resource private RedPackDetailService redPackDetailService; + @Resource(name = "producer") + private Producer producer; + @Transactional @Override public void payOrderByHongBao(Long orderId) throws BanLiShopOrderException, RedPackBalanceException { @@ -57,7 +67,7 @@ throw new BanLiShopOrderException(1, "璁㈠崟涓嶅瓨鍦�"); } if (order.getHongBaoPayment() == null) - throw new BanLiShopOrderException(2, "涓嶉渶瑕侀噰鐢ㄧ孩鍖呮敮浠�"); + return; if (order.getHongBaoPaymentState() != null && order.getHongBaoPaymentState() == BanLiShopOrder.PAY_STATE_PAID) { throw new BanLiShopOrderException(3, "閲嶅鏀粯"); @@ -184,22 +194,92 @@ throw new BanLiShopOrderException(5, "绾㈠寘閫�娆惧け璐�"); } update.setHongBaoPaymentState(BanLiShopOrder.PAY_STATE_REFUND); + order.setHongBaoPaymentState(BanLiShopOrder.PAY_STATE_REFUND); } - // TODO 寰俊鏀粯閫�娆� if (order.getMoneyPaymentState() != null && order.getMoneyPaymentState() == BanLiShopOrder.PAY_STATE_PAID) { try { - boolean success = WXPayUtil.refund(order.getOrderNo(), order.getMoneyPayment(), order.getMoneyPayment(), - null, new WXAPPInfo(), null, null); + boolean success = BanLiShopWXPayUtil.refund(order.getOrderNo(), order.getMoneyPayment()); if (success) { - update.setMoneyPaymentState(BanLiShopOrder.PAY_STATE_REFUND); + update.setMoneyPaymentState(BanLiShopOrder.PAY_STATE_REFUNDING); + order.setMoneyPaymentState(BanLiShopOrder.PAY_STATE_REFUNDING); + // 鍙戦�侀��娆炬秷鎭� + BanLiShopOrderMQMsg msg = new BanLiShopOrderMQMsg(order.getId(), order.getUid()); + Message message = new Message(MQTopicName.TOPIC_ORDER.name(), + OrderTopicTagEnum.banLiShopOrderRefund.name(), new Gson().toJson(msg).getBytes()); + message.setStartDeliverTime(System.currentTimeMillis() + 1000 * 60 * 60 * 24L);// 寤舵椂24灏忔椂閫氱煡妫�娴嬪井淇¢��娆剧姸鎬� + SendResult result = producer.send(message); + if (result == null) { + throw new BanLiShopOrderException(8, "娑堟伅鍙戦�佸け璐�"); + } } else throw new BanLiShopOrderException(6, "寰俊鏀粯閫�娆惧け璐�"); - } catch (WXOrderException e) { throw new BanLiShopOrderException(6, "寰俊鏀粯閫�娆惧け璐�"); } } + + // 妫�鏌� 鏄惁閫�娆炬垚鍔� + if (update.getMoneyPaymentState() != null + && update.getMoneyPaymentState() == BanLiShopOrder.PAY_STATE_REFUNDING) { + try { + boolean isS = BanLiShopWXPayUtil.isRefundSuccess(order.getOrderNo()); + if (isS) { + update.setMoneyPaymentState(BanLiShopOrder.PAY_STATE_REFUND); + order.setMoneyPaymentState(BanLiShopOrder.PAY_STATE_REFUND); + } + } catch (WXOrderException e) { + throw new BanLiShopOrderException(7, "寰俊鏀粯閫�娆炬煡璇㈠け璐�"); + } + } + + if (update.getHongBaoPaymentState() != null || update.getMoneyPaymentState() != null) { + // 鑾峰彇鏁翠釜璁㈠崟鐨勯��娆剧姸鎬� + int state = getRefundState(order); + update.setState(state); + update.setUpdateTime(new Date()); + banLiShopOrderService.udpateSelectiveByPrimaryKey(update); + } + } + + /** + * 鑾峰彇鏁翠釜閫�娆剧姸鎬� + * + * @param order + * @return + */ + private int getRefundState(BanLiShopOrder order) { + int refundCount = 0; + int refundSuccessCount = 0; + + if (order.getHongBaoPayment() != null) { + refundCount++; + if (order.getHongBaoPaymentState() != null + && order.getHongBaoPaymentState() == BanLiShopOrder.PAY_STATE_REFUND) + refundSuccessCount++; + } + + if (order.getBalancePayment() != null) { + refundCount++; + if (order.getBalancePaymentState() != null + && order.getBalancePaymentState() == BanLiShopOrder.PAY_STATE_REFUND) + refundSuccessCount++; + } + + if (order.getMoneyPayment() != null) { + refundCount++; + if (order.getMoneyPaymentState() != null && order.getMoneyPaymentState() == BanLiShopOrder.PAY_STATE_REFUND) + refundSuccessCount++; + } + + if (refundCount == refundSuccessCount) + return BanLiShopOrder.STATE_REJECT_REFUND_SUCCESS;// 閫�娆炬垚鍔� + else { + if (refundSuccessCount == 0) + return BanLiShopOrder.STATE_REJECT;// 閫�娆句腑 + else + return BanLiShopOrder.STATE_REJECT_REFUND_PART_SUCCESS;// 閮ㄥ垎閫�娆炬垚鍔� + } } } -- Gitblit v1.8.0