From 651f2856e9ae10aacbfb8327d967aacbb6d58333 Mon Sep 17 00:00:00 2001
From: admin <weikou2014>
Date: 星期三, 12 四月 2023 18:13:58 +0800
Subject: [PATCH] 大淘客API修复/唯品会订单爬取策略修改

---
 fanli/src/main/java/com/yeshi/fanli/service/impl/shop/BanLiShopOrderPayServiceImpl.java |  888 +++++++++++++++++++++++++++++-----------------------------
 1 files changed, 444 insertions(+), 444 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 3339eaf..d5b9d31 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
@@ -1,444 +1,444 @@
-package com.yeshi.fanli.service.impl.shop;
-
-import java.math.BigDecimal;
-import java.util.Date;
-
-import javax.annotation.Resource;
-
-import com.yeshi.fanli.entity.SystemEnum;
-import com.yeshi.fanli.service.inter.user.UserInfoService;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-import org.yeshi.utils.NumberUtil;
-import org.yeshi.utils.exception.WXOrderException;
-
-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;
-import com.yeshi.fanli.service.inter.shop.BanLiShopGoodsService;
-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.service.manger.msg.RocketMQManager;
-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 {
-    @Resource
-    private BanLiShopGoodsSetService banLiShopGoodsSetService;
-
-    @Resource
-    private BanLiShopGoodsService banLiShopGoodsService;
-
-    @Resource
-    private BanLiShopGoodsClassService banLiShopGoodsClassService;
-
-    @Resource
-    private RedPackBalanceService redPackBalanceService;
-
-    @Resource
-    private BanLiShopOrderService banLiShopOrderService;
-
-    @Resource
-    private RedPackDetailService redPackDetailService;
-
-    @Resource
-    private UserMoneyMsgNotificationService userMoneyMsgNotificationService;
-
-    @Resource
-    private ConfigService configService;
-
-    @Resource
-    private AdminUserService adminUserService;
-
-    @Resource
-    private RocketMQManager rocketMQManager;
-
-    @Resource
-    private UserInfoService userInfoService;
-
-    @Transactional(rollbackFor = Exception.class)
-    @Override
-    public void payOrderByHongBao(Long orderId) throws BanLiShopOrderException, RedPackBalanceException {
-        BanLiShopOrder order = banLiShopOrderService.selectByPrimaryKeyForUpdate(orderId);
-        if (order == null) {
-            throw new BanLiShopOrderException(1, "璁㈠崟涓嶅瓨鍦�");
-        }
-        if (order.getHongBaoPayment() == null)
-            return;
-
-        if (order.getHongBaoPaymentState() != null && order.getHongBaoPaymentState() == BanLiShopOrder.PAY_STATE_PAID) {
-            throw new BanLiShopOrderException(3, "閲嶅鏀粯");
-        }
-
-        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.createUseByShopOrder(orderId, order.getUid(), goodsClass.getName(),
-                    set.getName(), order.getHongBaoPayment());
-        } catch (RedPackDetailException e) {
-            e.printStackTrace();
-        }
-
-        if (detail == null)
-            throw new RedPackBalanceException(4, "绾㈠寘璇︽儏澶辫触");
-        redPackBalanceService.subRedPack(order.getUid(), order.getHongBaoPayment(), detail);
-
-        BanLiShopOrder update = new BanLiShopOrder();
-        update.setId(order.getId());
-        update.setHongBaoPaymentState(BanLiShopOrder.PAY_STATE_PAID);
-        // 鍒ゆ柇鍏朵粬寰呮敮浠橀」鏄惁宸茬粡鏀粯
-        update.setUpdateTime(new Date());
-        if (order.getState() == BanLiShopOrder.STATE_NO_PAY)
-            if ((order.getBalancePaymentState() == null
-                    || 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(rollbackFor = Exception.class)
-    @Override
-    public void payOrderByMoney(Long orderId, BigDecimal money) throws BanLiShopOrderException {
-        BanLiShopOrder order = banLiShopOrderService.selectByPrimaryKeyForUpdate(orderId);
-        if (order == null) {
-            throw new BanLiShopOrderException(1, "璁㈠崟涓嶅瓨鍦�");
-        }
-        if (order.getMoneyPayment() == null)
-            throw new BanLiShopOrderException(2, "涓嶉渶瑕侀噰鐢ㄧ幇閲戞敮浠�");
-
-        if (order.getMoneyPaymentState() != null && order.getMoneyPaymentState() != BanLiShopOrder.PAY_STATE_NOPAY) {
-            throw new BanLiShopOrderException(3, "閲嶅鏀粯");
-        }
-
-        if (order.getMoneyPayment().compareTo(money) > 0) {
-            throw new BanLiShopOrderException(4, "鏀粯閲戦涓嶅");
-        }
-
-        // 鏀粯鎴愬姛
-        BanLiShopOrder update = new BanLiShopOrder();
-        update.setId(order.getId());
-        update.setMoneyPaymentState(BanLiShopOrder.PAY_STATE_PAID);
-        // 鍒ゆ柇鍏朵粬寰呮敮浠橀」鏄惁宸茬粡鏀粯
-        update.setUpdateTime(new Date());
-        if (order.getState() == BanLiShopOrder.STATE_NO_PAY)
-            if ((order.getBalancePaymentState() == null
-                    || 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);
-        }
-    }
-
-    /**
-     * 鏀粯鎴愬姛
-     */
-    private void paySuccess(BanLiShopOrder order) {
-        ThreadUtil.run(new Runnable() {
-
-            @Override
-            public void run() {
-                SystemEnum system = userInfoService.getUserSystem(order.getUid());
-                long[] targetUids = new long[]{3L, 4L};
-                Config config = configService.getConfig(ConfigKeyEnum.extractCodeEmailFrom.getKey(),system);
-                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(rollbackFor = Exception.class)
-    @Override
-    public void refund(Long orderId) throws BanLiShopOrderException {
-        // 璁㈠崟閫�娆�
-        // 鏌ヨ璁㈠崟鏄惁宸茬粡琚嫆缁�
-        BanLiShopOrder order = banLiShopOrderService.selectByPrimaryKeyForUpdate(orderId);
-        if (order == null)
-            throw new BanLiShopOrderException(1, "璁㈠崟涓嶅瓨鍦�");
-        if (order.getState() == BanLiShopOrder.STATE_REJECT_REFUND_FAIL
-                || order.getState() == BanLiShopOrder.STATE_REJECT_REFUND_SUCCESS)
-            throw new BanLiShopOrderException(2, "璁㈠崟鏈鎷掔粷/璁㈠崟宸查��娆�");
-
-        BanLiShopOrder update = new BanLiShopOrder();
-        update.setId(order.getId());
-        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, "绾㈠寘閫�娆惧け璐�");
-            }
-            update.setHongBaoPaymentState(BanLiShopOrder.PAY_STATE_REFUND);
-            order.setHongBaoPaymentState(BanLiShopOrder.PAY_STATE_REFUND);
-        }
-
-        if (order.getMoneyPaymentState() != null && order.getMoneyPaymentState() == BanLiShopOrder.PAY_STATE_PAID) {
-            try {
-                boolean success = BanLiShopWXPayUtil.refund(order.getOrderNo(), order.getMoneyPayment());
-                if (success) {
-                    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);
-                    SendResult result = rocketMQManager.sendNormalMsg(message, 1000 * 60 * 5L, null);
-                    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);
-        }
-
-    }
-
-}
+package com.yeshi.fanli.service.impl.shop;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+import javax.annotation.Resource;
+
+import com.yeshi.fanli.entity.SystemEnum;
+import com.yeshi.fanli.service.inter.user.UserInfoService;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.yeshi.utils.NumberUtil;
+import org.yeshi.utils.exception.WXOrderException;
+
+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;
+import com.yeshi.fanli.service.inter.shop.BanLiShopGoodsService;
+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.service.manger.msg.RocketMQManager;
+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 {
+    @Resource
+    private BanLiShopGoodsSetService banLiShopGoodsSetService;
+
+    @Resource
+    private BanLiShopGoodsService banLiShopGoodsService;
+
+    @Resource
+    private BanLiShopGoodsClassService banLiShopGoodsClassService;
+
+    @Resource
+    private RedPackBalanceService redPackBalanceService;
+
+    @Resource
+    private BanLiShopOrderService banLiShopOrderService;
+
+    @Resource
+    private RedPackDetailService redPackDetailService;
+
+    @Resource
+    private UserMoneyMsgNotificationService userMoneyMsgNotificationService;
+
+    @Resource
+    private ConfigService configService;
+
+    @Resource
+    private AdminUserService adminUserService;
+
+    @Resource
+    private RocketMQManager rocketMQManager;
+
+    @Resource
+    private UserInfoService userInfoService;
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void payOrderByHongBao(Long orderId) throws BanLiShopOrderException, RedPackBalanceException {
+        BanLiShopOrder order = banLiShopOrderService.selectByPrimaryKeyForUpdate(orderId);
+        if (order == null) {
+            throw new BanLiShopOrderException(1, "璁㈠崟涓嶅瓨鍦�");
+        }
+        if (order.getHongBaoPayment() == null)
+            return;
+
+        if (order.getHongBaoPaymentState() != null && order.getHongBaoPaymentState() == BanLiShopOrder.PAY_STATE_PAID) {
+            throw new BanLiShopOrderException(3, "閲嶅鏀粯");
+        }
+
+        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.createUseByShopOrder(orderId, order.getUid(), goodsClass.getName(),
+                    set.getName(), order.getHongBaoPayment());
+        } catch (RedPackDetailException e) {
+            e.printStackTrace();
+        }
+
+        if (detail == null)
+            throw new RedPackBalanceException(4, "绾㈠寘璇︽儏澶辫触");
+        redPackBalanceService.subRedPack(order.getUid(), order.getHongBaoPayment(), detail);
+
+        BanLiShopOrder update = new BanLiShopOrder();
+        update.setId(order.getId());
+        update.setHongBaoPaymentState(BanLiShopOrder.PAY_STATE_PAID);
+        // 鍒ゆ柇鍏朵粬寰呮敮浠橀」鏄惁宸茬粡鏀粯
+        update.setUpdateTime(new Date());
+        if (order.getState() == BanLiShopOrder.STATE_NO_PAY)
+            if ((order.getBalancePaymentState() == null
+                    || 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(rollbackFor = Exception.class)
+    @Override
+    public void payOrderByMoney(Long orderId, BigDecimal money) throws BanLiShopOrderException {
+        BanLiShopOrder order = banLiShopOrderService.selectByPrimaryKeyForUpdate(orderId);
+        if (order == null) {
+            throw new BanLiShopOrderException(1, "璁㈠崟涓嶅瓨鍦�");
+        }
+        if (order.getMoneyPayment() == null)
+            throw new BanLiShopOrderException(2, "涓嶉渶瑕侀噰鐢ㄧ幇閲戞敮浠�");
+
+        if (order.getMoneyPaymentState() != null && order.getMoneyPaymentState() != BanLiShopOrder.PAY_STATE_NOPAY) {
+            throw new BanLiShopOrderException(3, "閲嶅鏀粯");
+        }
+
+        if (order.getMoneyPayment().compareTo(money) > 0) {
+            throw new BanLiShopOrderException(4, "鏀粯閲戦涓嶅");
+        }
+
+        // 鏀粯鎴愬姛
+        BanLiShopOrder update = new BanLiShopOrder();
+        update.setId(order.getId());
+        update.setMoneyPaymentState(BanLiShopOrder.PAY_STATE_PAID);
+        // 鍒ゆ柇鍏朵粬寰呮敮浠橀」鏄惁宸茬粡鏀粯
+        update.setUpdateTime(new Date());
+        if (order.getState() == BanLiShopOrder.STATE_NO_PAY)
+            if ((order.getBalancePaymentState() == null
+                    || 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);
+        }
+    }
+
+    /**
+     * 鏀粯鎴愬姛
+     */
+    private void paySuccess(BanLiShopOrder order) {
+        ThreadUtil.run(new Runnable() {
+
+            @Override
+            public void run() {
+                SystemEnum system = userInfoService.getUserSystem(order.getUid());
+                long[] targetUids = new long[]{3L, 4L};
+                Config config = configService.getConfig(ConfigKeyEnum.extractCodeEmailFrom.getKey(),system);
+                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(rollbackFor = Exception.class)
+    @Override
+    public void refund(Long orderId) throws BanLiShopOrderException {
+        // 璁㈠崟閫�娆�
+        // 鏌ヨ璁㈠崟鏄惁宸茬粡琚嫆缁�
+        BanLiShopOrder order = banLiShopOrderService.selectByPrimaryKeyForUpdate(orderId);
+        if (order == null)
+            throw new BanLiShopOrderException(1, "璁㈠崟涓嶅瓨鍦�");
+        if (order.getState() == BanLiShopOrder.STATE_REJECT_REFUND_FAIL
+                || order.getState() == BanLiShopOrder.STATE_REJECT_REFUND_SUCCESS)
+            throw new BanLiShopOrderException(2, "璁㈠崟鏈鎷掔粷/璁㈠崟宸查��娆�");
+
+        BanLiShopOrder update = new BanLiShopOrder();
+        update.setId(order.getId());
+        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, "绾㈠寘閫�娆惧け璐�");
+            }
+            update.setHongBaoPaymentState(BanLiShopOrder.PAY_STATE_REFUND);
+            order.setHongBaoPaymentState(BanLiShopOrder.PAY_STATE_REFUND);
+        }
+
+        if (order.getMoneyPaymentState() != null && order.getMoneyPaymentState() == BanLiShopOrder.PAY_STATE_PAID) {
+            try {
+                boolean success = BanLiShopWXPayUtil.refund(order.getOrderNo(), order.getMoneyPayment());
+                if (success) {
+                    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);
+                    SendResult result = rocketMQManager.sendNormalMsg(message, 1000 * 60 * 5L, null);
+                    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