yujian
2019-03-06 a6673284d4ec0b7c11079c65d940c9443d86d11e
冲突
1个文件已修改
194 ■■■■■ 已修改文件
fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserSystemCouponServiceImpl.java 194 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserSystemCouponServiceImpl.java
@@ -27,6 +27,8 @@
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.push.PushCouponRecord;
import com.yeshi.fanli.entity.system.SystemCoupon;
import com.yeshi.fanli.entity.system.SystemCoupon.CouponTypeEnum;
import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
@@ -1494,5 +1496,197 @@
    }
    
    @Override
    @Transactional
    public void receivedCoupon(Long uid) throws Exception {
        List<PushCoupon> list = pushCouponService.listQueryEffective();
        if (list == null || list.size() == 0) {
            return;
        }
        List<PushCouponRecord> listRecord = pushCouponRecordService.listByUid(uid);
        for (PushCoupon pushCoupon: list) {
            boolean receive = false;
            String uids = pushCoupon.getUids();
            if (uids == null || uids.trim().length() == 0) {
                receive = true;
            } else {
                String[] uidArray = uids.split(",");
                if (uidArray != null) {
                    for (int i = 0; i < uidArray.length; i++) {
                        String str_uid = uidArray[i];
                        if (str_uid != null && str_uid.trim().length() > 0) {
                            if(str_uid.equals(uid.toString())) {
                                receive = true;
                            }
                        }
                    }
                }
            }
            if (!receive) {
                continue;
            }
            if (listRecord != null && listRecord.size() > 0) {
                for (PushCouponRecord PushCouponRecord: listRecord) {
                     PushCoupon pushCoupon2 = PushCouponRecord.getPushCoupon();
                    if (pushCoupon.getId().equals(pushCoupon2.getId()) ) {
                        receive = false;
                        break;
                    }
                }
            }
            if (receive) {
                // 插入记录
                PushCouponRecord pushCouponRecord = new PushCouponRecord();
                pushCouponRecord.setPushCoupon(pushCoupon);
                pushCouponRecord.setUid(uid);
                pushCouponRecord.setCreateTime(new Date());
                pushCouponRecordService.insertSelective(pushCouponRecord);
                // 插入券
                randomRewardCoupon(pushCoupon, uid);
            }
        }
    }
    @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;
        }
    }
    
}