From 529ad9dd8d1876b57e852bc45b602ba3ccc8df2a Mon Sep 17 00:00:00 2001
From: KKSU <15274802129@163.com>
Date: Wed, 10 Apr 2024 17:19:08 +0800
Subject: [PATCH] 公告-首页公告调整

---
 src/main/java/cc/mrbird/febs/vip/service/impl/MallVipConfigServiceImpl.java |  157 +++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 153 insertions(+), 4 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/vip/service/impl/MallVipConfigServiceImpl.java b/src/main/java/cc/mrbird/febs/vip/service/impl/MallVipConfigServiceImpl.java
index e35e9ad..224fd19 100644
--- a/src/main/java/cc/mrbird/febs/vip/service/impl/MallVipConfigServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/vip/service/impl/MallVipConfigServiceImpl.java
@@ -1,33 +1,182 @@
 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.ArrayList;
-import java.util.List;
+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.getPageNum());
+        Page<MallVipConfig> page = new Page<>(request.getPageNum(), request.getPageSize());
         return this.baseMapper.findVipConfigListInPage(page);
     }
 
     @Override
     public List<MallVipConfig> findConfigList() {
-        return this.baseMapper.selectVipConfigList();
+        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;
+        if (member.getBirthday() != null) {
+             isBirthday = member.getBirthday().compareTo(DateUtil.parseDate(today)) == 0;
+        } else {
+            isBirthday = false;
+        }
+        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);
     }
 }

--
Gitblit v1.9.1