yujian
2019-03-06 e38ed8ad96af9893ab53bd34f8fd50f7b6b921b0
使用券是否可以使用加以验证
1个文件已修改
148 ■■■■■ 已修改文件
fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserSystemCouponServiceImpl.java 148 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserSystemCouponServiceImpl.java
@@ -15,7 +15,6 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.yeshi.utils.DateUtil;
import org.yeshi.utils.JsonUtil;
import com.yeshi.fanli.dao.mybatis.user.UserSystemCouponMapper;
import com.yeshi.fanli.entity.bus.user.DeviceLotteryRecord;
@@ -28,6 +27,7 @@
import com.yeshi.fanli.entity.common.JumpDetailV2;
import com.yeshi.fanli.entity.money.UserMoneyDetail;
import com.yeshi.fanli.entity.order.CommonOrder;
import com.yeshi.fanli.entity.push.PushCoupon;
import com.yeshi.fanli.entity.system.SystemCoupon;
import com.yeshi.fanli.entity.system.SystemCoupon.CouponTypeEnum;
import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
@@ -597,6 +597,13 @@
            throw new UserSystemCouponException(1, "券数据不正确");
        }
        Integer state = userSystemCoupon.getState();
        Integer stateActivated = userSystemCoupon.getStateActivated();
        if (UserSystemCoupon.STATE_CAN_USE != state || 1 != stateActivated) {
            throw new UserSystemCouponException(1, "该券不能被使用");
        }
        Long couponUid = userSystemCoupon.getUid();
        if (!uid.equals(couponUid)) {
            throw new UserSystemCouponException(1, "传递参数不匹配");
@@ -658,6 +665,12 @@
        UserSystemCoupon userSystemCoupon = selectByPrimaryKey(id);
        if (userSystemCoupon == null) {
            throw new UserSystemCouponException(1, "券信息不存在");
        }
        Integer state = userSystemCoupon.getState();
        Integer stateActivated = userSystemCoupon.getStateActivated();
        if (UserSystemCoupon.STATE_CAN_USE != state || 1 != stateActivated) {
            throw new UserSystemCouponException(1, "该券不能被使用");
        }
        // 系统券信息
@@ -1040,6 +1053,7 @@
        return userRecordVO;
    }
    
    @Transactional
    @Override
    public void activatedWelfareFreeCoupon(Long uid, String fromNickName) {
@@ -1367,6 +1381,8 @@
        
        // 获取额外信息
        UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid);
        // 已经抽过奖的或者已经进入过抽奖页面的
        if (userInfoExtra != null && userInfoExtra.getLotteryNewbies() != null) {
            return;
        }
@@ -1458,5 +1474,135 @@
        userInfoExtraService.saveUserInfoExtra(userInfoExtra);
    
    }
    @Override
    @Transactional
    public void randomRewardCoupon(PushCoupon pushCoupon, Long uid) throws Exception {
        int coupon = 0;
        Integer amount = pushCoupon.getAmount();
        for (int i = 0; i < amount; i++) {
            BigDecimal percent = pushCoupon.getPercent();
            if (percent == null) {
                // 返利比-随机
                percent = new BigDecimal(randomNum());
            }
            // 查询奖励券
            SystemCoupon systemCoupon = systemCouponService.getCouponByTypeAndPercent(
                    CouponTypeEnum.rebatePercentCoupon.name(),percent);
            if (systemCoupon == null) {
                return;
            }
            UserSystemCoupon userCoupon = new UserSystemCoupon();
            userCoupon.setUid(uid);
            userCoupon.setSource(UserSystemCoupon.SOURCE_SYSTEM_PUSH);
            userCoupon.setSystemCoupon(systemCoupon);
            userCoupon.setState(UserSystemCoupon.STATE_CAN_USE);
            userCoupon.setStateActivated(1);
            userCoupon.setStartTime(pushCoupon.getStartTime());
            userCoupon.setEndTime(pushCoupon.getEndTime());
            userCoupon.setCreateTime(new Date());
            userCoupon.setUpdateTime(new Date());
            // 插入数据库
            insertSelective(userCoupon);
            // 券数量
            coupon ++;
            // 消息推送
            try {
                if (systemCoupon.getType() == CouponTypeEnum.welfareFreeCoupon) {
                    userOtherMsgNotificationService.welfareCouponGet(userCoupon);
                } else if (systemCoupon.getType() == CouponTypeEnum.freeCoupon) {
                    userOtherMsgNotificationService.freeSheetCouponGet(userCoupon);
                } else if (systemCoupon.getType() == CouponTypeEnum.rebatePercentCoupon) {
                    userOtherMsgNotificationService.rewardCouponGet(userCoupon,systemCoupon.getPercent().intValue());
                }
            } catch(Exception e) {
                try {
                    LogHelper.errorDetailInfo(e);
                } catch (Exception e1) {
                    e1.printStackTrace();
                }
            }
        }
        // 获取额外信息
        UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid);
        if (userInfoExtra == null) {
            return;
        }
        Integer couponNews = userInfoExtra.getCouponNews();
        if (couponNews == null) {
            userInfoExtra.setCouponNews(coupon);
        } else {
            userInfoExtra.setCouponNews(couponNews + coupon);
        }
        userInfoExtraService.saveUserInfoExtra(userInfoExtra);
    }
    /**
     * 随机券比例
     * @return
     */
    public int randomNum() {
        int result = 1;
        List<RandomProportion> list = new ArrayList<RandomProportion>();
        list.add(new RandomProportion(1,2,30));
        list.add(new RandomProportion(2,4,25));
        list.add(new RandomProportion(4,6,20));
        list.add(new RandomProportion(6,8,6));
        list.add(new RandomProportion(8,10,6));
        list.add(new RandomProportion(10,20,6));
        list.add(new RandomProportion(20,30,2));
        list.add(new RandomProportion(30,40,2));
        list.add(new RandomProportion(40,50,2));
        list.add(new RandomProportion(50,60,1));
        int minRange = 0;
        int maxRange = 0;
        int randomNum = (int) (1 + Math.round(Math.random() * (99)));
        for (int i = 0; i < list.size(); i++) {
            RandomProportion proportion = list.get(i);
            int probability = proportion.probability;
            maxRange = maxRange + probability;
            minRange = maxRange - probability;
            if (i == list.size() && randomNum > minRange && randomNum <= maxRange) {
                result = proportion.minNum + (int) (Math.random() * ((proportion.maxNum - proportion.minNum) + 1));
                break;
            } else if(randomNum > minRange && randomNum <= maxRange) {
                result = proportion.minNum + (int) (Math.random() * ((proportion.maxNum - proportion.minNum)));
                break;
            }
        }
        return result;
    }
    class RandomProportion {
        public int minNum;// 最小
        public int maxNum;// 最大
        public int probability; // 概率
        RandomProportion () {}
        RandomProportion (int minNum, int maxNum, int probability) {
            this.minNum = minNum;
            this.maxNum = maxNum;
            this.probability = probability;
        }
    }
}