admin
2019-07-30 573c491b4a1ba60e12a5678a01c1546c0077c1ee
fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserSystemCouponServiceImpl.java
@@ -45,6 +45,8 @@
import com.yeshi.fanli.service.inter.order.HongBaoOrderService;
import com.yeshi.fanli.service.inter.order.OrderHongBaoMapService;
import com.yeshi.fanli.service.inter.order.OrderService;
import com.yeshi.fanli.service.inter.push.PushCouponRecordService;
import com.yeshi.fanli.service.inter.push.PushCouponService;
import com.yeshi.fanli.service.inter.user.DeviceLotteryRecordService;
import com.yeshi.fanli.service.inter.user.UserInfoExtraService;
import com.yeshi.fanli.service.inter.user.UserInfoService;
@@ -125,7 +127,14 @@
   @Resource
   private CommonOrderCountService commonOrderCountService;
   @Resource
   private PushCouponService pushCouponService;
   @Resource
   private PushCouponRecordService pushCouponRecordService;
   @Override
   public int insertSelective(UserSystemCoupon record) {
      return userSystemCouponMapper.insertSelective(record);
@@ -155,7 +164,12 @@
   public List<UserSystemCoupon> getUserCouponBySource(Long uid, String source) {
      return userSystemCouponMapper.getUserCouponBySource(uid, source);
   }
   @Override
   public int countTodatyUserCouponBySource(Long uid, String source) {
      return userSystemCouponMapper.countTodatyUserCouponBySource(uid, source);
   }
   @Override
   public long countUserCouponList(Long uid) {
      return userSystemCouponMapper.countUserCouponList(uid);
@@ -170,7 +184,16 @@
         throw new UserSystemCouponException(1, "参数不正确");
      }
      SystemCoupon coupon = systemCouponService.getCouponByType(couponType);
      SystemCoupon coupon = null;
      if (couponType.equals(CouponTypeEnum.welfareFreeCoupon.name())) {
         // 福利免单券
         coupon = systemCouponService.getCouponByType(couponType);
      } else if (couponType.equals(CouponTypeEnum.rebatePercentCoupon.name())) {
         // 随机奖励券
         randomRewardCoupon(1, uid, source);
         return;
      }
      if (coupon == null) {
         throw new UserSystemCouponException(1, "券类型不正确");
      }
@@ -186,7 +209,8 @@
      }
      // 结束日期
      String endDay = DateUtil.plusDay(coupon.getExpiryDay(), new Date());
      // 今天在内  减去一天
      String endDay = DateUtil.plusDay(coupon.getExpiryDay() - 1, new Date());
      SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
      Date endTime = format.parse(endDay);
@@ -246,7 +270,7 @@
   @Transactional
   @Override
   public List<UserSystemCouponVO> getUserCouponVOList(long start, int count, Long uid)
   public List<UserSystemCouponVO> getUserCouponVOList(long start, int count, Long uid, boolean changeJump)
         throws UserSystemCouponException, Exception {
      if (uid == null) {
@@ -257,14 +281,14 @@
      updateCounponInvalid(uid);
      // 退回券
      sendBackTimeOutCoupon(uid);
      List<UserSystemCouponVO> listVO = userSystemCouponMapper.getUserCouponVOList(start, count, uid);
      if (listVO == null || listVO.size() == 0) {
         return listVO;
      }
      // 数据组织
      listDataFactory(listVO, uid);
      listDataFactory(listVO, uid, changeJump);
      return listVO;
   }
@@ -274,8 +298,14 @@
    * 
    * @param listVO
    */
   public void listDataFactory(List<UserSystemCouponVO> listVO, Long uid) throws Exception {
   public void listDataFactory(List<UserSystemCouponVO> listVO, Long uid, boolean changeJump) throws Exception {
      String inviteCode = null;
      UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid);
      if (userInfoExtra != null) {
         inviteCode = userInfoExtra.getInviteCode();
      }
      for (UserSystemCouponVO userCouponVO : listVO) {
         SystemCoupon systemCoupon = userCouponVO.getSystemCoupon();
@@ -311,30 +341,26 @@
            // 显示规则
            userCouponVO.setCouponRule(systemCoupon.getRemark());
            userCouponVO.setCouponEffect("待激活");
            // 状态未激活 -且未被使用
            if (UserSystemCoupon.STATE_CAN_USE == state) {
               userCouponVO.setState(0);
            }
            jumpBtn = new HashMap<String, Object>();
            // 邀请队员界面
            /*
             * Map<String, Object> jumpLink = new HashMap<String, Object>();
             * UserInfoExtra userInfoExtra =
             * userInfoExtraService.getUserInfoExtra(uid); if (userInfoExtra
             * != null && userInfoExtra.getInviteCode() != null &&
             * userInfoExtra.getInviteCode().trim().length() > 0) { //
             * 邀请激活成功界面 jumpLink.put("url",
             * configService.get("invite_activation_success_url") +
             * "?alert=true"); } else { // 激活邀请码界面 jumpLink.put("url",
             * configService.get("invite_activation_url")); }
             * jumpBtn.put("params", jumpLink);
             */
            jumpBtn.put("jumpDetail", jumpDetailV2Service.getByTypeCache("invite"));
            // 福利券需要激活界面
            if (!changeJump) {
               jumpBtn.put("jumpDetail", jumpDetailV2Service.getByTypeCache("invite"));
            } else {
               if (inviteCode != null && inviteCode.trim().length() > 0) {
                  // 邀请好友界面
                  jumpBtn.put("jumpDetail", jumpDetailV2Service.getByTypeCache("invite_friends"));
               } else {
                  // 邀请激活界面
                  jumpBtn.put("jumpDetail", jumpDetailV2Service.getByTypeCache("invite_activate"));
               }
            }
         } else if (stateActivated == 1) {
            // 显示规则
            userCouponVO.setCouponRule(systemCoupon.getRule());
@@ -509,6 +535,7 @@
   @Transactional
   @Override
   public List<UserSystemCouponVO> getOrderCouponList(Long uid) throws UserSystemCouponException, Exception {
      if (uid == null) {
         throw new UserSystemCouponException(1, "用户未登录");
      }
@@ -544,7 +571,7 @@
      updateCounponInvalid(uid);
      // 退回券
      sendBackTimeOutCoupon(uid);
      // 商品相关的券
      List<SystemCoupon> couponList = systemCouponService.getGoodsCouponList();
      if (couponList == null || couponList.size() == 0) {
@@ -904,7 +931,7 @@
      String progressMsg = "";
      String progressColor = "";
      // 跳转奖励券规则
      userRecordVO.setRuleLink(configService.get("reward_coupon_help"));
      userRecordVO.setRuleLink(configService.get("free_coupon_help"));
      // 进度: 1 灰色 2 红色 3 绿色
      String progressState1 = "3";
@@ -1205,8 +1232,8 @@
   @Transactional
   @Override
   public void sendBackTimeOutCoupon(Long uid) {
      // 超过120秒 未被匹配的券
      List<UserSystemCouponRecord> list = userSystemCouponRecordService.getCouponByUsingTimeOut(uid, 120L);
      // 超过10分钟   未被匹配的券
      List<UserSystemCouponRecord> list = userSystemCouponRecordService.getCouponByUsingTimeOut(uid,600L);
      if (list == null || list.size() == 0) {
         return;
      }
@@ -1230,7 +1257,8 @@
         // 结束日期
         Date endTime = null;
         try {
            String endDay = DateUtil.plusDay(expiryDay, new Date());
            // 今天在内  减去一天
            String endDay = DateUtil.plusDay(expiryDay - 1, new Date());
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
            endTime = format.parse(endDay);
         } catch (ParseException e) {
@@ -1342,7 +1370,8 @@
      // 结束日期
      Date endTime = null;
      try {
         String endDay = DateUtil.plusDay(expiryDay, new Date());
         // 今天在内  减去一天
         String endDay = DateUtil.plusDay(expiryDay - 1, new Date());
         SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
         endTime = format.parse(endDay);
      } catch (ParseException e) {
@@ -1388,9 +1417,9 @@
         return;
      }
      // 是否有过订单:返利、分享订单
      boolean hasOrder = commonOrderCountService.hasRebateAndShareOrder(uid);
      if (hasOrder) {
      // 是否是新用户
      boolean isNewUser = userInfoExtraService.isNewUser(uid);
      if (!isNewUser) {
         return;
      }
@@ -1419,15 +1448,16 @@
               stateActivated = 0;
            }
         }
         // 结束日期
         String endDay = DateUtil.plusDay(systemCoupon.getExpiryDay(), new Date());
         // 今天在内  减去一天
         String endDay = DateUtil.plusDay(systemCoupon.getExpiryDay() - 1, new Date());
         SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
         Date endTime = format.parse(endDay);
         UserSystemCoupon userCoupon = new UserSystemCoupon();
         userCoupon.setUid(uid);
         userCoupon.setSource(UserSystemCoupon.SOURCE_CHOUJIANG);
         userCoupon.setSource(UserSystemCoupon.SOURCE_NEWBIES);
         userCoupon.setSystemCoupon(systemCoupon);
         userCoupon.setState(UserSystemCoupon.STATE_CAN_USE);
         userCoupon.setStateActivated(stateActivated);
@@ -1475,5 +1505,126 @@
      userInfoExtraService.saveUserInfoExtra(userInfoExtra);
   }
   @Override
   @Transactional
   public void randomRewardCoupon(int num, Long uid, String source) throws Exception {
      if (num < 1) {
         return;
      }
      for (int i = 0; i < num; i++) {
         // 返利比-随机
         BigDecimal percent = new BigDecimal(randomNum());
         // 查询奖励券
         SystemCoupon systemCoupon = systemCouponService.getCouponByTypeAndPercent(
               CouponTypeEnum.rebatePercentCoupon.name(),percent);
         if (systemCoupon == null) {
            return;
         }
         // 结束日期 今天在内  减去一天
         String endDay = DateUtil.plusDay(systemCoupon.getExpiryDay() - 1, new Date());
         SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
         Date endTime = format.parse(endDay);
         UserSystemCoupon userCoupon = new UserSystemCoupon();
         userCoupon.setUid(uid);
         userCoupon.setSource(source);
         userCoupon.setSystemCoupon(systemCoupon);
         userCoupon.setState(UserSystemCoupon.STATE_CAN_USE);
         userCoupon.setStateActivated(1);
         userCoupon.setStartTime(new Date());
         userCoupon.setEndTime(endTime);
         userCoupon.setCreateTime(new Date());
         userCoupon.setUpdateTime(new Date());
         // 插入数据库
         insertSelective(userCoupon);
         // 消息推送
         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(num);
      } else {
         userInfoExtra.setCouponNews(couponNews + num);
      }
      userInfoExtraService.saveUserInfoExtra(userInfoExtra);
   }
   /**
    * 随机券比例
    * @return
    */
   public int randomNum() {
      int result = 1;
      List<RandomProportion> list = new ArrayList<RandomProportion>();
      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() * (199)));
      for (int i = 0; i < list.size(); i++) {
         RandomProportion proportion = list.get(i);
         int probability = proportion.probability;
         maxRange = maxRange + probability;
         minRange = maxRange - probability;
         if(randomNum > minRange && randomNum <= maxRange) {
            result = proportion.num;
            break;
         }
      }
      return result;
   }
   class RandomProportion {
      public int num;//券值
      public int probability; // 概率
      RandomProportion () {}
      RandomProportion (int num, int probability) {
         this.num = num;
         this.probability = probability;
      }
   }
}