From 21feddfa5f7d1482e7a8a9ef6c36379f0ee9a146 Mon Sep 17 00:00:00 2001
From: yujian <yujian@163.com>
Date: 星期一, 25 五月 2020 18:17:53 +0800
Subject: [PATCH] 支付宝订单号随机生成
---
fanli/src/main/java/com/yeshi/fanli/service/impl/shop/BanLiShopOrderPayServiceImpl.java | 279 +++++++++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 256 insertions(+), 23 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..3aa632a 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,33 @@
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.dto.msg.MsgRedPackUseContentDTO;
+import com.yeshi.fanli.entity.bus.msg.MsgMoneyDetail.MsgTypeMoneyTypeEnum;
+import com.yeshi.fanli.entity.common.AdminUser;
+import com.yeshi.fanli.entity.common.Config;
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.entity.system.ConfigKeyEnum;
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.AdminUserService;
+import com.yeshi.fanli.service.inter.config.ConfigService;
+import com.yeshi.fanli.service.inter.money.msg.UserMoneyMsgNotificationService;
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 +42,14 @@
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.ThreadUtil;
+import com.yeshi.fanli.util.charge.FuLuChargeApiUtil;
+import com.yeshi.fanli.util.email.MailSenderUtil;
import com.yeshi.fanli.util.factory.RedPackDetailFactory;
+import com.yeshi.fanli.util.rocketmq.MQMsgBodyFactory;
+import com.yeshi.fanli.util.rocketmq.MQTopicName;
+import com.yeshi.fanli.util.wx.BanLiShopWXPayUtil;
@Service
public class BanLiShopOrderPayServiceImpl implements BanLiShopOrderPayService {
@@ -49,7 +71,19 @@
@Resource
private RedPackDetailService redPackDetailService;
- @Transactional
+ @Resource
+ private UserMoneyMsgNotificationService userMoneyMsgNotificationService;
+
+ @Resource
+ private ConfigService configService;
+
+ @Resource
+ private AdminUserService adminUserService;
+
+ @Resource(name = "producer")
+ private Producer producer;
+
+ @Transactional(rollbackFor = Exception.class)
@Override
public void payOrderByHongBao(Long orderId) throws BanLiShopOrderException, RedPackBalanceException {
BanLiShopOrder order = banLiShopOrderService.selectByPrimaryKeyForUpdate(orderId);
@@ -57,7 +91,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,14 +122,17 @@
|| 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);
}
}
- @Transactional
+ @Transactional(rollbackFor = Exception.class)
@Override
public void payOrderByMoney(Long orderId, BigDecimal money) throws BanLiShopOrderException {
BanLiShopOrder order = banLiShopOrderService.selectByPrimaryKeyForUpdate(orderId);
@@ -124,7 +161,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,21 +175,26 @@
* 鏀粯鎴愬姛
*/
private void paySuccess(BanLiShopOrder order) {
- // 灏嗙孩鍖呮槑缁嗗鏄�
- RedPackDetail detail = null;
- try {
- detail = RedPackDetailFactory.createUseByShopOrder(order.getId(), order.getUid(), "", "",
- order.getHongBaoPayment());
- } catch (RedPackDetailException e) {
- e.printStackTrace();
- }
+ ThreadUtil.run(new Runnable() {
- if (detail != null) {
- redPackDetailService.changeDisplayByIdentifyCode(detail.getIdentifyCode(), true);
- }
+ @Override
+ public void run() {
+ long[] targetUids = new long[] { 3L, 4L };
+ Config config = configService.getConfig(ConfigKeyEnum.extractCodeEmailFrom.getKey());
+ String[] sts = config.getValue().split(",");
+ String account = sts[0];
+ String pwd = sts[1];
+ for (long adminId : targetUids) {
+ AdminUser adminUser = adminUserService.selectByPrimaryKey(adminId);
+ String msg = "鏈夋柊鐨勭孩鍖呭晢鍩庤鍗�";
+ boolean isS = MailSenderUtil.sendEmail(adminUser.getEmail(), account, pwd, "鏈夋柊鐨勭孩鍖呭晢鍩庤鍗�", msg);
+ }
+ }
+ });
+
}
- @Transactional
+ @Transactional(rollbackFor = Exception.class)
@Override
public void refund(Long orderId) throws BanLiShopOrderException {
// 璁㈠崟閫�娆�
@@ -157,7 +202,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 +230,209 @@
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 = MQMsgBodyFactory.create(MQTopicName.TOPIC_ORDER,
+ OrderTopicTagEnum.banLiShopOrderRefund, msg);
+ 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(rollbackFor = Exception.class)
+ @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);
+ }
+ }
+
+ // 娑堟伅鍙戦��
+ MsgRedPackUseContentDTO dto = new MsgRedPackUseContentDTO();
+ dto.setGoodsSetName(order.getOrderGoods().getSetName());
+ dto.setHongBao(order.getHongBaoPayment());
+ dto.setMoney(order.getMoneyPayment());
+ dto.setTime(new Date());
+ userMoneyMsgNotificationService.redPackMsg(order.getUid(), MsgTypeMoneyTypeEnum.redPackUseSuccess,
+ new Gson().toJson(dto), null);
+
+ 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());
+ }
+ }
+
+ @Transactional(rollbackFor = Exception.class)
+ @Override
+ public void invalidOrderByOrderId(Long orderId, String stateDesc) throws BanLiShopOrderException {
+
+ BanLiShopOrder order = banLiShopOrderService.selectByPrimaryKeyForUpdate(orderId);
+ if (order == null)
+ return;
+ // 閫�娆�
+ if (order.getState() == BanLiShopOrder.STATE_NO_PAY) {// 鐘舵�佽繕鏄湭鏀粯
+ // 閫�娆剧孩鍖�
+ if (order.getHongBaoPaymentState() != null
+ && order.getHongBaoPaymentState() == BanLiShopOrder.PAY_STATE_PAID) {
+ BanLiShopGoods goods = banLiShopGoodsService.selectByPrimaryKey(order.getGoods().getId());
+ BanLiShopGoodsClass goodsClass = banLiShopGoodsClassService
+ .selectByPrimaryKey(goods.getGoodsClass().getId());
+ BanLiShopGoodsSets set = banLiShopGoodsSetService.selectByPrimaryKey(order.getGoodsSet().getId());
+ // 绾㈠寘閫�娆�
+ RedPackDetail detail = null;
+ try {
+ detail = RedPackDetailFactory.createShopOrderDrawBack(orderId, order.getUid(), goodsClass.getName(),
+ set.getName(), order.getHongBaoPayment());
+ } catch (RedPackDetailException e) {
+ e.printStackTrace();
+ }
+
+ if (detail == null)
+ throw new BanLiShopOrderException(4, "绾㈠寘璇︽儏澶辫触");
+ try {
+ redPackBalanceService.addRedPack(order.getUid(), order.getHongBaoPayment(), detail);
+ } catch (RedPackBalanceException e) {
+ throw new BanLiShopOrderException(5, "绾㈠寘閫�娆惧け璐�");
+ }
+
+ BanLiShopOrder update = new BanLiShopOrder(order.getId());
+ update.setHongBaoPaymentState(BanLiShopOrder.PAY_STATE_REFUND);
+ update.setUpdateTime(new Date());
+ banLiShopOrderService.udpateSelectiveByPrimaryKey(update);
+ }
+
+ banLiShopOrderService.invalidOrderByOrderId(orderId, stateDesc);
+ }
+
}
}
--
Gitblit v1.8.0