From a98b1db4392c357304036e8b3cdd01646920300d Mon Sep 17 00:00:00 2001
From: tangzy <tangzy123456>
Date: Thu, 21 Jul 2022 15:41:23 +0800
Subject: [PATCH] 1.山洪
---
src/main/java/org/springblade/modules/river/controller/RiverRController.java | 1098 +++++++++++++++++++++++++++++++++++++++------------------
1 files changed, 750 insertions(+), 348 deletions(-)
diff --git a/src/main/java/org/springblade/modules/river/controller/RiverRController.java b/src/main/java/org/springblade/modules/river/controller/RiverRController.java
index 0244a49..dc064fe 100644
--- a/src/main/java/org/springblade/modules/river/controller/RiverRController.java
+++ b/src/main/java/org/springblade/modules/river/controller/RiverRController.java
@@ -19,7 +19,6 @@
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
-import liquibase.pro.packaged.S;
import lombok.AllArgsConstructor;
import org.springblade.core.boot.ctrl.BladeController;
import org.springblade.core.log.annotation.ApiLog;
@@ -32,15 +31,12 @@
import org.springblade.modules.river.wrapper.RiverRWrapper;
import org.springframework.web.bind.annotation.*;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
-import java.util.stream.Collectors;
/**
@@ -114,6 +110,669 @@
return R.status(riverRService.saveOrUpdate(riverR));
}
+// /**
+// * 河道自定义时间查询
+// *
+// * @param beginTime
+// * @param endTime
+// * @return
+// * @throws ParseException
+// */
+// @PostMapping("/selecthd")
+// public R selecthd(String beginTime, String endTime) throws ParseException {
+// String substring = beginTime.substring(0, 10);
+// String substrings = endTime.substring(0, 10);
+// String hs = beginTime.substring(11, 13);
+// String hss = endTime.substring(11, 13);
+// //截取月日
+// String[] strs = substring.split("-");
+// //月
+// String year = strs[1].toString();
+// //日
+// String day = strs[2].toString();
+// //截取月日
+// String[] strss = substrings.split("-");
+// //月
+// String years = strss[1].toString();
+// //日
+// String days = strss[2].toString();
+// //定义短信内容头
+// String text = year + "月" + day + "日" + hs + "时" + "-" + years + "月" + days + "日" + hss + "时";
+// String texta = "";
+// //定义统计数量
+// int number = 0;
+// //河道超警信息
+// List<Map<String, Object>> selecthd = riverRService.selecthd(beginTime, endTime);
+// //Map<String, Object> sel = riverRService.sel();
+// //selecthd.add(sel);
+// //基本站信息
+// List<Map<String, Object>> list1 = riverRService.selectP();
+// //用来判断是否重复统计超警信息
+// Map mnum = new HashMap();
+// Map mnums = new HashMap();
+// //定义list保存预警信息
+// List ylist = new ArrayList();
+// //定义list保存未预警信息
+// List alist = new ArrayList();
+// //查询数据为空
+// if (selecthd.size() == 0) {
+// text += "暂无河道超警信息。廖家湾水位暂无数据,流量暂无数据;娄家村水位暂无数据,流量暂无数据;";
+// }
+// //不为空遍历数据计算是否超出预警值
+// else {
+// int c = 0;
+// for (int i = 0; i < selecthd.size(); i++) {
+// //实时河道水位值
+// BigDecimal z = (BigDecimal) selecthd.get(i).get("Z");
+// double Z = z.doubleValue();
+// //超警戒水位值
+// if (mnum.containsKey(selecthd.get(i).get("STCD").toString()) == true) {
+// } else {
+// if (selecthd.get(i).get("WRZ") == null || selecthd.get(i).get("Q") == null) {
+// String stnm = selecthd.get(i).get("STNM").toString();
+// mnum.put(selecthd.get(i).get("STCD").toString(), i);
+// if (stnm.equals("廖家湾") || stnm.equals("娄家村")) {
+// DecimalFormat df = new DecimalFormat("#0.00");
+// texta += stnm.replaceAll(" ", "") + "水位" + df.format(Z) + "米,";
+// if (selecthd.get(i).get("Q") == null) {
+// texta += "流量暂无数据";
+// }
+// }
+// alist.add(selecthd.get(i));
+// continue;
+// }
+// BigDecimal wrz = (BigDecimal) selecthd.get(i).get("WRZ");
+// double WRZ = wrz.doubleValue();
+// BigDecimal q = (BigDecimal) selecthd.get(i).get("Q");
+// double Q = q.doubleValue();
+// if (Z <= WRZ) {
+// if (mnum.containsKey(selecthd.get(i).get("STCD").toString()) == true) {
+// } else {
+// String stnm = selecthd.get(i).get("STNM").toString();
+// mnum.put(selecthd.get(i).get("STCD").toString(), i);
+// if (stnm.equals("廖家湾") || stnm.equals("娄家村")) {
+// DecimalFormat df = new DecimalFormat("#0.00");
+// texta += stnm.replaceAll(" ", "") + "水位" + df.format(Z) + "米,";
+// if (selecthd.get(i).get("Q") == null) {
+// texta += "流量暂无数据";
+// } else {
+// DecimalFormat dfs = new DecimalFormat("#0.000");
+// texta += "流量" + Q + "立方米每秒;";
+// }
+// }
+// }
+// alist.add(selecthd.get(i));
+// } else {
+// //如果map集合保存了站点则不重复统计数量
+// if (mnum.containsKey(selecthd.get(i).get("STCD").toString()) == true) {
+// } else {
+// ylist.add(selecthd.get(i));
+// mnum.put(selecthd.get(i).get("STCD").toString(), i);
+// number++;
+// //超出警戒水位多少
+// Double num = Z - WRZ;
+// double v3 = (double) Math.round(num * 100) / 100;
+// //县,市
+// String addvcd5 = selecthd.get(i).get("ADDVNM").toString();
+// //站点名称
+// String stnm = selecthd.get(i).get("STNM").toString();
+// if (stnm.equals("廖家湾") || stnm.equals("娄家村")) {
+// DecimalFormat df = new DecimalFormat("#0.00");
+// texta += stnm.replaceAll(" ", "") + "站超出警戒水位" + df.format(v3) + "米," + "水位" + df.format(Z) + "米,";
+// if (selecthd.get(i).get("Q") == null) {
+// texta += "流量暂无数据;";
+// } else {
+// //DecimalFormat dfs = new DecimalFormat("#0.000");
+// texta += "流量" + Q + "立方米每秒;";
+// }
+// }
+// }
+// }
+// }
+// }
+// }
+//// //河道涨幅,跌幅信息
+// //List<Map<String, Object>> selecthds = riverRService.selecthds(beginTime, endTime);
+// Map m1 = new HashMap();
+// Map m2 = new HashMap();
+// Map c = new HashMap();
+// Map m = new HashMap();
+// List list = new ArrayList();
+//// for (int j = 0; j < selecthds.size(); j++) {
+//// //站点编码
+//// String stcd = selecthds.get(j).get("STCD").toString();
+//// //站点名称
+//// String stnm = selecthds.get(j).get("STNM").toString();
+//// //省,市
+//// String addvcd5 = selecthds.get(j).get("ADDVNM").toString();
+//// //最大值
+//// BigDecimal maxZ = (BigDecimal) selecthds.get(j).get("maxZ");
+//// //最大值出现时间
+//// String maxTM = selecthds.get(j).get("maxTM").toString();
+//// //最小值
+//// BigDecimal minZ = (BigDecimal) selecthds.get(j).get("minZ");
+//// //最小值出现时间
+//// String minTM = selecthds.get(j).get("minTM").toString();
+//// SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+//// Date sd1 = df.parse(maxTM);
+//// Date sd2 = df.parse(minTM);
+//// double v = maxZ.doubleValue();
+//// double v1 = minZ.doubleValue();
+//// //涨幅值
+//// double v2 = v - v1;
+//// double v3 = (double) Math.round(v2 * 100) / 100;
+//// m1.put(v3, stnm.replaceAll(" ", "") + "站");
+//// c.put(stcd, v3);
+//// }
+// if (number == 0) {
+// text += "暂无河道超警戒信息。" + texta;
+// } else {
+// text += "有" + number + "个河道站超警戒。" + texta;
+// }
+//// if (m1.size() != 0) {
+//// Object maxKey = getMaxKey(m1);
+//// String s1 = m1.get(maxKey).toString();
+//// text += " 涨幅最大的是:" + s1 + "(涨" + maxKey + "米)。";
+//// }
+// m.put("text", text);
+// m.put("number", number);
+// m.put("Yjlist", ylist);
+// m.put("list", alist);
+// m.put("list1", list1);
+// m.put("clist", c);
+// list.add(m);
+// return R.data(list);
+//
+// }
+
+
+ /**
+ * 河道最新
+ *
+ * @return
+ * @throws ParseException
+ */
+ @PostMapping("/selecthdt")
+ public R selecthdt() throws ParseException {
+ int w = 1;
+ SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ String time = df.format(new Date());
+ String yearc = time.substring(0, 4);
+ int years = Integer.parseInt(yearc);
+ String monthc = time.substring(5, 7);
+ int months = Integer.parseInt(monthc);
+ String dayc = time.substring(8, 10);
+ int days = Integer.parseInt(dayc);
+ int da = days - w;
+ String hss = time.substring(11, 13);
+ int hs = Integer.parseInt(hss);
+ //前一天的8时
+ //String timec = years + "-" + months + "-" + da + " 08:00:00";
+ SimpleDateFormat sdfs=new SimpleDateFormat("yyyy-MM-dd 08:00:00");
+ Calendar now = Calendar.getInstance();
+ now.setTime(new Date());
+ now.add(Calendar.DAY_OF_MONTH, -1);
+ String timec = sdfs.format(now.getTime());
+ //前24小时
+ Calendar calendar6 = Calendar.getInstance();
+ calendar6.set(Calendar.HOUR_OF_DAY, calendar6.get(Calendar.HOUR_OF_DAY) - 24);
+ String dateBegin24 = df.format(calendar6.getTime());
+ String substring = time.substring(0, 10);
+ //截取月日
+ String[] strs = substring.split("-");
+ //月
+ String year = strs[1].toString();
+ //日
+ String day = strs[2].toString();
+ //定义短信内容头
+ String text = year + "月" + day + "日" + hs + "时";
+ String texta = "";
+ //定义统计数量
+ int number = 0;
+ //定义List保存警戒信息
+ List alist = new ArrayList();
+ //定义List保存未警戒信息
+ List blist = new ArrayList();
+ //河道超警信息
+ List<Map<String, Object>> selecthd = riverRService.selecthdt(dateBegin24, time, timec);
+ //Map<String, Object> sel = riverRService.sel();
+ //selecthd.add(sel);
+ List<Map<String, Object>> list1 = riverRService.selectP();
+ //用来判断是否重复统计超警信息
+ Map mnum = new HashMap();
+ //查询数据为空
+ if (selecthd.size() == 0) {
+ text += "暂无河道超警信息。廖家湾水位暂无数据,流量暂无数据;娄家村水位暂无数据,流量暂无数据;";
+ }
+ //不为空遍历数据计算是否超出预警值
+ else {
+ for (int i = 0; i < selecthd.size(); i++) {
+ //实时河道水位值
+ BigDecimal z = (BigDecimal) selecthd.get(i).get("Z");
+ double Z = z.doubleValue();
+ //超警戒水位值
+ if (selecthd.get(i).get("WRZ") == null || selecthd.get(i).get("Q") == null) {
+ String stnm = selecthd.get(i).get("STNM").toString();
+ if (stnm.equals("廖家湾") || stnm.equals("娄家村")) {
+ String stcd = selecthd.get(i).get("STCD").toString();
+ //Map<String, Object> stringObjectMap = riverRService.selectZ(stcd, timec);
+ BigDecimal zc = (BigDecimal) selecthd.get(i).get("Zc");
+ double ZC = zc.doubleValue();
+ double vz = Z - ZC;
+ DecimalFormat dfc = new DecimalFormat("#0.00");
+ String format = dfc.format(vz);
+ double v = Double.parseDouble(format);
+ texta += stnm.replaceAll(" ", "") + "水位" + dfc.format(Z) + "米、";
+ if (v < 0) {
+ texta += "比昨日8时下跌" + Math.abs(v) + "米、";
+ } else {
+ texta += "比昨日8时上涨" + Math.abs(v) + "米、";
+ }
+ if (selecthd.get(i).get("Q") == null) {
+ texta += "流量暂无信息;";
+ }
+ }
+ blist.add(selecthd.get(i));
+ continue;
+ }
+ BigDecimal wrz = (BigDecimal) selecthd.get(i).get("WRZ");
+ double WRZ = wrz.doubleValue();
+ BigDecimal q = (BigDecimal) selecthd.get(i).get("Q");
+ double Q = q.doubleValue();
+ if (Z <= WRZ) {
+ String stnm = selecthd.get(i).get("STNM").toString();
+ if (stnm.equals("廖家湾") || stnm.equals("娄家村")) {
+ String stcd = selecthd.get(i).get("STCD").toString();
+ //Map<String, Object> stringObjectMap = riverRService.selectZ(stcd, timec);
+ BigDecimal zc = (BigDecimal) selecthd.get(i).get("Zc");
+ double ZC = zc.doubleValue();
+ double vz = Z - ZC;
+ DecimalFormat dfc = new DecimalFormat("#0.00");
+ String format = dfc.format(vz);
+ double v = Double.parseDouble(format);
+ texta += stnm.replaceAll(" ", "") + "水位" + dfc.format(Z) + "米、";
+ if (v < 0) {
+ texta += "比昨日8时下跌" + Math.abs(v) + "米、";
+ } else {
+ texta += "比昨日8时上涨" + Math.abs(v) + "米、";
+ }
+ if (selecthd.get(i).get("Q") == null) {
+ texta += "流量暂无数据;";
+ } else {
+ //DecimalFormat dfl = new DecimalFormat("#0.000");
+ double v5 = roundToSignificantFigures(Q, 3);
+ String a = String.valueOf(v5);
+ String s1 = subZeroAndDot(a);
+ texta += "流量" + s1 + "立方米每秒;";
+ }
+ }
+ blist.add(selecthd.get(i));
+ } else {
+ //如果map集合保存了站点则不重复统计数量
+ if (mnum.containsKey(selecthd.get(i).get("STCD").toString()) == true) {
+ } else {
+ alist.add(selecthd.get(i));
+ mnum.put(selecthd.get(i).get("STCD").toString(), i);
+ number++;
+ //超出警戒水位多少
+ Double num = Z - WRZ;
+ double v3 = (double) Math.round(num * 100) / 100;
+ //县,市
+ String addvcd5 = selecthd.get(i).get("ADDVNM").toString();
+ //站点名称
+ String stnm = selecthd.get(i).get("STNM").toString();
+ if (stnm.equals("廖家湾") || stnm.equals("娄家村")) {
+ String stcd = selecthd.get(i).get("STCD").toString();
+ //Map<String, Object> stringObjectMap = riverRService.selectZ(stcd, timec);
+ BigDecimal zc = (BigDecimal) selecthd.get(i).get("Zc");
+ double ZC = zc.doubleValue();
+ double vz = Z - ZC;
+ DecimalFormat dfc = new DecimalFormat("#0.00");
+ String format = dfc.format(vz);
+ double v = Double.parseDouble(format);
+ texta += "。" + stnm.replaceAll(" ", "") + "站超出警戒水位" + dfc.format(v3) + "米、" + "水位" + dfc.format(Z) + "米、";
+ if (v < 0) {
+ texta += "比昨日8时下跌" + Math.abs(v) + "米、";
+ } else {
+ texta += "比昨日8时上涨" + Math.abs(v) + "米、";
+ }
+ if (selecthd.get(i).get("Q") == null) {
+ texta += "流量暂无数据、";
+ } else {
+ //DecimalFormat dfl = new DecimalFormat("#0.000");
+ //texta += "流量" + Q + "立方米每秒;";
+ double v5 = roundToSignificantFigures(Q, 3);
+ String a = String.valueOf(v5);
+ String s1 = subZeroAndDot(a);
+ texta += "流量" + s1 + "立方米每秒;";
+ }
+ }
+ }
+ }
+ }
+ if (number == 0) {
+ text += "暂无河道超警戒信息。" + texta;
+ } else {
+ text += "有" + number + "个河道站超警戒。" + texta;
+ }
+ }
+ Map m = new HashMap();
+ List list = new ArrayList();
+ m.put("text", text);
+ m.put("number", number);
+ m.put("Yjlist", alist);
+ m.put("list1", list1);
+ m.put("list", blist);
+ list.add(m);
+ return R.data(list);
+ }
+
+ /**
+ * 河道实时预警
+ *
+ * @return
+ */
+ @ApiLog("河道实时预警")
+ @PostMapping("/selecthdyj")
+ public R selecthdyj(String times, int k) {
+ Date date = null;
+ // 把Date按照格式转换成字符串
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+ try {
+ date = sdf.parse(times);
+ } catch (ParseException e) {
+ e.printStackTrace();
+ }
+ String dateEnd = sdf.format(date);
+ List<Map<String, Object>> list;
+ if (k == 13) {
+ list = riverRService.selecthdyj(times, dateEnd);
+ } else {
+ list = riverRService.selecthdyj(times, dateEnd);
+ }
+ List<Map<String, Object>> lists = new ArrayList<>();
+ for (int i = 0; i < list.size(); i++) {
+ Map<String, Object> maps = new HashMap<String, Object>();
+ BigDecimal b = (BigDecimal) list.get(i).get("Z");
+ int i1 = b.intValue();
+ if (i1 == 0) {
+ list.get(i).put("yuc", "无预警");
+ } else {
+ BigDecimal bigDecimalz = (BigDecimal) list.get(i).get("Z");//实时水位
+ BigDecimal bigDecimalw = (BigDecimal) list.get(i).get("WRZ");//警戒水位
+ double wrz = bigDecimalw.doubleValue();//警戒水位
+ double z = bigDecimalz.doubleValue();//实时水位
+ Double fy = (Double) list.get(i).get("fy");
+ Double oy = (Double) list.get(i).get("oy");
+ Double toy = (Double) list.get(i).get("toy");
+ Double ty = (Double) list.get(i).get("ty");
+ if (z < wrz || wrz == 0) {
+ list.get(i).put("yuc", "无预警");
+ } else if (z >= wrz && z < fy) {
+ list.get(i).put("yuc", "蓝色预警");
+ } else if (z >= fy && z < oy) {
+ list.get(i).put("yuc", "黄色预警");
+ } else if (z >= oy && z < ty) {
+ list.get(i).put("yuc", "橙色预警");
+ } else {
+ list.get(i).put("yuc", "红色预警");
+ }
+ }
+ maps.put("YjList", list.get(i));
+ lists.add(maps);
+ }
+ return R.data(lists);
+ }
+
+
+ /**
+ * 求Map<K,V>中Key(键)的最大值
+ *
+ * @param map
+ * @return
+ */
+ public static Object getMaxKey(Map<Double, Integer> map) {
+ if (map == null) return null;
+ Set<Double> set = map.keySet();
+ Object[] obj = set.toArray();
+ Arrays.sort(obj);
+ return obj[obj.length - 1];
+ }
+
+ /**
+ * 求Map<K,V>中Value(值)的最大值
+ *
+ * @param map
+ * @return
+ */
+ public static Object getMaxValue(Map<Integer, Integer> map) {
+ if (map == null) return null;
+ Collection<Integer> c = map.values();
+ Object[] obj = c.toArray();
+ Arrays.sort(obj);
+ return obj[obj.length - 1];
+ }
+
+
+ public static double roundToSignificantFigures(double num, int n) {
+
+ if (num == 0) {
+
+ return 0;
+
+ }
+
+ final double d = Math.ceil(Math.log10(num < 0 ? -num : num));
+
+ final int power = n - (int) d;
+
+ final double magnitude = Math.pow(10, power);
+
+ final long shifted = Math.round(num * magnitude);
+
+ return shifted / magnitude;
+
+ }
+
+ public static String subZeroAndDot(String s) {
+ if (s.indexOf(".") > 0) {
+ s = s.replaceAll("0+?$", "");//去掉多余的0
+ s = s.replaceAll("[.]$", "");//如最后一位是.则去掉
+ }
+ return s;
+ }
+
+ // @PostMapping("/ss")
+// public void ss() {
+// String s = riverRService.selectCode();
+// String[] split = s.split(",");
+// String strArrays = "";
+// for (int i = 0; i < split.length; i++) {
+// strArrays += "'" + split[i] + "',";
+// }
+// String code = strArrays.substring(0, strArrays.length() - 1);
+// System.out.println(code);
+// }
+
+// /**
+// * 河道自定义时间查询
+// *
+// * @param beginTime
+// * @param endTime
+// * @return
+// * @throws ParseException
+// */
+// @PostMapping("/selecthd")
+// public R selecthd(String beginTime, String endTime) throws ParseException {
+// String substring = beginTime.substring(0, 10);
+// String substrings = endTime.substring(0, 10);
+// String t = beginTime.substring(11, 13);
+// String hs;
+// if (t.substring(0, 1).equals("0")) {
+// hs = beginTime.substring(12, 13);
+// } else {
+// hs = beginTime.substring(11, 13);
+// }
+// String ts = endTime.substring(11, 13);
+// String hss;
+// if (ts.substring(0, 1).equals("0")) {
+// hss = beginTime.substring(12, 13);
+// } else {
+// hss = beginTime.substring(11, 13);
+// }
+// //截取月日
+// String[] strs = substring.split("-");
+// //月
+// String year = strs[1].toString();
+// //日
+// String day = strs[2].toString();
+// //截取月日
+// String[] strss = substrings.split("-");
+// //月
+// String years = strss[1].toString();
+// //日
+// String days = strss[2].toString();
+// //定义短信内容头
+// String text = year + "月" + day + "日" + hs + "时" + "-" + years + "月" + days + "日" + hss + "时";
+// String texta = "";
+// //定义统计数量
+// int number = 0;
+// //河道超警信息
+// List<Map<String, Object>> selecthd = riverRService.selecthdcs(beginTime, endTime);
+// //Map<String, Object> sel = riverRService.sel();
+// //selecthd.add(sel);
+// //基本站信息
+// List<Map<String, Object>> list1 = riverRService.selectP();
+// //用来判断是否重复统计超警信息
+// Map mnum = new HashMap();
+// Map mnums = new HashMap();
+// //定义list保存预警信息
+// List ylist = new ArrayList();
+// //定义list保存未预警信息
+// List alist = new ArrayList();
+// Map m1 = new HashMap();
+// Map m2 = new HashMap();
+// Map czf = new HashMap();
+// Map m = new HashMap();
+// List list = new ArrayList();
+// //查询数据为空
+// if (selecthd.size() == 0) {
+// text += "暂无河道超警信息。廖家湾水位暂无数据,流量暂无数据;娄家村水位暂无数据,流量暂无数据;";
+// }
+// //不为空遍历数据计算是否超出预警值
+// else {
+// int c = 0;
+// for (int i = 0; i < selecthd.size(); i++) {
+// //实时河道水位值
+// BigDecimal z = (BigDecimal) selecthd.get(i).get("Z");
+// double Z = z.doubleValue();
+// String stcd = selecthd.get(i).get("STCD").toString();
+// //站点名称
+// String stnms = selecthd.get(i).get("STNM").toString();
+// //最大值
+// BigDecimal maxZ = (BigDecimal) selecthd.get(i).get("maxZ");
+// //最小值
+// BigDecimal minZ = (BigDecimal) selecthd.get(i).get("minZ");
+// double v = maxZ.doubleValue();
+// double v1 = minZ.doubleValue();
+// //涨幅值
+// double v2 = v - v1;
+// double v4 = (double) Math.round(v2 * 100) / 100;
+// m1.put(v4, stnms.replaceAll(" ", "") + "站");
+// czf.put(stcd, v4);
+// //超警戒水位值
+// if (mnum.containsKey(selecthd.get(i).get("STCD").toString()) == true) {
+// } else {
+// if (selecthd.get(i).get("WRZ") == null || selecthd.get(i).get("Q") == null) {
+// String stnm = selecthd.get(i).get("STNM").toString();
+// mnum.put(selecthd.get(i).get("STCD").toString(), i);
+// if (stnm.equals("廖家湾") || stnm.equals("娄家村")) {
+// DecimalFormat df = new DecimalFormat("#0.00");
+// texta += stnm.replaceAll(" ", "") + "水位" + df.format(Z) + "米,";
+// if (selecthd.get(i).get("Q") == null) {
+// texta += "流量暂无数据";
+// }
+// }
+// alist.add(selecthd.get(i));
+// continue;
+// }
+// BigDecimal wrz = (BigDecimal) selecthd.get(i).get("WRZ");
+// double WRZ = wrz.doubleValue();
+// BigDecimal q = (BigDecimal) selecthd.get(i).get("Q");
+// double Q = q.doubleValue();
+// if (Z <= WRZ) {
+// if (mnum.containsKey(selecthd.get(i).get("STCD").toString()) == true) {
+// } else {
+// String stnm = selecthd.get(i).get("STNM").toString();
+// mnum.put(selecthd.get(i).get("STCD").toString(), i);
+// if (stnm.equals("廖家湾") || stnm.equals("娄家村")) {
+// DecimalFormat df = new DecimalFormat("#0.00");
+// texta += stnm.replaceAll(" ", "") + "水位" + df.format(Z) + "米,";
+// if (selecthd.get(i).get("Q") == null) {
+// texta += "流量暂无数据";
+// } else {
+// double v5 = roundToSignificantFigures(Q, 3);
+// String a = String.valueOf(v5);
+// String s1 = subZeroAndDot(a);
+// texta += "流量" + s1 + "立方米每秒;";
+// }
+// }
+// }
+// alist.add(selecthd.get(i));
+// } else {
+// //如果map集合保存了站点则不重复统计数量
+// if (mnum.containsKey(selecthd.get(i).get("STCD").toString()) == true) {
+// } else {
+// ylist.add(selecthd.get(i));
+// mnum.put(selecthd.get(i).get("STCD").toString(), i);
+// number++;
+// //超出警戒水位多少
+// Double num = Z - WRZ;
+// double v3 = (double) Math.round(num * 100) / 100;
+// //县,市
+// String addvcd5 = selecthd.get(i).get("ADDVNM").toString();
+// //站点名称
+// String stnm = selecthd.get(i).get("STNM").toString();
+// if (stnm.equals("廖家湾") || stnm.equals("娄家村")) {
+// DecimalFormat df = new DecimalFormat("#0.00");
+// texta += stnm.replaceAll(" ", "") + "站超出警戒水位" + df.format(v3) + "米," + "水位" + df.format(Z) + "米,";
+// if (selecthd.get(i).get("Q") == null) {
+// texta += "流量暂无数据;";
+// } else {
+// //DecimalFormat dfs = new DecimalFormat("#0.000");
+// double v5 = roundToSignificantFigures(Q, 3);
+// String a = String.valueOf(v5);
+// String s1 = subZeroAndDot(a);
+// texta += "流量" + s1 + "立方米每秒;";
+// }
+// }
+// }
+// }
+// }
+//
+// }
+// }
+// if (number == 0) {
+// text += "暂无河道超警戒信息。" + texta;
+// } else {
+// text += "有" + number + "个河道站超警戒。" + texta;
+// }
+// if (m1.size() != 0) {
+// Object maxKey = getMaxKey(m1);
+// String s1 = m1.get(maxKey).toString();
+// text += " 涨幅最大的是:" + s1 + "(涨" + maxKey + "米)。";
+// }
+// m.put("text", text);
+// m.put("number", number);
+// m.put("Yjlist", ylist);
+// m.put("list", alist);
+// m.put("list1", list1);
+// m.put("clist", czf);
+// list.add(m);
+// return R.data(list);
+//
+// }
+
/**
* 河道自定义时间查询
*
@@ -126,8 +785,20 @@
public R selecthd(String beginTime, String endTime) throws ParseException {
String substring = beginTime.substring(0, 10);
String substrings = endTime.substring(0, 10);
- String hs = beginTime.substring(11, 13);
- String hss = endTime.substring(11, 13);
+ String t = beginTime.substring(11, 13);
+ String hs;
+ if (t.substring(0, 1).equals("0")) {
+ hs = beginTime.substring(12, 13);
+ } else {
+ hs = beginTime.substring(11, 13);
+ }
+ String ts = endTime.substring(11, 13);
+ String hss;
+ if (ts.substring(0, 1).equals("0")) {
+ hss = beginTime.substring(12, 13);
+ } else {
+ hss = beginTime.substring(11, 13);
+ }
//截取月日
String[] strs = substring.split("-");
//月
@@ -137,18 +808,30 @@
//截取月日
String[] strss = substrings.split("-");
//月
- String years= strss[1].toString();
+ String years = strss[1].toString();
//日
String days = strss[2].toString();
//定义短信内容头
- String text = year + "月" + day + "日"+hs+"时"+"-"+years+ "月" + days + "日"+hss+"时";
+ String text = year + "月" + day + "日" + hs + "时" + "-" + years + "月" + days + "日" + hss + "时";
String texta = "";
//定义统计数量
int number = 0;
+ String s = riverRService.selectCode();
+ String[] split = s.split(",");
+ String strArrays = "";
+ for (int i = 0; i < split.length; i++) {
+ strArrays += "'" + split[i] + "',";
+ }
+ String code = strArrays.substring(0, strArrays.length() - 1);
//河道超警信息
- List<Map<String, Object>> selecthd = riverRService.selecthd(beginTime, endTime);
- Map<String, Object> sel = riverRService.sel();
- selecthd.add(sel);
+ List<Map<String, Object>> selecthd = riverRService.selecthdcss(beginTime, endTime,code);
+ Collections.sort(selecthd, new Comparator<Map<String, Object>>() {
+ public int compare(Map<String, Object> o1, Map<String, Object> o2) {
+ Double name1 = Double.valueOf(o1.get("Z").toString()) ;//name1是从你list里面拿出来的一个
+ Double name2 = Double.valueOf(o2.get("Z").toString()) ; //name1是从你list里面拿出来的第二个name
+ return name2.compareTo(name1);
+ }
+ });
//基本站信息
List<Map<String, Object>> list1 = riverRService.selectP();
//用来判断是否重复统计超警信息
@@ -158,16 +841,36 @@
List ylist = new ArrayList();
//定义list保存未预警信息
List alist = new ArrayList();
+ Map m1 = new HashMap();
+ Map m2 = new HashMap();
+ Map czf = new HashMap();
+ Map m = new HashMap();
+ List list = new ArrayList();
//查询数据为空
if (selecthd.size() == 0) {
text += "暂无河道超警信息。廖家湾水位暂无数据,流量暂无数据;娄家村水位暂无数据,流量暂无数据;";
}
//不为空遍历数据计算是否超出预警值
else {
+ int c = 0;
for (int i = 0; i < selecthd.size(); i++) {
//实时河道水位值
BigDecimal z = (BigDecimal) selecthd.get(i).get("Z");
double Z = z.doubleValue();
+ String stcd = selecthd.get(i).get("STCD").toString();
+ //站点名称
+ String stnms = selecthd.get(i).get("STNM").toString();
+ //最大值
+ BigDecimal maxZ = (BigDecimal) selecthd.get(i).get("maxZ");
+ //最小值
+ BigDecimal minZ = (BigDecimal) selecthd.get(i).get("minZ");
+ double v = maxZ.doubleValue();
+ double v1 = minZ.doubleValue();
+ //涨幅值
+ double v2 = v - v1;
+ double v4 = (double) Math.round(v2 * 100) / 100;
+ m1.put(v4, stnms.replaceAll(" ", "") + "站");
+ czf.put(stcd, v4);
//超警戒水位值
if (mnum.containsKey(selecthd.get(i).get("STCD").toString()) == true) {
} else {
@@ -199,8 +902,10 @@
if (selecthd.get(i).get("Q") == null) {
texta += "流量暂无数据";
} else {
- DecimalFormat dfs = new DecimalFormat("#0.000");
- texta += "流量" + dfs.format(Q) + "立方米每秒;";
+ double v5 = roundToSignificantFigures(Q, 3);
+ String a = String.valueOf(v5);
+ String s1 = subZeroAndDot(a);
+ texta += "流量" + s1 + "立方米每秒;";
}
}
}
@@ -225,363 +930,60 @@
if (selecthd.get(i).get("Q") == null) {
texta += "流量暂无数据;";
} else {
- DecimalFormat dfs = new DecimalFormat("#0.000");
- texta += "流量" + dfs.format(Q) + "立方米每秒;";
+ //DecimalFormat dfs = new DecimalFormat("#0.000");
+ double v5 = roundToSignificantFigures(Q, 3);
+ String a = String.valueOf(v5);
+ String s1 = subZeroAndDot(a);
+ texta += "流量" + s1 + "立方米每秒;";
}
}
}
}
- }
-
- }
- if (number == 0) {
- text +="暂无河道超警戒信息。"+texta;
- } else {
- text +="有" + number + "个河道站超警戒。"+texta;
- }
- }
- //河道涨幅,跌幅信息
- List<Map<String, Object>> selecthds = riverRService.selecthds(beginTime, endTime);
- Map m1 = new HashMap();
- Map m2 = new HashMap();
- Map c = new HashMap();
- Map m = new HashMap();
- List list = new ArrayList();
- for (int j = 0; j < selecthds.size(); j++) {
- //站点编码
- String stcd = selecthds.get(j).get("STCD").toString();
- //站点名称
- String stnm = selecthds.get(j).get("STNM").toString();
- //省,市
- String addvcd5 = selecthds.get(j).get("ADDVNM").toString();
- //最大值
- BigDecimal maxZ = (BigDecimal) selecthds.get(j).get("maxZ");
- //最大值出现时间
- String maxTM = selecthds.get(j).get("maxTM").toString();
- //最小值
- BigDecimal minZ = (BigDecimal) selecthds.get(j).get("minZ");
- //最小值出现时间
- String minTM = selecthds.get(j).get("minTM").toString();
- SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- Date sd1 = df.parse(maxTM);
- Date sd2 = df.parse(minTM);
- //如果最大时间大于最小时间就是涨幅
- if (sd1.after(sd2)) {
- //创建一个map集合保存涨幅数据
- double v = maxZ.doubleValue();
- double v1 = minZ.doubleValue();
- //涨幅值
- double v2 = v - v1;
- double v3 = (double) Math.round(v2 * 100) / 100;
- m1.put(Math.abs(v3), stnm.replaceAll(" ", "") + "站");
- c.put(stcd,Math.abs(v3));
-
-
- }
- //跌幅
- else {
- //创建一个map集合保存跌幅数据
- double v = maxZ.doubleValue();
- double v1 = minZ.doubleValue();
- //涨幅值
- double v2 = v1 - v;
- double v3 = (double) Math.round(v2 * 100) / 100;
- m2.put(Math.abs(v3), stnm.replaceAll(" ", "") + "站");
- c.put(stcd,v3);
+ }
}
}
- if (m1.size()==0){
- text += "暂无涨幅信息。";
+ if (number == 0) {
+ text += "暂无河道超警戒信息。" + texta;
+ } else {
+ text += "有" + number + "个河道站超警戒。" + texta;
}
- else {
- //获取涨幅最大的信息
+ if (m1.size() != 0) {
Object maxKey = getMaxKey(m1);
String s1 = m1.get(maxKey).toString();
- text += "涨幅最大的是:" + s1 + "(涨" + maxKey + "米)。";
- }
- if (m2.size()==0){
- text += "暂无跌幅信息。";
- }
- else {
- //获取跌幅最大的信息
- Object maxKey2 = getMaxKey(m2);
- String s2 = m2.get(maxKey2).toString();
- text += "跌幅最大的是:" + s2 + "(跌" + maxKey2 + "米)。";
+ text += " 涨幅最大的是:" + s1 + "(涨" + maxKey + "米)。";
}
m.put("text", text);
m.put("number", number);
m.put("Yjlist", ylist);
m.put("list", alist);
m.put("list1", list1);
- m.put("clist", c);
+ m.put("clist", czf);
list.add(m);
return R.data(list);
- }
- /**
- * 河道最新
- *
- * @return
- * @throws ParseException
- */
- @PostMapping("/selecthdt")
- public R selecthdt() throws ParseException {
- int w=1;
- SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- String time = df.format(new Date());
- String yearc = time.substring(0, 4);
- int years = Integer.parseInt(yearc);
- String monthc = time.substring(5, 7);
- int months = Integer.parseInt(monthc);
- String dayc = time.substring(8, 10);
- int days = Integer.parseInt(dayc);
- int da=days-w;
- String hss = time.substring(11, 13);
- int hs = Integer.parseInt(hss);
- //前一天的8时
- String timec = years +"-" + months + "-"+da+" 08:00:00";
- //前24小时
- Calendar calendar6 = Calendar.getInstance();
- calendar6.set(Calendar.HOUR_OF_DAY, calendar6.get(Calendar.HOUR_OF_DAY) - 24);
- String dateBegin24 = df.format(calendar6.getTime());
- String substring = time.substring(0, 10);
- //截取月日
- String[] strs = substring.split("-");
- //月
- String year = strs[1].toString();
- //日
- String day = strs[2].toString();
- //定义短信内容头
- String text = year + "月" + day + "日"+hs+"时";
- String texta = "";
- //定义统计数量
- int number = 0;
- //定义List保存警戒信息
- List alist = new ArrayList();
- //定义List保存未警戒信息
- List blist = new ArrayList();
- //河道超警信息
- List<Map<String, Object>> selecthd = riverRService.selecthdt(dateBegin24,time);
- Map<String, Object> sel = riverRService.sel();
- selecthd.add(sel);
- List<Map<String, Object>> list1 = riverRService.selectP();
- //用来判断是否重复统计超警信息
- Map mnum = new HashMap();
- //查询数据为空
- if (selecthd.size() == 0) {
- text +="暂无河道超警信息。廖家湾水位暂无数据,流量暂无数据;娄家村水位暂无数据,流量暂无数据;";
- }
- //不为空遍历数据计算是否超出预警值
- else {
- for (int i = 0; i < selecthd.size(); i++) {
- //实时河道水位值
- BigDecimal z = (BigDecimal) selecthd.get(i).get("Z");
- double Z = z.doubleValue();
- //超警戒水位值
- if (selecthd.get(i).get("WRZ") == null || selecthd.get(i).get("Q")==null) {
- String stnm = selecthd.get(i).get("STNM").toString();
- if (stnm.equals("廖家湾") || stnm.equals("娄家村")) {
- String stcd = selecthd.get(i).get("STCD").toString();
- Map<String, Object> stringObjectMap = riverRService.selectZ(stcd, timec);
- BigDecimal zc = (BigDecimal) stringObjectMap.get("Z");
- double ZC = zc.doubleValue();
- double vz = Z - ZC;
- DecimalFormat dfc = new DecimalFormat("#0.00");
- String format = dfc.format(vz);
- double v = Double.parseDouble(format);
- texta +=stnm.replaceAll(" ", "") + "水位" + dfc.format(Z) + "米、";
- if (v<0){
- texta+="比昨日8时下跌"+Math.abs(v)+"米、";
- }
- else {
- texta+="比昨日8时上涨"+Math.abs(v)+"米、";
- }
- if (selecthd.get(i).get("Q")==null){
- texta+="流量暂无信息;";
- }
- }
- blist.add(selecthd.get(i));
- continue;
- }
- BigDecimal wrz = (BigDecimal) selecthd.get(i).get("WRZ");
- double WRZ = wrz.doubleValue();
- BigDecimal q = (BigDecimal) selecthd.get(i).get("Q");
- double Q = q.doubleValue();
- if (Z <= WRZ) {
- String stnm = selecthd.get(i).get("STNM").toString();
- if (stnm.equals("廖家湾") || stnm.equals("娄家村")) {
- String stcd = selecthd.get(i).get("STCD").toString();
- Map<String, Object> stringObjectMap = riverRService.selectZ(stcd, timec);
- BigDecimal zc = (BigDecimal) stringObjectMap.get("Z");
- double ZC = zc.doubleValue();
- double vz = Z - ZC;
- DecimalFormat dfc = new DecimalFormat("#0.00");
- String format = dfc.format(vz);
- double v = Double.parseDouble(format);
- texta +=stnm.replaceAll(" ", "") + "水位" + dfc.format(Z) + "米、";
- if (v<0){
- texta+="比昨日8时下跌"+Math.abs(v)+"米、";
- }
- else {
- texta+="比昨日8时上涨"+Math.abs(v)+"米、";
- }
- if (selecthd.get(i).get("Q")==null){
- texta+="流量暂无数据;";
- }
- else {
- DecimalFormat dfl = new DecimalFormat("#0.000");
- texta+="流量"+dfl.format(Q)+"立方米每秒;";
- }
- }
- blist.add(selecthd.get(i));
- } else {
- //如果map集合保存了站点则不重复统计数量
- if (mnum.containsKey(selecthd.get(i).get("STCD").toString()) == true) {
- } else {
- alist.add(selecthd.get(i));
- mnum.put(selecthd.get(i).get("STCD").toString(), i);
- number++;
- //超出警戒水位多少
- Double num = Z - WRZ;
- double v3 = (double) Math.round(num * 100) / 100;
- //县,市
- String addvcd5 = selecthd.get(i).get("ADDVNM").toString();
- //站点名称
- String stnm = selecthd.get(i).get("STNM").toString();
- if (stnm.equals("廖家湾") || stnm.equals("娄家村")) {
- String stcd = selecthd.get(i).get("STCD").toString();
- Map<String, Object> stringObjectMap = riverRService.selectZ(stcd, timec);
- BigDecimal zc = (BigDecimal) stringObjectMap.get("Z");
- double ZC = zc.doubleValue();
- double vz = Z - ZC;
- DecimalFormat dfc = new DecimalFormat("#0.00");
- String format = dfc.format(vz);
- double v = Double.parseDouble(format);
- texta += "。" + stnm.replaceAll(" ", "") + "站超出警戒水位" + dfc.format(v3) + "米、"+ "水位" + dfc.format(Z) + "米、";
- if (v<0){
- texta+="比昨日8时下跌"+Math.abs(v)+"米、";
- }
- else {
- texta+="比昨日8时上涨"+Math.abs(v)+"米、";
- }
- if (selecthd.get(i).get("Q")==null){
- texta+="流量暂无数据、";
- }
- else {
- DecimalFormat dfl = new DecimalFormat("#0.000");
- texta+="流量"+dfl.format(Q)+"立方米每秒;";
- }
- }
- }
- }
- }
- if (number == 0) {
- text +="暂无河道超警戒信息。"+texta;
- } else {
- text +="有" + number + "个河道站超警戒。" + texta;
- }
- }
- Map m = new HashMap();
- List list = new ArrayList();
- m.put("text", text);
- m.put("number", number);
- m.put("Yjlist", alist);
- m.put("list1", list1);
- m.put("list", blist);
- list.add(m);
- return R.data(list);
- }
- /**
- * 河道实时预警
- * @return
- */
- @ApiLog("河道实时预警")
- @PostMapping("/selecthdyj")
- public R selecthdyj(String times,int k) {
- Date date = null;
- // 把Date按照格式转换成字符串
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
- try {
- date = sdf.parse(times);
- } catch (ParseException e) {
- e.printStackTrace();
- }
- String dateEnd = sdf.format(date);
- List<Map<String, Object>> list;
- if(k==13){
- list= riverRService.selecthdyj(times,dateEnd);
- }
- else {
- list= riverRService.selecthdyj(times,dateEnd);
- }
- List<Map<String, Object>> lists = new ArrayList<>();
- for (int i =0;i<list.size();i++) {
- Map<String, Object> maps = new HashMap<String, Object>();
- BigDecimal b = (BigDecimal) list.get(i).get("Z");
- int i1 = b.intValue();
- if(i1==0){
- list.get(i).put("yuc","无预警");
- }
- else {
- BigDecimal bigDecimalz = (BigDecimal) list.get(i).get("Z");//实时水位
- BigDecimal bigDecimalw = (BigDecimal) list.get(i).get("WRZ");//警戒水位
- double wrz = bigDecimalw.doubleValue();//警戒水位
- double z = bigDecimalz.doubleValue();//实时水位
- Double fy= (Double) list.get(i).get("fy");
- Double oy= (Double) list.get(i).get("oy");
- Double toy= (Double) list.get(i).get("toy");
- Double ty= (Double) list.get(i).get("ty");
- if(z<wrz || wrz==0){
- list.get(i).put("yuc","无预警");
- }
- else if(z>=wrz && z<fy){
- list.get(i).put("yuc","蓝色预警");
- }
- else if(z>=fy && z<oy){
- list.get(i).put("yuc","黄色预警");
- }
- else if(z>=oy && z<ty){
- list.get(i).put("yuc","橙色预警");
- }
- else {
- list.get(i).put("yuc","红色预警");
- }
- }
- maps.put("YjList",list.get(i));
- lists.add(maps);
- }
- return R.data(lists);
}
- /**
- * 求Map<K,V>中Key(键)的最大值
- *
- * @param map
- * @return
- */
- public static Object getMaxKey(Map<Double, Integer> map) {
- if (map == null) return null;
- Set<Double> set = map.keySet();
- Object[] obj = set.toArray();
- Arrays.sort(obj);
- return obj[obj.length - 1];
- }
- /**
- * 求Map<K,V>中Value(值)的最大值
- *
- * @param map
- * @return
- */
- public static Object getMaxValue(Map<Integer, Integer> map) {
- if (map == null) return null;
- Collection<Integer> c = map.values();
- Object[] obj = c.toArray();
- Arrays.sort(obj);
- return obj[obj.length - 1];
- }
-
+// @PostMapping("/ss")
+// public R ss(String beginTime, String endTime) {
+// String s = riverRService.selectCode();
+// String[] split = s.split(",");
+// String strArrays = "";
+// for (int i = 0; i < split.length; i++) {
+// strArrays += "'" + split[i] + "',";
+// }
+// String code = strArrays.substring(0, strArrays.length() - 1);
+// List<Map<String, Object>> list = riverRService.selecthdcss(beginTime, endTime, code);
+// Collections.sort(list, new Comparator<Map<String, Object>>() {
+// public int compare(Map<String, Object> o1, Map<String, Object> o2) {
+// Double name1 = Double.valueOf(o1.get("Z").toString()) ;//name1是从你list里面拿出来的一个
+// Double name2 = Double.valueOf(o2.get("Z").toString()) ; //name1是从你list里面拿出来的第二个name
+// return name2.compareTo(name1);
+// }
+// });
+// return R.data(list);
+// }
}
--
Gitblit v1.9.3