fxi
Hentua
2024-01-24 b295ea4c6f8233d2e0d4ad2a25f7184398b13cf3
src/main/java/cc/mrbird/febs/vip/service/impl/MallVipConfigServiceImpl.java
@@ -1,6 +1,10 @@
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;
@@ -8,6 +12,8 @@
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;
@@ -18,8 +24,7 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
import java.util.*;
@Slf4j
@Service
@@ -27,6 +32,7 @@
public class MallVipConfigServiceImpl extends ServiceImpl<MallVipConfigMapper, MallVipConfig> implements IMallVipConfigService {
    private final IMallVipConfigBenefitsService mallVipConfigBenefitsService;
    private final MallMemberMapper mallMemberMapper;
    @Override
    public IPage<MallVipConfig> vipConfigList(QueryRequest request) {
@@ -57,6 +63,26 @@
    }
    @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);
@@ -65,4 +91,36 @@
        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);
    }
}