This commit is contained in:
tangw 2026-02-28 15:48:44 +08:00
parent 7f91844201
commit 533aada392
4 changed files with 81 additions and 11 deletions

View File

@ -119,6 +119,8 @@ public class CalcUtils {
CalcExpression = CalcExpression.replaceAll("isnull\\s*\\(\\s*(.*?)\\s*\\)", "($1 == null)");
// 1. 替换逻辑运算符:and→&&,or→||
String processed = CalcExpression.replaceAll("\\band|AND\\b", "&&").replaceAll("\\bor|OR\\b", "||");
// ========== 新增:将<>替换为!=(兼容空格) ==========
processed = processed.replaceAll("\\s*<>\\s*", "!=");
// 2. 替换变量格式:[a] → #a
processed = processed.replaceAll("\\[(\\w+)/(\\w+)\\]", "[$1_$2]");
processed = processed.replaceAll("\\[([^]]+)\\]", "#$1");

View File

@ -1,4 +1,8 @@
package com.czlis.liswork.mapper.stats;
import java.util.List;
import java.util.Map;
public interface StatsMapper {
List<Map<String,Object>> getsqldata(String wheresql);
}

View File

@ -7,6 +7,7 @@ import com.czlis.common.utils.StringUtils;
import com.czlis.interfaceCommon.utils.CalcUtils;
import com.czlis.interfaceCommon.utils.LisUtil;
import com.czlis.interfaceCommon.utils.LisWorkUtils;
import com.czlis.liswork.mapper.stats.StatsMapper;
import com.czlis.liswork.mapper.xtwh.ComStatsParameterMapper;
import com.czlis.liswork.mapper.xtwh.ComStatsTemplateMapper;
import com.czlis.liswork.service.StatsService;
@ -25,6 +26,8 @@ public class StatsServiceImpl implements StatsService {
@Autowired
ComStatsTemplateMapper comStatsTemplateMapper;
@Autowired
StatsMapper statsMapper;
@Autowired
LisWorkUtils lisWorkUtils;
@Override
public Result getTemplate(String statsCode){
@ -91,24 +94,83 @@ public class StatsServiceImpl implements StatsService {
if(list==null||list.isEmpty())return new Result("-1","入参为空");
ComStatsTemplate template =LisUtil.mapToEntity(list,"Template",ComStatsTemplate.class);
if(template==null )return new Result("-1","模板为空");
List<ComStatsParameter> column=LisUtil.mapToEntityList(list,"Column",ComStatsParameter.class);
if(column==null )return new Result("-1","字段为空");
List<ComStatsParameter> columnlist=LisUtil.mapToEntityList(list,"Column",ComStatsParameter.class);
if(columnlist==null )return new Result("-1","字段为空");
List<ComStatsParameter> parameterlist=LisUtil.mapToEntityList(list,"Parameter",ComStatsParameter.class);
if(parameterlist==null )return new Result("-1","筛选条件为空");
String statsSql=template.getStatsSql();
if(statsSql==null)return new Result("-1","sql语句为空");
String where="";
for(ComStatsParameter parameter :parameterlist){
String value=parameter.getParamDefvalue();
if(value==null)continue;
if("".equals(value.trim()))continue;
String precondition=parameter.getPrecondition();
Result result=checkprecondition(precondition,parameterlist);
if(!"0".equals(result.getCode()))return result;
boolean flag=(boolean)result.getData();
if(flag){
where=where+" "+parameter.getParamSql();
}
if(precondition!=null&&!"".equals(precondition)) {
Result result = checkprecondition(precondition, parameterlist);
if (!"0".equals(result.getCode())) return result;
boolean flag = (boolean) result.getData();
if (flag) {
where = where + " " + parameter.getParamSql();
}
}else{
where = where + " " + parameter.getParamSql();
}
}
Map<String,Object> map=new HashMap<>();
return new Result("0","成功",statsSql+where);
String columns="";
String column="";
for(ComStatsParameter parameter :columnlist){
Long Sequence = parameter.getParamSequence();
if(Sequence==null||Sequence==0)continue;
String value=parameter.getParamCode();
if(value==null)continue;
if("".equals(value.trim()))continue;
String paramsql=parameter.getParamSql();
if(paramsql!=null&&!"".equals(paramsql)) {
value = paramsql + " as " + value;
}else{
paramsql=value;
}
String type=parameter.getParamType();
String precondition=parameter.getPrecondition();
if(precondition!=null&&!"".equals(precondition)) {
Result result = checkprecondition(precondition, parameterlist);
if (!"0".equals(result.getCode())) return result;
boolean flag = (boolean) result.getData();
if (flag) {
if(!"".equals(columns))columns=columns+",";
columns = columns + value;
if(!"6".equals(type)) {
if(!"".equals(column))column=column+",";
column = column + paramsql;
}
}
}else{
if(!"".equals(columns))columns=columns+",";
columns = columns + value;
if(!"6".equals(type)) {
if(!"".equals(column))column=column+",";
column = column + paramsql;
}
}
}
statsSql=statsSql.replace("[where]",where);
statsSql=statsSql.replace("[columns]",columns);
statsSql=statsSql.replace("[column]",column);
if("".equals(column)||column==null)statsSql=statsSql.replace("group by","");
statsSql=inputParameter(statsSql,parameterlist);
List<Map<String,Object>> datalist=statsMapper.getsqldata(statsSql);
return new Result("0","成功",datalist);
}
private String inputParameter(String sql,List<ComStatsParameter> parameterlist) {
String[] parameters = CalcUtils.getParameters(sql);
for (String itemcode : parameters){
Optional<ComStatsParameter> temp=parameterlist.stream().filter(ss->itemcode.equals(ss.getParamCode())).findAny();
if(temp.isPresent()) {
sql=sql.replace("["+itemcode+"]","'"+temp.get().getParamDefvalue()+"'");
}
}
return sql;
}
private Result checkprecondition(String precondition,List<ComStatsParameter> parameterlist) {
Map<String, String> variables = new HashMap<>();

View File

@ -2,5 +2,7 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.czlis.liswork.mapper.stats.StatsMapper">
<select id="getsqldata" resultType="map">
${wheresql}
</select>
</mapper>