yujian
2019-12-12 8c04d27e5cebb7e654c208533e9567c4df2c8acc
fanli/src/main/java/com/yeshi/fanli/service/impl/order/CommonOrderServiceImpl.java
@@ -199,221 +199,11 @@
      }
      // 数据加工重新组织
      orderInfoFactory(acceptData, listOrder, listGoods, uid);
      // listDataFactory(acceptData, listOrder, listGoods, uid);
      orderVOFactory(acceptData, listOrder, listGoods, uid);
      return listOrder;
   }
   /**
    * 订单: 免单标识 奖励标识
    *
    * @param order
    * @param hasRewardCoupon
    * @param hongBaoState
    * @param list
    * @param signList
    */
   public void setSystemCouponRecord(CommonOrderVO order, boolean hasRewardCoupon,   Integer hongBaoState,
         Integer hongBaoType, List<UserSystemCouponRecord> list, List<String> signList,
         Long uid, AcceptData acceptData) {
      // 是否免单商品
      boolean freeOrder = false;
      // 是否奖励成功
      boolean rewardSuccess = false;
      if (list != null && list.size() > 0) {
         for (UserSystemCouponRecord couponRecord : list) {
            // 订单号匹配
            if (order.getOrderNo().equals(couponRecord.getOrderNo())) {
               Integer state = couponRecord.getState();
               String systemCouponType = couponRecord.getCouponType();
               // 奖励订单: 且成功
               if (CouponTypeEnum.rebatePercentCoupon.name().equals(systemCouponType)
                     && UserSystemCouponRecord.STATE_SUCCESS == state) {
                  rewardSuccess = true;
                  signList.add(PIC_REWARD); // 加入奖励成功图片
               } 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);
                  } 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);
                  }
               }
               break;
            }
         }
      }
      // 订单标识
      order.setSignList(signList);
      boolean rewardOrder = false;
      int type = 1; // 1 常规跳转页面 2弹出选项(奖励券)
      if (rewardSuccess) {
         if (!VersionUtil.greaterThan_2_1(acceptData.getPlatform(), acceptData.getVersion())) {
            rewardOrder = true; // 奖励成功 2.0.2 消失
         }
      } else if (hasRewardCoupon && !freeOrder && HongBaoV2.TYPE_ZIGOU == hongBaoType
            && HongBaoV2.STATE_YILINGQU == hongBaoState) { // 有可用的奖励券 、非免单订单 、且已到账的 、返利订单
         if (!userVIPInfoService.isVIP(uid)) { // 非会员可使用奖励券
            type = 2;
            rewardOrder = true;
         }
      }
      // 维权订单 不可使用奖励券
      Integer orderState = order.getState();
      if(CommonOrder.STATE_WQ == orderState) {
         rewardOrder = false;
      }
      if (rewardOrder) {
         try {
            boolean newEdition = false;
            String num = null;
            String unit = null;
            boolean canUse = false;
            // 版本区分:2.1  奖励券倒计时
            if (VersionUtil.greaterThan_2_1(acceptData.getPlatform(), acceptData.getVersion())) {
               Date thirdCreateTime = order.getThirdCreateTime();
               if (thirdCreateTime != null) {
                  long downOrderTime = thirdCreateTime.getTime();
                  long limitDate = TimeUtil.parse(Constant.COUPON_REWARD_TIME).getTime();
                  if (downOrderTime > limitDate) {
                     newEdition = true;
                     Date endDay = DateUtil.plusDayDate(4, thirdCreateTime);
                     long currentTime = java.lang.System.currentTimeMillis();
                     if (endDay.getTime() > currentTime) {
                        DateInfo dateInfo = DateUtil.dateDiff3(currentTime, endDay.getTime());
                        if (dateInfo != null) {
                           if (dateInfo.getDay() > 0) {
                              canUse = true;
                              unit = "天";
                              num = dateInfo.getDay().toString();
                           }
                           if (!canUse && dateInfo.getHour() > 0) {
                              canUse = true;
                              unit = "小时";
                              num = dateInfo.getHour().toString();
                           }
                           if (!canUse && dateInfo.getMinute() > 0) {
                              canUse = true;
                              unit = "分";
                              num = dateInfo.getMinute().toString();
                           }
                           if (!canUse && dateInfo.getSecond() > 0) {
                              canUse = true;
                              unit = "秒";
                              num = dateInfo.getSecond().toString();
                           }
                        }
                     }
                  }
               }
            }
            if (newEdition && !canUse) {
               // 新版不可使用
            } else {
               Map<String, Object> rewardMap = new HashMap<String, Object>();
               ClientTextStyleVO rewardStyleVO = new ClientTextStyleVO();
               rewardStyleVO.setColor("#E5005C");
               rewardStyleVO.setBottomColor("#FFDCEA");
               if (!newEdition) {
                  if (VersionUtil.greaterThan_2_1(acceptData.getPlatform(), acceptData.getVersion())) {
                     rewardStyleVO.setContent("使用奖励券 >");
                  } else {
                     rewardStyleVO.setContent("返利奖励 >");
                  }
               } else if (canUse) {
                  rewardStyleVO.setContent("使用奖励券");
                  ClientTextStyleVO txt1 = new ClientTextStyleVO();
                  txt1.setContent("剩");
                  txt1.setColor("#666666");
                  txt1.setBottomColor("#FFDCEA");
                  ClientTextStyleVO txt2 = new ClientTextStyleVO();
                  txt2.setContent(num);
                  txt2.setColor("#E5005C");
                  txt2.setBottomColor("#FFDCEA");
                  txt2.setFontSize("1.33");
                  ClientTextStyleVO txt3 = new ClientTextStyleVO();
                  txt3.setContent(unit + "关闭 >");
                  txt3.setColor("#666666");
                  txt3.setBottomColor("#FFDCEA");
                  List<ClientTextStyleVO> ticking = new ArrayList<ClientTextStyleVO>();
                  ticking.add(txt1);
                  ticking.add(txt2);
                  ticking.add(txt3);
                  rewardMap.put("ticking", ticking);
               }
               rewardMap.put("text", rewardStyleVO);
               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", type);
               jump.put("params", jumpLink);
               jump.put("jumpDetail", jumpDetailV2Service.getByTypeCache("rewardCouponDetail"));
               rewardMap.put("jump", jump);
               order.setRewardDetail(rewardMap);
            }
         } catch (Exception e) {
            e.printStackTrace();
         }
      }
      if (freeOrder) {
         ClientTextStyleVO rewardStyleVO = new ClientTextStyleVO();
         // 返利、免单详情
         rewardStyleVO.setContent("免单详情 >");
         rewardStyleVO.setColor("#E5005C");
         rewardStyleVO.setBottomColor("#FFDCEA");
         Map<String, Object> jumpLink = new HashMap<String, Object>();
         jumpLink.put("orderNo", order.getOrderNo());
         if (VersionUtil.greaterThan_1_6_0(acceptData.getPlatform(), acceptData.getVersion())) {
            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);
      }
   }
   /**
    * 订单信息加工
@@ -423,7 +213,7 @@
    * @param listGoods
    * @param uid
    */
   public void orderInfoFactory(AcceptData acceptData, List<CommonOrderVO> listOrder, List<CommonOrderVO> listGoods,
   private void orderVOFactory(AcceptData acceptData, List<CommonOrderVO> listOrder, List<CommonOrderVO> listGoods,
         Long uid) throws Exception {
      List<String> listTB = new ArrayList<String>();
      List<String> listJD = new ArrayList<String>();
@@ -456,14 +246,6 @@
         listRecordPDD = userSystemCouponRecordService.getRecordByOrderNoList(Constant.SOURCE_TYPE_PDD, listPDD);
      }
      SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd HH:mm");
      SimpleDateFormat formatday = new SimpleDateFormat("yyyy.MM.dd");
      // 2019.8.1开始返回维权信息
      Date august = TimeUtil.parse("2019-08-01");
      // 是否存在奖励券
      boolean hasRewardCoupon = userSystemCouponService.getValidRebateCoupon(uid);
      // 需要查询是否为VIP的用户ID,只有邀请订单才需要查询
      List<Long> needSelectVIPUidList = new ArrayList<>();
@@ -491,6 +273,16 @@
         if(order.isVipOrder())
            order.setVipOrderDesc("订单来源:由超级会员的粉丝产生");
      }
      SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd HH:mm");
      SimpleDateFormat formatday = new SimpleDateFormat("yyyy.MM.dd");
      // 2019.8.1开始返回维权信息
      Date august = TimeUtil.parse("2019-08-01");
      // 当前用户是否VIP
      boolean vip = userVIPInfoService.isVIP(uid);
      // 是否存在奖励券
      boolean hasRewardCoupon = userSystemCouponService.getValidRebateCoupon(uid);
      for (CommonOrderVO order : listOrder) {
         String orderNo = order.getOrderNo();
@@ -696,7 +488,8 @@
               }
            }
         }
         order.setSignList(signList);
         String hongBaoDate = null;
         String hongBaoState_Str = "";
         String hongbaoInfoFontColor = "#E5005C";
@@ -756,24 +549,21 @@
         hongBaoMap.put("content", hongbaoInfo + " ¥" + hongBao.setScale(2, BigDecimal.ROUND_DOWN).toString());
         hongBaoMap.put("fontColor", hongbaoInfoFontColor);
         order.setHongBaoInfo(hongBaoMap);
         // 非自购的订单 不显示返利、免单详情
         if (HongBaoV2.TYPE_ZIGOU != hongBaoType) {
            order.setSignList(signList);
         } else {
         // 显示返利、免单详情
         if (HongBaoV2.TYPE_ZIGOU == hongBaoType) {
            // 奖励订单、免单 使用记录
            if (sourceType == null) {
               setSystemCouponRecord(order, hasRewardCoupon, hongBaoState, hongBaoType, null,
                     signList, uid, acceptData);
               couponFactory(order, hasRewardCoupon, hongBaoState, hongBaoType, null, uid, vip, acceptData);
            } else if (sourceType == Constant.SOURCE_TYPE_TAOBAO) {
               setSystemCouponRecord(order, hasRewardCoupon, hongBaoState, hongBaoType,
                     listRecordTB, signList, uid, acceptData);
               couponFactory(order, hasRewardCoupon, hongBaoState, hongBaoType,
                     listRecordTB, uid, vip, acceptData);
            } else if (sourceType == Constant.SOURCE_TYPE_JD) {
               setSystemCouponRecord(order, hasRewardCoupon, hongBaoState, hongBaoType,
                     listRecordJD, signList, uid, acceptData);
               couponFactory(order, hasRewardCoupon, hongBaoState, hongBaoType,
                     listRecordJD, uid, vip, acceptData);
            } else if (sourceType == Constant.SOURCE_TYPE_PDD) {
               setSystemCouponRecord(order, hasRewardCoupon, hongBaoState, hongBaoType,
                     listRecordPDD, signList, uid, acceptData);
               couponFactory(order, hasRewardCoupon, hongBaoState, hongBaoType,
                     listRecordPDD, uid, vip, acceptData);
            }
         }
@@ -784,9 +574,238 @@
            order.setOrderNo(UserUtil.filterOrderId(order.getOrderNo()));
         }
      }
   }
   /**
    * 订单: 免单标识 奖励标识
    *
    * @param order
    * @param hasRewardCoupon
    * @param hongBaoState
    * @param list
    * @param signList
    */
   private void couponFactory(CommonOrderVO order, boolean hasRewardCoupon,   Integer hongBaoState,
         Integer hongBaoType, List<UserSystemCouponRecord> list, Long uid, boolean vip, AcceptData acceptData) throws Exception{
      // 是否免单商品
      boolean freeOrder = false;
      // 是否奖励成功
      boolean rewardSuccess = false;
      boolean version2_1 = VersionUtil.greaterThan_2_1(acceptData.getPlatform(), acceptData.getVersion());
      if (list != null && list.size() > 0) {
         for (UserSystemCouponRecord couponRecord : list) {
            int goodSource = couponRecord.getGoodSource();
            if (goodSource == 0)
               goodSource = 1;
            if (order.getOrderNo().equals(couponRecord.getOrderNo()) && goodSource == order.getSourceType()) {
               Integer state = couponRecord.getState();
               String systemCouponType = couponRecord.getCouponType();
               if (CouponTypeEnum.rebatePercentCoupon.name().equals(systemCouponType)
                     && UserSystemCouponRecord.STATE_SUCCESS == state) {
                  rewardSuccess = true;
                  if (!version2_1) {
                     // 奖励成功
                     order.getSignList().add(PIC_REWARD);
                  }
               } 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;
                     order.getSignList().add(PIC_FREE_ON);
                  } else if (UserSystemCouponRecord.STATE_SUCCESS == state) {
                     // 免单成功
                     freeOrder = true;
                     order.getSignList().add(PIC_FREE_SUCCEED);
                  } else if (UserSystemCouponRecord.STATE_FAIL_RULE == state
                        || UserSystemCouponRecord.STATE_FAIL_DRAWBACK == state) {
                     // 规则不匹配、退款
                     freeOrder = true;
                     order.getSignList().add(PIC_FREE_FAIL);
                  }
               }
               break;
            }
         }
      }
      // 免单详情
      if (freeOrder) {
         ClientTextStyleVO rewardStyleVO = new ClientTextStyleVO();
         rewardStyleVO.setContent("免单详情 >");
         rewardStyleVO.setColor("#E5005C");
         rewardStyleVO.setBottomColor("#FFDCEA");
         Map<String, Object> jumpLink = new HashMap<String, Object>();
         jumpLink.put("orderNo", order.getOrderNo());
         if (VersionUtil.greaterThan_1_6_0(acceptData.getPlatform(), acceptData.getVersion())) {
            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);
      }
      // 已使用奖励券
      if (rewardSuccess) {
         ClientTextStyleVO rewardStyleVO = new ClientTextStyleVO();
         rewardStyleVO.setColor("#E5005C");
         rewardStyleVO.setBottomColor("#FFDCEA");
         if (version2_1) {
            rewardStyleVO.setContent("已使用奖励券 >");
         } else {
            rewardStyleVO.setContent("返利奖励 >");
         }
         Map<String, Object> rewardMap = new HashMap<String, Object>();
         rewardMap.put("text", rewardStyleVO);
         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); // 1 常规跳转页面
         jump.put("params", jumpLink);
         jump.put("jumpDetail", jumpDetailV2Service.getByTypeCache("rewardCouponDetail"));
         rewardMap.put("jump", jump);
         order.setRewardDetail(rewardMap);
      }
      // 是否可使用奖励券
      if (!rewardSuccess && !freeOrder && HongBaoV2.TYPE_ZIGOU == hongBaoType
            && HongBaoV2.STATE_YILINGQU == hongBaoState && !vip && CommonOrder.STATE_WQ != order.getState()) {
         // 下单时间
         Date thirdCreateTime = order.getThirdCreateTime();
         // 到账时间
         Date accountTime = order.getAccountTime();
         if (thirdCreateTime == null || accountTime == null)
            return;
         // 下单日期是否是符合上线日期
         long downOrderTime = thirdCreateTime.getTime();
         long limitDate = TimeUtil.parse(Constant.COUPON_REWARD_TIME).getTime();
         if (downOrderTime > limitDate)  {
            // 2.1 开始新版
            rewardCounponLimitTime(order, accountTime);
         } else if (hasRewardCoupon) {
            // 在2.1新版上线之前订单-存在则显示奖励券可使用
            ClientTextStyleVO rewardStyleVO = new ClientTextStyleVO();
            rewardStyleVO.setColor("#E5005C");
            rewardStyleVO.setBottomColor("#FFDCEA");
            rewardStyleVO.setContent("返利奖励 >");
            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", 2); // 弹框
            jump.put("params", jumpLink);
            jump.put("jumpDetail", jumpDetailV2Service.getByTypeCache("rewardCouponDetail"));
            Map<String, Object> rewardMap = new HashMap<String, Object>();
            rewardMap.put("text", rewardStyleVO);
            rewardMap.put("jump", jump);
            order.setRewardDetail(rewardMap);
         }
      }
   }
   private void rewardCounponLimitTime(CommonOrderVO order,Date accountTime) throws Exception {
      // 倒计时验证
      Date endDay = DateUtil.plusDayDate(Constant.COUPON_REWARD_LIMIT_DAY, accountTime);
      long currentTime = java.lang.System.currentTimeMillis();
      if (endDay.getTime() <= currentTime)
         return;
      String num = null;
      String unit = null;
      boolean canUse = false;
      DateInfo dateInfo = DateUtil.dateDiff3(currentTime, endDay.getTime());
      if (dateInfo.getDay() > 0) {
         canUse = true;
         unit = "天";
         num = dateInfo.getDay().toString();
      }
      if (!canUse && dateInfo.getHour() > 0) {
         canUse = true;
         unit = "小时";
         num = dateInfo.getHour().toString();
      }
      if (!canUse && dateInfo.getMinute() > 0) {
         canUse = true;
         unit = "分";
         num = dateInfo.getMinute().toString();
      }
      if (!canUse && dateInfo.getSecond() > 0) {
         canUse = true;
         unit = "秒";
         num = dateInfo.getSecond().toString();
      }
      // 已经超时
      if (!canUse)
         return;
      Map<String, Object> rewardMap = new HashMap<String, Object>();
      ClientTextStyleVO rewardStyleVO = new ClientTextStyleVO();
      rewardStyleVO.setColor("#E5005C");
      rewardStyleVO.setBottomColor("#FFDCEA");
      rewardStyleVO.setContent("使用奖励券");
      rewardMap.put("text", rewardStyleVO);
      ClientTextStyleVO txt1 = new ClientTextStyleVO();
      txt1.setContent("剩");
      txt1.setColor("#666666");
      txt1.setBottomColor("#FFDCEA");
      ClientTextStyleVO txt2 = new ClientTextStyleVO();
      txt2.setContent(num);
      txt2.setColor("#E5005C");
      txt2.setBottomColor("#FFDCEA");
      txt2.setFontSize("1.33");
      ClientTextStyleVO txt3 = new ClientTextStyleVO();
      txt3.setContent(unit + "关闭 >");
      txt3.setColor("#666666");
      txt3.setBottomColor("#FFDCEA");
      List<ClientTextStyleVO> ticking = new ArrayList<ClientTextStyleVO>();
      ticking.add(txt1);
      ticking.add(txt2);
      ticking.add(txt3);
      rewardMap.put("ticking", ticking);
      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", 2); // 弹出框使用券
      jump.put("params", jumpLink);
      jump.put("jumpDetail", jumpDetailV2Service.getByTypeCache("rewardCouponDetail"));
      rewardMap.put("jump", jump);
      order.setRewardDetail(rewardMap);
   }
   @Override
   public Map<String, BigDecimal> countHistoryOrder(Long uid, Integer day, Integer source) {
      return commonOrderMapper.countHistoryOrder(uid, day, source);
@@ -1622,7 +1641,7 @@
   public BigDecimal getTotalRewardMoneyByOrderNoAndSourceType(String orderNo, Integer sourceType) {
      return commonOrderMapper.getTotalRewardMoneyByOrderNoAndSourceType(orderNo, sourceType);
   }
   @Override
   public long count24HValidOrderByUid(Long uid, Date minTime) {
      return commonOrderMapper.count24HValidOrderByUid(uid, minTime);