public Map<String, List<List<String>>> getWaterLevelReport(
WaterLevelMeter waterLevelMeter, String dateType, String date) {
// TODO Auto-generated method stub
Map<String, List<List<String>>> map = new LinkedHashMap<String, List<List<String>>>();
try {
HibernateUtil.beginTransaction();
@SuppressWarnings("unused")
String dateTypeOne = dateType;// 獲得時間類型
String sql = "select ";
if (StringUtil.isNotEmpty(dateType)) {
if (dateType.equals("yyyy-MM-dd")) {
dateTypeOne = "HH24:Mi";
// 具體數據
sql += "to_char(f.f_caijishijian,'HH24:Mi')"
+ ",avg(f.f_shuiwei),avg(f.f_dianya),avg(f.f_wendu),count(*) "
+ "from T_SHUIWEI_TEMP f "
+ "where f.f_zhandianbianhao = :code "
+ "and to_char(f.f_caijishijian,:dateType) = :term "
+ "group by to_char(f.f_caijishijian,'HH24:Mi') "
+ "order by to_char(f.f_caijishijian,'HH24:Mi')";
}
else if(dateType.equals("yyyy-MM")){
dateTypeOne = "yyyy-MM-dd";
//不是group by 參數
// sql += "to_char(f.f_caijishijian,:dateTypeOne)"
// + ",avg(f.f_shuiwei),avg(f.f_dianya),avg(f.f_wendu),count(*) "
// + "from T_SHUIWEI_TEMP f "
// + "where f.f_zhandianbianhao = :code "
// + "and to_char(f.f_caijishijian,:dateType) = :term "
// + "group by to_char(f.f_caijishijian,:dateTypeOne) "
// + "order by to_char(f.f_caijishijian,:dateTypeOne)";
sql += "to_char(f.f_caijishijian,'yyyy-MM-dd')"
+ ",avg(f.f_shuiwei),avg(f.f_dianya),avg(f.f_wendu),count(*) "
+ "from T_SHUIWEI_TEMP f "
+ "where f.f_zhandianbianhao = :code "
+ "and to_char(f.f_caijishijian,:dateType) = :term "
+ "group by to_char(f.f_caijishijian,'yyyy-MM-dd') "
+ "order by to_char(f.f_caijishijian,'yyyy-MM-dd')";
}else{
dateTypeOne = "yyyy-MM";
sql += "to_char(f.f_caijishijian,'yyyy-MM')"
+ ",avg(f.f_shuiwei),avg(f.f_dianya),avg(f.f_wendu),count(*) "
+ "from T_SHUIWEI_TEMP f "
+ "where f.f_zhandianbianhao = :code "
+ "and to_char(f.f_caijishijian,:dateType) = :term "
+ "group by to_char(f.f_caijishijian,'yyyy-MM') "
+ "order by to_char(f.f_caijishijian,'yyyy-MM')";
}
}
SQLQuery sqlQuery = HibernateUtil.getSession().createSQLQuery(sql);
if (StringUtil.isNotEmpty(date))
sqlQuery.setString("term", date);
if (StringUtil.isNotEmpty(dateType))
sqlQuery.setString("dateType", dateType);
// if (StringUtil.isNotEmpty(dateTypeOne))
// sqlQuery.setString("dateTypeOne", dateTypeOne);
@SuppressWarnings("unchecked")
List<Object[]> list = (List<Object[]>) sqlQuery.list();
List<List<String>> stringList = new ArrayList<List<String>>();
float avgSw = 0;
float maxSw = 0;
float minSw = 1000;
String maxSwDate = "";
String minSwDate = "";
float avgDy = 0;
float maxDy = 0;
float minDy = 1000;
String maxDyDate = "";
String minDyDate = "";
float avgWd = 0;
float maxWd = 0;
float minWd = 1000;
String maxWdDate = "";
String minWdDate = "";
int countAll = 0;
int waringAll = 0;
DecimalFormat numFmt = new DecimalFormat("0.00");
for (int i = 0; i < list.size(); i++) {
Object[] object = list.get(i);
//水位平均 最大 最小
countAll += Integer.parseInt(list.get(i)[4].toString());
avgSw += Float.valueOf(numFmt.format(list.get(i)[1]));
if(maxSw < Float.valueOf(numFmt.format(list.get(i)[1]))){
maxSw = Float.valueOf(numFmt.format(list.get(i)[1]));
maxSwDate = list.get(i)[0].toString();
}
if(minSw > Float.valueOf(numFmt.format(list.get(i)[1]))){
minSw = Float.valueOf(numFmt.format(list.get(i)[1]));
minSwDate = list.get(i)[0].toString();
}
avgDy += Float.valueOf(numFmt.format(list.get(i)[2]));
if(maxDy < Float.valueOf(numFmt.format(list.get(i)[2]))){
maxDy = Float.valueOf(numFmt.format(list.get(i)[2]));
maxDyDate = list.get(i)[0].toString();
}
if(minDy >Float.valueOf(numFmt.format(list.get(i)[2]))){
minDy = Float.valueOf(numFmt.format(list.get(i)[2]));
minDyDate = list.get(i)[0].toString();
}
avgWd += Float.valueOf(list.get(i)[3].toString());
if(maxWd < Float.valueOf(numFmt.format(list.get(i)[3]))){
maxWd = Float.valueOf(numFmt.format(list.get(i)[3]));
maxWdDate = list.get(i)[0].toString();
}
if(minWd > Float.valueOf(numFmt.format(list.get(i)[3]))){
minWd = Float.valueOf(numFmt.format(list.get(i)[3]));
minWdDate = list.get(i)[0].toString();
}
List<String> listdate = new ArrayList<String>();
for (int j = 0; j < object.length; j++) {
if(j == 1||j==2||j==3){
listdate.add(numFmt.format(object[j]).toString());
}else{
listdate.add(object[j].toString());
}
}
listdate.add("0");
stringList.add(listdate);
}
avgSw = avgSw/list.size();
avgDy = avgDy/list.size();
avgWd = avgWd/list.size();
List<List<String>> listAvgA = new ArrayList<List<String>>();
List<String> listAvg = new ArrayList<String>();
listAvg.add(numFmt.format(avgSw));
listAvg.add(numFmt.format(avgDy));
listAvg.add(numFmt.format(avgWd));
listAvg.add(String.valueOf(countAll));
listAvg.add(String.valueOf(waringAll));
listAvgA.add(listAvg);
List<List<String>> listMaxA = new ArrayList<List<String>>();
List<String> listMax = new ArrayList<String>();
listMax.add(String.valueOf(maxSw));
listMax.add(String.valueOf(maxDy));
listMax.add(String.valueOf(maxWd));
listMax.add("");
listMax.add("");
listMaxA.add(listMax);
List<List<String>> listMaxDateA = new ArrayList<List<String>>();
List<String> listMaxDate = new ArrayList<String>();
listMaxDate.add(maxSwDate);
listMaxDate.add(maxDyDate);
listMaxDate.add(maxWdDate);
listMaxDate.add("");
listMaxDate.add("");
listMaxDateA.add(listMaxDate);
List<List<String>> listMinA = new ArrayList<List<String>>();
List<String> listMin = new ArrayList<String>();
listMin.add(String.valueOf(minSw));
listMin.add(String.valueOf(minDy));
listMin.add(String.valueOf(minWd));
listMin.add("");
listMin.add("");
listMinA.add(listMin);
List<List<String>> listMinDateA = new ArrayList<List<String>>();
List<String> listMinDate = new ArrayList<String>();
listMinDate.add(minSwDate);
listMinDate.add(minDyDate);
listMinDate.add(minWdDate);
listMinDate.add("");
listMinDate.add("");
listMinDateA.add(listMinDate);
map.put("list", stringList);
map.put("平均值/累計值",listAvgA);
map.put("最大值",listMaxA);
map.put("最大值時間",listMaxDateA);
map.put("最小值",listMinA);
map.put("最小值時間",listMinDateA);
HibernateUtil.commitTransaction();
return map;
} catch (Exception e) {
HibernateUtil.rollbackTransaction();
return null;
}
}