/** * Copyright (c) 2018-2028, Chill Zhuang 庄骞 (smallchill@163.com). *

* Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at *

* http://www.apache.org/licenses/LICENSE-2.0 *

* Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.springblade.modules.river.controller; import com.baomidou.mybatisplus.core.metadata.IPage; 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; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.tool.api.R; import org.springblade.modules.river.entity.RiverR; import org.springblade.modules.river.service.IRiverRService; import org.springblade.modules.river.vo.RiverRVO; 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; /** * 控制器 * * @author Blade * @since 2019-11-07 */ @RestController @AllArgsConstructor @RequestMapping("/riverr") @Api(value = "", tags = "接口") public class RiverRController extends BladeController { private IRiverRService riverRService; /** * 详情 */ @ApiLog("详情") @GetMapping("/detail") @ApiOperationSupport(order = 1) @ApiOperation(value = "详情", notes = "传入riverR") public R detail(RiverR riverR) { RiverR detail = riverRService.getOne(Condition.getQueryWrapper(riverR)); return R.data(RiverRWrapper.build().entityVO(detail)); } /** * 分页 */ @ApiLog("分页") @GetMapping("/list") @ApiOperationSupport(order = 2) @ApiOperation(value = "分页", notes = "传入riverR") public R> list(RiverR riverR, Query query) { IPage pages = riverRService.page(Condition.getPage(query), Condition.getQueryWrapper(riverR)); return R.data(RiverRWrapper.build().pageVO(pages)); } /** * 新增 */ @ApiLog("新增") @PostMapping("/save") @ApiOperationSupport(order = 4) @ApiOperation(value = "新增", notes = "传入riverR") public R save(@Valid @RequestBody RiverR riverR) { return R.status(riverRService.save(riverR)); } /** * 修改 */ @ApiLog("修改") @PostMapping("/update") @ApiOperationSupport(order = 5) @ApiOperation(value = "修改", notes = "传入riverR") public R update(@Valid @RequestBody RiverR riverR) { return R.status(riverRService.updateById(riverR)); } /** * 新增或修改 */ @ApiLog("新增或修改") @PostMapping("/submit") @ApiOperationSupport(order = 6) @ApiOperation(value = "新增或修改", notes = "传入riverR") public R submit(@Valid @RequestBody RiverR riverR) { 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> selecthd = riverRService.selecthd(beginTime, endTime); Map sel = riverRService.sel(); selecthd.add(sel); //基本站信息 List> 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 { 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 += "流量" + dfs.format(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 += "流量" + dfs.format(Q) + "立方米每秒;"; } } } } } } if (number == 0) { text +="暂无河道超警戒信息。"+texta; } else { text +="有" + number + "个河道站超警戒。"+texta; } } //河道涨幅,跌幅信息 List> 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 += "暂无涨幅信息。"; } else { //获取涨幅最大的信息 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 + "米)。"; } 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"; //前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> selecthd = riverRService.selecthdt(dateBegin24,time); Map sel = riverRService.sel(); selecthd.add(sel); List> 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 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 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 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> list; if(k==13){ list= riverRService.selecthdyj(times,dateEnd); } else { list= riverRService.selecthdyj(times,dateEnd); } List> lists = new ArrayList<>(); for (int i =0;i maps = new HashMap(); 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 && z=fy && z=oy && z中Key(键)的最大值 * * @param map * @return */ public static Object getMaxKey(Map map) { if (map == null) return null; Set set = map.keySet(); Object[] obj = set.toArray(); Arrays.sort(obj); return obj[obj.length - 1]; } /** * 求Map中Value(值)的最大值 * * @param map * @return */ public static Object getMaxValue(Map map) { if (map == null) return null; Collection c = map.values(); Object[] obj = c.toArray(); Arrays.sort(obj); return obj[obj.length - 1]; } }