diff --git a/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/jpa/dao/BaseRepository.java b/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/jpa/dao/BaseRepository.java index a3b1b31..728affc 100644 --- a/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/jpa/dao/BaseRepository.java +++ b/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/jpa/dao/BaseRepository.java @@ -252,4 +252,19 @@ public interface BaseRepository extends JpaReposito public boolean isExitBySql(String sql); + public double countSumByProperty(String sumPropertyName,String groupByName,String propertyName, Object value); + + public double countSumByProperties(String sumPropertyName,String groupByName,String[] paramName,Object[] paramValue); + + public double countAvgByProperty(String sumPropertyName,String groupByName,String propertyName, Object value); + + public double countAvgByProperties(String sumPropertyName,String groupByName,String[] paramName,Object[] paramValue); + + public double findMaxByProperty(String sumPropertyName,String groupByName,String propertyName, Object value); + + public double findMaxByProperties(String sumPropertyName,String groupByName,String[] paramName,Object[] paramValue); + + public double findMinByProperty(String sumPropertyName,String groupByName,String propertyName, Object value); + + public double findMinByProperties(String sumPropertyName,String groupByName,String[] paramName,Object[] paramValue); } diff --git a/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/jpa/daoimpl/BaseRepositoryImpl.java b/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/jpa/daoimpl/BaseRepositoryImpl.java index c6ae550..07acd52 100644 --- a/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/jpa/daoimpl/BaseRepositoryImpl.java +++ b/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/jpa/daoimpl/BaseRepositoryImpl.java @@ -1018,4 +1018,100 @@ public class BaseRepositoryImpl extends SimpleJpaRep public boolean isExitBySql(String sql) { return findBySqlCount(sql) > 0; } + + @Override + public double countSumByProperty(String sumPropertyName, String groupByName, String propertyName, Object value) { + return countSumByProperties(sumPropertyName,groupByName,new String[]{propertyName},new Object[]{value}); + } + + @Override + public double countSumByProperties(String sumPropertyName, String groupByName, String[] paramName, Object[] paramValue) { + if ((paramName != null) && (paramName.length > 0) && (paramValue != null) && (paramValue.length > 0)) { + StringBuffer sb = new StringBuffer("select sum(:"+sumPropertyName+") from " + persistentClass.getName() + " model where 1=1 "); + appendQL(sb,paramName,paramValue); + sb.append(" group by :groupByName"); + + Query query = entityManager.createQuery(sb.toString()); + query.setParameter(":sumPropertyName", sumPropertyName); + setParameter(query,paramName,paramValue); + query.setParameter(":groupByName", groupByName); + + Double sumResult = entityManager.createQuery(query.toString(),Double.class).getSingleResult(); + return sumResult == null ? 0.0 : sumResult.doubleValue(); + }else{ + throw new IllegalArgumentException("sum查询错误!paramName:" + paramName + ",paramValue:" + paramValue); + } + } + + @Override + public double countAvgByProperty(String sumPropertyName, String groupByName, String propertyName, Object value) { + return countAvgByProperties(sumPropertyName,groupByName,new String[]{propertyName},new Object[]{value}); + } + + @Override + public double countAvgByProperties(String sumPropertyName, String groupByName, String[] paramName, Object[] paramValue) { + if ((paramName != null) && (paramName.length > 0) && (paramValue != null) && (paramValue.length > 0)) { + StringBuffer sb = new StringBuffer("select avg(:"+sumPropertyName+") from " + persistentClass.getName() + " model where 1=1 "); + appendQL(sb,paramName,paramValue); + sb.append(" group by :groupByName"); + + Query query = entityManager.createQuery(sb.toString()); + query.setParameter(":sumPropertyName", sumPropertyName); + setParameter(query,paramName,paramValue); + query.setParameter(":groupByName", groupByName); + + Double sumResult = entityManager.createQuery(query.toString(),Double.class).getSingleResult(); + return sumResult == null ? 0.0 : sumResult.doubleValue(); + }else{ + throw new IllegalArgumentException("sum查询错误!paramName:" + paramName + ",paramValue:" + paramValue); + } + } + + @Override + public double findMaxByProperty(String sumPropertyName, String groupByName, String propertyName, Object value) { + return findMaxByProperties(sumPropertyName,groupByName,new String[]{propertyName},new Object[]{value}); + } + + @Override + public double findMaxByProperties(String sumPropertyName, String groupByName, String[] paramName, Object[] paramValue) { + if ((paramName != null) && (paramName.length > 0) && (paramValue != null) && (paramValue.length > 0)) { + StringBuffer sb = new StringBuffer("select max(:"+sumPropertyName+") from " + persistentClass.getName() + " model where 1=1 "); + appendQL(sb,paramName,paramValue); + sb.append(" group by :groupByName"); + + Query query = entityManager.createQuery(sb.toString()); + query.setParameter(":sumPropertyName", sumPropertyName); + setParameter(query,paramName,paramValue); + query.setParameter(":groupByName", groupByName); + + Double sumResult = entityManager.createQuery(query.toString(),Double.class).getSingleResult(); + return sumResult == null ? 0.0 : sumResult.doubleValue(); + }else{ + throw new IllegalArgumentException("sum查询错误!paramName:" + paramName + ",paramValue:" + paramValue); + } + } + + @Override + public double findMinByProperty(String sumPropertyName, String groupByName, String propertyName, Object value) { + return findMinByProperties(sumPropertyName,groupByName,new String[]{propertyName},new Object[]{value}); + } + + @Override + public double findMinByProperties(String sumPropertyName, String groupByName, String[] paramName, Object[] paramValue) { + if ((paramName != null) && (paramName.length > 0) && (paramValue != null) && (paramValue.length > 0)) { + StringBuffer sb = new StringBuffer("select min(:"+sumPropertyName+") from " + persistentClass.getName() + " model where 1=1 "); + appendQL(sb,paramName,paramValue); + sb.append(" group by :groupByName"); + + Query query = entityManager.createQuery(sb.toString()); + query.setParameter(":sumPropertyName", sumPropertyName); + setParameter(query,paramName,paramValue); + query.setParameter(":groupByName", groupByName); + + Double sumResult = entityManager.createQuery(query.toString(),Double.class).getSingleResult(); + return sumResult == null ? 0.0 : sumResult.doubleValue(); + }else{ + throw new IllegalArgumentException("sum查询错误!paramName:" + paramName + ",paramValue:" + paramValue); + } + } }