| | |
| | | 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;
|
| | |
| | | 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;
|
| | |
| | | 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, "传递参数不匹配");
|
| | |
| | | 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, "该券不能被使用");
|
| | | }
|
| | |
|
| | | // 系统券信息
|
| | |
| | | return userRecordVO;
|
| | | }
|
| | |
|
| | | |
| | | @Transactional
|
| | | @Override
|
| | | public void activatedWelfareFreeCoupon(Long uid, String fromNickName) {
|
| | |
| | |
|
| | | // 获取额外信息
|
| | | UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid);
|
| | | |
| | | // 已经抽过奖的或者已经进入过抽奖页面的
|
| | | if (userInfoExtra != null && userInfoExtra.getLotteryNewbies() != null) {
|
| | | return;
|
| | | }
|
| | |
| | | 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;
|
| | | }
|
| | | }
|
| | | }
|
| | |
|