tangzy
2022-07-21 a98b1db4392c357304036e8b3cdd01646920300d
src/main/java/org/springblade/modules/mountainrain/controller/MountainrainController.java
@@ -21,7 +21,9 @@
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.apache.poi.hssf.usermodel.*;
import org.springblade.core.boot.ctrl.BladeController;
import org.springblade.core.excel.util.ExcelUtil;
import org.springblade.core.log.annotation.ApiLog;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.mp.support.Query;
@@ -31,17 +33,36 @@
import org.springblade.modules.mountain.service.IMountainService;
import org.springblade.modules.mountain.vo.MountainVO;
import org.springblade.modules.mountainrain.entity.Mountainrain;
import org.springblade.modules.mountainrain.entity.Yucpptn;
import org.springblade.modules.mountainrain.excel.BgrExcel;
import org.springblade.modules.mountainrain.excel.BgrImporter;
import org.springblade.modules.mountainrain.excel.MgrExcel;
import org.springblade.modules.mountainrain.excel.MgrImporter;
import org.springblade.modules.mountainrain.service.IMountainrainService;
import org.springblade.modules.mountainrain.vo.*;
import org.springblade.modules.mountainrain.wrapper.MountainrainWrapper;
import org.springblade.modules.regionWeight.service.IRegionWeightService;
import org.springblade.modules.system.excel.UserExcel;
import org.springblade.modules.system.excel.UserImporter;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import springfox.documentation.annotations.ApiIgnore;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.io.*;
import java.math.BigDecimal;
import java.net.URLEncoder;
import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
/**
 *  控制器
 * 控制器
 *
 * @author BladeX
 * @since 2020-02-27
@@ -49,11 +70,13 @@
@RestController
@AllArgsConstructor
@RequestMapping("/mountainrain")
@Component
@Api(value = "", tags = "接口")
public class MountainrainController extends BladeController {
   private IMountainrainService mountainrainService;
   private IMountainService mountainService;
   private final IRegionWeightService regionWeightService;
   /**
@@ -374,74 +397,68 @@
    */
   @ApiLog("查询洪水预警")
   @GetMapping("/ss")
   public R selectcInfos(int type,String time,String dateEnds1,String dateEnds3,String dateEnds6,String dateEnds24,int k,String timei) {
      if (type == 0 && k==13) {
   public R selectcInfos(int type, String time, String dateEnds1, String dateEnds3, String dateEnds6, String dateEnds24, int k, String timei) {
      if (type == 0 && k == 13) {
         //当前时间
         String times = time;
         String dateEnd1 = dateEnds1;
         String timess=timei;
         String timess = timei;
         //三个小时前的时间
         String dateEnd3 =dateEnds3;
         String dateEnd3 = dateEnds3;
         //六个小时前的时间
         String dateEnd6 =dateEnds6;
         String dateEnd6 = dateEnds6;
         //二十四个小时前的时间
         String dateEnd24 =dateEnds24;
         String dateEnd24 = dateEnds24;
         //对应雨量站
         long startTime=System.currentTimeMillis();
         List<MountainrainsCVO> mountainrainsCVOS = mountainrainService.selectcInfos(times, dateEnd24, dateEnd1, dateEnd3, dateEnd6,timess);
         long endTime=System.currentTimeMillis(); //获取结束时间
         long startTime = System.currentTimeMillis();
         List<MountainrainsCVO> mountainrainsCVOS = mountainrainService.selectcInfos(times, dateEnd24, dateEnd1, dateEnd3, dateEnd6, timess);
         List<Map<String, Object>> lists = new ArrayList<>();
         for (int i = 0; i < mountainrainsCVOS.size(); i++) {
            if (mountainrainsCVOS.get(i).getCenconding()==null){
            if (mountainrainsCVOS.get(i).getCenconding() == null) {
               continue;
            }
            Map<String, Object> map = new HashMap<String, Object>();
               int Max =mountainrainService .Max(mountainrainsCVOS.get(i).getDrp1(), mountainrainsCVOS.get(i).getDrp3(),
                  mountainrainsCVOS.get(i).getGohour(), mountainrainsCVOS.get(i).getGthour());
               map.put("List", mountainrainsCVOS.get(i));
               map.put("Max", Max);
               lists.add(map);
            int Max = mountainrainService.Max(mountainrainsCVOS.get(i).getDrp1(), mountainrainsCVOS.get(i).getDrp3(),
               mountainrainsCVOS.get(i).getGohour(), mountainrainsCVOS.get(i).getGthour());
            map.put("List", mountainrainsCVOS.get(i));
            map.put("Max", Max);
            lists.add(map);
         }
         System.out.println("程序运行时间: "+(endTime-startTime)+"ms");
         return R.data(lists);
      }
      else {
      } else {
         //当前时间
         String times = time;
         String dateEnd1 = dateEnds1;
         String timess=timei;
         String timess = timei;
         //三个小时前的时间
         String dateEnd3 =dateEnds3;
         String dateEnd3 = dateEnds3;
         //六个小时前的时间
         String dateEnd6 =dateEnds6;
         String dateEnd6 = dateEnds6;
         //二十四个小时前的时间
         String dateEnd24 =dateEnds24;
         String dateEnd24 = dateEnds24;
         //对应雨量站
         List<MountainrainsCVO> mountainrainsCVOS = mountainrainService.selectcInfo(times, dateEnd24, dateEnd1, dateEnd3, dateEnd6,timess);
         List<MountainrainsCVO> mountainrainsCVOS = mountainrainService.selectcInfo(times, dateEnd24, dateEnd1, dateEnd3, dateEnd6, timess);
         List<Map<String, Object>> lists = new ArrayList<>();
         for (int i = 0; i < mountainrainsCVOS.size(); i++) {
            Map<String, Object> map = new HashMap<String, Object>();
               int Max = mountainrainService.Max(mountainrainsCVOS.get(i).getDrp1(), mountainrainsCVOS.get(i).getDrp3(),
                  mountainrainsCVOS.get(i).getGohour(), mountainrainsCVOS.get(i).getGthour());
            /*if(Max==0){
               continue;
            }*/
               map.put("List", mountainrainsCVOS.get(i));
               map.put("Max", Max);
               lists.add(map);
            int Max = mountainrainService.Max(mountainrainsCVOS.get(i).getDrp1(), mountainrainsCVOS.get(i).getDrp3(),
               mountainrainsCVOS.get(i).getGohour(), mountainrainsCVOS.get(i).getGthour());
            map.put("List", mountainrainsCVOS.get(i));
            map.put("Max", Max);
            lists.add(map);
         }
         return R.data(lists);
@@ -455,26 +472,21 @@
    */
   @ApiLog("查询洪水预警")
   @GetMapping("/sss")
   public R selectcInfoss(int type,String time,String dateEnds1,String dateEnds3,String dateEnds6,String dateEnds24,int k,String timei) {
      if (type == 0 && k==13) {
   public R selectcInfoss(int type, String time, String dateEnds1, String dateEnds2, String dateEnds3) {
      //第二种方式预警
      if (type == 0) {
         //当前时间
         String times = time;
         String dateEnd1 = dateEnds1;
         String timess=timei;
         //2个小时前的时间
         String dateEnd2 = dateEnds2;
         //三个小时前的时间
         String dateEnd3 =dateEnds3;
         //六个小时前的时间
         String dateEnd6 =dateEnds6;
         //二十四个小时前的时间
         String dateEnd24 =dateEnds24;
         //3个小时前的时间
         String dateEnd3 = dateEnds3;
         //对应雨量站
         long startTime=System.currentTimeMillis();
         String s = mountainrainService.selectCode();
         String[] split = s.split(",");
         String strArrays = "";
@@ -482,61 +494,1678 @@
            strArrays += "'" + split[i] + "',";
         }
         String code = strArrays.substring(0, strArrays.length() - 1);
         List<MountainrainsCVO> mountainrainsCVOS = mountainrainService.Mountains(times, dateEnd24, dateEnd1, dateEnd3, dateEnd6,timess,code);
         long endTime=System.currentTimeMillis(); //获取结束时间
         List<MountainrainsCVO> mountainrainsCVOS = mountainrainService.Mountains(times, dateEnd1, dateEnd2, dateEnd3, code);
         List<Map<String, Object>> lists = new ArrayList<>();
         for (int i = 0; i < mountainrainsCVOS.size(); i++) {
            if (mountainrainsCVOS.get(i).getCenconding()==null){
            if (mountainrainsCVOS.get(i).getCenconding() == null) {
               continue;
            }
            Map<String, Object> map = new HashMap<String, Object>();
            int Max =mountainrainService .Max(mountainrainsCVOS.get(i).getDrp1(), mountainrainsCVOS.get(i).getDrp3(),
               mountainrainsCVOS.get(i).getGohour(), mountainrainsCVOS.get(i).getGthour());
            map.put("List", mountainrainsCVOS.get(i));
            map.put("Max", Max);
            lists.add(map);
            if (mountainrainsCVOS.get(i).getSoilval() > 30) {
               //0.8雨量湿度
               if (mountainrainsCVOS.get(i).getDrp1() > mountainrainsCVOS.get(i).getGohours()) {
                  map.put("List", mountainrainsCVOS.get(i));
                  map.put("flage1", "true");
                  map.put("flage3", "false");
                  map.put("status", 2);
                  lists.add(map);
               } else if (mountainrainsCVOS.get(i).getDrp3() > mountainrainsCVOS.get(i).getGthours()) {
                  map.put("List", mountainrainsCVOS.get(i));
                  map.put("flage1", "false");
                  map.put("flage3", "true");
                  map.put("status", 2);
                  lists.add(map);
               } else {
                  map.put("List", mountainrainsCVOS.get(i));
                  map.put("flage1", "false");
                  map.put("flage3", "false");
                  map.put("status", 2);
                  lists.add(map);
               }
            } else {
               //0.5雨量湿度
               if (mountainrainsCVOS.get(i).getDrp1() > mountainrainsCVOS.get(i).getGohour()) {
                  map.put("List", mountainrainsCVOS.get(i));
                  map.put("flage1", "true");
                  map.put("flage3", "false");
                  map.put("status", 1);
                  lists.add(map);
               } else if (mountainrainsCVOS.get(i).getDrp3() > mountainrainsCVOS.get(i).getGthour()) {
                  map.put("List", mountainrainsCVOS.get(i));
                  map.put("flage1", "false");
                  map.put("flage3", "true");
                  map.put("status", 1);
                  lists.add(map);
               } else {
                  map.put("List", mountainrainsCVOS.get(i));
                  map.put("flage1", "false");
                  map.put("flage3", "false");
                  map.put("status", 1);
                  lists.add(map);
               }
            }
         }
         System.out.println("程序运行时间: "+(endTime-startTime)+"ms");
         //色斑图
         String file = "";
         // 第一步,创建一个webbook,对应一个Excel文件
         HSSFWorkbook wb = new HSSFWorkbook();
         // 第二步,在webbook中添加一个sheet,对应Excel文件中的sheet
         HSSFSheet sheet = wb.createSheet("山洪预警表");
         // 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制short
         HSSFRow row = sheet.createRow((int) 0);
         // 第四步,创建单元格,并设置值表头 设置表头居中
         HSSFCellStyle style = wb.createCellStyle();
         //style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建一个居中格式
         HSSFCell cell = row.createCell((short) 0);
         cell.setCellValue("lon");
         cell = row.createCell((short) 1);
         cell.setCellValue("lat");
         cell = row.createCell((short) 2);
         cell.setCellValue("rain");
         for (int i = 0; i < mountainrainsCVOS.size(); i++) {
            row = sheet.createRow((int) i + 1);
            HSSFCell celli = row.createCell((short) 0);
            row.createCell((short) 0).setCellValue(mountainrainsCVOS.get(i).getDj());
            row.createCell((short) 1).setCellValue(mountainrainsCVOS.get(i).getBw());
            if (mountainrainsCVOS.get(i).getCenconding() == null) {
               continue;
            }
            if (mountainrainsCVOS.get(i).getSoilval() > 30) {
               //0.8雨量湿度
               if (mountainrainsCVOS.get(i).getDrp1() > mountainrainsCVOS.get(i).getGohours()) {
                  row.createCell((short) 2).setCellValue(2);
                  continue;
               } else if (mountainrainsCVOS.get(i).getDrp3() > mountainrainsCVOS.get(i).getGthours()) {
                  row.createCell((short) 2).setCellValue(2);
                  continue;
               } else {
                  row.createCell((short) 2).setCellValue(1);
                  continue;
               }
            } else {
               //0.5雨量湿度
               if (mountainrainsCVOS.get(i).getDrp1() > mountainrainsCVOS.get(i).getGohour()) {
                  row.createCell((short) 2).setCellValue(2);
                  continue;
               } else if (mountainrainsCVOS.get(i).getDrp3() > mountainrainsCVOS.get(i).getGthour()) {
                  row.createCell((short) 2).setCellValue(2);
                  continue;
               } else {
                  row.createCell((short) 2).setCellValue(1);
                  continue;
               }
            }
         }
         try {
            file = "D:/mou.xlsx";
            FileOutputStream fout = new FileOutputStream(file);
            wb.write(fout);
            fout.close();
            wb.close();
         } catch (Exception e) {
            e.printStackTrace();
         }
         Process proc;
         Timestamp timestamp = new Timestamp(System.currentTimeMillis());
         long url = timestamp.getTime();
         Map m = new HashMap();
         m.put("url", url + ".png");
         String[] args1 = new String[]{"python", "D:\\fz\\mou.py", String.valueOf(url)};
         try {
            proc = Runtime.getRuntime().exec(args1);
            BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
            String line = null;
            while ((line = in.readLine()) != null) {
               System.out.println(line);
            }
            in.close();
            proc.waitFor();
         } catch (IOException e) {
            e.printStackTrace();
         } catch (InterruptedException e) {
            e.printStackTrace();
         }
         lists.add(m);
         return R.data(lists);
      }
      //第一种方式预警(雨量表数据)
      else {
         //当前时间
         String times = time;
         //一个小时前的时间
         String dateEnd1 = dateEnds1;
         String timess=timei;
         //两个小时前的时间
         String dateEnd2 = dateEnds2;
         //三个小时前的时间
         String dateEnd3 =dateEnds3;
         String dateEnd3 = dateEnds3;
         //六个小时前的时间
         String dateEnd6 =dateEnds6;
         String s = regionWeightService.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 = mountainrainService.selecMone(times, dateEnd1, dateEnd2, dateEnd3, code);
         List<Map<String, Object>> lists = new ArrayList<>();
         for (int i = 0; i < list.size(); i++) {
            Map<String, Object> map = new HashMap<String, Object>();
            BigDecimal w1 = (BigDecimal) list.get(i).get("drp1");
            double drp1 = w1.doubleValue();
            BigDecimal w2 = (BigDecimal) list.get(i).get("drp2");
            double drp2 = w2.doubleValue();
            BigDecimal w3 = (BigDecimal) list.get(i).get("drp3");
            double drp3 = w3.doubleValue();
            if (drp1 > 30) {
               map.put("flage1", "true");
            } else {
               map.put("flage1", "false");
            }
            if (drp2 > 50) {
               map.put("flage2", "true");
            } else {
               map.put("flage2", "false");
            }
            if (drp3 > 80) {
               map.put("flage3", "true");
            } else {
               map.put("flage3", "false");
            }
            map.put("List", list.get(i));
            lists.add(map);
         }
         String fileName = "";
         // 第一步,创建一个webbook,对应一个Excel文件
         HSSFWorkbook wb = new HSSFWorkbook();
         // 第二步,在webbook中添加一个sheet,对应Excel文件中的sheet
         HSSFSheet sheet = wb.createSheet("山洪雨量表");
         // 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制short
         HSSFRow row = sheet.createRow((int) 0);
         // 第四步,创建单元格,并设置值表头 设置表头居中
         HSSFCellStyle style = wb.createCellStyle();
         //style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建一个居中格式
         HSSFCell cell = row.createCell((short) 0);
         cell.setCellValue(new HSSFRichTextString("lon"));
         cell = row.createCell((short) 1);
         cell.setCellValue(new HSSFRichTextString("lat"));
         cell = row.createCell((short) 2);
         cell.setCellValue(new HSSFRichTextString("rain"));
         for (int i = 0; i < list.size(); i++) {
            // 第四步,创建单元格,并设置值
            row = sheet.createRow((int) i + 1);
            HSSFCell celli = row.createCell((short) 0);
            BigDecimal w1 = (BigDecimal) list.get(i).get("drp1");
            double drp1 = w1.doubleValue();
            BigDecimal w2 = (BigDecimal) list.get(i).get("drp2");
            double drp2 = w2.doubleValue();
            BigDecimal w3 = (BigDecimal) list.get(i).get("drp3");
            double drp3 = w3.doubleValue();
            row.createCell((short) 0).setCellValue(list.get(i).get("LGTD").toString());
            row.createCell((short) 1).setCellValue(list.get(i).get("LTTD").toString());
            if (drp1 > 30) {
               row.createCell((short) 2).setCellValue(2);
               continue;
            }
            if (drp2 > 50) {
               row.createCell((short) 2).setCellValue(2);
               continue;
            }
            if (drp3 > 80) {
               row.createCell((short) 2).setCellValue(2);
               continue;
         //二十四个小时前的时间
         String dateEnd24 =dateEnds24;
            } else {
               row.createCell((short) 2).setCellValue(1);
               continue;
            }
         }
         // 第六步,将文件存到指定位置
         try {
            fileName = "D:/moup.xlsx";
            FileOutputStream fout = new FileOutputStream(fileName);
            wb.write(fout);
            fout.close();
            wb.close();
         } catch (Exception e) {
            e.printStackTrace();
         }
         Process proc;
         Timestamp timestamp = new Timestamp(System.currentTimeMillis());
         long url = timestamp.getTime();
         Map m = new HashMap();
         m.put("url", url + ".png");
         String[] args1 = new String[]{"python", "D:\\fz\\moup.py", String.valueOf(url)};
         try {
            proc = Runtime.getRuntime().exec(args1);
            BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
            String line = null;
            while ((line = in.readLine()) != null) {
               System.out.println(line);
            }
            in.close();
            proc.waitFor();
         } catch (IOException e) {
            e.printStackTrace();
         } catch (InterruptedException e) {
            e.printStackTrace();
         }
         lists.add(m);
         return R.data(lists);
      }
         //对应雨量站
         List<MountainrainsCVO> mountainrainsCVOS = mountainrainService.selectcInfo(times, dateEnd24, dateEnd1, dateEnd3, dateEnd6,timess);
   }
   /**
    * 土壤湿度计算
    *
    * @return
    */
   @GetMapping("/soleval")
   public R soleval(String time, int b) {
      //SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
      //String dateNow = sdf.format(new Date());
      String dateNow = time;
      //mountainrainService.soildel();
      int intervals = 32 + b;
      ArrayList passDaysList = new ArrayList<>();
      for (int i = 1 + b; i < intervals; i++) {
         passDaysList.add(getDays(i, false));
      }
      Collections.sort(passDaysList);
      //String s = mountainrainService.selectCode();
      String s = regionWeightService.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);
      for (int i = 0; i < split.length; i++) {
         Integer num = 30;
         double v1 = 0;
         String stcd = null;
         for (int j = 0; j < passDaysList.size() - 2; j++) {
            List<Map<String, Object>> map = mountainrainService.selectMtwo(passDaysList.get(j).toString(), passDaysList.get(j + 1).toString(), code);
            if (map.size() == 0 || i > map.size() - 1) {
               //stcd=split[i];
               break;
            }
            BigDecimal w = (BigDecimal) map.get(i).get("drp");
            double drp = w.doubleValue();
            stcd = map.get(i).get("STCD").toString();
            //计算湿度
            if (j == 0) {
               v1 = formatDouble1((num + drp) * 0.85);
               if (v1 > 60) {
                  v1 = 60;
               }
            } else {
               v1 += drp;
               v1 = formatDouble1(v1 * 0.85);
               if (v1 > 60) {
                  v1 = 60;
               }
            }
         }
         if (stcd != null) {
            if (v1 > 60) {
               mountainrainService.soleInster(stcd, "60", dateNow);
            } else {
               String a = String.valueOf(v1);
               mountainrainService.soleInster(stcd, a, dateNow);
            }
         }
      }
      return R.success("成功");
   }
   public static double formatDouble1(double d) {
      return (double) Math.round(d * 10) / 10;
   }
   private static String getDays(int i, boolean b) {
      Calendar calendar = Calendar.getInstance();
      if (b) {
         calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + i);
      } else {
         calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) - i);
      }
      Date today = calendar.getTime();
      SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd 08:00:00");
      String result = format.format(today);
      return result;
   }
   /**
    * 山洪预报
    *
    * @param addvcd 行政区编码
    * @param time   时间
    * @param intv   降雨时段
    * @return
    */
   @GetMapping("/yuc")
   public R yuc(String addvcd, String time, String intv, String drp, int type) throws ParseException {
      mountainrainService.del();
      List yucpptnList = new ArrayList<>();
      //通过行政区查询站点编码
      List<Map<String, Object>> list = mountainrainService.selectAddvcd(addvcd);
      for (int i = 0; i < list.size(); i++) {
         Yucpptn yucpptn = new Yucpptn();
         //站点编码
         String stcd = list.get(i).get("STCD").toString();
         yucpptn.setSTCD(stcd);
         yucpptn.setTM(time);
         yucpptn.setDRP(drp);
         yucpptn.setINTV(intv);
         yucpptnList.add(yucpptn);
      }
      //预警信息添加
      mountainrainService.insertYuc(yucpptnList);
      //第二种预警
      if (type == 0) {
         List<MountainrainsCVO> mountainrainsCVOS = mountainrainService.selectYum();
         List<Map<String, Object>> lists = new ArrayList<>();
         for (int i = 0; i < mountainrainsCVOS.size(); i++) {
            Map<String, Object> map = new HashMap<String, Object>();
            int Max = mountainrainService.Max(mountainrainsCVOS.get(i).getDrp1(), mountainrainsCVOS.get(i).getDrp3(),
               mountainrainsCVOS.get(i).getGohour(), mountainrainsCVOS.get(i).getGthour());
            /*if(Max==0){
            if (mountainrainsCVOS.get(i).getCenconding() == null) {
               continue;
            }*/
            map.put("List", mountainrainsCVOS.get(i));
            map.put("Max", Max);
            lists.add(map);
            }
            Map<String, Object> map = new HashMap<String, Object>();
            if (mountainrainsCVOS.get(i).getSoilval() > 30) {
               //0.8雨量湿度
               if (mountainrainsCVOS.get(i).getDrp1() > mountainrainsCVOS.get(i).getGohours()) {
                  map.put("List", mountainrainsCVOS.get(i));
                  map.put("flage1", "true");
                  map.put("flage3", "false");
                  map.put("status", 2);
                  lists.add(map);
               } else if (mountainrainsCVOS.get(i).getDrp3() > mountainrainsCVOS.get(i).getGthours()) {
                  map.put("List", mountainrainsCVOS.get(i));
                  map.put("flage1", "false");
                  map.put("flage3", "true");
                  map.put("status", 2);
                  lists.add(map);
               } else {
                  map.put("List", mountainrainsCVOS.get(i));
                  map.put("flage1", "false");
                  map.put("flage3", "false");
                  map.put("status", 2);
                  lists.add(map);
               }
            } else {
               //0.5雨量湿度
               int Max = mountainrainService.Max(mountainrainsCVOS.get(i).getDrp1(), mountainrainsCVOS.get(i).getDrp3(),
                  mountainrainsCVOS.get(i).getGohour(), mountainrainsCVOS.get(i).getGthour());
               if (mountainrainsCVOS.get(i).getDrp1() > mountainrainsCVOS.get(i).getGohour()) {
                  map.put("List", mountainrainsCVOS.get(i));
                  map.put("flage1", "true");
                  map.put("flage3", "false");
                  map.put("status", 1);
                  lists.add(map);
               } else if (mountainrainsCVOS.get(i).getDrp3() > mountainrainsCVOS.get(i).getGthour()) {
                  map.put("List", mountainrainsCVOS.get(i));
                  map.put("flage1", "false");
                  map.put("flage3", "true");
                  map.put("status", 1);
                  lists.add(map);
               } else {
                  map.put("List", mountainrainsCVOS.get(i));
                  map.put("flage1", "false");
                  map.put("flage3", "false");
                  map.put("status", 1);
                  lists.add(map);
               }
            }
         }
         return R.data(lists);
      } else {
         //第一种方式预警(雨量表)
         List<Map<String, Object>> list1 = mountainrainService.selectYup();
         List<Map<String, Object>> listyp = new ArrayList<>();
         for (int i = 0; i < list.size(); i++) {
            Map<String, Object> map = new HashMap<String, Object>();
            String w1 = list1.get(i).get("drp").toString();
            double drp1 = Double.parseDouble(w1);
            String intv1 = list1.get(i).get("INTV").toString();
            //一小时预警
            if (intv1.equals("1")) {
               if (drp1 > 30) {
                  map.put("flage1", "true");
                  map.put("flage2", "false");
                  map.put("flage3", "false");
               } else {
                  map.put("flage1", "false");
                  map.put("flage2", "false");
                  map.put("flage3", "false");
               }
            } else if (intv1.equals("2")) {
               if (drp1 > 50) {
                  map.put("flage2", "true");
                  map.put("flage1", "false");
                  map.put("flage3", "false");
               } else {
                  map.put("flage1", "false");
                  map.put("flage2", "false");
                  map.put("flage3", "false");
               }
            } else {
               if (drp1 > 80) {
                  map.put("flage3", "true");
                  map.put("flage1", "false");
                  map.put("flage2", "false");
               } else {
                  map.put("flage1", "false");
                  map.put("flage2", "false");
                  map.put("flage3", "false");
               }
            }
            map.put("List", list1.get(i));
            listyp.add(map);
         }
         return R.data(listyp);
      }
   }
   /**
    * 中小河流预警
    *
    * @return
    */
   @GetMapping("/selectsmriver")
   public R selectsmriver(String time) throws ParseException {
      Date date = null;
      // 把Date按照格式转换成字符串
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
      try {
         date = sdf.parse(time);
      } catch (ParseException e) {
         e.printStackTrace();
      }
      String dateEnd = sdf.format(date);
      DateFormat sdfc = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
      Date datess = sdfc.parse(time);
      String now = sdfc.format(datess);
      //当前时间的前24小时
      Date beforeHour1 = beforeHourToNowDate(now, 24);
      String begintime24 = sdf.format(beforeHour1);
      List<Map<String, Object>> selctsmriver = mountainrainService.selctsmriver(time, dateEnd, begintime24);
      //预警数据
      List listyj = new ArrayList();
      //无预警数据
      List listzc = new ArrayList();
      for (int i = 0; i < selctsmriver.size(); i++) {
         //警戒水位
         String yjsw = selctsmriver.get(i).get("yjsw").toString();
         Double yjz = Double.parseDouble(yjsw);
         //水位
         String zs = selctsmriver.get(i).get("Z").toString();
         Double z = Double.parseDouble(zs);
         if (z > yjz) {
            listyj.add(selctsmriver.get(i));
         } else {
            listzc.add(selctsmriver.get(i));
         }
      }
      Map map = new HashMap();
      map.put("yj", listyj);
      map.put("zc", listzc);
      List list = new ArrayList();
      list.add(map);
      return R.data(list);
   }
   /**
    * 大江大河预警
    *
    * @return
    */
   @GetMapping("/selectbgriver")
   public R selectbgriver(String time) throws ParseException {
      Date date = null;
      // 把Date按照格式转换成字符串
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
      try {
         date = sdf.parse(time);
      } catch (ParseException e) {
         e.printStackTrace();
      }
      String dateEnd = sdf.format(date);
      DateFormat sdfc = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
      Date datess = sdfc.parse(time);
      String now = sdfc.format(datess);
      //当前时间的前24小时
      Date beforeHour1 = beforeHourToNowDate(now, 24);
      String begintime24 = sdf.format(beforeHour1);
      List<Map<String, Object>> selctsmriver = mountainrainService.selctbgriver(time, dateEnd, begintime24);
      //预警数据
      List listyj = new ArrayList();
      //无预警数据
      List listzc = new ArrayList();
      for (int i = 0; i < selctsmriver.size(); i++) {
         //警戒水位
         String yjsw = selctsmriver.get(i).get("yjsw").toString();
         Double yjz = Double.parseDouble(yjsw);
         //水位
         String zs = selctsmriver.get(i).get("Z").toString();
         Double z = Double.parseDouble(zs);
         if (z > yjz) {
            listyj.add(selctsmriver.get(i));
         } else {
            listzc.add(selctsmriver.get(i));
         }
      }
      Map map = new HashMap();
      map.put("yj", listyj);
      map.put("zc", listzc);
      List list = new ArrayList();
      list.add(map);
      return R.data(list);
   }
   /**
    * 土壤
    *
    * @return
    */
   @GetMapping("/selectTu")
   public R selectTu() {
      List<Map<String, Object>> maps = mountainrainService.selectTu();
      List<Map<Object, Object>> list = new ArrayList();
      //镇
      List<Map<Object, Object>> listz = new ArrayList();
      //乡
      List<Map<Object, Object>> listx = new ArrayList();
      Map mapZ = new HashMap();
      for (int i = 0; i < maps.size(); i++) {
         Map map = new HashMap();
         String village = maps.get(i).get("village").toString();
         String soilval = maps.get(i).get("soilval").toString();
         String county = maps.get(i).get("county").toString();
         String cenconding = maps.get(i).get("cenconding").toString();
         //土壤湿度
         Double soilv = Double.parseDouble(soilval);
         boolean status = village.contains("镇");
         if (status) {
            String str1 = village.substring(0, village.indexOf("镇") + 1);
            map.put("name", str1);
            map.put("soilv", soilv);
            map.put("addvnm", county);
            map.put("cenconding", cenconding);
            listz.add(map);
         } else {
            String str2 = village.substring(0, village.indexOf("乡") + 1);
            map.put("name", str2);
            map.put("soilv", soilv);
            map.put("addvnm", county);
            map.put("cenconding", cenconding);
            listx.add(map);
         }
      }
      System.out.println("镇" + listz.size());
      System.out.println("乡" + listx.size());
      Map<String, List<Map<Object, Object>>> mapMap = new HashMap<>();
      for (Map<Object, Object> newMap : listz) {
         List<Map<Object, Object>> newl = new ArrayList<>();
         // map是否包含此key,若已经包含则添加一个新的数字到对应value集合中
         if (mapMap.containsKey(newMap.get("name").toString())) {
            //mapList.add(Integer.valueOf(newMap.get("C").toString()),newMap);
            mapMap.get(newMap.get("name").toString()).add(newMap);
         } else {
            newl.add(newMap);
            mapMap.put(newMap.get("name").toString(), newl);
         }
      }
      mapZ.put("listz", mapMap);
      //乡
      Map<String, List<Map<Object, Object>>> mapMapx = new HashMap<>();
      for (Map<Object, Object> newMap : listx) {
         List<Map<Object, Object>> newl = new ArrayList<>();
         // map是否包含此key,若已经包含则添加一个新的数字到对应value集合中
         if (mapMapx.containsKey(newMap.get("name").toString())) {
            //mapList.add(Integer.valueOf(newMap.get("C").toString()),newMap);
            mapMapx.get(newMap.get("name").toString()).add(newMap);
         } else {
            newl.add(newMap);
            mapMapx.put(newMap.get("name").toString(), newl);
         }
      }
      mapZ.put("listx", mapMapx);
      list.add(mapZ);
      return R.data(list);
   }
   /**
    * 查询预警1小时
    */
   @GetMapping("/Yi")
   public R Yi(int type, String time, String dateEnds1) {
      //第二种方式预警
      if (type == 0) {
         //当前时间
         String times = time;
         String dateEnd1 = dateEnds1;
         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
         Date date = null;
         try {
            date = sdf.parse(time);
         } catch (ParseException e) {
            e.printStackTrace();
         }
         String stime = sdf.format(date);
         //对应雨量站
         String s = mountainrainService.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<MountainrainsCVO> mountainrainsCVOS = mountainrainService.MountainYi(times, dateEnd1, code, stime);
         List<Map<String, Object>> lists = new ArrayList<>();
         for (int i = 0; i < mountainrainsCVOS.size(); i++) {
            if (mountainrainsCVOS.get(i).getCenconding() == null) {
               continue;
            }
            Map<String, Object> map = new HashMap<String, Object>();
            if (mountainrainsCVOS.get(i).getSoilval() > 30) {
               //0.8雨量湿度
               if (mountainrainsCVOS.get(i).getDrp1() > mountainrainsCVOS.get(i).getGohours()) {
                  int drp1 = mountainrainsCVOS.get(i).getDrp1();
                  Integer gohours = mountainrainsCVOS.get(i).getGohours();
                  float i1 = (float) drp1 - gohours;
                  float v = (float) (Math.round(i1 * 10)) / 10;
                  String a = String.valueOf(v);
                  map.put("List", mountainrainsCVOS.get(i));
                  map.put("flage1", "true");
                  map.put("status", 2);
                  map.put("num", a);
                  lists.add(map);
               } else {
                  map.put("List", mountainrainsCVOS.get(i));
                  map.put("flage1", "false");
                  map.put("status", 2);
                  lists.add(map);
               }
            } else {
               //0.5雨量湿度
               if (mountainrainsCVOS.get(i).getDrp1() > mountainrainsCVOS.get(i).getGohour()) {
                  int drp1 = mountainrainsCVOS.get(i).getDrp1();
                  Integer gohour = mountainrainsCVOS.get(i).getGohour();
                  float i1 = (float) drp1 - gohour;
                  float v = (float) (Math.round(i1 * 10)) / 10;
                  String a = String.valueOf(v);
                  map.put("List", mountainrainsCVOS.get(i));
                  map.put("flage1", "true");
                  map.put("status", 1);
                  map.put("num", a);
                  lists.add(map);
               } else {
                  map.put("List", mountainrainsCVOS.get(i));
                  map.put("flage1", "false");
                  map.put("status", 1);
                  lists.add(map);
               }
            }
         }
         Timestamp timestamp = new Timestamp(System.currentTimeMillis());
         long url = timestamp.getTime();
         Map m = new HashMap();
         m.put("url", url + ".png");
         lists.add(m);
         Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
               //色斑图
               String file = "";
               // 第一步,创建一个webbook,对应一个Excel文件
               HSSFWorkbook wb = new HSSFWorkbook();
               // 第二步,在webbook中添加一个sheet,对应Excel文件中的sheet
               HSSFSheet sheet = wb.createSheet("山洪预警表");
               // 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制short
               HSSFRow row = sheet.createRow((int) 0);
               // 第四步,创建单元格,并设置值表头 设置表头居中
               HSSFCellStyle style = wb.createCellStyle();
               //style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建一个居中格式
               HSSFCell cell = row.createCell((short) 0);
               cell.setCellValue("lon");
               cell = row.createCell((short) 1);
               cell.setCellValue("lat");
               cell = row.createCell((short) 2);
               cell.setCellValue("rain");
               for (int i = 0; i < mountainrainsCVOS.size(); i++) {
                  row = sheet.createRow((int) i + 1);
                  HSSFCell celli = row.createCell((short) 0);
                  row.createCell((short) 0).setCellValue(mountainrainsCVOS.get(i).getDj());
                  row.createCell((short) 1).setCellValue(mountainrainsCVOS.get(i).getBw());
                  if (mountainrainsCVOS.get(i).getCenconding() == null) {
                     continue;
                  }
                  if (mountainrainsCVOS.get(i).getSoilval() > 30) {
                     //0.8雨量湿度
                     if (mountainrainsCVOS.get(i).getDrp1() > mountainrainsCVOS.get(i).getGohours()) {
                        row.createCell((short) 2).setCellValue(2);
                        continue;
                     } else {
                        row.createCell((short) 2).setCellValue(1);
                        continue;
                     }
                  } else {
                     //0.5雨量湿度
                     if (mountainrainsCVOS.get(i).getDrp1() > mountainrainsCVOS.get(i).getGohour()) {
                        row.createCell((short) 2).setCellValue(2);
                        continue;
                     } else {
                        row.createCell((short) 2).setCellValue(1);
                        continue;
                     }
                  }
               }
               try {
                  file = "D:/mou.xlsx";
                  FileOutputStream fout = new FileOutputStream(file);
                  wb.write(fout);
                  fout.close();
                  wb.close();
               } catch (Exception e) {
                  e.printStackTrace();
               }
               Process proc;
               String[] args1 = new String[]{"python", "D:\\fz\\mou.py", String.valueOf(url)};
               try {
                  proc = Runtime.getRuntime().exec(args1);
                  BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
                  String line = null;
                  while ((line = in.readLine()) != null) {
                     System.out.println(line);
                  }
                  in.close();
                  proc.waitFor();
               } catch (IOException e) {
                  e.printStackTrace();
               } catch (InterruptedException e) {
                  e.printStackTrace();
               }
            }
         });
         thread.start();
         return R.data(lists);
      }
      //第一种方式预警(雨量表数据)
      else {
         //当前时间
         String times = time;
         //一个小时前的时间
         String dateEnd1 = dateEnds1;
         String s = regionWeightService.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 = mountainrainService.selecMoneYi(times, dateEnd1, code);
         List<Map<String, Object>> lists = new ArrayList<>();
         for (int i = 0; i < list.size(); i++) {
            Map<String, Object> map = new HashMap<String, Object>();
            BigDecimal w1 = (BigDecimal) list.get(i).get("drp1");
            double drp1 = w1.doubleValue();
            if (drp1 > 30) {
               double v = drp1 - 30;
               double v1 = (double) Math.round(v * 100) / 100;
               String a = String.valueOf(v1);
               map.put("flage1", "true");
               map.put("num", a);
            } else {
               map.put("flage1", "false");
            }
            map.put("List", list.get(i));
            lists.add(map);
         }
         Timestamp timestamp = new Timestamp(System.currentTimeMillis());
         long url = timestamp.getTime();
         Map m = new HashMap();
         m.put("url", url + ".png");
         lists.add(m);
         Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
               String fileName = "";
               // 第一步,创建一个webbook,对应一个Excel文件
               HSSFWorkbook wb = new HSSFWorkbook();
               // 第二步,在webbook中添加一个sheet,对应Excel文件中的sheet
               HSSFSheet sheet = wb.createSheet("山洪雨量表");
               // 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制short
               HSSFRow row = sheet.createRow((int) 0);
               // 第四步,创建单元格,并设置值表头 设置表头居中
               HSSFCellStyle style = wb.createCellStyle();
               //style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建一个居中格式
               HSSFCell cell = row.createCell((short) 0);
               cell.setCellValue(new HSSFRichTextString("lon"));
               cell = row.createCell((short) 1);
               cell.setCellValue(new HSSFRichTextString("lat"));
               cell = row.createCell((short) 2);
               cell.setCellValue(new HSSFRichTextString("rain"));
               for (int i = 0; i < list.size(); i++) {
                  // 第四步,创建单元格,并设置值
                  row = sheet.createRow((int) i + 1);
                  HSSFCell celli = row.createCell((short) 0);
                  BigDecimal w1 = (BigDecimal) list.get(i).get("drp1");
                  double drp1 = w1.doubleValue();
                  row.createCell((short) 0).setCellValue(list.get(i).get("LGTD").toString());
                  row.createCell((short) 1).setCellValue(list.get(i).get("LTTD").toString());
                  if (drp1 > 30) {
                     row.createCell((short) 2).setCellValue(2);
                     continue;
                  } else {
                     row.createCell((short) 2).setCellValue(1);
                     continue;
                  }
               }
               // 第六步,将文件存到指定位置
               try {
                  fileName = "D:/moup.xlsx";
                  FileOutputStream fout = new FileOutputStream(fileName);
                  wb.write(fout);
                  fout.close();
                  wb.close();
               } catch (Exception e) {
                  e.printStackTrace();
               }
               Process proc;
               String[] args1 = new String[]{"python", "D:\\fz\\moup.py", String.valueOf(url)};
               try {
                  proc = Runtime.getRuntime().exec(args1);
                  BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
                  String line = null;
                  while ((line = in.readLine()) != null) {
                     System.out.println(line);
                  }
                  in.close();
                  proc.waitFor();
               } catch (IOException e) {
                  e.printStackTrace();
               } catch (InterruptedException e) {
                  e.printStackTrace();
               }
            }
         });
         thread.start();
         return R.data(lists);
      }
   }
   /**
    * 查询预警2小时
    */
   @GetMapping("/Tw")
   public R Tw(int type, String time, String dateEnds2) {
      //第二种方式预警
      if (type == 0) {
         //当前时间
         String times = time;
         //2个小时前的时间
         String dateEnd2 = dateEnds2;
         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
         Date date = null;
         try {
            date = sdf.parse(time);
         } catch (ParseException e) {
            e.printStackTrace();
         }
         String stime = sdf.format(date);
         //对应雨量站
         String s = mountainrainService.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<MountainrainsCVO> mountainrainsCVOS = mountainrainService.MountainTw(times, dateEnd2, code, stime);
         List<Map<String, Object>> lists = new ArrayList<>();
         for (int i = 0; i < mountainrainsCVOS.size(); i++) {
            if (mountainrainsCVOS.get(i).getCenconding() == null) {
               continue;
            }
            Map<String, Object> map = new HashMap<String, Object>();
            if (mountainrainsCVOS.get(i).getSoilval() > 30) {
               //0.8雨量湿度
               if (mountainrainsCVOS.get(i).getDrp1() > mountainrainsCVOS.get(i).getGohours()) {
                  int drp1 = mountainrainsCVOS.get(i).getDrp1();
                  Integer gohours = mountainrainsCVOS.get(i).getGohours();
                  float i1 = (float) drp1 - gohours;
                  float v = (float) (Math.round(i1 * 10)) / 10;
                  String a = String.valueOf(v);
                  map.put("List", mountainrainsCVOS.get(i));
                  map.put("flage1", "true");
                  map.put("flage3", "false");
                  map.put("status", 2);
                  map.put("num", a);
                  lists.add(map);
               } else if (mountainrainsCVOS.get(i).getDrp3() > mountainrainsCVOS.get(i).getGthours()) {
                  map.put("List", mountainrainsCVOS.get(i));
                  map.put("flage1", "false");
                  map.put("flage3", "true");
                  map.put("status", 2);
                  lists.add(map);
               } else {
                  map.put("List", mountainrainsCVOS.get(i));
                  map.put("flage1", "false");
                  map.put("flage3", "false");
                  map.put("status", 2);
                  lists.add(map);
               }
            } else {
               //0.5雨量湿度
               if (mountainrainsCVOS.get(i).getDrp1() > mountainrainsCVOS.get(i).getGohour()) {
                  int drp1 = mountainrainsCVOS.get(i).getDrp1();
                  Integer gohour = mountainrainsCVOS.get(i).getGohour();
                  float i1 = (float) drp1 - gohour;
                  float v = (float) (Math.round(i1 * 10)) / 10;
                  String a = String.valueOf(v);
                  map.put("List", mountainrainsCVOS.get(i));
                  map.put("flage1", "true");
                  map.put("flage3", "false");
                  map.put("status", 1);
                  map.put("num", a);
                  lists.add(map);
               } else if (mountainrainsCVOS.get(i).getDrp3() > mountainrainsCVOS.get(i).getGthour()) {
                  map.put("List", mountainrainsCVOS.get(i));
                  map.put("flage1", "false");
                  map.put("flage3", "true");
                  map.put("status", 1);
                  lists.add(map);
               } else {
                  map.put("List", mountainrainsCVOS.get(i));
                  map.put("flage1", "false");
                  map.put("flage3", "false");
                  map.put("status", 1);
                  lists.add(map);
               }
            }
         }
         Timestamp timestamp = new Timestamp(System.currentTimeMillis());
         long url = timestamp.getTime();
         Map m = new HashMap();
         m.put("url", url + ".png");
         lists.add(m);
         Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
               //色斑图
               String file = "";
               // 第一步,创建一个webbook,对应一个Excel文件
               HSSFWorkbook wb = new HSSFWorkbook();
               // 第二步,在webbook中添加一个sheet,对应Excel文件中的sheet
               HSSFSheet sheet = wb.createSheet("山洪预警表");
               // 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制short
               HSSFRow row = sheet.createRow((int) 0);
               // 第四步,创建单元格,并设置值表头 设置表头居中
               HSSFCellStyle style = wb.createCellStyle();
               //style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建一个居中格式
               HSSFCell cell = row.createCell((short) 0);
               cell.setCellValue("lon");
               cell = row.createCell((short) 1);
               cell.setCellValue("lat");
               cell = row.createCell((short) 2);
               cell.setCellValue("rain");
               for (int i = 0; i < mountainrainsCVOS.size(); i++) {
                  row = sheet.createRow((int) i + 1);
                  HSSFCell celli = row.createCell((short) 0);
                  row.createCell((short) 0).setCellValue(mountainrainsCVOS.get(i).getDj());
                  row.createCell((short) 1).setCellValue(mountainrainsCVOS.get(i).getBw());
                  if (mountainrainsCVOS.get(i).getCenconding() == null) {
                     continue;
                  }
                  if (mountainrainsCVOS.get(i).getSoilval() > 30) {
                     //0.8雨量湿度
                     if (mountainrainsCVOS.get(i).getDrp1() > mountainrainsCVOS.get(i).getGohours()) {
                        row.createCell((short) 2).setCellValue(2);
                        continue;
                     } else if (mountainrainsCVOS.get(i).getDrp3() > mountainrainsCVOS.get(i).getGthours()) {
                        row.createCell((short) 2).setCellValue(2);
                        continue;
                     } else {
                        row.createCell((short) 2).setCellValue(1);
                        continue;
                     }
                  } else {
                     //0.5雨量湿度
                     if (mountainrainsCVOS.get(i).getDrp1() > mountainrainsCVOS.get(i).getGohour()) {
                        row.createCell((short) 2).setCellValue(2);
                        continue;
                     } else if (mountainrainsCVOS.get(i).getDrp3() > mountainrainsCVOS.get(i).getGthour()) {
                        row.createCell((short) 2).setCellValue(2);
                        continue;
                     } else {
                        row.createCell((short) 2).setCellValue(1);
                        continue;
                     }
                  }
               }
               try {
                  file = "D:/mou.xlsx";
                  FileOutputStream fout = new FileOutputStream(file);
                  wb.write(fout);
                  fout.close();
                  wb.close();
               } catch (Exception e) {
                  e.printStackTrace();
               }
               Process proc;
               String[] args1 = new String[]{"python", "D:\\fz\\mou.py", String.valueOf(url)};
               try {
                  proc = Runtime.getRuntime().exec(args1);
                  BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
                  String line = null;
                  while ((line = in.readLine()) != null) {
                     System.out.println(line);
                  }
                  in.close();
                  proc.waitFor();
               } catch (IOException e) {
                  e.printStackTrace();
               } catch (InterruptedException e) {
                  e.printStackTrace();
               }
            }
         });
         thread.start();
         return R.data(lists);
      }
      //第一种方式预警(雨量表数据)
      else {
         //当前时间
         String times = time;
         //两个小时前的时间
         String dateEnd2 = dateEnds2;
         String s = regionWeightService.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 = mountainrainService.selecMoneYi(times, dateEnd2, code);
         List<Map<String, Object>> lists = new ArrayList<>();
         for (int i = 0; i < list.size(); i++) {
            Map<String, Object> map = new HashMap<String, Object>();
            BigDecimal w1 = (BigDecimal) list.get(i).get("drp1");
            double drp1 = w1.doubleValue();
            if (drp1 > 50) {
               double v = drp1 - 50;
               double v1 = (double) Math.round(v * 10) / 10;
               map.put("flage2", "true");
               map.put("num", v1);
            } else {
               map.put("flage2", "false");
            }
            map.put("List", list.get(i));
            lists.add(map);
         }
         Timestamp timestamp = new Timestamp(System.currentTimeMillis());
         long url = timestamp.getTime();
         Map m = new HashMap();
         m.put("url", url + ".png");
         lists.add(m);
         Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
               String fileName = "";
               // 第一步,创建一个webbook,对应一个Excel文件
               HSSFWorkbook wb = new HSSFWorkbook();
               // 第二步,在webbook中添加一个sheet,对应Excel文件中的sheet
               HSSFSheet sheet = wb.createSheet("山洪雨量表");
               // 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制short
               HSSFRow row = sheet.createRow((int) 0);
               // 第四步,创建单元格,并设置值表头 设置表头居中
               HSSFCellStyle style = wb.createCellStyle();
               //style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建一个居中格式
               HSSFCell cell = row.createCell((short) 0);
               cell.setCellValue(new HSSFRichTextString("lon"));
               cell = row.createCell((short) 1);
               cell.setCellValue(new HSSFRichTextString("lat"));
               cell = row.createCell((short) 2);
               cell.setCellValue(new HSSFRichTextString("rain"));
               for (int i = 0; i < list.size(); i++) {
                  // 第四步,创建单元格,并设置值
                  row = sheet.createRow((int) i + 1);
                  HSSFCell celli = row.createCell((short) 0);
                  BigDecimal w1 = (BigDecimal) list.get(i).get("drp1");
                  double drp1 = w1.doubleValue();
                  row.createCell((short) 0).setCellValue(list.get(i).get("LGTD").toString());
                  row.createCell((short) 1).setCellValue(list.get(i).get("LTTD").toString());
                  if (drp1 > 50) {
                     row.createCell((short) 2).setCellValue(2);
                     continue;
                  } else {
                     row.createCell((short) 2).setCellValue(1);
                     continue;
                  }
               }
               // 第六步,将文件存到指定位置
               try {
                  fileName = "D:/moup.xlsx";
                  FileOutputStream fout = new FileOutputStream(fileName);
                  wb.write(fout);
                  fout.close();
                  wb.close();
               } catch (Exception e) {
                  e.printStackTrace();
               }
               Process proc;
               Timestamp timestamp = new Timestamp(System.currentTimeMillis());
               long url = timestamp.getTime();
               Map m = new HashMap();
               m.put("url", url + ".png");
               String[] args1 = new String[]{"python", "D:\\fz\\moup.py", String.valueOf(url)};
               try {
                  proc = Runtime.getRuntime().exec(args1);
                  BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
                  String line = null;
                  while ((line = in.readLine()) != null) {
                     System.out.println(line);
                  }
                  in.close();
                  proc.waitFor();
               } catch (IOException e) {
                  e.printStackTrace();
               } catch (InterruptedException e) {
                  e.printStackTrace();
               }
            }
         });
         thread.start();
         return R.data(lists);
      }
   }
   /**
    * 查询预警3小时
    */
   @GetMapping("/Tr")
   public R Tr(int type, String time, String dateEnds3) {
      //第二种方式预警
      if (type == 0) {
         //当前时间
         String times = time;
         //2个小时前的时间
         String dateEnd3 = dateEnds3;
         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
         Date date = null;
         try {
            date = sdf.parse(time);
         } catch (ParseException e) {
            e.printStackTrace();
         }
         String stime = sdf.format(date);
         //对应雨量站
         String s = mountainrainService.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<MountainrainsCVO> mountainrainsCVOS = mountainrainService.MountainTr(times, dateEnd3, code, stime);
         List<Map<String, Object>> lists = new ArrayList<>();
         for (int i = 0; i < mountainrainsCVOS.size(); i++) {
            if (mountainrainsCVOS.get(i).getCenconding() == null) {
               continue;
            }
            Map<String, Object> map = new HashMap<String, Object>();
            if (mountainrainsCVOS.get(i).getSoilval() > 30) {
               //0.8雨量湿度
               if (mountainrainsCVOS.get(i).getDrp1() > mountainrainsCVOS.get(i).getGthours()) {
                  int drp1 = mountainrainsCVOS.get(i).getDrp1();
                  Integer gohours = mountainrainsCVOS.get(i).getGohours();
                  float i1 = (float) drp1 - gohours;
                  float v = (float) (Math.round(i1 * 10)) / 10;
                  String a = String.valueOf(v);
                  map.put("List", mountainrainsCVOS.get(i));
                  map.put("flage3", "true");
                  map.put("status", 2);
                  map.put("num", a);
                  lists.add(map);
               } else {
                  map.put("List", mountainrainsCVOS.get(i));
                  map.put("flage3", "false");
                  map.put("status", 2);
                  lists.add(map);
               }
            } else {
               //0.5雨量湿度
               if (mountainrainsCVOS.get(i).getDrp1() > mountainrainsCVOS.get(i).getGthour()) {
                  int drp1 = mountainrainsCVOS.get(i).getDrp1();
                  Integer gohour = mountainrainsCVOS.get(i).getGohour();
                  float i1 = (float) drp1 - gohour;
                  float v = (float) (Math.round(i1 * 10)) / 10;
                  String a = String.valueOf(v);
                  map.put("List", mountainrainsCVOS.get(i));
                  map.put("flage3", "true");
                  map.put("status", 1);
                  map.put("num", a);
                  lists.add(map);
               } else {
                  map.put("List", mountainrainsCVOS.get(i));
                  map.put("flage3", "false");
                  map.put("status", 1);
                  lists.add(map);
               }
            }
         }
         Timestamp timestamp = new Timestamp(System.currentTimeMillis());
         long url = timestamp.getTime();
         Map m = new HashMap();
         m.put("url", url + ".png");
         lists.add(m);
         Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
               //色斑图
               String file = "";
               // 第一步,创建一个webbook,对应一个Excel文件
               HSSFWorkbook wb = new HSSFWorkbook();
               // 第二步,在webbook中添加一个sheet,对应Excel文件中的sheet
               HSSFSheet sheet = wb.createSheet("山洪预警表");
               // 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制short
               HSSFRow row = sheet.createRow((int) 0);
               // 第四步,创建单元格,并设置值表头 设置表头居中
               HSSFCellStyle style = wb.createCellStyle();
               //style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建一个居中格式
               HSSFCell cell = row.createCell((short) 0);
               cell.setCellValue("lon");
               cell = row.createCell((short) 1);
               cell.setCellValue("lat");
               cell = row.createCell((short) 2);
               cell.setCellValue("rain");
               for (int i = 0; i < mountainrainsCVOS.size(); i++) {
                  row = sheet.createRow((int) i + 1);
                  HSSFCell celli = row.createCell((short) 0);
                  row.createCell((short) 0).setCellValue(mountainrainsCVOS.get(i).getDj());
                  row.createCell((short) 1).setCellValue(mountainrainsCVOS.get(i).getBw());
                  if (mountainrainsCVOS.get(i).getCenconding() == null) {
                     continue;
                  }
                  if (mountainrainsCVOS.get(i).getSoilval() > 30) {
                     //0.8雨量湿度
                     if (mountainrainsCVOS.get(i).getDrp1() > mountainrainsCVOS.get(i).getGthours()) {
                        row.createCell((short) 2).setCellValue(2);
                        continue;
                     } else {
                        row.createCell((short) 2).setCellValue(1);
                        continue;
                     }
                  } else {
                     //0.5雨量湿度
                     if (mountainrainsCVOS.get(i).getDrp1() > mountainrainsCVOS.get(i).getGthour()) {
                        row.createCell((short) 2).setCellValue(2);
                        continue;
                     } else {
                        row.createCell((short) 2).setCellValue(1);
                        continue;
                     }
                  }
               }
               try {
                  file = "D:/mou.xlsx";
                  FileOutputStream fout = new FileOutputStream(file);
                  wb.write(fout);
                  fout.close();
                  wb.close();
               } catch (Exception e) {
                  e.printStackTrace();
               }
               Process proc;
               String[] args1 = new String[]{"python", "D:\\fz\\mou.py", String.valueOf(url)};
               try {
                  proc = Runtime.getRuntime().exec(args1);
                  BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
                  String line = null;
                  while ((line = in.readLine()) != null) {
                     System.out.println(line);
                  }
                  in.close();
                  proc.waitFor();
               } catch (IOException e) {
                  e.printStackTrace();
               } catch (InterruptedException e) {
                  e.printStackTrace();
               }
            }
         });
         thread.start();
         return R.data(lists);
      }
      //第一种方式预警(雨量表数据)
      else {
         //当前时间
         String times = time;
         //两个小时前的时间
         String dateEnd3 = dateEnds3;
         String s = regionWeightService.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 = mountainrainService.selecMoneYi(times, dateEnd3, code);
         List<Map<String, Object>> lists = new ArrayList<>();
         for (int i = 0; i < list.size(); i++) {
            Map<String, Object> map = new HashMap<String, Object>();
            BigDecimal w1 = (BigDecimal) list.get(i).get("drp1");
            double drp1 = w1.doubleValue();
            if (drp1 > 80) {
               double v = drp1 - 80;
               double v1 = (double) Math.round(v * 10) / 10;
               map.put("flage3", "true");
               map.put("num", v1);
            } else {
               map.put("flage3", "false");
            }
            map.put("List", list.get(i));
            lists.add(map);
         }
         Timestamp timestamp = new Timestamp(System.currentTimeMillis());
         long url = timestamp.getTime();
         Map m = new HashMap();
         m.put("url", url + ".png");
         lists.add(m);
         Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
               String fileName = "";
               // 第一步,创建一个webbook,对应一个Excel文件
               HSSFWorkbook wb = new HSSFWorkbook();
               // 第二步,在webbook中添加一个sheet,对应Excel文件中的sheet
               HSSFSheet sheet = wb.createSheet("山洪雨量表");
               // 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制short
               HSSFRow row = sheet.createRow((int) 0);
               // 第四步,创建单元格,并设置值表头 设置表头居中
               HSSFCellStyle style = wb.createCellStyle();
               //style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建一个居中格式
               HSSFCell cell = row.createCell((short) 0);
               cell.setCellValue(new HSSFRichTextString("lon"));
               cell = row.createCell((short) 1);
               cell.setCellValue(new HSSFRichTextString("lat"));
               cell = row.createCell((short) 2);
               cell.setCellValue(new HSSFRichTextString("rain"));
               for (int i = 0; i < list.size(); i++) {
                  // 第四步,创建单元格,并设置值
                  row = sheet.createRow((int) i + 1);
                  HSSFCell celli = row.createCell((short) 0);
                  BigDecimal w1 = (BigDecimal) list.get(i).get("drp1");
                  double drp1 = w1.doubleValue();
                  row.createCell((short) 0).setCellValue(list.get(i).get("LGTD").toString());
                  row.createCell((short) 1).setCellValue(list.get(i).get("LTTD").toString());
                  if (drp1 > 80) {
                     row.createCell((short) 2).setCellValue(2);
                     continue;
                  } else {
                     row.createCell((short) 2).setCellValue(1);
                     continue;
                  }
               }
               // 第六步,将文件存到指定位置
               try {
                  fileName = "D:/moup.xlsx";
                  FileOutputStream fout = new FileOutputStream(fileName);
                  wb.write(fout);
                  fout.close();
                  wb.close();
               } catch (Exception e) {
                  e.printStackTrace();
               }
               Process proc;
               String[] args1 = new String[]{"python", "D:\\fz\\moup.py", String.valueOf(url)};
               try {
                  proc = Runtime.getRuntime().exec(args1);
                  BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
                  String line = null;
                  while ((line = in.readLine()) != null) {
                     System.out.println(line);
                  }
                  in.close();
                  proc.waitFor();
               } catch (IOException e) {
                  e.printStackTrace();
               } catch (InterruptedException e) {
                  e.printStackTrace();
               }
            }
         });
         thread.start();
         return R.data(lists);
      }
   }
   /**
    * 土壤色斑图
    */
   @GetMapping("/selectS")
   public R selectS(String time) {
      List<Map<String, Object>> list = mountainrainService.selectS(time);
      String fileName = "";
      // 第一步,创建一个webbook,对应一个Excel文件
      HSSFWorkbook wb = new HSSFWorkbook();
      // 第二步,在webbook中添加一个sheet,对应Excel文件中的sheet
      HSSFSheet sheet = wb.createSheet("土壤色斑图");
      // 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制short
      HSSFRow row = sheet.createRow((int) 0);
      // 第四步,创建单元格,并设置值表头 设置表头居中
      HSSFCellStyle style = wb.createCellStyle();
      //style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建一个居中格式
      HSSFCell cell = row.createCell((short) 0);
      cell.setCellValue(new HSSFRichTextString("lon"));
      cell = row.createCell((short) 1);
      cell.setCellValue(new HSSFRichTextString("lat"));
      cell = row.createCell((short) 2);
      cell.setCellValue(new HSSFRichTextString("rain"));
      for (int i = 0; i < list.size(); i++) {
         String stcd = list.get(i).get("stcd").toString();
         // 第四步,创建单元格,并设置值
         row = sheet.createRow((int) i + 1);
         HSSFCell celli = row.createCell((short) 0);
         row.createCell((short) 0).setCellValue(list.get(i).get("LGTD").toString());
         row.createCell((short) 1).setCellValue(list.get(i).get("LTTD").toString());
         row.createCell((short) 2).setCellValue(list.get(i).get("soilval").toString());
         if (stcd.equals("62455350")) {
            row.createCell((short) 0).setCellValue("117.344876");
            row.createCell((short) 1).setCellValue("27.827067");
            row.createCell((short) 2).setCellValue(list.get(i).get("soilval").toString());
         }
         if (stcd.equals("62334845")) {
            row.createCell((short) 0).setCellValue("115.625720");
            row.createCell((short) 1).setCellValue("27.152794");
            row.createCell((short) 2).setCellValue(list.get(i).get("soilval").toString());
         }
         if (stcd.equals("62433800")) {
            row.createCell((short) 0).setCellValue("115.618546");
            row.createCell((short) 1).setCellValue("27.683604");
            row.createCell((short) 2).setCellValue(list.get(i).get("soilval").toString());
         }
         if (stcd.equals("62436760")) {
            row.createCell((short) 0).setCellValue("116.060889");
            row.createCell((short) 1).setCellValue("28.216806");
            row.createCell((short) 2).setCellValue(list.get(i).get("soilval").toString());
         }
         if (stcd.equals("62437250")) {
            row.createCell((short) 0).setCellValue("116.622783");
            row.createCell((short) 1).setCellValue("28.489384");
            row.createCell((short) 2).setCellValue(list.get(i).get("soilval").toString());
         }
         if (stcd.equals("62433700")) {
            row.createCell((short) 0).setCellValue("115.558771");
            row.createCell((short) 1).setCellValue("27.518623");
            row.createCell((short) 2).setCellValue(list.get(i).get("soilval").toString());
         }
         if (stcd.equals("62425740")) {
            row.createCell((short) 0).setCellValue("117.208587");
            row.createCell((short) 1).setCellValue("27.298647");
            row.createCell((short) 2).setCellValue(list.get(i).get("soilval").toString());
         }
         if (stcd.equals("62437235")) {
            row.createCell((short) 0).setCellValue("116.780591");
            row.createCell((short) 1).setCellValue("28.391352");
            row.createCell((short) 2).setCellValue(list.get(i).get("soilval").toString());
         }
         if (stcd.equals("62437250")) {
            row.createCell((short) 0).setCellValue("116.555834");
            row.createCell((short) 1).setCellValue("28.518077");
            row.createCell((short) 2).setCellValue(list.get(i).get("soilval").toString());
         }
      }
      // 第六步,将文件存到指定位置
      try {
         fileName = "D:/tur.xlsx";
         FileOutputStream fout = new FileOutputStream(fileName);
         wb.write(fout);
         fout.close();
         wb.close();
      } catch (Exception e) {
         e.printStackTrace();
      }
      Process proc;
      Timestamp timestamp = new Timestamp(System.currentTimeMillis());
      long url = timestamp.getTime();
      Map m = new HashMap();
      m.put("url", url + ".png");
      String[] args1 = new String[]{"python", "D:\\fz\\tur.py", String.valueOf(url)};
      try {
         proc = Runtime.getRuntime().exec(args1);
         BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
         String line = null;
         while ((line = in.readLine()) != null) {
            System.out.println(line);
         }
         in.close();
         proc.waitFor();
      } catch (IOException e) {
         e.printStackTrace();
      } catch (InterruptedException e) {
         e.printStackTrace();
      }
      return R.data(m);
   }
   public static Date beforeHourToNowDate(String date, int hours) {
      Calendar c = Calendar.getInstance();
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
      try {
         c.setTime(sdf.parse(date));
         c.set(Calendar.HOUR_OF_DAY, c.get(Calendar.HOUR_OF_DAY) - hours);
      } catch (Exception e) {
         e.printStackTrace();
      }
      return c.getTime();
   }
   private static String ss(int i, int j, boolean b) {
      Calendar calendar = Calendar.getInstance();
      if (b) {
         calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + i);
      } else {
         calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) - i);
      }
      calendar.add(Calendar.DATE, -j);
      Date today = calendar.getTime();
      SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd 08:00:00");
      String result = format.format(today);
      return result;
   }
   @GetMapping("/cs")
   public R cs() {
      for (int c = 2; c < 25; c++) {
         Calendar calendar = Calendar.getInstance();
         calendar.add(Calendar.DATE, -c); //得到前一天
         Date date = calendar.getTime();
         DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
         String dateNow = df.format(df.format(date));
         int intervals = 31;
         ArrayList passDaysList = new ArrayList<>();
         for (int i = 0; i < intervals; i++) {
            passDaysList.add(ss(i, c, false));
         }
         Collections.sort(passDaysList);
         //String s = mountainrainService.selectCode();
         String s = regionWeightService.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);
         for (int i = 0; i < split.length; i++) {
            Integer num = 30;
            double v1 = 0;
            String stcd = null;
            for (int j = 0; j < passDaysList.size() - 2; j++) {
               List<Map<String, Object>> map = mountainrainService.selectMtwo(passDaysList.get(j).toString(), passDaysList.get(j + 1).toString(), code);
               if (map.size() == 0 || i > map.size() - 1) {
                  //stcd=split[i];
                  break;
               }
               BigDecimal w = (BigDecimal) map.get(i).get("drp");
               double drp = w.doubleValue();
               stcd = map.get(i).get("STCD").toString();
               //计算湿度
               if (j == 0) {
                  v1 = formatDouble1((num + drp) * 0.85);
                  if (v1 > 60) {
                     v1 = 60;
                  }
               } else {
                  v1 += drp;
                  v1 = formatDouble1(v1 * 0.85);
                  if (v1 > 60) {
                     v1 = 60;
                  }
               }
            }
            if (stcd != null) {
               if (v1 > 60) {
                  mountainrainService.soleInster(stcd, "60", dateNow);
               } else {
                  String a = String.valueOf(v1);
                  mountainrainService.soleInster(stcd, a, dateNow);
               }
            }
         }
      }
      return R.data("成功");
   }
}