| | |
| | | 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);
|
| | |
| | | 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, "券类型不正确");
|
| | | }
|
| | |
| | |
|
| | | @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) {
|
| | |
| | | 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;
|
| | | }
|
| | |
| | | *
|
| | | * @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();
|
| | |
| | | // 显示规则
|
| | | 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());
|
| | |
| | | @Transactional
|
| | | @Override
|
| | | public List<UserSystemCouponVO> getOrderCouponList(Long uid) throws UserSystemCouponException, Exception {
|
| | | |
| | | if (uid == null) {
|
| | | throw new UserSystemCouponException(1, "用户未登录");
|
| | | }
|
| | |
| | | updateCounponInvalid(uid);
|
| | | // 退回券
|
| | | sendBackTimeOutCoupon(uid);
|
| | | // 活动领取券
|
| | | receivedCoupon(uid);
|
| | |
|
| | | // 订单相关的券
|
| | | List<SystemCoupon> couponList = systemCouponService.getOrderCouponList();
|
| | |
| | | // 退回券
|
| | | sendBackTimeOutCoupon(uid);
|
| | |
|
| | | // 活动领取券
|
| | | receivedCoupon(uid);
|
| | |
|
| | | // 商品相关的券
|
| | | List<SystemCoupon> couponList = systemCouponService.getGoodsCouponList();
|
| | | if (couponList == null || couponList.size() == 0) {
|
| | |
| | | @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;
|
| | | }
|
| | |
| | | return;
|
| | | }
|
| | |
|
| | | // 是否有过订单:返利、分享订单
|
| | | boolean hasOrder = commonOrderCountService.hasRebateAndShareOrder(uid);
|
| | | if (hasOrder) {
|
| | | // 是否是新用户
|
| | | boolean isNewUser = userInfoExtraService.isNewUser(uid);
|
| | | if (!isNewUser) {
|
| | | return;
|
| | | }
|
| | |
|
| | |
| | |
|
| | | 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);
|
| | |
| | | }
|
| | |
|
| | |
|
| | | @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;
|
| | | }
|
| | | }
|
| | | |
| | | }
|