From ca3e865a9e3c22fc24c7ca4b67ad8c25d3f2ef18 Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期二, 12 十一月 2019 11:01:31 +0800 Subject: [PATCH] 口令过期消息队列 --- fanli/src/main/java/com/yeshi/fanli/service/impl/shop/BanLiShopOrderPayServiceImpl.java | 185 +++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 164 insertions(+), 21 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..38d683c 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 @@ -7,18 +7,25 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import org.yeshi.utils.entity.wx.WXAPPInfo; +import org.yeshi.utils.NumberUtil; 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; import com.yeshi.fanli.entity.shop.BanLiShopGoodsSets; import com.yeshi.fanli.entity.shop.BanLiShopOrder; +import com.yeshi.fanli.entity.shop.ChargeTypeEnum; import com.yeshi.fanli.exception.redpack.RedPackBalanceException; import com.yeshi.fanli.exception.redpack.RedPackDetailException; import com.yeshi.fanli.exception.shop.BanLiShopOrderException; +import com.yeshi.fanli.exception.shop.FuLuChargeException; import com.yeshi.fanli.service.inter.redpack.RedPackBalanceService; import com.yeshi.fanli.service.inter.redpack.RedPackDetailService; import com.yeshi.fanli.service.inter.shop.BanLiShopGoodsClassService; @@ -27,7 +34,11 @@ 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.StringUtil; +import com.yeshi.fanli.util.charge.FuLuChargeApiUtil; 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 +60,9 @@ @Resource private RedPackDetailService redPackDetailService; + @Resource(name = "producer") + private Producer producer; + @Transactional @Override public void payOrderByHongBao(Long orderId) throws BanLiShopOrderException, RedPackBalanceException { @@ -57,7 +71,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, "閲嶅鏀粯"); @@ -88,7 +102,10 @@ || order.getBalancePaymentState() == BanLiShopOrder.PAY_STATE_PAID) && (order.getMoneyPaymentState() == null || order.getMoneyPaymentState() == BanLiShopOrder.PAY_STATE_PAID))// 鍏朵粬寰呮敮浠橀」宸茬粡鏀粯 + { update.setState(BanLiShopOrder.STATE_PAID); + update.setStateDesc("鏀粯鎴愬姛"); + } banLiShopOrderService.udpateSelectiveByPrimaryKey(update); if (update.getState() != null && update.getState() == BanLiShopOrder.STATE_PAID) { paySuccess(order); @@ -124,7 +141,10 @@ || order.getBalancePaymentState() == BanLiShopOrder.PAY_STATE_PAID) && (order.getHongBaoPaymentState() == null || order.getHongBaoPaymentState() == BanLiShopOrder.PAY_STATE_PAID))// 鍏朵粬寰呮敮浠橀」宸茬粡鏀粯 + { update.setState(BanLiShopOrder.STATE_PAID); + update.setStateDesc("鏀粯鎴愬姛"); + } banLiShopOrderService.udpateSelectiveByPrimaryKey(update); if (update.getState() != null && update.getState() == BanLiShopOrder.STATE_PAID) { paySuccess(order); @@ -135,18 +155,6 @@ * 鏀粯鎴愬姛 */ private void paySuccess(BanLiShopOrder order) { - // 灏嗙孩鍖呮槑缁嗗鏄� - RedPackDetail detail = null; - try { - detail = RedPackDetailFactory.createUseByShopOrder(order.getId(), order.getUid(), "", "", - order.getHongBaoPayment()); - } catch (RedPackDetailException e) { - e.printStackTrace(); - } - - if (detail != null) { - redPackDetailService.changeDisplayByIdentifyCode(detail.getIdentifyCode(), true); - } } @Transactional @@ -157,7 +165,8 @@ BanLiShopOrder order = banLiShopOrderService.selectByPrimaryKeyForUpdate(orderId); if (order == null) throw new BanLiShopOrderException(1, "璁㈠崟涓嶅瓨鍦�"); - if (order.getState() != BanLiShopOrder.STATE_REJECT) + if (order.getState() == BanLiShopOrder.STATE_REJECT_REFUND_FAIL + || order.getState() == BanLiShopOrder.STATE_REJECT_REFUND_SUCCESS) throw new BanLiShopOrderException(2, "璁㈠崟鏈鎷掔粷/璁㈠崟宸查��娆�"); BanLiShopOrder update = new BanLiShopOrder(); @@ -184,22 +193,156 @@ 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 * 5L);// 寤舵椂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 (order.getMoneyPaymentState() != null + && order.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;// 閮ㄥ垎閫�娆炬垚鍔� + } + } + + @Transactional + @Override + public void charge(Long orderId) throws BanLiShopOrderException { + BanLiShopOrder order = banLiShopOrderService.selectByPrimaryKey(orderId); + if (order == null) + throw new BanLiShopOrderException(1, "璁㈠崟涓嶅瓨鍦�"); + if (order.getState() != BanLiShopOrder.STATE_PAID) { + throw new BanLiShopOrderException(100, "璁㈠崟涓嶆槸澶勪簬浠樻鐘舵��"); + } + if (order.getChargeAccountType() == ChargeTypeEnum.phone) { + if (!StringUtil.isMobile(order.getChargeAccount())) { + throw new BanLiShopOrderException(101, "鐢佃瘽鍙风爜鏍煎紡涓嶆纭�"); + } + } else if (order.getChargeAccountType() == ChargeTypeEnum.qq) { + if (!NumberUtil.isNumeric(order.getChargeAccount())) { + throw new BanLiShopOrderException(101, "QQ鍙锋牸寮忛敊璇�"); + } + } else { + throw new BanLiShopOrderException(102, "闈炲厖鍊煎晢鍝�"); + } + // 鑾峰彇绂忕鐨勫椁� + BanLiShopGoodsSets set = banLiShopGoodsSetService.selectByPrimaryKey(order.getGoodsSet().getId()); + if (set == null) { + throw new BanLiShopOrderException(104, "鍟嗗搧濂楅宸蹭笅绾�"); + } + + if (StringUtil.isNullOrEmpty(set.getChargeFuLuNum())) { + throw new BanLiShopOrderException(105, "绂忕鍏呭�糏D涓虹┖"); + } + + // 鏀瑰彉鐘舵�佷负鎴愬姛 + BanLiShopOrder update = new BanLiShopOrder(order.getId()); + update.setState(BanLiShopOrder.STATE_SUCCESS); + update.setStateDesc("鍏呭�兼垚鍔�"); + update.setUpdateTime(new Date()); + update.setSuccessTime(new Date()); + banLiShopOrderService.udpateSelectiveByPrimaryKey(update); + + if (order.getHongBaoPayment() != null && order.getHongBaoPayment().compareTo(new BigDecimal(0)) > 0) { + // 灏嗙孩鍖呮槑缁嗗鏄� + RedPackDetail detail = null; + try { + detail = RedPackDetailFactory.createUseByShopOrder(order.getId(), order.getUid(), "", "", + order.getHongBaoPayment()); + } catch (RedPackDetailException e) { + e.printStackTrace(); + } + + if (detail != null) { + redPackDetailService.changeDisplayByIdentifyCode(detail.getIdentifyCode(), true); + } + } + + try { + if (Constant.IS_TEST) { + FuLuChargeApiUtil.shaXiangCharge(set.getChargeFuLuNum(), "banlishop" + order.getOrderNo(), + order.getChargeAccount()); + } else + FuLuChargeApiUtil.charge(set.getChargeFuLuNum(), "banlishop" + order.getOrderNo(), + order.getChargeAccount()); + } catch (FuLuChargeException e) { + throw new BanLiShopOrderException(e.getCode(), e.getMsg()); + } } } -- Gitblit v1.8.0