From 533aada39228802af881e57e2e9839d1d04ee0c3 Mon Sep 17 00:00:00 2001 From: tangw Date: Sat, 28 Feb 2026 15:48:44 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=9F=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../interfaceCommon/utils/CalcUtils.java | 2 + .../liswork/mapper/stats/StatsMapper.java | 4 + .../service/impl/stats/StatsServiceImpl.java | 82 ++++++++++++++++--- .../src/main/resources/mapper/StatsMapper.xml | 4 +- 4 files changed, 81 insertions(+), 11 deletions(-) diff --git a/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/utils/CalcUtils.java b/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/utils/CalcUtils.java index 3db6d36..9aa9258 100644 --- a/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/utils/CalcUtils.java +++ b/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/utils/CalcUtils.java @@ -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"); diff --git a/liswork/src/main/java/com/czlis/liswork/mapper/stats/StatsMapper.java b/liswork/src/main/java/com/czlis/liswork/mapper/stats/StatsMapper.java index f2db45e..66cc159 100644 --- a/liswork/src/main/java/com/czlis/liswork/mapper/stats/StatsMapper.java +++ b/liswork/src/main/java/com/czlis/liswork/mapper/stats/StatsMapper.java @@ -1,4 +1,8 @@ package com.czlis.liswork.mapper.stats; +import java.util.List; +import java.util.Map; + public interface StatsMapper { + List> getsqldata(String wheresql); } diff --git a/liswork/src/main/java/com/czlis/liswork/service/impl/stats/StatsServiceImpl.java b/liswork/src/main/java/com/czlis/liswork/service/impl/stats/StatsServiceImpl.java index 78f466e..23dc4c2 100644 --- a/liswork/src/main/java/com/czlis/liswork/service/impl/stats/StatsServiceImpl.java +++ b/liswork/src/main/java/com/czlis/liswork/service/impl/stats/StatsServiceImpl.java @@ -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 column=LisUtil.mapToEntityList(list,"Column",ComStatsParameter.class); - if(column==null )return new Result("-1","字段为空"); + List columnlist=LisUtil.mapToEntityList(list,"Column",ComStatsParameter.class); + if(columnlist==null )return new Result("-1","字段为空"); List 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 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> datalist=statsMapper.getsqldata(statsSql); + return new Result("0","成功",datalist); + } + private String inputParameter(String sql,List parameterlist) { + String[] parameters = CalcUtils.getParameters(sql); + for (String itemcode : parameters){ + Optional 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 parameterlist) { Map variables = new HashMap<>(); diff --git a/liswork/src/main/resources/mapper/StatsMapper.xml b/liswork/src/main/resources/mapper/StatsMapper.xml index 25bf78e..986f2ae 100644 --- a/liswork/src/main/resources/mapper/StatsMapper.xml +++ b/liswork/src/main/resources/mapper/StatsMapper.xml @@ -2,5 +2,7 @@ - + \ No newline at end of file