yujian
2019-03-06 e38ed8ad96af9893ab53bd34f8fd50f7b6b921b0
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;
@@ -596,6 +596,13 @@
      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, "该券不能被使用");
      }
      Long couponUid = userSystemCoupon.getUid();
      if (!uid.equals(couponUid)) {
@@ -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,9 +1053,10 @@
      return userRecordVO;
   }
   
   @Transactional
   @Override
   public void activatedWelfareFreeCoupon(Long uid) {
   public void activatedWelfareFreeCoupon(Long uid, String fromNickName) {
      
      LogHelper.test("券激活:"+uid);
      if (uid == null) {
@@ -1080,7 +1094,9 @@
         
         // 消息推送
         try {
            UserInfo userInfo = userInfoService.selectByPKey(uid);
            UserInfo userInfo = new UserInfo();
            userInfo.setId(uid);
            userInfo.setNickName(fromNickName);
            
            userOtherMsgNotificationService.welfareCouponActive(userSystemCoupon, userInfo);
         } catch(Exception e) {
@@ -1365,6 +1381,8 @@
      
      // 获取额外信息
      UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid);
      // 已经抽过奖的或者已经进入过抽奖页面的
      if (userInfoExtra != null && userInfoExtra.getLotteryNewbies() != null) {
         return;
      }
@@ -1456,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;
      }
   }
}