yujian
2019-12-12 8457a042e948b77ce0c752555311d85215fafa3f
订单
1个文件已修改
492 ■■■■ 已修改文件
fanli/src/main/java/com/yeshi/fanli/service/impl/order/CommonOrderServiceImpl.java 492 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/order/CommonOrderServiceImpl.java
@@ -199,228 +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);
        int type = 1; // 1 常规跳转页面 2弹出选项(奖励券)
        boolean rewardOrder = false;
        if (VersionUtil.greaterThan_2_1(acceptData.getPlatform(), acceptData.getVersion())) {
            if (rewardSuccess) {
                rewardOrder = true; // 以前版本奖励成功 的显示入口
            }
            // 已到账的返利订单、非会员可使用奖励券
            if (!freeOrder && HongBaoV2.TYPE_ZIGOU == hongBaoType && HongBaoV2.STATE_YILINGQU == hongBaoState
                    && !userVIPInfoService.isVIP(uid)) {
                type = 2;
                rewardOrder = true;
            }
        } else if (hasRewardCoupon && !freeOrder && HongBaoV2.TYPE_ZIGOU == hongBaoType
                    && HongBaoV2.STATE_YILINGQU == hongBaoState && !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();
                    Date accountTime = order.getAccountTime();
                    if (thirdCreateTime != null && accountTime != null) {
                        long downOrderTime = thirdCreateTime.getTime();
                        long limitDate = TimeUtil.parse(Constant.COUPON_REWARD_TIME).getTime();
                        if (downOrderTime > limitDate) {
                            newEdition = true;
                            Date endDay = DateUtil.plusDayDate(Constant.COUPON_REWARD_LIMIT_DAY, accountTime);
                            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);
        }
    }
    /**
     * 订单信息加工
@@ -430,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>();
@@ -463,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<>();
@@ -498,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();
@@ -703,6 +488,7 @@
                    }
                }
            }
            order.setSignList(signList);
            String hongBaoDate = null;
            String hongBaoState_Str = "";
@@ -764,23 +550,20 @@
            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);
                }
            }
@@ -791,9 +574,236 @@
                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()) {
            if (version2_1) {
                rewardCounponLimitTime(order); // 2.1 版限制
            } else if (hasRewardCoupon) {
                Map<String, Object> rewardMap = new HashMap<String, Object>();
                ClientTextStyleVO rewardStyleVO = new ClientTextStyleVO();
                rewardStyleVO.setColor("#E5005C");
                rewardStyleVO.setBottomColor("#FFDCEA");
                rewardStyleVO.setContent("返利奖励 >");
                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", 2); // 弹框
                jump.put("params", jumpLink);
                jump.put("jumpDetail", jumpDetailV2Service.getByTypeCache("rewardCouponDetail"));
                rewardMap.put("jump", jump);
                order.setRewardDetail(rewardMap);
            }
        }
    }
    private void rewardCounponLimitTime(CommonOrderVO order) throws Exception {
        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)
            return;
        // 倒计时验证
        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);