admin
2019-07-30 573c491b4a1ba60e12a5678a01c1546c0077c1ee
fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserSystemCouponServiceImpl.java
@@ -27,8 +27,6 @@
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;
@@ -191,8 +189,9 @@
         // 福利免单券
         coupon = systemCouponService.getCouponByType(couponType);
      } else if (couponType.equals(CouponTypeEnum.rebatePercentCoupon.name())) {
         // 奖励券10%
         coupon = systemCouponService.getCouponByTypeAndPercent(couponType,new BigDecimal(10));
         // 随机奖励券
         randomRewardCoupon(1, uid, source);
         return;
      }
      
      if (coupon == null) {
@@ -282,8 +281,6 @@
      updateCounponInvalid(uid);
      // 退回券
      sendBackTimeOutCoupon(uid);
      // 活动领取券
      receivedCoupon(uid);
      
      List<UserSystemCouponVO> listVO = userSystemCouponMapper.getUserCouponVOList(start, count, uid);
      if (listVO == null || listVO.size() == 0) {
@@ -547,8 +544,6 @@
      updateCounponInvalid(uid);
      // 退回券
      sendBackTimeOutCoupon(uid);
      // 活动领取券
      receivedCoupon(uid);
      // 订单相关的券
      List<SystemCoupon> couponList = systemCouponService.getOrderCouponList();
@@ -577,9 +572,6 @@
      // 退回券
      sendBackTimeOutCoupon(uid);
      
      // 活动领取券
      receivedCoupon(uid);
      // 商品相关的券
      List<SystemCoupon> couponList = systemCouponService.getGoodsCouponList();
      if (couponList == null || couponList.size() == 0) {
@@ -1514,132 +1506,6 @@
   }
   
   @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);
            // 插入券
            randomRewardCouponForPush(pushCoupon, uid);
         }
      }
   }
   @Transactional
   public void randomRewardCouponForPush(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 {
            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);
   }
   
   @Override
   @Transactional
@@ -1712,20 +1578,25 @@
      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));
      list.add(new RandomProportion(1, 22));
      list.add(new RandomProportion(2, 22));
      list.add(new RandomProportion(3, 22));
      list.add(new RandomProportion(4, 22));
      list.add(new RandomProportion(5, 20));
      list.add(new RandomProportion(6, 18));
      list.add(new RandomProportion(7, 16));
      list.add(new RandomProportion(8, 14));
      list.add(new RandomProportion(9, 12));
      list.add(new RandomProportion(10, 10));
      list.add(new RandomProportion(11, 8));
      list.add(new RandomProportion(12, 6));
      list.add(new RandomProportion(13, 4));
      list.add(new RandomProportion(14, 2));
      list.add(new RandomProportion(15, 1));
      int minRange = 0;
      int maxRange = 0;
      int randomNum = (int) (1 + Math.round(Math.random() * (99)));
      int randomNum = (int) (1 + Math.round(Math.random() * (199)));
      
      for (int i = 0; i < list.size(); i++) {
         
@@ -1735,11 +1606,8 @@
         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)));
         if(randomNum > minRange && randomNum <= maxRange) {
            result = proportion.num;
            break;
         }
      }
@@ -1748,15 +1616,13 @@
   }
   
   class RandomProportion {
      public int minNum;// 最小
      public int maxNum;// 最大
      public int num;//券值
      public int probability; // 概率
      
      RandomProportion () {}
      
      RandomProportion (int minNum, int maxNum, int probability) {
         this.minNum = minNum;
         this.maxNum = maxNum;
      RandomProportion (int num, int probability) {
         this.num = num;
         this.probability = probability;
      }
   }