yujian
2019-02-28 f92377709d27a03726001e8fb1de51512c43d5e2
bug修改
2个文件已修改
355 ■■■■ 已修改文件
fanli/src/main/java/com/yeshi/fanli/controller/client/UserCouponController.java 322 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserSystemCouponServiceImpl.java 33 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/client/UserCouponController.java
@@ -39,6 +39,7 @@
/**
 * 福利中心
 *
 * @author Administrator
 *
 */
@@ -56,34 +57,35 @@
    private UserSystemCouponService UserSystemCouponService;
    @Resource
    private  SwiperPictureService swiperPictureService;
    private SwiperPictureService swiperPictureService;
    @Resource
    private CommonOrderService commonOrderService;
    @Resource
    private DeviceLotteryRecordService deviceLotteryRecordService;
    @Resource
    private SystemCouponService systemCouponService;
    @Resource
    private UserSystemCouponService userSystemCouponService;
    @Resource
    private UserInfoExtraService userInfoExtraService;
    @Resource
    private CommonOrderCountService commonOrderCountService;
    @Resource
    private ThreeSaleSerivce threeSaleSerivce;
    // 最大抽奖次数
    private static int MAX_COUNT = 5;
    /**
     * 用户券列表查询
     *
     * @param acceptData
     * @param page
     * @param uid
@@ -95,38 +97,38 @@
            out.print(JsonUtil.loadFalseResult("用户未登录"));
            return;
        }
        try {
            if (page == null || page < 1) {
                page = 1;
            }
            // 福利中心图片
            String topPicture = null;
            if(page == 1) {
            String topPicture = null;
            if (page == 1) {
                List<SwiperPicture> listswiper = swiperPictureService.getByBannerCard("welfare_top");
                if (listswiper != null && listswiper.size() > 0) {
                    topPicture = listswiper.get(0).getSrc();
                }
            }
            long count = 0;
            List<UserSystemCouponVO> resultList = UserSystemCouponService.getUserCouponVOList((page - 1) * Constant.PAGE_SIZE,
                    Constant.PAGE_SIZE, uid );
            List<UserSystemCouponVO> resultList = UserSystemCouponService
                    .getUserCouponVOList((page - 1) * Constant.PAGE_SIZE, Constant.PAGE_SIZE, uid);
            if (resultList != null && resultList.size() > 0) {
                count = UserSystemCouponService.countUserCouponList(uid);
            } else if (resultList == null) {
                resultList = new ArrayList<UserSystemCouponVO>();
            }
            JSONObject data = new JSONObject();
            data.put("topPicture", topPicture);
            data.put("count", count);
            data.put("result_list", JsonUtil.getApiCommonGson().toJson(resultList));
            out.print(JsonUtil.loadTrueResult(data));
            // 更新福利中心未读数量
            if (page == 1) {
                executor.execute(new Runnable() {
@@ -142,7 +144,7 @@
                                e.printStackTrace();
                            }
                        }
                    }
                });
            }
@@ -154,13 +156,14 @@
            e.printStackTrace();
        }
    }
    /**
     * 用户奖励券
     *
     * @param acceptData
     * @param page
     * @param uid
     * @param auctionId 商品id
     * @param auctionId  商品id
     * @param out
     */
    @RequestMapping(value = "getGoodsCouponList", method = RequestMethod.POST)
@@ -169,27 +172,26 @@
            out.print(JsonUtil.loadFalseResult("用户未登录"));
            return;
        }
        try {
            List<UserSystemCouponVO> resultList = UserSystemCouponService.getGoodsCouponList(uid, auctionId);
            if (resultList == null ) {
                resultList =new ArrayList<UserSystemCouponVO>();
            if (resultList == null) {
                resultList = new ArrayList<UserSystemCouponVO>();
            }
            JSONObject dataTip = new JSONObject();
            dataTip.put("content", configService.get("free_coupon_tip"));
            dataTip.put("fontColor", "#F14242");
            JSONObject data = new JSONObject();
            data.put("helpLink", configService.get("free_coupon_help"));
            data.put("tip", dataTip);
            data.put("count", resultList.size());
            data.put("result_list", JsonUtil.getApiCommonGson().toJson(resultList));
            out.print(JsonUtil.loadTrueResult(data));
        } catch (UserSystemCouponException e) {
            out.print(JsonUtil.loadFalseResult(e.getCode(), e.getMsg()));
        } catch (Exception e) {
@@ -197,10 +199,10 @@
            e.printStackTrace();
        }
    }
    /**
     *  免单券使用记录 以及状态修改
     * 免单券使用记录 以及状态修改
     *
     * @param acceptData
     * @param page
     * @param uid
@@ -212,7 +214,7 @@
            out.print(JsonUtil.loadFalseResult("用户未登录"));
            return;
        }
        try {
            UserSystemCouponService.useGoodsCoupon(uid, cid, goodId);
            out.print(JsonUtil.loadTrueResult("使用成功"));
@@ -223,10 +225,10 @@
            e.printStackTrace();
        }
    }
    /**
     * 用户奖励券
     *
     * @param acceptData
     * @param page
     * @param uid
@@ -234,26 +236,26 @@
     */
    @RequestMapping(value = "getOrderCouponList", method = RequestMethod.POST)
    public void getOrderCouponList(AcceptData acceptData, Long uid, PrintWriter out) {
        if (uid == null) {
            out.print(JsonUtil.loadFalseResult("用户未登录"));
            return;
        }
        try {
            List<UserSystemCouponVO> resultList = UserSystemCouponService.getOrderCouponList(uid);
            if (resultList == null ) {
                resultList =new ArrayList<UserSystemCouponVO>();
            if (resultList == null) {
                resultList = new ArrayList<UserSystemCouponVO>();
            }
            JSONObject data = new JSONObject();
            data.put("helpLink", configService.get("reward_coupon_help"));
            data.put("count", resultList.size());
            data.put("result_list", JsonUtil.getApiCommonGson().toJson(resultList));
            out.print(JsonUtil.loadTrueResult(data));
        } catch (UserSystemCouponException e) {
            out.print(JsonUtil.loadFalseResult(e.getCode(), e.getMsg()));
        } catch (Exception e) {
@@ -261,10 +263,10 @@
            e.printStackTrace();
        }
    }
    /**
     *  免单券使用记录 以及状态修改
     * 免单券使用记录 以及状态修改
     *
     * @param acceptData
     * @param page
     * @param uid
@@ -272,19 +274,19 @@
     */
    @RequestMapping(value = "useRewardCoupon", method = RequestMethod.POST)
    public void useRewardCoupon(AcceptData acceptData, Long uid, Long cid, String orderNo, PrintWriter out) {
        if (uid == null) {
            out.print(JsonUtil.loadFalseResult("用户未登录"));
            return;
        }
        try {
            UserSystemCouponService.useOrderCoupon(uid, cid, orderNo);
            JSONObject data = commonOrderService.getRewardJumpInfo(orderNo);
            out.print(JsonUtil.loadTrueResult(data));
        } catch (UserSystemCouponException e) {
            out.print(JsonUtil.loadFalseResult(e.getCode(), e.getMsg()));
        } catch (Exception e) {
@@ -292,25 +294,26 @@
            e.printStackTrace();
        }
    }
    /**
     *  订单-奖励进度详情
     * 订单-奖励进度详情
     *
     * @param acceptData
     * @param orderNo 订单号
     * @param orderNo    订单号
     * @param out
     */
    @RequestMapping(value = "getRewardRecord", method = RequestMethod.POST)
    public void getRewardCounponRecord(AcceptData acceptData, String orderNo, PrintWriter out) {
        try {
            UserSystemCouponRecordVO rewardRecord = UserSystemCouponService.getRewardCouponRecord(orderNo);
            JSONObject data = new JSONObject();
            data.put("rewardRecord", rewardRecord);
            out.print(JsonUtil.loadTrueResult(data));
        } catch (UserSystemCouponException e) {
            out.print(JsonUtil.loadFalseResult(e.getCode(), e.getMsg()));
        } catch (Exception e) {
@@ -318,25 +321,26 @@
            e.printStackTrace();
        }
    }
    /**
     *  订单-奖励进度详情
     * 订单-奖励进度详情
     *
     * @param acceptData
     * @param orderNo 订单号
     * @param orderNo    订单号
     * @param out
     */
    @RequestMapping(value = "getFreeCounponRecord", method = RequestMethod.POST)
    public void getFreeCounponRecord(AcceptData acceptData, String orderNo, PrintWriter out) {
        try {
            UserSystemCouponRecordVO rewardRecord = UserSystemCouponService.getFreeCouponRecord(orderNo);
            JSONObject data = new JSONObject();
            data.put("frreCouponRecord", rewardRecord);
            out.print(JsonUtil.loadTrueResult(data));
        } catch (UserSystemCouponException e) {
            out.print(JsonUtil.loadFalseResult(e.getCode(), e.getMsg()));
        } catch (Exception e) {
@@ -344,7 +348,6 @@
            e.printStackTrace();
        }
    }
    /**
     * 获取抽奖次数
@@ -356,15 +359,55 @@
     */
    @RequestMapping(value = "getLotteryCount")
    public void getLotteryCount(String callback, AcceptData acceptData, Long uid, PrintWriter out) {
        int count = 0;
        try {
            count = getSurplusCount(acceptData, uid);
        } catch (Exception e) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(e.getMessage()));
            e.printStackTrace();
        }
            // 默认最大抽奖次数
            int count = 5;
        try {
            if (uid == null || uid == 0) { // 未登录
                int platformType = 0;
                String platform = acceptData.getPlatform();
                if ("android".equals(platform)) {
                    platformType = 1;
                } else if ("ios".equals(platform)) {
                    platformType = 2;
                } else {
                    JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("平台有误"));
                    return;
                }
                String device = acceptData.getDevice();
                if (device == null || device.trim().length() == 0) {
                    JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("设备不存在"));
                    return;
                }
                List<DeviceLotteryRecord> list = deviceLotteryRecordService.listByPlatformAndDevice(platformType,
                        device);
                if (list != null && list.size() > 0) {
                    count = count - list.size();
                }
            } else { // 已登录
                UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid);
                if (userInfoExtra == null) {
                    JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("用户信息不存在"));
                    return;
                }
                Integer lotteryNewbies = userInfoExtra.getLotteryNewbies();
                if (lotteryNewbies == null) { // 未抽过
                    // 是否有过订单:返利、分享订单
                    boolean hasOrder = commonOrderCountService.hasRebateAndShareOrder(uid);
                    if (hasOrder) {
                        count = 0; // 不算新用户
                    }
                    userInfoExtra.setLotteryNewbies(count);
                    userInfoExtraService.saveUserInfoExtra(userInfoExtra);
                } else {
                    count = lotteryNewbies; // 剩余次数
                }
            }
            // 抽奖规则
            String lotteryRule = configService.get("lottery_rule_newbies");
@@ -379,8 +422,7 @@
            e.printStackTrace();
        }
    }
    /**
     * 获取抽奖结果
     * 
@@ -398,8 +440,8 @@
            String prize = "";
            String hasPrize = "";
            Long couponId = null;
            if (uid == null) { // 未登录
            if (uid == null || uid == 0) { // 未登录
                int platformType = 0;
                String platform = acceptData.getPlatform();
                if ("android".equals(platform)) {
@@ -417,31 +459,29 @@
                    return;
                }
                int countPrize = 0;
                List<DeviceLotteryRecord> list = deviceLotteryRecordService.listByPlatformAndDevice(platformType,
                        device);
                if (list != null && list.size() == MAX_COUNT) { // 无抽奖机会
                    JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(2, "抽奖次数不足"));
                    return;
                } else if (list != null && list.size() < MAX_COUNT) { // 拥有抽奖机会
                    for (DeviceLotteryRecord deviceLotteryRecord : list) {
                        Long systemCouponId = deviceLotteryRecord.getSystemCouponId();
                        if (systemCouponId != null) {
                            countPrize++;
                            couponId = systemCouponId;
                        }
                        if (countPrize == 1) {
                            SystemCoupon coupon = systemCouponService.selectByPrimaryKey(systemCouponId);
                            hasPrize = coupon.getType().name();
                        }
                    }
                    count = MAX_COUNT - 1 - list.size();
                } else {
                    count = MAX_COUNT - 1;
                }
@@ -455,11 +495,11 @@
                    if (hasPrize.equals(prize)) {
                        prize = null;
                    } else {
                        SystemCoupon coupon= systemCouponService.getCouponByType(prize);
                        SystemCoupon coupon = systemCouponService.getCouponByType(prize);
                        newCouponId = coupon.getId();
                    }
                }
                // 插入记录
                DeviceLotteryRecord record = new DeviceLotteryRecord();
                record.setDevice(device);
@@ -467,34 +507,35 @@
                record.setSystemCouponId(newCouponId);
                record.setCreateTime(new Date());
                deviceLotteryRecordService.insertSelective(record);
            } else { // 已登录
                UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid);
                if (userInfoExtra == null) {
                    JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("信息不正确"));
                    return;
                }
                Integer lotteryNewbies = userInfoExtra.getLotteryNewbies();
                if (lotteryNewbies == null || lotteryNewbies < 1 ) { // 次数已用光
                if (lotteryNewbies == null || lotteryNewbies < 1) { // 次数已用光
                    JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(2, "抽奖次数不足"));
                    return;
                } else {
                    count = lotteryNewbies - 1; // 剩余次数
                }
                List<UserSystemCoupon> list = userSystemCouponService.getUserCouponBySource(uid, UserSystemCoupon.SOURCE_CHOUJIANG);
                List<UserSystemCoupon> list = userSystemCouponService.getUserCouponBySource(uid,
                        UserSystemCoupon.SOURCE_CHOUJIANG);
                if (list != null && list.size() == 1) {
                    couponId = list.get(0).getSystemCoupon().getId();
                    SystemCoupon coupon = systemCouponService.selectByPrimaryKey(couponId);
                    hasPrize = coupon.getType().name();
                }
                // 奖品
                prize = getLotteryPrize(MAX_COUNT, list.size(), MAX_COUNT- lotteryNewbies, couponId);
                prize = getLotteryPrize(MAX_COUNT, list.size(), MAX_COUNT - lotteryNewbies, couponId);
                // 抽中
                if (prize != null && prize.trim().length() > 0) {
                    if (hasPrize.equals(prize)) {
                        prize = null;
                    } else {
@@ -502,12 +543,12 @@
                        userSystemCouponService.insertUserCoupon(uid, prize, UserSystemCoupon.SOURCE_CHOUJIANG);
                    }
                }
                // 剩余次数
                userInfoExtra.setLotteryNewbies(count);
                userInfoExtraService.saveUserInfoExtra(userInfoExtra);
            }
            if (prize == null || prize.trim().length() == 0) {
                prize = "NoPrize";
            }
@@ -523,21 +564,22 @@
            e.printStackTrace();
        }
    }
    /**
     * 奖品抽取
     * @param maxCount  最大次数
     *
     * @param maxCount 最大次数
     * @param hasPrize 拥有奖品数量
     * @param record  已抽次数
     * @param record   已抽次数
     * @param couponId 券id
     * @return
     */
    public String getLotteryPrize(int maxCount, int countPrize, int record, Long couponId) {
        String prize = null;
        String prize = null;
        String freeCoupon = CouponTypeEnum.welfareFreeCoupon.name(); // 福利免费券
        String rebateCoupon =  CouponTypeEnum.rebatePercentCoupon.name(); // 奖励券
        String rebateCoupon = CouponTypeEnum.rebatePercentCoupon.name(); // 奖励券
        if (countPrize == 1 && record == maxCount - 1) {
            // 最后一次: 只收到一个奖品
            SystemCoupon systemCoupon = systemCouponService.selectByPrimaryKey(couponId);
@@ -551,7 +593,7 @@
            } else {
                prize = rebateCoupon; // 奖励券
            }
        } else if (countPrize == 0 && record == maxCount - 2) {
            // 前3次没有奖励时、后面两次必中
            long result = (1 + Math.round(Math.random() * (9)));
@@ -560,7 +602,7 @@
            } else {
                prize = rebateCoupon; // 奖励券
            }
        } else { // 大于3次机会
            if (countPrize < 2) { // 不足两个奖品
@@ -569,69 +611,11 @@
                    prize = freeCoupon; // 福利免费券
                } else if (result <= 6) {
                    prize = rebateCoupon; // 奖励券
                }
            }
        }
        return prize;
    }
    /**
     * 获取抽奖结果
     *
     * @param callback
     * @param acceptData
     * @param uid
     * @param out
     */
    public int getSurplusCount(AcceptData acceptData, Long uid) throws Exception {
        // 默认最大抽奖次数
        int count = 5;
        if (uid == null) { // 未登录
            int platformType = 0;
            String platform = acceptData.getPlatform();
            if ("android".equals(platform)) {
                platformType = 1;
            } else if ("ios".equals(platform)) {
                platformType = 2;
            } else {
                throw new Exception("平台有误");
            }
            String device = acceptData.getDevice();
            if (device == null || device.trim().length() == 0) {
                throw new Exception("设备不存在");
            }
            List<DeviceLotteryRecord> list = deviceLotteryRecordService.listByPlatformAndDevice(platformType, device);
            if (list != null && list.size() > 0) {
                count = count - list.size();
            }
        } else { // 已登录
            UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid);
            if (userInfoExtra == null) {
                throw new Exception("信息不正确");
            }
            Integer lotteryNewbies = userInfoExtra.getLotteryNewbies();
            if (lotteryNewbies == null) { // 未抽过
                // 是否有过订单:返利、分享订单
                boolean hasOrder = commonOrderCountService.hasRebateAndShareOrder(uid);
                if (hasOrder) {
                    count = 0; // 不算新用户
                }
                userInfoExtra.setLotteryNewbies(count);
                userInfoExtraService.saveUserInfoExtra(userInfoExtra);
            } else {
                count = lotteryNewbies; // 剩余次数
            }
            }
        }
        return count;
        return prize;
    }
}
fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserSystemCouponServiceImpl.java
@@ -424,14 +424,6 @@
            userCouponVO.setCouponEffect(systemCoupon.getEffect());
            userCouponVO.setCouponRule(systemCoupon.getRule());
            Integer stateActivated = userCouponVO.getStateActivated();
            if (stateActivated == null || stateActivated == 0) {
                userCouponVO.setState(0);
                userCouponVO.setCouponEffect("待激活");
                userCouponVO.setCouponPicture(PIC_INVALID); // 未激活图片
            } else {
                userCouponVO.setCouponPicture(systemCoupon.getPicture());
            }
            int differentDays = 0;
            String couponTerm = "有效期:";
@@ -453,7 +445,23 @@
            // 剩余天数
            Map<String, Object> remainDays = new HashMap<String, Object>();
            remainDays.put("content", "还剩" + differentDays + "天过期");
            remainDays.put("fontColor", "#F14242");
            String  remainDaysFontColor = "";
            Integer stateActivated = userCouponVO.getStateActivated();
            if (stateActivated == null || stateActivated == 0) {
                userCouponVO.setState(0);
                userCouponVO.setCouponEffect("待激活");
                userCouponVO.setCouponPicture(PIC_INVALID); // 未激活图片
                remainDaysFontColor = "#CCCCCC";
            } else {
                userCouponVO.setCouponPicture(systemCoupon.getPicture());
                remainDaysFontColor = "#F14242";
            }
            remainDays.put("fontColor", remainDaysFontColor);
            userCouponVO.setRemainDays(remainDays);
        }
@@ -542,6 +550,13 @@
                        // 显示不能使用
                        userCouponVO.setState(0);
                        userCouponVO.setCouponPicture(PIC_INVALID);
                        Map<String, Object> map = userCouponVO.getRemainDays();
                        if (map != null) {
                            map.put("fontColor", "#CCCCCC");
                        }
                        userCouponVO.setRemainDays(map);
                    }
                }
            }