| | |
| | | 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;
|
| | |
| | | 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;
|
| | |
| | | @Resource
|
| | | private CommonOrderCountService commonOrderCountService;
|
| | |
|
| | | @Resource
|
| | | private PushCouponService pushCouponService;
|
| | | |
| | | @Resource
|
| | | private PushCouponRecordService pushCouponRecordService;
|
| | | |
| | | |
| | | @Override
|
| | | public int insertSelective(UserSystemCoupon record) {
|
| | | return userSystemCouponMapper.insertSelective(record);
|
| | |
| | | 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())) {
|
| | | // 奖励券10%
|
| | | coupon = systemCouponService.getCouponByTypeAndPercent(couponType,new BigDecimal(10));
|
| | | }
|
| | | |
| | | if (coupon == null) {
|
| | | throw new UserSystemCouponException(1, "券类型不正确");
|
| | | }
|
| | |
| | | @Transactional
|
| | | @Override
|
| | | public List<UserSystemCouponVO> getOrderCouponList(Long uid) throws UserSystemCouponException, Exception {
|
| | | |
| | | if (uid == null) {
|
| | | throw new UserSystemCouponException(1, "用户未登录");
|
| | | }
|
| | |
| | | // 退回券
|
| | | sendBackTimeOutCoupon(uid);
|
| | | // 活动领取券
|
| | | receivedCoupon(uid);
|
| | | // receivedCoupon(uid);
|
| | |
|
| | | // 订单相关的券
|
| | | List<SystemCoupon> couponList = systemCouponService.getOrderCouponList();
|
| | |
| | | sendBackTimeOutCoupon(uid);
|
| | |
|
| | | // 活动领取券
|
| | | receivedCoupon(uid);
|
| | | // receivedCoupon(uid);
|
| | |
|
| | | // 商品相关的券
|
| | | List<SystemCoupon> couponList = systemCouponService.getGoodsCouponList();
|
| | |
| | |
|
| | | }
|
| | |
|
| | | @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);
|
| | | |
| | | // 插入券
|
| | | randomRewardCoupon(pushCoupon, uid);
|
| | | }
|
| | | }
|
| | | }
|
| | | |
| | | @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;
|
| | | }
|
| | | }
|
| | |
|
| | | }
|