package com.cyksj.service.relation.impl; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.cyksj.common.exception.BusinessRuntimeException; import com.cyksj.enums.GatewayApiCode; import com.cyksj.mapper.GroupsRelationMapper; import com.cyksj.mapper.UserMapper; import com.cyksj.mapper.corp.CorpUserMapper; import com.cyksj.mapper.market.task.UserBindPhoneMapper; import com.cyksj.model.entity.*; import com.cyksj.model.views.GoodsDonViews; import com.cyksj.model.views.RenewalView; import com.cyksj.service.mange.coupon.CouponCommonService; import com.cyksj.service.relation.GroupRelationFrontService; import com.ejlchina.searcher.BeanSearcher; import com.ejlchina.searcher.param.Operator; import com.ejlchina.searcher.util.MapUtils; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import java.util.List; import java.util.stream.Collectors; /* *项目名: netflix *文件名: GroupRelationFrontServiceImpl *创建者: JavaZou *创建时间:2022/12/29 15:42 */ @Service @RequiredArgsConstructor @Slf4j public class GroupRelationFrontServiceImpl implements GroupRelationFrontService { private final UserBindPhoneMapper userBindPhoneMapper; private final UserMapper userMapper; private final BeanSearcher beanSearcher; private final CorpUserMapper corpUserMapper; private final CouponCommonService couponCommonService; private final GroupsRelationMapper groupsRelationMapper; @Override public List getMyTicket(long userId, Boolean isLoginPopularize) { User u = userMapper.selectById(userId); if (u == null) throw BusinessRuntimeException.getGatewayApiCode(GatewayApiCode.CMS_TOKEN_VALID); Boolean isPcUser = false; if (StrUtil.isNotBlank(u.getLoginPhone())) { isPcUser = true; } //是否绑定过手机号 LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(UserBindPhone.class).last("limit 1"); if (isPcUser) { wrapper.eq(UserBindPhone::getPhone, u.getLoginPhone()); } else { wrapper.eq(UserBindPhone::getUserId, userId); } UserBindPhone userBindPhone = userBindPhoneMapper.selectOne(wrapper); Long otherUserId = 0l; if (userBindPhone != null) { if (isPcUser) { otherUserId = userBindPhone.getUserId(); } else { User user = userMapper.selectOne(Wrappers.lambdaQuery(User.class) .eq(User::getLoginPhone, userBindPhone.getPhone()).last("limit 1")); if (user != null) { otherUserId = user.getId(); } } } List list = beanSearcher.searchAll(RenewalView.class, MapUtils.builder() .field(RenewalView::getUserId, userId, otherUserId).op(Operator.InList) .field(RenewalView::getStatus, List.of("validity", "overdue")).op(Operator.InList) .orderBy(RenewalView::getExpiryTime).asc() .build()); //过滤邀请制、已失效的车位 DateTime now = DateTime.now(); List collect = list.stream().filter(ticket -> { if (ticket.getExpiryTime() != null && ticket.getExpiryTime().before(now)) { return false; } if (ticket.getSecondType() == 1) { ticket.setAccount(null); ticket.setPassword(null); } if (isLoginPopularize != null && isLoginPopularize) { GoodsDonViews views = beanSearcher.searchFirst(GoodsDonViews.class, MapUtils.builder().field(GoodsDonViews::getId, ticket.getGoodsId()).build()); views.setSpecs(beanSearcher.searchFirst(GoodsDonSpec.class, MapUtils.builder().field(GoodsDonSpec::getGoodsId, views.getId()).build())); views.setSkuList(beanSearcher.searchAll(GoodsDonSku.class, MapUtils.builder().field(GoodsDonSku::getGoodsId, views.getId()).field(GoodsDonSku::getStatus, true).build())); ticket.setGoodsDonViews(views); } return true; }).collect(Collectors.toList()); return collect; } @Override public Boolean isJoinCorpWx(Long userId, Boolean isJoin, Boolean noCoupon) { if (!isJoin) { User user = userMapper.selectById(userId); if (StrUtil.isEmpty(user.getUnionid())) { return true; } CorpUser corpUser = corpUserMapper.selectOne(Wrappers.lambdaQuery(CorpUser.class) .ne(CorpUser::getUnionid, "") .eq(CorpUser::getUnionid, user.getUnionid()) .last("limit 1") .select(CorpUser::getId) ); if (corpUser == null) { return false; } } //用户是否买了奈飞车票 Number number = beanSearcher.searchCount(RenewalView.class, MapUtils.builder() .field(RenewalView::getUserId, userId) .field(RenewalView::getGoodsId, 1) .field(RenewalView::getStatus, List.of("validity", "overdue")).op(Operator.InList) .build()); if (number.intValue() > 0 && !noCoupon) { couponCommonService.sendCouponToUser(userId, 34l, 0l, 0l, 0l, CouponUser.Channel.wxCorp); } return true; } @Override public GroupsRelation getSimilarExpiredGroupRelation(Long skuId, Integer months) { DateTime expiryTime = DateUtil.offsetMonth(DateTime.now(), months); DateTime minExpiryTime = DateUtil.offsetDay(expiryTime, -5); Long groupsId = groupsRelationMapper.selectSimilarExpiredRelation(skuId, minExpiryTime); if (groupsId == null) { return null; } GroupsRelation relation = groupsRelationMapper.selectOne(Wrappers.lambdaQuery(GroupsRelation.class) .eq(GroupsRelation::getGroupsId, groupsId) .eq(GroupsRelation::getStatus, GroupsRelation.Status.none) .eq(GroupsRelation::getUserId, 0) .orderByAsc(GroupsRelation::getNum) .last("limit 1")); return relation; } }