|
@@ -15,6 +15,7 @@ import com.jzg.commons.core.page.HttpResult;
|
|
|
import com.jzg.commons.entity.po.SysUserJzgInfo;
|
|
import com.jzg.commons.entity.po.SysUserJzgInfo;
|
|
|
import com.jzg.commons.entity.vo.SysUserVo;
|
|
import com.jzg.commons.entity.vo.SysUserVo;
|
|
|
import com.jzg.commons.exception.SystemException;
|
|
import com.jzg.commons.exception.SystemException;
|
|
|
|
|
+import com.jzg.constants.BigConstants;
|
|
|
import com.jzg.constants.TimeConstants;
|
|
import com.jzg.constants.TimeConstants;
|
|
|
import com.jzg.entity.*;
|
|
import com.jzg.entity.*;
|
|
|
import com.jzg.entity.param.*;
|
|
import com.jzg.entity.param.*;
|
|
@@ -466,20 +467,69 @@ public class PartnerUserServiceImpl extends ServiceImpl<PartnerUserMapper, Partn
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
private static BigDecimal getMultiply(List<PartnerAttribute> strategyArray) {
|
|
private static BigDecimal getMultiply(List<PartnerAttribute> strategyArray) {
|
|
|
- PartnerAttribute yq = strategyArray.get(0);
|
|
|
|
|
- BigDecimal min = new BigDecimal(yq.getMin());
|
|
|
|
|
- BigDecimal achieve = new BigDecimal(yq.getAchieve());
|
|
|
|
|
- BigDecimal yqPercent = achieve.divide(min, 2, RoundingMode.HALF_UP).multiply(new BigDecimal("0.33"));
|
|
|
|
|
- PartnerAttribute bf = strategyArray.get(1);
|
|
|
|
|
- BigDecimal bfMin = new BigDecimal(bf.getMin());
|
|
|
|
|
- BigDecimal bfAchieve = new BigDecimal(bf.getAchieve());
|
|
|
|
|
- BigDecimal bfPercent = bfAchieve.divide(bfMin, 2, RoundingMode.HALF_UP).multiply(new BigDecimal("0.34"));
|
|
|
|
|
- PartnerAttribute gr = strategyArray.get(2);
|
|
|
|
|
- BigDecimal grMin = new BigDecimal(gr.getMin());
|
|
|
|
|
- BigDecimal grAchieve = new BigDecimal(gr.getAchieve());
|
|
|
|
|
- BigDecimal grPercent = grAchieve.divide(grMin, 2, RoundingMode.HALF_UP).multiply(new BigDecimal("0.33"));
|
|
|
|
|
- BigDecimal multiply = yqPercent.add(bfPercent).add(grPercent).multiply(new BigDecimal("100"));
|
|
|
|
|
- return multiply;
|
|
|
|
|
|
|
+ // 1. 健壮性校验:空集合 / 长度不是3 → 直接返回0
|
|
|
|
|
+ if (Objects.isNull(strategyArray) || strategyArray.size() != 3) {
|
|
|
|
|
+ return BigDecimal.ZERO;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ PartnerAttribute attr0 = strategyArray.get(0);
|
|
|
|
|
+ PartnerAttribute attr1 = strategyArray.get(1);
|
|
|
|
|
+ PartnerAttribute attr2 = strategyArray.get(2);
|
|
|
|
|
+ // 校验元素非空
|
|
|
|
|
+ Objects.requireNonNull(attr0, "第1个指标不能为空");
|
|
|
|
|
+ Objects.requireNonNull(attr1, "第2个指标不能为空");
|
|
|
|
|
+ Objects.requireNonNull(attr2, "第3个指标不能为空");
|
|
|
|
|
+
|
|
|
|
|
+ // 2. 获取勾选状态
|
|
|
|
|
+ boolean c0 = attr0.isChecked();
|
|
|
|
|
+ boolean c1 = attr1.isChecked();
|
|
|
|
|
+ boolean c2 = attr2.isChecked();
|
|
|
|
|
+ // 统计勾选数量
|
|
|
|
|
+ int checkedCount = (c0 ? 1 : 0) + (c1 ? 1 : 0) + (c2 ? 1 : 0);
|
|
|
|
|
+
|
|
|
|
|
+ // 3. 原始权重数组(与3个指标一一对应)
|
|
|
|
|
+ BigDecimal[] baseWeights = {BigConstants.WEIGHT_YQ, BigConstants.WEIGHT_BF, BigConstants.WEIGHT_GR};
|
|
|
|
|
+ BigDecimal totalScore = BigDecimal.ZERO;
|
|
|
|
|
+
|
|
|
|
|
+ // 4. 循环计算(消除所有if-else,复用核心逻辑)
|
|
|
|
|
+ for (int i = 0; i < 3; i++) {
|
|
|
|
|
+ PartnerAttribute attr = strategyArray.get(i);
|
|
|
|
|
+ // 未勾选直接跳过
|
|
|
|
|
+ if (!attr.isChecked()) {
|
|
|
|
|
+ continue;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 5. 动态获取当前指标权重(核心逻辑)
|
|
|
|
|
+ BigDecimal currentWeight;
|
|
|
|
|
+ if (checkedCount == 3) {
|
|
|
|
|
+ currentWeight = baseWeights[i]; // 3个全选:用原始权重
|
|
|
|
|
+ } else if (checkedCount == 2) {
|
|
|
|
|
+ currentWeight = BigConstants.WEIGHT_TWO_ITEMS; // 选2个:统一0.5
|
|
|
|
|
+ } else if (checkedCount == 1) {
|
|
|
|
|
+ currentWeight = BigConstants.WEIGHT_ONE_ITEM; // 选1个:统一1
|
|
|
|
|
+ } else {
|
|
|
|
|
+ continue; // 都不选
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 6. 统一计算完成率(防止除零异常)
|
|
|
|
|
+ BigDecimal achieve = new BigDecimal(attr.getAchieve());
|
|
|
|
|
+ BigDecimal min = new BigDecimal(attr.getMin());
|
|
|
|
|
+ if (min.compareTo(BigDecimal.ZERO) == 0) {
|
|
|
|
|
+ throw new ArithmeticException("指标最小值不能为0,索引:" + i);
|
|
|
|
|
+ }
|
|
|
|
|
+ BigDecimal percent = achieve.divide(min, BigConstants.DIV_SCALE, BigConstants.ROUND_MODE);
|
|
|
|
|
+
|
|
|
|
|
+ // 7. 计算单项得分(和原逻辑完全一致)
|
|
|
|
|
+ BigDecimal itemScore = percent.compareTo(BigConstants.FULL_RATE) > 0
|
|
|
|
|
+ ? currentWeight
|
|
|
|
|
+ : percent.multiply(currentWeight);
|
|
|
|
|
+
|
|
|
|
|
+ // 累加总分
|
|
|
|
|
+ totalScore = totalScore.add(itemScore);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 8. 统一输出结果(所有分支逻辑相同)
|
|
|
|
|
+ return totalScore.multiply(BigConstants.HUNDRED).setScale(BigConstants.RESULT_SCALE, BigConstants.ROUND_MODE);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@@ -512,13 +562,17 @@ public class PartnerUserServiceImpl extends ServiceImpl<PartnerUserMapper, Partn
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
- public HttpResult degradedTask(String grade, String sysUserId) {
|
|
|
|
|
|
|
+ public HttpResult<PartnerRuleEntity> degradedTask(String grade, String userId) {
|
|
|
|
|
+ SysUserJzgInfo sysUserJzgInfo = getSysUserJzgInfo(userId);
|
|
|
|
|
+ return degradedTaskVo(grade,sysUserJzgInfo.getId());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ public HttpResult<PartnerRuleEntity> degradedTaskVo(String grade, String userId) {
|
|
|
PartnerRuleEntity partnerRuleEntity = ruleService.selectByGrade(grade);
|
|
PartnerRuleEntity partnerRuleEntity = ruleService.selectByGrade(grade);
|
|
|
if (partnerRuleEntity == null) {
|
|
if (partnerRuleEntity == null) {
|
|
|
return HttpResult.error("等级不存在");
|
|
return HttpResult.error("等级不存在");
|
|
|
}
|
|
}
|
|
|
- SysUserJzgInfo sysUserJzgInfo = getSysUserJzgInfo(sysUserId);
|
|
|
|
|
- String userId = sysUserJzgInfo.getId();
|
|
|
|
|
partnerRuleEntity.setRequirement(null);
|
|
partnerRuleEntity.setRequirement(null);
|
|
|
CommissionValidityPeriod period = baseMapper.selectUpgradeCycleStartTime(userId, Integer.valueOf(grade));
|
|
CommissionValidityPeriod period = baseMapper.selectUpgradeCycleStartTime(userId, Integer.valueOf(grade));
|
|
|
period.setEndDate(SpringUtil.getBean(ExpiredCommissionUtils.class).generateDowngradeTime(grade, period.getStartDate()));
|
|
period.setEndDate(SpringUtil.getBean(ExpiredCommissionUtils.class).generateDowngradeTime(grade, period.getStartDate()));
|
|
@@ -700,11 +754,13 @@ public class PartnerUserServiceImpl extends ServiceImpl<PartnerUserMapper, Partn
|
|
|
handleActiveUser(partnerUser, level);
|
|
handleActiveUser(partnerUser, level);
|
|
|
} else {
|
|
} else {
|
|
|
level.setLockingState("1");
|
|
level.setLockingState("1");
|
|
|
- if (null != partnerUser.getUpgradeTime()) {
|
|
|
|
|
- PartnerRuleEntity ruleEntity = ruleService.selectByGrade(String.valueOf(partnerUser.getGrade()));
|
|
|
|
|
- if (Objects.nonNull(partnerUser.getUpgradeTime())){
|
|
|
|
|
- level.setExpiryDate(new SimpleDateFormat("yyyy-MM-dd").format(PartnerDateUtils.addDays(partnerUser.getUpgradeTime(), Integer.valueOf(ruleEntity.getKhDays()))));
|
|
|
|
|
|
|
+ PartnerRuleEntity ruleEntity = ruleService.selectByGrade(String.valueOf(partnerUser.getGrade()));
|
|
|
|
|
+ if (Objects.nonNull(partnerUser.getUpgradeCycleStartTime()) && Objects.nonNull(ruleEntity.getKhDays())){
|
|
|
|
|
+ Integer value = Integer.valueOf(ruleEntity.getKhDays());
|
|
|
|
|
+ if (!partnerUser.isFirst()){
|
|
|
|
|
+ value = value + 1;
|
|
|
}
|
|
}
|
|
|
|
|
+ level.setExpiryDate(new SimpleDateFormat("yyyy-MM-dd").format(PartnerDateUtils.addDays(partnerUser.getUpgradeCycleStartTime(),value )));
|
|
|
}
|
|
}
|
|
|
level.setProportional(proportional(String.valueOf(partnerUser.getGrade()), partnerUser.getUserId()));
|
|
level.setProportional(proportional(String.valueOf(partnerUser.getGrade()), partnerUser.getUserId()));
|
|
|
}
|
|
}
|