yujian
2020-04-16 4bf96fb425e655e1a099aa750bb4bd6c9e158261
fanli/src/main/java/com/yeshi/fanli/service/impl/order/CommonOrderServiceImpl.java
@@ -36,6 +36,7 @@
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;
@@ -57,6 +58,7 @@
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;
@@ -133,6 +135,9 @@
   @Resource
   private InviteOrderSubsidyService inviteOrderSubsidyService;
   @Resource
   private InviteOrderSubsidyDebtService inviteOrderSubsidyDebtService;
   @Resource
   private UserVIPInfoService userVIPInfoService;
@@ -585,16 +590,16 @@
         if (HongBaoV2.TYPE_ZIGOU == hongBaoType) {
            // 奖励订单、免单 使用记录
            if (sourceType == null) {
               couponFactory(order, hasRewardCoupon, hongBaoState, hongBaoType, null, uid, vip, acceptData);
               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);
                     acceptData, hongBao);
            } else if (sourceType == Constant.SOURCE_TYPE_JD) {
               couponFactory(order, hasRewardCoupon, hongBaoState, hongBaoType, listRecordJD, uid, vip,
                     acceptData);
                     acceptData, hongBao);
            } else if (sourceType == Constant.SOURCE_TYPE_PDD) {
               couponFactory(order, hasRewardCoupon, hongBaoState, hongBaoType, listRecordPDD, uid, vip,
                     acceptData);
                     acceptData, hongBao);
            }
         }
@@ -617,7 +622,7 @@
    * @param signList
    */
   private void couponFactory(CommonOrderVO order, boolean hasRewardCoupon, Integer hongBaoState, Integer hongBaoType,
         List<UserSystemCouponRecord> list, Long uid, boolean vip, AcceptData acceptData) throws Exception {
         List<UserSystemCouponRecord> list, Long uid, boolean vip, AcceptData acceptData, BigDecimal hongBao) throws Exception {
      // 是否免单商品
      boolean freeOrder = false;
@@ -715,6 +720,11 @@
         order.setRewardDetail(rewardMap);
      }
      // 使用奖励券 金额额限制
      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()) {
@@ -2041,11 +2051,11 @@
            
            // 是否已使用奖励券、免单券情况
             if (sourceType == Constant.SOURCE_TYPE_TAOBAO) {
               couponUseFactory(order, signList, listRecordTB);
               couponUseFactory(order, listRecordTB);
            } else if (sourceType == Constant.SOURCE_TYPE_JD) {
               couponUseFactory(order, signList, listRecordJD);
               couponUseFactory(order, listRecordJD);
            } else if (sourceType == Constant.SOURCE_TYPE_PDD) {
               couponUseFactory(order, signList, listRecordPDD);
               couponUseFactory(order, listRecordPDD);
            }
         } else if (HongBaoV2.TYPE_SHARE_GOODS == hongBaoType) {
            // 分享
@@ -2062,6 +2072,21 @@
            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);
@@ -2104,9 +2129,8 @@
         stateMap.put("content", stateContent);
         stateMap.put("fontColor", stateFontColor);
         order.setAccountState(stateMap);
         hongbaoInfo = hongBaoState_Str + hongbaoInfo;
         Map<String, String> hongBaoMap = new HashMap<String, String>();
         hongBaoMap.put("content", hongbaoInfo + " ¥" + hongBao.setScale(2, BigDecimal.ROUND_DOWN).toString());
         hongBaoMap.put("fontColor", hongbaoInfoFontColor);
@@ -2124,18 +2148,14 @@
    * 订单: 免单标识 奖励标识
    * 
    * @param order
    * @param hasRewardCoupon
    * @param hongBaoState
    * @param list
    * @param signList
    */
   private void couponUseFactory(CommonOrderVO order,List<String> signList, List<UserSystemCouponRecord> list) throws Exception {
   private void couponUseFactory(CommonOrderVO order, List<UserSystemCouponRecord> list) throws Exception {
      if (list == null || list.size() == 0) {
         return;
      }
      // 是否免单商品
      boolean freeOrder = false;
      String text = null;
      for (UserSystemCouponRecord couponRecord : list) {
         int goodSource = couponRecord.getGoodSource();
         if (goodSource == 0)
@@ -2145,47 +2165,30 @@
         if (order.getOrderNo().equals(orderNo) && goodSource == order.getSourceType()) {
            Integer state = couponRecord.getState();
            String systemCouponType = couponRecord.getCouponType();
            if (CouponTypeEnum.freeCoupon.name().equals(systemCouponType)
            if (CouponTypeEnum.rebatePercentCoupon.name().equals(systemCouponType)
                  && UserSystemCouponRecord.STATE_SUCCESS == state) {
               text = "已奖励";
            } else if (CouponTypeEnum.freeCoupon.name().equals(systemCouponType)
                  || CouponTypeEnum.welfareFreeCoupon.name().equals(systemCouponType)
                  || CouponTypeEnum.freeCouponBuy.name().equals(systemCouponType)) {
               if (UserSystemCouponRecord.STATE_FREE_ON == state) {
                  // 免单中
                  freeOrder = true;
                  signList.add(PIC_FREE_ON);
                  text = "免单中";
               } else if (UserSystemCouponRecord.STATE_SUCCESS == state) {
                  // 免单成功
                  freeOrder = true;
                  signList.add(PIC_FREE_SUCCEED);
               } else if (UserSystemCouponRecord.STATE_FAIL_RULE == state
                     || UserSystemCouponRecord.STATE_FAIL_DRAWBACK == state) {
                  // 规则不匹配、退款
                  freeOrder = true;
                  signList.add(PIC_FREE_FAIL);
               }
                  text = "免单成功";
               }
            }
            break;
         }
      }
      // 免单详情
      if (freeOrder) {
      if (!StringUtil.isNullOrEmpty(text)) {
         ClientTextStyleVO rewardStyleVO = new ClientTextStyleVO();
         rewardStyleVO.setContent("免单详情 >");
         rewardStyleVO.setContent(text);
         rewardStyleVO.setColor("#E5005C");
         rewardStyleVO.setBottomColor("#FFDCEA");
         Map<String, Object> jumpLink = new HashMap<String, Object>();
         jumpLink.put("orderNo", order.getOrderNo());
         jumpLink.put("goodsType", order.getSourceType() + "");
         Map<String, Object> jump = new HashMap<String, Object>();
         jump.put("type", 1); // 页面跳转
         jump.put("params", jumpLink);
         jump.put("jumpDetail", jumpDetailV2Service.getByTypeCache("freeCouponDetail"));
         Map<String, Object> rewardMap = new HashMap<String, Object>();
         rewardMap.put("text", rewardStyleVO);
         rewardMap.put("jump", jump);
         order.setRewardDetail(rewardMap);
      }
   }