admin
2020-06-10 271ae63c20fcbe28d29c47f1881138ff6551a2a1
fanli/src/main/java/com/yeshi/fanli/service/impl/order/CommonOrderServiceImpl.java
@@ -28,6 +28,8 @@
import com.yeshi.fanli.dto.mq.order.body.OrderConfirmMQMsg;
import com.yeshi.fanli.dto.order.CommonOrderAddResultDTO;
import com.yeshi.fanli.dto.pdd.PDDGoodsDetail;
import com.yeshi.fanli.dto.suning.SuningGoodsInfo;
import com.yeshi.fanli.dto.vip.goods.VIPGoodsInfo;
import com.yeshi.fanli.entity.accept.AcceptData;
import com.yeshi.fanli.entity.bus.user.HongBaoV2;
import com.yeshi.fanli.entity.bus.user.UserInfo;
@@ -37,20 +39,23 @@
import com.yeshi.fanli.entity.jd.JDGoods;
import com.yeshi.fanli.entity.jd.JDOrder;
import com.yeshi.fanli.entity.jd.JDOrderItem;
import com.yeshi.fanli.entity.money.InviteOrderSubsidyDebt;
import com.yeshi.fanli.entity.order.CommonOrder;
import com.yeshi.fanli.entity.order.CommonOrderGoods;
import com.yeshi.fanli.entity.order.CommonOrderTradeIdMap;
import com.yeshi.fanli.entity.order.ESOrder;
import com.yeshi.fanli.entity.order.HongBaoOrder;
import com.yeshi.fanli.entity.order.InviteOrderSubsidy;
import com.yeshi.fanli.entity.order.SourceTypeEnum;
import com.yeshi.fanli.entity.pdd.PDDOrder;
import com.yeshi.fanli.entity.suning.SuningOrderInfo;
import com.yeshi.fanli.entity.system.ConfigKeyEnum;
import com.yeshi.fanli.entity.system.SystemCoupon.CouponTypeEnum;
import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
import com.yeshi.fanli.entity.taobao.TaoBaoOrder;
import com.yeshi.fanli.entity.taobao.TaoBaoOrderGoods;
import com.yeshi.fanli.entity.taobao.TaoBaoWeiQuanOrder;
import com.yeshi.fanli.entity.vipshop.VipShopOrder;
import com.yeshi.fanli.entity.vipshop.VipShopOrderDetail;
import com.yeshi.fanli.exception.order.CommonOrderException;
import com.yeshi.fanli.exception.taobao.TaobaoGoodsDownException;
import com.yeshi.fanli.log.LogHelper;
@@ -60,7 +65,6 @@
import com.yeshi.fanli.service.inter.config.ConfigService;
import com.yeshi.fanli.service.inter.config.SystemCouponService;
import com.yeshi.fanli.service.inter.goods.CommonGoodsService;
import com.yeshi.fanli.service.inter.money.InviteOrderSubsidyDebtService;
import com.yeshi.fanli.service.inter.order.CommonOrderService;
import com.yeshi.fanli.service.inter.order.HongBaoOrderService;
import com.yeshi.fanli.service.inter.order.HongBaoV2Service;
@@ -84,9 +88,12 @@
import com.yeshi.fanli.util.pinduoduo.PinDuoDuoApiUtil;
import com.yeshi.fanli.util.rocketmq.MQMsgBodyFactory;
import com.yeshi.fanli.util.rocketmq.MQTopicName;
import com.yeshi.fanli.util.suning.SuningApiUtil;
import com.yeshi.fanli.util.suning.SuningUtil;
import com.yeshi.fanli.util.taobao.TaoBaoUtil;
import com.yeshi.fanli.util.taobao.TaoKeApiUtil;
import com.yeshi.fanli.util.user.UserLevelUtil;
import com.yeshi.fanli.util.vipshop.VipShopApiUtil;
import com.yeshi.fanli.vo.msg.ClientTextStyleVO;
import com.yeshi.fanli.vo.order.CommonOrderGoodsVO;
import com.yeshi.fanli.vo.order.CommonOrderVO;
@@ -137,9 +144,6 @@
   @Resource
   private InviteOrderSubsidyService inviteOrderSubsidyService;
   @Resource
   private InviteOrderSubsidyDebtService inviteOrderSubsidyDebtService;
   @Resource
   private UserVIPInfoService userVIPInfoService;
@@ -223,6 +227,7 @@
         List<Integer> listSource) throws CommonOrderException, Exception {
      int pageSize = Constant.PAGE_SIZE;
      List<CommonOrderVO> listOrder = commonOrderMapper.listUserOrder((page - 1) * pageSize, pageSize, uid, state,
            type, orderState, orderNo, startTime, endTime, dateType, listSource);
@@ -595,23 +600,24 @@
         if (HongBaoV2.TYPE_ZIGOU == hongBaoType) {
            // 奖励订单、免单 使用记录
            if (sourceType == null) {
               couponFactory(order, hasRewardCoupon, hongBaoState, hongBaoType, null, uid, vip, acceptData, hongBao);
               couponFactory(order, hasRewardCoupon, hongBaoState, hongBaoType, null, uid, vip, acceptData,
                     hongBao);
            } else if (sourceType == Constant.SOURCE_TYPE_TAOBAO) {
               couponFactory(order, hasRewardCoupon, hongBaoState, hongBaoType, listRecordTB, uid, vip,
                     acceptData, hongBao);
               couponFactory(order, hasRewardCoupon, hongBaoState, hongBaoType, listRecordTB, uid, vip, acceptData,
                     hongBao);
            } else if (sourceType == Constant.SOURCE_TYPE_JD) {
               couponFactory(order, hasRewardCoupon, hongBaoState, hongBaoType, listRecordJD, uid, vip,
                     acceptData, hongBao);
               couponFactory(order, hasRewardCoupon, hongBaoState, hongBaoType, listRecordJD, uid, vip, acceptData,
                     hongBao);
            } else if (sourceType == Constant.SOURCE_TYPE_PDD) {
               couponFactory(order, hasRewardCoupon, hongBaoState, hongBaoType, listRecordPDD, uid, vip,
                     acceptData, hongBao);
            }
         }
         // 分享、邀请 隐藏订单号
         if (HongBaoV2.TYPE_SHARE_GOODS == hongBaoType || HongBaoV2.TYPE_YAOQING == hongBaoType
               || HongBaoV2.TYPE_YIJI == hongBaoType || HongBaoV2.TYPE_ERJI == hongBaoType
               || HongBaoV2.TYPE_SHARE_YIJI == hongBaoType || HongBaoV2.TYPE_SHARE_ERJI == hongBaoType) {
         // 邀请 隐藏订单号
         if (HongBaoV2.TYPE_YAOQING == hongBaoType || HongBaoV2.TYPE_YIJI == hongBaoType
               || HongBaoV2.TYPE_ERJI == hongBaoType || HongBaoV2.TYPE_SHARE_YIJI == hongBaoType
               || HongBaoV2.TYPE_SHARE_ERJI == hongBaoType) {
            order.setOrderNo(UserUtil.filterOrderId(order.getOrderNo()));
         }
      }
@@ -627,7 +633,8 @@
    * @param signList
    */
   private void couponFactory(CommonOrderVO order, boolean hasRewardCoupon, Integer hongBaoState, Integer hongBaoType,
         List<UserSystemCouponRecord> list, Long uid, boolean vip, AcceptData acceptData, BigDecimal hongBao) throws Exception {
         List<UserSystemCouponRecord> list, Long uid, boolean vip, AcceptData acceptData, BigDecimal hongBao)
         throws Exception {
      // 是否免单商品
      boolean freeOrder = false;
@@ -726,10 +733,10 @@
      }
      // 使用奖励券 金额额限制
      if (hongBao.compareTo(Constant.REWARD_COUPON_LIMIT_MONEY) > 0){
      if (hongBao.compareTo(Constant.REWARD_COUPON_LIMIT_MONEY) > 0) {
         return;
      }
      // 是否可使用奖励券
      if (!rewardSuccess && !freeOrder && HongBaoV2.TYPE_ZIGOU == hongBaoType
            && HongBaoV2.STATE_YILINGQU == hongBaoState && !vip && CommonOrder.STATE_WQ != order.getState()) {
@@ -1155,6 +1162,123 @@
            commonOrderGoodsMapper.insertSelective(cog);
         } else {
         }
         newCommonOrder.setUserInfo(new UserInfo(uid));
         commonOrderList.add(addCommonOrder(newCommonOrder));
      }
      addConfirmMQMsg(commonOrderList);
      return commonOrderList;
   }
   @Transactional(rollbackFor = Exception.class)
   @Override
   public List<CommonOrderAddResultDTO> addVipShopOrder(VipShopOrder vipShopOrder, Long uid)
         throws CommonOrderException {
      List<CommonOrderAddResultDTO> commonOrderList = new ArrayList<>();
      // 判断所有的订单状态
      int invalidCount = 0;
      for (VipShopOrderDetail detail : vipShopOrder.getDetailList()) {
         if (detail.getStatus() == VipShopOrderDetail.STATUS_INVALID) {
            invalidCount++;
         }
      }
      // 获取整体订单的状态
      int wholeOrderState = 0;
      if (vipShopOrder.getDetailList().size() == invalidCount)
         wholeOrderState = CommonOrder.STATE_WHOLE_ORDER_SHIXIAO;
      else if (invalidCount == 0)
         wholeOrderState = CommonOrder.STATE_WHOLE_ORDER_YOUXIAO;
      else
         wholeOrderState = CommonOrder.STATE_WHOLE_ORDER_BUFENYOUXIAO;
      List<VipShopOrderDetail> orderItemList = vipShopOrder.getDetailList();
      vipShopOrder.setDetailList(null);
      for (VipShopOrderDetail itemOrder : orderItemList) {
         itemOrder.setOrder(vipShopOrder);
         CommonOrder newCommonOrder = CommonOrderFactory.create(itemOrder);
         CommonOrderGoods cog = new CommonOrderGoods();
         cog.setGoodsId(itemOrder.getGoodsId());
         cog.setGoodsType(Constant.SOURCE_TYPE_VIP);
         newCommonOrder.setCommonOrderGoods(cog);
         newCommonOrder.setStateWholeOrder(wholeOrderState);
         // 订单商品插入
         List<CommonOrderGoods> commonGoodsList = commonOrderGoodsMapper.listByGoodsIdAndGoodsType(cog.getGoodsId(),
               cog.getGoodsType());
         if (commonGoodsList.size() <= 0)// 不存在就插入商品
         {
            VIPGoodsInfo goods = VipShopApiUtil.getGoodsDetail(itemOrder.getGoodsId());
            if (goods == null) {
               goods = new VIPGoodsInfo();
               goods.setGoodsName(itemOrder.getGoodsName());
               goods.setVipPrice("");
               goods.setGoodsId(itemOrder.getGoodsId());
               goods.setGoodsThumbUrl(itemOrder.getGoodsThumb());
            }
            if (goods != null) {
               cog = CommonOrderGoodsFactory.create(goods);
            }
            cog.setCreateTime(new Date());
            cog.setUpdateTime(new Date());
            commonOrderGoodsMapper.insertSelective(cog);
         } else {
         }
         newCommonOrder.setUserInfo(new UserInfo(uid));
         commonOrderList.add(addCommonOrder(newCommonOrder));
      }
      addConfirmMQMsg(commonOrderList);
      return commonOrderList;
   }
   @Transactional(rollbackFor = Exception.class)
   @Override
   public List<CommonOrderAddResultDTO> addSuningOrder(List<SuningOrderInfo> suningOrderList, Long uid)
         throws CommonOrderException {
      List<CommonOrderAddResultDTO> commonOrderList = new ArrayList<>();
      // 判断所有的订单状态
      int invalidCount = 0;
      for (SuningOrderInfo order : suningOrderList) {
         if ("退款".equalsIgnoreCase(order.getOrderLineStatusDesc())
               || "订单已取消".equalsIgnoreCase(order.getOrderLineStatusDesc())) {
            invalidCount++;
         }
      }
      // 获取整体订单的状态
      int wholeOrderState = 0;
      if (suningOrderList.size() == invalidCount)
         wholeOrderState = CommonOrder.STATE_WHOLE_ORDER_SHIXIAO;
      else if (invalidCount == 0)
         wholeOrderState = CommonOrder.STATE_WHOLE_ORDER_YOUXIAO;
      else
         wholeOrderState = CommonOrder.STATE_WHOLE_ORDER_BUFENYOUXIAO;
      for (SuningOrderInfo suningOrderInfo : suningOrderList) {
         CommonOrder newCommonOrder = CommonOrderFactory.create(suningOrderInfo);
         CommonOrderGoods cog = new CommonOrderGoods();
         cog.setGoodsId(suningOrderInfo.getGoodsNum() + "");
         cog.setGoodsType(Constant.SOURCE_TYPE_SUNING);
         newCommonOrder.setCommonOrderGoods(cog);
         newCommonOrder.setStateWholeOrder(wholeOrderState);
         // 订单商品插入
         List<CommonOrderGoods> commonGoodsList = commonOrderGoodsMapper.listByGoodsIdAndGoodsType(cog.getGoodsId(),
               cog.getGoodsType());
         if (commonGoodsList.size() <= 0)// 不存在就插入商品
         {
            SuningGoodsInfo pddGoods = null;
            // TODO 需要获取
            pddGoods = SuningApiUtil.getGoodsDetail(suningOrderInfo.getGoodsNum(), suningOrderInfo.getSellerCode());
            if (pddGoods != null) {
               cog = CommonOrderGoodsFactory.create(pddGoods);
            }
            cog.setCreateTime(new Date());
            cog.setUpdateTime(new Date());
            commonOrderGoodsMapper.insertSelective(cog);
            newCommonOrder.setCommonOrderGoods(cog);
         } else {
         }
         newCommonOrder.setUserInfo(new UserInfo(uid));
         commonOrderList.add(addCommonOrder(newCommonOrder));
@@ -1823,6 +1947,7 @@
         List<Integer> listSource) throws CommonOrderException, Exception {
      int pageSize = Constant.PAGE_SIZE;
      List<CommonOrderVO> listOrder = commonOrderMapper.getOrderList((page - 1) * pageSize, pageSize, uid, state,
            type, orderState, orderNo, startTime, endTime, dateType, listSource);
@@ -1846,7 +1971,7 @@
   @Override
   public long countOrderList(Long uid, Integer state, Integer type, Integer orderState, String orderNo,
         String startTime, String endTime, Integer dateType, List<Integer> listSource) throws CommonOrderException {
         String startTime, String endTime, Integer dateType, List<Integer> listSource) {
      return commonOrderMapper.countOrderList(uid, state, type, orderState, orderNo, startTime, endTime, dateType,
            listSource);
   }
@@ -1864,15 +1989,18 @@
      List<String> listTB = new ArrayList<String>();
      List<String> listJD = new ArrayList<String>();
      List<String> listPDD = new ArrayList<String>();
      List<String> listVIP = new ArrayList<String>();
      List<String> listSuNing = new ArrayList<String>();
      for (CommonOrderVO order : listOrder) {
         if (order.getHongBaoType() == HongBaoV2.TYPE_YIJI || order.getHongBaoType() == HongBaoV2.TYPE_ERJI
               || order.getHongBaoType() == HongBaoV2.TYPE_SHARE_ERJI
               || order.getHongBaoType() == HongBaoV2.TYPE_SHARE_YIJI
               || order.getHongBaoType() == HongBaoV2.TYPE_SHARE_ERJI) {
            Integer urank = order.getUrank();
            if (urank != null) {
               String levelName = UserLevelUtil.getLevelName(urank);
               if (!StringUtil.isNullOrEmpty(levelName)) {
                  order.setOrderDesc("订单来源:" + levelName);
               UserLevelEnum levelEnum = UserLevelUtil.getByOrderRank(urank);
               if (levelEnum != null) {
                  levelEnum = UserLevelUtil.getShowLevel(levelEnum);
                  order.setOrderDesc("订单来源:" + levelEnum.getName());
               }
            }
         }
@@ -1886,6 +2014,10 @@
            listJD.add(order.getOrderNo());
         } else if (sourceType == Constant.SOURCE_TYPE_PDD) {
            listPDD.add(order.getOrderNo());
         } else if (sourceType == Constant.SOURCE_TYPE_VIP) {
            listVIP.add(order.getOrderNo());
         } else if (sourceType == Constant.SOURCE_TYPE_SUNING) {
            listSuNing.add(order.getOrderNo());
         }
      }
@@ -1904,6 +2036,17 @@
         listRecordPDD = userSystemCouponRecordService.getRecordByOrderNoList(Constant.SOURCE_TYPE_PDD, listPDD);
      }
      List<UserSystemCouponRecord> listRecordVIP = null;
      if (listVIP.size() > 0) {
         listRecordVIP = userSystemCouponRecordService.getRecordByOrderNoList(Constant.SOURCE_TYPE_VIP, listVIP);
      }
      List<UserSystemCouponRecord> listRecordSuNing = null;
      if (listSuNing.size() > 0) {
         listRecordSuNing = userSystemCouponRecordService.getRecordByOrderNoList(Constant.SOURCE_TYPE_SUNING, listSuNing);
      }
      SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd HH:mm");
      SimpleDateFormat formatday = new SimpleDateFormat("yyyy.MM.dd");
      // 是否存在奖励券
@@ -1967,6 +2110,10 @@
               if (goodsType != null & goodsType == Constant.SOURCE_TYPE_ELME) {
                  order.setOrderType(Constant.SOURCE_TYPE_ELME); // 饿了么订单
               }
               if (goodsType == Constant.SOURCE_TYPE_SUNING) {
                  commonGoodsVO.setGoodsId(SuningUtil.getConcatGoodsIId(commonGoodsVO.getShopId() +"", commonGoodsVO.getGoodsId()));
               }
               order.getListOrderGoods().add(commonGoodsVO);
            }
         }
@@ -1982,6 +2129,21 @@
         } else if (sourceType == Constant.SOURCE_TYPE_PDD) {
            order.setOrderType(4);
         }
         // 子来源类型
         ClientTextStyleVO shopStyleVO = new ClientTextStyleVO();
         SourceTypeEnum typeEnum = SourceTypeEnum.getByDesc(order.getChildSourceType());
         if (typeEnum == null) {
            shopStyleVO.setContent("其他");
            shopStyleVO.setColor("#FF5000");
            shopStyleVO.setBorderColor("#FF5000");
         } else {
            shopStyleVO.setContent(typeEnum.getDescShow());
            shopStyleVO.setColor(typeEnum.getFontColor());
            shopStyleVO.setBorderColor(typeEnum.getBorderColor());
         }
         order.setShopType(shopStyleVO);
         Date thirdCreateTime = order.getThirdCreateTime();
         if (thirdCreateTime != null) {
@@ -2036,6 +2198,14 @@
               List<TaoBaoWeiQuanOrder> listWQ = taoBaoWeiQuanOrderMapper
                     .selectListByOrderIdAndState(order.getOrderNo(), "维权成功");
               BigDecimal weiQuanMoney = getWeiQuanMoney(listWQ, sourceType, uid);
               if (settleTime != null) {
                  orderStateContent = "售后成功";
                  WeiQuanInfo weiQuanInfo = new WeiQuanInfo();
                  weiQuanInfo.setOldHongBao("¥" + hongBao.setScale(2, BigDecimal.ROUND_DOWN).toString());
                  weiQuanInfo.setWqHongBao("售后:-¥" + weiQuanMoney.setScale(2, BigDecimal.ROUND_DOWN).toString());
                  order.setWeiQuanInfo(weiQuanInfo);
               }
               hongBao = MoneyBigDecimalUtil.sub(hongBao, weiQuanMoney);
            }
         }
@@ -2043,7 +2213,6 @@
         orderStateMap.put("fontColor", "#666666");
         order.setOrderState(orderStateMap);
         // 订单标识
         List<String> signList = new ArrayList<String>();
         /* 订单返利类型 转换 */
@@ -2060,6 +2229,10 @@
               couponUseFactory(order, listRecordJD);
            } else if (sourceType == Constant.SOURCE_TYPE_PDD) {
               couponUseFactory(order, listRecordPDD);
            } else if (sourceType == Constant.SOURCE_TYPE_VIP) {
               couponUseFactory(order, listRecordVIP);
            } else if (sourceType == Constant.SOURCE_TYPE_SUNING) {
               couponUseFactory(order, listRecordSuNing);
            }
         } else if (HongBaoV2.TYPE_SHARE_GOODS == hongBaoType) {
            // 分享
@@ -2074,23 +2247,6 @@
            order.setOrderOrigin("3");
            order.setHongBaoTypePic(CommonOrder.TYPE_INVITE);
            signList.add(CommonOrder.TYPE_INVITE);
            // 红包加上补贴金额
            InviteOrderSubsidy orderSubsidy = inviteOrderSubsidyService.getByOrderNoAndType(uid, orderNo,
                  sourceType);
            if (orderSubsidy != null && orderSubsidy.getMoney() != null) {
               BigDecimal subsidyMoney = orderSubsidy.getMoney();
               // 维权金额
               InviteOrderSubsidyDebt subsidyDebt = inviteOrderSubsidyDebtService
                     .getBySourceId(orderSubsidy.getId());
               if (subsidyDebt != null && subsidyDebt.getOriginMoney() != null) {
                  subsidyMoney = subsidyMoney.subtract(subsidyDebt.getOriginMoney());
               }
               // 最终补贴
               if (subsidyMoney.compareTo(new BigDecimal(0)) > 0) {
                  hongBao = hongBao.add(subsidyMoney);
               }
            }
         }
         order.setSignList(signList);
@@ -2135,7 +2291,8 @@
         order.setAccountState(stateMap);
         Map<String, String> hongBaoMap = new HashMap<String, String>();
         hongBaoMap.put("content", hongBaoState_Str + "收益 ¥" + hongBao.setScale(2, BigDecimal.ROUND_DOWN).toString());
         hongBaoMap.put("content",
               hongBaoState_Str + "收益 ¥" + hongBao.setScale(2, BigDecimal.ROUND_DOWN).toString());
         hongBaoMap.put("fontColor", hongbaoInfoFontColor);
         order.setHongBaoInfo(hongBaoMap);
@@ -2179,7 +2336,7 @@
                  text = "免单中";
               } else if (UserSystemCouponRecord.STATE_SUCCESS == state) {
                  text = "已免单";
               }
               }
            }
            break;
         }
@@ -2196,4 +2353,24 @@
         order.setRewardDetail(rewardMap);
      }
   }
   @Override
   public long countOrderByUidAndSettled(Long uid, BigDecimal payment) {
      Long count = commonOrderMapper.countOrderByUidAndSettled(uid, payment);
      if (count == null) {
         count = 0L;
      }
      return count;
   }
   @Override
   public String getNewestOrderNoByTaoBao() {
      return commonOrderMapper.getNewestOrderNoByTaoBao();
   }
   @Override
   public List<CommonOrder> listByOrderNo(String orderNo) {
      return commonOrderMapper.listByOrderNo(orderNo);
   }
}