package cc.mrbird.febs.vip.service.impl;
|
|
import cc.mrbird.febs.common.entity.QueryRequest;
|
import cc.mrbird.febs.common.enumerates.DataDictionaryEnum;
|
import cc.mrbird.febs.common.exception.FebsException;
|
import cc.mrbird.febs.mall.entity.DataDictionaryCustom;
|
import cc.mrbird.febs.mall.entity.MallMember;
|
import cc.mrbird.febs.mall.mapper.DataDictionaryCustomMapper;
|
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.*;
|
import java.util.stream.Collectors;
|
|
@Slf4j
|
@Service
|
@RequiredArgsConstructor
|
public class MallVipConfigServiceImpl extends ServiceImpl<MallVipConfigMapper, MallVipConfig> implements IMallVipConfigService {
|
|
private final IMallVipConfigBenefitsService mallVipConfigBenefitsService;
|
private final MallMemberMapper mallMemberMapper;
|
private final DataDictionaryCustomMapper dataDictionaryCustomMapper;
|
|
@Override
|
public IPage<MallVipConfig> vipConfigList(QueryRequest request) {
|
Page<MallVipConfig> page = new Page<>(request.getPageNum(), request.getPageSize());
|
return this.baseMapper.findVipConfigListInPage(page);
|
}
|
|
@Override
|
public List<MallVipConfig> findConfigList() {
|
List<MallVipConfig> configs = this.baseMapper.selectVipConfigList();
|
configs.forEach(item -> {
|
List<MallVipBenefits> data = item.getBenefits().stream().filter(benefit -> {
|
return benefit.getIsShow() == 1;
|
}).peek(benefits -> {
|
benefits.setIsJump(CollUtil.isEmpty(benefits.getDetails()) ? 2 : 1);
|
}).collect(Collectors.toList());
|
|
item.setBenefits(data);
|
});
|
return configs;
|
}
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public void addVipConfig(MallVipConfig config) {
|
List<MallVipConfig> configs = this.baseMapper.selectVipConfigList();
|
boolean b = configs.stream().anyMatch(item -> {
|
return (item.getLevel().equals(config.getLevel()) || config.getCode().equals(item.getCode()));
|
});
|
|
if (b) {
|
throw new FebsException("会员等级或编码已存在");
|
}
|
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) {
|
MallVipConfig oldConfig = this.baseMapper.selectById(config.getId());
|
|
List<MallVipConfig> configs = this.baseMapper.selectVipConfigList();
|
boolean b = configs.stream().anyMatch(item -> {
|
return !item.getId().equals(config.getId()) && (item.getLevel().equals(config.getLevel()) || config.getCode().equals(item.getCode()));
|
});
|
|
if (b) {
|
throw new FebsException("会员等级或编码已存在");
|
}
|
|
if (!config.getCode().equals(oldConfig.getCode())) {
|
LambdaQueryWrapper<MallMember> memberQuery = new LambdaQueryWrapper<>();
|
memberQuery.eq(MallMember::getLevel, oldConfig.getCode());
|
List<MallMember> mallMembers = mallMemberMapper.selectList(memberQuery);
|
if (CollUtil.isNotEmpty(mallMembers)) {
|
throw new FebsException("会员编码绑定了客户,请调整后修改");
|
}
|
}
|
|
|
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() == 3 && item.getScoreMultiple() != null) {
|
return true;
|
}
|
|
// 生日权益
|
if (item.getGainType() == 2 && isBirthday) {
|
return true;
|
}
|
|
DataDictionaryCustom data = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.VIP_DATE.getType(), DataDictionaryEnum.VIP_DATE.getCode());
|
|
String todayTime = DateUtil.format(new Date(), "MM-dd");
|
// 会员日
|
return item.getGainType() == 1 && StrUtil.equals(data.getValue(), todayTime);
|
}).max(Comparator.comparing(MallVipBenefits::getScoreMultiple));
|
|
return max.orElse(null);
|
}
|
}
|