Browse Source

返利调整

master
Yen 2 months ago
parent
commit
694efaa323
  1. 14
      cms-api/cms-admin-svc/src/main/resources/log4j2.xml
  2. 24
      cms-modules/cms-actuator/src/main/java/com/qs/serve/actuator/HttpServletRequestFilter.java
  3. 2
      cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/TzcRebateLevels.java
  4. 3
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyServiceImpl.java
  5. 4
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/controller/TzcRebateController.java
  6. 24
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcRebateApplication4CostServiceImpl.java
  7. 7
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcRebateApplication4VerificationServiceImpl.java

14
cms-api/cms-admin-svc/src/main/resources/log4j2.xml

@ -6,8 +6,8 @@
<!--变量配置-->
<Properties>
<property name="LOG_PATTERN" value="%d %highlight{%-5level}{ERROR=Bright RED, WARN=Bright Yellow, INFO=Bright Green, DEBUG=Bright Cyan, TRACE=Bright White} %style{[%t]}{bright,magenta} %style{%c{1.}.%M(%L)}{cyan}: %msg%n" />
<property name="FILE_PATH" value="admin-logs" />
<property name="LOG_PATTERN" value="%d %highlight{%-5level} %X{traceId} %style{%c{1.}.%M(%L)}{cyan}: %msg%n" />
<property name="FILE_PATH" value="logs" />
</Properties>
<appenders>
@ -17,7 +17,7 @@
<ThresholdFilter level="all" onMatch="ACCEPT" onMismatch="DENY"/>
</console>
<File name="FileLog" fileName="${FILE_PATH}/test.log" append="false" filePattern="${FILE_PATH}/test-%d{yyyy-MM-dd}_%i.log.gz">
<File name="FileLog" fileName="${FILE_PATH}/test.log" append="false" filePattern="${FILE_PATH}/%d{yyyy-MM-dd}/test_%i.log.gz">
<PatternLayout pattern="${LOG_PATTERN}"/>
<Policies>
<TimeBasedTriggeringPolicy interval="1"/>
@ -27,7 +27,7 @@
</File>
<!-- debug -->
<RollingFile name="RollingFileDebug" fileName="${FILE_PATH}/debug.log" filePattern="${FILE_PATH}/debug-%d{yyyy-MM-dd}_%i.log.gz">
<RollingFile name="RollingFileDebug" fileName="${FILE_PATH}/debug.log" filePattern="${FILE_PATH}/%d{yyyy-MM-dd}/debug_%i.log.gz">
<ThresholdFilter level="all" onMatch="ACCEPT" onMismatch="DENY"/>
<Policies>
<TimeBasedTriggeringPolicy interval="1"/>
@ -37,7 +37,7 @@
</RollingFile>
<!-- info -->
<RollingFile name="RollingFileInfo" fileName="${FILE_PATH}/info.log" filePattern="${FILE_PATH}/info-%d{yyyy-MM-dd}_%i.log.gz">
<RollingFile name="RollingFileInfo" fileName="${FILE_PATH}/info.log" filePattern="${FILE_PATH}/%d{yyyy-MM-dd}/info_%i.log.gz">
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="${LOG_PATTERN}"/>
<Policies>
@ -47,7 +47,7 @@
<DefaultRolloverStrategy max="15"/>
</RollingFile>
<!-- warn -->
<RollingFile name="RollingFileWarn" fileName="${FILE_PATH}/warn.log" filePattern="${FILE_PATH}/warn-%d{yyyy-MM-dd}_%i.log.gz">
<RollingFile name="RollingFileWarn" fileName="${FILE_PATH}/warn.log" filePattern="${FILE_PATH}/%d{yyyy-MM-dd}/warn_%i.log.gz">
<ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="${LOG_PATTERN}"/>
<Policies>
@ -57,7 +57,7 @@
<DefaultRolloverStrategy max="15"/>
</RollingFile>
<!-- error -->
<RollingFile name="RollingFileError" fileName="${FILE_PATH}/error.log" filePattern="${FILE_PATH}/error-%d{yyyy-MM-dd}_%i.log.gz">
<RollingFile name="RollingFileError" fileName="${FILE_PATH}/error.log" filePattern="${FILE_PATH}/%d{yyyy-MM-dd}/error_%i.log.gz">
<ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="${LOG_PATTERN}"/>
<Policies>

24
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)+"]");
}

2
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;
/** 坎级数字 */

3
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<TbsCostApplyMapper,TbsC
if(tbsCostApply.getTemplateId()!=null){
TbsActivityTemplate activityTemplate = tbsActivityTemplateService.getById(tbsCostApply.getTemplateId());
if(tbsCostApply.getChangeSourceId()==null&&activityTemplate.getTemplateState().equals(0)
&&!tbsCostApply.getChargeState().equals(TbsCostApplyState.State_4_refused.getCode())){
&&!tbsCostApply.getChargeState().equals(TbsCostApplyState.State_4_refused.getCode())
&&!tbsCostApply.getChargeState().equals(TbsCostApplyState.State_7_changed.getCode())){
Assert.throwEx("当前模板已停用");
}
}

4
cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/controller/TzcRebateController.java

@ -56,7 +56,9 @@ public class TzcRebateController {
List<TzcRebateCalculateDTO> 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);
}

24
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<Long,List<TzcRebateCenter>> 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;

7
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();
// 获取最高命中的坎级

Loading…
Cancel
Save