|
|
@@ -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;
|
|
|
}
|
|
|
|
|
|
|