xuqiang 1 год назад
Родитель
Сommit
c38a811b85

+ 1 - 1
src/main/java/com/ydtech/modules/admin/service/impl/SysUserServiceImpl.java

@@ -3293,7 +3293,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
         SpringUtil.getBean(UserAgentTrackUtils.class).addTrack(
                 sysUser.getId(), UserAgentStatus.UAS_0.getCode(),
                 "admin");
-        if (dto.getNewApp().equals("1")){
+        if (dto.getNewApp().equals("1") && null != dto.getNewApp()){
             addPartner(sysUser, dto.getReferrerId());
         }
         return sysUser.getId();

+ 1 - 1
src/main/java/com/ydtech/modules/partner/dao/PartnerPremiumDetailsMapper.java

@@ -19,7 +19,7 @@ public interface PartnerPremiumDetailsMapper extends BaseMapper<PartnerPremiumDe
     List<Map<String,Object>> selectTotalSumPremiumGroupBy(@Param("ew") QueryWrapper<PartnerPremiumDetails> queryWrapper);
 
 
-    @Select("SELECT SUM(sumpremium) FROM partner_premium_details ${ew.customSqlSegment} ")
+    @Select("SELECT SUM(db.sumpremium) FROM (SELECT DISTINCT orderno,sumpremium FROM partner_premium_details ${ew.customSqlSegment}) db ")
     BigDecimal selectTotalSumPremium(@Param("ew") QueryWrapper<PartnerPremiumDetails> queryWrapper);
 
     @Select("SELECT " +

+ 49 - 27
src/main/java/com/ydtech/modules/partner/service/Impl/PartnerRuleServiceImpl.java

@@ -5,7 +5,6 @@ import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.extra.spring.SpringUtil;
-import com.alipay.api.domain.Person;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ydtech.exception.SystemException;
@@ -13,18 +12,15 @@ import com.ydtech.modules.partner.dao.PartnerAttributeMapper;
 import com.ydtech.modules.partner.dao.PartnerRuleMapper;
 import com.ydtech.modules.partner.dao.PartnerUserMapper;
 import com.ydtech.modules.partner.model.PartnerAttribute;
-import com.ydtech.modules.partner.model.PartnerCommissionRules;
 import com.ydtech.modules.partner.model.PartnerRule;
 import com.ydtech.modules.partner.model.param.CommissionValidityPeriod;
 import com.ydtech.modules.partner.model.param.PartnerRuleEntity;
 import com.ydtech.modules.partner.service.PartnerRuleService;
 import com.ydtech.modules.partner.utils.ExpiredCommissionUtils;
 import org.apache.commons.lang3.StringUtils;
-import org.mapstruct.ap.shaded.freemarker.core.BugException;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
-
 import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
 import java.time.LocalDate;
@@ -32,7 +28,6 @@ import java.time.LocalDateTime;
 import java.time.ZoneId;
 import java.time.temporal.ChronoUnit;
 import java.util.*;
-import java.util.stream.Collectors;
 
 
 @Service
@@ -129,40 +124,67 @@ public class PartnerRuleServiceImpl extends ServiceImpl<PartnerRuleMapper, Partn
 
     @Override
     public boolean verifyUpgradeConditions(String userId, String grade) {
-        if (StringUtils.equals("1", grade) || StringUtils.equals("0", grade)){
+        if (StringUtils.equals("1", grade) || StringUtils.equals("0", grade)) {
             return false;
         }
         VerifyData data = extractCommonLogic(userId, grade);
-        PartnerRuleEntity partnerRuleEntity = data.partnerRuleEntity;
-        BigDecimal p = data.p;
-        BigDecimal bf = data.bf;
-        List<PartnerAttribute> requirement = partnerRuleEntity.getRequirement();
-        BigDecimal min = new BigDecimal(requirement.get(0).getMin());
-        BigDecimal min1 = new BigDecimal(requirement.get(1).getMin());
-        BigDecimal min2 = new BigDecimal(requirement.get(2).getMin());
-        if (StringUtils.equals("1", partnerRuleEntity.getAppraise())) {
-            return p.compareTo(min) >= 0 && bf.compareTo(min1) >= 0 && data.ownBf.compareTo(min2) >= 0;
-        } else {
-            return p.compareTo(min) >= 0 || bf.compareTo(min1) >= 0 || data.ownBf.compareTo(min2) >= 0;
-        }
+        return verifyConditionsInternal(data, data.partnerRuleEntity.getRequirement(),
+                data.partnerRuleEntity.getAppraise());
     }
 
     @Override
     public boolean verifyDowngradeUpgradeConditions(String userId, String grade) {
         VerifyData data = downgradeUpgradeConditions(userId, grade);
-        PartnerRuleEntity partnerRuleEntity = data.partnerRuleEntity;
+        return verifyConditionsInternal(data, data.partnerRuleEntity.getStrategyArray(),
+                data.partnerRuleEntity.getAppraise());
+    }
+
+    /**
+     * 内部通用的条件验证方法
+     * @param data 验证数据
+     * @param attributes 属性列表(要求或策略数组)
+     * @param appraise 评估标志
+     * @return 是否满足条件
+     */
+    private boolean verifyConditionsInternal(VerifyData data, List<PartnerAttribute> attributes, String appraise) {
+        if (attributes == null || attributes.size() < 3) {
+            return false;
+        }
+        boolean c1 = attributes.get(0).isChecked();
+        boolean c2 = attributes.get(1).isChecked();
+        boolean c3 = attributes.get(2).isChecked();
         BigDecimal p = data.p;
         BigDecimal bf = data.bf;
         BigDecimal ownBf = data.ownBf;
-        List<PartnerAttribute> strategyArray = partnerRuleEntity.getStrategyArray();
-        BigDecimal min = new BigDecimal(strategyArray.get(0).getMin());
-        BigDecimal min1 = new BigDecimal(strategyArray.get(1).getMin());
-        BigDecimal min2 = new BigDecimal(strategyArray.get(2).getMin());
-        if (StringUtils.equals("1", partnerRuleEntity.getAppraise())) {
-            return p.compareTo(min) >= 0 && bf.compareTo(min1) >= 0 && ownBf.compareTo(min2) >= 0;
-        } else {
-            return p.compareTo(min) >= 0 || bf.compareTo(min1) >= 0 || ownBf.compareTo(min2) >= 0;
+
+        BigDecimal min1 = new BigDecimal(attributes.get(0).getMin());
+        BigDecimal min2 = new BigDecimal(attributes.get(1).getMin());
+        BigDecimal min3 = new BigDecimal(attributes.get(2).getMin());
+        boolean isAndLogic = StringUtils.equals("1", appraise);
+        if (c1 && c2 && c3) {
+            return isAndLogic
+                    ? p.compareTo(min1) >= 0 && bf.compareTo(min2) >= 0 && ownBf.compareTo(min3) >= 0
+                    : p.compareTo(min1) >= 0 || bf.compareTo(min2) >= 0 || ownBf.compareTo(min3) >= 0;
+        }
+        if (c1 && c2) {
+            return isAndLogic
+                    ? p.compareTo(min1) >= 0 && bf.compareTo(min2) >= 0
+                    : p.compareTo(min1) >= 0 || bf.compareTo(min2) >= 0;
+        }
+        if (c1 && c3) {
+            return isAndLogic
+                    ? p.compareTo(min1) >= 0 && ownBf.compareTo(min3) >= 0
+                    : p.compareTo(min1) >= 0 || ownBf.compareTo(min3) >= 0;
+        }
+        if (c2 && c3) {
+            return isAndLogic
+                    ? bf.compareTo(min2) >= 0 && ownBf.compareTo(min3) >= 0
+                    : bf.compareTo(min2) >= 0 || ownBf.compareTo(min3) >= 0;
         }
+        if (c1) return p.compareTo(min1) >= 0;
+        if (c2) return bf.compareTo(min2) >= 0;
+        if (c3) return ownBf.compareTo(min3) >= 0;
+        return false;
     }