admin
2020-05-19 744594ef1a2f530fc3e86ea9dc48b62247f79420
fanli/src/main/java/com/yeshi/fanli/service/impl/shop/BanLiShopOrderPayServiceImpl.java
@@ -16,16 +16,24 @@
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;
@@ -35,8 +43,11 @@
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;
@@ -60,10 +71,19 @@
   @Resource
   private RedPackDetailService redPackDetailService;
   @Resource
   private UserMoneyMsgNotificationService userMoneyMsgNotificationService;
   @Resource
   private ConfigService configService;
   @Resource
   private AdminUserService adminUserService;
   @Resource(name = "producer")
   private Producer producer;
   @Transactional
   @Transactional(rollbackFor = Exception.class)
   @Override
   public void payOrderByHongBao(Long orderId) throws BanLiShopOrderException, RedPackBalanceException {
      BanLiShopOrder order = banLiShopOrderService.selectByPrimaryKeyForUpdate(orderId);
@@ -112,7 +132,7 @@
      }
   }
   @Transactional
   @Transactional(rollbackFor = Exception.class)
   @Override
   public void payOrderByMoney(Long orderId, BigDecimal money) throws BanLiShopOrderException {
      BanLiShopOrder order = banLiShopOrderService.selectByPrimaryKeyForUpdate(orderId);
@@ -155,9 +175,26 @@
    * 支付成功
    */
   private void paySuccess(BanLiShopOrder order) {
      ThreadUtil.run(new Runnable() {
         @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 {
      // 订单退款
@@ -204,8 +241,8 @@
               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 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) {
@@ -280,7 +317,7 @@
      }
   }
   @Transactional
   @Transactional(rollbackFor = Exception.class)
   @Override
   public void charge(Long orderId) throws BanLiShopOrderException {
      BanLiShopOrder order = banLiShopOrderService.selectByPrimaryKey(orderId);
@@ -333,6 +370,15 @@
         }
      }
      // 消息发送
      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(),
@@ -345,4 +391,48 @@
      }
   }
   @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);
      }
   }
}