diff --git a/cms-api/cms-admin-svc/src/main/resources/log4j2.xml b/cms-api/cms-admin-svc/src/main/resources/log4j2.xml
index 5fe52a8..5fd2d98 100644
--- a/cms-api/cms-admin-svc/src/main/resources/log4j2.xml
+++ b/cms-api/cms-admin-svc/src/main/resources/log4j2.xml
@@ -6,8 +6,8 @@
-
-
+
+
@@ -17,7 +17,7 @@
-
+
@@ -27,7 +27,7 @@
-
+
@@ -37,7 +37,7 @@
-
+
@@ -47,7 +47,7 @@
-
+
@@ -57,7 +57,7 @@
-
+
diff --git a/cms-modules/cms-actuator/src/main/java/com/qs/serve/actuator/HttpServletRequestFilter.java b/cms-modules/cms-actuator/src/main/java/com/qs/serve/actuator/HttpServletRequestFilter.java
index 5505991..9c1b82a 100644
--- a/cms-modules/cms-actuator/src/main/java/com/qs/serve/actuator/HttpServletRequestFilter.java
+++ b/cms-modules/cms-actuator/src/main/java/com/qs/serve/actuator/HttpServletRequestFilter.java
@@ -4,9 +4,12 @@ import com.qs.serve.common.utils.ServletUtils;
import com.qs.serve.common.conf.DevEnvironmentConfig;
import com.qs.serve.framework.base.framework.security.model.LoginUser;
import com.qs.serve.framework.base.util.DateUtils;
+import com.qs.serve.framework.base.util.IdUtil;
import com.qs.serve.framework.redis.RedisService;
import com.qs.serve.modules.sys.common.AuthContextUtils;
import lombok.extern.slf4j.Slf4j;
+import org.jboss.logging.MDC;
+import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
@@ -35,7 +38,7 @@ import java.time.format.DateTimeFormatter;
@Slf4j
@Component
@WebFilter(filterName = "HttpServletRequestFilter", urlPatterns = "/")
-@Order(10000)
+@Order(Ordered.HIGHEST_PRECEDENCE)
public class HttpServletRequestFilter implements Filter{
@Resource
@@ -57,11 +60,16 @@ public class HttpServletRequestFilter implements Filter{
}
}
long startTime = System.currentTimeMillis();
+
+ String traceId = (IdUtil.getSnowFlakeId()+"").substring(3,18);
+ traceId = "[T"+traceId+"]";
+ MDC.put("traceId", traceId);
if(null == requestWrapper) {
filterChain.doFilter(servletRequest, servletResponse);
} else {
filterChain.doFilter(requestWrapper, servletResponse);
}
+ MDC.remove("traceId");
long endTime = System.currentTimeMillis();
double diffTime = DateUtils.diffTime(startTime,endTime);
assert servletRequest instanceof HttpServletRequest;
@@ -74,23 +82,23 @@ public class HttpServletRequestFilter implements Filter{
if (ServletUtils.isJsonRequest(request)&&requestWrapper!=null) {
reqBody = requestWrapper.getBody();
}
- StringBuffer buffer = new StringBuffer("\n["+method+"] "+url);
+ StringBuffer buffer = new StringBuffer("\n"+traceId+" ["+method+"] "+url);
+ if(diffTime>3D){
+ buffer.append(" 长耗时: "+diffTime+"秒");
+ }
if(supplierId!=null){
buffer.append(" 供应商ID: "+supplierId);
}
if(!StringUtils.isEmpty(queryStr)){
- buffer.append("\n参数: "+queryStr);
+ buffer.append("\n"+traceId+"参数: "+queryStr);
}
if(DevEnvironmentConfig.isDev() &&!StringUtils.isEmpty(reqBody)){
- buffer.append("\n请求体: "+reqBody);
- }
- if(diffTime>0.6D){
- buffer.append("\n耗时: "+diffTime+"秒");
+ buffer.append("\n"+traceId+" 请求体: "+reqBody);
}
try {
LoginUser loginUser = AuthContextUtils.getLoginUser(false);
if(loginUser!=null){
- buffer.append("\n用户: "+loginUser.getNick());
+ buffer.append("\n"+traceId+" 用户: "+loginUser.getNick());
buffer.append(" IP:["+ServletUtils.getIp(request)+"]");
buffer.append(" 时间:["+ LocalDateTime.now().format(DateTimeFormatter.ISO_LOCAL_DATE_TIME)+"]");
}
diff --git a/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/TzcRebateLevels.java b/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/TzcRebateLevels.java
index 62a6b3b..8a41c0a 100644
--- a/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/TzcRebateLevels.java
+++ b/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/TzcRebateLevels.java
@@ -35,7 +35,7 @@ public class TzcRebateLevels implements Serializable {
@NotNull(message = "返利id不能为空")
private Long rebateId;
- /** 是否含同期数据 */
+ /** 是否含同期数据:0-无;1-有同期老客户对比同期正增长;2-无同期老客户或新客户 */
private Integer samePeriodFlag;
/** 坎级数字 */
diff --git a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyServiceImpl.java b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyServiceImpl.java
index e9062fb..d1bf53a 100644
--- a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyServiceImpl.java
+++ b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyServiceImpl.java
@@ -662,7 +662,8 @@ public class TbsCostApplyServiceImpl extends ServiceImpl result = new ArrayList<>();
for (TzcGetActivityRebateQuery query : queryList) {
TzcRebateCalculateDTO dto = tzcRebateApplication4VerificationService.getActivityRebateAmount(query.getActivityId(),query.getDispatchAmount());
- result.add(dto);
+ if (dto != null){
+ result.add(dto);
+ }
}
return R.ok(result);
}
diff --git a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcRebateApplication4CostServiceImpl.java b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcRebateApplication4CostServiceImpl.java
index 356a129..ed0a260 100644
--- a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcRebateApplication4CostServiceImpl.java
+++ b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcRebateApplication4CostServiceImpl.java
@@ -116,6 +116,7 @@ public class TzcRebateApplication4CostServiceImpl implements TzcRebateApplicatio
costApply.setRebateId(rebateId);
costApply.setCode(rebate.getRebateCode());
costApply.setTemplateId(rebate.getTemplateId());
+ costApply.setTemplateTitle(rebate.getTemplateName());
// 标记为返利类型
costApply.setContractFlag(3);
costApply.setMatchType(1);
@@ -138,7 +139,9 @@ public class TzcRebateApplication4CostServiceImpl implements TzcRebateApplicatio
.filter(a-> StringUtils.isNotEmpty(a.getExampleRemark()))
.map(TzcRebateLevels::getExampleRemark)
.collect(Collectors.joining(";"));
- levelRemark = levelRemark.substring(0,590) + "...";
+ if (levelRemark.length()>590){
+ levelRemark = levelRemark.substring(0,590) + "...";
+ }
Map> centerMap = centerList.stream()
.collect(Collectors.groupingBy(TzcRebateCenter::getRebateSubjectId));
@@ -462,13 +465,13 @@ public class TzcRebateApplication4CostServiceImpl implements TzcRebateApplicatio
dto.appendErrorMsg(samePeriodFlag==2?"未找到匹配无同期的坎级":"未找到匹配有同期的坎级");
}
dto.setSamePeriodLevelList(levelsList);
+ log.debug("同期金额:{} 目标金额:{} 发货金额:{}",sameDispatchAmt,tarPeriodAmount,dispatchAmt);
// 命中的最高坎级
for (TzcRebateLevels levels : levelsList) {
// 条件选择:0-百分比;1-固定金额
if (levels.getConditionSelect().equals(0)){
- // 条件类型:0-同期进货金额;1-区间目标金额
BigDecimal periodAmount = null;
- String msg = "";
+ String msg = null;
if (levels.getConditionType().equals(0)){
periodAmount = sameDispatchAmt;
msg = ";同期金额:"+periodAmount;
@@ -481,9 +484,24 @@ public class TzcRebateApplication4CostServiceImpl implements TzcRebateApplicatio
.divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP);
BigDecimal targetAmtEnd = periodAmount.multiply(levels.getConditionRateEnd())
.divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP);
+ // 正增长,添加同期发货金额
+ if (levels.getSamePeriodFlag().equals(1)){
+ targetAmt = targetAmt.add(sameDispatchAmt);
+ targetAmtEnd = targetAmtEnd.add(sameDispatchAmt);
+ }
// 发货金额大于坎级制定的百分比
boolean ok1 = dispatchAmt.compareTo(targetAmt)>=0; // 包含
boolean ok2 = dispatchAmt.compareTo(targetAmtEnd)<0; // 不包含
+
+ log.debug("坎级:"+levels.getLevelNum()+",门槛金额:"+targetAmt+"-"+targetAmtEnd + msg+",发货金额:"+dispatchAmt);
+ // 当比例一致时,特殊返回
+ boolean sameRate = levels.getConditionRate().equals(levels.getConditionRateEnd())&&ok1;
+ if (sameRate){
+ dto.appendDebugMsg("命中坎级:"+levels.getLevelNum()+",门槛金额:"+targetAmt+"-"+targetAmtEnd + msg+",发货金额:"+dispatchAmt);
+ dto.setMaxLevels(levels);
+ return dto;
+ }
+
if (!ok1 || !ok2){
dto.appendDebugMsg("跳过坎级:"+levels.getLevelNum()+",门槛金额:"+targetAmt+"-"+targetAmtEnd + msg+",发货金额:"+dispatchAmt);
continue;
diff --git a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcRebateApplication4VerificationServiceImpl.java b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcRebateApplication4VerificationServiceImpl.java
index 987b1b3..85e6084 100644
--- a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcRebateApplication4VerificationServiceImpl.java
+++ b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcRebateApplication4VerificationServiceImpl.java
@@ -114,7 +114,9 @@ public class TzcRebateApplication4VerificationServiceImpl implements TzcRebateAp
}
}
if (activity == null){
- Assert.throwEx("缺少有效的活动id");
+ // 前端一个活动请求一次,跳过抛异常
+ //Assert.throwEx("缺少有效的活动id");
+ continue;
}
BigDecimal dispatchAmt = null;
// 实际发货金额,方式一(前端传参)
@@ -256,6 +258,9 @@ public class TzcRebateApplication4VerificationServiceImpl implements TzcRebateAp
@Override
public TzcRebateCalculateDTO getActivityRebateAmount(Long activityId, BigDecimal dispatchAmt) {
TbsActivity activity = tbsActivityMapper.selectById(activityId);
+ if (activity.getRebatePeriodId()==null||activity.getRebatePeriodId().equals(0L)){
+ return null;
+ }
TzcRebatePeriod rebatePeriod = tzcRebatePeriodService.getById(activity.getRebatePeriodId());
BigDecimal sameDispatchAmt = rebatePeriod.getSamePeriodAmount();
// 获取最高命中的坎级