From 694efaa3234ad7c2beafa3e1b708d5de68e5496a Mon Sep 17 00:00:00 2001 From: Yen Date: Tue, 3 Jun 2025 09:33:37 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=94=E5=88=A9=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/log4j2.xml | 14 +++++------ .../actuator/HttpServletRequestFilter.java | 24 ++++++++++++------- .../modules/tzc/entity/TzcRebateLevels.java | 2 +- .../service/impl/TbsCostApplyServiceImpl.java | 3 ++- .../tzc/controller/TzcRebateController.java | 4 +++- .../TzcRebateApplication4CostServiceImpl.java | 24 ++++++++++++++++--- ...teApplication4VerificationServiceImpl.java | 7 +++++- 7 files changed, 56 insertions(+), 22 deletions(-) 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(); // 获取最高命中的坎级