From 9b51a95fa8bc9b3a86108c6900e17fc55f8db467 Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Mon, 19 May 2025 17:02:07 +0800
Subject: [PATCH] refactor(vip): 优化积分和返佣计算逻辑

---
 src/main/java/cc/mrbird/febs/vip/service/impl/MallVipConfigServiceImpl.java |   55 ++++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 52 insertions(+), 3 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 e3d030d..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
@@ -28,6 +28,7 @@
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.*;
+import java.util.stream.Collectors;
 
 @Slf4j
 @Service
@@ -46,12 +47,30 @@
 
     @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<>();
@@ -68,6 +87,27 @@
 
     @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<>();
@@ -109,11 +149,20 @@
         }
 
         String today = DateUtil.format(new Date(), DatePattern.NORM_DATE_PATTERN);
-        boolean isBirthday = member.getBirthday().compareTo(DateUtil.parseDate(today)) == 0;
+        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;
             }
 
             // 生日权益
@@ -128,6 +177,6 @@
             return item.getGainType() == 1 && StrUtil.equals(data.getValue(), todayTime);
         }).max(Comparator.comparing(MallVipBenefits::getScoreMultiple));
 
-        return max.orElseGet(max::get);
+        return max.orElse(null);
     }
 }

--
Gitblit v1.9.1