新增通用计算方法

yun-zuoyi
alwaysfrin 6 years ago
parent 6118568fd5
commit 3a86ae3980

@ -252,4 +252,19 @@ public interface BaseRepository <T, ID extends Serializable> 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);
}

@ -1018,4 +1018,100 @@ public class BaseRepositoryImpl<T, ID extends Serializable> 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);
}
}
}

Loading…
Cancel
Save