| | |
| | | package cc.mrbird.febs.vip.service.impl; |
| | | |
| | | import cc.mrbird.febs.common.entity.QueryRequest; |
| | | import cc.mrbird.febs.common.exception.FebsException; |
| | | import cc.mrbird.febs.mall.entity.MallMember; |
| | | import cc.mrbird.febs.mall.mapper.MallMemberMapper; |
| | | import cc.mrbird.febs.vip.entity.MallVipBenefits; |
| | | import cc.mrbird.febs.vip.entity.MallVipConfig; |
| | | import cc.mrbird.febs.vip.entity.MallVipConfigBenefits; |
| | | import cc.mrbird.febs.vip.mapper.MallVipConfigBenefitsMapper; |
| | | import cc.mrbird.febs.vip.mapper.MallVipConfigMapper; |
| | | import cc.mrbird.febs.vip.service.IMallVipConfigBenefitsService; |
| | | import cc.mrbird.febs.vip.service.IMallVipConfigService; |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import cn.hutool.core.date.DatePattern; |
| | | 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.metadata.IPage; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import lombok.RequiredArgsConstructor; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import java.util.*; |
| | | |
| | | @Slf4j |
| | | @Service |
| | | @RequiredArgsConstructor |
| | | public class MallVipConfigServiceImpl extends ServiceImpl<MallVipConfigMapper, MallVipConfig> implements IMallVipConfigService { |
| | | |
| | | private final IMallVipConfigBenefitsService mallVipConfigBenefitsService; |
| | | private final MallMemberMapper mallMemberMapper; |
| | | |
| | | @Override |
| | | public IPage<MallVipConfig> vipConfigList(QueryRequest request) { |
| | | Page<MallVipConfig> page = new Page<>(request.getPageNum(), request.getPageNum()); |
| | | Page<MallVipConfig> page = new Page<>(request.getPageNum(), request.getPageSize()); |
| | | return this.baseMapper.findVipConfigListInPage(page); |
| | | } |
| | | |
| | | @Override |
| | | public List<MallVipConfig> findConfigList() { |
| | | return this.baseMapper.selectVipConfigList(); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional |
| | | public void addVipConfig(MallVipConfig config) { |
| | | this.baseMapper.insert(config); |
| | | |
| | | List<MallVipConfigBenefits> configBenefitsList = new ArrayList<>(); |
| | | List<String> benefitsIds = StrUtil.split(config.getBenefitsIds(), ','); |
| | | benefitsIds.forEach(item -> { |
| | | MallVipConfigBenefits configBenefits = new MallVipConfigBenefits(); |
| | | configBenefits.setConfigId(config.getId()); |
| | | configBenefits.setBenefitsId(Long.parseLong(item)); |
| | | configBenefitsList.add(configBenefits); |
| | | }); |
| | | |
| | | mallVipConfigBenefitsService.saveBatch(configBenefitsList); |
| | | } |
| | | |
| | | @Override |
| | | public void editVipConfig(MallVipConfig config) { |
| | | this.baseMapper.updateById(config); |
| | | |
| | | LambdaQueryWrapper<MallVipConfigBenefits> delQuery = new LambdaQueryWrapper<>(); |
| | | delQuery.eq(MallVipConfigBenefits::getConfigId, config.getId()); |
| | | mallVipConfigBenefitsService.remove(delQuery); |
| | | |
| | | List<MallVipConfigBenefits> configBenefitsList = new ArrayList<>(); |
| | | List<String> benefitsIds = StrUtil.split(config.getBenefitsIds(), ','); |
| | | benefitsIds.forEach(item -> { |
| | | MallVipConfigBenefits configBenefits = new MallVipConfigBenefits(); |
| | | configBenefits.setConfigId(config.getId()); |
| | | configBenefits.setBenefitsId(Long.parseLong(item)); |
| | | configBenefitsList.add(configBenefits); |
| | | }); |
| | | |
| | | mallVipConfigBenefitsService.saveBatch(configBenefitsList); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional |
| | | public void delVipConfig(Long id) { |
| | | this.baseMapper.deleteById(id); |
| | | |
| | | LambdaQueryWrapper<MallVipConfigBenefits> delQuery = new LambdaQueryWrapper<>(); |
| | | delQuery.eq(MallVipConfigBenefits::getConfigId, id); |
| | | this.mallVipConfigBenefitsService.remove(delQuery); |
| | | } |
| | | |
| | | @Override |
| | | public MallVipBenefits hasVipBenefits(Long memberId) { |
| | | MallMember member = mallMemberMapper.selectById(memberId); |
| | | if (member == null) { |
| | | throw new FebsException("会员不存在"); |
| | | } |
| | | |
| | | MallVipConfig vipConfig = this.baseMapper.selectVipConfigByCode(member.getLevel()); |
| | | if (vipConfig == null) { |
| | | throw new FebsException("会员配置不存在"); |
| | | } |
| | | |
| | | String today = DateUtil.format(new Date(), DatePattern.NORM_DATE_PATTERN); |
| | | boolean isBirthday = member.getBirthday().compareTo(DateUtil.parseDate(today)) == 0; |
| | | List<MallVipBenefits> benefits = vipConfig.getBenefits(); |
| | | Optional<MallVipBenefits> max = benefits.stream().filter(item -> { |
| | | if (item.getScoreMultiple() == null) { |
| | | return false; |
| | | } |
| | | |
| | | // 生日权益 |
| | | if (item.getGainType() == 2 && isBirthday) { |
| | | return true; |
| | | } |
| | | |
| | | // 会员日 |
| | | return item.getGainType() == 1; |
| | | }).max(Comparator.comparing(MallVipBenefits::getScoreMultiple)); |
| | | |
| | | return max.orElseGet(max::get); |
| | | } |
| | | } |