diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index 913a287..71c67c0 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -36,6 +36,16 @@
provided
+
+ com.alibaba
+ fastjson
+ ${fastjson.version}
+
+
+ com.squareup.okhttp3
+ okhttp
+ 4.9.1
+
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index 913a287..71c67c0 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -36,6 +36,16 @@
provided
+
+ com.alibaba
+ fastjson
+ ${fastjson.version}
+
+
+ com.squareup.okhttp3
+ okhttp
+ 4.9.1
+
diff --git a/casic-server/src/main/java/com/casic/missiles/job/TyphoonQuartzJob.java b/casic-server/src/main/java/com/casic/missiles/job/TyphoonQuartzJob.java
new file mode 100644
index 0000000..87b8c72
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/job/TyphoonQuartzJob.java
@@ -0,0 +1,27 @@
+package com.casic.missiles.job;
+
+import com.casic.missiles.modular.system.service.ITyphoonService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+/**
+ * 台风数据定时任务,每小时执行一次
+ *
+ * @author a203
+ * @Description 依赖casic-job-quartz,并在CasicApplication上增加注解 @EnableScheduling
+ */
+@Slf4j
+@Component
+public class TyphoonQuartzJob {
+ private final ITyphoonService typhoonService;
+
+ public TyphoonQuartzJob(ITyphoonService typhoonService) {
+ this.typhoonService = typhoonService;
+ }
+
+ @Scheduled(cron = "0 0 */1 * * ?")
+ public void execute() {
+ typhoonService.saveTyphoon();
+ }
+}
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index 913a287..71c67c0 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -36,6 +36,16 @@
provided
+
+ com.alibaba
+ fastjson
+ ${fastjson.version}
+
+
+ com.squareup.okhttp3
+ okhttp
+ 4.9.1
+
diff --git a/casic-server/src/main/java/com/casic/missiles/job/TyphoonQuartzJob.java b/casic-server/src/main/java/com/casic/missiles/job/TyphoonQuartzJob.java
new file mode 100644
index 0000000..87b8c72
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/job/TyphoonQuartzJob.java
@@ -0,0 +1,27 @@
+package com.casic.missiles.job;
+
+import com.casic.missiles.modular.system.service.ITyphoonService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+/**
+ * 台风数据定时任务,每小时执行一次
+ *
+ * @author a203
+ * @Description 依赖casic-job-quartz,并在CasicApplication上增加注解 @EnableScheduling
+ */
+@Slf4j
+@Component
+public class TyphoonQuartzJob {
+ private final ITyphoonService typhoonService;
+
+ public TyphoonQuartzJob(ITyphoonService typhoonService) {
+ this.typhoonService = typhoonService;
+ }
+
+ @Scheduled(cron = "0 0 */1 * * ?")
+ public void execute() {
+ typhoonService.saveTyphoon();
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DemoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DemoController.java
deleted file mode 100644
index 87b6fec..0000000
--- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DemoController.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.casic.missiles.modular.system.controller;
-
-
-import com.casic.missiles.model.application.event.core.EventPublisher;
-import com.casic.missiles.model.application.event.enums.ModelEventTypeEnum;
-import com.casic.missiles.model.response.ResponseData;
-import com.casic.missiles.modular.system.event.UserEvent;
-import com.casic.missiles.modular.system.model.User;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.ResponseBody;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * @ClassName DemoController
- * @Description TODO
- * @Author lenovo
- * @Date 2020/6/13 15:38
- * @Version 1.0
- */
-@RestController
-@RequestMapping("/demo")
-public class DemoController {
- @Autowired
- private EventPublisher publisher;
-
- /**
- * 获取mockToken
- */
- @PostMapping("/list")
- @ResponseBody
- public Object list() {
- User user = new User();
- user.setAccount("张三");
- publisher.publishEvent(new UserEvent(ModelEventTypeEnum.ADD, user));
- return ResponseData.success();
- }
-
-
-}
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index 913a287..71c67c0 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -36,6 +36,16 @@
provided
+
+ com.alibaba
+ fastjson
+ ${fastjson.version}
+
+
+ com.squareup.okhttp3
+ okhttp
+ 4.9.1
+
diff --git a/casic-server/src/main/java/com/casic/missiles/job/TyphoonQuartzJob.java b/casic-server/src/main/java/com/casic/missiles/job/TyphoonQuartzJob.java
new file mode 100644
index 0000000..87b8c72
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/job/TyphoonQuartzJob.java
@@ -0,0 +1,27 @@
+package com.casic.missiles.job;
+
+import com.casic.missiles.modular.system.service.ITyphoonService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+/**
+ * 台风数据定时任务,每小时执行一次
+ *
+ * @author a203
+ * @Description 依赖casic-job-quartz,并在CasicApplication上增加注解 @EnableScheduling
+ */
+@Slf4j
+@Component
+public class TyphoonQuartzJob {
+ private final ITyphoonService typhoonService;
+
+ public TyphoonQuartzJob(ITyphoonService typhoonService) {
+ this.typhoonService = typhoonService;
+ }
+
+ @Scheduled(cron = "0 0 */1 * * ?")
+ public void execute() {
+ typhoonService.saveTyphoon();
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DemoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DemoController.java
deleted file mode 100644
index 87b6fec..0000000
--- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DemoController.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.casic.missiles.modular.system.controller;
-
-
-import com.casic.missiles.model.application.event.core.EventPublisher;
-import com.casic.missiles.model.application.event.enums.ModelEventTypeEnum;
-import com.casic.missiles.model.response.ResponseData;
-import com.casic.missiles.modular.system.event.UserEvent;
-import com.casic.missiles.modular.system.model.User;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.ResponseBody;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * @ClassName DemoController
- * @Description TODO
- * @Author lenovo
- * @Date 2020/6/13 15:38
- * @Version 1.0
- */
-@RestController
-@RequestMapping("/demo")
-public class DemoController {
- @Autowired
- private EventPublisher publisher;
-
- /**
- * 获取mockToken
- */
- @PostMapping("/list")
- @ResponseBody
- public Object list() {
- User user = new User();
- user.setAccount("张三");
- publisher.publishEvent(new UserEvent(ModelEventTypeEnum.ADD, user));
- return ResponseData.success();
- }
-
-
-}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/EnvironmentController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/EnvironmentController.java
new file mode 100644
index 0000000..44a55d6
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/EnvironmentController.java
@@ -0,0 +1,62 @@
+package com.casic.missiles.modular.system.controller;
+
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.OceanDetailDTO;
+import com.casic.missiles.modular.system.dto.TyphoonDTO;
+import com.casic.missiles.modular.system.dto.TyphoonDetailDTO;
+import com.casic.missiles.modular.system.service.IOceanService;
+import com.casic.missiles.modular.system.service.ITyphoonService;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.List;
+
+/**
+ * 环境控制器
+ *
+ * @author a203
+ */
+@Controller
+@RequestMapping("/environment")
+public class EnvironmentController {
+ private final ITyphoonService typhoonService;
+ private final IOceanService oceanService;
+
+ public EnvironmentController(ITyphoonService typhoonService, IOceanService oceanService) {
+ this.typhoonService = typhoonService;
+ this.oceanService = oceanService;
+ }
+
+ /**
+ * 台风列表
+ */
+ @GetMapping(value = "/typhoonList")
+ @ResponseBody
+ public Object list() {
+ List typhoonList = typhoonService.currentTyphoonList();
+ return ResponseData.success(typhoonList);
+ }
+
+ /**
+ * 台风详情
+ */
+ @GetMapping(value = "/typhoonDetail/{typhoonId}")
+ @ResponseBody
+ public Object detail(@PathVariable("typhoonId") String typhoonId) {
+ TyphoonDetailDTO detailDTO = typhoonService.typhoonDetail(typhoonId);
+ return ResponseData.success(detailDTO);
+ }
+
+ /**
+ * 洋流详情
+ */
+ @GetMapping(value = "/ocean")
+ @ResponseBody
+ public Object oceanDetail(double lng, double lat, String date, String days, String hour) {
+ OceanDetailDTO detailDTO = oceanService.oceanDetail(lng, lat, date, days, hour);
+ return ResponseData.success(detailDTO);
+ }
+}
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index 913a287..71c67c0 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -36,6 +36,16 @@
provided
+
+ com.alibaba
+ fastjson
+ ${fastjson.version}
+
+
+ com.squareup.okhttp3
+ okhttp
+ 4.9.1
+
diff --git a/casic-server/src/main/java/com/casic/missiles/job/TyphoonQuartzJob.java b/casic-server/src/main/java/com/casic/missiles/job/TyphoonQuartzJob.java
new file mode 100644
index 0000000..87b8c72
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/job/TyphoonQuartzJob.java
@@ -0,0 +1,27 @@
+package com.casic.missiles.job;
+
+import com.casic.missiles.modular.system.service.ITyphoonService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+/**
+ * 台风数据定时任务,每小时执行一次
+ *
+ * @author a203
+ * @Description 依赖casic-job-quartz,并在CasicApplication上增加注解 @EnableScheduling
+ */
+@Slf4j
+@Component
+public class TyphoonQuartzJob {
+ private final ITyphoonService typhoonService;
+
+ public TyphoonQuartzJob(ITyphoonService typhoonService) {
+ this.typhoonService = typhoonService;
+ }
+
+ @Scheduled(cron = "0 0 */1 * * ?")
+ public void execute() {
+ typhoonService.saveTyphoon();
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DemoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DemoController.java
deleted file mode 100644
index 87b6fec..0000000
--- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DemoController.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.casic.missiles.modular.system.controller;
-
-
-import com.casic.missiles.model.application.event.core.EventPublisher;
-import com.casic.missiles.model.application.event.enums.ModelEventTypeEnum;
-import com.casic.missiles.model.response.ResponseData;
-import com.casic.missiles.modular.system.event.UserEvent;
-import com.casic.missiles.modular.system.model.User;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.ResponseBody;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * @ClassName DemoController
- * @Description TODO
- * @Author lenovo
- * @Date 2020/6/13 15:38
- * @Version 1.0
- */
-@RestController
-@RequestMapping("/demo")
-public class DemoController {
- @Autowired
- private EventPublisher publisher;
-
- /**
- * 获取mockToken
- */
- @PostMapping("/list")
- @ResponseBody
- public Object list() {
- User user = new User();
- user.setAccount("张三");
- publisher.publishEvent(new UserEvent(ModelEventTypeEnum.ADD, user));
- return ResponseData.success();
- }
-
-
-}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/EnvironmentController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/EnvironmentController.java
new file mode 100644
index 0000000..44a55d6
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/EnvironmentController.java
@@ -0,0 +1,62 @@
+package com.casic.missiles.modular.system.controller;
+
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.OceanDetailDTO;
+import com.casic.missiles.modular.system.dto.TyphoonDTO;
+import com.casic.missiles.modular.system.dto.TyphoonDetailDTO;
+import com.casic.missiles.modular.system.service.IOceanService;
+import com.casic.missiles.modular.system.service.ITyphoonService;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.List;
+
+/**
+ * 环境控制器
+ *
+ * @author a203
+ */
+@Controller
+@RequestMapping("/environment")
+public class EnvironmentController {
+ private final ITyphoonService typhoonService;
+ private final IOceanService oceanService;
+
+ public EnvironmentController(ITyphoonService typhoonService, IOceanService oceanService) {
+ this.typhoonService = typhoonService;
+ this.oceanService = oceanService;
+ }
+
+ /**
+ * 台风列表
+ */
+ @GetMapping(value = "/typhoonList")
+ @ResponseBody
+ public Object list() {
+ List typhoonList = typhoonService.currentTyphoonList();
+ return ResponseData.success(typhoonList);
+ }
+
+ /**
+ * 台风详情
+ */
+ @GetMapping(value = "/typhoonDetail/{typhoonId}")
+ @ResponseBody
+ public Object detail(@PathVariable("typhoonId") String typhoonId) {
+ TyphoonDetailDTO detailDTO = typhoonService.typhoonDetail(typhoonId);
+ return ResponseData.success(detailDTO);
+ }
+
+ /**
+ * 洋流详情
+ */
+ @GetMapping(value = "/ocean")
+ @ResponseBody
+ public Object oceanDetail(double lng, double lat, String date, String days, String hour) {
+ OceanDetailDTO detailDTO = oceanService.oceanDetail(lng, lat, date, days, hour);
+ return ResponseData.success(detailDTO);
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/LandPointMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/LandPointMapper.java
new file mode 100644
index 0000000..1f4757d
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/LandPointMapper.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.modular.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.modular.system.model.sql.LandPoint;
+
+/**
+ * 台风登陆数据信息 Mapper 接口
+ *
+ * @author a203
+ */
+public interface LandPointMapper extends BaseMapper {
+
+}
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index 913a287..71c67c0 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -36,6 +36,16 @@
provided
+
+ com.alibaba
+ fastjson
+ ${fastjson.version}
+
+
+ com.squareup.okhttp3
+ okhttp
+ 4.9.1
+
diff --git a/casic-server/src/main/java/com/casic/missiles/job/TyphoonQuartzJob.java b/casic-server/src/main/java/com/casic/missiles/job/TyphoonQuartzJob.java
new file mode 100644
index 0000000..87b8c72
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/job/TyphoonQuartzJob.java
@@ -0,0 +1,27 @@
+package com.casic.missiles.job;
+
+import com.casic.missiles.modular.system.service.ITyphoonService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+/**
+ * 台风数据定时任务,每小时执行一次
+ *
+ * @author a203
+ * @Description 依赖casic-job-quartz,并在CasicApplication上增加注解 @EnableScheduling
+ */
+@Slf4j
+@Component
+public class TyphoonQuartzJob {
+ private final ITyphoonService typhoonService;
+
+ public TyphoonQuartzJob(ITyphoonService typhoonService) {
+ this.typhoonService = typhoonService;
+ }
+
+ @Scheduled(cron = "0 0 */1 * * ?")
+ public void execute() {
+ typhoonService.saveTyphoon();
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DemoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DemoController.java
deleted file mode 100644
index 87b6fec..0000000
--- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DemoController.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.casic.missiles.modular.system.controller;
-
-
-import com.casic.missiles.model.application.event.core.EventPublisher;
-import com.casic.missiles.model.application.event.enums.ModelEventTypeEnum;
-import com.casic.missiles.model.response.ResponseData;
-import com.casic.missiles.modular.system.event.UserEvent;
-import com.casic.missiles.modular.system.model.User;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.ResponseBody;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * @ClassName DemoController
- * @Description TODO
- * @Author lenovo
- * @Date 2020/6/13 15:38
- * @Version 1.0
- */
-@RestController
-@RequestMapping("/demo")
-public class DemoController {
- @Autowired
- private EventPublisher publisher;
-
- /**
- * 获取mockToken
- */
- @PostMapping("/list")
- @ResponseBody
- public Object list() {
- User user = new User();
- user.setAccount("张三");
- publisher.publishEvent(new UserEvent(ModelEventTypeEnum.ADD, user));
- return ResponseData.success();
- }
-
-
-}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/EnvironmentController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/EnvironmentController.java
new file mode 100644
index 0000000..44a55d6
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/EnvironmentController.java
@@ -0,0 +1,62 @@
+package com.casic.missiles.modular.system.controller;
+
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.OceanDetailDTO;
+import com.casic.missiles.modular.system.dto.TyphoonDTO;
+import com.casic.missiles.modular.system.dto.TyphoonDetailDTO;
+import com.casic.missiles.modular.system.service.IOceanService;
+import com.casic.missiles.modular.system.service.ITyphoonService;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.List;
+
+/**
+ * 环境控制器
+ *
+ * @author a203
+ */
+@Controller
+@RequestMapping("/environment")
+public class EnvironmentController {
+ private final ITyphoonService typhoonService;
+ private final IOceanService oceanService;
+
+ public EnvironmentController(ITyphoonService typhoonService, IOceanService oceanService) {
+ this.typhoonService = typhoonService;
+ this.oceanService = oceanService;
+ }
+
+ /**
+ * 台风列表
+ */
+ @GetMapping(value = "/typhoonList")
+ @ResponseBody
+ public Object list() {
+ List typhoonList = typhoonService.currentTyphoonList();
+ return ResponseData.success(typhoonList);
+ }
+
+ /**
+ * 台风详情
+ */
+ @GetMapping(value = "/typhoonDetail/{typhoonId}")
+ @ResponseBody
+ public Object detail(@PathVariable("typhoonId") String typhoonId) {
+ TyphoonDetailDTO detailDTO = typhoonService.typhoonDetail(typhoonId);
+ return ResponseData.success(detailDTO);
+ }
+
+ /**
+ * 洋流详情
+ */
+ @GetMapping(value = "/ocean")
+ @ResponseBody
+ public Object oceanDetail(double lng, double lat, String date, String days, String hour) {
+ OceanDetailDTO detailDTO = oceanService.oceanDetail(lng, lat, date, days, hour);
+ return ResponseData.success(detailDTO);
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/LandPointMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/LandPointMapper.java
new file mode 100644
index 0000000..1f4757d
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/LandPointMapper.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.modular.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.modular.system.model.sql.LandPoint;
+
+/**
+ * 台风登陆数据信息 Mapper 接口
+ *
+ * @author a203
+ */
+public interface LandPointMapper extends BaseMapper {
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RoutePointMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RoutePointMapper.java
new file mode 100644
index 0000000..f31f6d0
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RoutePointMapper.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.modular.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.modular.system.model.sql.RoutePoint;
+
+/**
+ * 台风移动点数据信息 Mapper 接口
+ *
+ * @author a203
+ */
+public interface RoutePointMapper extends BaseMapper {
+
+}
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index 913a287..71c67c0 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -36,6 +36,16 @@
provided
+
+ com.alibaba
+ fastjson
+ ${fastjson.version}
+
+
+ com.squareup.okhttp3
+ okhttp
+ 4.9.1
+
diff --git a/casic-server/src/main/java/com/casic/missiles/job/TyphoonQuartzJob.java b/casic-server/src/main/java/com/casic/missiles/job/TyphoonQuartzJob.java
new file mode 100644
index 0000000..87b8c72
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/job/TyphoonQuartzJob.java
@@ -0,0 +1,27 @@
+package com.casic.missiles.job;
+
+import com.casic.missiles.modular.system.service.ITyphoonService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+/**
+ * 台风数据定时任务,每小时执行一次
+ *
+ * @author a203
+ * @Description 依赖casic-job-quartz,并在CasicApplication上增加注解 @EnableScheduling
+ */
+@Slf4j
+@Component
+public class TyphoonQuartzJob {
+ private final ITyphoonService typhoonService;
+
+ public TyphoonQuartzJob(ITyphoonService typhoonService) {
+ this.typhoonService = typhoonService;
+ }
+
+ @Scheduled(cron = "0 0 */1 * * ?")
+ public void execute() {
+ typhoonService.saveTyphoon();
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DemoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DemoController.java
deleted file mode 100644
index 87b6fec..0000000
--- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DemoController.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.casic.missiles.modular.system.controller;
-
-
-import com.casic.missiles.model.application.event.core.EventPublisher;
-import com.casic.missiles.model.application.event.enums.ModelEventTypeEnum;
-import com.casic.missiles.model.response.ResponseData;
-import com.casic.missiles.modular.system.event.UserEvent;
-import com.casic.missiles.modular.system.model.User;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.ResponseBody;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * @ClassName DemoController
- * @Description TODO
- * @Author lenovo
- * @Date 2020/6/13 15:38
- * @Version 1.0
- */
-@RestController
-@RequestMapping("/demo")
-public class DemoController {
- @Autowired
- private EventPublisher publisher;
-
- /**
- * 获取mockToken
- */
- @PostMapping("/list")
- @ResponseBody
- public Object list() {
- User user = new User();
- user.setAccount("张三");
- publisher.publishEvent(new UserEvent(ModelEventTypeEnum.ADD, user));
- return ResponseData.success();
- }
-
-
-}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/EnvironmentController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/EnvironmentController.java
new file mode 100644
index 0000000..44a55d6
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/EnvironmentController.java
@@ -0,0 +1,62 @@
+package com.casic.missiles.modular.system.controller;
+
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.OceanDetailDTO;
+import com.casic.missiles.modular.system.dto.TyphoonDTO;
+import com.casic.missiles.modular.system.dto.TyphoonDetailDTO;
+import com.casic.missiles.modular.system.service.IOceanService;
+import com.casic.missiles.modular.system.service.ITyphoonService;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.List;
+
+/**
+ * 环境控制器
+ *
+ * @author a203
+ */
+@Controller
+@RequestMapping("/environment")
+public class EnvironmentController {
+ private final ITyphoonService typhoonService;
+ private final IOceanService oceanService;
+
+ public EnvironmentController(ITyphoonService typhoonService, IOceanService oceanService) {
+ this.typhoonService = typhoonService;
+ this.oceanService = oceanService;
+ }
+
+ /**
+ * 台风列表
+ */
+ @GetMapping(value = "/typhoonList")
+ @ResponseBody
+ public Object list() {
+ List typhoonList = typhoonService.currentTyphoonList();
+ return ResponseData.success(typhoonList);
+ }
+
+ /**
+ * 台风详情
+ */
+ @GetMapping(value = "/typhoonDetail/{typhoonId}")
+ @ResponseBody
+ public Object detail(@PathVariable("typhoonId") String typhoonId) {
+ TyphoonDetailDTO detailDTO = typhoonService.typhoonDetail(typhoonId);
+ return ResponseData.success(detailDTO);
+ }
+
+ /**
+ * 洋流详情
+ */
+ @GetMapping(value = "/ocean")
+ @ResponseBody
+ public Object oceanDetail(double lng, double lat, String date, String days, String hour) {
+ OceanDetailDTO detailDTO = oceanService.oceanDetail(lng, lat, date, days, hour);
+ return ResponseData.success(detailDTO);
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/LandPointMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/LandPointMapper.java
new file mode 100644
index 0000000..1f4757d
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/LandPointMapper.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.modular.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.modular.system.model.sql.LandPoint;
+
+/**
+ * 台风登陆数据信息 Mapper 接口
+ *
+ * @author a203
+ */
+public interface LandPointMapper extends BaseMapper {
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RoutePointMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RoutePointMapper.java
new file mode 100644
index 0000000..f31f6d0
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RoutePointMapper.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.modular.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.modular.system.model.sql.RoutePoint;
+
+/**
+ * 台风移动点数据信息 Mapper 接口
+ *
+ * @author a203
+ */
+public interface RoutePointMapper extends BaseMapper {
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonDetailMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonDetailMapper.java
new file mode 100644
index 0000000..bce7a6b
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonDetailMapper.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.modular.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.modular.system.model.sql.TyphoonDetail;
+
+/**
+ * 台风数据信息 Mapper 接口
+ *
+ * @author a203
+ */
+public interface TyphoonDetailMapper extends BaseMapper {
+
+}
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index 913a287..71c67c0 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -36,6 +36,16 @@
provided
+
+ com.alibaba
+ fastjson
+ ${fastjson.version}
+
+
+ com.squareup.okhttp3
+ okhttp
+ 4.9.1
+
diff --git a/casic-server/src/main/java/com/casic/missiles/job/TyphoonQuartzJob.java b/casic-server/src/main/java/com/casic/missiles/job/TyphoonQuartzJob.java
new file mode 100644
index 0000000..87b8c72
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/job/TyphoonQuartzJob.java
@@ -0,0 +1,27 @@
+package com.casic.missiles.job;
+
+import com.casic.missiles.modular.system.service.ITyphoonService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+/**
+ * 台风数据定时任务,每小时执行一次
+ *
+ * @author a203
+ * @Description 依赖casic-job-quartz,并在CasicApplication上增加注解 @EnableScheduling
+ */
+@Slf4j
+@Component
+public class TyphoonQuartzJob {
+ private final ITyphoonService typhoonService;
+
+ public TyphoonQuartzJob(ITyphoonService typhoonService) {
+ this.typhoonService = typhoonService;
+ }
+
+ @Scheduled(cron = "0 0 */1 * * ?")
+ public void execute() {
+ typhoonService.saveTyphoon();
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DemoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DemoController.java
deleted file mode 100644
index 87b6fec..0000000
--- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DemoController.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.casic.missiles.modular.system.controller;
-
-
-import com.casic.missiles.model.application.event.core.EventPublisher;
-import com.casic.missiles.model.application.event.enums.ModelEventTypeEnum;
-import com.casic.missiles.model.response.ResponseData;
-import com.casic.missiles.modular.system.event.UserEvent;
-import com.casic.missiles.modular.system.model.User;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.ResponseBody;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * @ClassName DemoController
- * @Description TODO
- * @Author lenovo
- * @Date 2020/6/13 15:38
- * @Version 1.0
- */
-@RestController
-@RequestMapping("/demo")
-public class DemoController {
- @Autowired
- private EventPublisher publisher;
-
- /**
- * 获取mockToken
- */
- @PostMapping("/list")
- @ResponseBody
- public Object list() {
- User user = new User();
- user.setAccount("张三");
- publisher.publishEvent(new UserEvent(ModelEventTypeEnum.ADD, user));
- return ResponseData.success();
- }
-
-
-}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/EnvironmentController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/EnvironmentController.java
new file mode 100644
index 0000000..44a55d6
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/EnvironmentController.java
@@ -0,0 +1,62 @@
+package com.casic.missiles.modular.system.controller;
+
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.OceanDetailDTO;
+import com.casic.missiles.modular.system.dto.TyphoonDTO;
+import com.casic.missiles.modular.system.dto.TyphoonDetailDTO;
+import com.casic.missiles.modular.system.service.IOceanService;
+import com.casic.missiles.modular.system.service.ITyphoonService;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.List;
+
+/**
+ * 环境控制器
+ *
+ * @author a203
+ */
+@Controller
+@RequestMapping("/environment")
+public class EnvironmentController {
+ private final ITyphoonService typhoonService;
+ private final IOceanService oceanService;
+
+ public EnvironmentController(ITyphoonService typhoonService, IOceanService oceanService) {
+ this.typhoonService = typhoonService;
+ this.oceanService = oceanService;
+ }
+
+ /**
+ * 台风列表
+ */
+ @GetMapping(value = "/typhoonList")
+ @ResponseBody
+ public Object list() {
+ List typhoonList = typhoonService.currentTyphoonList();
+ return ResponseData.success(typhoonList);
+ }
+
+ /**
+ * 台风详情
+ */
+ @GetMapping(value = "/typhoonDetail/{typhoonId}")
+ @ResponseBody
+ public Object detail(@PathVariable("typhoonId") String typhoonId) {
+ TyphoonDetailDTO detailDTO = typhoonService.typhoonDetail(typhoonId);
+ return ResponseData.success(detailDTO);
+ }
+
+ /**
+ * 洋流详情
+ */
+ @GetMapping(value = "/ocean")
+ @ResponseBody
+ public Object oceanDetail(double lng, double lat, String date, String days, String hour) {
+ OceanDetailDTO detailDTO = oceanService.oceanDetail(lng, lat, date, days, hour);
+ return ResponseData.success(detailDTO);
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/LandPointMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/LandPointMapper.java
new file mode 100644
index 0000000..1f4757d
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/LandPointMapper.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.modular.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.modular.system.model.sql.LandPoint;
+
+/**
+ * 台风登陆数据信息 Mapper 接口
+ *
+ * @author a203
+ */
+public interface LandPointMapper extends BaseMapper {
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RoutePointMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RoutePointMapper.java
new file mode 100644
index 0000000..f31f6d0
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RoutePointMapper.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.modular.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.modular.system.model.sql.RoutePoint;
+
+/**
+ * 台风移动点数据信息 Mapper 接口
+ *
+ * @author a203
+ */
+public interface RoutePointMapper extends BaseMapper {
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonDetailMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonDetailMapper.java
new file mode 100644
index 0000000..bce7a6b
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonDetailMapper.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.modular.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.modular.system.model.sql.TyphoonDetail;
+
+/**
+ * 台风数据信息 Mapper 接口
+ *
+ * @author a203
+ */
+public interface TyphoonDetailMapper extends BaseMapper {
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonMapper.java
new file mode 100644
index 0000000..40fcb32
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonMapper.java
@@ -0,0 +1,21 @@
+package com.casic.missiles.modular.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.modular.system.model.sql.Typhoon;
+
+import java.util.List;
+
+/**
+ * 台风数据信息 Mapper 接口
+ *
+ * @author a203
+ */
+public interface TyphoonMapper extends BaseMapper {
+
+ /**
+ * 查询当前未消散的台风
+ *
+ * @return {@link List}
+ */
+ List selectCurrentTyphoon();
+}
\ No newline at end of file
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index 913a287..71c67c0 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -36,6 +36,16 @@
provided
+
+ com.alibaba
+ fastjson
+ ${fastjson.version}
+
+
+ com.squareup.okhttp3
+ okhttp
+ 4.9.1
+
diff --git a/casic-server/src/main/java/com/casic/missiles/job/TyphoonQuartzJob.java b/casic-server/src/main/java/com/casic/missiles/job/TyphoonQuartzJob.java
new file mode 100644
index 0000000..87b8c72
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/job/TyphoonQuartzJob.java
@@ -0,0 +1,27 @@
+package com.casic.missiles.job;
+
+import com.casic.missiles.modular.system.service.ITyphoonService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+/**
+ * 台风数据定时任务,每小时执行一次
+ *
+ * @author a203
+ * @Description 依赖casic-job-quartz,并在CasicApplication上增加注解 @EnableScheduling
+ */
+@Slf4j
+@Component
+public class TyphoonQuartzJob {
+ private final ITyphoonService typhoonService;
+
+ public TyphoonQuartzJob(ITyphoonService typhoonService) {
+ this.typhoonService = typhoonService;
+ }
+
+ @Scheduled(cron = "0 0 */1 * * ?")
+ public void execute() {
+ typhoonService.saveTyphoon();
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DemoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DemoController.java
deleted file mode 100644
index 87b6fec..0000000
--- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DemoController.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.casic.missiles.modular.system.controller;
-
-
-import com.casic.missiles.model.application.event.core.EventPublisher;
-import com.casic.missiles.model.application.event.enums.ModelEventTypeEnum;
-import com.casic.missiles.model.response.ResponseData;
-import com.casic.missiles.modular.system.event.UserEvent;
-import com.casic.missiles.modular.system.model.User;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.ResponseBody;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * @ClassName DemoController
- * @Description TODO
- * @Author lenovo
- * @Date 2020/6/13 15:38
- * @Version 1.0
- */
-@RestController
-@RequestMapping("/demo")
-public class DemoController {
- @Autowired
- private EventPublisher publisher;
-
- /**
- * 获取mockToken
- */
- @PostMapping("/list")
- @ResponseBody
- public Object list() {
- User user = new User();
- user.setAccount("张三");
- publisher.publishEvent(new UserEvent(ModelEventTypeEnum.ADD, user));
- return ResponseData.success();
- }
-
-
-}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/EnvironmentController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/EnvironmentController.java
new file mode 100644
index 0000000..44a55d6
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/EnvironmentController.java
@@ -0,0 +1,62 @@
+package com.casic.missiles.modular.system.controller;
+
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.OceanDetailDTO;
+import com.casic.missiles.modular.system.dto.TyphoonDTO;
+import com.casic.missiles.modular.system.dto.TyphoonDetailDTO;
+import com.casic.missiles.modular.system.service.IOceanService;
+import com.casic.missiles.modular.system.service.ITyphoonService;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.List;
+
+/**
+ * 环境控制器
+ *
+ * @author a203
+ */
+@Controller
+@RequestMapping("/environment")
+public class EnvironmentController {
+ private final ITyphoonService typhoonService;
+ private final IOceanService oceanService;
+
+ public EnvironmentController(ITyphoonService typhoonService, IOceanService oceanService) {
+ this.typhoonService = typhoonService;
+ this.oceanService = oceanService;
+ }
+
+ /**
+ * 台风列表
+ */
+ @GetMapping(value = "/typhoonList")
+ @ResponseBody
+ public Object list() {
+ List typhoonList = typhoonService.currentTyphoonList();
+ return ResponseData.success(typhoonList);
+ }
+
+ /**
+ * 台风详情
+ */
+ @GetMapping(value = "/typhoonDetail/{typhoonId}")
+ @ResponseBody
+ public Object detail(@PathVariable("typhoonId") String typhoonId) {
+ TyphoonDetailDTO detailDTO = typhoonService.typhoonDetail(typhoonId);
+ return ResponseData.success(detailDTO);
+ }
+
+ /**
+ * 洋流详情
+ */
+ @GetMapping(value = "/ocean")
+ @ResponseBody
+ public Object oceanDetail(double lng, double lat, String date, String days, String hour) {
+ OceanDetailDTO detailDTO = oceanService.oceanDetail(lng, lat, date, days, hour);
+ return ResponseData.success(detailDTO);
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/LandPointMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/LandPointMapper.java
new file mode 100644
index 0000000..1f4757d
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/LandPointMapper.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.modular.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.modular.system.model.sql.LandPoint;
+
+/**
+ * 台风登陆数据信息 Mapper 接口
+ *
+ * @author a203
+ */
+public interface LandPointMapper extends BaseMapper {
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RoutePointMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RoutePointMapper.java
new file mode 100644
index 0000000..f31f6d0
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RoutePointMapper.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.modular.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.modular.system.model.sql.RoutePoint;
+
+/**
+ * 台风移动点数据信息 Mapper 接口
+ *
+ * @author a203
+ */
+public interface RoutePointMapper extends BaseMapper {
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonDetailMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonDetailMapper.java
new file mode 100644
index 0000000..bce7a6b
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonDetailMapper.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.modular.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.modular.system.model.sql.TyphoonDetail;
+
+/**
+ * 台风数据信息 Mapper 接口
+ *
+ * @author a203
+ */
+public interface TyphoonDetailMapper extends BaseMapper {
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonMapper.java
new file mode 100644
index 0000000..40fcb32
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonMapper.java
@@ -0,0 +1,21 @@
+package com.casic.missiles.modular.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.modular.system.model.sql.Typhoon;
+
+import java.util.List;
+
+/**
+ * 台风数据信息 Mapper 接口
+ *
+ * @author a203
+ */
+public interface TyphoonMapper extends BaseMapper {
+
+ /**
+ * 查询当前未消散的台风
+ *
+ * @return {@link List}
+ */
+ List selectCurrentTyphoon();
+}
\ No newline at end of file
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/TyphoonMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/TyphoonMapper.xml
new file mode 100644
index 0000000..73498fb
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/TyphoonMapper.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index 913a287..71c67c0 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -36,6 +36,16 @@
provided
+
+ com.alibaba
+ fastjson
+ ${fastjson.version}
+
+
+ com.squareup.okhttp3
+ okhttp
+ 4.9.1
+
diff --git a/casic-server/src/main/java/com/casic/missiles/job/TyphoonQuartzJob.java b/casic-server/src/main/java/com/casic/missiles/job/TyphoonQuartzJob.java
new file mode 100644
index 0000000..87b8c72
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/job/TyphoonQuartzJob.java
@@ -0,0 +1,27 @@
+package com.casic.missiles.job;
+
+import com.casic.missiles.modular.system.service.ITyphoonService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+/**
+ * 台风数据定时任务,每小时执行一次
+ *
+ * @author a203
+ * @Description 依赖casic-job-quartz,并在CasicApplication上增加注解 @EnableScheduling
+ */
+@Slf4j
+@Component
+public class TyphoonQuartzJob {
+ private final ITyphoonService typhoonService;
+
+ public TyphoonQuartzJob(ITyphoonService typhoonService) {
+ this.typhoonService = typhoonService;
+ }
+
+ @Scheduled(cron = "0 0 */1 * * ?")
+ public void execute() {
+ typhoonService.saveTyphoon();
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DemoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DemoController.java
deleted file mode 100644
index 87b6fec..0000000
--- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DemoController.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.casic.missiles.modular.system.controller;
-
-
-import com.casic.missiles.model.application.event.core.EventPublisher;
-import com.casic.missiles.model.application.event.enums.ModelEventTypeEnum;
-import com.casic.missiles.model.response.ResponseData;
-import com.casic.missiles.modular.system.event.UserEvent;
-import com.casic.missiles.modular.system.model.User;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.ResponseBody;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * @ClassName DemoController
- * @Description TODO
- * @Author lenovo
- * @Date 2020/6/13 15:38
- * @Version 1.0
- */
-@RestController
-@RequestMapping("/demo")
-public class DemoController {
- @Autowired
- private EventPublisher publisher;
-
- /**
- * 获取mockToken
- */
- @PostMapping("/list")
- @ResponseBody
- public Object list() {
- User user = new User();
- user.setAccount("张三");
- publisher.publishEvent(new UserEvent(ModelEventTypeEnum.ADD, user));
- return ResponseData.success();
- }
-
-
-}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/EnvironmentController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/EnvironmentController.java
new file mode 100644
index 0000000..44a55d6
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/EnvironmentController.java
@@ -0,0 +1,62 @@
+package com.casic.missiles.modular.system.controller;
+
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.OceanDetailDTO;
+import com.casic.missiles.modular.system.dto.TyphoonDTO;
+import com.casic.missiles.modular.system.dto.TyphoonDetailDTO;
+import com.casic.missiles.modular.system.service.IOceanService;
+import com.casic.missiles.modular.system.service.ITyphoonService;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.List;
+
+/**
+ * 环境控制器
+ *
+ * @author a203
+ */
+@Controller
+@RequestMapping("/environment")
+public class EnvironmentController {
+ private final ITyphoonService typhoonService;
+ private final IOceanService oceanService;
+
+ public EnvironmentController(ITyphoonService typhoonService, IOceanService oceanService) {
+ this.typhoonService = typhoonService;
+ this.oceanService = oceanService;
+ }
+
+ /**
+ * 台风列表
+ */
+ @GetMapping(value = "/typhoonList")
+ @ResponseBody
+ public Object list() {
+ List typhoonList = typhoonService.currentTyphoonList();
+ return ResponseData.success(typhoonList);
+ }
+
+ /**
+ * 台风详情
+ */
+ @GetMapping(value = "/typhoonDetail/{typhoonId}")
+ @ResponseBody
+ public Object detail(@PathVariable("typhoonId") String typhoonId) {
+ TyphoonDetailDTO detailDTO = typhoonService.typhoonDetail(typhoonId);
+ return ResponseData.success(detailDTO);
+ }
+
+ /**
+ * 洋流详情
+ */
+ @GetMapping(value = "/ocean")
+ @ResponseBody
+ public Object oceanDetail(double lng, double lat, String date, String days, String hour) {
+ OceanDetailDTO detailDTO = oceanService.oceanDetail(lng, lat, date, days, hour);
+ return ResponseData.success(detailDTO);
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/LandPointMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/LandPointMapper.java
new file mode 100644
index 0000000..1f4757d
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/LandPointMapper.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.modular.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.modular.system.model.sql.LandPoint;
+
+/**
+ * 台风登陆数据信息 Mapper 接口
+ *
+ * @author a203
+ */
+public interface LandPointMapper extends BaseMapper {
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RoutePointMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RoutePointMapper.java
new file mode 100644
index 0000000..f31f6d0
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RoutePointMapper.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.modular.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.modular.system.model.sql.RoutePoint;
+
+/**
+ * 台风移动点数据信息 Mapper 接口
+ *
+ * @author a203
+ */
+public interface RoutePointMapper extends BaseMapper {
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonDetailMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonDetailMapper.java
new file mode 100644
index 0000000..bce7a6b
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonDetailMapper.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.modular.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.modular.system.model.sql.TyphoonDetail;
+
+/**
+ * 台风数据信息 Mapper 接口
+ *
+ * @author a203
+ */
+public interface TyphoonDetailMapper extends BaseMapper {
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonMapper.java
new file mode 100644
index 0000000..40fcb32
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonMapper.java
@@ -0,0 +1,21 @@
+package com.casic.missiles.modular.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.modular.system.model.sql.Typhoon;
+
+import java.util.List;
+
+/**
+ * 台风数据信息 Mapper 接口
+ *
+ * @author a203
+ */
+public interface TyphoonMapper extends BaseMapper {
+
+ /**
+ * 查询当前未消散的台风
+ *
+ * @return {@link List}
+ */
+ List selectCurrentTyphoon();
+}
\ No newline at end of file
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/TyphoonMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/TyphoonMapper.xml
new file mode 100644
index 0000000..73498fb
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/TyphoonMapper.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java
new file mode 100644
index 0000000..2debc96
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java
@@ -0,0 +1,152 @@
+package com.casic.missiles.modular.system.dto;
+
+import com.casic.missiles.modular.system.model.remote.OceanDetailModel;
+import lombok.Data;
+
+import java.text.DecimalFormat;
+
+/**
+ * @author a203
+ */
+@Data
+public class OceanDetailDTO {
+
+ /**
+ * 海温, 单位: ℃(摄氏度)
+ */
+ private Double temperature;
+
+ /**
+ * 海拔, 单位: m(米)
+ */
+ private Double altitude;
+
+ /**
+ * 气压, 单位: hPa
+ */
+ private Double pressure;
+
+ /**
+ * 涌浪高度, 单位: m(米)
+ */
+ private Double swellHeight;
+
+ /**
+ * 涌浪方向, 单位: 度[0,360]
+ */
+ private Double swellDir;
+
+ /**
+ * 涌浪周期, 单位: s(秒)
+ */
+ private Double swellPrd;
+
+ /**
+ * 风浪高度, 单位: m(米)
+ */
+ private Double waveHeight;
+
+ /**
+ * 风浪方向, 单位: 度[0,360]
+ */
+ private Double waveDir;
+
+ /**
+ * 风浪周期, 单位: s(秒)
+ */
+ private Double wavePrd;
+
+ /**
+ * 海流速度, 单位: m/s
+ */
+ private Double speed;
+
+ /**
+ * 海流方向, 单位: 度[0,360]
+ */
+ private Double oceanDir;
+
+ /**
+ * 风速,单位: m/s
+ */
+ private Double windSpeed;
+
+ /**
+ * 风向,单位: 度[0,360]
+ */
+ private Double windDir;
+
+ /**
+ * 海浪预测
+ */
+ private PreviewBean forecast;
+
+ @Data
+ public static class PreviewBean {
+ /**
+ * 涌浪高度, 单位: m(米)
+ */
+ private Double swellHeight;
+
+ /**
+ * 涌浪方向, 单位: 度[0,360]
+ */
+ private Double swellDir;
+
+ /**
+ * 涌浪周期, 单位: s(秒)
+ */
+ private Double swellPrd;
+
+ /**
+ * 风浪高度, 单位: m(米)
+ */
+ private Double waveHeight;
+
+ /**
+ * 风浪方向, 单位: 度[0,360]
+ */
+ private Double waveDir;
+
+ /**
+ * 风浪周期, 单位: s(秒)
+ */
+ private Double wavePrd;
+ }
+
+ public OceanDetailDTO(OceanDetailModel remoteData) {
+ OceanDetailModel.DataBean.ListBean listBean = remoteData.getData().getList().get(0);
+ OceanDetailModel.DataBean.ListBean.YtxBean ytxBean = listBean.getYtx();
+ OceanDetailModel.DataBean.ListBean.MeteoBean meteoBean = listBean.getMeteo();
+ if (ytxBean != null) {
+ this.temperature = formatData(ytxBean.getSurfaceTem());
+ this.altitude = formatData(0.00);
+ this.pressure = formatData(ytxBean.getSurfPres());
+ this.swellHeight = formatData(ytxBean.getSwellHgt());
+ this.swellDir = formatData(ytxBean.getSwellDir());
+ this.swellPrd = formatData(ytxBean.getSwellPrd());
+ this.waveHeight = formatData(ytxBean.getWaveHgt());
+ this.waveDir = formatData(ytxBean.getWaveDir());
+ this.wavePrd = formatData(ytxBean.getWavePrd());
+ this.speed = formatData(ytxBean.getWindMag());
+ this.oceanDir = formatData(ytxBean.getCurrentDir());
+ this.windSpeed = formatData(ytxBean.getWindMag());
+ this.windDir = formatData(ytxBean.getWindDir());
+ }
+ PreviewBean bean = new PreviewBean();
+ if (meteoBean != null) {
+ bean.swellHeight = formatData(meteoBean.getSwellHgt());
+ bean.swellDir = formatData(meteoBean.getSwellDir());
+ bean.swellPrd = formatData(meteoBean.getSwellPrd());
+ bean.waveHeight = formatData(meteoBean.getWaveHgt());
+ bean.waveDir = formatData(meteoBean.getWaveDir());
+ bean.wavePrd = formatData(meteoBean.getWavePrd());
+ }
+ this.forecast = bean;
+ }
+
+ private Double formatData(Double data) {
+ DecimalFormat df = new DecimalFormat("#.00");
+ return Double.parseDouble(df.format(data));
+ }
+}
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index 913a287..71c67c0 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -36,6 +36,16 @@
provided
+
+ com.alibaba
+ fastjson
+ ${fastjson.version}
+
+
+ com.squareup.okhttp3
+ okhttp
+ 4.9.1
+
diff --git a/casic-server/src/main/java/com/casic/missiles/job/TyphoonQuartzJob.java b/casic-server/src/main/java/com/casic/missiles/job/TyphoonQuartzJob.java
new file mode 100644
index 0000000..87b8c72
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/job/TyphoonQuartzJob.java
@@ -0,0 +1,27 @@
+package com.casic.missiles.job;
+
+import com.casic.missiles.modular.system.service.ITyphoonService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+/**
+ * 台风数据定时任务,每小时执行一次
+ *
+ * @author a203
+ * @Description 依赖casic-job-quartz,并在CasicApplication上增加注解 @EnableScheduling
+ */
+@Slf4j
+@Component
+public class TyphoonQuartzJob {
+ private final ITyphoonService typhoonService;
+
+ public TyphoonQuartzJob(ITyphoonService typhoonService) {
+ this.typhoonService = typhoonService;
+ }
+
+ @Scheduled(cron = "0 0 */1 * * ?")
+ public void execute() {
+ typhoonService.saveTyphoon();
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DemoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DemoController.java
deleted file mode 100644
index 87b6fec..0000000
--- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DemoController.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.casic.missiles.modular.system.controller;
-
-
-import com.casic.missiles.model.application.event.core.EventPublisher;
-import com.casic.missiles.model.application.event.enums.ModelEventTypeEnum;
-import com.casic.missiles.model.response.ResponseData;
-import com.casic.missiles.modular.system.event.UserEvent;
-import com.casic.missiles.modular.system.model.User;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.ResponseBody;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * @ClassName DemoController
- * @Description TODO
- * @Author lenovo
- * @Date 2020/6/13 15:38
- * @Version 1.0
- */
-@RestController
-@RequestMapping("/demo")
-public class DemoController {
- @Autowired
- private EventPublisher publisher;
-
- /**
- * 获取mockToken
- */
- @PostMapping("/list")
- @ResponseBody
- public Object list() {
- User user = new User();
- user.setAccount("张三");
- publisher.publishEvent(new UserEvent(ModelEventTypeEnum.ADD, user));
- return ResponseData.success();
- }
-
-
-}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/EnvironmentController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/EnvironmentController.java
new file mode 100644
index 0000000..44a55d6
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/EnvironmentController.java
@@ -0,0 +1,62 @@
+package com.casic.missiles.modular.system.controller;
+
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.OceanDetailDTO;
+import com.casic.missiles.modular.system.dto.TyphoonDTO;
+import com.casic.missiles.modular.system.dto.TyphoonDetailDTO;
+import com.casic.missiles.modular.system.service.IOceanService;
+import com.casic.missiles.modular.system.service.ITyphoonService;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.List;
+
+/**
+ * 环境控制器
+ *
+ * @author a203
+ */
+@Controller
+@RequestMapping("/environment")
+public class EnvironmentController {
+ private final ITyphoonService typhoonService;
+ private final IOceanService oceanService;
+
+ public EnvironmentController(ITyphoonService typhoonService, IOceanService oceanService) {
+ this.typhoonService = typhoonService;
+ this.oceanService = oceanService;
+ }
+
+ /**
+ * 台风列表
+ */
+ @GetMapping(value = "/typhoonList")
+ @ResponseBody
+ public Object list() {
+ List typhoonList = typhoonService.currentTyphoonList();
+ return ResponseData.success(typhoonList);
+ }
+
+ /**
+ * 台风详情
+ */
+ @GetMapping(value = "/typhoonDetail/{typhoonId}")
+ @ResponseBody
+ public Object detail(@PathVariable("typhoonId") String typhoonId) {
+ TyphoonDetailDTO detailDTO = typhoonService.typhoonDetail(typhoonId);
+ return ResponseData.success(detailDTO);
+ }
+
+ /**
+ * 洋流详情
+ */
+ @GetMapping(value = "/ocean")
+ @ResponseBody
+ public Object oceanDetail(double lng, double lat, String date, String days, String hour) {
+ OceanDetailDTO detailDTO = oceanService.oceanDetail(lng, lat, date, days, hour);
+ return ResponseData.success(detailDTO);
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/LandPointMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/LandPointMapper.java
new file mode 100644
index 0000000..1f4757d
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/LandPointMapper.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.modular.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.modular.system.model.sql.LandPoint;
+
+/**
+ * 台风登陆数据信息 Mapper 接口
+ *
+ * @author a203
+ */
+public interface LandPointMapper extends BaseMapper {
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RoutePointMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RoutePointMapper.java
new file mode 100644
index 0000000..f31f6d0
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RoutePointMapper.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.modular.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.modular.system.model.sql.RoutePoint;
+
+/**
+ * 台风移动点数据信息 Mapper 接口
+ *
+ * @author a203
+ */
+public interface RoutePointMapper extends BaseMapper {
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonDetailMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonDetailMapper.java
new file mode 100644
index 0000000..bce7a6b
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonDetailMapper.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.modular.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.modular.system.model.sql.TyphoonDetail;
+
+/**
+ * 台风数据信息 Mapper 接口
+ *
+ * @author a203
+ */
+public interface TyphoonDetailMapper extends BaseMapper {
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonMapper.java
new file mode 100644
index 0000000..40fcb32
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonMapper.java
@@ -0,0 +1,21 @@
+package com.casic.missiles.modular.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.modular.system.model.sql.Typhoon;
+
+import java.util.List;
+
+/**
+ * 台风数据信息 Mapper 接口
+ *
+ * @author a203
+ */
+public interface TyphoonMapper extends BaseMapper {
+
+ /**
+ * 查询当前未消散的台风
+ *
+ * @return {@link List}
+ */
+ List selectCurrentTyphoon();
+}
\ No newline at end of file
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/TyphoonMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/TyphoonMapper.xml
new file mode 100644
index 0000000..73498fb
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/TyphoonMapper.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java
new file mode 100644
index 0000000..2debc96
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java
@@ -0,0 +1,152 @@
+package com.casic.missiles.modular.system.dto;
+
+import com.casic.missiles.modular.system.model.remote.OceanDetailModel;
+import lombok.Data;
+
+import java.text.DecimalFormat;
+
+/**
+ * @author a203
+ */
+@Data
+public class OceanDetailDTO {
+
+ /**
+ * 海温, 单位: ℃(摄氏度)
+ */
+ private Double temperature;
+
+ /**
+ * 海拔, 单位: m(米)
+ */
+ private Double altitude;
+
+ /**
+ * 气压, 单位: hPa
+ */
+ private Double pressure;
+
+ /**
+ * 涌浪高度, 单位: m(米)
+ */
+ private Double swellHeight;
+
+ /**
+ * 涌浪方向, 单位: 度[0,360]
+ */
+ private Double swellDir;
+
+ /**
+ * 涌浪周期, 单位: s(秒)
+ */
+ private Double swellPrd;
+
+ /**
+ * 风浪高度, 单位: m(米)
+ */
+ private Double waveHeight;
+
+ /**
+ * 风浪方向, 单位: 度[0,360]
+ */
+ private Double waveDir;
+
+ /**
+ * 风浪周期, 单位: s(秒)
+ */
+ private Double wavePrd;
+
+ /**
+ * 海流速度, 单位: m/s
+ */
+ private Double speed;
+
+ /**
+ * 海流方向, 单位: 度[0,360]
+ */
+ private Double oceanDir;
+
+ /**
+ * 风速,单位: m/s
+ */
+ private Double windSpeed;
+
+ /**
+ * 风向,单位: 度[0,360]
+ */
+ private Double windDir;
+
+ /**
+ * 海浪预测
+ */
+ private PreviewBean forecast;
+
+ @Data
+ public static class PreviewBean {
+ /**
+ * 涌浪高度, 单位: m(米)
+ */
+ private Double swellHeight;
+
+ /**
+ * 涌浪方向, 单位: 度[0,360]
+ */
+ private Double swellDir;
+
+ /**
+ * 涌浪周期, 单位: s(秒)
+ */
+ private Double swellPrd;
+
+ /**
+ * 风浪高度, 单位: m(米)
+ */
+ private Double waveHeight;
+
+ /**
+ * 风浪方向, 单位: 度[0,360]
+ */
+ private Double waveDir;
+
+ /**
+ * 风浪周期, 单位: s(秒)
+ */
+ private Double wavePrd;
+ }
+
+ public OceanDetailDTO(OceanDetailModel remoteData) {
+ OceanDetailModel.DataBean.ListBean listBean = remoteData.getData().getList().get(0);
+ OceanDetailModel.DataBean.ListBean.YtxBean ytxBean = listBean.getYtx();
+ OceanDetailModel.DataBean.ListBean.MeteoBean meteoBean = listBean.getMeteo();
+ if (ytxBean != null) {
+ this.temperature = formatData(ytxBean.getSurfaceTem());
+ this.altitude = formatData(0.00);
+ this.pressure = formatData(ytxBean.getSurfPres());
+ this.swellHeight = formatData(ytxBean.getSwellHgt());
+ this.swellDir = formatData(ytxBean.getSwellDir());
+ this.swellPrd = formatData(ytxBean.getSwellPrd());
+ this.waveHeight = formatData(ytxBean.getWaveHgt());
+ this.waveDir = formatData(ytxBean.getWaveDir());
+ this.wavePrd = formatData(ytxBean.getWavePrd());
+ this.speed = formatData(ytxBean.getWindMag());
+ this.oceanDir = formatData(ytxBean.getCurrentDir());
+ this.windSpeed = formatData(ytxBean.getWindMag());
+ this.windDir = formatData(ytxBean.getWindDir());
+ }
+ PreviewBean bean = new PreviewBean();
+ if (meteoBean != null) {
+ bean.swellHeight = formatData(meteoBean.getSwellHgt());
+ bean.swellDir = formatData(meteoBean.getSwellDir());
+ bean.swellPrd = formatData(meteoBean.getSwellPrd());
+ bean.waveHeight = formatData(meteoBean.getWaveHgt());
+ bean.waveDir = formatData(meteoBean.getWaveDir());
+ bean.wavePrd = formatData(meteoBean.getWavePrd());
+ }
+ this.forecast = bean;
+ }
+
+ private Double formatData(Double data) {
+ DecimalFormat df = new DecimalFormat("#.00");
+ return Double.parseDouble(df.format(data));
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TyphoonDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TyphoonDTO.java
new file mode 100644
index 0000000..e3b3bb3
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TyphoonDTO.java
@@ -0,0 +1,84 @@
+package com.casic.missiles.modular.system.dto;
+
+import com.casic.missiles.modular.system.model.sql.Typhoon;
+import lombok.Data;
+
+/**
+ * @author a203
+ */
+@Data
+public class TyphoonDTO {
+ /**
+ * 台风ID
+ */
+ private String typhoonId;
+ /**
+ * 台风中文代号
+ */
+ private String name;
+ /**
+ * 台风英文代号
+ */
+ private String engName;
+ /**
+ * 经度
+ */
+ private Double lng;
+ /**
+ * 纬度
+ */
+ private Double lat;
+ /**
+ * 台风风力等级描述
+ */
+ private String typhoonType;
+ /**
+ * 台风中心气压,单位【百帕】
+ */
+ private String centerPressure;
+ /**
+ * 风速,单位【米/每秒】
+ */
+ private String speed;
+ /**
+ * 风力,单位【级】
+ */
+ private Integer power;
+ /**
+ * 台风整体移动速度,单位【公里/小时】
+ */
+ private String moveSpeed;
+ /**
+ * 台风未来移动方向
+ */
+ private String moveDirection;
+ /**
+ * 10级风力影响半径
+ */
+ private String radius10;
+ /**
+ * 7级风力影响半径
+ */
+ private String radius7;
+ /**
+ * 数据更新时间
+ */
+ private String time;
+
+ public TyphoonDTO(Typhoon data) {
+ this.typhoonId = data.getTyphoonId();
+ this.name = data.getName();
+ this.engName = data.getEngName();
+ this.lng = data.getLng();
+ this.lat = data.getLat();
+ this.typhoonType = data.getTyphoonType();
+ this.centerPressure = data.getCenterPressure();
+ this.speed = data.getSpeed();
+ this.power = data.getPower();
+ this.moveSpeed = data.getMoveSpeed();
+ this.moveDirection = data.getMoveDirection();
+ this.radius10 = data.getRadius10();
+ this.radius7 = data.getRadius7();
+ this.time = data.getTime();
+ }
+}
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index 913a287..71c67c0 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -36,6 +36,16 @@
provided
+
+ com.alibaba
+ fastjson
+ ${fastjson.version}
+
+
+ com.squareup.okhttp3
+ okhttp
+ 4.9.1
+
diff --git a/casic-server/src/main/java/com/casic/missiles/job/TyphoonQuartzJob.java b/casic-server/src/main/java/com/casic/missiles/job/TyphoonQuartzJob.java
new file mode 100644
index 0000000..87b8c72
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/job/TyphoonQuartzJob.java
@@ -0,0 +1,27 @@
+package com.casic.missiles.job;
+
+import com.casic.missiles.modular.system.service.ITyphoonService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+/**
+ * 台风数据定时任务,每小时执行一次
+ *
+ * @author a203
+ * @Description 依赖casic-job-quartz,并在CasicApplication上增加注解 @EnableScheduling
+ */
+@Slf4j
+@Component
+public class TyphoonQuartzJob {
+ private final ITyphoonService typhoonService;
+
+ public TyphoonQuartzJob(ITyphoonService typhoonService) {
+ this.typhoonService = typhoonService;
+ }
+
+ @Scheduled(cron = "0 0 */1 * * ?")
+ public void execute() {
+ typhoonService.saveTyphoon();
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DemoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DemoController.java
deleted file mode 100644
index 87b6fec..0000000
--- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DemoController.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.casic.missiles.modular.system.controller;
-
-
-import com.casic.missiles.model.application.event.core.EventPublisher;
-import com.casic.missiles.model.application.event.enums.ModelEventTypeEnum;
-import com.casic.missiles.model.response.ResponseData;
-import com.casic.missiles.modular.system.event.UserEvent;
-import com.casic.missiles.modular.system.model.User;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.ResponseBody;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * @ClassName DemoController
- * @Description TODO
- * @Author lenovo
- * @Date 2020/6/13 15:38
- * @Version 1.0
- */
-@RestController
-@RequestMapping("/demo")
-public class DemoController {
- @Autowired
- private EventPublisher publisher;
-
- /**
- * 获取mockToken
- */
- @PostMapping("/list")
- @ResponseBody
- public Object list() {
- User user = new User();
- user.setAccount("张三");
- publisher.publishEvent(new UserEvent(ModelEventTypeEnum.ADD, user));
- return ResponseData.success();
- }
-
-
-}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/EnvironmentController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/EnvironmentController.java
new file mode 100644
index 0000000..44a55d6
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/EnvironmentController.java
@@ -0,0 +1,62 @@
+package com.casic.missiles.modular.system.controller;
+
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.OceanDetailDTO;
+import com.casic.missiles.modular.system.dto.TyphoonDTO;
+import com.casic.missiles.modular.system.dto.TyphoonDetailDTO;
+import com.casic.missiles.modular.system.service.IOceanService;
+import com.casic.missiles.modular.system.service.ITyphoonService;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.List;
+
+/**
+ * 环境控制器
+ *
+ * @author a203
+ */
+@Controller
+@RequestMapping("/environment")
+public class EnvironmentController {
+ private final ITyphoonService typhoonService;
+ private final IOceanService oceanService;
+
+ public EnvironmentController(ITyphoonService typhoonService, IOceanService oceanService) {
+ this.typhoonService = typhoonService;
+ this.oceanService = oceanService;
+ }
+
+ /**
+ * 台风列表
+ */
+ @GetMapping(value = "/typhoonList")
+ @ResponseBody
+ public Object list() {
+ List typhoonList = typhoonService.currentTyphoonList();
+ return ResponseData.success(typhoonList);
+ }
+
+ /**
+ * 台风详情
+ */
+ @GetMapping(value = "/typhoonDetail/{typhoonId}")
+ @ResponseBody
+ public Object detail(@PathVariable("typhoonId") String typhoonId) {
+ TyphoonDetailDTO detailDTO = typhoonService.typhoonDetail(typhoonId);
+ return ResponseData.success(detailDTO);
+ }
+
+ /**
+ * 洋流详情
+ */
+ @GetMapping(value = "/ocean")
+ @ResponseBody
+ public Object oceanDetail(double lng, double lat, String date, String days, String hour) {
+ OceanDetailDTO detailDTO = oceanService.oceanDetail(lng, lat, date, days, hour);
+ return ResponseData.success(detailDTO);
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/LandPointMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/LandPointMapper.java
new file mode 100644
index 0000000..1f4757d
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/LandPointMapper.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.modular.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.modular.system.model.sql.LandPoint;
+
+/**
+ * 台风登陆数据信息 Mapper 接口
+ *
+ * @author a203
+ */
+public interface LandPointMapper extends BaseMapper {
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RoutePointMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RoutePointMapper.java
new file mode 100644
index 0000000..f31f6d0
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RoutePointMapper.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.modular.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.modular.system.model.sql.RoutePoint;
+
+/**
+ * 台风移动点数据信息 Mapper 接口
+ *
+ * @author a203
+ */
+public interface RoutePointMapper extends BaseMapper {
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonDetailMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonDetailMapper.java
new file mode 100644
index 0000000..bce7a6b
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonDetailMapper.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.modular.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.modular.system.model.sql.TyphoonDetail;
+
+/**
+ * 台风数据信息 Mapper 接口
+ *
+ * @author a203
+ */
+public interface TyphoonDetailMapper extends BaseMapper {
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonMapper.java
new file mode 100644
index 0000000..40fcb32
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonMapper.java
@@ -0,0 +1,21 @@
+package com.casic.missiles.modular.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.modular.system.model.sql.Typhoon;
+
+import java.util.List;
+
+/**
+ * 台风数据信息 Mapper 接口
+ *
+ * @author a203
+ */
+public interface TyphoonMapper extends BaseMapper {
+
+ /**
+ * 查询当前未消散的台风
+ *
+ * @return {@link List}
+ */
+ List selectCurrentTyphoon();
+}
\ No newline at end of file
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/TyphoonMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/TyphoonMapper.xml
new file mode 100644
index 0000000..73498fb
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/TyphoonMapper.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java
new file mode 100644
index 0000000..2debc96
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java
@@ -0,0 +1,152 @@
+package com.casic.missiles.modular.system.dto;
+
+import com.casic.missiles.modular.system.model.remote.OceanDetailModel;
+import lombok.Data;
+
+import java.text.DecimalFormat;
+
+/**
+ * @author a203
+ */
+@Data
+public class OceanDetailDTO {
+
+ /**
+ * 海温, 单位: ℃(摄氏度)
+ */
+ private Double temperature;
+
+ /**
+ * 海拔, 单位: m(米)
+ */
+ private Double altitude;
+
+ /**
+ * 气压, 单位: hPa
+ */
+ private Double pressure;
+
+ /**
+ * 涌浪高度, 单位: m(米)
+ */
+ private Double swellHeight;
+
+ /**
+ * 涌浪方向, 单位: 度[0,360]
+ */
+ private Double swellDir;
+
+ /**
+ * 涌浪周期, 单位: s(秒)
+ */
+ private Double swellPrd;
+
+ /**
+ * 风浪高度, 单位: m(米)
+ */
+ private Double waveHeight;
+
+ /**
+ * 风浪方向, 单位: 度[0,360]
+ */
+ private Double waveDir;
+
+ /**
+ * 风浪周期, 单位: s(秒)
+ */
+ private Double wavePrd;
+
+ /**
+ * 海流速度, 单位: m/s
+ */
+ private Double speed;
+
+ /**
+ * 海流方向, 单位: 度[0,360]
+ */
+ private Double oceanDir;
+
+ /**
+ * 风速,单位: m/s
+ */
+ private Double windSpeed;
+
+ /**
+ * 风向,单位: 度[0,360]
+ */
+ private Double windDir;
+
+ /**
+ * 海浪预测
+ */
+ private PreviewBean forecast;
+
+ @Data
+ public static class PreviewBean {
+ /**
+ * 涌浪高度, 单位: m(米)
+ */
+ private Double swellHeight;
+
+ /**
+ * 涌浪方向, 单位: 度[0,360]
+ */
+ private Double swellDir;
+
+ /**
+ * 涌浪周期, 单位: s(秒)
+ */
+ private Double swellPrd;
+
+ /**
+ * 风浪高度, 单位: m(米)
+ */
+ private Double waveHeight;
+
+ /**
+ * 风浪方向, 单位: 度[0,360]
+ */
+ private Double waveDir;
+
+ /**
+ * 风浪周期, 单位: s(秒)
+ */
+ private Double wavePrd;
+ }
+
+ public OceanDetailDTO(OceanDetailModel remoteData) {
+ OceanDetailModel.DataBean.ListBean listBean = remoteData.getData().getList().get(0);
+ OceanDetailModel.DataBean.ListBean.YtxBean ytxBean = listBean.getYtx();
+ OceanDetailModel.DataBean.ListBean.MeteoBean meteoBean = listBean.getMeteo();
+ if (ytxBean != null) {
+ this.temperature = formatData(ytxBean.getSurfaceTem());
+ this.altitude = formatData(0.00);
+ this.pressure = formatData(ytxBean.getSurfPres());
+ this.swellHeight = formatData(ytxBean.getSwellHgt());
+ this.swellDir = formatData(ytxBean.getSwellDir());
+ this.swellPrd = formatData(ytxBean.getSwellPrd());
+ this.waveHeight = formatData(ytxBean.getWaveHgt());
+ this.waveDir = formatData(ytxBean.getWaveDir());
+ this.wavePrd = formatData(ytxBean.getWavePrd());
+ this.speed = formatData(ytxBean.getWindMag());
+ this.oceanDir = formatData(ytxBean.getCurrentDir());
+ this.windSpeed = formatData(ytxBean.getWindMag());
+ this.windDir = formatData(ytxBean.getWindDir());
+ }
+ PreviewBean bean = new PreviewBean();
+ if (meteoBean != null) {
+ bean.swellHeight = formatData(meteoBean.getSwellHgt());
+ bean.swellDir = formatData(meteoBean.getSwellDir());
+ bean.swellPrd = formatData(meteoBean.getSwellPrd());
+ bean.waveHeight = formatData(meteoBean.getWaveHgt());
+ bean.waveDir = formatData(meteoBean.getWaveDir());
+ bean.wavePrd = formatData(meteoBean.getWavePrd());
+ }
+ this.forecast = bean;
+ }
+
+ private Double formatData(Double data) {
+ DecimalFormat df = new DecimalFormat("#.00");
+ return Double.parseDouble(df.format(data));
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TyphoonDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TyphoonDTO.java
new file mode 100644
index 0000000..e3b3bb3
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TyphoonDTO.java
@@ -0,0 +1,84 @@
+package com.casic.missiles.modular.system.dto;
+
+import com.casic.missiles.modular.system.model.sql.Typhoon;
+import lombok.Data;
+
+/**
+ * @author a203
+ */
+@Data
+public class TyphoonDTO {
+ /**
+ * 台风ID
+ */
+ private String typhoonId;
+ /**
+ * 台风中文代号
+ */
+ private String name;
+ /**
+ * 台风英文代号
+ */
+ private String engName;
+ /**
+ * 经度
+ */
+ private Double lng;
+ /**
+ * 纬度
+ */
+ private Double lat;
+ /**
+ * 台风风力等级描述
+ */
+ private String typhoonType;
+ /**
+ * 台风中心气压,单位【百帕】
+ */
+ private String centerPressure;
+ /**
+ * 风速,单位【米/每秒】
+ */
+ private String speed;
+ /**
+ * 风力,单位【级】
+ */
+ private Integer power;
+ /**
+ * 台风整体移动速度,单位【公里/小时】
+ */
+ private String moveSpeed;
+ /**
+ * 台风未来移动方向
+ */
+ private String moveDirection;
+ /**
+ * 10级风力影响半径
+ */
+ private String radius10;
+ /**
+ * 7级风力影响半径
+ */
+ private String radius7;
+ /**
+ * 数据更新时间
+ */
+ private String time;
+
+ public TyphoonDTO(Typhoon data) {
+ this.typhoonId = data.getTyphoonId();
+ this.name = data.getName();
+ this.engName = data.getEngName();
+ this.lng = data.getLng();
+ this.lat = data.getLat();
+ this.typhoonType = data.getTyphoonType();
+ this.centerPressure = data.getCenterPressure();
+ this.speed = data.getSpeed();
+ this.power = data.getPower();
+ this.moveSpeed = data.getMoveSpeed();
+ this.moveDirection = data.getMoveDirection();
+ this.radius10 = data.getRadius10();
+ this.radius7 = data.getRadius7();
+ this.time = data.getTime();
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TyphoonDetailDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TyphoonDetailDTO.java
new file mode 100644
index 0000000..295c57f
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TyphoonDetailDTO.java
@@ -0,0 +1,190 @@
+package com.casic.missiles.modular.system.dto;
+
+import com.casic.missiles.modular.system.model.sql.LandPoint;
+import com.casic.missiles.modular.system.model.sql.RoutePoint;
+import com.casic.missiles.modular.system.model.sql.TyphoonDetail;
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 台风详情
+ *
+ * @author a203
+ */
+@Data
+public class TyphoonDetailDTO {
+ /**
+ * 台风ID
+ */
+ private String typhoonId;
+ /**
+ * 台风中文代号
+ */
+ private String name;
+ /**
+ * 台风英文代号
+ */
+ private String engName;
+ /**
+ * 台风告警级别
+ */
+ private String warnLevel;
+ /**
+ * 台风中心经度
+ */
+ private Double centerLng;
+ /**
+ * 台风中心纬度
+ */
+ private Double centerLat;
+ /**
+ * 台风开始时间
+ */
+ private String startTime;
+ /**
+ * 台风结束时间
+ */
+ private String endTime;
+ /**
+ * 台风状态
+ */
+ private String isActive;
+ /**
+ * 台风登陆点
+ */
+ private List land;
+ /**
+ * 台风路径
+ */
+ private List points;
+
+ @Data
+ public static class LandBan {
+ /**
+ * 台风登陆点
+ */
+ private String landAddress;
+ /**
+ * 台风类型-热带风暴/强台风...
+ */
+ private String type;
+ private Double lng;
+ private Double lat;
+ /**
+ * 台风登陆细节
+ */
+ private String info;
+ /**
+ * 台风登陆时间
+ */
+ private String landTime;
+ }
+
+ @Data
+ public static class PointBean {
+ /**
+ * 数据更新时间
+ */
+ private String time;
+ /**
+ * 台风中心气压,单位【百帕】
+ */
+ private String centerPressure;
+ /**
+ * 风速,单位【米/每秒】
+ */
+ private String speed;
+ /**
+ * 台风风力等级描述
+ */
+ private String typhoonType;
+ /**
+ * 台风整体移动速度,单位【公里/小时】
+ */
+ private String moveSpeed;
+ /**
+ * 风力,单位【级】
+ */
+ private Integer power;
+ /**
+ * 台风未来移动方向
+ */
+ private String moveDirection;
+ /**
+ * 经度
+ */
+ private Double lng;
+ /**
+ * 纬度
+ */
+ private Double lat;
+ /**
+ * 12级风力影响半径
+ */
+ private String radius12;
+ /**
+ * 10级风力影响半径
+ */
+ private String radius10;
+ /**
+ * 7级风力影响半径
+ */
+ private String radius7;
+ /**
+ * 台风路线预测
+ */
+ private String routePrediction;
+ /**
+ * 中心位置
+ */
+ private String centerPosition;
+ }
+
+ public TyphoonDetailDTO(TyphoonDetail detail, List landBeans, List routeBeans) {
+ this.typhoonId = detail.getTyphoonId();
+ this.name = detail.getName();
+ this.engName = detail.getEngName();
+ this.warnLevel = detail.getWarnLevel();
+ this.centerLng = detail.getCenterLng();
+ this.centerLat = detail.getCenterLat();
+ this.startTime = detail.getStartTime();
+ this.endTime = detail.getEndTime();
+ this.isActive = detail.getIsActive();
+
+ List lands = new ArrayList<>();
+ for (LandPoint landBean : landBeans) {
+ LandBan bean = new LandBan();
+ bean.landAddress = landBean.getLandAddress();
+ bean.landTime = landBean.getLandTime();
+ bean.type = landBean.getType();
+ bean.lng = landBean.getLng();
+ bean.lat = landBean.getLat();
+ bean.info = landBean.getInfo();
+ lands.add(bean);
+ }
+ this.land = lands;
+
+ List points = new ArrayList<>();
+ for (RoutePoint point : routeBeans) {
+ PointBean pointBean = new PointBean();
+ pointBean.time = point.getTime();
+ pointBean.centerPressure = point.getCenterPressure();
+ pointBean.speed = point.getSpeed();
+ pointBean.typhoonType = point.getTyphoonType();
+ pointBean.moveSpeed = point.getMoveSpeed();
+ pointBean.power = point.getPower();
+ pointBean.moveDirection = point.getMoveDirection();
+ pointBean.lng = point.getLng();
+ pointBean.lat = point.getLat();
+ pointBean.radius12 = point.getRadius12();
+ pointBean.radius10 = point.getRadius10();
+ pointBean.radius7 = point.getRadius7();
+ pointBean.routePrediction = point.getRoutePrediction();
+ pointBean.centerPosition = point.getCenterPosition();
+ points.add(pointBean);
+ }
+ this.points = points;
+ }
+}
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index 913a287..71c67c0 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -36,6 +36,16 @@
provided
+
+ com.alibaba
+ fastjson
+ ${fastjson.version}
+
+
+ com.squareup.okhttp3
+ okhttp
+ 4.9.1
+
diff --git a/casic-server/src/main/java/com/casic/missiles/job/TyphoonQuartzJob.java b/casic-server/src/main/java/com/casic/missiles/job/TyphoonQuartzJob.java
new file mode 100644
index 0000000..87b8c72
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/job/TyphoonQuartzJob.java
@@ -0,0 +1,27 @@
+package com.casic.missiles.job;
+
+import com.casic.missiles.modular.system.service.ITyphoonService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+/**
+ * 台风数据定时任务,每小时执行一次
+ *
+ * @author a203
+ * @Description 依赖casic-job-quartz,并在CasicApplication上增加注解 @EnableScheduling
+ */
+@Slf4j
+@Component
+public class TyphoonQuartzJob {
+ private final ITyphoonService typhoonService;
+
+ public TyphoonQuartzJob(ITyphoonService typhoonService) {
+ this.typhoonService = typhoonService;
+ }
+
+ @Scheduled(cron = "0 0 */1 * * ?")
+ public void execute() {
+ typhoonService.saveTyphoon();
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DemoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DemoController.java
deleted file mode 100644
index 87b6fec..0000000
--- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DemoController.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.casic.missiles.modular.system.controller;
-
-
-import com.casic.missiles.model.application.event.core.EventPublisher;
-import com.casic.missiles.model.application.event.enums.ModelEventTypeEnum;
-import com.casic.missiles.model.response.ResponseData;
-import com.casic.missiles.modular.system.event.UserEvent;
-import com.casic.missiles.modular.system.model.User;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.ResponseBody;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * @ClassName DemoController
- * @Description TODO
- * @Author lenovo
- * @Date 2020/6/13 15:38
- * @Version 1.0
- */
-@RestController
-@RequestMapping("/demo")
-public class DemoController {
- @Autowired
- private EventPublisher publisher;
-
- /**
- * 获取mockToken
- */
- @PostMapping("/list")
- @ResponseBody
- public Object list() {
- User user = new User();
- user.setAccount("张三");
- publisher.publishEvent(new UserEvent(ModelEventTypeEnum.ADD, user));
- return ResponseData.success();
- }
-
-
-}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/EnvironmentController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/EnvironmentController.java
new file mode 100644
index 0000000..44a55d6
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/EnvironmentController.java
@@ -0,0 +1,62 @@
+package com.casic.missiles.modular.system.controller;
+
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.OceanDetailDTO;
+import com.casic.missiles.modular.system.dto.TyphoonDTO;
+import com.casic.missiles.modular.system.dto.TyphoonDetailDTO;
+import com.casic.missiles.modular.system.service.IOceanService;
+import com.casic.missiles.modular.system.service.ITyphoonService;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.List;
+
+/**
+ * 环境控制器
+ *
+ * @author a203
+ */
+@Controller
+@RequestMapping("/environment")
+public class EnvironmentController {
+ private final ITyphoonService typhoonService;
+ private final IOceanService oceanService;
+
+ public EnvironmentController(ITyphoonService typhoonService, IOceanService oceanService) {
+ this.typhoonService = typhoonService;
+ this.oceanService = oceanService;
+ }
+
+ /**
+ * 台风列表
+ */
+ @GetMapping(value = "/typhoonList")
+ @ResponseBody
+ public Object list() {
+ List typhoonList = typhoonService.currentTyphoonList();
+ return ResponseData.success(typhoonList);
+ }
+
+ /**
+ * 台风详情
+ */
+ @GetMapping(value = "/typhoonDetail/{typhoonId}")
+ @ResponseBody
+ public Object detail(@PathVariable("typhoonId") String typhoonId) {
+ TyphoonDetailDTO detailDTO = typhoonService.typhoonDetail(typhoonId);
+ return ResponseData.success(detailDTO);
+ }
+
+ /**
+ * 洋流详情
+ */
+ @GetMapping(value = "/ocean")
+ @ResponseBody
+ public Object oceanDetail(double lng, double lat, String date, String days, String hour) {
+ OceanDetailDTO detailDTO = oceanService.oceanDetail(lng, lat, date, days, hour);
+ return ResponseData.success(detailDTO);
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/LandPointMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/LandPointMapper.java
new file mode 100644
index 0000000..1f4757d
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/LandPointMapper.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.modular.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.modular.system.model.sql.LandPoint;
+
+/**
+ * 台风登陆数据信息 Mapper 接口
+ *
+ * @author a203
+ */
+public interface LandPointMapper extends BaseMapper {
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RoutePointMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RoutePointMapper.java
new file mode 100644
index 0000000..f31f6d0
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RoutePointMapper.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.modular.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.modular.system.model.sql.RoutePoint;
+
+/**
+ * 台风移动点数据信息 Mapper 接口
+ *
+ * @author a203
+ */
+public interface RoutePointMapper extends BaseMapper {
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonDetailMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonDetailMapper.java
new file mode 100644
index 0000000..bce7a6b
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonDetailMapper.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.modular.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.modular.system.model.sql.TyphoonDetail;
+
+/**
+ * 台风数据信息 Mapper 接口
+ *
+ * @author a203
+ */
+public interface TyphoonDetailMapper extends BaseMapper {
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonMapper.java
new file mode 100644
index 0000000..40fcb32
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonMapper.java
@@ -0,0 +1,21 @@
+package com.casic.missiles.modular.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.modular.system.model.sql.Typhoon;
+
+import java.util.List;
+
+/**
+ * 台风数据信息 Mapper 接口
+ *
+ * @author a203
+ */
+public interface TyphoonMapper extends BaseMapper {
+
+ /**
+ * 查询当前未消散的台风
+ *
+ * @return {@link List}
+ */
+ List selectCurrentTyphoon();
+}
\ No newline at end of file
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/TyphoonMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/TyphoonMapper.xml
new file mode 100644
index 0000000..73498fb
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/TyphoonMapper.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java
new file mode 100644
index 0000000..2debc96
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java
@@ -0,0 +1,152 @@
+package com.casic.missiles.modular.system.dto;
+
+import com.casic.missiles.modular.system.model.remote.OceanDetailModel;
+import lombok.Data;
+
+import java.text.DecimalFormat;
+
+/**
+ * @author a203
+ */
+@Data
+public class OceanDetailDTO {
+
+ /**
+ * 海温, 单位: ℃(摄氏度)
+ */
+ private Double temperature;
+
+ /**
+ * 海拔, 单位: m(米)
+ */
+ private Double altitude;
+
+ /**
+ * 气压, 单位: hPa
+ */
+ private Double pressure;
+
+ /**
+ * 涌浪高度, 单位: m(米)
+ */
+ private Double swellHeight;
+
+ /**
+ * 涌浪方向, 单位: 度[0,360]
+ */
+ private Double swellDir;
+
+ /**
+ * 涌浪周期, 单位: s(秒)
+ */
+ private Double swellPrd;
+
+ /**
+ * 风浪高度, 单位: m(米)
+ */
+ private Double waveHeight;
+
+ /**
+ * 风浪方向, 单位: 度[0,360]
+ */
+ private Double waveDir;
+
+ /**
+ * 风浪周期, 单位: s(秒)
+ */
+ private Double wavePrd;
+
+ /**
+ * 海流速度, 单位: m/s
+ */
+ private Double speed;
+
+ /**
+ * 海流方向, 单位: 度[0,360]
+ */
+ private Double oceanDir;
+
+ /**
+ * 风速,单位: m/s
+ */
+ private Double windSpeed;
+
+ /**
+ * 风向,单位: 度[0,360]
+ */
+ private Double windDir;
+
+ /**
+ * 海浪预测
+ */
+ private PreviewBean forecast;
+
+ @Data
+ public static class PreviewBean {
+ /**
+ * 涌浪高度, 单位: m(米)
+ */
+ private Double swellHeight;
+
+ /**
+ * 涌浪方向, 单位: 度[0,360]
+ */
+ private Double swellDir;
+
+ /**
+ * 涌浪周期, 单位: s(秒)
+ */
+ private Double swellPrd;
+
+ /**
+ * 风浪高度, 单位: m(米)
+ */
+ private Double waveHeight;
+
+ /**
+ * 风浪方向, 单位: 度[0,360]
+ */
+ private Double waveDir;
+
+ /**
+ * 风浪周期, 单位: s(秒)
+ */
+ private Double wavePrd;
+ }
+
+ public OceanDetailDTO(OceanDetailModel remoteData) {
+ OceanDetailModel.DataBean.ListBean listBean = remoteData.getData().getList().get(0);
+ OceanDetailModel.DataBean.ListBean.YtxBean ytxBean = listBean.getYtx();
+ OceanDetailModel.DataBean.ListBean.MeteoBean meteoBean = listBean.getMeteo();
+ if (ytxBean != null) {
+ this.temperature = formatData(ytxBean.getSurfaceTem());
+ this.altitude = formatData(0.00);
+ this.pressure = formatData(ytxBean.getSurfPres());
+ this.swellHeight = formatData(ytxBean.getSwellHgt());
+ this.swellDir = formatData(ytxBean.getSwellDir());
+ this.swellPrd = formatData(ytxBean.getSwellPrd());
+ this.waveHeight = formatData(ytxBean.getWaveHgt());
+ this.waveDir = formatData(ytxBean.getWaveDir());
+ this.wavePrd = formatData(ytxBean.getWavePrd());
+ this.speed = formatData(ytxBean.getWindMag());
+ this.oceanDir = formatData(ytxBean.getCurrentDir());
+ this.windSpeed = formatData(ytxBean.getWindMag());
+ this.windDir = formatData(ytxBean.getWindDir());
+ }
+ PreviewBean bean = new PreviewBean();
+ if (meteoBean != null) {
+ bean.swellHeight = formatData(meteoBean.getSwellHgt());
+ bean.swellDir = formatData(meteoBean.getSwellDir());
+ bean.swellPrd = formatData(meteoBean.getSwellPrd());
+ bean.waveHeight = formatData(meteoBean.getWaveHgt());
+ bean.waveDir = formatData(meteoBean.getWaveDir());
+ bean.wavePrd = formatData(meteoBean.getWavePrd());
+ }
+ this.forecast = bean;
+ }
+
+ private Double formatData(Double data) {
+ DecimalFormat df = new DecimalFormat("#.00");
+ return Double.parseDouble(df.format(data));
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TyphoonDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TyphoonDTO.java
new file mode 100644
index 0000000..e3b3bb3
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TyphoonDTO.java
@@ -0,0 +1,84 @@
+package com.casic.missiles.modular.system.dto;
+
+import com.casic.missiles.modular.system.model.sql.Typhoon;
+import lombok.Data;
+
+/**
+ * @author a203
+ */
+@Data
+public class TyphoonDTO {
+ /**
+ * 台风ID
+ */
+ private String typhoonId;
+ /**
+ * 台风中文代号
+ */
+ private String name;
+ /**
+ * 台风英文代号
+ */
+ private String engName;
+ /**
+ * 经度
+ */
+ private Double lng;
+ /**
+ * 纬度
+ */
+ private Double lat;
+ /**
+ * 台风风力等级描述
+ */
+ private String typhoonType;
+ /**
+ * 台风中心气压,单位【百帕】
+ */
+ private String centerPressure;
+ /**
+ * 风速,单位【米/每秒】
+ */
+ private String speed;
+ /**
+ * 风力,单位【级】
+ */
+ private Integer power;
+ /**
+ * 台风整体移动速度,单位【公里/小时】
+ */
+ private String moveSpeed;
+ /**
+ * 台风未来移动方向
+ */
+ private String moveDirection;
+ /**
+ * 10级风力影响半径
+ */
+ private String radius10;
+ /**
+ * 7级风力影响半径
+ */
+ private String radius7;
+ /**
+ * 数据更新时间
+ */
+ private String time;
+
+ public TyphoonDTO(Typhoon data) {
+ this.typhoonId = data.getTyphoonId();
+ this.name = data.getName();
+ this.engName = data.getEngName();
+ this.lng = data.getLng();
+ this.lat = data.getLat();
+ this.typhoonType = data.getTyphoonType();
+ this.centerPressure = data.getCenterPressure();
+ this.speed = data.getSpeed();
+ this.power = data.getPower();
+ this.moveSpeed = data.getMoveSpeed();
+ this.moveDirection = data.getMoveDirection();
+ this.radius10 = data.getRadius10();
+ this.radius7 = data.getRadius7();
+ this.time = data.getTime();
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TyphoonDetailDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TyphoonDetailDTO.java
new file mode 100644
index 0000000..295c57f
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TyphoonDetailDTO.java
@@ -0,0 +1,190 @@
+package com.casic.missiles.modular.system.dto;
+
+import com.casic.missiles.modular.system.model.sql.LandPoint;
+import com.casic.missiles.modular.system.model.sql.RoutePoint;
+import com.casic.missiles.modular.system.model.sql.TyphoonDetail;
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 台风详情
+ *
+ * @author a203
+ */
+@Data
+public class TyphoonDetailDTO {
+ /**
+ * 台风ID
+ */
+ private String typhoonId;
+ /**
+ * 台风中文代号
+ */
+ private String name;
+ /**
+ * 台风英文代号
+ */
+ private String engName;
+ /**
+ * 台风告警级别
+ */
+ private String warnLevel;
+ /**
+ * 台风中心经度
+ */
+ private Double centerLng;
+ /**
+ * 台风中心纬度
+ */
+ private Double centerLat;
+ /**
+ * 台风开始时间
+ */
+ private String startTime;
+ /**
+ * 台风结束时间
+ */
+ private String endTime;
+ /**
+ * 台风状态
+ */
+ private String isActive;
+ /**
+ * 台风登陆点
+ */
+ private List land;
+ /**
+ * 台风路径
+ */
+ private List points;
+
+ @Data
+ public static class LandBan {
+ /**
+ * 台风登陆点
+ */
+ private String landAddress;
+ /**
+ * 台风类型-热带风暴/强台风...
+ */
+ private String type;
+ private Double lng;
+ private Double lat;
+ /**
+ * 台风登陆细节
+ */
+ private String info;
+ /**
+ * 台风登陆时间
+ */
+ private String landTime;
+ }
+
+ @Data
+ public static class PointBean {
+ /**
+ * 数据更新时间
+ */
+ private String time;
+ /**
+ * 台风中心气压,单位【百帕】
+ */
+ private String centerPressure;
+ /**
+ * 风速,单位【米/每秒】
+ */
+ private String speed;
+ /**
+ * 台风风力等级描述
+ */
+ private String typhoonType;
+ /**
+ * 台风整体移动速度,单位【公里/小时】
+ */
+ private String moveSpeed;
+ /**
+ * 风力,单位【级】
+ */
+ private Integer power;
+ /**
+ * 台风未来移动方向
+ */
+ private String moveDirection;
+ /**
+ * 经度
+ */
+ private Double lng;
+ /**
+ * 纬度
+ */
+ private Double lat;
+ /**
+ * 12级风力影响半径
+ */
+ private String radius12;
+ /**
+ * 10级风力影响半径
+ */
+ private String radius10;
+ /**
+ * 7级风力影响半径
+ */
+ private String radius7;
+ /**
+ * 台风路线预测
+ */
+ private String routePrediction;
+ /**
+ * 中心位置
+ */
+ private String centerPosition;
+ }
+
+ public TyphoonDetailDTO(TyphoonDetail detail, List landBeans, List routeBeans) {
+ this.typhoonId = detail.getTyphoonId();
+ this.name = detail.getName();
+ this.engName = detail.getEngName();
+ this.warnLevel = detail.getWarnLevel();
+ this.centerLng = detail.getCenterLng();
+ this.centerLat = detail.getCenterLat();
+ this.startTime = detail.getStartTime();
+ this.endTime = detail.getEndTime();
+ this.isActive = detail.getIsActive();
+
+ List lands = new ArrayList<>();
+ for (LandPoint landBean : landBeans) {
+ LandBan bean = new LandBan();
+ bean.landAddress = landBean.getLandAddress();
+ bean.landTime = landBean.getLandTime();
+ bean.type = landBean.getType();
+ bean.lng = landBean.getLng();
+ bean.lat = landBean.getLat();
+ bean.info = landBean.getInfo();
+ lands.add(bean);
+ }
+ this.land = lands;
+
+ List points = new ArrayList<>();
+ for (RoutePoint point : routeBeans) {
+ PointBean pointBean = new PointBean();
+ pointBean.time = point.getTime();
+ pointBean.centerPressure = point.getCenterPressure();
+ pointBean.speed = point.getSpeed();
+ pointBean.typhoonType = point.getTyphoonType();
+ pointBean.moveSpeed = point.getMoveSpeed();
+ pointBean.power = point.getPower();
+ pointBean.moveDirection = point.getMoveDirection();
+ pointBean.lng = point.getLng();
+ pointBean.lat = point.getLat();
+ pointBean.radius12 = point.getRadius12();
+ pointBean.radius10 = point.getRadius10();
+ pointBean.radius7 = point.getRadius7();
+ pointBean.routePrediction = point.getRoutePrediction();
+ pointBean.centerPosition = point.getCenterPosition();
+ points.add(pointBean);
+ }
+ this.points = points;
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java
deleted file mode 100644
index c6ed867..0000000
--- a/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.casic.missiles.modular.system.event;
-
-import com.casic.missiles.model.application.event.core.ModelEvent;
-import com.casic.missiles.model.application.event.type.AbstractEventTypeEnum;
-import com.casic.missiles.modular.system.model.User;
-
-/**
- * 用户事件
- *
- * @author lwh
- */
-public class UserEvent extends ModelEvent {
- /**
- * Create a new {@code ApplicationEvent}.
- *
- * @param type 事件类型
- * @param source the object on which the event initially occurred or with
- * which the event is associated (never {@code null})
- */
- public UserEvent(AbstractEventTypeEnum type, User source) {
- super(type, source);
- }
-}
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index 913a287..71c67c0 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -36,6 +36,16 @@
provided
+
+ com.alibaba
+ fastjson
+ ${fastjson.version}
+
+
+ com.squareup.okhttp3
+ okhttp
+ 4.9.1
+
diff --git a/casic-server/src/main/java/com/casic/missiles/job/TyphoonQuartzJob.java b/casic-server/src/main/java/com/casic/missiles/job/TyphoonQuartzJob.java
new file mode 100644
index 0000000..87b8c72
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/job/TyphoonQuartzJob.java
@@ -0,0 +1,27 @@
+package com.casic.missiles.job;
+
+import com.casic.missiles.modular.system.service.ITyphoonService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+/**
+ * 台风数据定时任务,每小时执行一次
+ *
+ * @author a203
+ * @Description 依赖casic-job-quartz,并在CasicApplication上增加注解 @EnableScheduling
+ */
+@Slf4j
+@Component
+public class TyphoonQuartzJob {
+ private final ITyphoonService typhoonService;
+
+ public TyphoonQuartzJob(ITyphoonService typhoonService) {
+ this.typhoonService = typhoonService;
+ }
+
+ @Scheduled(cron = "0 0 */1 * * ?")
+ public void execute() {
+ typhoonService.saveTyphoon();
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DemoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DemoController.java
deleted file mode 100644
index 87b6fec..0000000
--- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DemoController.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.casic.missiles.modular.system.controller;
-
-
-import com.casic.missiles.model.application.event.core.EventPublisher;
-import com.casic.missiles.model.application.event.enums.ModelEventTypeEnum;
-import com.casic.missiles.model.response.ResponseData;
-import com.casic.missiles.modular.system.event.UserEvent;
-import com.casic.missiles.modular.system.model.User;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.ResponseBody;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * @ClassName DemoController
- * @Description TODO
- * @Author lenovo
- * @Date 2020/6/13 15:38
- * @Version 1.0
- */
-@RestController
-@RequestMapping("/demo")
-public class DemoController {
- @Autowired
- private EventPublisher publisher;
-
- /**
- * 获取mockToken
- */
- @PostMapping("/list")
- @ResponseBody
- public Object list() {
- User user = new User();
- user.setAccount("张三");
- publisher.publishEvent(new UserEvent(ModelEventTypeEnum.ADD, user));
- return ResponseData.success();
- }
-
-
-}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/EnvironmentController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/EnvironmentController.java
new file mode 100644
index 0000000..44a55d6
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/EnvironmentController.java
@@ -0,0 +1,62 @@
+package com.casic.missiles.modular.system.controller;
+
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.OceanDetailDTO;
+import com.casic.missiles.modular.system.dto.TyphoonDTO;
+import com.casic.missiles.modular.system.dto.TyphoonDetailDTO;
+import com.casic.missiles.modular.system.service.IOceanService;
+import com.casic.missiles.modular.system.service.ITyphoonService;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.List;
+
+/**
+ * 环境控制器
+ *
+ * @author a203
+ */
+@Controller
+@RequestMapping("/environment")
+public class EnvironmentController {
+ private final ITyphoonService typhoonService;
+ private final IOceanService oceanService;
+
+ public EnvironmentController(ITyphoonService typhoonService, IOceanService oceanService) {
+ this.typhoonService = typhoonService;
+ this.oceanService = oceanService;
+ }
+
+ /**
+ * 台风列表
+ */
+ @GetMapping(value = "/typhoonList")
+ @ResponseBody
+ public Object list() {
+ List typhoonList = typhoonService.currentTyphoonList();
+ return ResponseData.success(typhoonList);
+ }
+
+ /**
+ * 台风详情
+ */
+ @GetMapping(value = "/typhoonDetail/{typhoonId}")
+ @ResponseBody
+ public Object detail(@PathVariable("typhoonId") String typhoonId) {
+ TyphoonDetailDTO detailDTO = typhoonService.typhoonDetail(typhoonId);
+ return ResponseData.success(detailDTO);
+ }
+
+ /**
+ * 洋流详情
+ */
+ @GetMapping(value = "/ocean")
+ @ResponseBody
+ public Object oceanDetail(double lng, double lat, String date, String days, String hour) {
+ OceanDetailDTO detailDTO = oceanService.oceanDetail(lng, lat, date, days, hour);
+ return ResponseData.success(detailDTO);
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/LandPointMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/LandPointMapper.java
new file mode 100644
index 0000000..1f4757d
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/LandPointMapper.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.modular.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.modular.system.model.sql.LandPoint;
+
+/**
+ * 台风登陆数据信息 Mapper 接口
+ *
+ * @author a203
+ */
+public interface LandPointMapper extends BaseMapper {
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RoutePointMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RoutePointMapper.java
new file mode 100644
index 0000000..f31f6d0
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RoutePointMapper.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.modular.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.modular.system.model.sql.RoutePoint;
+
+/**
+ * 台风移动点数据信息 Mapper 接口
+ *
+ * @author a203
+ */
+public interface RoutePointMapper extends BaseMapper {
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonDetailMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonDetailMapper.java
new file mode 100644
index 0000000..bce7a6b
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonDetailMapper.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.modular.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.modular.system.model.sql.TyphoonDetail;
+
+/**
+ * 台风数据信息 Mapper 接口
+ *
+ * @author a203
+ */
+public interface TyphoonDetailMapper extends BaseMapper {
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonMapper.java
new file mode 100644
index 0000000..40fcb32
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonMapper.java
@@ -0,0 +1,21 @@
+package com.casic.missiles.modular.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.modular.system.model.sql.Typhoon;
+
+import java.util.List;
+
+/**
+ * 台风数据信息 Mapper 接口
+ *
+ * @author a203
+ */
+public interface TyphoonMapper extends BaseMapper {
+
+ /**
+ * 查询当前未消散的台风
+ *
+ * @return {@link List}
+ */
+ List selectCurrentTyphoon();
+}
\ No newline at end of file
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/TyphoonMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/TyphoonMapper.xml
new file mode 100644
index 0000000..73498fb
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/TyphoonMapper.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java
new file mode 100644
index 0000000..2debc96
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java
@@ -0,0 +1,152 @@
+package com.casic.missiles.modular.system.dto;
+
+import com.casic.missiles.modular.system.model.remote.OceanDetailModel;
+import lombok.Data;
+
+import java.text.DecimalFormat;
+
+/**
+ * @author a203
+ */
+@Data
+public class OceanDetailDTO {
+
+ /**
+ * 海温, 单位: ℃(摄氏度)
+ */
+ private Double temperature;
+
+ /**
+ * 海拔, 单位: m(米)
+ */
+ private Double altitude;
+
+ /**
+ * 气压, 单位: hPa
+ */
+ private Double pressure;
+
+ /**
+ * 涌浪高度, 单位: m(米)
+ */
+ private Double swellHeight;
+
+ /**
+ * 涌浪方向, 单位: 度[0,360]
+ */
+ private Double swellDir;
+
+ /**
+ * 涌浪周期, 单位: s(秒)
+ */
+ private Double swellPrd;
+
+ /**
+ * 风浪高度, 单位: m(米)
+ */
+ private Double waveHeight;
+
+ /**
+ * 风浪方向, 单位: 度[0,360]
+ */
+ private Double waveDir;
+
+ /**
+ * 风浪周期, 单位: s(秒)
+ */
+ private Double wavePrd;
+
+ /**
+ * 海流速度, 单位: m/s
+ */
+ private Double speed;
+
+ /**
+ * 海流方向, 单位: 度[0,360]
+ */
+ private Double oceanDir;
+
+ /**
+ * 风速,单位: m/s
+ */
+ private Double windSpeed;
+
+ /**
+ * 风向,单位: 度[0,360]
+ */
+ private Double windDir;
+
+ /**
+ * 海浪预测
+ */
+ private PreviewBean forecast;
+
+ @Data
+ public static class PreviewBean {
+ /**
+ * 涌浪高度, 单位: m(米)
+ */
+ private Double swellHeight;
+
+ /**
+ * 涌浪方向, 单位: 度[0,360]
+ */
+ private Double swellDir;
+
+ /**
+ * 涌浪周期, 单位: s(秒)
+ */
+ private Double swellPrd;
+
+ /**
+ * 风浪高度, 单位: m(米)
+ */
+ private Double waveHeight;
+
+ /**
+ * 风浪方向, 单位: 度[0,360]
+ */
+ private Double waveDir;
+
+ /**
+ * 风浪周期, 单位: s(秒)
+ */
+ private Double wavePrd;
+ }
+
+ public OceanDetailDTO(OceanDetailModel remoteData) {
+ OceanDetailModel.DataBean.ListBean listBean = remoteData.getData().getList().get(0);
+ OceanDetailModel.DataBean.ListBean.YtxBean ytxBean = listBean.getYtx();
+ OceanDetailModel.DataBean.ListBean.MeteoBean meteoBean = listBean.getMeteo();
+ if (ytxBean != null) {
+ this.temperature = formatData(ytxBean.getSurfaceTem());
+ this.altitude = formatData(0.00);
+ this.pressure = formatData(ytxBean.getSurfPres());
+ this.swellHeight = formatData(ytxBean.getSwellHgt());
+ this.swellDir = formatData(ytxBean.getSwellDir());
+ this.swellPrd = formatData(ytxBean.getSwellPrd());
+ this.waveHeight = formatData(ytxBean.getWaveHgt());
+ this.waveDir = formatData(ytxBean.getWaveDir());
+ this.wavePrd = formatData(ytxBean.getWavePrd());
+ this.speed = formatData(ytxBean.getWindMag());
+ this.oceanDir = formatData(ytxBean.getCurrentDir());
+ this.windSpeed = formatData(ytxBean.getWindMag());
+ this.windDir = formatData(ytxBean.getWindDir());
+ }
+ PreviewBean bean = new PreviewBean();
+ if (meteoBean != null) {
+ bean.swellHeight = formatData(meteoBean.getSwellHgt());
+ bean.swellDir = formatData(meteoBean.getSwellDir());
+ bean.swellPrd = formatData(meteoBean.getSwellPrd());
+ bean.waveHeight = formatData(meteoBean.getWaveHgt());
+ bean.waveDir = formatData(meteoBean.getWaveDir());
+ bean.wavePrd = formatData(meteoBean.getWavePrd());
+ }
+ this.forecast = bean;
+ }
+
+ private Double formatData(Double data) {
+ DecimalFormat df = new DecimalFormat("#.00");
+ return Double.parseDouble(df.format(data));
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TyphoonDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TyphoonDTO.java
new file mode 100644
index 0000000..e3b3bb3
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TyphoonDTO.java
@@ -0,0 +1,84 @@
+package com.casic.missiles.modular.system.dto;
+
+import com.casic.missiles.modular.system.model.sql.Typhoon;
+import lombok.Data;
+
+/**
+ * @author a203
+ */
+@Data
+public class TyphoonDTO {
+ /**
+ * 台风ID
+ */
+ private String typhoonId;
+ /**
+ * 台风中文代号
+ */
+ private String name;
+ /**
+ * 台风英文代号
+ */
+ private String engName;
+ /**
+ * 经度
+ */
+ private Double lng;
+ /**
+ * 纬度
+ */
+ private Double lat;
+ /**
+ * 台风风力等级描述
+ */
+ private String typhoonType;
+ /**
+ * 台风中心气压,单位【百帕】
+ */
+ private String centerPressure;
+ /**
+ * 风速,单位【米/每秒】
+ */
+ private String speed;
+ /**
+ * 风力,单位【级】
+ */
+ private Integer power;
+ /**
+ * 台风整体移动速度,单位【公里/小时】
+ */
+ private String moveSpeed;
+ /**
+ * 台风未来移动方向
+ */
+ private String moveDirection;
+ /**
+ * 10级风力影响半径
+ */
+ private String radius10;
+ /**
+ * 7级风力影响半径
+ */
+ private String radius7;
+ /**
+ * 数据更新时间
+ */
+ private String time;
+
+ public TyphoonDTO(Typhoon data) {
+ this.typhoonId = data.getTyphoonId();
+ this.name = data.getName();
+ this.engName = data.getEngName();
+ this.lng = data.getLng();
+ this.lat = data.getLat();
+ this.typhoonType = data.getTyphoonType();
+ this.centerPressure = data.getCenterPressure();
+ this.speed = data.getSpeed();
+ this.power = data.getPower();
+ this.moveSpeed = data.getMoveSpeed();
+ this.moveDirection = data.getMoveDirection();
+ this.radius10 = data.getRadius10();
+ this.radius7 = data.getRadius7();
+ this.time = data.getTime();
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TyphoonDetailDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TyphoonDetailDTO.java
new file mode 100644
index 0000000..295c57f
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TyphoonDetailDTO.java
@@ -0,0 +1,190 @@
+package com.casic.missiles.modular.system.dto;
+
+import com.casic.missiles.modular.system.model.sql.LandPoint;
+import com.casic.missiles.modular.system.model.sql.RoutePoint;
+import com.casic.missiles.modular.system.model.sql.TyphoonDetail;
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 台风详情
+ *
+ * @author a203
+ */
+@Data
+public class TyphoonDetailDTO {
+ /**
+ * 台风ID
+ */
+ private String typhoonId;
+ /**
+ * 台风中文代号
+ */
+ private String name;
+ /**
+ * 台风英文代号
+ */
+ private String engName;
+ /**
+ * 台风告警级别
+ */
+ private String warnLevel;
+ /**
+ * 台风中心经度
+ */
+ private Double centerLng;
+ /**
+ * 台风中心纬度
+ */
+ private Double centerLat;
+ /**
+ * 台风开始时间
+ */
+ private String startTime;
+ /**
+ * 台风结束时间
+ */
+ private String endTime;
+ /**
+ * 台风状态
+ */
+ private String isActive;
+ /**
+ * 台风登陆点
+ */
+ private List land;
+ /**
+ * 台风路径
+ */
+ private List points;
+
+ @Data
+ public static class LandBan {
+ /**
+ * 台风登陆点
+ */
+ private String landAddress;
+ /**
+ * 台风类型-热带风暴/强台风...
+ */
+ private String type;
+ private Double lng;
+ private Double lat;
+ /**
+ * 台风登陆细节
+ */
+ private String info;
+ /**
+ * 台风登陆时间
+ */
+ private String landTime;
+ }
+
+ @Data
+ public static class PointBean {
+ /**
+ * 数据更新时间
+ */
+ private String time;
+ /**
+ * 台风中心气压,单位【百帕】
+ */
+ private String centerPressure;
+ /**
+ * 风速,单位【米/每秒】
+ */
+ private String speed;
+ /**
+ * 台风风力等级描述
+ */
+ private String typhoonType;
+ /**
+ * 台风整体移动速度,单位【公里/小时】
+ */
+ private String moveSpeed;
+ /**
+ * 风力,单位【级】
+ */
+ private Integer power;
+ /**
+ * 台风未来移动方向
+ */
+ private String moveDirection;
+ /**
+ * 经度
+ */
+ private Double lng;
+ /**
+ * 纬度
+ */
+ private Double lat;
+ /**
+ * 12级风力影响半径
+ */
+ private String radius12;
+ /**
+ * 10级风力影响半径
+ */
+ private String radius10;
+ /**
+ * 7级风力影响半径
+ */
+ private String radius7;
+ /**
+ * 台风路线预测
+ */
+ private String routePrediction;
+ /**
+ * 中心位置
+ */
+ private String centerPosition;
+ }
+
+ public TyphoonDetailDTO(TyphoonDetail detail, List landBeans, List routeBeans) {
+ this.typhoonId = detail.getTyphoonId();
+ this.name = detail.getName();
+ this.engName = detail.getEngName();
+ this.warnLevel = detail.getWarnLevel();
+ this.centerLng = detail.getCenterLng();
+ this.centerLat = detail.getCenterLat();
+ this.startTime = detail.getStartTime();
+ this.endTime = detail.getEndTime();
+ this.isActive = detail.getIsActive();
+
+ List lands = new ArrayList<>();
+ for (LandPoint landBean : landBeans) {
+ LandBan bean = new LandBan();
+ bean.landAddress = landBean.getLandAddress();
+ bean.landTime = landBean.getLandTime();
+ bean.type = landBean.getType();
+ bean.lng = landBean.getLng();
+ bean.lat = landBean.getLat();
+ bean.info = landBean.getInfo();
+ lands.add(bean);
+ }
+ this.land = lands;
+
+ List points = new ArrayList<>();
+ for (RoutePoint point : routeBeans) {
+ PointBean pointBean = new PointBean();
+ pointBean.time = point.getTime();
+ pointBean.centerPressure = point.getCenterPressure();
+ pointBean.speed = point.getSpeed();
+ pointBean.typhoonType = point.getTyphoonType();
+ pointBean.moveSpeed = point.getMoveSpeed();
+ pointBean.power = point.getPower();
+ pointBean.moveDirection = point.getMoveDirection();
+ pointBean.lng = point.getLng();
+ pointBean.lat = point.getLat();
+ pointBean.radius12 = point.getRadius12();
+ pointBean.radius10 = point.getRadius10();
+ pointBean.radius7 = point.getRadius7();
+ pointBean.routePrediction = point.getRoutePrediction();
+ pointBean.centerPosition = point.getCenterPosition();
+ points.add(pointBean);
+ }
+ this.points = points;
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java
deleted file mode 100644
index c6ed867..0000000
--- a/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.casic.missiles.modular.system.event;
-
-import com.casic.missiles.model.application.event.core.ModelEvent;
-import com.casic.missiles.model.application.event.type.AbstractEventTypeEnum;
-import com.casic.missiles.modular.system.model.User;
-
-/**
- * 用户事件
- *
- * @author lwh
- */
-public class UserEvent extends ModelEvent {
- /**
- * Create a new {@code ApplicationEvent}.
- *
- * @param type 事件类型
- * @param source the object on which the event initially occurred or with
- * which the event is associated (never {@code null})
- */
- public UserEvent(AbstractEventTypeEnum type, User source) {
- super(type, source);
- }
-}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java
deleted file mode 100644
index 4480ef2..0000000
--- a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.casic.missiles.modular.system.event.listener;
-
-import com.casic.missiles.core.application.event.UserLoginEvent;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.context.event.EventListener;
-import org.springframework.stereotype.Component;
-
-/**
- * 用户事件订阅
- *
- * @author lwh
- */
-@Slf4j
-@Component
-public class UserOneListener {
- @EventListener
- public void onApplicationEvent(UserLoginEvent event) {
- log.debug("用户1订阅:{}", event);
- }
-}
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index 913a287..71c67c0 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -36,6 +36,16 @@
provided
+
+ com.alibaba
+ fastjson
+ ${fastjson.version}
+
+
+ com.squareup.okhttp3
+ okhttp
+ 4.9.1
+
diff --git a/casic-server/src/main/java/com/casic/missiles/job/TyphoonQuartzJob.java b/casic-server/src/main/java/com/casic/missiles/job/TyphoonQuartzJob.java
new file mode 100644
index 0000000..87b8c72
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/job/TyphoonQuartzJob.java
@@ -0,0 +1,27 @@
+package com.casic.missiles.job;
+
+import com.casic.missiles.modular.system.service.ITyphoonService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+/**
+ * 台风数据定时任务,每小时执行一次
+ *
+ * @author a203
+ * @Description 依赖casic-job-quartz,并在CasicApplication上增加注解 @EnableScheduling
+ */
+@Slf4j
+@Component
+public class TyphoonQuartzJob {
+ private final ITyphoonService typhoonService;
+
+ public TyphoonQuartzJob(ITyphoonService typhoonService) {
+ this.typhoonService = typhoonService;
+ }
+
+ @Scheduled(cron = "0 0 */1 * * ?")
+ public void execute() {
+ typhoonService.saveTyphoon();
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DemoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DemoController.java
deleted file mode 100644
index 87b6fec..0000000
--- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DemoController.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.casic.missiles.modular.system.controller;
-
-
-import com.casic.missiles.model.application.event.core.EventPublisher;
-import com.casic.missiles.model.application.event.enums.ModelEventTypeEnum;
-import com.casic.missiles.model.response.ResponseData;
-import com.casic.missiles.modular.system.event.UserEvent;
-import com.casic.missiles.modular.system.model.User;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.ResponseBody;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * @ClassName DemoController
- * @Description TODO
- * @Author lenovo
- * @Date 2020/6/13 15:38
- * @Version 1.0
- */
-@RestController
-@RequestMapping("/demo")
-public class DemoController {
- @Autowired
- private EventPublisher publisher;
-
- /**
- * 获取mockToken
- */
- @PostMapping("/list")
- @ResponseBody
- public Object list() {
- User user = new User();
- user.setAccount("张三");
- publisher.publishEvent(new UserEvent(ModelEventTypeEnum.ADD, user));
- return ResponseData.success();
- }
-
-
-}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/EnvironmentController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/EnvironmentController.java
new file mode 100644
index 0000000..44a55d6
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/EnvironmentController.java
@@ -0,0 +1,62 @@
+package com.casic.missiles.modular.system.controller;
+
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.OceanDetailDTO;
+import com.casic.missiles.modular.system.dto.TyphoonDTO;
+import com.casic.missiles.modular.system.dto.TyphoonDetailDTO;
+import com.casic.missiles.modular.system.service.IOceanService;
+import com.casic.missiles.modular.system.service.ITyphoonService;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.List;
+
+/**
+ * 环境控制器
+ *
+ * @author a203
+ */
+@Controller
+@RequestMapping("/environment")
+public class EnvironmentController {
+ private final ITyphoonService typhoonService;
+ private final IOceanService oceanService;
+
+ public EnvironmentController(ITyphoonService typhoonService, IOceanService oceanService) {
+ this.typhoonService = typhoonService;
+ this.oceanService = oceanService;
+ }
+
+ /**
+ * 台风列表
+ */
+ @GetMapping(value = "/typhoonList")
+ @ResponseBody
+ public Object list() {
+ List typhoonList = typhoonService.currentTyphoonList();
+ return ResponseData.success(typhoonList);
+ }
+
+ /**
+ * 台风详情
+ */
+ @GetMapping(value = "/typhoonDetail/{typhoonId}")
+ @ResponseBody
+ public Object detail(@PathVariable("typhoonId") String typhoonId) {
+ TyphoonDetailDTO detailDTO = typhoonService.typhoonDetail(typhoonId);
+ return ResponseData.success(detailDTO);
+ }
+
+ /**
+ * 洋流详情
+ */
+ @GetMapping(value = "/ocean")
+ @ResponseBody
+ public Object oceanDetail(double lng, double lat, String date, String days, String hour) {
+ OceanDetailDTO detailDTO = oceanService.oceanDetail(lng, lat, date, days, hour);
+ return ResponseData.success(detailDTO);
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/LandPointMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/LandPointMapper.java
new file mode 100644
index 0000000..1f4757d
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/LandPointMapper.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.modular.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.modular.system.model.sql.LandPoint;
+
+/**
+ * 台风登陆数据信息 Mapper 接口
+ *
+ * @author a203
+ */
+public interface LandPointMapper extends BaseMapper {
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RoutePointMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RoutePointMapper.java
new file mode 100644
index 0000000..f31f6d0
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RoutePointMapper.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.modular.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.modular.system.model.sql.RoutePoint;
+
+/**
+ * 台风移动点数据信息 Mapper 接口
+ *
+ * @author a203
+ */
+public interface RoutePointMapper extends BaseMapper {
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonDetailMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonDetailMapper.java
new file mode 100644
index 0000000..bce7a6b
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonDetailMapper.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.modular.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.modular.system.model.sql.TyphoonDetail;
+
+/**
+ * 台风数据信息 Mapper 接口
+ *
+ * @author a203
+ */
+public interface TyphoonDetailMapper extends BaseMapper {
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonMapper.java
new file mode 100644
index 0000000..40fcb32
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonMapper.java
@@ -0,0 +1,21 @@
+package com.casic.missiles.modular.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.modular.system.model.sql.Typhoon;
+
+import java.util.List;
+
+/**
+ * 台风数据信息 Mapper 接口
+ *
+ * @author a203
+ */
+public interface TyphoonMapper extends BaseMapper {
+
+ /**
+ * 查询当前未消散的台风
+ *
+ * @return {@link List}
+ */
+ List selectCurrentTyphoon();
+}
\ No newline at end of file
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/TyphoonMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/TyphoonMapper.xml
new file mode 100644
index 0000000..73498fb
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/TyphoonMapper.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java
new file mode 100644
index 0000000..2debc96
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java
@@ -0,0 +1,152 @@
+package com.casic.missiles.modular.system.dto;
+
+import com.casic.missiles.modular.system.model.remote.OceanDetailModel;
+import lombok.Data;
+
+import java.text.DecimalFormat;
+
+/**
+ * @author a203
+ */
+@Data
+public class OceanDetailDTO {
+
+ /**
+ * 海温, 单位: ℃(摄氏度)
+ */
+ private Double temperature;
+
+ /**
+ * 海拔, 单位: m(米)
+ */
+ private Double altitude;
+
+ /**
+ * 气压, 单位: hPa
+ */
+ private Double pressure;
+
+ /**
+ * 涌浪高度, 单位: m(米)
+ */
+ private Double swellHeight;
+
+ /**
+ * 涌浪方向, 单位: 度[0,360]
+ */
+ private Double swellDir;
+
+ /**
+ * 涌浪周期, 单位: s(秒)
+ */
+ private Double swellPrd;
+
+ /**
+ * 风浪高度, 单位: m(米)
+ */
+ private Double waveHeight;
+
+ /**
+ * 风浪方向, 单位: 度[0,360]
+ */
+ private Double waveDir;
+
+ /**
+ * 风浪周期, 单位: s(秒)
+ */
+ private Double wavePrd;
+
+ /**
+ * 海流速度, 单位: m/s
+ */
+ private Double speed;
+
+ /**
+ * 海流方向, 单位: 度[0,360]
+ */
+ private Double oceanDir;
+
+ /**
+ * 风速,单位: m/s
+ */
+ private Double windSpeed;
+
+ /**
+ * 风向,单位: 度[0,360]
+ */
+ private Double windDir;
+
+ /**
+ * 海浪预测
+ */
+ private PreviewBean forecast;
+
+ @Data
+ public static class PreviewBean {
+ /**
+ * 涌浪高度, 单位: m(米)
+ */
+ private Double swellHeight;
+
+ /**
+ * 涌浪方向, 单位: 度[0,360]
+ */
+ private Double swellDir;
+
+ /**
+ * 涌浪周期, 单位: s(秒)
+ */
+ private Double swellPrd;
+
+ /**
+ * 风浪高度, 单位: m(米)
+ */
+ private Double waveHeight;
+
+ /**
+ * 风浪方向, 单位: 度[0,360]
+ */
+ private Double waveDir;
+
+ /**
+ * 风浪周期, 单位: s(秒)
+ */
+ private Double wavePrd;
+ }
+
+ public OceanDetailDTO(OceanDetailModel remoteData) {
+ OceanDetailModel.DataBean.ListBean listBean = remoteData.getData().getList().get(0);
+ OceanDetailModel.DataBean.ListBean.YtxBean ytxBean = listBean.getYtx();
+ OceanDetailModel.DataBean.ListBean.MeteoBean meteoBean = listBean.getMeteo();
+ if (ytxBean != null) {
+ this.temperature = formatData(ytxBean.getSurfaceTem());
+ this.altitude = formatData(0.00);
+ this.pressure = formatData(ytxBean.getSurfPres());
+ this.swellHeight = formatData(ytxBean.getSwellHgt());
+ this.swellDir = formatData(ytxBean.getSwellDir());
+ this.swellPrd = formatData(ytxBean.getSwellPrd());
+ this.waveHeight = formatData(ytxBean.getWaveHgt());
+ this.waveDir = formatData(ytxBean.getWaveDir());
+ this.wavePrd = formatData(ytxBean.getWavePrd());
+ this.speed = formatData(ytxBean.getWindMag());
+ this.oceanDir = formatData(ytxBean.getCurrentDir());
+ this.windSpeed = formatData(ytxBean.getWindMag());
+ this.windDir = formatData(ytxBean.getWindDir());
+ }
+ PreviewBean bean = new PreviewBean();
+ if (meteoBean != null) {
+ bean.swellHeight = formatData(meteoBean.getSwellHgt());
+ bean.swellDir = formatData(meteoBean.getSwellDir());
+ bean.swellPrd = formatData(meteoBean.getSwellPrd());
+ bean.waveHeight = formatData(meteoBean.getWaveHgt());
+ bean.waveDir = formatData(meteoBean.getWaveDir());
+ bean.wavePrd = formatData(meteoBean.getWavePrd());
+ }
+ this.forecast = bean;
+ }
+
+ private Double formatData(Double data) {
+ DecimalFormat df = new DecimalFormat("#.00");
+ return Double.parseDouble(df.format(data));
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TyphoonDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TyphoonDTO.java
new file mode 100644
index 0000000..e3b3bb3
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TyphoonDTO.java
@@ -0,0 +1,84 @@
+package com.casic.missiles.modular.system.dto;
+
+import com.casic.missiles.modular.system.model.sql.Typhoon;
+import lombok.Data;
+
+/**
+ * @author a203
+ */
+@Data
+public class TyphoonDTO {
+ /**
+ * 台风ID
+ */
+ private String typhoonId;
+ /**
+ * 台风中文代号
+ */
+ private String name;
+ /**
+ * 台风英文代号
+ */
+ private String engName;
+ /**
+ * 经度
+ */
+ private Double lng;
+ /**
+ * 纬度
+ */
+ private Double lat;
+ /**
+ * 台风风力等级描述
+ */
+ private String typhoonType;
+ /**
+ * 台风中心气压,单位【百帕】
+ */
+ private String centerPressure;
+ /**
+ * 风速,单位【米/每秒】
+ */
+ private String speed;
+ /**
+ * 风力,单位【级】
+ */
+ private Integer power;
+ /**
+ * 台风整体移动速度,单位【公里/小时】
+ */
+ private String moveSpeed;
+ /**
+ * 台风未来移动方向
+ */
+ private String moveDirection;
+ /**
+ * 10级风力影响半径
+ */
+ private String radius10;
+ /**
+ * 7级风力影响半径
+ */
+ private String radius7;
+ /**
+ * 数据更新时间
+ */
+ private String time;
+
+ public TyphoonDTO(Typhoon data) {
+ this.typhoonId = data.getTyphoonId();
+ this.name = data.getName();
+ this.engName = data.getEngName();
+ this.lng = data.getLng();
+ this.lat = data.getLat();
+ this.typhoonType = data.getTyphoonType();
+ this.centerPressure = data.getCenterPressure();
+ this.speed = data.getSpeed();
+ this.power = data.getPower();
+ this.moveSpeed = data.getMoveSpeed();
+ this.moveDirection = data.getMoveDirection();
+ this.radius10 = data.getRadius10();
+ this.radius7 = data.getRadius7();
+ this.time = data.getTime();
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TyphoonDetailDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TyphoonDetailDTO.java
new file mode 100644
index 0000000..295c57f
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TyphoonDetailDTO.java
@@ -0,0 +1,190 @@
+package com.casic.missiles.modular.system.dto;
+
+import com.casic.missiles.modular.system.model.sql.LandPoint;
+import com.casic.missiles.modular.system.model.sql.RoutePoint;
+import com.casic.missiles.modular.system.model.sql.TyphoonDetail;
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 台风详情
+ *
+ * @author a203
+ */
+@Data
+public class TyphoonDetailDTO {
+ /**
+ * 台风ID
+ */
+ private String typhoonId;
+ /**
+ * 台风中文代号
+ */
+ private String name;
+ /**
+ * 台风英文代号
+ */
+ private String engName;
+ /**
+ * 台风告警级别
+ */
+ private String warnLevel;
+ /**
+ * 台风中心经度
+ */
+ private Double centerLng;
+ /**
+ * 台风中心纬度
+ */
+ private Double centerLat;
+ /**
+ * 台风开始时间
+ */
+ private String startTime;
+ /**
+ * 台风结束时间
+ */
+ private String endTime;
+ /**
+ * 台风状态
+ */
+ private String isActive;
+ /**
+ * 台风登陆点
+ */
+ private List land;
+ /**
+ * 台风路径
+ */
+ private List points;
+
+ @Data
+ public static class LandBan {
+ /**
+ * 台风登陆点
+ */
+ private String landAddress;
+ /**
+ * 台风类型-热带风暴/强台风...
+ */
+ private String type;
+ private Double lng;
+ private Double lat;
+ /**
+ * 台风登陆细节
+ */
+ private String info;
+ /**
+ * 台风登陆时间
+ */
+ private String landTime;
+ }
+
+ @Data
+ public static class PointBean {
+ /**
+ * 数据更新时间
+ */
+ private String time;
+ /**
+ * 台风中心气压,单位【百帕】
+ */
+ private String centerPressure;
+ /**
+ * 风速,单位【米/每秒】
+ */
+ private String speed;
+ /**
+ * 台风风力等级描述
+ */
+ private String typhoonType;
+ /**
+ * 台风整体移动速度,单位【公里/小时】
+ */
+ private String moveSpeed;
+ /**
+ * 风力,单位【级】
+ */
+ private Integer power;
+ /**
+ * 台风未来移动方向
+ */
+ private String moveDirection;
+ /**
+ * 经度
+ */
+ private Double lng;
+ /**
+ * 纬度
+ */
+ private Double lat;
+ /**
+ * 12级风力影响半径
+ */
+ private String radius12;
+ /**
+ * 10级风力影响半径
+ */
+ private String radius10;
+ /**
+ * 7级风力影响半径
+ */
+ private String radius7;
+ /**
+ * 台风路线预测
+ */
+ private String routePrediction;
+ /**
+ * 中心位置
+ */
+ private String centerPosition;
+ }
+
+ public TyphoonDetailDTO(TyphoonDetail detail, List landBeans, List routeBeans) {
+ this.typhoonId = detail.getTyphoonId();
+ this.name = detail.getName();
+ this.engName = detail.getEngName();
+ this.warnLevel = detail.getWarnLevel();
+ this.centerLng = detail.getCenterLng();
+ this.centerLat = detail.getCenterLat();
+ this.startTime = detail.getStartTime();
+ this.endTime = detail.getEndTime();
+ this.isActive = detail.getIsActive();
+
+ List lands = new ArrayList<>();
+ for (LandPoint landBean : landBeans) {
+ LandBan bean = new LandBan();
+ bean.landAddress = landBean.getLandAddress();
+ bean.landTime = landBean.getLandTime();
+ bean.type = landBean.getType();
+ bean.lng = landBean.getLng();
+ bean.lat = landBean.getLat();
+ bean.info = landBean.getInfo();
+ lands.add(bean);
+ }
+ this.land = lands;
+
+ List points = new ArrayList<>();
+ for (RoutePoint point : routeBeans) {
+ PointBean pointBean = new PointBean();
+ pointBean.time = point.getTime();
+ pointBean.centerPressure = point.getCenterPressure();
+ pointBean.speed = point.getSpeed();
+ pointBean.typhoonType = point.getTyphoonType();
+ pointBean.moveSpeed = point.getMoveSpeed();
+ pointBean.power = point.getPower();
+ pointBean.moveDirection = point.getMoveDirection();
+ pointBean.lng = point.getLng();
+ pointBean.lat = point.getLat();
+ pointBean.radius12 = point.getRadius12();
+ pointBean.radius10 = point.getRadius10();
+ pointBean.radius7 = point.getRadius7();
+ pointBean.routePrediction = point.getRoutePrediction();
+ pointBean.centerPosition = point.getCenterPosition();
+ points.add(pointBean);
+ }
+ this.points = points;
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java
deleted file mode 100644
index c6ed867..0000000
--- a/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.casic.missiles.modular.system.event;
-
-import com.casic.missiles.model.application.event.core.ModelEvent;
-import com.casic.missiles.model.application.event.type.AbstractEventTypeEnum;
-import com.casic.missiles.modular.system.model.User;
-
-/**
- * 用户事件
- *
- * @author lwh
- */
-public class UserEvent extends ModelEvent {
- /**
- * Create a new {@code ApplicationEvent}.
- *
- * @param type 事件类型
- * @param source the object on which the event initially occurred or with
- * which the event is associated (never {@code null})
- */
- public UserEvent(AbstractEventTypeEnum type, User source) {
- super(type, source);
- }
-}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java
deleted file mode 100644
index 4480ef2..0000000
--- a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.casic.missiles.modular.system.event.listener;
-
-import com.casic.missiles.core.application.event.UserLoginEvent;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.context.event.EventListener;
-import org.springframework.stereotype.Component;
-
-/**
- * 用户事件订阅
- *
- * @author lwh
- */
-@Slf4j
-@Component
-public class UserOneListener {
- @EventListener
- public void onApplicationEvent(UserLoginEvent event) {
- log.debug("用户1订阅:{}", event);
- }
-}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java
deleted file mode 100644
index 8447a22..0000000
--- a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.casic.missiles.modular.system.event.listener;
-
-import com.casic.missiles.model.application.event.core.EventSubscriber;
-import com.casic.missiles.modular.system.event.UserEvent;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Component;
-
-/**
- * 用户事件订阅
- *
- * @author lwh
- */
-@Slf4j
-@Component
-public class UserTwoListener extends EventSubscriber {
- @Override
- public void onApplicationEvent(UserEvent event) {
- log.debug("用户2订阅:{}", event);
- }
-}
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index 913a287..71c67c0 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -36,6 +36,16 @@
provided
+
+ com.alibaba
+ fastjson
+ ${fastjson.version}
+
+
+ com.squareup.okhttp3
+ okhttp
+ 4.9.1
+
diff --git a/casic-server/src/main/java/com/casic/missiles/job/TyphoonQuartzJob.java b/casic-server/src/main/java/com/casic/missiles/job/TyphoonQuartzJob.java
new file mode 100644
index 0000000..87b8c72
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/job/TyphoonQuartzJob.java
@@ -0,0 +1,27 @@
+package com.casic.missiles.job;
+
+import com.casic.missiles.modular.system.service.ITyphoonService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+/**
+ * 台风数据定时任务,每小时执行一次
+ *
+ * @author a203
+ * @Description 依赖casic-job-quartz,并在CasicApplication上增加注解 @EnableScheduling
+ */
+@Slf4j
+@Component
+public class TyphoonQuartzJob {
+ private final ITyphoonService typhoonService;
+
+ public TyphoonQuartzJob(ITyphoonService typhoonService) {
+ this.typhoonService = typhoonService;
+ }
+
+ @Scheduled(cron = "0 0 */1 * * ?")
+ public void execute() {
+ typhoonService.saveTyphoon();
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DemoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DemoController.java
deleted file mode 100644
index 87b6fec..0000000
--- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DemoController.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.casic.missiles.modular.system.controller;
-
-
-import com.casic.missiles.model.application.event.core.EventPublisher;
-import com.casic.missiles.model.application.event.enums.ModelEventTypeEnum;
-import com.casic.missiles.model.response.ResponseData;
-import com.casic.missiles.modular.system.event.UserEvent;
-import com.casic.missiles.modular.system.model.User;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.ResponseBody;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * @ClassName DemoController
- * @Description TODO
- * @Author lenovo
- * @Date 2020/6/13 15:38
- * @Version 1.0
- */
-@RestController
-@RequestMapping("/demo")
-public class DemoController {
- @Autowired
- private EventPublisher publisher;
-
- /**
- * 获取mockToken
- */
- @PostMapping("/list")
- @ResponseBody
- public Object list() {
- User user = new User();
- user.setAccount("张三");
- publisher.publishEvent(new UserEvent(ModelEventTypeEnum.ADD, user));
- return ResponseData.success();
- }
-
-
-}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/EnvironmentController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/EnvironmentController.java
new file mode 100644
index 0000000..44a55d6
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/EnvironmentController.java
@@ -0,0 +1,62 @@
+package com.casic.missiles.modular.system.controller;
+
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.OceanDetailDTO;
+import com.casic.missiles.modular.system.dto.TyphoonDTO;
+import com.casic.missiles.modular.system.dto.TyphoonDetailDTO;
+import com.casic.missiles.modular.system.service.IOceanService;
+import com.casic.missiles.modular.system.service.ITyphoonService;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.List;
+
+/**
+ * 环境控制器
+ *
+ * @author a203
+ */
+@Controller
+@RequestMapping("/environment")
+public class EnvironmentController {
+ private final ITyphoonService typhoonService;
+ private final IOceanService oceanService;
+
+ public EnvironmentController(ITyphoonService typhoonService, IOceanService oceanService) {
+ this.typhoonService = typhoonService;
+ this.oceanService = oceanService;
+ }
+
+ /**
+ * 台风列表
+ */
+ @GetMapping(value = "/typhoonList")
+ @ResponseBody
+ public Object list() {
+ List typhoonList = typhoonService.currentTyphoonList();
+ return ResponseData.success(typhoonList);
+ }
+
+ /**
+ * 台风详情
+ */
+ @GetMapping(value = "/typhoonDetail/{typhoonId}")
+ @ResponseBody
+ public Object detail(@PathVariable("typhoonId") String typhoonId) {
+ TyphoonDetailDTO detailDTO = typhoonService.typhoonDetail(typhoonId);
+ return ResponseData.success(detailDTO);
+ }
+
+ /**
+ * 洋流详情
+ */
+ @GetMapping(value = "/ocean")
+ @ResponseBody
+ public Object oceanDetail(double lng, double lat, String date, String days, String hour) {
+ OceanDetailDTO detailDTO = oceanService.oceanDetail(lng, lat, date, days, hour);
+ return ResponseData.success(detailDTO);
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/LandPointMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/LandPointMapper.java
new file mode 100644
index 0000000..1f4757d
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/LandPointMapper.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.modular.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.modular.system.model.sql.LandPoint;
+
+/**
+ * 台风登陆数据信息 Mapper 接口
+ *
+ * @author a203
+ */
+public interface LandPointMapper extends BaseMapper {
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RoutePointMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RoutePointMapper.java
new file mode 100644
index 0000000..f31f6d0
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RoutePointMapper.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.modular.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.modular.system.model.sql.RoutePoint;
+
+/**
+ * 台风移动点数据信息 Mapper 接口
+ *
+ * @author a203
+ */
+public interface RoutePointMapper extends BaseMapper {
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonDetailMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonDetailMapper.java
new file mode 100644
index 0000000..bce7a6b
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonDetailMapper.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.modular.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.modular.system.model.sql.TyphoonDetail;
+
+/**
+ * 台风数据信息 Mapper 接口
+ *
+ * @author a203
+ */
+public interface TyphoonDetailMapper extends BaseMapper {
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonMapper.java
new file mode 100644
index 0000000..40fcb32
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonMapper.java
@@ -0,0 +1,21 @@
+package com.casic.missiles.modular.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.modular.system.model.sql.Typhoon;
+
+import java.util.List;
+
+/**
+ * 台风数据信息 Mapper 接口
+ *
+ * @author a203
+ */
+public interface TyphoonMapper extends BaseMapper {
+
+ /**
+ * 查询当前未消散的台风
+ *
+ * @return {@link List}
+ */
+ List selectCurrentTyphoon();
+}
\ No newline at end of file
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/TyphoonMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/TyphoonMapper.xml
new file mode 100644
index 0000000..73498fb
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/TyphoonMapper.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java
new file mode 100644
index 0000000..2debc96
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java
@@ -0,0 +1,152 @@
+package com.casic.missiles.modular.system.dto;
+
+import com.casic.missiles.modular.system.model.remote.OceanDetailModel;
+import lombok.Data;
+
+import java.text.DecimalFormat;
+
+/**
+ * @author a203
+ */
+@Data
+public class OceanDetailDTO {
+
+ /**
+ * 海温, 单位: ℃(摄氏度)
+ */
+ private Double temperature;
+
+ /**
+ * 海拔, 单位: m(米)
+ */
+ private Double altitude;
+
+ /**
+ * 气压, 单位: hPa
+ */
+ private Double pressure;
+
+ /**
+ * 涌浪高度, 单位: m(米)
+ */
+ private Double swellHeight;
+
+ /**
+ * 涌浪方向, 单位: 度[0,360]
+ */
+ private Double swellDir;
+
+ /**
+ * 涌浪周期, 单位: s(秒)
+ */
+ private Double swellPrd;
+
+ /**
+ * 风浪高度, 单位: m(米)
+ */
+ private Double waveHeight;
+
+ /**
+ * 风浪方向, 单位: 度[0,360]
+ */
+ private Double waveDir;
+
+ /**
+ * 风浪周期, 单位: s(秒)
+ */
+ private Double wavePrd;
+
+ /**
+ * 海流速度, 单位: m/s
+ */
+ private Double speed;
+
+ /**
+ * 海流方向, 单位: 度[0,360]
+ */
+ private Double oceanDir;
+
+ /**
+ * 风速,单位: m/s
+ */
+ private Double windSpeed;
+
+ /**
+ * 风向,单位: 度[0,360]
+ */
+ private Double windDir;
+
+ /**
+ * 海浪预测
+ */
+ private PreviewBean forecast;
+
+ @Data
+ public static class PreviewBean {
+ /**
+ * 涌浪高度, 单位: m(米)
+ */
+ private Double swellHeight;
+
+ /**
+ * 涌浪方向, 单位: 度[0,360]
+ */
+ private Double swellDir;
+
+ /**
+ * 涌浪周期, 单位: s(秒)
+ */
+ private Double swellPrd;
+
+ /**
+ * 风浪高度, 单位: m(米)
+ */
+ private Double waveHeight;
+
+ /**
+ * 风浪方向, 单位: 度[0,360]
+ */
+ private Double waveDir;
+
+ /**
+ * 风浪周期, 单位: s(秒)
+ */
+ private Double wavePrd;
+ }
+
+ public OceanDetailDTO(OceanDetailModel remoteData) {
+ OceanDetailModel.DataBean.ListBean listBean = remoteData.getData().getList().get(0);
+ OceanDetailModel.DataBean.ListBean.YtxBean ytxBean = listBean.getYtx();
+ OceanDetailModel.DataBean.ListBean.MeteoBean meteoBean = listBean.getMeteo();
+ if (ytxBean != null) {
+ this.temperature = formatData(ytxBean.getSurfaceTem());
+ this.altitude = formatData(0.00);
+ this.pressure = formatData(ytxBean.getSurfPres());
+ this.swellHeight = formatData(ytxBean.getSwellHgt());
+ this.swellDir = formatData(ytxBean.getSwellDir());
+ this.swellPrd = formatData(ytxBean.getSwellPrd());
+ this.waveHeight = formatData(ytxBean.getWaveHgt());
+ this.waveDir = formatData(ytxBean.getWaveDir());
+ this.wavePrd = formatData(ytxBean.getWavePrd());
+ this.speed = formatData(ytxBean.getWindMag());
+ this.oceanDir = formatData(ytxBean.getCurrentDir());
+ this.windSpeed = formatData(ytxBean.getWindMag());
+ this.windDir = formatData(ytxBean.getWindDir());
+ }
+ PreviewBean bean = new PreviewBean();
+ if (meteoBean != null) {
+ bean.swellHeight = formatData(meteoBean.getSwellHgt());
+ bean.swellDir = formatData(meteoBean.getSwellDir());
+ bean.swellPrd = formatData(meteoBean.getSwellPrd());
+ bean.waveHeight = formatData(meteoBean.getWaveHgt());
+ bean.waveDir = formatData(meteoBean.getWaveDir());
+ bean.wavePrd = formatData(meteoBean.getWavePrd());
+ }
+ this.forecast = bean;
+ }
+
+ private Double formatData(Double data) {
+ DecimalFormat df = new DecimalFormat("#.00");
+ return Double.parseDouble(df.format(data));
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TyphoonDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TyphoonDTO.java
new file mode 100644
index 0000000..e3b3bb3
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TyphoonDTO.java
@@ -0,0 +1,84 @@
+package com.casic.missiles.modular.system.dto;
+
+import com.casic.missiles.modular.system.model.sql.Typhoon;
+import lombok.Data;
+
+/**
+ * @author a203
+ */
+@Data
+public class TyphoonDTO {
+ /**
+ * 台风ID
+ */
+ private String typhoonId;
+ /**
+ * 台风中文代号
+ */
+ private String name;
+ /**
+ * 台风英文代号
+ */
+ private String engName;
+ /**
+ * 经度
+ */
+ private Double lng;
+ /**
+ * 纬度
+ */
+ private Double lat;
+ /**
+ * 台风风力等级描述
+ */
+ private String typhoonType;
+ /**
+ * 台风中心气压,单位【百帕】
+ */
+ private String centerPressure;
+ /**
+ * 风速,单位【米/每秒】
+ */
+ private String speed;
+ /**
+ * 风力,单位【级】
+ */
+ private Integer power;
+ /**
+ * 台风整体移动速度,单位【公里/小时】
+ */
+ private String moveSpeed;
+ /**
+ * 台风未来移动方向
+ */
+ private String moveDirection;
+ /**
+ * 10级风力影响半径
+ */
+ private String radius10;
+ /**
+ * 7级风力影响半径
+ */
+ private String radius7;
+ /**
+ * 数据更新时间
+ */
+ private String time;
+
+ public TyphoonDTO(Typhoon data) {
+ this.typhoonId = data.getTyphoonId();
+ this.name = data.getName();
+ this.engName = data.getEngName();
+ this.lng = data.getLng();
+ this.lat = data.getLat();
+ this.typhoonType = data.getTyphoonType();
+ this.centerPressure = data.getCenterPressure();
+ this.speed = data.getSpeed();
+ this.power = data.getPower();
+ this.moveSpeed = data.getMoveSpeed();
+ this.moveDirection = data.getMoveDirection();
+ this.radius10 = data.getRadius10();
+ this.radius7 = data.getRadius7();
+ this.time = data.getTime();
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TyphoonDetailDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TyphoonDetailDTO.java
new file mode 100644
index 0000000..295c57f
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TyphoonDetailDTO.java
@@ -0,0 +1,190 @@
+package com.casic.missiles.modular.system.dto;
+
+import com.casic.missiles.modular.system.model.sql.LandPoint;
+import com.casic.missiles.modular.system.model.sql.RoutePoint;
+import com.casic.missiles.modular.system.model.sql.TyphoonDetail;
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 台风详情
+ *
+ * @author a203
+ */
+@Data
+public class TyphoonDetailDTO {
+ /**
+ * 台风ID
+ */
+ private String typhoonId;
+ /**
+ * 台风中文代号
+ */
+ private String name;
+ /**
+ * 台风英文代号
+ */
+ private String engName;
+ /**
+ * 台风告警级别
+ */
+ private String warnLevel;
+ /**
+ * 台风中心经度
+ */
+ private Double centerLng;
+ /**
+ * 台风中心纬度
+ */
+ private Double centerLat;
+ /**
+ * 台风开始时间
+ */
+ private String startTime;
+ /**
+ * 台风结束时间
+ */
+ private String endTime;
+ /**
+ * 台风状态
+ */
+ private String isActive;
+ /**
+ * 台风登陆点
+ */
+ private List land;
+ /**
+ * 台风路径
+ */
+ private List points;
+
+ @Data
+ public static class LandBan {
+ /**
+ * 台风登陆点
+ */
+ private String landAddress;
+ /**
+ * 台风类型-热带风暴/强台风...
+ */
+ private String type;
+ private Double lng;
+ private Double lat;
+ /**
+ * 台风登陆细节
+ */
+ private String info;
+ /**
+ * 台风登陆时间
+ */
+ private String landTime;
+ }
+
+ @Data
+ public static class PointBean {
+ /**
+ * 数据更新时间
+ */
+ private String time;
+ /**
+ * 台风中心气压,单位【百帕】
+ */
+ private String centerPressure;
+ /**
+ * 风速,单位【米/每秒】
+ */
+ private String speed;
+ /**
+ * 台风风力等级描述
+ */
+ private String typhoonType;
+ /**
+ * 台风整体移动速度,单位【公里/小时】
+ */
+ private String moveSpeed;
+ /**
+ * 风力,单位【级】
+ */
+ private Integer power;
+ /**
+ * 台风未来移动方向
+ */
+ private String moveDirection;
+ /**
+ * 经度
+ */
+ private Double lng;
+ /**
+ * 纬度
+ */
+ private Double lat;
+ /**
+ * 12级风力影响半径
+ */
+ private String radius12;
+ /**
+ * 10级风力影响半径
+ */
+ private String radius10;
+ /**
+ * 7级风力影响半径
+ */
+ private String radius7;
+ /**
+ * 台风路线预测
+ */
+ private String routePrediction;
+ /**
+ * 中心位置
+ */
+ private String centerPosition;
+ }
+
+ public TyphoonDetailDTO(TyphoonDetail detail, List landBeans, List routeBeans) {
+ this.typhoonId = detail.getTyphoonId();
+ this.name = detail.getName();
+ this.engName = detail.getEngName();
+ this.warnLevel = detail.getWarnLevel();
+ this.centerLng = detail.getCenterLng();
+ this.centerLat = detail.getCenterLat();
+ this.startTime = detail.getStartTime();
+ this.endTime = detail.getEndTime();
+ this.isActive = detail.getIsActive();
+
+ List lands = new ArrayList<>();
+ for (LandPoint landBean : landBeans) {
+ LandBan bean = new LandBan();
+ bean.landAddress = landBean.getLandAddress();
+ bean.landTime = landBean.getLandTime();
+ bean.type = landBean.getType();
+ bean.lng = landBean.getLng();
+ bean.lat = landBean.getLat();
+ bean.info = landBean.getInfo();
+ lands.add(bean);
+ }
+ this.land = lands;
+
+ List points = new ArrayList<>();
+ for (RoutePoint point : routeBeans) {
+ PointBean pointBean = new PointBean();
+ pointBean.time = point.getTime();
+ pointBean.centerPressure = point.getCenterPressure();
+ pointBean.speed = point.getSpeed();
+ pointBean.typhoonType = point.getTyphoonType();
+ pointBean.moveSpeed = point.getMoveSpeed();
+ pointBean.power = point.getPower();
+ pointBean.moveDirection = point.getMoveDirection();
+ pointBean.lng = point.getLng();
+ pointBean.lat = point.getLat();
+ pointBean.radius12 = point.getRadius12();
+ pointBean.radius10 = point.getRadius10();
+ pointBean.radius7 = point.getRadius7();
+ pointBean.routePrediction = point.getRoutePrediction();
+ pointBean.centerPosition = point.getCenterPosition();
+ points.add(pointBean);
+ }
+ this.points = points;
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java
deleted file mode 100644
index c6ed867..0000000
--- a/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.casic.missiles.modular.system.event;
-
-import com.casic.missiles.model.application.event.core.ModelEvent;
-import com.casic.missiles.model.application.event.type.AbstractEventTypeEnum;
-import com.casic.missiles.modular.system.model.User;
-
-/**
- * 用户事件
- *
- * @author lwh
- */
-public class UserEvent extends ModelEvent {
- /**
- * Create a new {@code ApplicationEvent}.
- *
- * @param type 事件类型
- * @param source the object on which the event initially occurred or with
- * which the event is associated (never {@code null})
- */
- public UserEvent(AbstractEventTypeEnum type, User source) {
- super(type, source);
- }
-}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java
deleted file mode 100644
index 4480ef2..0000000
--- a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.casic.missiles.modular.system.event.listener;
-
-import com.casic.missiles.core.application.event.UserLoginEvent;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.context.event.EventListener;
-import org.springframework.stereotype.Component;
-
-/**
- * 用户事件订阅
- *
- * @author lwh
- */
-@Slf4j
-@Component
-public class UserOneListener {
- @EventListener
- public void onApplicationEvent(UserLoginEvent event) {
- log.debug("用户1订阅:{}", event);
- }
-}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java
deleted file mode 100644
index 8447a22..0000000
--- a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.casic.missiles.modular.system.event.listener;
-
-import com.casic.missiles.model.application.event.core.EventSubscriber;
-import com.casic.missiles.modular.system.event.UserEvent;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Component;
-
-/**
- * 用户事件订阅
- *
- * @author lwh
- */
-@Slf4j
-@Component
-public class UserTwoListener extends EventSubscriber {
- @Override
- public void onApplicationEvent(UserEvent event) {
- log.debug("用户2订阅:{}", event);
- }
-}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/remote/OceanDetailModel.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/remote/OceanDetailModel.java
new file mode 100644
index 0000000..742560a
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/remote/OceanDetailModel.java
@@ -0,0 +1,439 @@
+package com.casic.missiles.modular.system.model.remote;
+
+import java.util.List;
+
+/**
+ * 第三方洋流数据模型
+ *
+ * @author a203
+ */
+public class OceanDetailModel {
+
+ /**
+ * code : 0
+ * data : {"lon":114.338597,"lat":18.273134,"date":"2021-10-21","hour":10,"list":[{"date":"2021-10-21","ytx":{"currentMag":0.8194745182991028,"currentDir":311.85589599609375,"swellDir":54.90005874633789,"swellHgt":1.0300003290176392,"swellPrd":6.740001201629639,"waveDir":51.860050201416016,"waveHgt":1.0500003099441528,"wavePrd":6.740001201629639,"windMag":4.520016193389893,"windDir":84.48993682861328,"surfPres":101099.5625,"surface_Tem":301.4056800842285,"surfaceTem":28.255680084228516,"surfTem":28.255680084228516},"meteo":{"currentMag":0.8194745182991028,"currentDir":311.85589599609375,"swellDir":54.90005874633789,"swellHgt":1.0300003290176392,"swellPrd":6.740001201629639,"waveDir":51.860050201416016,"waveHgt":1.0500003099441528,"wavePrd":6.740001201629639,"windMag":4.520016193389893,"windDir":84.48993682861328,"surfPres":101099.5625,"surface_Tem":301.4056800842285,"surfaceTem":28.255680084228516,"surfTem":28.255680084228516}}]}
+ * message : success
+ * etime : 1634786517992
+ */
+
+ private int code;
+ private DataBean data;
+ private String message;
+ private long etime;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataBean getData() {
+ return data;
+ }
+
+ public void setData(DataBean data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public long getEtime() {
+ return etime;
+ }
+
+ public void setEtime(long etime) {
+ this.etime = etime;
+ }
+
+ public static class DataBean {
+ /**
+ * lon : 114.338597
+ * lat : 18.273134
+ * date : 2021-10-21
+ * hour : 10
+ * list : [{"date":"2021-10-21","ytx":{"currentMag":0.8194745182991028,"currentDir":311.85589599609375,"swellDir":54.90005874633789,"swellHgt":1.0300003290176392,"swellPrd":6.740001201629639,"waveDir":51.860050201416016,"waveHgt":1.0500003099441528,"wavePrd":6.740001201629639,"windMag":4.520016193389893,"windDir":84.48993682861328,"surfPres":101099.5625,"surface_Tem":301.4056800842285,"surfaceTem":28.255680084228516,"surfTem":28.255680084228516},"meteo":{"currentMag":0.8194745182991028,"currentDir":311.85589599609375,"swellDir":54.90005874633789,"swellHgt":1.0300003290176392,"swellPrd":6.740001201629639,"waveDir":51.860050201416016,"waveHgt":1.0500003099441528,"wavePrd":6.740001201629639,"windMag":4.520016193389893,"windDir":84.48993682861328,"surfPres":101099.5625,"surface_Tem":301.4056800842285,"surfaceTem":28.255680084228516,"surfTem":28.255680084228516}}]
+ */
+
+ private double lon;
+ private double lat;
+ private String date;
+ private int hour;
+ private List list;
+
+ public double getLon() {
+ return lon;
+ }
+
+ public void setLon(double lon) {
+ this.lon = lon;
+ }
+
+ public double getLat() {
+ return lat;
+ }
+
+ public void setLat(double lat) {
+ this.lat = lat;
+ }
+
+ public String getDate() {
+ return date;
+ }
+
+ public void setDate(String date) {
+ this.date = date;
+ }
+
+ public int getHour() {
+ return hour;
+ }
+
+ public void setHour(int hour) {
+ this.hour = hour;
+ }
+
+ public List getList() {
+ return list;
+ }
+
+ public void setList(List list) {
+ this.list = list;
+ }
+
+ public static class ListBean {
+ /**
+ * date : 2021-10-21
+ * ytx : {"currentMag":0.8194745182991028,"currentDir":311.85589599609375,"swellDir":54.90005874633789,"swellHgt":1.0300003290176392,"swellPrd":6.740001201629639,"waveDir":51.860050201416016,"waveHgt":1.0500003099441528,"wavePrd":6.740001201629639,"windMag":4.520016193389893,"windDir":84.48993682861328,"surfPres":101099.5625,"surface_Tem":301.4056800842285,"surfaceTem":28.255680084228516,"surfTem":28.255680084228516}
+ * meteo : {"currentMag":0.8194745182991028,"currentDir":311.85589599609375,"swellDir":54.90005874633789,"swellHgt":1.0300003290176392,"swellPrd":6.740001201629639,"waveDir":51.860050201416016,"waveHgt":1.0500003099441528,"wavePrd":6.740001201629639,"windMag":4.520016193389893,"windDir":84.48993682861328,"surfPres":101099.5625,"surface_Tem":301.4056800842285,"surfaceTem":28.255680084228516,"surfTem":28.255680084228516}
+ */
+
+ private String date;
+ private YtxBean ytx;
+ private MeteoBean meteo;
+
+ public String getDate() {
+ return date;
+ }
+
+ public void setDate(String date) {
+ this.date = date;
+ }
+
+ public YtxBean getYtx() {
+ return ytx;
+ }
+
+ public void setYtx(YtxBean ytx) {
+ this.ytx = ytx;
+ }
+
+ public MeteoBean getMeteo() {
+ return meteo;
+ }
+
+ public void setMeteo(MeteoBean meteo) {
+ this.meteo = meteo;
+ }
+
+ public static class YtxBean {
+ /**
+ * currentMag : 0.8194745182991028
+ * currentDir : 311.85589599609375
+ * swellDir : 54.90005874633789
+ * swellHgt : 1.0300003290176392
+ * swellPrd : 6.740001201629639
+ * waveDir : 51.860050201416016
+ * waveHgt : 1.0500003099441528
+ * wavePrd : 6.740001201629639
+ * windMag : 4.520016193389893
+ * windDir : 84.48993682861328
+ * surfPres : 101099.5625
+ * surface_Tem : 301.4056800842285
+ * surfaceTem : 28.255680084228516
+ * surfTem : 28.255680084228516
+ */
+
+ private double currentMag;
+ private double currentDir;
+ private double swellDir;
+ private double swellHgt;
+ private double swellPrd;
+ private double waveDir;
+ private double waveHgt;
+ private double wavePrd;
+ private double windMag;
+ private double windDir;
+ private double surfPres;
+ private double surface_Tem;
+ private double surfaceTem;
+ private double surfTem;
+
+ public double getCurrentMag() {
+ return currentMag;
+ }
+
+ public void setCurrentMag(double currentMag) {
+ this.currentMag = currentMag;
+ }
+
+ public double getCurrentDir() {
+ return currentDir;
+ }
+
+ public void setCurrentDir(double currentDir) {
+ this.currentDir = currentDir;
+ }
+
+ public double getSwellDir() {
+ return swellDir;
+ }
+
+ public void setSwellDir(double swellDir) {
+ this.swellDir = swellDir;
+ }
+
+ public double getSwellHgt() {
+ return swellHgt;
+ }
+
+ public void setSwellHgt(double swellHgt) {
+ this.swellHgt = swellHgt;
+ }
+
+ public double getSwellPrd() {
+ return swellPrd;
+ }
+
+ public void setSwellPrd(double swellPrd) {
+ this.swellPrd = swellPrd;
+ }
+
+ public double getWaveDir() {
+ return waveDir;
+ }
+
+ public void setWaveDir(double waveDir) {
+ this.waveDir = waveDir;
+ }
+
+ public double getWaveHgt() {
+ return waveHgt;
+ }
+
+ public void setWaveHgt(double waveHgt) {
+ this.waveHgt = waveHgt;
+ }
+
+ public double getWavePrd() {
+ return wavePrd;
+ }
+
+ public void setWavePrd(double wavePrd) {
+ this.wavePrd = wavePrd;
+ }
+
+ public double getWindMag() {
+ return windMag;
+ }
+
+ public void setWindMag(double windMag) {
+ this.windMag = windMag;
+ }
+
+ public double getWindDir() {
+ return windDir;
+ }
+
+ public void setWindDir(double windDir) {
+ this.windDir = windDir;
+ }
+
+ public double getSurfPres() {
+ return surfPres;
+ }
+
+ public void setSurfPres(double surfPres) {
+ this.surfPres = surfPres;
+ }
+
+ public double getSurface_Tem() {
+ return surface_Tem;
+ }
+
+ public void setSurface_Tem(double surface_Tem) {
+ this.surface_Tem = surface_Tem;
+ }
+
+ public double getSurfaceTem() {
+ return surfaceTem;
+ }
+
+ public void setSurfaceTem(double surfaceTem) {
+ this.surfaceTem = surfaceTem;
+ }
+
+ public double getSurfTem() {
+ return surfTem;
+ }
+
+ public void setSurfTem(double surfTem) {
+ this.surfTem = surfTem;
+ }
+ }
+
+ public static class MeteoBean {
+ /**
+ * currentMag : 0.8194745182991028
+ * currentDir : 311.85589599609375
+ * swellDir : 54.90005874633789
+ * swellHgt : 1.0300003290176392
+ * swellPrd : 6.740001201629639
+ * waveDir : 51.860050201416016
+ * waveHgt : 1.0500003099441528
+ * wavePrd : 6.740001201629639
+ * windMag : 4.520016193389893
+ * windDir : 84.48993682861328
+ * surfPres : 101099.5625
+ * surface_Tem : 301.4056800842285
+ * surfaceTem : 28.255680084228516
+ * surfTem : 28.255680084228516
+ */
+
+ private double currentMag;
+ private double currentDir;
+ private double swellDir;
+ private double swellHgt;
+ private double swellPrd;
+ private double waveDir;
+ private double waveHgt;
+ private double wavePrd;
+ private double windMag;
+ private double windDir;
+ private double surfPres;
+ private double surface_Tem;
+ private double surfaceTem;
+ private double surfTem;
+
+ public double getCurrentMag() {
+ return currentMag;
+ }
+
+ public void setCurrentMag(double currentMag) {
+ this.currentMag = currentMag;
+ }
+
+ public double getCurrentDir() {
+ return currentDir;
+ }
+
+ public void setCurrentDir(double currentDir) {
+ this.currentDir = currentDir;
+ }
+
+ public double getSwellDir() {
+ return swellDir;
+ }
+
+ public void setSwellDir(double swellDir) {
+ this.swellDir = swellDir;
+ }
+
+ public double getSwellHgt() {
+ return swellHgt;
+ }
+
+ public void setSwellHgt(double swellHgt) {
+ this.swellHgt = swellHgt;
+ }
+
+ public double getSwellPrd() {
+ return swellPrd;
+ }
+
+ public void setSwellPrd(double swellPrd) {
+ this.swellPrd = swellPrd;
+ }
+
+ public double getWaveDir() {
+ return waveDir;
+ }
+
+ public void setWaveDir(double waveDir) {
+ this.waveDir = waveDir;
+ }
+
+ public double getWaveHgt() {
+ return waveHgt;
+ }
+
+ public void setWaveHgt(double waveHgt) {
+ this.waveHgt = waveHgt;
+ }
+
+ public double getWavePrd() {
+ return wavePrd;
+ }
+
+ public void setWavePrd(double wavePrd) {
+ this.wavePrd = wavePrd;
+ }
+
+ public double getWindMag() {
+ return windMag;
+ }
+
+ public void setWindMag(double windMag) {
+ this.windMag = windMag;
+ }
+
+ public double getWindDir() {
+ return windDir;
+ }
+
+ public void setWindDir(double windDir) {
+ this.windDir = windDir;
+ }
+
+ public double getSurfPres() {
+ return surfPres;
+ }
+
+ public void setSurfPres(double surfPres) {
+ this.surfPres = surfPres;
+ }
+
+ public double getSurface_Tem() {
+ return surface_Tem;
+ }
+
+ public void setSurface_Tem(double surface_Tem) {
+ this.surface_Tem = surface_Tem;
+ }
+
+ public double getSurfaceTem() {
+ return surfaceTem;
+ }
+
+ public void setSurfaceTem(double surfaceTem) {
+ this.surfaceTem = surfaceTem;
+ }
+
+ public double getSurfTem() {
+ return surfTem;
+ }
+
+ public void setSurfTem(double surfTem) {
+ this.surfTem = surfTem;
+ }
+ }
+ }
+ }
+}
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index 913a287..71c67c0 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -36,6 +36,16 @@
provided
+
+ com.alibaba
+ fastjson
+ ${fastjson.version}
+
+
+ com.squareup.okhttp3
+ okhttp
+ 4.9.1
+
diff --git a/casic-server/src/main/java/com/casic/missiles/job/TyphoonQuartzJob.java b/casic-server/src/main/java/com/casic/missiles/job/TyphoonQuartzJob.java
new file mode 100644
index 0000000..87b8c72
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/job/TyphoonQuartzJob.java
@@ -0,0 +1,27 @@
+package com.casic.missiles.job;
+
+import com.casic.missiles.modular.system.service.ITyphoonService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+/**
+ * 台风数据定时任务,每小时执行一次
+ *
+ * @author a203
+ * @Description 依赖casic-job-quartz,并在CasicApplication上增加注解 @EnableScheduling
+ */
+@Slf4j
+@Component
+public class TyphoonQuartzJob {
+ private final ITyphoonService typhoonService;
+
+ public TyphoonQuartzJob(ITyphoonService typhoonService) {
+ this.typhoonService = typhoonService;
+ }
+
+ @Scheduled(cron = "0 0 */1 * * ?")
+ public void execute() {
+ typhoonService.saveTyphoon();
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DemoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DemoController.java
deleted file mode 100644
index 87b6fec..0000000
--- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DemoController.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.casic.missiles.modular.system.controller;
-
-
-import com.casic.missiles.model.application.event.core.EventPublisher;
-import com.casic.missiles.model.application.event.enums.ModelEventTypeEnum;
-import com.casic.missiles.model.response.ResponseData;
-import com.casic.missiles.modular.system.event.UserEvent;
-import com.casic.missiles.modular.system.model.User;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.ResponseBody;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * @ClassName DemoController
- * @Description TODO
- * @Author lenovo
- * @Date 2020/6/13 15:38
- * @Version 1.0
- */
-@RestController
-@RequestMapping("/demo")
-public class DemoController {
- @Autowired
- private EventPublisher publisher;
-
- /**
- * 获取mockToken
- */
- @PostMapping("/list")
- @ResponseBody
- public Object list() {
- User user = new User();
- user.setAccount("张三");
- publisher.publishEvent(new UserEvent(ModelEventTypeEnum.ADD, user));
- return ResponseData.success();
- }
-
-
-}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/EnvironmentController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/EnvironmentController.java
new file mode 100644
index 0000000..44a55d6
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/EnvironmentController.java
@@ -0,0 +1,62 @@
+package com.casic.missiles.modular.system.controller;
+
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.OceanDetailDTO;
+import com.casic.missiles.modular.system.dto.TyphoonDTO;
+import com.casic.missiles.modular.system.dto.TyphoonDetailDTO;
+import com.casic.missiles.modular.system.service.IOceanService;
+import com.casic.missiles.modular.system.service.ITyphoonService;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.List;
+
+/**
+ * 环境控制器
+ *
+ * @author a203
+ */
+@Controller
+@RequestMapping("/environment")
+public class EnvironmentController {
+ private final ITyphoonService typhoonService;
+ private final IOceanService oceanService;
+
+ public EnvironmentController(ITyphoonService typhoonService, IOceanService oceanService) {
+ this.typhoonService = typhoonService;
+ this.oceanService = oceanService;
+ }
+
+ /**
+ * 台风列表
+ */
+ @GetMapping(value = "/typhoonList")
+ @ResponseBody
+ public Object list() {
+ List typhoonList = typhoonService.currentTyphoonList();
+ return ResponseData.success(typhoonList);
+ }
+
+ /**
+ * 台风详情
+ */
+ @GetMapping(value = "/typhoonDetail/{typhoonId}")
+ @ResponseBody
+ public Object detail(@PathVariable("typhoonId") String typhoonId) {
+ TyphoonDetailDTO detailDTO = typhoonService.typhoonDetail(typhoonId);
+ return ResponseData.success(detailDTO);
+ }
+
+ /**
+ * 洋流详情
+ */
+ @GetMapping(value = "/ocean")
+ @ResponseBody
+ public Object oceanDetail(double lng, double lat, String date, String days, String hour) {
+ OceanDetailDTO detailDTO = oceanService.oceanDetail(lng, lat, date, days, hour);
+ return ResponseData.success(detailDTO);
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/LandPointMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/LandPointMapper.java
new file mode 100644
index 0000000..1f4757d
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/LandPointMapper.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.modular.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.modular.system.model.sql.LandPoint;
+
+/**
+ * 台风登陆数据信息 Mapper 接口
+ *
+ * @author a203
+ */
+public interface LandPointMapper extends BaseMapper {
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RoutePointMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RoutePointMapper.java
new file mode 100644
index 0000000..f31f6d0
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RoutePointMapper.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.modular.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.modular.system.model.sql.RoutePoint;
+
+/**
+ * 台风移动点数据信息 Mapper 接口
+ *
+ * @author a203
+ */
+public interface RoutePointMapper extends BaseMapper {
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonDetailMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonDetailMapper.java
new file mode 100644
index 0000000..bce7a6b
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonDetailMapper.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.modular.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.modular.system.model.sql.TyphoonDetail;
+
+/**
+ * 台风数据信息 Mapper 接口
+ *
+ * @author a203
+ */
+public interface TyphoonDetailMapper extends BaseMapper {
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonMapper.java
new file mode 100644
index 0000000..40fcb32
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonMapper.java
@@ -0,0 +1,21 @@
+package com.casic.missiles.modular.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.modular.system.model.sql.Typhoon;
+
+import java.util.List;
+
+/**
+ * 台风数据信息 Mapper 接口
+ *
+ * @author a203
+ */
+public interface TyphoonMapper extends BaseMapper {
+
+ /**
+ * 查询当前未消散的台风
+ *
+ * @return {@link List}
+ */
+ List selectCurrentTyphoon();
+}
\ No newline at end of file
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/TyphoonMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/TyphoonMapper.xml
new file mode 100644
index 0000000..73498fb
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/TyphoonMapper.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java
new file mode 100644
index 0000000..2debc96
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java
@@ -0,0 +1,152 @@
+package com.casic.missiles.modular.system.dto;
+
+import com.casic.missiles.modular.system.model.remote.OceanDetailModel;
+import lombok.Data;
+
+import java.text.DecimalFormat;
+
+/**
+ * @author a203
+ */
+@Data
+public class OceanDetailDTO {
+
+ /**
+ * 海温, 单位: ℃(摄氏度)
+ */
+ private Double temperature;
+
+ /**
+ * 海拔, 单位: m(米)
+ */
+ private Double altitude;
+
+ /**
+ * 气压, 单位: hPa
+ */
+ private Double pressure;
+
+ /**
+ * 涌浪高度, 单位: m(米)
+ */
+ private Double swellHeight;
+
+ /**
+ * 涌浪方向, 单位: 度[0,360]
+ */
+ private Double swellDir;
+
+ /**
+ * 涌浪周期, 单位: s(秒)
+ */
+ private Double swellPrd;
+
+ /**
+ * 风浪高度, 单位: m(米)
+ */
+ private Double waveHeight;
+
+ /**
+ * 风浪方向, 单位: 度[0,360]
+ */
+ private Double waveDir;
+
+ /**
+ * 风浪周期, 单位: s(秒)
+ */
+ private Double wavePrd;
+
+ /**
+ * 海流速度, 单位: m/s
+ */
+ private Double speed;
+
+ /**
+ * 海流方向, 单位: 度[0,360]
+ */
+ private Double oceanDir;
+
+ /**
+ * 风速,单位: m/s
+ */
+ private Double windSpeed;
+
+ /**
+ * 风向,单位: 度[0,360]
+ */
+ private Double windDir;
+
+ /**
+ * 海浪预测
+ */
+ private PreviewBean forecast;
+
+ @Data
+ public static class PreviewBean {
+ /**
+ * 涌浪高度, 单位: m(米)
+ */
+ private Double swellHeight;
+
+ /**
+ * 涌浪方向, 单位: 度[0,360]
+ */
+ private Double swellDir;
+
+ /**
+ * 涌浪周期, 单位: s(秒)
+ */
+ private Double swellPrd;
+
+ /**
+ * 风浪高度, 单位: m(米)
+ */
+ private Double waveHeight;
+
+ /**
+ * 风浪方向, 单位: 度[0,360]
+ */
+ private Double waveDir;
+
+ /**
+ * 风浪周期, 单位: s(秒)
+ */
+ private Double wavePrd;
+ }
+
+ public OceanDetailDTO(OceanDetailModel remoteData) {
+ OceanDetailModel.DataBean.ListBean listBean = remoteData.getData().getList().get(0);
+ OceanDetailModel.DataBean.ListBean.YtxBean ytxBean = listBean.getYtx();
+ OceanDetailModel.DataBean.ListBean.MeteoBean meteoBean = listBean.getMeteo();
+ if (ytxBean != null) {
+ this.temperature = formatData(ytxBean.getSurfaceTem());
+ this.altitude = formatData(0.00);
+ this.pressure = formatData(ytxBean.getSurfPres());
+ this.swellHeight = formatData(ytxBean.getSwellHgt());
+ this.swellDir = formatData(ytxBean.getSwellDir());
+ this.swellPrd = formatData(ytxBean.getSwellPrd());
+ this.waveHeight = formatData(ytxBean.getWaveHgt());
+ this.waveDir = formatData(ytxBean.getWaveDir());
+ this.wavePrd = formatData(ytxBean.getWavePrd());
+ this.speed = formatData(ytxBean.getWindMag());
+ this.oceanDir = formatData(ytxBean.getCurrentDir());
+ this.windSpeed = formatData(ytxBean.getWindMag());
+ this.windDir = formatData(ytxBean.getWindDir());
+ }
+ PreviewBean bean = new PreviewBean();
+ if (meteoBean != null) {
+ bean.swellHeight = formatData(meteoBean.getSwellHgt());
+ bean.swellDir = formatData(meteoBean.getSwellDir());
+ bean.swellPrd = formatData(meteoBean.getSwellPrd());
+ bean.waveHeight = formatData(meteoBean.getWaveHgt());
+ bean.waveDir = formatData(meteoBean.getWaveDir());
+ bean.wavePrd = formatData(meteoBean.getWavePrd());
+ }
+ this.forecast = bean;
+ }
+
+ private Double formatData(Double data) {
+ DecimalFormat df = new DecimalFormat("#.00");
+ return Double.parseDouble(df.format(data));
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TyphoonDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TyphoonDTO.java
new file mode 100644
index 0000000..e3b3bb3
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TyphoonDTO.java
@@ -0,0 +1,84 @@
+package com.casic.missiles.modular.system.dto;
+
+import com.casic.missiles.modular.system.model.sql.Typhoon;
+import lombok.Data;
+
+/**
+ * @author a203
+ */
+@Data
+public class TyphoonDTO {
+ /**
+ * 台风ID
+ */
+ private String typhoonId;
+ /**
+ * 台风中文代号
+ */
+ private String name;
+ /**
+ * 台风英文代号
+ */
+ private String engName;
+ /**
+ * 经度
+ */
+ private Double lng;
+ /**
+ * 纬度
+ */
+ private Double lat;
+ /**
+ * 台风风力等级描述
+ */
+ private String typhoonType;
+ /**
+ * 台风中心气压,单位【百帕】
+ */
+ private String centerPressure;
+ /**
+ * 风速,单位【米/每秒】
+ */
+ private String speed;
+ /**
+ * 风力,单位【级】
+ */
+ private Integer power;
+ /**
+ * 台风整体移动速度,单位【公里/小时】
+ */
+ private String moveSpeed;
+ /**
+ * 台风未来移动方向
+ */
+ private String moveDirection;
+ /**
+ * 10级风力影响半径
+ */
+ private String radius10;
+ /**
+ * 7级风力影响半径
+ */
+ private String radius7;
+ /**
+ * 数据更新时间
+ */
+ private String time;
+
+ public TyphoonDTO(Typhoon data) {
+ this.typhoonId = data.getTyphoonId();
+ this.name = data.getName();
+ this.engName = data.getEngName();
+ this.lng = data.getLng();
+ this.lat = data.getLat();
+ this.typhoonType = data.getTyphoonType();
+ this.centerPressure = data.getCenterPressure();
+ this.speed = data.getSpeed();
+ this.power = data.getPower();
+ this.moveSpeed = data.getMoveSpeed();
+ this.moveDirection = data.getMoveDirection();
+ this.radius10 = data.getRadius10();
+ this.radius7 = data.getRadius7();
+ this.time = data.getTime();
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TyphoonDetailDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TyphoonDetailDTO.java
new file mode 100644
index 0000000..295c57f
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TyphoonDetailDTO.java
@@ -0,0 +1,190 @@
+package com.casic.missiles.modular.system.dto;
+
+import com.casic.missiles.modular.system.model.sql.LandPoint;
+import com.casic.missiles.modular.system.model.sql.RoutePoint;
+import com.casic.missiles.modular.system.model.sql.TyphoonDetail;
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 台风详情
+ *
+ * @author a203
+ */
+@Data
+public class TyphoonDetailDTO {
+ /**
+ * 台风ID
+ */
+ private String typhoonId;
+ /**
+ * 台风中文代号
+ */
+ private String name;
+ /**
+ * 台风英文代号
+ */
+ private String engName;
+ /**
+ * 台风告警级别
+ */
+ private String warnLevel;
+ /**
+ * 台风中心经度
+ */
+ private Double centerLng;
+ /**
+ * 台风中心纬度
+ */
+ private Double centerLat;
+ /**
+ * 台风开始时间
+ */
+ private String startTime;
+ /**
+ * 台风结束时间
+ */
+ private String endTime;
+ /**
+ * 台风状态
+ */
+ private String isActive;
+ /**
+ * 台风登陆点
+ */
+ private List land;
+ /**
+ * 台风路径
+ */
+ private List points;
+
+ @Data
+ public static class LandBan {
+ /**
+ * 台风登陆点
+ */
+ private String landAddress;
+ /**
+ * 台风类型-热带风暴/强台风...
+ */
+ private String type;
+ private Double lng;
+ private Double lat;
+ /**
+ * 台风登陆细节
+ */
+ private String info;
+ /**
+ * 台风登陆时间
+ */
+ private String landTime;
+ }
+
+ @Data
+ public static class PointBean {
+ /**
+ * 数据更新时间
+ */
+ private String time;
+ /**
+ * 台风中心气压,单位【百帕】
+ */
+ private String centerPressure;
+ /**
+ * 风速,单位【米/每秒】
+ */
+ private String speed;
+ /**
+ * 台风风力等级描述
+ */
+ private String typhoonType;
+ /**
+ * 台风整体移动速度,单位【公里/小时】
+ */
+ private String moveSpeed;
+ /**
+ * 风力,单位【级】
+ */
+ private Integer power;
+ /**
+ * 台风未来移动方向
+ */
+ private String moveDirection;
+ /**
+ * 经度
+ */
+ private Double lng;
+ /**
+ * 纬度
+ */
+ private Double lat;
+ /**
+ * 12级风力影响半径
+ */
+ private String radius12;
+ /**
+ * 10级风力影响半径
+ */
+ private String radius10;
+ /**
+ * 7级风力影响半径
+ */
+ private String radius7;
+ /**
+ * 台风路线预测
+ */
+ private String routePrediction;
+ /**
+ * 中心位置
+ */
+ private String centerPosition;
+ }
+
+ public TyphoonDetailDTO(TyphoonDetail detail, List landBeans, List routeBeans) {
+ this.typhoonId = detail.getTyphoonId();
+ this.name = detail.getName();
+ this.engName = detail.getEngName();
+ this.warnLevel = detail.getWarnLevel();
+ this.centerLng = detail.getCenterLng();
+ this.centerLat = detail.getCenterLat();
+ this.startTime = detail.getStartTime();
+ this.endTime = detail.getEndTime();
+ this.isActive = detail.getIsActive();
+
+ List lands = new ArrayList<>();
+ for (LandPoint landBean : landBeans) {
+ LandBan bean = new LandBan();
+ bean.landAddress = landBean.getLandAddress();
+ bean.landTime = landBean.getLandTime();
+ bean.type = landBean.getType();
+ bean.lng = landBean.getLng();
+ bean.lat = landBean.getLat();
+ bean.info = landBean.getInfo();
+ lands.add(bean);
+ }
+ this.land = lands;
+
+ List points = new ArrayList<>();
+ for (RoutePoint point : routeBeans) {
+ PointBean pointBean = new PointBean();
+ pointBean.time = point.getTime();
+ pointBean.centerPressure = point.getCenterPressure();
+ pointBean.speed = point.getSpeed();
+ pointBean.typhoonType = point.getTyphoonType();
+ pointBean.moveSpeed = point.getMoveSpeed();
+ pointBean.power = point.getPower();
+ pointBean.moveDirection = point.getMoveDirection();
+ pointBean.lng = point.getLng();
+ pointBean.lat = point.getLat();
+ pointBean.radius12 = point.getRadius12();
+ pointBean.radius10 = point.getRadius10();
+ pointBean.radius7 = point.getRadius7();
+ pointBean.routePrediction = point.getRoutePrediction();
+ pointBean.centerPosition = point.getCenterPosition();
+ points.add(pointBean);
+ }
+ this.points = points;
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java
deleted file mode 100644
index c6ed867..0000000
--- a/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.casic.missiles.modular.system.event;
-
-import com.casic.missiles.model.application.event.core.ModelEvent;
-import com.casic.missiles.model.application.event.type.AbstractEventTypeEnum;
-import com.casic.missiles.modular.system.model.User;
-
-/**
- * 用户事件
- *
- * @author lwh
- */
-public class UserEvent extends ModelEvent {
- /**
- * Create a new {@code ApplicationEvent}.
- *
- * @param type 事件类型
- * @param source the object on which the event initially occurred or with
- * which the event is associated (never {@code null})
- */
- public UserEvent(AbstractEventTypeEnum type, User source) {
- super(type, source);
- }
-}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java
deleted file mode 100644
index 4480ef2..0000000
--- a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.casic.missiles.modular.system.event.listener;
-
-import com.casic.missiles.core.application.event.UserLoginEvent;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.context.event.EventListener;
-import org.springframework.stereotype.Component;
-
-/**
- * 用户事件订阅
- *
- * @author lwh
- */
-@Slf4j
-@Component
-public class UserOneListener {
- @EventListener
- public void onApplicationEvent(UserLoginEvent event) {
- log.debug("用户1订阅:{}", event);
- }
-}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java
deleted file mode 100644
index 8447a22..0000000
--- a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.casic.missiles.modular.system.event.listener;
-
-import com.casic.missiles.model.application.event.core.EventSubscriber;
-import com.casic.missiles.modular.system.event.UserEvent;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Component;
-
-/**
- * 用户事件订阅
- *
- * @author lwh
- */
-@Slf4j
-@Component
-public class UserTwoListener extends EventSubscriber {
- @Override
- public void onApplicationEvent(UserEvent event) {
- log.debug("用户2订阅:{}", event);
- }
-}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/remote/OceanDetailModel.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/remote/OceanDetailModel.java
new file mode 100644
index 0000000..742560a
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/remote/OceanDetailModel.java
@@ -0,0 +1,439 @@
+package com.casic.missiles.modular.system.model.remote;
+
+import java.util.List;
+
+/**
+ * 第三方洋流数据模型
+ *
+ * @author a203
+ */
+public class OceanDetailModel {
+
+ /**
+ * code : 0
+ * data : {"lon":114.338597,"lat":18.273134,"date":"2021-10-21","hour":10,"list":[{"date":"2021-10-21","ytx":{"currentMag":0.8194745182991028,"currentDir":311.85589599609375,"swellDir":54.90005874633789,"swellHgt":1.0300003290176392,"swellPrd":6.740001201629639,"waveDir":51.860050201416016,"waveHgt":1.0500003099441528,"wavePrd":6.740001201629639,"windMag":4.520016193389893,"windDir":84.48993682861328,"surfPres":101099.5625,"surface_Tem":301.4056800842285,"surfaceTem":28.255680084228516,"surfTem":28.255680084228516},"meteo":{"currentMag":0.8194745182991028,"currentDir":311.85589599609375,"swellDir":54.90005874633789,"swellHgt":1.0300003290176392,"swellPrd":6.740001201629639,"waveDir":51.860050201416016,"waveHgt":1.0500003099441528,"wavePrd":6.740001201629639,"windMag":4.520016193389893,"windDir":84.48993682861328,"surfPres":101099.5625,"surface_Tem":301.4056800842285,"surfaceTem":28.255680084228516,"surfTem":28.255680084228516}}]}
+ * message : success
+ * etime : 1634786517992
+ */
+
+ private int code;
+ private DataBean data;
+ private String message;
+ private long etime;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataBean getData() {
+ return data;
+ }
+
+ public void setData(DataBean data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public long getEtime() {
+ return etime;
+ }
+
+ public void setEtime(long etime) {
+ this.etime = etime;
+ }
+
+ public static class DataBean {
+ /**
+ * lon : 114.338597
+ * lat : 18.273134
+ * date : 2021-10-21
+ * hour : 10
+ * list : [{"date":"2021-10-21","ytx":{"currentMag":0.8194745182991028,"currentDir":311.85589599609375,"swellDir":54.90005874633789,"swellHgt":1.0300003290176392,"swellPrd":6.740001201629639,"waveDir":51.860050201416016,"waveHgt":1.0500003099441528,"wavePrd":6.740001201629639,"windMag":4.520016193389893,"windDir":84.48993682861328,"surfPres":101099.5625,"surface_Tem":301.4056800842285,"surfaceTem":28.255680084228516,"surfTem":28.255680084228516},"meteo":{"currentMag":0.8194745182991028,"currentDir":311.85589599609375,"swellDir":54.90005874633789,"swellHgt":1.0300003290176392,"swellPrd":6.740001201629639,"waveDir":51.860050201416016,"waveHgt":1.0500003099441528,"wavePrd":6.740001201629639,"windMag":4.520016193389893,"windDir":84.48993682861328,"surfPres":101099.5625,"surface_Tem":301.4056800842285,"surfaceTem":28.255680084228516,"surfTem":28.255680084228516}}]
+ */
+
+ private double lon;
+ private double lat;
+ private String date;
+ private int hour;
+ private List list;
+
+ public double getLon() {
+ return lon;
+ }
+
+ public void setLon(double lon) {
+ this.lon = lon;
+ }
+
+ public double getLat() {
+ return lat;
+ }
+
+ public void setLat(double lat) {
+ this.lat = lat;
+ }
+
+ public String getDate() {
+ return date;
+ }
+
+ public void setDate(String date) {
+ this.date = date;
+ }
+
+ public int getHour() {
+ return hour;
+ }
+
+ public void setHour(int hour) {
+ this.hour = hour;
+ }
+
+ public List getList() {
+ return list;
+ }
+
+ public void setList(List list) {
+ this.list = list;
+ }
+
+ public static class ListBean {
+ /**
+ * date : 2021-10-21
+ * ytx : {"currentMag":0.8194745182991028,"currentDir":311.85589599609375,"swellDir":54.90005874633789,"swellHgt":1.0300003290176392,"swellPrd":6.740001201629639,"waveDir":51.860050201416016,"waveHgt":1.0500003099441528,"wavePrd":6.740001201629639,"windMag":4.520016193389893,"windDir":84.48993682861328,"surfPres":101099.5625,"surface_Tem":301.4056800842285,"surfaceTem":28.255680084228516,"surfTem":28.255680084228516}
+ * meteo : {"currentMag":0.8194745182991028,"currentDir":311.85589599609375,"swellDir":54.90005874633789,"swellHgt":1.0300003290176392,"swellPrd":6.740001201629639,"waveDir":51.860050201416016,"waveHgt":1.0500003099441528,"wavePrd":6.740001201629639,"windMag":4.520016193389893,"windDir":84.48993682861328,"surfPres":101099.5625,"surface_Tem":301.4056800842285,"surfaceTem":28.255680084228516,"surfTem":28.255680084228516}
+ */
+
+ private String date;
+ private YtxBean ytx;
+ private MeteoBean meteo;
+
+ public String getDate() {
+ return date;
+ }
+
+ public void setDate(String date) {
+ this.date = date;
+ }
+
+ public YtxBean getYtx() {
+ return ytx;
+ }
+
+ public void setYtx(YtxBean ytx) {
+ this.ytx = ytx;
+ }
+
+ public MeteoBean getMeteo() {
+ return meteo;
+ }
+
+ public void setMeteo(MeteoBean meteo) {
+ this.meteo = meteo;
+ }
+
+ public static class YtxBean {
+ /**
+ * currentMag : 0.8194745182991028
+ * currentDir : 311.85589599609375
+ * swellDir : 54.90005874633789
+ * swellHgt : 1.0300003290176392
+ * swellPrd : 6.740001201629639
+ * waveDir : 51.860050201416016
+ * waveHgt : 1.0500003099441528
+ * wavePrd : 6.740001201629639
+ * windMag : 4.520016193389893
+ * windDir : 84.48993682861328
+ * surfPres : 101099.5625
+ * surface_Tem : 301.4056800842285
+ * surfaceTem : 28.255680084228516
+ * surfTem : 28.255680084228516
+ */
+
+ private double currentMag;
+ private double currentDir;
+ private double swellDir;
+ private double swellHgt;
+ private double swellPrd;
+ private double waveDir;
+ private double waveHgt;
+ private double wavePrd;
+ private double windMag;
+ private double windDir;
+ private double surfPres;
+ private double surface_Tem;
+ private double surfaceTem;
+ private double surfTem;
+
+ public double getCurrentMag() {
+ return currentMag;
+ }
+
+ public void setCurrentMag(double currentMag) {
+ this.currentMag = currentMag;
+ }
+
+ public double getCurrentDir() {
+ return currentDir;
+ }
+
+ public void setCurrentDir(double currentDir) {
+ this.currentDir = currentDir;
+ }
+
+ public double getSwellDir() {
+ return swellDir;
+ }
+
+ public void setSwellDir(double swellDir) {
+ this.swellDir = swellDir;
+ }
+
+ public double getSwellHgt() {
+ return swellHgt;
+ }
+
+ public void setSwellHgt(double swellHgt) {
+ this.swellHgt = swellHgt;
+ }
+
+ public double getSwellPrd() {
+ return swellPrd;
+ }
+
+ public void setSwellPrd(double swellPrd) {
+ this.swellPrd = swellPrd;
+ }
+
+ public double getWaveDir() {
+ return waveDir;
+ }
+
+ public void setWaveDir(double waveDir) {
+ this.waveDir = waveDir;
+ }
+
+ public double getWaveHgt() {
+ return waveHgt;
+ }
+
+ public void setWaveHgt(double waveHgt) {
+ this.waveHgt = waveHgt;
+ }
+
+ public double getWavePrd() {
+ return wavePrd;
+ }
+
+ public void setWavePrd(double wavePrd) {
+ this.wavePrd = wavePrd;
+ }
+
+ public double getWindMag() {
+ return windMag;
+ }
+
+ public void setWindMag(double windMag) {
+ this.windMag = windMag;
+ }
+
+ public double getWindDir() {
+ return windDir;
+ }
+
+ public void setWindDir(double windDir) {
+ this.windDir = windDir;
+ }
+
+ public double getSurfPres() {
+ return surfPres;
+ }
+
+ public void setSurfPres(double surfPres) {
+ this.surfPres = surfPres;
+ }
+
+ public double getSurface_Tem() {
+ return surface_Tem;
+ }
+
+ public void setSurface_Tem(double surface_Tem) {
+ this.surface_Tem = surface_Tem;
+ }
+
+ public double getSurfaceTem() {
+ return surfaceTem;
+ }
+
+ public void setSurfaceTem(double surfaceTem) {
+ this.surfaceTem = surfaceTem;
+ }
+
+ public double getSurfTem() {
+ return surfTem;
+ }
+
+ public void setSurfTem(double surfTem) {
+ this.surfTem = surfTem;
+ }
+ }
+
+ public static class MeteoBean {
+ /**
+ * currentMag : 0.8194745182991028
+ * currentDir : 311.85589599609375
+ * swellDir : 54.90005874633789
+ * swellHgt : 1.0300003290176392
+ * swellPrd : 6.740001201629639
+ * waveDir : 51.860050201416016
+ * waveHgt : 1.0500003099441528
+ * wavePrd : 6.740001201629639
+ * windMag : 4.520016193389893
+ * windDir : 84.48993682861328
+ * surfPres : 101099.5625
+ * surface_Tem : 301.4056800842285
+ * surfaceTem : 28.255680084228516
+ * surfTem : 28.255680084228516
+ */
+
+ private double currentMag;
+ private double currentDir;
+ private double swellDir;
+ private double swellHgt;
+ private double swellPrd;
+ private double waveDir;
+ private double waveHgt;
+ private double wavePrd;
+ private double windMag;
+ private double windDir;
+ private double surfPres;
+ private double surface_Tem;
+ private double surfaceTem;
+ private double surfTem;
+
+ public double getCurrentMag() {
+ return currentMag;
+ }
+
+ public void setCurrentMag(double currentMag) {
+ this.currentMag = currentMag;
+ }
+
+ public double getCurrentDir() {
+ return currentDir;
+ }
+
+ public void setCurrentDir(double currentDir) {
+ this.currentDir = currentDir;
+ }
+
+ public double getSwellDir() {
+ return swellDir;
+ }
+
+ public void setSwellDir(double swellDir) {
+ this.swellDir = swellDir;
+ }
+
+ public double getSwellHgt() {
+ return swellHgt;
+ }
+
+ public void setSwellHgt(double swellHgt) {
+ this.swellHgt = swellHgt;
+ }
+
+ public double getSwellPrd() {
+ return swellPrd;
+ }
+
+ public void setSwellPrd(double swellPrd) {
+ this.swellPrd = swellPrd;
+ }
+
+ public double getWaveDir() {
+ return waveDir;
+ }
+
+ public void setWaveDir(double waveDir) {
+ this.waveDir = waveDir;
+ }
+
+ public double getWaveHgt() {
+ return waveHgt;
+ }
+
+ public void setWaveHgt(double waveHgt) {
+ this.waveHgt = waveHgt;
+ }
+
+ public double getWavePrd() {
+ return wavePrd;
+ }
+
+ public void setWavePrd(double wavePrd) {
+ this.wavePrd = wavePrd;
+ }
+
+ public double getWindMag() {
+ return windMag;
+ }
+
+ public void setWindMag(double windMag) {
+ this.windMag = windMag;
+ }
+
+ public double getWindDir() {
+ return windDir;
+ }
+
+ public void setWindDir(double windDir) {
+ this.windDir = windDir;
+ }
+
+ public double getSurfPres() {
+ return surfPres;
+ }
+
+ public void setSurfPres(double surfPres) {
+ this.surfPres = surfPres;
+ }
+
+ public double getSurface_Tem() {
+ return surface_Tem;
+ }
+
+ public void setSurface_Tem(double surface_Tem) {
+ this.surface_Tem = surface_Tem;
+ }
+
+ public double getSurfaceTem() {
+ return surfaceTem;
+ }
+
+ public void setSurfaceTem(double surfaceTem) {
+ this.surfaceTem = surfaceTem;
+ }
+
+ public double getSurfTem() {
+ return surfTem;
+ }
+
+ public void setSurfTem(double surfTem) {
+ this.surfTem = surfTem;
+ }
+ }
+ }
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/remote/TyphoonDetailModel.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/remote/TyphoonDetailModel.java
new file mode 100644
index 0000000..26d347b
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/remote/TyphoonDetailModel.java
@@ -0,0 +1,419 @@
+package com.casic.missiles.modular.system.model.remote;
+
+import java.util.List;
+
+/**
+ * 第三方台风数据模型
+ *
+ * @author a203
+ */
+public class TyphoonDetailModel {
+
+ /**
+ * showapi_res_error :
+ * showapi_fee_num : 1
+ * showapi_res_code : 0
+ * showapi_res_id : 6155596a0de376ce34c7b594
+ * showapi_res_body : {"ret_code":0,"obj":{"endtime":"2021-9-30 8:00:00","centerlng":"139.300000","starttime":"2021-9-23 20:00:00","tfid":"202116","isactive":"1","centerlat":"25.200000","name":"蒲公英","land":[],"warnlevel":"white","points":[{"time":"2021-9-23 20:00:00","pressure":"998","radius10":"","speed":"18","strong":"热带风暴","movespeed":"20","radius12":"","power":"8","lng":"143.30","movedirection":"西北西","lat":"13.80","radius7":"250|220|200|180"},{"time":"2021-9-24 2:00:00","pressure":"998","radius10":"","speed":"18","strong":"热带风暴","movespeed":"24","radius12":"","power":"8","lng":"142.10","movedirection":"西北西","lat":"14.10","radius7":"250|220|200|180"},{"time":"2021-9-24 5:00:00","pressure":"998","radius10":"","speed":"18","strong":"热带风暴","movespeed":"18","radius12":"","power":"8","lng":"141.50","movedirection":"北西","lat":"14.50","radius7":"250|220|200|180"},{"time":"2021-9-24 8:00:00","pressure":"998","radius10":"","speed":"18","strong":"热带风暴","movespeed":"15","radius12":"","power":"8","lng":"141.10","movedirection":"西北西","lat":"14.60","radius7":"250|220|200|180"},{"time":"2021-9-24 14:00:00","pressure":"990","radius10":"","speed":"23","strong":"热带风暴","movespeed":"20","radius12":"","power":"9","lng":"140.40","movedirection":"北西","lat":"15.10","radius7":"300|250|220|200"},{"time":"2021-9-24 17:00:00","pressure":"990","radius10":"","speed":"23","strong":"热带风暴","movespeed":"15","radius12":"","power":"9","lng":"140.00","movedirection":"北西","lat":"15.40","radius7":"300|250|220|200"},{"time":"2021-9-24 20:00:00","pressure":"982","radius10":"100|100|120|120","speed":"28","strong":"强热带风暴","movespeed":"16","radius12":"","power":"10","lng":"139.60","movedirection":"北西","lat":"15.70","radius7":"320|320|260|260"},{"time":"2021-9-25 2:00:00","pressure":"982","radius10":"100|100|120|120","speed":"28","strong":"强热带风暴","movespeed":"15","radius12":"","power":"10","lng":"138.90","movedirection":"北西","lat":"16.50","radius7":"320|320|260|260"},{"time":"2021-9-25 5:00:00","pressure":"980","radius10":"100|100|120|120","speed":"30","strong":"强热带风暴","movespeed":"12","radius12":"","power":"11","lng":"138.20","movedirection":"北北西","lat":"17.00","radius7":"320|320|260|260"},{"time":"2021-9-25 8:00:00","pressure":"975","radius10":"100|100|120|120","speed":"33","strong":"台风","movespeed":"11","radius12":"","power":"12","lng":"138.10","movedirection":"北北西","lat":"17.10","radius7":"320|320|260|260"},{"time":"2021-9-25 14:00:00","pressure":"955","radius10":"180|160|180|200","speed":"42","strong":"强台风","movespeed":"10","radius12":"100|80|100|120","power":"14","lng":"137.70","movedirection":"北北西","lat":"17.60","radius7":"320|300|320|350"},{"time":"2021-9-25 17:00:00","pressure":"950","radius10":"180|160|180|200","speed":"45","strong":"强台风","movespeed":"10","radius12":"100|80|100|120","power":"14","lng":"137.70","movedirection":"北北西","lat":"17.80","radius7":"320|300|320|350"},{"time":"2021-9-25 20:00:00","pressure":"940","radius10":"180|180|180|200","speed":"50","strong":"强台风","movespeed":"10","radius12":"100|100|100|120","power":"15","lng":"137.60","movedirection":"北北西","lat":"18.10","radius7":"320|300|320|350"},{"time":"2021-9-26 2:00:00","pressure":"940","radius10":"180|180|180|200","speed":"50","strong":"强台风","movespeed":"10","radius12":"100|100|100|120","power":"15","lng":"137.00","movedirection":"北北西","lat":"18.50","radius7":"320|300|320|350"},{"time":"2021-9-26 5:00:00","pressure":"940","radius10":"180|180|180|200","speed":"50","strong":"强台风","movespeed":"10","radius12":"100|100|100|120","power":"15","lng":"137.00","movedirection":"北北西","lat":"18.70","radius7":"320|300|320|350"},{"time":"2021-9-26 8:00:00","pressure":"930","radius10":"180|180|180|200","speed":"55","strong":"超强台风","movespeed":"6","radius12":"100|100|100|120","power":"16","lng":"136.80","movedirection":"北北西","lat":"18.70","radius7":"320|300|320|350"},{"time":"2021-9-26 14:00:00","pressure":"920","radius10":"180|180|180|200","speed":"60","strong":"超强台风","movespeed":"5","radius12":"100|100|100|120","power":"17","lng":"136.70","movedirection":"北","lat":"18.80","radius7":"320|300|320|350"},{"time":"2021-9-26 17:00:00","pressure":"920","radius10":"180|180|180|200","speed":"60","strong":"超强台风","movespeed":"3","radius12":"100|100|100|120","power":"17","lng":"136.70","movedirection":"北北西","lat":"18.90","radius7":"320|300|320|350"},{"time":"2021-9-26 20:00:00","pressure":"920","radius10":"180|180|180|200","speed":"60","strong":"超强台风","movespeed":"4","radius12":"100|100|100|120","power":"17","lng":"136.70","movedirection":"北北西","lat":"19.00","radius7":"320|300|320|350"},{"time":"2021-9-27 2:00:00","pressure":"920","radius10":"180|180|180|200","speed":"60","strong":"超强台风","movespeed":"6","radius12":"100|100|100|120","power":"17","lng":"136.80","movedirection":"北西","lat":"19.30","radius7":"320|300|320|350"},{"time":"2021-9-27 5:00:00","pressure":"930","radius10":"180|180|180|200","speed":"55","strong":"超强台风","movespeed":"6","radius12":"100|100|100|120","power":"16","lng":"136.70","movedirection":"北西","lat":"19.60","radius7":"320|300|320|350"},{"time":"2021-9-27 8:00:00","pressure":"935","radius10":"180|180|180|200","speed":"52","strong":"超强台风","movespeed":"6","radius12":"100|100|100|120","power":"16","lng":"136.70","movedirection":"北北西","lat":"19.60","radius7":"320|300|320|350"},{"time":"2021-9-27 14:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"7","radius12":"80|70|70|70","power":"16","lng":"136.60","movedirection":"北西","lat":"19.90","radius7":"320|300|320|350"},{"time":"2021-9-27 17:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"8","radius12":"80|70|70|70","power":"16","lng":"136.50","movedirection":"北西","lat":"20.00","radius7":"350|300|320|350"},{"time":"2021-9-27 20:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"8","radius12":"80|70|70|70","power":"16","lng":"136.40","movedirection":"北西","lat":"20.20","radius7":"350|300|320|350"},{"time":"2021-9-28 2:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"11","radius12":"80|70|70|70","power":"16","lng":"136.30","movedirection":"北西","lat":"20.40","radius7":"350|300|320|350"},{"time":"2021-9-28 5:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"12","radius12":"80|70|70|70","power":"16","lng":"136.20","movedirection":"北北西","lat":"20.60","radius7":"350|300|320|350"},{"time":"2021-9-28 8:00:00","pressure":"940","radius10":"150|120|120|120","speed":"50","strong":"强台风","movespeed":"12","radius12":"80|70|70|70","power":"15","lng":"136.20","movedirection":"北北西","lat":"20.90","radius7":"350|300|320|350"},{"time":"2021-9-28 14:00:00","pressure":"940","radius10":"150|120|120|120","speed":"50","strong":"强台风","movespeed":"12","radius12":"80|70|70|70","power":"15","lng":"135.80","movedirection":"北北西","lat":"21.50","radius7":"350|300|320|350"},{"time":"2021-9-28 17:00:00","pressure":"940","radius10":"150|120|120|120","speed":"50","strong":"强台风","movespeed":"13","radius12":"80|70|70|70","power":"15","lng":"135.70","movedirection":"北北西","lat":"21.70","radius7":"350|300|320|350"},{"time":"2021-9-28 20:00:00","pressure":"940","radius10":"150|120|120|120","speed":"50","strong":"强台风","movespeed":"13","radius12":"80|70|70|70","power":"15","lng":"135.40","movedirection":"北北西","lat":"22.00","radius7":"350|300|320|350"},{"time":"2021-9-29 2:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"14","radius12":"80|70|70|70","power":"16","lng":"135.60","movedirection":"北","lat":"22.70","radius7":"350|300|320|350"},{"time":"2021-9-29 5:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"15","radius12":"80|70|70|70","power":"16","lng":"135.50","movedirection":"北","lat":"22.80","radius7":"350|300|320|350"},{"time":"2021-9-29 8:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"15","radius12":"80|70|70|70","power":"16","lng":"135.30","movedirection":"北","lat":"23.40","radius7":"350|300|320|350"},{"time":"2021-9-29 14:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"17","radius12":"80|70|70|70","power":"16","lng":"135.40","movedirection":"北北东","lat":"24.20","radius7":"350|300|320|350"},{"time":"2021-9-29 17:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"20","radius12":"80|70|70|70","power":"16","lng":"135.40","movedirection":"北北东","lat":"24.50","radius7":"350|300|320|350"},{"time":"2021-9-29 20:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"20","radius12":"80|70|70|70","power":"16","lng":"135.50","movedirection":"北北东","lat":"24.80","radius7":"350|300|320|350"},{"time":"2021-9-30 2:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"22","radius12":"80|70|70|70","power":"16","lng":"135.80","movedirection":"北北东","lat":"25.80","radius7":"350|300|320|350"},{"time":"2021-9-30 5:00:00","pressure":"940","radius10":"150|120|120|120","speed":"50","strong":"强台风","movespeed":"18","radius12":"80|70|70|70","power":"15","lng":"136.10","movedirection":"北北东","lat":"26.20","radius7":"350|300|320|350"},{"pressure":"945","radius10":"150|120|120|120","speed":"48","radius12":"80|70|70|70","lng":"136.40","jl":" \u201c蒲公英\u201d将以每小时23公里左右的速度向北偏东方向移动,强度变化不大。 (下次更新时间为30日14时30分)","radius7":"350|300|320|350","time":"2021-9-30 8:00:00","strong":"强台风","movespeed":"23","power":"15","movedirection":"北北东","ckposition":" 距离日本东京南偏西方向约1060公里","lat":"26.60"}],"enname":"Mindulle"}}
+ */
+
+ private String showapi_res_error;
+ private int showapi_fee_num;
+ private int showapi_res_code;
+ private String showapi_res_id;
+ private ShowapiResBodyBean showapi_res_body;
+
+ public String getShowapi_res_error() {
+ return showapi_res_error;
+ }
+
+ public void setShowapi_res_error(String showapi_res_error) {
+ this.showapi_res_error = showapi_res_error;
+ }
+
+ public int getShowapi_fee_num() {
+ return showapi_fee_num;
+ }
+
+ public void setShowapi_fee_num(int showapi_fee_num) {
+ this.showapi_fee_num = showapi_fee_num;
+ }
+
+ public int getShowapi_res_code() {
+ return showapi_res_code;
+ }
+
+ public void setShowapi_res_code(int showapi_res_code) {
+ this.showapi_res_code = showapi_res_code;
+ }
+
+ public String getShowapi_res_id() {
+ return showapi_res_id;
+ }
+
+ public void setShowapi_res_id(String showapi_res_id) {
+ this.showapi_res_id = showapi_res_id;
+ }
+
+ public ShowapiResBodyBean getShowapi_res_body() {
+ return showapi_res_body;
+ }
+
+ public void setShowapi_res_body(ShowapiResBodyBean showapi_res_body) {
+ this.showapi_res_body = showapi_res_body;
+ }
+
+ public static class ShowapiResBodyBean {
+ /**
+ * ret_code : 0
+ * obj : {"endtime":"2021-9-30 8:00:00","centerlng":"139.300000","starttime":"2021-9-23 20:00:00","tfid":"202116","isactive":"1","centerlat":"25.200000","name":"蒲公英","land":[],"warnlevel":"white","points":[{"time":"2021-9-23 20:00:00","pressure":"998","radius10":"","speed":"18","strong":"热带风暴","movespeed":"20","radius12":"","power":"8","lng":"143.30","movedirection":"西北西","lat":"13.80","radius7":"250|220|200|180"},{"time":"2021-9-24 2:00:00","pressure":"998","radius10":"","speed":"18","strong":"热带风暴","movespeed":"24","radius12":"","power":"8","lng":"142.10","movedirection":"西北西","lat":"14.10","radius7":"250|220|200|180"},{"time":"2021-9-24 5:00:00","pressure":"998","radius10":"","speed":"18","strong":"热带风暴","movespeed":"18","radius12":"","power":"8","lng":"141.50","movedirection":"北西","lat":"14.50","radius7":"250|220|200|180"},{"time":"2021-9-24 8:00:00","pressure":"998","radius10":"","speed":"18","strong":"热带风暴","movespeed":"15","radius12":"","power":"8","lng":"141.10","movedirection":"西北西","lat":"14.60","radius7":"250|220|200|180"},{"time":"2021-9-24 14:00:00","pressure":"990","radius10":"","speed":"23","strong":"热带风暴","movespeed":"20","radius12":"","power":"9","lng":"140.40","movedirection":"北西","lat":"15.10","radius7":"300|250|220|200"},{"time":"2021-9-24 17:00:00","pressure":"990","radius10":"","speed":"23","strong":"热带风暴","movespeed":"15","radius12":"","power":"9","lng":"140.00","movedirection":"北西","lat":"15.40","radius7":"300|250|220|200"},{"time":"2021-9-24 20:00:00","pressure":"982","radius10":"100|100|120|120","speed":"28","strong":"强热带风暴","movespeed":"16","radius12":"","power":"10","lng":"139.60","movedirection":"北西","lat":"15.70","radius7":"320|320|260|260"},{"time":"2021-9-25 2:00:00","pressure":"982","radius10":"100|100|120|120","speed":"28","strong":"强热带风暴","movespeed":"15","radius12":"","power":"10","lng":"138.90","movedirection":"北西","lat":"16.50","radius7":"320|320|260|260"},{"time":"2021-9-25 5:00:00","pressure":"980","radius10":"100|100|120|120","speed":"30","strong":"强热带风暴","movespeed":"12","radius12":"","power":"11","lng":"138.20","movedirection":"北北西","lat":"17.00","radius7":"320|320|260|260"},{"time":"2021-9-25 8:00:00","pressure":"975","radius10":"100|100|120|120","speed":"33","strong":"台风","movespeed":"11","radius12":"","power":"12","lng":"138.10","movedirection":"北北西","lat":"17.10","radius7":"320|320|260|260"},{"time":"2021-9-25 14:00:00","pressure":"955","radius10":"180|160|180|200","speed":"42","strong":"强台风","movespeed":"10","radius12":"100|80|100|120","power":"14","lng":"137.70","movedirection":"北北西","lat":"17.60","radius7":"320|300|320|350"},{"time":"2021-9-25 17:00:00","pressure":"950","radius10":"180|160|180|200","speed":"45","strong":"强台风","movespeed":"10","radius12":"100|80|100|120","power":"14","lng":"137.70","movedirection":"北北西","lat":"17.80","radius7":"320|300|320|350"},{"time":"2021-9-25 20:00:00","pressure":"940","radius10":"180|180|180|200","speed":"50","strong":"强台风","movespeed":"10","radius12":"100|100|100|120","power":"15","lng":"137.60","movedirection":"北北西","lat":"18.10","radius7":"320|300|320|350"},{"time":"2021-9-26 2:00:00","pressure":"940","radius10":"180|180|180|200","speed":"50","strong":"强台风","movespeed":"10","radius12":"100|100|100|120","power":"15","lng":"137.00","movedirection":"北北西","lat":"18.50","radius7":"320|300|320|350"},{"time":"2021-9-26 5:00:00","pressure":"940","radius10":"180|180|180|200","speed":"50","strong":"强台风","movespeed":"10","radius12":"100|100|100|120","power":"15","lng":"137.00","movedirection":"北北西","lat":"18.70","radius7":"320|300|320|350"},{"time":"2021-9-26 8:00:00","pressure":"930","radius10":"180|180|180|200","speed":"55","strong":"超强台风","movespeed":"6","radius12":"100|100|100|120","power":"16","lng":"136.80","movedirection":"北北西","lat":"18.70","radius7":"320|300|320|350"},{"time":"2021-9-26 14:00:00","pressure":"920","radius10":"180|180|180|200","speed":"60","strong":"超强台风","movespeed":"5","radius12":"100|100|100|120","power":"17","lng":"136.70","movedirection":"北","lat":"18.80","radius7":"320|300|320|350"},{"time":"2021-9-26 17:00:00","pressure":"920","radius10":"180|180|180|200","speed":"60","strong":"超强台风","movespeed":"3","radius12":"100|100|100|120","power":"17","lng":"136.70","movedirection":"北北西","lat":"18.90","radius7":"320|300|320|350"},{"time":"2021-9-26 20:00:00","pressure":"920","radius10":"180|180|180|200","speed":"60","strong":"超强台风","movespeed":"4","radius12":"100|100|100|120","power":"17","lng":"136.70","movedirection":"北北西","lat":"19.00","radius7":"320|300|320|350"},{"time":"2021-9-27 2:00:00","pressure":"920","radius10":"180|180|180|200","speed":"60","strong":"超强台风","movespeed":"6","radius12":"100|100|100|120","power":"17","lng":"136.80","movedirection":"北西","lat":"19.30","radius7":"320|300|320|350"},{"time":"2021-9-27 5:00:00","pressure":"930","radius10":"180|180|180|200","speed":"55","strong":"超强台风","movespeed":"6","radius12":"100|100|100|120","power":"16","lng":"136.70","movedirection":"北西","lat":"19.60","radius7":"320|300|320|350"},{"time":"2021-9-27 8:00:00","pressure":"935","radius10":"180|180|180|200","speed":"52","strong":"超强台风","movespeed":"6","radius12":"100|100|100|120","power":"16","lng":"136.70","movedirection":"北北西","lat":"19.60","radius7":"320|300|320|350"},{"time":"2021-9-27 14:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"7","radius12":"80|70|70|70","power":"16","lng":"136.60","movedirection":"北西","lat":"19.90","radius7":"320|300|320|350"},{"time":"2021-9-27 17:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"8","radius12":"80|70|70|70","power":"16","lng":"136.50","movedirection":"北西","lat":"20.00","radius7":"350|300|320|350"},{"time":"2021-9-27 20:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"8","radius12":"80|70|70|70","power":"16","lng":"136.40","movedirection":"北西","lat":"20.20","radius7":"350|300|320|350"},{"time":"2021-9-28 2:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"11","radius12":"80|70|70|70","power":"16","lng":"136.30","movedirection":"北西","lat":"20.40","radius7":"350|300|320|350"},{"time":"2021-9-28 5:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"12","radius12":"80|70|70|70","power":"16","lng":"136.20","movedirection":"北北西","lat":"20.60","radius7":"350|300|320|350"},{"time":"2021-9-28 8:00:00","pressure":"940","radius10":"150|120|120|120","speed":"50","strong":"强台风","movespeed":"12","radius12":"80|70|70|70","power":"15","lng":"136.20","movedirection":"北北西","lat":"20.90","radius7":"350|300|320|350"},{"time":"2021-9-28 14:00:00","pressure":"940","radius10":"150|120|120|120","speed":"50","strong":"强台风","movespeed":"12","radius12":"80|70|70|70","power":"15","lng":"135.80","movedirection":"北北西","lat":"21.50","radius7":"350|300|320|350"},{"time":"2021-9-28 17:00:00","pressure":"940","radius10":"150|120|120|120","speed":"50","strong":"强台风","movespeed":"13","radius12":"80|70|70|70","power":"15","lng":"135.70","movedirection":"北北西","lat":"21.70","radius7":"350|300|320|350"},{"time":"2021-9-28 20:00:00","pressure":"940","radius10":"150|120|120|120","speed":"50","strong":"强台风","movespeed":"13","radius12":"80|70|70|70","power":"15","lng":"135.40","movedirection":"北北西","lat":"22.00","radius7":"350|300|320|350"},{"time":"2021-9-29 2:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"14","radius12":"80|70|70|70","power":"16","lng":"135.60","movedirection":"北","lat":"22.70","radius7":"350|300|320|350"},{"time":"2021-9-29 5:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"15","radius12":"80|70|70|70","power":"16","lng":"135.50","movedirection":"北","lat":"22.80","radius7":"350|300|320|350"},{"time":"2021-9-29 8:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"15","radius12":"80|70|70|70","power":"16","lng":"135.30","movedirection":"北","lat":"23.40","radius7":"350|300|320|350"},{"time":"2021-9-29 14:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"17","radius12":"80|70|70|70","power":"16","lng":"135.40","movedirection":"北北东","lat":"24.20","radius7":"350|300|320|350"},{"time":"2021-9-29 17:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"20","radius12":"80|70|70|70","power":"16","lng":"135.40","movedirection":"北北东","lat":"24.50","radius7":"350|300|320|350"},{"time":"2021-9-29 20:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"20","radius12":"80|70|70|70","power":"16","lng":"135.50","movedirection":"北北东","lat":"24.80","radius7":"350|300|320|350"},{"time":"2021-9-30 2:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"22","radius12":"80|70|70|70","power":"16","lng":"135.80","movedirection":"北北东","lat":"25.80","radius7":"350|300|320|350"},{"time":"2021-9-30 5:00:00","pressure":"940","radius10":"150|120|120|120","speed":"50","strong":"强台风","movespeed":"18","radius12":"80|70|70|70","power":"15","lng":"136.10","movedirection":"北北东","lat":"26.20","radius7":"350|300|320|350"},{"pressure":"945","radius10":"150|120|120|120","speed":"48","radius12":"80|70|70|70","lng":"136.40","jl":" \u201c蒲公英\u201d将以每小时23公里左右的速度向北偏东方向移动,强度变化不大。 (下次更新时间为30日14时30分)","radius7":"350|300|320|350","time":"2021-9-30 8:00:00","strong":"强台风","movespeed":"23","power":"15","movedirection":"北北东","ckposition":" 距离日本东京南偏西方向约1060公里","lat":"26.60"}],"enname":"Mindulle"}
+ */
+
+ private int ret_code;
+ private ObjBean obj;
+
+ public int getRet_code() {
+ return ret_code;
+ }
+
+ public void setRet_code(int ret_code) {
+ this.ret_code = ret_code;
+ }
+
+ public ObjBean getObj() {
+ return obj;
+ }
+
+ public void setObj(ObjBean obj) {
+ this.obj = obj;
+ }
+
+ public static class ObjBean {
+ /**
+ * endtime : 2021-9-30 8:00:00
+ * centerlng : 139.300000
+ * starttime : 2021-9-23 20:00:00
+ * tfid : 202116
+ * isactive : 1
+ * centerlat : 25.200000
+ * name : 蒲公英
+ * land : [{"landaddress":"朱家尖镇","strong":"强台风","lng":"122.39","lat":"29.83","info":"\u201c灿鸿\u201d11日16时40分前后登陆浙江舟山市朱家尖镇","landtime":"2015/7/11 16:40:00"}]
+ * warnlevel : white
+ * points : [{"time":"2021-9-23 20:00:00","pressure":"998","radius10":"","speed":"18","strong":"热带风暴","movespeed":"20","radius12":"","power":"8","lng":"143.30","movedirection":"西北西","lat":"13.80","radius7":"250|220|200|180"},{"time":"2021-9-24 2:00:00","pressure":"998","radius10":"","speed":"18","strong":"热带风暴","movespeed":"24","radius12":"","power":"8","lng":"142.10","movedirection":"西北西","lat":"14.10","radius7":"250|220|200|180"},{"time":"2021-9-24 5:00:00","pressure":"998","radius10":"","speed":"18","strong":"热带风暴","movespeed":"18","radius12":"","power":"8","lng":"141.50","movedirection":"北西","lat":"14.50","radius7":"250|220|200|180"},{"time":"2021-9-24 8:00:00","pressure":"998","radius10":"","speed":"18","strong":"热带风暴","movespeed":"15","radius12":"","power":"8","lng":"141.10","movedirection":"西北西","lat":"14.60","radius7":"250|220|200|180"},{"time":"2021-9-24 14:00:00","pressure":"990","radius10":"","speed":"23","strong":"热带风暴","movespeed":"20","radius12":"","power":"9","lng":"140.40","movedirection":"北西","lat":"15.10","radius7":"300|250|220|200"},{"time":"2021-9-24 17:00:00","pressure":"990","radius10":"","speed":"23","strong":"热带风暴","movespeed":"15","radius12":"","power":"9","lng":"140.00","movedirection":"北西","lat":"15.40","radius7":"300|250|220|200"},{"time":"2021-9-24 20:00:00","pressure":"982","radius10":"100|100|120|120","speed":"28","strong":"强热带风暴","movespeed":"16","radius12":"","power":"10","lng":"139.60","movedirection":"北西","lat":"15.70","radius7":"320|320|260|260"},{"time":"2021-9-25 2:00:00","pressure":"982","radius10":"100|100|120|120","speed":"28","strong":"强热带风暴","movespeed":"15","radius12":"","power":"10","lng":"138.90","movedirection":"北西","lat":"16.50","radius7":"320|320|260|260"},{"time":"2021-9-25 5:00:00","pressure":"980","radius10":"100|100|120|120","speed":"30","strong":"强热带风暴","movespeed":"12","radius12":"","power":"11","lng":"138.20","movedirection":"北北西","lat":"17.00","radius7":"320|320|260|260"},{"time":"2021-9-25 8:00:00","pressure":"975","radius10":"100|100|120|120","speed":"33","strong":"台风","movespeed":"11","radius12":"","power":"12","lng":"138.10","movedirection":"北北西","lat":"17.10","radius7":"320|320|260|260"},{"time":"2021-9-25 14:00:00","pressure":"955","radius10":"180|160|180|200","speed":"42","strong":"强台风","movespeed":"10","radius12":"100|80|100|120","power":"14","lng":"137.70","movedirection":"北北西","lat":"17.60","radius7":"320|300|320|350"},{"time":"2021-9-25 17:00:00","pressure":"950","radius10":"180|160|180|200","speed":"45","strong":"强台风","movespeed":"10","radius12":"100|80|100|120","power":"14","lng":"137.70","movedirection":"北北西","lat":"17.80","radius7":"320|300|320|350"},{"time":"2021-9-25 20:00:00","pressure":"940","radius10":"180|180|180|200","speed":"50","strong":"强台风","movespeed":"10","radius12":"100|100|100|120","power":"15","lng":"137.60","movedirection":"北北西","lat":"18.10","radius7":"320|300|320|350"},{"time":"2021-9-26 2:00:00","pressure":"940","radius10":"180|180|180|200","speed":"50","strong":"强台风","movespeed":"10","radius12":"100|100|100|120","power":"15","lng":"137.00","movedirection":"北北西","lat":"18.50","radius7":"320|300|320|350"},{"time":"2021-9-26 5:00:00","pressure":"940","radius10":"180|180|180|200","speed":"50","strong":"强台风","movespeed":"10","radius12":"100|100|100|120","power":"15","lng":"137.00","movedirection":"北北西","lat":"18.70","radius7":"320|300|320|350"},{"time":"2021-9-26 8:00:00","pressure":"930","radius10":"180|180|180|200","speed":"55","strong":"超强台风","movespeed":"6","radius12":"100|100|100|120","power":"16","lng":"136.80","movedirection":"北北西","lat":"18.70","radius7":"320|300|320|350"},{"time":"2021-9-26 14:00:00","pressure":"920","radius10":"180|180|180|200","speed":"60","strong":"超强台风","movespeed":"5","radius12":"100|100|100|120","power":"17","lng":"136.70","movedirection":"北","lat":"18.80","radius7":"320|300|320|350"},{"time":"2021-9-26 17:00:00","pressure":"920","radius10":"180|180|180|200","speed":"60","strong":"超强台风","movespeed":"3","radius12":"100|100|100|120","power":"17","lng":"136.70","movedirection":"北北西","lat":"18.90","radius7":"320|300|320|350"},{"time":"2021-9-26 20:00:00","pressure":"920","radius10":"180|180|180|200","speed":"60","strong":"超强台风","movespeed":"4","radius12":"100|100|100|120","power":"17","lng":"136.70","movedirection":"北北西","lat":"19.00","radius7":"320|300|320|350"},{"time":"2021-9-27 2:00:00","pressure":"920","radius10":"180|180|180|200","speed":"60","strong":"超强台风","movespeed":"6","radius12":"100|100|100|120","power":"17","lng":"136.80","movedirection":"北西","lat":"19.30","radius7":"320|300|320|350"},{"time":"2021-9-27 5:00:00","pressure":"930","radius10":"180|180|180|200","speed":"55","strong":"超强台风","movespeed":"6","radius12":"100|100|100|120","power":"16","lng":"136.70","movedirection":"北西","lat":"19.60","radius7":"320|300|320|350"},{"time":"2021-9-27 8:00:00","pressure":"935","radius10":"180|180|180|200","speed":"52","strong":"超强台风","movespeed":"6","radius12":"100|100|100|120","power":"16","lng":"136.70","movedirection":"北北西","lat":"19.60","radius7":"320|300|320|350"},{"time":"2021-9-27 14:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"7","radius12":"80|70|70|70","power":"16","lng":"136.60","movedirection":"北西","lat":"19.90","radius7":"320|300|320|350"},{"time":"2021-9-27 17:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"8","radius12":"80|70|70|70","power":"16","lng":"136.50","movedirection":"北西","lat":"20.00","radius7":"350|300|320|350"},{"time":"2021-9-27 20:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"8","radius12":"80|70|70|70","power":"16","lng":"136.40","movedirection":"北西","lat":"20.20","radius7":"350|300|320|350"},{"time":"2021-9-28 2:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"11","radius12":"80|70|70|70","power":"16","lng":"136.30","movedirection":"北西","lat":"20.40","radius7":"350|300|320|350"},{"time":"2021-9-28 5:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"12","radius12":"80|70|70|70","power":"16","lng":"136.20","movedirection":"北北西","lat":"20.60","radius7":"350|300|320|350"},{"time":"2021-9-28 8:00:00","pressure":"940","radius10":"150|120|120|120","speed":"50","strong":"强台风","movespeed":"12","radius12":"80|70|70|70","power":"15","lng":"136.20","movedirection":"北北西","lat":"20.90","radius7":"350|300|320|350"},{"time":"2021-9-28 14:00:00","pressure":"940","radius10":"150|120|120|120","speed":"50","strong":"强台风","movespeed":"12","radius12":"80|70|70|70","power":"15","lng":"135.80","movedirection":"北北西","lat":"21.50","radius7":"350|300|320|350"},{"time":"2021-9-28 17:00:00","pressure":"940","radius10":"150|120|120|120","speed":"50","strong":"强台风","movespeed":"13","radius12":"80|70|70|70","power":"15","lng":"135.70","movedirection":"北北西","lat":"21.70","radius7":"350|300|320|350"},{"time":"2021-9-28 20:00:00","pressure":"940","radius10":"150|120|120|120","speed":"50","strong":"强台风","movespeed":"13","radius12":"80|70|70|70","power":"15","lng":"135.40","movedirection":"北北西","lat":"22.00","radius7":"350|300|320|350"},{"time":"2021-9-29 2:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"14","radius12":"80|70|70|70","power":"16","lng":"135.60","movedirection":"北","lat":"22.70","radius7":"350|300|320|350"},{"time":"2021-9-29 5:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"15","radius12":"80|70|70|70","power":"16","lng":"135.50","movedirection":"北","lat":"22.80","radius7":"350|300|320|350"},{"time":"2021-9-29 8:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"15","radius12":"80|70|70|70","power":"16","lng":"135.30","movedirection":"北","lat":"23.40","radius7":"350|300|320|350"},{"time":"2021-9-29 14:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"17","radius12":"80|70|70|70","power":"16","lng":"135.40","movedirection":"北北东","lat":"24.20","radius7":"350|300|320|350"},{"time":"2021-9-29 17:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"20","radius12":"80|70|70|70","power":"16","lng":"135.40","movedirection":"北北东","lat":"24.50","radius7":"350|300|320|350"},{"time":"2021-9-29 20:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"20","radius12":"80|70|70|70","power":"16","lng":"135.50","movedirection":"北北东","lat":"24.80","radius7":"350|300|320|350"},{"time":"2021-9-30 2:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"22","radius12":"80|70|70|70","power":"16","lng":"135.80","movedirection":"北北东","lat":"25.80","radius7":"350|300|320|350"},{"time":"2021-9-30 5:00:00","pressure":"940","radius10":"150|120|120|120","speed":"50","strong":"强台风","movespeed":"18","radius12":"80|70|70|70","power":"15","lng":"136.10","movedirection":"北北东","lat":"26.20","radius7":"350|300|320|350"},{"pressure":"945","radius10":"150|120|120|120","speed":"48","radius12":"80|70|70|70","lng":"136.40","jl":" \u201c蒲公英\u201d将以每小时23公里左右的速度向北偏东方向移动,强度变化不大。 (下次更新时间为30日14时30分)","radius7":"350|300|320|350","time":"2021-9-30 8:00:00","strong":"强台风","movespeed":"23","power":"15","movedirection":"北北东","ckposition":" 距离日本东京南偏西方向约1060公里","lat":"26.60"}]
+ * enname : Mindulle
+ */
+
+ private String endtime;
+ private String centerlng;
+ private String starttime;
+ private String tfid;
+ private String isactive;
+ private String centerlat;
+ private String name;
+ private String warnlevel;
+ private String enname;
+ private List land;
+ private List points;
+
+ public String getEndtime() {
+ return endtime;
+ }
+
+ public void setEndtime(String endtime) {
+ this.endtime = endtime;
+ }
+
+ public String getCenterlng() {
+ return centerlng;
+ }
+
+ public void setCenterlng(String centerlng) {
+ this.centerlng = centerlng;
+ }
+
+ public String getStarttime() {
+ return starttime;
+ }
+
+ public void setStarttime(String starttime) {
+ this.starttime = starttime;
+ }
+
+ public String getTfid() {
+ return tfid;
+ }
+
+ public void setTfid(String tfid) {
+ this.tfid = tfid;
+ }
+
+ public String getIsactive() {
+ return isactive;
+ }
+
+ public void setIsactive(String isactive) {
+ this.isactive = isactive;
+ }
+
+ public String getCenterlat() {
+ return centerlat;
+ }
+
+ public void setCenterlat(String centerlat) {
+ this.centerlat = centerlat;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getWarnlevel() {
+ return warnlevel;
+ }
+
+ public void setWarnlevel(String warnlevel) {
+ this.warnlevel = warnlevel;
+ }
+
+ public String getEnname() {
+ return enname;
+ }
+
+ public void setEnname(String enname) {
+ this.enname = enname;
+ }
+
+ public List getLand() {
+ return land;
+ }
+
+ public void setLand(List land) {
+ this.land = land;
+ }
+
+ public static class LandBan {
+ /**
+ * landaddress : 朱家尖镇
+ * strong : 强台风
+ * lng : 122.39
+ * lat : 29.83
+ * info : “灿鸿”11日16时40分前后登陆浙江舟山市朱家尖镇
+ * landtime : 2015/7/11 16:40:00
+ */
+
+ private String landaddress;
+ private String strong;
+ private Double lng;
+ private Double lat;
+ private String info;
+ private String landtime;
+
+ public String getLandaddress() {
+ return landaddress;
+ }
+
+ public void setLandaddress(String landaddress) {
+ this.landaddress = landaddress;
+ }
+
+ public String getStrong() {
+ return strong;
+ }
+
+ public void setStrong(String strong) {
+ this.strong = strong;
+ }
+
+ public Double getLng() {
+ return lng;
+ }
+
+ public void setLng(Double lng) {
+ this.lng = lng;
+ }
+
+ public Double getLat() {
+ return lat;
+ }
+
+ public void setLat(Double lat) {
+ this.lat = lat;
+ }
+
+ public String getInfo() {
+ return info;
+ }
+
+ public void setInfo(String info) {
+ this.info = info;
+ }
+
+ public String getLandtime() {
+ return landtime;
+ }
+
+ public void setLandtime(String landtime) {
+ this.landtime = landtime;
+ }
+ }
+
+ public List getPoints() {
+ return points;
+ }
+
+ public void setPoints(List points) {
+ this.points = points;
+ }
+
+ public static class PointsBean {
+ /**
+ * time : 2021-9-23 20:00:00
+ * pressure : 998
+ * radius10 :
+ * speed : 18
+ * strong : 热带风暴
+ * movespeed : 20
+ * radius12 :
+ * power : 8
+ * lng : 143.30
+ * movedirection : 西北西
+ * lat : 13.80
+ * radius7 : 250|220|200|180
+ * jl : “蒲公英”将以每小时23公里左右的速度向北偏东方向移动,强度变化不大。 (下次更新时间为30日14时30分)
+ * ckposition : 距离日本东京南偏西方向约1060公里
+ */
+
+ private String time;
+ private String pressure;
+ private String radius10;
+ private String speed;
+ private String strong;
+ private String movespeed;
+ private String radius12;
+ private String power;
+ private Double lng;
+ private String movedirection;
+ private Double lat;
+ private String radius7;
+ private String jl;
+ private String ckposition;
+
+ public String getTime() {
+ return time;
+ }
+
+ public void setTime(String time) {
+ this.time = time;
+ }
+
+ public String getPressure() {
+ return pressure;
+ }
+
+ public void setPressure(String pressure) {
+ this.pressure = pressure;
+ }
+
+ public String getRadius10() {
+ return radius10;
+ }
+
+ public void setRadius10(String radius10) {
+ this.radius10 = radius10;
+ }
+
+ public String getSpeed() {
+ return speed;
+ }
+
+ public void setSpeed(String speed) {
+ this.speed = speed;
+ }
+
+ public String getStrong() {
+ return strong;
+ }
+
+ public void setStrong(String strong) {
+ this.strong = strong;
+ }
+
+ public String getMovespeed() {
+ return movespeed;
+ }
+
+ public void setMovespeed(String movespeed) {
+ this.movespeed = movespeed;
+ }
+
+ public String getRadius12() {
+ return radius12;
+ }
+
+ public void setRadius12(String radius12) {
+ this.radius12 = radius12;
+ }
+
+ public String getPower() {
+ return power;
+ }
+
+ public void setPower(String power) {
+ this.power = power;
+ }
+
+ public Double getLng() {
+ return lng;
+ }
+
+ public void setLng(Double lng) {
+ this.lng = lng;
+ }
+
+ public String getMovedirection() {
+ return movedirection;
+ }
+
+ public void setMovedirection(String movedirection) {
+ this.movedirection = movedirection;
+ }
+
+ public Double getLat() {
+ return lat;
+ }
+
+ public void setLat(Double lat) {
+ this.lat = lat;
+ }
+
+ public String getRadius7() {
+ return radius7;
+ }
+
+ public void setRadius7(String radius7) {
+ this.radius7 = radius7;
+ }
+
+ public String getJl() {
+ return jl;
+ }
+
+ public void setJl(String jl) {
+ this.jl = jl;
+ }
+
+ public String getCkposition() {
+ return ckposition;
+ }
+
+ public void setCkposition(String ckposition) {
+ this.ckposition = ckposition;
+ }
+ }
+ }
+ }
+}
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index 913a287..71c67c0 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -36,6 +36,16 @@
provided
+
+ com.alibaba
+ fastjson
+ ${fastjson.version}
+
+
+ com.squareup.okhttp3
+ okhttp
+ 4.9.1
+
diff --git a/casic-server/src/main/java/com/casic/missiles/job/TyphoonQuartzJob.java b/casic-server/src/main/java/com/casic/missiles/job/TyphoonQuartzJob.java
new file mode 100644
index 0000000..87b8c72
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/job/TyphoonQuartzJob.java
@@ -0,0 +1,27 @@
+package com.casic.missiles.job;
+
+import com.casic.missiles.modular.system.service.ITyphoonService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+/**
+ * 台风数据定时任务,每小时执行一次
+ *
+ * @author a203
+ * @Description 依赖casic-job-quartz,并在CasicApplication上增加注解 @EnableScheduling
+ */
+@Slf4j
+@Component
+public class TyphoonQuartzJob {
+ private final ITyphoonService typhoonService;
+
+ public TyphoonQuartzJob(ITyphoonService typhoonService) {
+ this.typhoonService = typhoonService;
+ }
+
+ @Scheduled(cron = "0 0 */1 * * ?")
+ public void execute() {
+ typhoonService.saveTyphoon();
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DemoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DemoController.java
deleted file mode 100644
index 87b6fec..0000000
--- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DemoController.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.casic.missiles.modular.system.controller;
-
-
-import com.casic.missiles.model.application.event.core.EventPublisher;
-import com.casic.missiles.model.application.event.enums.ModelEventTypeEnum;
-import com.casic.missiles.model.response.ResponseData;
-import com.casic.missiles.modular.system.event.UserEvent;
-import com.casic.missiles.modular.system.model.User;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.ResponseBody;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * @ClassName DemoController
- * @Description TODO
- * @Author lenovo
- * @Date 2020/6/13 15:38
- * @Version 1.0
- */
-@RestController
-@RequestMapping("/demo")
-public class DemoController {
- @Autowired
- private EventPublisher publisher;
-
- /**
- * 获取mockToken
- */
- @PostMapping("/list")
- @ResponseBody
- public Object list() {
- User user = new User();
- user.setAccount("张三");
- publisher.publishEvent(new UserEvent(ModelEventTypeEnum.ADD, user));
- return ResponseData.success();
- }
-
-
-}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/EnvironmentController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/EnvironmentController.java
new file mode 100644
index 0000000..44a55d6
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/EnvironmentController.java
@@ -0,0 +1,62 @@
+package com.casic.missiles.modular.system.controller;
+
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.OceanDetailDTO;
+import com.casic.missiles.modular.system.dto.TyphoonDTO;
+import com.casic.missiles.modular.system.dto.TyphoonDetailDTO;
+import com.casic.missiles.modular.system.service.IOceanService;
+import com.casic.missiles.modular.system.service.ITyphoonService;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.List;
+
+/**
+ * 环境控制器
+ *
+ * @author a203
+ */
+@Controller
+@RequestMapping("/environment")
+public class EnvironmentController {
+ private final ITyphoonService typhoonService;
+ private final IOceanService oceanService;
+
+ public EnvironmentController(ITyphoonService typhoonService, IOceanService oceanService) {
+ this.typhoonService = typhoonService;
+ this.oceanService = oceanService;
+ }
+
+ /**
+ * 台风列表
+ */
+ @GetMapping(value = "/typhoonList")
+ @ResponseBody
+ public Object list() {
+ List typhoonList = typhoonService.currentTyphoonList();
+ return ResponseData.success(typhoonList);
+ }
+
+ /**
+ * 台风详情
+ */
+ @GetMapping(value = "/typhoonDetail/{typhoonId}")
+ @ResponseBody
+ public Object detail(@PathVariable("typhoonId") String typhoonId) {
+ TyphoonDetailDTO detailDTO = typhoonService.typhoonDetail(typhoonId);
+ return ResponseData.success(detailDTO);
+ }
+
+ /**
+ * 洋流详情
+ */
+ @GetMapping(value = "/ocean")
+ @ResponseBody
+ public Object oceanDetail(double lng, double lat, String date, String days, String hour) {
+ OceanDetailDTO detailDTO = oceanService.oceanDetail(lng, lat, date, days, hour);
+ return ResponseData.success(detailDTO);
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/LandPointMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/LandPointMapper.java
new file mode 100644
index 0000000..1f4757d
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/LandPointMapper.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.modular.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.modular.system.model.sql.LandPoint;
+
+/**
+ * 台风登陆数据信息 Mapper 接口
+ *
+ * @author a203
+ */
+public interface LandPointMapper extends BaseMapper {
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RoutePointMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RoutePointMapper.java
new file mode 100644
index 0000000..f31f6d0
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RoutePointMapper.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.modular.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.modular.system.model.sql.RoutePoint;
+
+/**
+ * 台风移动点数据信息 Mapper 接口
+ *
+ * @author a203
+ */
+public interface RoutePointMapper extends BaseMapper {
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonDetailMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonDetailMapper.java
new file mode 100644
index 0000000..bce7a6b
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonDetailMapper.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.modular.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.modular.system.model.sql.TyphoonDetail;
+
+/**
+ * 台风数据信息 Mapper 接口
+ *
+ * @author a203
+ */
+public interface TyphoonDetailMapper extends BaseMapper {
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonMapper.java
new file mode 100644
index 0000000..40fcb32
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonMapper.java
@@ -0,0 +1,21 @@
+package com.casic.missiles.modular.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.modular.system.model.sql.Typhoon;
+
+import java.util.List;
+
+/**
+ * 台风数据信息 Mapper 接口
+ *
+ * @author a203
+ */
+public interface TyphoonMapper extends BaseMapper {
+
+ /**
+ * 查询当前未消散的台风
+ *
+ * @return {@link List}
+ */
+ List selectCurrentTyphoon();
+}
\ No newline at end of file
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/TyphoonMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/TyphoonMapper.xml
new file mode 100644
index 0000000..73498fb
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/TyphoonMapper.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java
new file mode 100644
index 0000000..2debc96
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java
@@ -0,0 +1,152 @@
+package com.casic.missiles.modular.system.dto;
+
+import com.casic.missiles.modular.system.model.remote.OceanDetailModel;
+import lombok.Data;
+
+import java.text.DecimalFormat;
+
+/**
+ * @author a203
+ */
+@Data
+public class OceanDetailDTO {
+
+ /**
+ * 海温, 单位: ℃(摄氏度)
+ */
+ private Double temperature;
+
+ /**
+ * 海拔, 单位: m(米)
+ */
+ private Double altitude;
+
+ /**
+ * 气压, 单位: hPa
+ */
+ private Double pressure;
+
+ /**
+ * 涌浪高度, 单位: m(米)
+ */
+ private Double swellHeight;
+
+ /**
+ * 涌浪方向, 单位: 度[0,360]
+ */
+ private Double swellDir;
+
+ /**
+ * 涌浪周期, 单位: s(秒)
+ */
+ private Double swellPrd;
+
+ /**
+ * 风浪高度, 单位: m(米)
+ */
+ private Double waveHeight;
+
+ /**
+ * 风浪方向, 单位: 度[0,360]
+ */
+ private Double waveDir;
+
+ /**
+ * 风浪周期, 单位: s(秒)
+ */
+ private Double wavePrd;
+
+ /**
+ * 海流速度, 单位: m/s
+ */
+ private Double speed;
+
+ /**
+ * 海流方向, 单位: 度[0,360]
+ */
+ private Double oceanDir;
+
+ /**
+ * 风速,单位: m/s
+ */
+ private Double windSpeed;
+
+ /**
+ * 风向,单位: 度[0,360]
+ */
+ private Double windDir;
+
+ /**
+ * 海浪预测
+ */
+ private PreviewBean forecast;
+
+ @Data
+ public static class PreviewBean {
+ /**
+ * 涌浪高度, 单位: m(米)
+ */
+ private Double swellHeight;
+
+ /**
+ * 涌浪方向, 单位: 度[0,360]
+ */
+ private Double swellDir;
+
+ /**
+ * 涌浪周期, 单位: s(秒)
+ */
+ private Double swellPrd;
+
+ /**
+ * 风浪高度, 单位: m(米)
+ */
+ private Double waveHeight;
+
+ /**
+ * 风浪方向, 单位: 度[0,360]
+ */
+ private Double waveDir;
+
+ /**
+ * 风浪周期, 单位: s(秒)
+ */
+ private Double wavePrd;
+ }
+
+ public OceanDetailDTO(OceanDetailModel remoteData) {
+ OceanDetailModel.DataBean.ListBean listBean = remoteData.getData().getList().get(0);
+ OceanDetailModel.DataBean.ListBean.YtxBean ytxBean = listBean.getYtx();
+ OceanDetailModel.DataBean.ListBean.MeteoBean meteoBean = listBean.getMeteo();
+ if (ytxBean != null) {
+ this.temperature = formatData(ytxBean.getSurfaceTem());
+ this.altitude = formatData(0.00);
+ this.pressure = formatData(ytxBean.getSurfPres());
+ this.swellHeight = formatData(ytxBean.getSwellHgt());
+ this.swellDir = formatData(ytxBean.getSwellDir());
+ this.swellPrd = formatData(ytxBean.getSwellPrd());
+ this.waveHeight = formatData(ytxBean.getWaveHgt());
+ this.waveDir = formatData(ytxBean.getWaveDir());
+ this.wavePrd = formatData(ytxBean.getWavePrd());
+ this.speed = formatData(ytxBean.getWindMag());
+ this.oceanDir = formatData(ytxBean.getCurrentDir());
+ this.windSpeed = formatData(ytxBean.getWindMag());
+ this.windDir = formatData(ytxBean.getWindDir());
+ }
+ PreviewBean bean = new PreviewBean();
+ if (meteoBean != null) {
+ bean.swellHeight = formatData(meteoBean.getSwellHgt());
+ bean.swellDir = formatData(meteoBean.getSwellDir());
+ bean.swellPrd = formatData(meteoBean.getSwellPrd());
+ bean.waveHeight = formatData(meteoBean.getWaveHgt());
+ bean.waveDir = formatData(meteoBean.getWaveDir());
+ bean.wavePrd = formatData(meteoBean.getWavePrd());
+ }
+ this.forecast = bean;
+ }
+
+ private Double formatData(Double data) {
+ DecimalFormat df = new DecimalFormat("#.00");
+ return Double.parseDouble(df.format(data));
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TyphoonDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TyphoonDTO.java
new file mode 100644
index 0000000..e3b3bb3
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TyphoonDTO.java
@@ -0,0 +1,84 @@
+package com.casic.missiles.modular.system.dto;
+
+import com.casic.missiles.modular.system.model.sql.Typhoon;
+import lombok.Data;
+
+/**
+ * @author a203
+ */
+@Data
+public class TyphoonDTO {
+ /**
+ * 台风ID
+ */
+ private String typhoonId;
+ /**
+ * 台风中文代号
+ */
+ private String name;
+ /**
+ * 台风英文代号
+ */
+ private String engName;
+ /**
+ * 经度
+ */
+ private Double lng;
+ /**
+ * 纬度
+ */
+ private Double lat;
+ /**
+ * 台风风力等级描述
+ */
+ private String typhoonType;
+ /**
+ * 台风中心气压,单位【百帕】
+ */
+ private String centerPressure;
+ /**
+ * 风速,单位【米/每秒】
+ */
+ private String speed;
+ /**
+ * 风力,单位【级】
+ */
+ private Integer power;
+ /**
+ * 台风整体移动速度,单位【公里/小时】
+ */
+ private String moveSpeed;
+ /**
+ * 台风未来移动方向
+ */
+ private String moveDirection;
+ /**
+ * 10级风力影响半径
+ */
+ private String radius10;
+ /**
+ * 7级风力影响半径
+ */
+ private String radius7;
+ /**
+ * 数据更新时间
+ */
+ private String time;
+
+ public TyphoonDTO(Typhoon data) {
+ this.typhoonId = data.getTyphoonId();
+ this.name = data.getName();
+ this.engName = data.getEngName();
+ this.lng = data.getLng();
+ this.lat = data.getLat();
+ this.typhoonType = data.getTyphoonType();
+ this.centerPressure = data.getCenterPressure();
+ this.speed = data.getSpeed();
+ this.power = data.getPower();
+ this.moveSpeed = data.getMoveSpeed();
+ this.moveDirection = data.getMoveDirection();
+ this.radius10 = data.getRadius10();
+ this.radius7 = data.getRadius7();
+ this.time = data.getTime();
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TyphoonDetailDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TyphoonDetailDTO.java
new file mode 100644
index 0000000..295c57f
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TyphoonDetailDTO.java
@@ -0,0 +1,190 @@
+package com.casic.missiles.modular.system.dto;
+
+import com.casic.missiles.modular.system.model.sql.LandPoint;
+import com.casic.missiles.modular.system.model.sql.RoutePoint;
+import com.casic.missiles.modular.system.model.sql.TyphoonDetail;
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 台风详情
+ *
+ * @author a203
+ */
+@Data
+public class TyphoonDetailDTO {
+ /**
+ * 台风ID
+ */
+ private String typhoonId;
+ /**
+ * 台风中文代号
+ */
+ private String name;
+ /**
+ * 台风英文代号
+ */
+ private String engName;
+ /**
+ * 台风告警级别
+ */
+ private String warnLevel;
+ /**
+ * 台风中心经度
+ */
+ private Double centerLng;
+ /**
+ * 台风中心纬度
+ */
+ private Double centerLat;
+ /**
+ * 台风开始时间
+ */
+ private String startTime;
+ /**
+ * 台风结束时间
+ */
+ private String endTime;
+ /**
+ * 台风状态
+ */
+ private String isActive;
+ /**
+ * 台风登陆点
+ */
+ private List land;
+ /**
+ * 台风路径
+ */
+ private List points;
+
+ @Data
+ public static class LandBan {
+ /**
+ * 台风登陆点
+ */
+ private String landAddress;
+ /**
+ * 台风类型-热带风暴/强台风...
+ */
+ private String type;
+ private Double lng;
+ private Double lat;
+ /**
+ * 台风登陆细节
+ */
+ private String info;
+ /**
+ * 台风登陆时间
+ */
+ private String landTime;
+ }
+
+ @Data
+ public static class PointBean {
+ /**
+ * 数据更新时间
+ */
+ private String time;
+ /**
+ * 台风中心气压,单位【百帕】
+ */
+ private String centerPressure;
+ /**
+ * 风速,单位【米/每秒】
+ */
+ private String speed;
+ /**
+ * 台风风力等级描述
+ */
+ private String typhoonType;
+ /**
+ * 台风整体移动速度,单位【公里/小时】
+ */
+ private String moveSpeed;
+ /**
+ * 风力,单位【级】
+ */
+ private Integer power;
+ /**
+ * 台风未来移动方向
+ */
+ private String moveDirection;
+ /**
+ * 经度
+ */
+ private Double lng;
+ /**
+ * 纬度
+ */
+ private Double lat;
+ /**
+ * 12级风力影响半径
+ */
+ private String radius12;
+ /**
+ * 10级风力影响半径
+ */
+ private String radius10;
+ /**
+ * 7级风力影响半径
+ */
+ private String radius7;
+ /**
+ * 台风路线预测
+ */
+ private String routePrediction;
+ /**
+ * 中心位置
+ */
+ private String centerPosition;
+ }
+
+ public TyphoonDetailDTO(TyphoonDetail detail, List landBeans, List routeBeans) {
+ this.typhoonId = detail.getTyphoonId();
+ this.name = detail.getName();
+ this.engName = detail.getEngName();
+ this.warnLevel = detail.getWarnLevel();
+ this.centerLng = detail.getCenterLng();
+ this.centerLat = detail.getCenterLat();
+ this.startTime = detail.getStartTime();
+ this.endTime = detail.getEndTime();
+ this.isActive = detail.getIsActive();
+
+ List lands = new ArrayList<>();
+ for (LandPoint landBean : landBeans) {
+ LandBan bean = new LandBan();
+ bean.landAddress = landBean.getLandAddress();
+ bean.landTime = landBean.getLandTime();
+ bean.type = landBean.getType();
+ bean.lng = landBean.getLng();
+ bean.lat = landBean.getLat();
+ bean.info = landBean.getInfo();
+ lands.add(bean);
+ }
+ this.land = lands;
+
+ List points = new ArrayList<>();
+ for (RoutePoint point : routeBeans) {
+ PointBean pointBean = new PointBean();
+ pointBean.time = point.getTime();
+ pointBean.centerPressure = point.getCenterPressure();
+ pointBean.speed = point.getSpeed();
+ pointBean.typhoonType = point.getTyphoonType();
+ pointBean.moveSpeed = point.getMoveSpeed();
+ pointBean.power = point.getPower();
+ pointBean.moveDirection = point.getMoveDirection();
+ pointBean.lng = point.getLng();
+ pointBean.lat = point.getLat();
+ pointBean.radius12 = point.getRadius12();
+ pointBean.radius10 = point.getRadius10();
+ pointBean.radius7 = point.getRadius7();
+ pointBean.routePrediction = point.getRoutePrediction();
+ pointBean.centerPosition = point.getCenterPosition();
+ points.add(pointBean);
+ }
+ this.points = points;
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java
deleted file mode 100644
index c6ed867..0000000
--- a/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.casic.missiles.modular.system.event;
-
-import com.casic.missiles.model.application.event.core.ModelEvent;
-import com.casic.missiles.model.application.event.type.AbstractEventTypeEnum;
-import com.casic.missiles.modular.system.model.User;
-
-/**
- * 用户事件
- *
- * @author lwh
- */
-public class UserEvent extends ModelEvent {
- /**
- * Create a new {@code ApplicationEvent}.
- *
- * @param type 事件类型
- * @param source the object on which the event initially occurred or with
- * which the event is associated (never {@code null})
- */
- public UserEvent(AbstractEventTypeEnum type, User source) {
- super(type, source);
- }
-}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java
deleted file mode 100644
index 4480ef2..0000000
--- a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.casic.missiles.modular.system.event.listener;
-
-import com.casic.missiles.core.application.event.UserLoginEvent;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.context.event.EventListener;
-import org.springframework.stereotype.Component;
-
-/**
- * 用户事件订阅
- *
- * @author lwh
- */
-@Slf4j
-@Component
-public class UserOneListener {
- @EventListener
- public void onApplicationEvent(UserLoginEvent event) {
- log.debug("用户1订阅:{}", event);
- }
-}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java
deleted file mode 100644
index 8447a22..0000000
--- a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.casic.missiles.modular.system.event.listener;
-
-import com.casic.missiles.model.application.event.core.EventSubscriber;
-import com.casic.missiles.modular.system.event.UserEvent;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Component;
-
-/**
- * 用户事件订阅
- *
- * @author lwh
- */
-@Slf4j
-@Component
-public class UserTwoListener extends EventSubscriber {
- @Override
- public void onApplicationEvent(UserEvent event) {
- log.debug("用户2订阅:{}", event);
- }
-}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/remote/OceanDetailModel.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/remote/OceanDetailModel.java
new file mode 100644
index 0000000..742560a
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/remote/OceanDetailModel.java
@@ -0,0 +1,439 @@
+package com.casic.missiles.modular.system.model.remote;
+
+import java.util.List;
+
+/**
+ * 第三方洋流数据模型
+ *
+ * @author a203
+ */
+public class OceanDetailModel {
+
+ /**
+ * code : 0
+ * data : {"lon":114.338597,"lat":18.273134,"date":"2021-10-21","hour":10,"list":[{"date":"2021-10-21","ytx":{"currentMag":0.8194745182991028,"currentDir":311.85589599609375,"swellDir":54.90005874633789,"swellHgt":1.0300003290176392,"swellPrd":6.740001201629639,"waveDir":51.860050201416016,"waveHgt":1.0500003099441528,"wavePrd":6.740001201629639,"windMag":4.520016193389893,"windDir":84.48993682861328,"surfPres":101099.5625,"surface_Tem":301.4056800842285,"surfaceTem":28.255680084228516,"surfTem":28.255680084228516},"meteo":{"currentMag":0.8194745182991028,"currentDir":311.85589599609375,"swellDir":54.90005874633789,"swellHgt":1.0300003290176392,"swellPrd":6.740001201629639,"waveDir":51.860050201416016,"waveHgt":1.0500003099441528,"wavePrd":6.740001201629639,"windMag":4.520016193389893,"windDir":84.48993682861328,"surfPres":101099.5625,"surface_Tem":301.4056800842285,"surfaceTem":28.255680084228516,"surfTem":28.255680084228516}}]}
+ * message : success
+ * etime : 1634786517992
+ */
+
+ private int code;
+ private DataBean data;
+ private String message;
+ private long etime;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataBean getData() {
+ return data;
+ }
+
+ public void setData(DataBean data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public long getEtime() {
+ return etime;
+ }
+
+ public void setEtime(long etime) {
+ this.etime = etime;
+ }
+
+ public static class DataBean {
+ /**
+ * lon : 114.338597
+ * lat : 18.273134
+ * date : 2021-10-21
+ * hour : 10
+ * list : [{"date":"2021-10-21","ytx":{"currentMag":0.8194745182991028,"currentDir":311.85589599609375,"swellDir":54.90005874633789,"swellHgt":1.0300003290176392,"swellPrd":6.740001201629639,"waveDir":51.860050201416016,"waveHgt":1.0500003099441528,"wavePrd":6.740001201629639,"windMag":4.520016193389893,"windDir":84.48993682861328,"surfPres":101099.5625,"surface_Tem":301.4056800842285,"surfaceTem":28.255680084228516,"surfTem":28.255680084228516},"meteo":{"currentMag":0.8194745182991028,"currentDir":311.85589599609375,"swellDir":54.90005874633789,"swellHgt":1.0300003290176392,"swellPrd":6.740001201629639,"waveDir":51.860050201416016,"waveHgt":1.0500003099441528,"wavePrd":6.740001201629639,"windMag":4.520016193389893,"windDir":84.48993682861328,"surfPres":101099.5625,"surface_Tem":301.4056800842285,"surfaceTem":28.255680084228516,"surfTem":28.255680084228516}}]
+ */
+
+ private double lon;
+ private double lat;
+ private String date;
+ private int hour;
+ private List list;
+
+ public double getLon() {
+ return lon;
+ }
+
+ public void setLon(double lon) {
+ this.lon = lon;
+ }
+
+ public double getLat() {
+ return lat;
+ }
+
+ public void setLat(double lat) {
+ this.lat = lat;
+ }
+
+ public String getDate() {
+ return date;
+ }
+
+ public void setDate(String date) {
+ this.date = date;
+ }
+
+ public int getHour() {
+ return hour;
+ }
+
+ public void setHour(int hour) {
+ this.hour = hour;
+ }
+
+ public List getList() {
+ return list;
+ }
+
+ public void setList(List list) {
+ this.list = list;
+ }
+
+ public static class ListBean {
+ /**
+ * date : 2021-10-21
+ * ytx : {"currentMag":0.8194745182991028,"currentDir":311.85589599609375,"swellDir":54.90005874633789,"swellHgt":1.0300003290176392,"swellPrd":6.740001201629639,"waveDir":51.860050201416016,"waveHgt":1.0500003099441528,"wavePrd":6.740001201629639,"windMag":4.520016193389893,"windDir":84.48993682861328,"surfPres":101099.5625,"surface_Tem":301.4056800842285,"surfaceTem":28.255680084228516,"surfTem":28.255680084228516}
+ * meteo : {"currentMag":0.8194745182991028,"currentDir":311.85589599609375,"swellDir":54.90005874633789,"swellHgt":1.0300003290176392,"swellPrd":6.740001201629639,"waveDir":51.860050201416016,"waveHgt":1.0500003099441528,"wavePrd":6.740001201629639,"windMag":4.520016193389893,"windDir":84.48993682861328,"surfPres":101099.5625,"surface_Tem":301.4056800842285,"surfaceTem":28.255680084228516,"surfTem":28.255680084228516}
+ */
+
+ private String date;
+ private YtxBean ytx;
+ private MeteoBean meteo;
+
+ public String getDate() {
+ return date;
+ }
+
+ public void setDate(String date) {
+ this.date = date;
+ }
+
+ public YtxBean getYtx() {
+ return ytx;
+ }
+
+ public void setYtx(YtxBean ytx) {
+ this.ytx = ytx;
+ }
+
+ public MeteoBean getMeteo() {
+ return meteo;
+ }
+
+ public void setMeteo(MeteoBean meteo) {
+ this.meteo = meteo;
+ }
+
+ public static class YtxBean {
+ /**
+ * currentMag : 0.8194745182991028
+ * currentDir : 311.85589599609375
+ * swellDir : 54.90005874633789
+ * swellHgt : 1.0300003290176392
+ * swellPrd : 6.740001201629639
+ * waveDir : 51.860050201416016
+ * waveHgt : 1.0500003099441528
+ * wavePrd : 6.740001201629639
+ * windMag : 4.520016193389893
+ * windDir : 84.48993682861328
+ * surfPres : 101099.5625
+ * surface_Tem : 301.4056800842285
+ * surfaceTem : 28.255680084228516
+ * surfTem : 28.255680084228516
+ */
+
+ private double currentMag;
+ private double currentDir;
+ private double swellDir;
+ private double swellHgt;
+ private double swellPrd;
+ private double waveDir;
+ private double waveHgt;
+ private double wavePrd;
+ private double windMag;
+ private double windDir;
+ private double surfPres;
+ private double surface_Tem;
+ private double surfaceTem;
+ private double surfTem;
+
+ public double getCurrentMag() {
+ return currentMag;
+ }
+
+ public void setCurrentMag(double currentMag) {
+ this.currentMag = currentMag;
+ }
+
+ public double getCurrentDir() {
+ return currentDir;
+ }
+
+ public void setCurrentDir(double currentDir) {
+ this.currentDir = currentDir;
+ }
+
+ public double getSwellDir() {
+ return swellDir;
+ }
+
+ public void setSwellDir(double swellDir) {
+ this.swellDir = swellDir;
+ }
+
+ public double getSwellHgt() {
+ return swellHgt;
+ }
+
+ public void setSwellHgt(double swellHgt) {
+ this.swellHgt = swellHgt;
+ }
+
+ public double getSwellPrd() {
+ return swellPrd;
+ }
+
+ public void setSwellPrd(double swellPrd) {
+ this.swellPrd = swellPrd;
+ }
+
+ public double getWaveDir() {
+ return waveDir;
+ }
+
+ public void setWaveDir(double waveDir) {
+ this.waveDir = waveDir;
+ }
+
+ public double getWaveHgt() {
+ return waveHgt;
+ }
+
+ public void setWaveHgt(double waveHgt) {
+ this.waveHgt = waveHgt;
+ }
+
+ public double getWavePrd() {
+ return wavePrd;
+ }
+
+ public void setWavePrd(double wavePrd) {
+ this.wavePrd = wavePrd;
+ }
+
+ public double getWindMag() {
+ return windMag;
+ }
+
+ public void setWindMag(double windMag) {
+ this.windMag = windMag;
+ }
+
+ public double getWindDir() {
+ return windDir;
+ }
+
+ public void setWindDir(double windDir) {
+ this.windDir = windDir;
+ }
+
+ public double getSurfPres() {
+ return surfPres;
+ }
+
+ public void setSurfPres(double surfPres) {
+ this.surfPres = surfPres;
+ }
+
+ public double getSurface_Tem() {
+ return surface_Tem;
+ }
+
+ public void setSurface_Tem(double surface_Tem) {
+ this.surface_Tem = surface_Tem;
+ }
+
+ public double getSurfaceTem() {
+ return surfaceTem;
+ }
+
+ public void setSurfaceTem(double surfaceTem) {
+ this.surfaceTem = surfaceTem;
+ }
+
+ public double getSurfTem() {
+ return surfTem;
+ }
+
+ public void setSurfTem(double surfTem) {
+ this.surfTem = surfTem;
+ }
+ }
+
+ public static class MeteoBean {
+ /**
+ * currentMag : 0.8194745182991028
+ * currentDir : 311.85589599609375
+ * swellDir : 54.90005874633789
+ * swellHgt : 1.0300003290176392
+ * swellPrd : 6.740001201629639
+ * waveDir : 51.860050201416016
+ * waveHgt : 1.0500003099441528
+ * wavePrd : 6.740001201629639
+ * windMag : 4.520016193389893
+ * windDir : 84.48993682861328
+ * surfPres : 101099.5625
+ * surface_Tem : 301.4056800842285
+ * surfaceTem : 28.255680084228516
+ * surfTem : 28.255680084228516
+ */
+
+ private double currentMag;
+ private double currentDir;
+ private double swellDir;
+ private double swellHgt;
+ private double swellPrd;
+ private double waveDir;
+ private double waveHgt;
+ private double wavePrd;
+ private double windMag;
+ private double windDir;
+ private double surfPres;
+ private double surface_Tem;
+ private double surfaceTem;
+ private double surfTem;
+
+ public double getCurrentMag() {
+ return currentMag;
+ }
+
+ public void setCurrentMag(double currentMag) {
+ this.currentMag = currentMag;
+ }
+
+ public double getCurrentDir() {
+ return currentDir;
+ }
+
+ public void setCurrentDir(double currentDir) {
+ this.currentDir = currentDir;
+ }
+
+ public double getSwellDir() {
+ return swellDir;
+ }
+
+ public void setSwellDir(double swellDir) {
+ this.swellDir = swellDir;
+ }
+
+ public double getSwellHgt() {
+ return swellHgt;
+ }
+
+ public void setSwellHgt(double swellHgt) {
+ this.swellHgt = swellHgt;
+ }
+
+ public double getSwellPrd() {
+ return swellPrd;
+ }
+
+ public void setSwellPrd(double swellPrd) {
+ this.swellPrd = swellPrd;
+ }
+
+ public double getWaveDir() {
+ return waveDir;
+ }
+
+ public void setWaveDir(double waveDir) {
+ this.waveDir = waveDir;
+ }
+
+ public double getWaveHgt() {
+ return waveHgt;
+ }
+
+ public void setWaveHgt(double waveHgt) {
+ this.waveHgt = waveHgt;
+ }
+
+ public double getWavePrd() {
+ return wavePrd;
+ }
+
+ public void setWavePrd(double wavePrd) {
+ this.wavePrd = wavePrd;
+ }
+
+ public double getWindMag() {
+ return windMag;
+ }
+
+ public void setWindMag(double windMag) {
+ this.windMag = windMag;
+ }
+
+ public double getWindDir() {
+ return windDir;
+ }
+
+ public void setWindDir(double windDir) {
+ this.windDir = windDir;
+ }
+
+ public double getSurfPres() {
+ return surfPres;
+ }
+
+ public void setSurfPres(double surfPres) {
+ this.surfPres = surfPres;
+ }
+
+ public double getSurface_Tem() {
+ return surface_Tem;
+ }
+
+ public void setSurface_Tem(double surface_Tem) {
+ this.surface_Tem = surface_Tem;
+ }
+
+ public double getSurfaceTem() {
+ return surfaceTem;
+ }
+
+ public void setSurfaceTem(double surfaceTem) {
+ this.surfaceTem = surfaceTem;
+ }
+
+ public double getSurfTem() {
+ return surfTem;
+ }
+
+ public void setSurfTem(double surfTem) {
+ this.surfTem = surfTem;
+ }
+ }
+ }
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/remote/TyphoonDetailModel.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/remote/TyphoonDetailModel.java
new file mode 100644
index 0000000..26d347b
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/remote/TyphoonDetailModel.java
@@ -0,0 +1,419 @@
+package com.casic.missiles.modular.system.model.remote;
+
+import java.util.List;
+
+/**
+ * 第三方台风数据模型
+ *
+ * @author a203
+ */
+public class TyphoonDetailModel {
+
+ /**
+ * showapi_res_error :
+ * showapi_fee_num : 1
+ * showapi_res_code : 0
+ * showapi_res_id : 6155596a0de376ce34c7b594
+ * showapi_res_body : {"ret_code":0,"obj":{"endtime":"2021-9-30 8:00:00","centerlng":"139.300000","starttime":"2021-9-23 20:00:00","tfid":"202116","isactive":"1","centerlat":"25.200000","name":"蒲公英","land":[],"warnlevel":"white","points":[{"time":"2021-9-23 20:00:00","pressure":"998","radius10":"","speed":"18","strong":"热带风暴","movespeed":"20","radius12":"","power":"8","lng":"143.30","movedirection":"西北西","lat":"13.80","radius7":"250|220|200|180"},{"time":"2021-9-24 2:00:00","pressure":"998","radius10":"","speed":"18","strong":"热带风暴","movespeed":"24","radius12":"","power":"8","lng":"142.10","movedirection":"西北西","lat":"14.10","radius7":"250|220|200|180"},{"time":"2021-9-24 5:00:00","pressure":"998","radius10":"","speed":"18","strong":"热带风暴","movespeed":"18","radius12":"","power":"8","lng":"141.50","movedirection":"北西","lat":"14.50","radius7":"250|220|200|180"},{"time":"2021-9-24 8:00:00","pressure":"998","radius10":"","speed":"18","strong":"热带风暴","movespeed":"15","radius12":"","power":"8","lng":"141.10","movedirection":"西北西","lat":"14.60","radius7":"250|220|200|180"},{"time":"2021-9-24 14:00:00","pressure":"990","radius10":"","speed":"23","strong":"热带风暴","movespeed":"20","radius12":"","power":"9","lng":"140.40","movedirection":"北西","lat":"15.10","radius7":"300|250|220|200"},{"time":"2021-9-24 17:00:00","pressure":"990","radius10":"","speed":"23","strong":"热带风暴","movespeed":"15","radius12":"","power":"9","lng":"140.00","movedirection":"北西","lat":"15.40","radius7":"300|250|220|200"},{"time":"2021-9-24 20:00:00","pressure":"982","radius10":"100|100|120|120","speed":"28","strong":"强热带风暴","movespeed":"16","radius12":"","power":"10","lng":"139.60","movedirection":"北西","lat":"15.70","radius7":"320|320|260|260"},{"time":"2021-9-25 2:00:00","pressure":"982","radius10":"100|100|120|120","speed":"28","strong":"强热带风暴","movespeed":"15","radius12":"","power":"10","lng":"138.90","movedirection":"北西","lat":"16.50","radius7":"320|320|260|260"},{"time":"2021-9-25 5:00:00","pressure":"980","radius10":"100|100|120|120","speed":"30","strong":"强热带风暴","movespeed":"12","radius12":"","power":"11","lng":"138.20","movedirection":"北北西","lat":"17.00","radius7":"320|320|260|260"},{"time":"2021-9-25 8:00:00","pressure":"975","radius10":"100|100|120|120","speed":"33","strong":"台风","movespeed":"11","radius12":"","power":"12","lng":"138.10","movedirection":"北北西","lat":"17.10","radius7":"320|320|260|260"},{"time":"2021-9-25 14:00:00","pressure":"955","radius10":"180|160|180|200","speed":"42","strong":"强台风","movespeed":"10","radius12":"100|80|100|120","power":"14","lng":"137.70","movedirection":"北北西","lat":"17.60","radius7":"320|300|320|350"},{"time":"2021-9-25 17:00:00","pressure":"950","radius10":"180|160|180|200","speed":"45","strong":"强台风","movespeed":"10","radius12":"100|80|100|120","power":"14","lng":"137.70","movedirection":"北北西","lat":"17.80","radius7":"320|300|320|350"},{"time":"2021-9-25 20:00:00","pressure":"940","radius10":"180|180|180|200","speed":"50","strong":"强台风","movespeed":"10","radius12":"100|100|100|120","power":"15","lng":"137.60","movedirection":"北北西","lat":"18.10","radius7":"320|300|320|350"},{"time":"2021-9-26 2:00:00","pressure":"940","radius10":"180|180|180|200","speed":"50","strong":"强台风","movespeed":"10","radius12":"100|100|100|120","power":"15","lng":"137.00","movedirection":"北北西","lat":"18.50","radius7":"320|300|320|350"},{"time":"2021-9-26 5:00:00","pressure":"940","radius10":"180|180|180|200","speed":"50","strong":"强台风","movespeed":"10","radius12":"100|100|100|120","power":"15","lng":"137.00","movedirection":"北北西","lat":"18.70","radius7":"320|300|320|350"},{"time":"2021-9-26 8:00:00","pressure":"930","radius10":"180|180|180|200","speed":"55","strong":"超强台风","movespeed":"6","radius12":"100|100|100|120","power":"16","lng":"136.80","movedirection":"北北西","lat":"18.70","radius7":"320|300|320|350"},{"time":"2021-9-26 14:00:00","pressure":"920","radius10":"180|180|180|200","speed":"60","strong":"超强台风","movespeed":"5","radius12":"100|100|100|120","power":"17","lng":"136.70","movedirection":"北","lat":"18.80","radius7":"320|300|320|350"},{"time":"2021-9-26 17:00:00","pressure":"920","radius10":"180|180|180|200","speed":"60","strong":"超强台风","movespeed":"3","radius12":"100|100|100|120","power":"17","lng":"136.70","movedirection":"北北西","lat":"18.90","radius7":"320|300|320|350"},{"time":"2021-9-26 20:00:00","pressure":"920","radius10":"180|180|180|200","speed":"60","strong":"超强台风","movespeed":"4","radius12":"100|100|100|120","power":"17","lng":"136.70","movedirection":"北北西","lat":"19.00","radius7":"320|300|320|350"},{"time":"2021-9-27 2:00:00","pressure":"920","radius10":"180|180|180|200","speed":"60","strong":"超强台风","movespeed":"6","radius12":"100|100|100|120","power":"17","lng":"136.80","movedirection":"北西","lat":"19.30","radius7":"320|300|320|350"},{"time":"2021-9-27 5:00:00","pressure":"930","radius10":"180|180|180|200","speed":"55","strong":"超强台风","movespeed":"6","radius12":"100|100|100|120","power":"16","lng":"136.70","movedirection":"北西","lat":"19.60","radius7":"320|300|320|350"},{"time":"2021-9-27 8:00:00","pressure":"935","radius10":"180|180|180|200","speed":"52","strong":"超强台风","movespeed":"6","radius12":"100|100|100|120","power":"16","lng":"136.70","movedirection":"北北西","lat":"19.60","radius7":"320|300|320|350"},{"time":"2021-9-27 14:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"7","radius12":"80|70|70|70","power":"16","lng":"136.60","movedirection":"北西","lat":"19.90","radius7":"320|300|320|350"},{"time":"2021-9-27 17:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"8","radius12":"80|70|70|70","power":"16","lng":"136.50","movedirection":"北西","lat":"20.00","radius7":"350|300|320|350"},{"time":"2021-9-27 20:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"8","radius12":"80|70|70|70","power":"16","lng":"136.40","movedirection":"北西","lat":"20.20","radius7":"350|300|320|350"},{"time":"2021-9-28 2:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"11","radius12":"80|70|70|70","power":"16","lng":"136.30","movedirection":"北西","lat":"20.40","radius7":"350|300|320|350"},{"time":"2021-9-28 5:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"12","radius12":"80|70|70|70","power":"16","lng":"136.20","movedirection":"北北西","lat":"20.60","radius7":"350|300|320|350"},{"time":"2021-9-28 8:00:00","pressure":"940","radius10":"150|120|120|120","speed":"50","strong":"强台风","movespeed":"12","radius12":"80|70|70|70","power":"15","lng":"136.20","movedirection":"北北西","lat":"20.90","radius7":"350|300|320|350"},{"time":"2021-9-28 14:00:00","pressure":"940","radius10":"150|120|120|120","speed":"50","strong":"强台风","movespeed":"12","radius12":"80|70|70|70","power":"15","lng":"135.80","movedirection":"北北西","lat":"21.50","radius7":"350|300|320|350"},{"time":"2021-9-28 17:00:00","pressure":"940","radius10":"150|120|120|120","speed":"50","strong":"强台风","movespeed":"13","radius12":"80|70|70|70","power":"15","lng":"135.70","movedirection":"北北西","lat":"21.70","radius7":"350|300|320|350"},{"time":"2021-9-28 20:00:00","pressure":"940","radius10":"150|120|120|120","speed":"50","strong":"强台风","movespeed":"13","radius12":"80|70|70|70","power":"15","lng":"135.40","movedirection":"北北西","lat":"22.00","radius7":"350|300|320|350"},{"time":"2021-9-29 2:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"14","radius12":"80|70|70|70","power":"16","lng":"135.60","movedirection":"北","lat":"22.70","radius7":"350|300|320|350"},{"time":"2021-9-29 5:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"15","radius12":"80|70|70|70","power":"16","lng":"135.50","movedirection":"北","lat":"22.80","radius7":"350|300|320|350"},{"time":"2021-9-29 8:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"15","radius12":"80|70|70|70","power":"16","lng":"135.30","movedirection":"北","lat":"23.40","radius7":"350|300|320|350"},{"time":"2021-9-29 14:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"17","radius12":"80|70|70|70","power":"16","lng":"135.40","movedirection":"北北东","lat":"24.20","radius7":"350|300|320|350"},{"time":"2021-9-29 17:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"20","radius12":"80|70|70|70","power":"16","lng":"135.40","movedirection":"北北东","lat":"24.50","radius7":"350|300|320|350"},{"time":"2021-9-29 20:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"20","radius12":"80|70|70|70","power":"16","lng":"135.50","movedirection":"北北东","lat":"24.80","radius7":"350|300|320|350"},{"time":"2021-9-30 2:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"22","radius12":"80|70|70|70","power":"16","lng":"135.80","movedirection":"北北东","lat":"25.80","radius7":"350|300|320|350"},{"time":"2021-9-30 5:00:00","pressure":"940","radius10":"150|120|120|120","speed":"50","strong":"强台风","movespeed":"18","radius12":"80|70|70|70","power":"15","lng":"136.10","movedirection":"北北东","lat":"26.20","radius7":"350|300|320|350"},{"pressure":"945","radius10":"150|120|120|120","speed":"48","radius12":"80|70|70|70","lng":"136.40","jl":" \u201c蒲公英\u201d将以每小时23公里左右的速度向北偏东方向移动,强度变化不大。 (下次更新时间为30日14时30分)","radius7":"350|300|320|350","time":"2021-9-30 8:00:00","strong":"强台风","movespeed":"23","power":"15","movedirection":"北北东","ckposition":" 距离日本东京南偏西方向约1060公里","lat":"26.60"}],"enname":"Mindulle"}}
+ */
+
+ private String showapi_res_error;
+ private int showapi_fee_num;
+ private int showapi_res_code;
+ private String showapi_res_id;
+ private ShowapiResBodyBean showapi_res_body;
+
+ public String getShowapi_res_error() {
+ return showapi_res_error;
+ }
+
+ public void setShowapi_res_error(String showapi_res_error) {
+ this.showapi_res_error = showapi_res_error;
+ }
+
+ public int getShowapi_fee_num() {
+ return showapi_fee_num;
+ }
+
+ public void setShowapi_fee_num(int showapi_fee_num) {
+ this.showapi_fee_num = showapi_fee_num;
+ }
+
+ public int getShowapi_res_code() {
+ return showapi_res_code;
+ }
+
+ public void setShowapi_res_code(int showapi_res_code) {
+ this.showapi_res_code = showapi_res_code;
+ }
+
+ public String getShowapi_res_id() {
+ return showapi_res_id;
+ }
+
+ public void setShowapi_res_id(String showapi_res_id) {
+ this.showapi_res_id = showapi_res_id;
+ }
+
+ public ShowapiResBodyBean getShowapi_res_body() {
+ return showapi_res_body;
+ }
+
+ public void setShowapi_res_body(ShowapiResBodyBean showapi_res_body) {
+ this.showapi_res_body = showapi_res_body;
+ }
+
+ public static class ShowapiResBodyBean {
+ /**
+ * ret_code : 0
+ * obj : {"endtime":"2021-9-30 8:00:00","centerlng":"139.300000","starttime":"2021-9-23 20:00:00","tfid":"202116","isactive":"1","centerlat":"25.200000","name":"蒲公英","land":[],"warnlevel":"white","points":[{"time":"2021-9-23 20:00:00","pressure":"998","radius10":"","speed":"18","strong":"热带风暴","movespeed":"20","radius12":"","power":"8","lng":"143.30","movedirection":"西北西","lat":"13.80","radius7":"250|220|200|180"},{"time":"2021-9-24 2:00:00","pressure":"998","radius10":"","speed":"18","strong":"热带风暴","movespeed":"24","radius12":"","power":"8","lng":"142.10","movedirection":"西北西","lat":"14.10","radius7":"250|220|200|180"},{"time":"2021-9-24 5:00:00","pressure":"998","radius10":"","speed":"18","strong":"热带风暴","movespeed":"18","radius12":"","power":"8","lng":"141.50","movedirection":"北西","lat":"14.50","radius7":"250|220|200|180"},{"time":"2021-9-24 8:00:00","pressure":"998","radius10":"","speed":"18","strong":"热带风暴","movespeed":"15","radius12":"","power":"8","lng":"141.10","movedirection":"西北西","lat":"14.60","radius7":"250|220|200|180"},{"time":"2021-9-24 14:00:00","pressure":"990","radius10":"","speed":"23","strong":"热带风暴","movespeed":"20","radius12":"","power":"9","lng":"140.40","movedirection":"北西","lat":"15.10","radius7":"300|250|220|200"},{"time":"2021-9-24 17:00:00","pressure":"990","radius10":"","speed":"23","strong":"热带风暴","movespeed":"15","radius12":"","power":"9","lng":"140.00","movedirection":"北西","lat":"15.40","radius7":"300|250|220|200"},{"time":"2021-9-24 20:00:00","pressure":"982","radius10":"100|100|120|120","speed":"28","strong":"强热带风暴","movespeed":"16","radius12":"","power":"10","lng":"139.60","movedirection":"北西","lat":"15.70","radius7":"320|320|260|260"},{"time":"2021-9-25 2:00:00","pressure":"982","radius10":"100|100|120|120","speed":"28","strong":"强热带风暴","movespeed":"15","radius12":"","power":"10","lng":"138.90","movedirection":"北西","lat":"16.50","radius7":"320|320|260|260"},{"time":"2021-9-25 5:00:00","pressure":"980","radius10":"100|100|120|120","speed":"30","strong":"强热带风暴","movespeed":"12","radius12":"","power":"11","lng":"138.20","movedirection":"北北西","lat":"17.00","radius7":"320|320|260|260"},{"time":"2021-9-25 8:00:00","pressure":"975","radius10":"100|100|120|120","speed":"33","strong":"台风","movespeed":"11","radius12":"","power":"12","lng":"138.10","movedirection":"北北西","lat":"17.10","radius7":"320|320|260|260"},{"time":"2021-9-25 14:00:00","pressure":"955","radius10":"180|160|180|200","speed":"42","strong":"强台风","movespeed":"10","radius12":"100|80|100|120","power":"14","lng":"137.70","movedirection":"北北西","lat":"17.60","radius7":"320|300|320|350"},{"time":"2021-9-25 17:00:00","pressure":"950","radius10":"180|160|180|200","speed":"45","strong":"强台风","movespeed":"10","radius12":"100|80|100|120","power":"14","lng":"137.70","movedirection":"北北西","lat":"17.80","radius7":"320|300|320|350"},{"time":"2021-9-25 20:00:00","pressure":"940","radius10":"180|180|180|200","speed":"50","strong":"强台风","movespeed":"10","radius12":"100|100|100|120","power":"15","lng":"137.60","movedirection":"北北西","lat":"18.10","radius7":"320|300|320|350"},{"time":"2021-9-26 2:00:00","pressure":"940","radius10":"180|180|180|200","speed":"50","strong":"强台风","movespeed":"10","radius12":"100|100|100|120","power":"15","lng":"137.00","movedirection":"北北西","lat":"18.50","radius7":"320|300|320|350"},{"time":"2021-9-26 5:00:00","pressure":"940","radius10":"180|180|180|200","speed":"50","strong":"强台风","movespeed":"10","radius12":"100|100|100|120","power":"15","lng":"137.00","movedirection":"北北西","lat":"18.70","radius7":"320|300|320|350"},{"time":"2021-9-26 8:00:00","pressure":"930","radius10":"180|180|180|200","speed":"55","strong":"超强台风","movespeed":"6","radius12":"100|100|100|120","power":"16","lng":"136.80","movedirection":"北北西","lat":"18.70","radius7":"320|300|320|350"},{"time":"2021-9-26 14:00:00","pressure":"920","radius10":"180|180|180|200","speed":"60","strong":"超强台风","movespeed":"5","radius12":"100|100|100|120","power":"17","lng":"136.70","movedirection":"北","lat":"18.80","radius7":"320|300|320|350"},{"time":"2021-9-26 17:00:00","pressure":"920","radius10":"180|180|180|200","speed":"60","strong":"超强台风","movespeed":"3","radius12":"100|100|100|120","power":"17","lng":"136.70","movedirection":"北北西","lat":"18.90","radius7":"320|300|320|350"},{"time":"2021-9-26 20:00:00","pressure":"920","radius10":"180|180|180|200","speed":"60","strong":"超强台风","movespeed":"4","radius12":"100|100|100|120","power":"17","lng":"136.70","movedirection":"北北西","lat":"19.00","radius7":"320|300|320|350"},{"time":"2021-9-27 2:00:00","pressure":"920","radius10":"180|180|180|200","speed":"60","strong":"超强台风","movespeed":"6","radius12":"100|100|100|120","power":"17","lng":"136.80","movedirection":"北西","lat":"19.30","radius7":"320|300|320|350"},{"time":"2021-9-27 5:00:00","pressure":"930","radius10":"180|180|180|200","speed":"55","strong":"超强台风","movespeed":"6","radius12":"100|100|100|120","power":"16","lng":"136.70","movedirection":"北西","lat":"19.60","radius7":"320|300|320|350"},{"time":"2021-9-27 8:00:00","pressure":"935","radius10":"180|180|180|200","speed":"52","strong":"超强台风","movespeed":"6","radius12":"100|100|100|120","power":"16","lng":"136.70","movedirection":"北北西","lat":"19.60","radius7":"320|300|320|350"},{"time":"2021-9-27 14:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"7","radius12":"80|70|70|70","power":"16","lng":"136.60","movedirection":"北西","lat":"19.90","radius7":"320|300|320|350"},{"time":"2021-9-27 17:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"8","radius12":"80|70|70|70","power":"16","lng":"136.50","movedirection":"北西","lat":"20.00","radius7":"350|300|320|350"},{"time":"2021-9-27 20:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"8","radius12":"80|70|70|70","power":"16","lng":"136.40","movedirection":"北西","lat":"20.20","radius7":"350|300|320|350"},{"time":"2021-9-28 2:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"11","radius12":"80|70|70|70","power":"16","lng":"136.30","movedirection":"北西","lat":"20.40","radius7":"350|300|320|350"},{"time":"2021-9-28 5:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"12","radius12":"80|70|70|70","power":"16","lng":"136.20","movedirection":"北北西","lat":"20.60","radius7":"350|300|320|350"},{"time":"2021-9-28 8:00:00","pressure":"940","radius10":"150|120|120|120","speed":"50","strong":"强台风","movespeed":"12","radius12":"80|70|70|70","power":"15","lng":"136.20","movedirection":"北北西","lat":"20.90","radius7":"350|300|320|350"},{"time":"2021-9-28 14:00:00","pressure":"940","radius10":"150|120|120|120","speed":"50","strong":"强台风","movespeed":"12","radius12":"80|70|70|70","power":"15","lng":"135.80","movedirection":"北北西","lat":"21.50","radius7":"350|300|320|350"},{"time":"2021-9-28 17:00:00","pressure":"940","radius10":"150|120|120|120","speed":"50","strong":"强台风","movespeed":"13","radius12":"80|70|70|70","power":"15","lng":"135.70","movedirection":"北北西","lat":"21.70","radius7":"350|300|320|350"},{"time":"2021-9-28 20:00:00","pressure":"940","radius10":"150|120|120|120","speed":"50","strong":"强台风","movespeed":"13","radius12":"80|70|70|70","power":"15","lng":"135.40","movedirection":"北北西","lat":"22.00","radius7":"350|300|320|350"},{"time":"2021-9-29 2:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"14","radius12":"80|70|70|70","power":"16","lng":"135.60","movedirection":"北","lat":"22.70","radius7":"350|300|320|350"},{"time":"2021-9-29 5:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"15","radius12":"80|70|70|70","power":"16","lng":"135.50","movedirection":"北","lat":"22.80","radius7":"350|300|320|350"},{"time":"2021-9-29 8:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"15","radius12":"80|70|70|70","power":"16","lng":"135.30","movedirection":"北","lat":"23.40","radius7":"350|300|320|350"},{"time":"2021-9-29 14:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"17","radius12":"80|70|70|70","power":"16","lng":"135.40","movedirection":"北北东","lat":"24.20","radius7":"350|300|320|350"},{"time":"2021-9-29 17:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"20","radius12":"80|70|70|70","power":"16","lng":"135.40","movedirection":"北北东","lat":"24.50","radius7":"350|300|320|350"},{"time":"2021-9-29 20:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"20","radius12":"80|70|70|70","power":"16","lng":"135.50","movedirection":"北北东","lat":"24.80","radius7":"350|300|320|350"},{"time":"2021-9-30 2:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"22","radius12":"80|70|70|70","power":"16","lng":"135.80","movedirection":"北北东","lat":"25.80","radius7":"350|300|320|350"},{"time":"2021-9-30 5:00:00","pressure":"940","radius10":"150|120|120|120","speed":"50","strong":"强台风","movespeed":"18","radius12":"80|70|70|70","power":"15","lng":"136.10","movedirection":"北北东","lat":"26.20","radius7":"350|300|320|350"},{"pressure":"945","radius10":"150|120|120|120","speed":"48","radius12":"80|70|70|70","lng":"136.40","jl":" \u201c蒲公英\u201d将以每小时23公里左右的速度向北偏东方向移动,强度变化不大。 (下次更新时间为30日14时30分)","radius7":"350|300|320|350","time":"2021-9-30 8:00:00","strong":"强台风","movespeed":"23","power":"15","movedirection":"北北东","ckposition":" 距离日本东京南偏西方向约1060公里","lat":"26.60"}],"enname":"Mindulle"}
+ */
+
+ private int ret_code;
+ private ObjBean obj;
+
+ public int getRet_code() {
+ return ret_code;
+ }
+
+ public void setRet_code(int ret_code) {
+ this.ret_code = ret_code;
+ }
+
+ public ObjBean getObj() {
+ return obj;
+ }
+
+ public void setObj(ObjBean obj) {
+ this.obj = obj;
+ }
+
+ public static class ObjBean {
+ /**
+ * endtime : 2021-9-30 8:00:00
+ * centerlng : 139.300000
+ * starttime : 2021-9-23 20:00:00
+ * tfid : 202116
+ * isactive : 1
+ * centerlat : 25.200000
+ * name : 蒲公英
+ * land : [{"landaddress":"朱家尖镇","strong":"强台风","lng":"122.39","lat":"29.83","info":"\u201c灿鸿\u201d11日16时40分前后登陆浙江舟山市朱家尖镇","landtime":"2015/7/11 16:40:00"}]
+ * warnlevel : white
+ * points : [{"time":"2021-9-23 20:00:00","pressure":"998","radius10":"","speed":"18","strong":"热带风暴","movespeed":"20","radius12":"","power":"8","lng":"143.30","movedirection":"西北西","lat":"13.80","radius7":"250|220|200|180"},{"time":"2021-9-24 2:00:00","pressure":"998","radius10":"","speed":"18","strong":"热带风暴","movespeed":"24","radius12":"","power":"8","lng":"142.10","movedirection":"西北西","lat":"14.10","radius7":"250|220|200|180"},{"time":"2021-9-24 5:00:00","pressure":"998","radius10":"","speed":"18","strong":"热带风暴","movespeed":"18","radius12":"","power":"8","lng":"141.50","movedirection":"北西","lat":"14.50","radius7":"250|220|200|180"},{"time":"2021-9-24 8:00:00","pressure":"998","radius10":"","speed":"18","strong":"热带风暴","movespeed":"15","radius12":"","power":"8","lng":"141.10","movedirection":"西北西","lat":"14.60","radius7":"250|220|200|180"},{"time":"2021-9-24 14:00:00","pressure":"990","radius10":"","speed":"23","strong":"热带风暴","movespeed":"20","radius12":"","power":"9","lng":"140.40","movedirection":"北西","lat":"15.10","radius7":"300|250|220|200"},{"time":"2021-9-24 17:00:00","pressure":"990","radius10":"","speed":"23","strong":"热带风暴","movespeed":"15","radius12":"","power":"9","lng":"140.00","movedirection":"北西","lat":"15.40","radius7":"300|250|220|200"},{"time":"2021-9-24 20:00:00","pressure":"982","radius10":"100|100|120|120","speed":"28","strong":"强热带风暴","movespeed":"16","radius12":"","power":"10","lng":"139.60","movedirection":"北西","lat":"15.70","radius7":"320|320|260|260"},{"time":"2021-9-25 2:00:00","pressure":"982","radius10":"100|100|120|120","speed":"28","strong":"强热带风暴","movespeed":"15","radius12":"","power":"10","lng":"138.90","movedirection":"北西","lat":"16.50","radius7":"320|320|260|260"},{"time":"2021-9-25 5:00:00","pressure":"980","radius10":"100|100|120|120","speed":"30","strong":"强热带风暴","movespeed":"12","radius12":"","power":"11","lng":"138.20","movedirection":"北北西","lat":"17.00","radius7":"320|320|260|260"},{"time":"2021-9-25 8:00:00","pressure":"975","radius10":"100|100|120|120","speed":"33","strong":"台风","movespeed":"11","radius12":"","power":"12","lng":"138.10","movedirection":"北北西","lat":"17.10","radius7":"320|320|260|260"},{"time":"2021-9-25 14:00:00","pressure":"955","radius10":"180|160|180|200","speed":"42","strong":"强台风","movespeed":"10","radius12":"100|80|100|120","power":"14","lng":"137.70","movedirection":"北北西","lat":"17.60","radius7":"320|300|320|350"},{"time":"2021-9-25 17:00:00","pressure":"950","radius10":"180|160|180|200","speed":"45","strong":"强台风","movespeed":"10","radius12":"100|80|100|120","power":"14","lng":"137.70","movedirection":"北北西","lat":"17.80","radius7":"320|300|320|350"},{"time":"2021-9-25 20:00:00","pressure":"940","radius10":"180|180|180|200","speed":"50","strong":"强台风","movespeed":"10","radius12":"100|100|100|120","power":"15","lng":"137.60","movedirection":"北北西","lat":"18.10","radius7":"320|300|320|350"},{"time":"2021-9-26 2:00:00","pressure":"940","radius10":"180|180|180|200","speed":"50","strong":"强台风","movespeed":"10","radius12":"100|100|100|120","power":"15","lng":"137.00","movedirection":"北北西","lat":"18.50","radius7":"320|300|320|350"},{"time":"2021-9-26 5:00:00","pressure":"940","radius10":"180|180|180|200","speed":"50","strong":"强台风","movespeed":"10","radius12":"100|100|100|120","power":"15","lng":"137.00","movedirection":"北北西","lat":"18.70","radius7":"320|300|320|350"},{"time":"2021-9-26 8:00:00","pressure":"930","radius10":"180|180|180|200","speed":"55","strong":"超强台风","movespeed":"6","radius12":"100|100|100|120","power":"16","lng":"136.80","movedirection":"北北西","lat":"18.70","radius7":"320|300|320|350"},{"time":"2021-9-26 14:00:00","pressure":"920","radius10":"180|180|180|200","speed":"60","strong":"超强台风","movespeed":"5","radius12":"100|100|100|120","power":"17","lng":"136.70","movedirection":"北","lat":"18.80","radius7":"320|300|320|350"},{"time":"2021-9-26 17:00:00","pressure":"920","radius10":"180|180|180|200","speed":"60","strong":"超强台风","movespeed":"3","radius12":"100|100|100|120","power":"17","lng":"136.70","movedirection":"北北西","lat":"18.90","radius7":"320|300|320|350"},{"time":"2021-9-26 20:00:00","pressure":"920","radius10":"180|180|180|200","speed":"60","strong":"超强台风","movespeed":"4","radius12":"100|100|100|120","power":"17","lng":"136.70","movedirection":"北北西","lat":"19.00","radius7":"320|300|320|350"},{"time":"2021-9-27 2:00:00","pressure":"920","radius10":"180|180|180|200","speed":"60","strong":"超强台风","movespeed":"6","radius12":"100|100|100|120","power":"17","lng":"136.80","movedirection":"北西","lat":"19.30","radius7":"320|300|320|350"},{"time":"2021-9-27 5:00:00","pressure":"930","radius10":"180|180|180|200","speed":"55","strong":"超强台风","movespeed":"6","radius12":"100|100|100|120","power":"16","lng":"136.70","movedirection":"北西","lat":"19.60","radius7":"320|300|320|350"},{"time":"2021-9-27 8:00:00","pressure":"935","radius10":"180|180|180|200","speed":"52","strong":"超强台风","movespeed":"6","radius12":"100|100|100|120","power":"16","lng":"136.70","movedirection":"北北西","lat":"19.60","radius7":"320|300|320|350"},{"time":"2021-9-27 14:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"7","radius12":"80|70|70|70","power":"16","lng":"136.60","movedirection":"北西","lat":"19.90","radius7":"320|300|320|350"},{"time":"2021-9-27 17:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"8","radius12":"80|70|70|70","power":"16","lng":"136.50","movedirection":"北西","lat":"20.00","radius7":"350|300|320|350"},{"time":"2021-9-27 20:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"8","radius12":"80|70|70|70","power":"16","lng":"136.40","movedirection":"北西","lat":"20.20","radius7":"350|300|320|350"},{"time":"2021-9-28 2:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"11","radius12":"80|70|70|70","power":"16","lng":"136.30","movedirection":"北西","lat":"20.40","radius7":"350|300|320|350"},{"time":"2021-9-28 5:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"12","radius12":"80|70|70|70","power":"16","lng":"136.20","movedirection":"北北西","lat":"20.60","radius7":"350|300|320|350"},{"time":"2021-9-28 8:00:00","pressure":"940","radius10":"150|120|120|120","speed":"50","strong":"强台风","movespeed":"12","radius12":"80|70|70|70","power":"15","lng":"136.20","movedirection":"北北西","lat":"20.90","radius7":"350|300|320|350"},{"time":"2021-9-28 14:00:00","pressure":"940","radius10":"150|120|120|120","speed":"50","strong":"强台风","movespeed":"12","radius12":"80|70|70|70","power":"15","lng":"135.80","movedirection":"北北西","lat":"21.50","radius7":"350|300|320|350"},{"time":"2021-9-28 17:00:00","pressure":"940","radius10":"150|120|120|120","speed":"50","strong":"强台风","movespeed":"13","radius12":"80|70|70|70","power":"15","lng":"135.70","movedirection":"北北西","lat":"21.70","radius7":"350|300|320|350"},{"time":"2021-9-28 20:00:00","pressure":"940","radius10":"150|120|120|120","speed":"50","strong":"强台风","movespeed":"13","radius12":"80|70|70|70","power":"15","lng":"135.40","movedirection":"北北西","lat":"22.00","radius7":"350|300|320|350"},{"time":"2021-9-29 2:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"14","radius12":"80|70|70|70","power":"16","lng":"135.60","movedirection":"北","lat":"22.70","radius7":"350|300|320|350"},{"time":"2021-9-29 5:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"15","radius12":"80|70|70|70","power":"16","lng":"135.50","movedirection":"北","lat":"22.80","radius7":"350|300|320|350"},{"time":"2021-9-29 8:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"15","radius12":"80|70|70|70","power":"16","lng":"135.30","movedirection":"北","lat":"23.40","radius7":"350|300|320|350"},{"time":"2021-9-29 14:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"17","radius12":"80|70|70|70","power":"16","lng":"135.40","movedirection":"北北东","lat":"24.20","radius7":"350|300|320|350"},{"time":"2021-9-29 17:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"20","radius12":"80|70|70|70","power":"16","lng":"135.40","movedirection":"北北东","lat":"24.50","radius7":"350|300|320|350"},{"time":"2021-9-29 20:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"20","radius12":"80|70|70|70","power":"16","lng":"135.50","movedirection":"北北东","lat":"24.80","radius7":"350|300|320|350"},{"time":"2021-9-30 2:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"22","radius12":"80|70|70|70","power":"16","lng":"135.80","movedirection":"北北东","lat":"25.80","radius7":"350|300|320|350"},{"time":"2021-9-30 5:00:00","pressure":"940","radius10":"150|120|120|120","speed":"50","strong":"强台风","movespeed":"18","radius12":"80|70|70|70","power":"15","lng":"136.10","movedirection":"北北东","lat":"26.20","radius7":"350|300|320|350"},{"pressure":"945","radius10":"150|120|120|120","speed":"48","radius12":"80|70|70|70","lng":"136.40","jl":" \u201c蒲公英\u201d将以每小时23公里左右的速度向北偏东方向移动,强度变化不大。 (下次更新时间为30日14时30分)","radius7":"350|300|320|350","time":"2021-9-30 8:00:00","strong":"强台风","movespeed":"23","power":"15","movedirection":"北北东","ckposition":" 距离日本东京南偏西方向约1060公里","lat":"26.60"}]
+ * enname : Mindulle
+ */
+
+ private String endtime;
+ private String centerlng;
+ private String starttime;
+ private String tfid;
+ private String isactive;
+ private String centerlat;
+ private String name;
+ private String warnlevel;
+ private String enname;
+ private List land;
+ private List points;
+
+ public String getEndtime() {
+ return endtime;
+ }
+
+ public void setEndtime(String endtime) {
+ this.endtime = endtime;
+ }
+
+ public String getCenterlng() {
+ return centerlng;
+ }
+
+ public void setCenterlng(String centerlng) {
+ this.centerlng = centerlng;
+ }
+
+ public String getStarttime() {
+ return starttime;
+ }
+
+ public void setStarttime(String starttime) {
+ this.starttime = starttime;
+ }
+
+ public String getTfid() {
+ return tfid;
+ }
+
+ public void setTfid(String tfid) {
+ this.tfid = tfid;
+ }
+
+ public String getIsactive() {
+ return isactive;
+ }
+
+ public void setIsactive(String isactive) {
+ this.isactive = isactive;
+ }
+
+ public String getCenterlat() {
+ return centerlat;
+ }
+
+ public void setCenterlat(String centerlat) {
+ this.centerlat = centerlat;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getWarnlevel() {
+ return warnlevel;
+ }
+
+ public void setWarnlevel(String warnlevel) {
+ this.warnlevel = warnlevel;
+ }
+
+ public String getEnname() {
+ return enname;
+ }
+
+ public void setEnname(String enname) {
+ this.enname = enname;
+ }
+
+ public List getLand() {
+ return land;
+ }
+
+ public void setLand(List land) {
+ this.land = land;
+ }
+
+ public static class LandBan {
+ /**
+ * landaddress : 朱家尖镇
+ * strong : 强台风
+ * lng : 122.39
+ * lat : 29.83
+ * info : “灿鸿”11日16时40分前后登陆浙江舟山市朱家尖镇
+ * landtime : 2015/7/11 16:40:00
+ */
+
+ private String landaddress;
+ private String strong;
+ private Double lng;
+ private Double lat;
+ private String info;
+ private String landtime;
+
+ public String getLandaddress() {
+ return landaddress;
+ }
+
+ public void setLandaddress(String landaddress) {
+ this.landaddress = landaddress;
+ }
+
+ public String getStrong() {
+ return strong;
+ }
+
+ public void setStrong(String strong) {
+ this.strong = strong;
+ }
+
+ public Double getLng() {
+ return lng;
+ }
+
+ public void setLng(Double lng) {
+ this.lng = lng;
+ }
+
+ public Double getLat() {
+ return lat;
+ }
+
+ public void setLat(Double lat) {
+ this.lat = lat;
+ }
+
+ public String getInfo() {
+ return info;
+ }
+
+ public void setInfo(String info) {
+ this.info = info;
+ }
+
+ public String getLandtime() {
+ return landtime;
+ }
+
+ public void setLandtime(String landtime) {
+ this.landtime = landtime;
+ }
+ }
+
+ public List getPoints() {
+ return points;
+ }
+
+ public void setPoints(List points) {
+ this.points = points;
+ }
+
+ public static class PointsBean {
+ /**
+ * time : 2021-9-23 20:00:00
+ * pressure : 998
+ * radius10 :
+ * speed : 18
+ * strong : 热带风暴
+ * movespeed : 20
+ * radius12 :
+ * power : 8
+ * lng : 143.30
+ * movedirection : 西北西
+ * lat : 13.80
+ * radius7 : 250|220|200|180
+ * jl : “蒲公英”将以每小时23公里左右的速度向北偏东方向移动,强度变化不大。 (下次更新时间为30日14时30分)
+ * ckposition : 距离日本东京南偏西方向约1060公里
+ */
+
+ private String time;
+ private String pressure;
+ private String radius10;
+ private String speed;
+ private String strong;
+ private String movespeed;
+ private String radius12;
+ private String power;
+ private Double lng;
+ private String movedirection;
+ private Double lat;
+ private String radius7;
+ private String jl;
+ private String ckposition;
+
+ public String getTime() {
+ return time;
+ }
+
+ public void setTime(String time) {
+ this.time = time;
+ }
+
+ public String getPressure() {
+ return pressure;
+ }
+
+ public void setPressure(String pressure) {
+ this.pressure = pressure;
+ }
+
+ public String getRadius10() {
+ return radius10;
+ }
+
+ public void setRadius10(String radius10) {
+ this.radius10 = radius10;
+ }
+
+ public String getSpeed() {
+ return speed;
+ }
+
+ public void setSpeed(String speed) {
+ this.speed = speed;
+ }
+
+ public String getStrong() {
+ return strong;
+ }
+
+ public void setStrong(String strong) {
+ this.strong = strong;
+ }
+
+ public String getMovespeed() {
+ return movespeed;
+ }
+
+ public void setMovespeed(String movespeed) {
+ this.movespeed = movespeed;
+ }
+
+ public String getRadius12() {
+ return radius12;
+ }
+
+ public void setRadius12(String radius12) {
+ this.radius12 = radius12;
+ }
+
+ public String getPower() {
+ return power;
+ }
+
+ public void setPower(String power) {
+ this.power = power;
+ }
+
+ public Double getLng() {
+ return lng;
+ }
+
+ public void setLng(Double lng) {
+ this.lng = lng;
+ }
+
+ public String getMovedirection() {
+ return movedirection;
+ }
+
+ public void setMovedirection(String movedirection) {
+ this.movedirection = movedirection;
+ }
+
+ public Double getLat() {
+ return lat;
+ }
+
+ public void setLat(Double lat) {
+ this.lat = lat;
+ }
+
+ public String getRadius7() {
+ return radius7;
+ }
+
+ public void setRadius7(String radius7) {
+ this.radius7 = radius7;
+ }
+
+ public String getJl() {
+ return jl;
+ }
+
+ public void setJl(String jl) {
+ this.jl = jl;
+ }
+
+ public String getCkposition() {
+ return ckposition;
+ }
+
+ public void setCkposition(String ckposition) {
+ this.ckposition = ckposition;
+ }
+ }
+ }
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/remote/TyphoonModel.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/remote/TyphoonModel.java
new file mode 100644
index 0000000..e293e8d
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/remote/TyphoonModel.java
@@ -0,0 +1,237 @@
+package com.casic.missiles.modular.system.model.remote;
+
+import java.util.List;
+
+/**
+ * 第三方台风数据模型
+ *
+ * @author a203
+ */
+public class TyphoonModel {
+
+ /**
+ * showapi_res_error :
+ * showapi_fee_num : 1
+ * showapi_res_code : 0
+ * showapi_res_id : 61554fbe0de376d03494057c
+ * showapi_res_body : {"ret_code":0,"list":[{"pressure":"945","tfid":"202116","radius10":"150","speed":"48","lng":"136.40","radius7":"350","time":"2021-09-30 08:00:00","movespeed":"23","strong":"强台风","name":"蒲公英","power":"15","movedirection":"北北东","lat":"26.60","enname":"Mindulle"}]}
+ */
+
+ private String showapi_res_error;
+ private int showapi_fee_num;
+ private int showapi_res_code;
+ private String showapi_res_id;
+ private ShowapiResBodyBean showapi_res_body;
+
+ public String getShowapi_res_error() {
+ return showapi_res_error;
+ }
+
+ public void setShowapi_res_error(String showapi_res_error) {
+ this.showapi_res_error = showapi_res_error;
+ }
+
+ public int getShowapi_fee_num() {
+ return showapi_fee_num;
+ }
+
+ public void setShowapi_fee_num(int showapi_fee_num) {
+ this.showapi_fee_num = showapi_fee_num;
+ }
+
+ public int getShowapi_res_code() {
+ return showapi_res_code;
+ }
+
+ public void setShowapi_res_code(int showapi_res_code) {
+ this.showapi_res_code = showapi_res_code;
+ }
+
+ public String getShowapi_res_id() {
+ return showapi_res_id;
+ }
+
+ public void setShowapi_res_id(String showapi_res_id) {
+ this.showapi_res_id = showapi_res_id;
+ }
+
+ public ShowapiResBodyBean getShowapi_res_body() {
+ return showapi_res_body;
+ }
+
+ public void setShowapi_res_body(ShowapiResBodyBean showapi_res_body) {
+ this.showapi_res_body = showapi_res_body;
+ }
+
+ public static class ShowapiResBodyBean {
+ /**
+ * ret_code : 0
+ * list : [{"pressure":"945","tfid":"202116","radius10":"150","speed":"48","lng":"136.40","radius7":"350","time":"2021-09-30 08:00:00","movespeed":"23","strong":"强台风","name":"蒲公英","power":"15","movedirection":"北北东","lat":"26.60","enname":"Mindulle"}]
+ */
+
+ private int ret_code;
+ private List list;
+
+ public int getRet_code() {
+ return ret_code;
+ }
+
+ public void setRet_code(int ret_code) {
+ this.ret_code = ret_code;
+ }
+
+ public List getList() {
+ return list;
+ }
+
+ public void setList(List list) {
+ this.list = list;
+ }
+
+ public static class ListBean {
+ /**
+ * pressure : 945
+ * tfid : 202116
+ * radius10 : 150
+ * speed : 48
+ * lng : 136.40
+ * radius7 : 350
+ * time : 2021-09-30 08:00:00
+ * movespeed : 23
+ * strong : 强台风
+ * name : 蒲公英
+ * power : 15
+ * movedirection : 北北东
+ * lat : 26.60
+ * enname : Mindulle
+ */
+
+ private String pressure;
+ private String tfid;
+ private String radius10;
+ private String speed;
+ private String lng;
+ private String radius7;
+ private String time;
+ private String movespeed;
+ private String strong;
+ private String name;
+ private String power;
+ private String movedirection;
+ private String lat;
+ private String enname;
+
+ public String getPressure() {
+ return pressure;
+ }
+
+ public void setPressure(String pressure) {
+ this.pressure = pressure;
+ }
+
+ public String getTfid() {
+ return tfid;
+ }
+
+ public void setTfid(String tfid) {
+ this.tfid = tfid;
+ }
+
+ public String getRadius10() {
+ return radius10;
+ }
+
+ public void setRadius10(String radius10) {
+ this.radius10 = radius10;
+ }
+
+ public String getSpeed() {
+ return speed;
+ }
+
+ public void setSpeed(String speed) {
+ this.speed = speed;
+ }
+
+ public String getLng() {
+ return lng;
+ }
+
+ public void setLng(String lng) {
+ this.lng = lng;
+ }
+
+ public String getRadius7() {
+ return radius7;
+ }
+
+ public void setRadius7(String radius7) {
+ this.radius7 = radius7;
+ }
+
+ public String getTime() {
+ return time;
+ }
+
+ public void setTime(String time) {
+ this.time = time;
+ }
+
+ public String getMovespeed() {
+ return movespeed;
+ }
+
+ public void setMovespeed(String movespeed) {
+ this.movespeed = movespeed;
+ }
+
+ public String getStrong() {
+ return strong;
+ }
+
+ public void setStrong(String strong) {
+ this.strong = strong;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getPower() {
+ return power;
+ }
+
+ public void setPower(String power) {
+ this.power = power;
+ }
+
+ public String getMovedirection() {
+ return movedirection;
+ }
+
+ public void setMovedirection(String movedirection) {
+ this.movedirection = movedirection;
+ }
+
+ public String getLat() {
+ return lat;
+ }
+
+ public void setLat(String lat) {
+ this.lat = lat;
+ }
+
+ public String getEnname() {
+ return enname;
+ }
+
+ public void setEnname(String enname) {
+ this.enname = enname;
+ }
+ }
+ }
+}
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index 913a287..71c67c0 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -36,6 +36,16 @@
provided
+
+ com.alibaba
+ fastjson
+ ${fastjson.version}
+
+
+ com.squareup.okhttp3
+ okhttp
+ 4.9.1
+
diff --git a/casic-server/src/main/java/com/casic/missiles/job/TyphoonQuartzJob.java b/casic-server/src/main/java/com/casic/missiles/job/TyphoonQuartzJob.java
new file mode 100644
index 0000000..87b8c72
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/job/TyphoonQuartzJob.java
@@ -0,0 +1,27 @@
+package com.casic.missiles.job;
+
+import com.casic.missiles.modular.system.service.ITyphoonService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+/**
+ * 台风数据定时任务,每小时执行一次
+ *
+ * @author a203
+ * @Description 依赖casic-job-quartz,并在CasicApplication上增加注解 @EnableScheduling
+ */
+@Slf4j
+@Component
+public class TyphoonQuartzJob {
+ private final ITyphoonService typhoonService;
+
+ public TyphoonQuartzJob(ITyphoonService typhoonService) {
+ this.typhoonService = typhoonService;
+ }
+
+ @Scheduled(cron = "0 0 */1 * * ?")
+ public void execute() {
+ typhoonService.saveTyphoon();
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DemoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DemoController.java
deleted file mode 100644
index 87b6fec..0000000
--- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DemoController.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.casic.missiles.modular.system.controller;
-
-
-import com.casic.missiles.model.application.event.core.EventPublisher;
-import com.casic.missiles.model.application.event.enums.ModelEventTypeEnum;
-import com.casic.missiles.model.response.ResponseData;
-import com.casic.missiles.modular.system.event.UserEvent;
-import com.casic.missiles.modular.system.model.User;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.ResponseBody;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * @ClassName DemoController
- * @Description TODO
- * @Author lenovo
- * @Date 2020/6/13 15:38
- * @Version 1.0
- */
-@RestController
-@RequestMapping("/demo")
-public class DemoController {
- @Autowired
- private EventPublisher publisher;
-
- /**
- * 获取mockToken
- */
- @PostMapping("/list")
- @ResponseBody
- public Object list() {
- User user = new User();
- user.setAccount("张三");
- publisher.publishEvent(new UserEvent(ModelEventTypeEnum.ADD, user));
- return ResponseData.success();
- }
-
-
-}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/EnvironmentController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/EnvironmentController.java
new file mode 100644
index 0000000..44a55d6
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/EnvironmentController.java
@@ -0,0 +1,62 @@
+package com.casic.missiles.modular.system.controller;
+
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.OceanDetailDTO;
+import com.casic.missiles.modular.system.dto.TyphoonDTO;
+import com.casic.missiles.modular.system.dto.TyphoonDetailDTO;
+import com.casic.missiles.modular.system.service.IOceanService;
+import com.casic.missiles.modular.system.service.ITyphoonService;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.List;
+
+/**
+ * 环境控制器
+ *
+ * @author a203
+ */
+@Controller
+@RequestMapping("/environment")
+public class EnvironmentController {
+ private final ITyphoonService typhoonService;
+ private final IOceanService oceanService;
+
+ public EnvironmentController(ITyphoonService typhoonService, IOceanService oceanService) {
+ this.typhoonService = typhoonService;
+ this.oceanService = oceanService;
+ }
+
+ /**
+ * 台风列表
+ */
+ @GetMapping(value = "/typhoonList")
+ @ResponseBody
+ public Object list() {
+ List typhoonList = typhoonService.currentTyphoonList();
+ return ResponseData.success(typhoonList);
+ }
+
+ /**
+ * 台风详情
+ */
+ @GetMapping(value = "/typhoonDetail/{typhoonId}")
+ @ResponseBody
+ public Object detail(@PathVariable("typhoonId") String typhoonId) {
+ TyphoonDetailDTO detailDTO = typhoonService.typhoonDetail(typhoonId);
+ return ResponseData.success(detailDTO);
+ }
+
+ /**
+ * 洋流详情
+ */
+ @GetMapping(value = "/ocean")
+ @ResponseBody
+ public Object oceanDetail(double lng, double lat, String date, String days, String hour) {
+ OceanDetailDTO detailDTO = oceanService.oceanDetail(lng, lat, date, days, hour);
+ return ResponseData.success(detailDTO);
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/LandPointMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/LandPointMapper.java
new file mode 100644
index 0000000..1f4757d
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/LandPointMapper.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.modular.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.modular.system.model.sql.LandPoint;
+
+/**
+ * 台风登陆数据信息 Mapper 接口
+ *
+ * @author a203
+ */
+public interface LandPointMapper extends BaseMapper {
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RoutePointMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RoutePointMapper.java
new file mode 100644
index 0000000..f31f6d0
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RoutePointMapper.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.modular.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.modular.system.model.sql.RoutePoint;
+
+/**
+ * 台风移动点数据信息 Mapper 接口
+ *
+ * @author a203
+ */
+public interface RoutePointMapper extends BaseMapper {
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonDetailMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonDetailMapper.java
new file mode 100644
index 0000000..bce7a6b
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonDetailMapper.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.modular.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.modular.system.model.sql.TyphoonDetail;
+
+/**
+ * 台风数据信息 Mapper 接口
+ *
+ * @author a203
+ */
+public interface TyphoonDetailMapper extends BaseMapper {
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonMapper.java
new file mode 100644
index 0000000..40fcb32
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonMapper.java
@@ -0,0 +1,21 @@
+package com.casic.missiles.modular.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.modular.system.model.sql.Typhoon;
+
+import java.util.List;
+
+/**
+ * 台风数据信息 Mapper 接口
+ *
+ * @author a203
+ */
+public interface TyphoonMapper extends BaseMapper {
+
+ /**
+ * 查询当前未消散的台风
+ *
+ * @return {@link List}
+ */
+ List selectCurrentTyphoon();
+}
\ No newline at end of file
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/TyphoonMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/TyphoonMapper.xml
new file mode 100644
index 0000000..73498fb
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/TyphoonMapper.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java
new file mode 100644
index 0000000..2debc96
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java
@@ -0,0 +1,152 @@
+package com.casic.missiles.modular.system.dto;
+
+import com.casic.missiles.modular.system.model.remote.OceanDetailModel;
+import lombok.Data;
+
+import java.text.DecimalFormat;
+
+/**
+ * @author a203
+ */
+@Data
+public class OceanDetailDTO {
+
+ /**
+ * 海温, 单位: ℃(摄氏度)
+ */
+ private Double temperature;
+
+ /**
+ * 海拔, 单位: m(米)
+ */
+ private Double altitude;
+
+ /**
+ * 气压, 单位: hPa
+ */
+ private Double pressure;
+
+ /**
+ * 涌浪高度, 单位: m(米)
+ */
+ private Double swellHeight;
+
+ /**
+ * 涌浪方向, 单位: 度[0,360]
+ */
+ private Double swellDir;
+
+ /**
+ * 涌浪周期, 单位: s(秒)
+ */
+ private Double swellPrd;
+
+ /**
+ * 风浪高度, 单位: m(米)
+ */
+ private Double waveHeight;
+
+ /**
+ * 风浪方向, 单位: 度[0,360]
+ */
+ private Double waveDir;
+
+ /**
+ * 风浪周期, 单位: s(秒)
+ */
+ private Double wavePrd;
+
+ /**
+ * 海流速度, 单位: m/s
+ */
+ private Double speed;
+
+ /**
+ * 海流方向, 单位: 度[0,360]
+ */
+ private Double oceanDir;
+
+ /**
+ * 风速,单位: m/s
+ */
+ private Double windSpeed;
+
+ /**
+ * 风向,单位: 度[0,360]
+ */
+ private Double windDir;
+
+ /**
+ * 海浪预测
+ */
+ private PreviewBean forecast;
+
+ @Data
+ public static class PreviewBean {
+ /**
+ * 涌浪高度, 单位: m(米)
+ */
+ private Double swellHeight;
+
+ /**
+ * 涌浪方向, 单位: 度[0,360]
+ */
+ private Double swellDir;
+
+ /**
+ * 涌浪周期, 单位: s(秒)
+ */
+ private Double swellPrd;
+
+ /**
+ * 风浪高度, 单位: m(米)
+ */
+ private Double waveHeight;
+
+ /**
+ * 风浪方向, 单位: 度[0,360]
+ */
+ private Double waveDir;
+
+ /**
+ * 风浪周期, 单位: s(秒)
+ */
+ private Double wavePrd;
+ }
+
+ public OceanDetailDTO(OceanDetailModel remoteData) {
+ OceanDetailModel.DataBean.ListBean listBean = remoteData.getData().getList().get(0);
+ OceanDetailModel.DataBean.ListBean.YtxBean ytxBean = listBean.getYtx();
+ OceanDetailModel.DataBean.ListBean.MeteoBean meteoBean = listBean.getMeteo();
+ if (ytxBean != null) {
+ this.temperature = formatData(ytxBean.getSurfaceTem());
+ this.altitude = formatData(0.00);
+ this.pressure = formatData(ytxBean.getSurfPres());
+ this.swellHeight = formatData(ytxBean.getSwellHgt());
+ this.swellDir = formatData(ytxBean.getSwellDir());
+ this.swellPrd = formatData(ytxBean.getSwellPrd());
+ this.waveHeight = formatData(ytxBean.getWaveHgt());
+ this.waveDir = formatData(ytxBean.getWaveDir());
+ this.wavePrd = formatData(ytxBean.getWavePrd());
+ this.speed = formatData(ytxBean.getWindMag());
+ this.oceanDir = formatData(ytxBean.getCurrentDir());
+ this.windSpeed = formatData(ytxBean.getWindMag());
+ this.windDir = formatData(ytxBean.getWindDir());
+ }
+ PreviewBean bean = new PreviewBean();
+ if (meteoBean != null) {
+ bean.swellHeight = formatData(meteoBean.getSwellHgt());
+ bean.swellDir = formatData(meteoBean.getSwellDir());
+ bean.swellPrd = formatData(meteoBean.getSwellPrd());
+ bean.waveHeight = formatData(meteoBean.getWaveHgt());
+ bean.waveDir = formatData(meteoBean.getWaveDir());
+ bean.wavePrd = formatData(meteoBean.getWavePrd());
+ }
+ this.forecast = bean;
+ }
+
+ private Double formatData(Double data) {
+ DecimalFormat df = new DecimalFormat("#.00");
+ return Double.parseDouble(df.format(data));
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TyphoonDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TyphoonDTO.java
new file mode 100644
index 0000000..e3b3bb3
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TyphoonDTO.java
@@ -0,0 +1,84 @@
+package com.casic.missiles.modular.system.dto;
+
+import com.casic.missiles.modular.system.model.sql.Typhoon;
+import lombok.Data;
+
+/**
+ * @author a203
+ */
+@Data
+public class TyphoonDTO {
+ /**
+ * 台风ID
+ */
+ private String typhoonId;
+ /**
+ * 台风中文代号
+ */
+ private String name;
+ /**
+ * 台风英文代号
+ */
+ private String engName;
+ /**
+ * 经度
+ */
+ private Double lng;
+ /**
+ * 纬度
+ */
+ private Double lat;
+ /**
+ * 台风风力等级描述
+ */
+ private String typhoonType;
+ /**
+ * 台风中心气压,单位【百帕】
+ */
+ private String centerPressure;
+ /**
+ * 风速,单位【米/每秒】
+ */
+ private String speed;
+ /**
+ * 风力,单位【级】
+ */
+ private Integer power;
+ /**
+ * 台风整体移动速度,单位【公里/小时】
+ */
+ private String moveSpeed;
+ /**
+ * 台风未来移动方向
+ */
+ private String moveDirection;
+ /**
+ * 10级风力影响半径
+ */
+ private String radius10;
+ /**
+ * 7级风力影响半径
+ */
+ private String radius7;
+ /**
+ * 数据更新时间
+ */
+ private String time;
+
+ public TyphoonDTO(Typhoon data) {
+ this.typhoonId = data.getTyphoonId();
+ this.name = data.getName();
+ this.engName = data.getEngName();
+ this.lng = data.getLng();
+ this.lat = data.getLat();
+ this.typhoonType = data.getTyphoonType();
+ this.centerPressure = data.getCenterPressure();
+ this.speed = data.getSpeed();
+ this.power = data.getPower();
+ this.moveSpeed = data.getMoveSpeed();
+ this.moveDirection = data.getMoveDirection();
+ this.radius10 = data.getRadius10();
+ this.radius7 = data.getRadius7();
+ this.time = data.getTime();
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TyphoonDetailDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TyphoonDetailDTO.java
new file mode 100644
index 0000000..295c57f
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TyphoonDetailDTO.java
@@ -0,0 +1,190 @@
+package com.casic.missiles.modular.system.dto;
+
+import com.casic.missiles.modular.system.model.sql.LandPoint;
+import com.casic.missiles.modular.system.model.sql.RoutePoint;
+import com.casic.missiles.modular.system.model.sql.TyphoonDetail;
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 台风详情
+ *
+ * @author a203
+ */
+@Data
+public class TyphoonDetailDTO {
+ /**
+ * 台风ID
+ */
+ private String typhoonId;
+ /**
+ * 台风中文代号
+ */
+ private String name;
+ /**
+ * 台风英文代号
+ */
+ private String engName;
+ /**
+ * 台风告警级别
+ */
+ private String warnLevel;
+ /**
+ * 台风中心经度
+ */
+ private Double centerLng;
+ /**
+ * 台风中心纬度
+ */
+ private Double centerLat;
+ /**
+ * 台风开始时间
+ */
+ private String startTime;
+ /**
+ * 台风结束时间
+ */
+ private String endTime;
+ /**
+ * 台风状态
+ */
+ private String isActive;
+ /**
+ * 台风登陆点
+ */
+ private List land;
+ /**
+ * 台风路径
+ */
+ private List points;
+
+ @Data
+ public static class LandBan {
+ /**
+ * 台风登陆点
+ */
+ private String landAddress;
+ /**
+ * 台风类型-热带风暴/强台风...
+ */
+ private String type;
+ private Double lng;
+ private Double lat;
+ /**
+ * 台风登陆细节
+ */
+ private String info;
+ /**
+ * 台风登陆时间
+ */
+ private String landTime;
+ }
+
+ @Data
+ public static class PointBean {
+ /**
+ * 数据更新时间
+ */
+ private String time;
+ /**
+ * 台风中心气压,单位【百帕】
+ */
+ private String centerPressure;
+ /**
+ * 风速,单位【米/每秒】
+ */
+ private String speed;
+ /**
+ * 台风风力等级描述
+ */
+ private String typhoonType;
+ /**
+ * 台风整体移动速度,单位【公里/小时】
+ */
+ private String moveSpeed;
+ /**
+ * 风力,单位【级】
+ */
+ private Integer power;
+ /**
+ * 台风未来移动方向
+ */
+ private String moveDirection;
+ /**
+ * 经度
+ */
+ private Double lng;
+ /**
+ * 纬度
+ */
+ private Double lat;
+ /**
+ * 12级风力影响半径
+ */
+ private String radius12;
+ /**
+ * 10级风力影响半径
+ */
+ private String radius10;
+ /**
+ * 7级风力影响半径
+ */
+ private String radius7;
+ /**
+ * 台风路线预测
+ */
+ private String routePrediction;
+ /**
+ * 中心位置
+ */
+ private String centerPosition;
+ }
+
+ public TyphoonDetailDTO(TyphoonDetail detail, List landBeans, List routeBeans) {
+ this.typhoonId = detail.getTyphoonId();
+ this.name = detail.getName();
+ this.engName = detail.getEngName();
+ this.warnLevel = detail.getWarnLevel();
+ this.centerLng = detail.getCenterLng();
+ this.centerLat = detail.getCenterLat();
+ this.startTime = detail.getStartTime();
+ this.endTime = detail.getEndTime();
+ this.isActive = detail.getIsActive();
+
+ List lands = new ArrayList<>();
+ for (LandPoint landBean : landBeans) {
+ LandBan bean = new LandBan();
+ bean.landAddress = landBean.getLandAddress();
+ bean.landTime = landBean.getLandTime();
+ bean.type = landBean.getType();
+ bean.lng = landBean.getLng();
+ bean.lat = landBean.getLat();
+ bean.info = landBean.getInfo();
+ lands.add(bean);
+ }
+ this.land = lands;
+
+ List points = new ArrayList<>();
+ for (RoutePoint point : routeBeans) {
+ PointBean pointBean = new PointBean();
+ pointBean.time = point.getTime();
+ pointBean.centerPressure = point.getCenterPressure();
+ pointBean.speed = point.getSpeed();
+ pointBean.typhoonType = point.getTyphoonType();
+ pointBean.moveSpeed = point.getMoveSpeed();
+ pointBean.power = point.getPower();
+ pointBean.moveDirection = point.getMoveDirection();
+ pointBean.lng = point.getLng();
+ pointBean.lat = point.getLat();
+ pointBean.radius12 = point.getRadius12();
+ pointBean.radius10 = point.getRadius10();
+ pointBean.radius7 = point.getRadius7();
+ pointBean.routePrediction = point.getRoutePrediction();
+ pointBean.centerPosition = point.getCenterPosition();
+ points.add(pointBean);
+ }
+ this.points = points;
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java
deleted file mode 100644
index c6ed867..0000000
--- a/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.casic.missiles.modular.system.event;
-
-import com.casic.missiles.model.application.event.core.ModelEvent;
-import com.casic.missiles.model.application.event.type.AbstractEventTypeEnum;
-import com.casic.missiles.modular.system.model.User;
-
-/**
- * 用户事件
- *
- * @author lwh
- */
-public class UserEvent extends ModelEvent {
- /**
- * Create a new {@code ApplicationEvent}.
- *
- * @param type 事件类型
- * @param source the object on which the event initially occurred or with
- * which the event is associated (never {@code null})
- */
- public UserEvent(AbstractEventTypeEnum type, User source) {
- super(type, source);
- }
-}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java
deleted file mode 100644
index 4480ef2..0000000
--- a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.casic.missiles.modular.system.event.listener;
-
-import com.casic.missiles.core.application.event.UserLoginEvent;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.context.event.EventListener;
-import org.springframework.stereotype.Component;
-
-/**
- * 用户事件订阅
- *
- * @author lwh
- */
-@Slf4j
-@Component
-public class UserOneListener {
- @EventListener
- public void onApplicationEvent(UserLoginEvent event) {
- log.debug("用户1订阅:{}", event);
- }
-}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java
deleted file mode 100644
index 8447a22..0000000
--- a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.casic.missiles.modular.system.event.listener;
-
-import com.casic.missiles.model.application.event.core.EventSubscriber;
-import com.casic.missiles.modular.system.event.UserEvent;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Component;
-
-/**
- * 用户事件订阅
- *
- * @author lwh
- */
-@Slf4j
-@Component
-public class UserTwoListener extends EventSubscriber {
- @Override
- public void onApplicationEvent(UserEvent event) {
- log.debug("用户2订阅:{}", event);
- }
-}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/remote/OceanDetailModel.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/remote/OceanDetailModel.java
new file mode 100644
index 0000000..742560a
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/remote/OceanDetailModel.java
@@ -0,0 +1,439 @@
+package com.casic.missiles.modular.system.model.remote;
+
+import java.util.List;
+
+/**
+ * 第三方洋流数据模型
+ *
+ * @author a203
+ */
+public class OceanDetailModel {
+
+ /**
+ * code : 0
+ * data : {"lon":114.338597,"lat":18.273134,"date":"2021-10-21","hour":10,"list":[{"date":"2021-10-21","ytx":{"currentMag":0.8194745182991028,"currentDir":311.85589599609375,"swellDir":54.90005874633789,"swellHgt":1.0300003290176392,"swellPrd":6.740001201629639,"waveDir":51.860050201416016,"waveHgt":1.0500003099441528,"wavePrd":6.740001201629639,"windMag":4.520016193389893,"windDir":84.48993682861328,"surfPres":101099.5625,"surface_Tem":301.4056800842285,"surfaceTem":28.255680084228516,"surfTem":28.255680084228516},"meteo":{"currentMag":0.8194745182991028,"currentDir":311.85589599609375,"swellDir":54.90005874633789,"swellHgt":1.0300003290176392,"swellPrd":6.740001201629639,"waveDir":51.860050201416016,"waveHgt":1.0500003099441528,"wavePrd":6.740001201629639,"windMag":4.520016193389893,"windDir":84.48993682861328,"surfPres":101099.5625,"surface_Tem":301.4056800842285,"surfaceTem":28.255680084228516,"surfTem":28.255680084228516}}]}
+ * message : success
+ * etime : 1634786517992
+ */
+
+ private int code;
+ private DataBean data;
+ private String message;
+ private long etime;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataBean getData() {
+ return data;
+ }
+
+ public void setData(DataBean data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public long getEtime() {
+ return etime;
+ }
+
+ public void setEtime(long etime) {
+ this.etime = etime;
+ }
+
+ public static class DataBean {
+ /**
+ * lon : 114.338597
+ * lat : 18.273134
+ * date : 2021-10-21
+ * hour : 10
+ * list : [{"date":"2021-10-21","ytx":{"currentMag":0.8194745182991028,"currentDir":311.85589599609375,"swellDir":54.90005874633789,"swellHgt":1.0300003290176392,"swellPrd":6.740001201629639,"waveDir":51.860050201416016,"waveHgt":1.0500003099441528,"wavePrd":6.740001201629639,"windMag":4.520016193389893,"windDir":84.48993682861328,"surfPres":101099.5625,"surface_Tem":301.4056800842285,"surfaceTem":28.255680084228516,"surfTem":28.255680084228516},"meteo":{"currentMag":0.8194745182991028,"currentDir":311.85589599609375,"swellDir":54.90005874633789,"swellHgt":1.0300003290176392,"swellPrd":6.740001201629639,"waveDir":51.860050201416016,"waveHgt":1.0500003099441528,"wavePrd":6.740001201629639,"windMag":4.520016193389893,"windDir":84.48993682861328,"surfPres":101099.5625,"surface_Tem":301.4056800842285,"surfaceTem":28.255680084228516,"surfTem":28.255680084228516}}]
+ */
+
+ private double lon;
+ private double lat;
+ private String date;
+ private int hour;
+ private List list;
+
+ public double getLon() {
+ return lon;
+ }
+
+ public void setLon(double lon) {
+ this.lon = lon;
+ }
+
+ public double getLat() {
+ return lat;
+ }
+
+ public void setLat(double lat) {
+ this.lat = lat;
+ }
+
+ public String getDate() {
+ return date;
+ }
+
+ public void setDate(String date) {
+ this.date = date;
+ }
+
+ public int getHour() {
+ return hour;
+ }
+
+ public void setHour(int hour) {
+ this.hour = hour;
+ }
+
+ public List getList() {
+ return list;
+ }
+
+ public void setList(List list) {
+ this.list = list;
+ }
+
+ public static class ListBean {
+ /**
+ * date : 2021-10-21
+ * ytx : {"currentMag":0.8194745182991028,"currentDir":311.85589599609375,"swellDir":54.90005874633789,"swellHgt":1.0300003290176392,"swellPrd":6.740001201629639,"waveDir":51.860050201416016,"waveHgt":1.0500003099441528,"wavePrd":6.740001201629639,"windMag":4.520016193389893,"windDir":84.48993682861328,"surfPres":101099.5625,"surface_Tem":301.4056800842285,"surfaceTem":28.255680084228516,"surfTem":28.255680084228516}
+ * meteo : {"currentMag":0.8194745182991028,"currentDir":311.85589599609375,"swellDir":54.90005874633789,"swellHgt":1.0300003290176392,"swellPrd":6.740001201629639,"waveDir":51.860050201416016,"waveHgt":1.0500003099441528,"wavePrd":6.740001201629639,"windMag":4.520016193389893,"windDir":84.48993682861328,"surfPres":101099.5625,"surface_Tem":301.4056800842285,"surfaceTem":28.255680084228516,"surfTem":28.255680084228516}
+ */
+
+ private String date;
+ private YtxBean ytx;
+ private MeteoBean meteo;
+
+ public String getDate() {
+ return date;
+ }
+
+ public void setDate(String date) {
+ this.date = date;
+ }
+
+ public YtxBean getYtx() {
+ return ytx;
+ }
+
+ public void setYtx(YtxBean ytx) {
+ this.ytx = ytx;
+ }
+
+ public MeteoBean getMeteo() {
+ return meteo;
+ }
+
+ public void setMeteo(MeteoBean meteo) {
+ this.meteo = meteo;
+ }
+
+ public static class YtxBean {
+ /**
+ * currentMag : 0.8194745182991028
+ * currentDir : 311.85589599609375
+ * swellDir : 54.90005874633789
+ * swellHgt : 1.0300003290176392
+ * swellPrd : 6.740001201629639
+ * waveDir : 51.860050201416016
+ * waveHgt : 1.0500003099441528
+ * wavePrd : 6.740001201629639
+ * windMag : 4.520016193389893
+ * windDir : 84.48993682861328
+ * surfPres : 101099.5625
+ * surface_Tem : 301.4056800842285
+ * surfaceTem : 28.255680084228516
+ * surfTem : 28.255680084228516
+ */
+
+ private double currentMag;
+ private double currentDir;
+ private double swellDir;
+ private double swellHgt;
+ private double swellPrd;
+ private double waveDir;
+ private double waveHgt;
+ private double wavePrd;
+ private double windMag;
+ private double windDir;
+ private double surfPres;
+ private double surface_Tem;
+ private double surfaceTem;
+ private double surfTem;
+
+ public double getCurrentMag() {
+ return currentMag;
+ }
+
+ public void setCurrentMag(double currentMag) {
+ this.currentMag = currentMag;
+ }
+
+ public double getCurrentDir() {
+ return currentDir;
+ }
+
+ public void setCurrentDir(double currentDir) {
+ this.currentDir = currentDir;
+ }
+
+ public double getSwellDir() {
+ return swellDir;
+ }
+
+ public void setSwellDir(double swellDir) {
+ this.swellDir = swellDir;
+ }
+
+ public double getSwellHgt() {
+ return swellHgt;
+ }
+
+ public void setSwellHgt(double swellHgt) {
+ this.swellHgt = swellHgt;
+ }
+
+ public double getSwellPrd() {
+ return swellPrd;
+ }
+
+ public void setSwellPrd(double swellPrd) {
+ this.swellPrd = swellPrd;
+ }
+
+ public double getWaveDir() {
+ return waveDir;
+ }
+
+ public void setWaveDir(double waveDir) {
+ this.waveDir = waveDir;
+ }
+
+ public double getWaveHgt() {
+ return waveHgt;
+ }
+
+ public void setWaveHgt(double waveHgt) {
+ this.waveHgt = waveHgt;
+ }
+
+ public double getWavePrd() {
+ return wavePrd;
+ }
+
+ public void setWavePrd(double wavePrd) {
+ this.wavePrd = wavePrd;
+ }
+
+ public double getWindMag() {
+ return windMag;
+ }
+
+ public void setWindMag(double windMag) {
+ this.windMag = windMag;
+ }
+
+ public double getWindDir() {
+ return windDir;
+ }
+
+ public void setWindDir(double windDir) {
+ this.windDir = windDir;
+ }
+
+ public double getSurfPres() {
+ return surfPres;
+ }
+
+ public void setSurfPres(double surfPres) {
+ this.surfPres = surfPres;
+ }
+
+ public double getSurface_Tem() {
+ return surface_Tem;
+ }
+
+ public void setSurface_Tem(double surface_Tem) {
+ this.surface_Tem = surface_Tem;
+ }
+
+ public double getSurfaceTem() {
+ return surfaceTem;
+ }
+
+ public void setSurfaceTem(double surfaceTem) {
+ this.surfaceTem = surfaceTem;
+ }
+
+ public double getSurfTem() {
+ return surfTem;
+ }
+
+ public void setSurfTem(double surfTem) {
+ this.surfTem = surfTem;
+ }
+ }
+
+ public static class MeteoBean {
+ /**
+ * currentMag : 0.8194745182991028
+ * currentDir : 311.85589599609375
+ * swellDir : 54.90005874633789
+ * swellHgt : 1.0300003290176392
+ * swellPrd : 6.740001201629639
+ * waveDir : 51.860050201416016
+ * waveHgt : 1.0500003099441528
+ * wavePrd : 6.740001201629639
+ * windMag : 4.520016193389893
+ * windDir : 84.48993682861328
+ * surfPres : 101099.5625
+ * surface_Tem : 301.4056800842285
+ * surfaceTem : 28.255680084228516
+ * surfTem : 28.255680084228516
+ */
+
+ private double currentMag;
+ private double currentDir;
+ private double swellDir;
+ private double swellHgt;
+ private double swellPrd;
+ private double waveDir;
+ private double waveHgt;
+ private double wavePrd;
+ private double windMag;
+ private double windDir;
+ private double surfPres;
+ private double surface_Tem;
+ private double surfaceTem;
+ private double surfTem;
+
+ public double getCurrentMag() {
+ return currentMag;
+ }
+
+ public void setCurrentMag(double currentMag) {
+ this.currentMag = currentMag;
+ }
+
+ public double getCurrentDir() {
+ return currentDir;
+ }
+
+ public void setCurrentDir(double currentDir) {
+ this.currentDir = currentDir;
+ }
+
+ public double getSwellDir() {
+ return swellDir;
+ }
+
+ public void setSwellDir(double swellDir) {
+ this.swellDir = swellDir;
+ }
+
+ public double getSwellHgt() {
+ return swellHgt;
+ }
+
+ public void setSwellHgt(double swellHgt) {
+ this.swellHgt = swellHgt;
+ }
+
+ public double getSwellPrd() {
+ return swellPrd;
+ }
+
+ public void setSwellPrd(double swellPrd) {
+ this.swellPrd = swellPrd;
+ }
+
+ public double getWaveDir() {
+ return waveDir;
+ }
+
+ public void setWaveDir(double waveDir) {
+ this.waveDir = waveDir;
+ }
+
+ public double getWaveHgt() {
+ return waveHgt;
+ }
+
+ public void setWaveHgt(double waveHgt) {
+ this.waveHgt = waveHgt;
+ }
+
+ public double getWavePrd() {
+ return wavePrd;
+ }
+
+ public void setWavePrd(double wavePrd) {
+ this.wavePrd = wavePrd;
+ }
+
+ public double getWindMag() {
+ return windMag;
+ }
+
+ public void setWindMag(double windMag) {
+ this.windMag = windMag;
+ }
+
+ public double getWindDir() {
+ return windDir;
+ }
+
+ public void setWindDir(double windDir) {
+ this.windDir = windDir;
+ }
+
+ public double getSurfPres() {
+ return surfPres;
+ }
+
+ public void setSurfPres(double surfPres) {
+ this.surfPres = surfPres;
+ }
+
+ public double getSurface_Tem() {
+ return surface_Tem;
+ }
+
+ public void setSurface_Tem(double surface_Tem) {
+ this.surface_Tem = surface_Tem;
+ }
+
+ public double getSurfaceTem() {
+ return surfaceTem;
+ }
+
+ public void setSurfaceTem(double surfaceTem) {
+ this.surfaceTem = surfaceTem;
+ }
+
+ public double getSurfTem() {
+ return surfTem;
+ }
+
+ public void setSurfTem(double surfTem) {
+ this.surfTem = surfTem;
+ }
+ }
+ }
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/remote/TyphoonDetailModel.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/remote/TyphoonDetailModel.java
new file mode 100644
index 0000000..26d347b
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/remote/TyphoonDetailModel.java
@@ -0,0 +1,419 @@
+package com.casic.missiles.modular.system.model.remote;
+
+import java.util.List;
+
+/**
+ * 第三方台风数据模型
+ *
+ * @author a203
+ */
+public class TyphoonDetailModel {
+
+ /**
+ * showapi_res_error :
+ * showapi_fee_num : 1
+ * showapi_res_code : 0
+ * showapi_res_id : 6155596a0de376ce34c7b594
+ * showapi_res_body : {"ret_code":0,"obj":{"endtime":"2021-9-30 8:00:00","centerlng":"139.300000","starttime":"2021-9-23 20:00:00","tfid":"202116","isactive":"1","centerlat":"25.200000","name":"蒲公英","land":[],"warnlevel":"white","points":[{"time":"2021-9-23 20:00:00","pressure":"998","radius10":"","speed":"18","strong":"热带风暴","movespeed":"20","radius12":"","power":"8","lng":"143.30","movedirection":"西北西","lat":"13.80","radius7":"250|220|200|180"},{"time":"2021-9-24 2:00:00","pressure":"998","radius10":"","speed":"18","strong":"热带风暴","movespeed":"24","radius12":"","power":"8","lng":"142.10","movedirection":"西北西","lat":"14.10","radius7":"250|220|200|180"},{"time":"2021-9-24 5:00:00","pressure":"998","radius10":"","speed":"18","strong":"热带风暴","movespeed":"18","radius12":"","power":"8","lng":"141.50","movedirection":"北西","lat":"14.50","radius7":"250|220|200|180"},{"time":"2021-9-24 8:00:00","pressure":"998","radius10":"","speed":"18","strong":"热带风暴","movespeed":"15","radius12":"","power":"8","lng":"141.10","movedirection":"西北西","lat":"14.60","radius7":"250|220|200|180"},{"time":"2021-9-24 14:00:00","pressure":"990","radius10":"","speed":"23","strong":"热带风暴","movespeed":"20","radius12":"","power":"9","lng":"140.40","movedirection":"北西","lat":"15.10","radius7":"300|250|220|200"},{"time":"2021-9-24 17:00:00","pressure":"990","radius10":"","speed":"23","strong":"热带风暴","movespeed":"15","radius12":"","power":"9","lng":"140.00","movedirection":"北西","lat":"15.40","radius7":"300|250|220|200"},{"time":"2021-9-24 20:00:00","pressure":"982","radius10":"100|100|120|120","speed":"28","strong":"强热带风暴","movespeed":"16","radius12":"","power":"10","lng":"139.60","movedirection":"北西","lat":"15.70","radius7":"320|320|260|260"},{"time":"2021-9-25 2:00:00","pressure":"982","radius10":"100|100|120|120","speed":"28","strong":"强热带风暴","movespeed":"15","radius12":"","power":"10","lng":"138.90","movedirection":"北西","lat":"16.50","radius7":"320|320|260|260"},{"time":"2021-9-25 5:00:00","pressure":"980","radius10":"100|100|120|120","speed":"30","strong":"强热带风暴","movespeed":"12","radius12":"","power":"11","lng":"138.20","movedirection":"北北西","lat":"17.00","radius7":"320|320|260|260"},{"time":"2021-9-25 8:00:00","pressure":"975","radius10":"100|100|120|120","speed":"33","strong":"台风","movespeed":"11","radius12":"","power":"12","lng":"138.10","movedirection":"北北西","lat":"17.10","radius7":"320|320|260|260"},{"time":"2021-9-25 14:00:00","pressure":"955","radius10":"180|160|180|200","speed":"42","strong":"强台风","movespeed":"10","radius12":"100|80|100|120","power":"14","lng":"137.70","movedirection":"北北西","lat":"17.60","radius7":"320|300|320|350"},{"time":"2021-9-25 17:00:00","pressure":"950","radius10":"180|160|180|200","speed":"45","strong":"强台风","movespeed":"10","radius12":"100|80|100|120","power":"14","lng":"137.70","movedirection":"北北西","lat":"17.80","radius7":"320|300|320|350"},{"time":"2021-9-25 20:00:00","pressure":"940","radius10":"180|180|180|200","speed":"50","strong":"强台风","movespeed":"10","radius12":"100|100|100|120","power":"15","lng":"137.60","movedirection":"北北西","lat":"18.10","radius7":"320|300|320|350"},{"time":"2021-9-26 2:00:00","pressure":"940","radius10":"180|180|180|200","speed":"50","strong":"强台风","movespeed":"10","radius12":"100|100|100|120","power":"15","lng":"137.00","movedirection":"北北西","lat":"18.50","radius7":"320|300|320|350"},{"time":"2021-9-26 5:00:00","pressure":"940","radius10":"180|180|180|200","speed":"50","strong":"强台风","movespeed":"10","radius12":"100|100|100|120","power":"15","lng":"137.00","movedirection":"北北西","lat":"18.70","radius7":"320|300|320|350"},{"time":"2021-9-26 8:00:00","pressure":"930","radius10":"180|180|180|200","speed":"55","strong":"超强台风","movespeed":"6","radius12":"100|100|100|120","power":"16","lng":"136.80","movedirection":"北北西","lat":"18.70","radius7":"320|300|320|350"},{"time":"2021-9-26 14:00:00","pressure":"920","radius10":"180|180|180|200","speed":"60","strong":"超强台风","movespeed":"5","radius12":"100|100|100|120","power":"17","lng":"136.70","movedirection":"北","lat":"18.80","radius7":"320|300|320|350"},{"time":"2021-9-26 17:00:00","pressure":"920","radius10":"180|180|180|200","speed":"60","strong":"超强台风","movespeed":"3","radius12":"100|100|100|120","power":"17","lng":"136.70","movedirection":"北北西","lat":"18.90","radius7":"320|300|320|350"},{"time":"2021-9-26 20:00:00","pressure":"920","radius10":"180|180|180|200","speed":"60","strong":"超强台风","movespeed":"4","radius12":"100|100|100|120","power":"17","lng":"136.70","movedirection":"北北西","lat":"19.00","radius7":"320|300|320|350"},{"time":"2021-9-27 2:00:00","pressure":"920","radius10":"180|180|180|200","speed":"60","strong":"超强台风","movespeed":"6","radius12":"100|100|100|120","power":"17","lng":"136.80","movedirection":"北西","lat":"19.30","radius7":"320|300|320|350"},{"time":"2021-9-27 5:00:00","pressure":"930","radius10":"180|180|180|200","speed":"55","strong":"超强台风","movespeed":"6","radius12":"100|100|100|120","power":"16","lng":"136.70","movedirection":"北西","lat":"19.60","radius7":"320|300|320|350"},{"time":"2021-9-27 8:00:00","pressure":"935","radius10":"180|180|180|200","speed":"52","strong":"超强台风","movespeed":"6","radius12":"100|100|100|120","power":"16","lng":"136.70","movedirection":"北北西","lat":"19.60","radius7":"320|300|320|350"},{"time":"2021-9-27 14:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"7","radius12":"80|70|70|70","power":"16","lng":"136.60","movedirection":"北西","lat":"19.90","radius7":"320|300|320|350"},{"time":"2021-9-27 17:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"8","radius12":"80|70|70|70","power":"16","lng":"136.50","movedirection":"北西","lat":"20.00","radius7":"350|300|320|350"},{"time":"2021-9-27 20:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"8","radius12":"80|70|70|70","power":"16","lng":"136.40","movedirection":"北西","lat":"20.20","radius7":"350|300|320|350"},{"time":"2021-9-28 2:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"11","radius12":"80|70|70|70","power":"16","lng":"136.30","movedirection":"北西","lat":"20.40","radius7":"350|300|320|350"},{"time":"2021-9-28 5:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"12","radius12":"80|70|70|70","power":"16","lng":"136.20","movedirection":"北北西","lat":"20.60","radius7":"350|300|320|350"},{"time":"2021-9-28 8:00:00","pressure":"940","radius10":"150|120|120|120","speed":"50","strong":"强台风","movespeed":"12","radius12":"80|70|70|70","power":"15","lng":"136.20","movedirection":"北北西","lat":"20.90","radius7":"350|300|320|350"},{"time":"2021-9-28 14:00:00","pressure":"940","radius10":"150|120|120|120","speed":"50","strong":"强台风","movespeed":"12","radius12":"80|70|70|70","power":"15","lng":"135.80","movedirection":"北北西","lat":"21.50","radius7":"350|300|320|350"},{"time":"2021-9-28 17:00:00","pressure":"940","radius10":"150|120|120|120","speed":"50","strong":"强台风","movespeed":"13","radius12":"80|70|70|70","power":"15","lng":"135.70","movedirection":"北北西","lat":"21.70","radius7":"350|300|320|350"},{"time":"2021-9-28 20:00:00","pressure":"940","radius10":"150|120|120|120","speed":"50","strong":"强台风","movespeed":"13","radius12":"80|70|70|70","power":"15","lng":"135.40","movedirection":"北北西","lat":"22.00","radius7":"350|300|320|350"},{"time":"2021-9-29 2:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"14","radius12":"80|70|70|70","power":"16","lng":"135.60","movedirection":"北","lat":"22.70","radius7":"350|300|320|350"},{"time":"2021-9-29 5:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"15","radius12":"80|70|70|70","power":"16","lng":"135.50","movedirection":"北","lat":"22.80","radius7":"350|300|320|350"},{"time":"2021-9-29 8:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"15","radius12":"80|70|70|70","power":"16","lng":"135.30","movedirection":"北","lat":"23.40","radius7":"350|300|320|350"},{"time":"2021-9-29 14:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"17","radius12":"80|70|70|70","power":"16","lng":"135.40","movedirection":"北北东","lat":"24.20","radius7":"350|300|320|350"},{"time":"2021-9-29 17:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"20","radius12":"80|70|70|70","power":"16","lng":"135.40","movedirection":"北北东","lat":"24.50","radius7":"350|300|320|350"},{"time":"2021-9-29 20:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"20","radius12":"80|70|70|70","power":"16","lng":"135.50","movedirection":"北北东","lat":"24.80","radius7":"350|300|320|350"},{"time":"2021-9-30 2:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"22","radius12":"80|70|70|70","power":"16","lng":"135.80","movedirection":"北北东","lat":"25.80","radius7":"350|300|320|350"},{"time":"2021-9-30 5:00:00","pressure":"940","radius10":"150|120|120|120","speed":"50","strong":"强台风","movespeed":"18","radius12":"80|70|70|70","power":"15","lng":"136.10","movedirection":"北北东","lat":"26.20","radius7":"350|300|320|350"},{"pressure":"945","radius10":"150|120|120|120","speed":"48","radius12":"80|70|70|70","lng":"136.40","jl":" \u201c蒲公英\u201d将以每小时23公里左右的速度向北偏东方向移动,强度变化不大。 (下次更新时间为30日14时30分)","radius7":"350|300|320|350","time":"2021-9-30 8:00:00","strong":"强台风","movespeed":"23","power":"15","movedirection":"北北东","ckposition":" 距离日本东京南偏西方向约1060公里","lat":"26.60"}],"enname":"Mindulle"}}
+ */
+
+ private String showapi_res_error;
+ private int showapi_fee_num;
+ private int showapi_res_code;
+ private String showapi_res_id;
+ private ShowapiResBodyBean showapi_res_body;
+
+ public String getShowapi_res_error() {
+ return showapi_res_error;
+ }
+
+ public void setShowapi_res_error(String showapi_res_error) {
+ this.showapi_res_error = showapi_res_error;
+ }
+
+ public int getShowapi_fee_num() {
+ return showapi_fee_num;
+ }
+
+ public void setShowapi_fee_num(int showapi_fee_num) {
+ this.showapi_fee_num = showapi_fee_num;
+ }
+
+ public int getShowapi_res_code() {
+ return showapi_res_code;
+ }
+
+ public void setShowapi_res_code(int showapi_res_code) {
+ this.showapi_res_code = showapi_res_code;
+ }
+
+ public String getShowapi_res_id() {
+ return showapi_res_id;
+ }
+
+ public void setShowapi_res_id(String showapi_res_id) {
+ this.showapi_res_id = showapi_res_id;
+ }
+
+ public ShowapiResBodyBean getShowapi_res_body() {
+ return showapi_res_body;
+ }
+
+ public void setShowapi_res_body(ShowapiResBodyBean showapi_res_body) {
+ this.showapi_res_body = showapi_res_body;
+ }
+
+ public static class ShowapiResBodyBean {
+ /**
+ * ret_code : 0
+ * obj : {"endtime":"2021-9-30 8:00:00","centerlng":"139.300000","starttime":"2021-9-23 20:00:00","tfid":"202116","isactive":"1","centerlat":"25.200000","name":"蒲公英","land":[],"warnlevel":"white","points":[{"time":"2021-9-23 20:00:00","pressure":"998","radius10":"","speed":"18","strong":"热带风暴","movespeed":"20","radius12":"","power":"8","lng":"143.30","movedirection":"西北西","lat":"13.80","radius7":"250|220|200|180"},{"time":"2021-9-24 2:00:00","pressure":"998","radius10":"","speed":"18","strong":"热带风暴","movespeed":"24","radius12":"","power":"8","lng":"142.10","movedirection":"西北西","lat":"14.10","radius7":"250|220|200|180"},{"time":"2021-9-24 5:00:00","pressure":"998","radius10":"","speed":"18","strong":"热带风暴","movespeed":"18","radius12":"","power":"8","lng":"141.50","movedirection":"北西","lat":"14.50","radius7":"250|220|200|180"},{"time":"2021-9-24 8:00:00","pressure":"998","radius10":"","speed":"18","strong":"热带风暴","movespeed":"15","radius12":"","power":"8","lng":"141.10","movedirection":"西北西","lat":"14.60","radius7":"250|220|200|180"},{"time":"2021-9-24 14:00:00","pressure":"990","radius10":"","speed":"23","strong":"热带风暴","movespeed":"20","radius12":"","power":"9","lng":"140.40","movedirection":"北西","lat":"15.10","radius7":"300|250|220|200"},{"time":"2021-9-24 17:00:00","pressure":"990","radius10":"","speed":"23","strong":"热带风暴","movespeed":"15","radius12":"","power":"9","lng":"140.00","movedirection":"北西","lat":"15.40","radius7":"300|250|220|200"},{"time":"2021-9-24 20:00:00","pressure":"982","radius10":"100|100|120|120","speed":"28","strong":"强热带风暴","movespeed":"16","radius12":"","power":"10","lng":"139.60","movedirection":"北西","lat":"15.70","radius7":"320|320|260|260"},{"time":"2021-9-25 2:00:00","pressure":"982","radius10":"100|100|120|120","speed":"28","strong":"强热带风暴","movespeed":"15","radius12":"","power":"10","lng":"138.90","movedirection":"北西","lat":"16.50","radius7":"320|320|260|260"},{"time":"2021-9-25 5:00:00","pressure":"980","radius10":"100|100|120|120","speed":"30","strong":"强热带风暴","movespeed":"12","radius12":"","power":"11","lng":"138.20","movedirection":"北北西","lat":"17.00","radius7":"320|320|260|260"},{"time":"2021-9-25 8:00:00","pressure":"975","radius10":"100|100|120|120","speed":"33","strong":"台风","movespeed":"11","radius12":"","power":"12","lng":"138.10","movedirection":"北北西","lat":"17.10","radius7":"320|320|260|260"},{"time":"2021-9-25 14:00:00","pressure":"955","radius10":"180|160|180|200","speed":"42","strong":"强台风","movespeed":"10","radius12":"100|80|100|120","power":"14","lng":"137.70","movedirection":"北北西","lat":"17.60","radius7":"320|300|320|350"},{"time":"2021-9-25 17:00:00","pressure":"950","radius10":"180|160|180|200","speed":"45","strong":"强台风","movespeed":"10","radius12":"100|80|100|120","power":"14","lng":"137.70","movedirection":"北北西","lat":"17.80","radius7":"320|300|320|350"},{"time":"2021-9-25 20:00:00","pressure":"940","radius10":"180|180|180|200","speed":"50","strong":"强台风","movespeed":"10","radius12":"100|100|100|120","power":"15","lng":"137.60","movedirection":"北北西","lat":"18.10","radius7":"320|300|320|350"},{"time":"2021-9-26 2:00:00","pressure":"940","radius10":"180|180|180|200","speed":"50","strong":"强台风","movespeed":"10","radius12":"100|100|100|120","power":"15","lng":"137.00","movedirection":"北北西","lat":"18.50","radius7":"320|300|320|350"},{"time":"2021-9-26 5:00:00","pressure":"940","radius10":"180|180|180|200","speed":"50","strong":"强台风","movespeed":"10","radius12":"100|100|100|120","power":"15","lng":"137.00","movedirection":"北北西","lat":"18.70","radius7":"320|300|320|350"},{"time":"2021-9-26 8:00:00","pressure":"930","radius10":"180|180|180|200","speed":"55","strong":"超强台风","movespeed":"6","radius12":"100|100|100|120","power":"16","lng":"136.80","movedirection":"北北西","lat":"18.70","radius7":"320|300|320|350"},{"time":"2021-9-26 14:00:00","pressure":"920","radius10":"180|180|180|200","speed":"60","strong":"超强台风","movespeed":"5","radius12":"100|100|100|120","power":"17","lng":"136.70","movedirection":"北","lat":"18.80","radius7":"320|300|320|350"},{"time":"2021-9-26 17:00:00","pressure":"920","radius10":"180|180|180|200","speed":"60","strong":"超强台风","movespeed":"3","radius12":"100|100|100|120","power":"17","lng":"136.70","movedirection":"北北西","lat":"18.90","radius7":"320|300|320|350"},{"time":"2021-9-26 20:00:00","pressure":"920","radius10":"180|180|180|200","speed":"60","strong":"超强台风","movespeed":"4","radius12":"100|100|100|120","power":"17","lng":"136.70","movedirection":"北北西","lat":"19.00","radius7":"320|300|320|350"},{"time":"2021-9-27 2:00:00","pressure":"920","radius10":"180|180|180|200","speed":"60","strong":"超强台风","movespeed":"6","radius12":"100|100|100|120","power":"17","lng":"136.80","movedirection":"北西","lat":"19.30","radius7":"320|300|320|350"},{"time":"2021-9-27 5:00:00","pressure":"930","radius10":"180|180|180|200","speed":"55","strong":"超强台风","movespeed":"6","radius12":"100|100|100|120","power":"16","lng":"136.70","movedirection":"北西","lat":"19.60","radius7":"320|300|320|350"},{"time":"2021-9-27 8:00:00","pressure":"935","radius10":"180|180|180|200","speed":"52","strong":"超强台风","movespeed":"6","radius12":"100|100|100|120","power":"16","lng":"136.70","movedirection":"北北西","lat":"19.60","radius7":"320|300|320|350"},{"time":"2021-9-27 14:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"7","radius12":"80|70|70|70","power":"16","lng":"136.60","movedirection":"北西","lat":"19.90","radius7":"320|300|320|350"},{"time":"2021-9-27 17:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"8","radius12":"80|70|70|70","power":"16","lng":"136.50","movedirection":"北西","lat":"20.00","radius7":"350|300|320|350"},{"time":"2021-9-27 20:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"8","radius12":"80|70|70|70","power":"16","lng":"136.40","movedirection":"北西","lat":"20.20","radius7":"350|300|320|350"},{"time":"2021-9-28 2:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"11","radius12":"80|70|70|70","power":"16","lng":"136.30","movedirection":"北西","lat":"20.40","radius7":"350|300|320|350"},{"time":"2021-9-28 5:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"12","radius12":"80|70|70|70","power":"16","lng":"136.20","movedirection":"北北西","lat":"20.60","radius7":"350|300|320|350"},{"time":"2021-9-28 8:00:00","pressure":"940","radius10":"150|120|120|120","speed":"50","strong":"强台风","movespeed":"12","radius12":"80|70|70|70","power":"15","lng":"136.20","movedirection":"北北西","lat":"20.90","radius7":"350|300|320|350"},{"time":"2021-9-28 14:00:00","pressure":"940","radius10":"150|120|120|120","speed":"50","strong":"强台风","movespeed":"12","radius12":"80|70|70|70","power":"15","lng":"135.80","movedirection":"北北西","lat":"21.50","radius7":"350|300|320|350"},{"time":"2021-9-28 17:00:00","pressure":"940","radius10":"150|120|120|120","speed":"50","strong":"强台风","movespeed":"13","radius12":"80|70|70|70","power":"15","lng":"135.70","movedirection":"北北西","lat":"21.70","radius7":"350|300|320|350"},{"time":"2021-9-28 20:00:00","pressure":"940","radius10":"150|120|120|120","speed":"50","strong":"强台风","movespeed":"13","radius12":"80|70|70|70","power":"15","lng":"135.40","movedirection":"北北西","lat":"22.00","radius7":"350|300|320|350"},{"time":"2021-9-29 2:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"14","radius12":"80|70|70|70","power":"16","lng":"135.60","movedirection":"北","lat":"22.70","radius7":"350|300|320|350"},{"time":"2021-9-29 5:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"15","radius12":"80|70|70|70","power":"16","lng":"135.50","movedirection":"北","lat":"22.80","radius7":"350|300|320|350"},{"time":"2021-9-29 8:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"15","radius12":"80|70|70|70","power":"16","lng":"135.30","movedirection":"北","lat":"23.40","radius7":"350|300|320|350"},{"time":"2021-9-29 14:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"17","radius12":"80|70|70|70","power":"16","lng":"135.40","movedirection":"北北东","lat":"24.20","radius7":"350|300|320|350"},{"time":"2021-9-29 17:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"20","radius12":"80|70|70|70","power":"16","lng":"135.40","movedirection":"北北东","lat":"24.50","radius7":"350|300|320|350"},{"time":"2021-9-29 20:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"20","radius12":"80|70|70|70","power":"16","lng":"135.50","movedirection":"北北东","lat":"24.80","radius7":"350|300|320|350"},{"time":"2021-9-30 2:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"22","radius12":"80|70|70|70","power":"16","lng":"135.80","movedirection":"北北东","lat":"25.80","radius7":"350|300|320|350"},{"time":"2021-9-30 5:00:00","pressure":"940","radius10":"150|120|120|120","speed":"50","strong":"强台风","movespeed":"18","radius12":"80|70|70|70","power":"15","lng":"136.10","movedirection":"北北东","lat":"26.20","radius7":"350|300|320|350"},{"pressure":"945","radius10":"150|120|120|120","speed":"48","radius12":"80|70|70|70","lng":"136.40","jl":" \u201c蒲公英\u201d将以每小时23公里左右的速度向北偏东方向移动,强度变化不大。 (下次更新时间为30日14时30分)","radius7":"350|300|320|350","time":"2021-9-30 8:00:00","strong":"强台风","movespeed":"23","power":"15","movedirection":"北北东","ckposition":" 距离日本东京南偏西方向约1060公里","lat":"26.60"}],"enname":"Mindulle"}
+ */
+
+ private int ret_code;
+ private ObjBean obj;
+
+ public int getRet_code() {
+ return ret_code;
+ }
+
+ public void setRet_code(int ret_code) {
+ this.ret_code = ret_code;
+ }
+
+ public ObjBean getObj() {
+ return obj;
+ }
+
+ public void setObj(ObjBean obj) {
+ this.obj = obj;
+ }
+
+ public static class ObjBean {
+ /**
+ * endtime : 2021-9-30 8:00:00
+ * centerlng : 139.300000
+ * starttime : 2021-9-23 20:00:00
+ * tfid : 202116
+ * isactive : 1
+ * centerlat : 25.200000
+ * name : 蒲公英
+ * land : [{"landaddress":"朱家尖镇","strong":"强台风","lng":"122.39","lat":"29.83","info":"\u201c灿鸿\u201d11日16时40分前后登陆浙江舟山市朱家尖镇","landtime":"2015/7/11 16:40:00"}]
+ * warnlevel : white
+ * points : [{"time":"2021-9-23 20:00:00","pressure":"998","radius10":"","speed":"18","strong":"热带风暴","movespeed":"20","radius12":"","power":"8","lng":"143.30","movedirection":"西北西","lat":"13.80","radius7":"250|220|200|180"},{"time":"2021-9-24 2:00:00","pressure":"998","radius10":"","speed":"18","strong":"热带风暴","movespeed":"24","radius12":"","power":"8","lng":"142.10","movedirection":"西北西","lat":"14.10","radius7":"250|220|200|180"},{"time":"2021-9-24 5:00:00","pressure":"998","radius10":"","speed":"18","strong":"热带风暴","movespeed":"18","radius12":"","power":"8","lng":"141.50","movedirection":"北西","lat":"14.50","radius7":"250|220|200|180"},{"time":"2021-9-24 8:00:00","pressure":"998","radius10":"","speed":"18","strong":"热带风暴","movespeed":"15","radius12":"","power":"8","lng":"141.10","movedirection":"西北西","lat":"14.60","radius7":"250|220|200|180"},{"time":"2021-9-24 14:00:00","pressure":"990","radius10":"","speed":"23","strong":"热带风暴","movespeed":"20","radius12":"","power":"9","lng":"140.40","movedirection":"北西","lat":"15.10","radius7":"300|250|220|200"},{"time":"2021-9-24 17:00:00","pressure":"990","radius10":"","speed":"23","strong":"热带风暴","movespeed":"15","radius12":"","power":"9","lng":"140.00","movedirection":"北西","lat":"15.40","radius7":"300|250|220|200"},{"time":"2021-9-24 20:00:00","pressure":"982","radius10":"100|100|120|120","speed":"28","strong":"强热带风暴","movespeed":"16","radius12":"","power":"10","lng":"139.60","movedirection":"北西","lat":"15.70","radius7":"320|320|260|260"},{"time":"2021-9-25 2:00:00","pressure":"982","radius10":"100|100|120|120","speed":"28","strong":"强热带风暴","movespeed":"15","radius12":"","power":"10","lng":"138.90","movedirection":"北西","lat":"16.50","radius7":"320|320|260|260"},{"time":"2021-9-25 5:00:00","pressure":"980","radius10":"100|100|120|120","speed":"30","strong":"强热带风暴","movespeed":"12","radius12":"","power":"11","lng":"138.20","movedirection":"北北西","lat":"17.00","radius7":"320|320|260|260"},{"time":"2021-9-25 8:00:00","pressure":"975","radius10":"100|100|120|120","speed":"33","strong":"台风","movespeed":"11","radius12":"","power":"12","lng":"138.10","movedirection":"北北西","lat":"17.10","radius7":"320|320|260|260"},{"time":"2021-9-25 14:00:00","pressure":"955","radius10":"180|160|180|200","speed":"42","strong":"强台风","movespeed":"10","radius12":"100|80|100|120","power":"14","lng":"137.70","movedirection":"北北西","lat":"17.60","radius7":"320|300|320|350"},{"time":"2021-9-25 17:00:00","pressure":"950","radius10":"180|160|180|200","speed":"45","strong":"强台风","movespeed":"10","radius12":"100|80|100|120","power":"14","lng":"137.70","movedirection":"北北西","lat":"17.80","radius7":"320|300|320|350"},{"time":"2021-9-25 20:00:00","pressure":"940","radius10":"180|180|180|200","speed":"50","strong":"强台风","movespeed":"10","radius12":"100|100|100|120","power":"15","lng":"137.60","movedirection":"北北西","lat":"18.10","radius7":"320|300|320|350"},{"time":"2021-9-26 2:00:00","pressure":"940","radius10":"180|180|180|200","speed":"50","strong":"强台风","movespeed":"10","radius12":"100|100|100|120","power":"15","lng":"137.00","movedirection":"北北西","lat":"18.50","radius7":"320|300|320|350"},{"time":"2021-9-26 5:00:00","pressure":"940","radius10":"180|180|180|200","speed":"50","strong":"强台风","movespeed":"10","radius12":"100|100|100|120","power":"15","lng":"137.00","movedirection":"北北西","lat":"18.70","radius7":"320|300|320|350"},{"time":"2021-9-26 8:00:00","pressure":"930","radius10":"180|180|180|200","speed":"55","strong":"超强台风","movespeed":"6","radius12":"100|100|100|120","power":"16","lng":"136.80","movedirection":"北北西","lat":"18.70","radius7":"320|300|320|350"},{"time":"2021-9-26 14:00:00","pressure":"920","radius10":"180|180|180|200","speed":"60","strong":"超强台风","movespeed":"5","radius12":"100|100|100|120","power":"17","lng":"136.70","movedirection":"北","lat":"18.80","radius7":"320|300|320|350"},{"time":"2021-9-26 17:00:00","pressure":"920","radius10":"180|180|180|200","speed":"60","strong":"超强台风","movespeed":"3","radius12":"100|100|100|120","power":"17","lng":"136.70","movedirection":"北北西","lat":"18.90","radius7":"320|300|320|350"},{"time":"2021-9-26 20:00:00","pressure":"920","radius10":"180|180|180|200","speed":"60","strong":"超强台风","movespeed":"4","radius12":"100|100|100|120","power":"17","lng":"136.70","movedirection":"北北西","lat":"19.00","radius7":"320|300|320|350"},{"time":"2021-9-27 2:00:00","pressure":"920","radius10":"180|180|180|200","speed":"60","strong":"超强台风","movespeed":"6","radius12":"100|100|100|120","power":"17","lng":"136.80","movedirection":"北西","lat":"19.30","radius7":"320|300|320|350"},{"time":"2021-9-27 5:00:00","pressure":"930","radius10":"180|180|180|200","speed":"55","strong":"超强台风","movespeed":"6","radius12":"100|100|100|120","power":"16","lng":"136.70","movedirection":"北西","lat":"19.60","radius7":"320|300|320|350"},{"time":"2021-9-27 8:00:00","pressure":"935","radius10":"180|180|180|200","speed":"52","strong":"超强台风","movespeed":"6","radius12":"100|100|100|120","power":"16","lng":"136.70","movedirection":"北北西","lat":"19.60","radius7":"320|300|320|350"},{"time":"2021-9-27 14:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"7","radius12":"80|70|70|70","power":"16","lng":"136.60","movedirection":"北西","lat":"19.90","radius7":"320|300|320|350"},{"time":"2021-9-27 17:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"8","radius12":"80|70|70|70","power":"16","lng":"136.50","movedirection":"北西","lat":"20.00","radius7":"350|300|320|350"},{"time":"2021-9-27 20:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"8","radius12":"80|70|70|70","power":"16","lng":"136.40","movedirection":"北西","lat":"20.20","radius7":"350|300|320|350"},{"time":"2021-9-28 2:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"11","radius12":"80|70|70|70","power":"16","lng":"136.30","movedirection":"北西","lat":"20.40","radius7":"350|300|320|350"},{"time":"2021-9-28 5:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"12","radius12":"80|70|70|70","power":"16","lng":"136.20","movedirection":"北北西","lat":"20.60","radius7":"350|300|320|350"},{"time":"2021-9-28 8:00:00","pressure":"940","radius10":"150|120|120|120","speed":"50","strong":"强台风","movespeed":"12","radius12":"80|70|70|70","power":"15","lng":"136.20","movedirection":"北北西","lat":"20.90","radius7":"350|300|320|350"},{"time":"2021-9-28 14:00:00","pressure":"940","radius10":"150|120|120|120","speed":"50","strong":"强台风","movespeed":"12","radius12":"80|70|70|70","power":"15","lng":"135.80","movedirection":"北北西","lat":"21.50","radius7":"350|300|320|350"},{"time":"2021-9-28 17:00:00","pressure":"940","radius10":"150|120|120|120","speed":"50","strong":"强台风","movespeed":"13","radius12":"80|70|70|70","power":"15","lng":"135.70","movedirection":"北北西","lat":"21.70","radius7":"350|300|320|350"},{"time":"2021-9-28 20:00:00","pressure":"940","radius10":"150|120|120|120","speed":"50","strong":"强台风","movespeed":"13","radius12":"80|70|70|70","power":"15","lng":"135.40","movedirection":"北北西","lat":"22.00","radius7":"350|300|320|350"},{"time":"2021-9-29 2:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"14","radius12":"80|70|70|70","power":"16","lng":"135.60","movedirection":"北","lat":"22.70","radius7":"350|300|320|350"},{"time":"2021-9-29 5:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"15","radius12":"80|70|70|70","power":"16","lng":"135.50","movedirection":"北","lat":"22.80","radius7":"350|300|320|350"},{"time":"2021-9-29 8:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"15","radius12":"80|70|70|70","power":"16","lng":"135.30","movedirection":"北","lat":"23.40","radius7":"350|300|320|350"},{"time":"2021-9-29 14:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"17","radius12":"80|70|70|70","power":"16","lng":"135.40","movedirection":"北北东","lat":"24.20","radius7":"350|300|320|350"},{"time":"2021-9-29 17:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"20","radius12":"80|70|70|70","power":"16","lng":"135.40","movedirection":"北北东","lat":"24.50","radius7":"350|300|320|350"},{"time":"2021-9-29 20:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"20","radius12":"80|70|70|70","power":"16","lng":"135.50","movedirection":"北北东","lat":"24.80","radius7":"350|300|320|350"},{"time":"2021-9-30 2:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"22","radius12":"80|70|70|70","power":"16","lng":"135.80","movedirection":"北北东","lat":"25.80","radius7":"350|300|320|350"},{"time":"2021-9-30 5:00:00","pressure":"940","radius10":"150|120|120|120","speed":"50","strong":"强台风","movespeed":"18","radius12":"80|70|70|70","power":"15","lng":"136.10","movedirection":"北北东","lat":"26.20","radius7":"350|300|320|350"},{"pressure":"945","radius10":"150|120|120|120","speed":"48","radius12":"80|70|70|70","lng":"136.40","jl":" \u201c蒲公英\u201d将以每小时23公里左右的速度向北偏东方向移动,强度变化不大。 (下次更新时间为30日14时30分)","radius7":"350|300|320|350","time":"2021-9-30 8:00:00","strong":"强台风","movespeed":"23","power":"15","movedirection":"北北东","ckposition":" 距离日本东京南偏西方向约1060公里","lat":"26.60"}]
+ * enname : Mindulle
+ */
+
+ private String endtime;
+ private String centerlng;
+ private String starttime;
+ private String tfid;
+ private String isactive;
+ private String centerlat;
+ private String name;
+ private String warnlevel;
+ private String enname;
+ private List land;
+ private List points;
+
+ public String getEndtime() {
+ return endtime;
+ }
+
+ public void setEndtime(String endtime) {
+ this.endtime = endtime;
+ }
+
+ public String getCenterlng() {
+ return centerlng;
+ }
+
+ public void setCenterlng(String centerlng) {
+ this.centerlng = centerlng;
+ }
+
+ public String getStarttime() {
+ return starttime;
+ }
+
+ public void setStarttime(String starttime) {
+ this.starttime = starttime;
+ }
+
+ public String getTfid() {
+ return tfid;
+ }
+
+ public void setTfid(String tfid) {
+ this.tfid = tfid;
+ }
+
+ public String getIsactive() {
+ return isactive;
+ }
+
+ public void setIsactive(String isactive) {
+ this.isactive = isactive;
+ }
+
+ public String getCenterlat() {
+ return centerlat;
+ }
+
+ public void setCenterlat(String centerlat) {
+ this.centerlat = centerlat;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getWarnlevel() {
+ return warnlevel;
+ }
+
+ public void setWarnlevel(String warnlevel) {
+ this.warnlevel = warnlevel;
+ }
+
+ public String getEnname() {
+ return enname;
+ }
+
+ public void setEnname(String enname) {
+ this.enname = enname;
+ }
+
+ public List getLand() {
+ return land;
+ }
+
+ public void setLand(List land) {
+ this.land = land;
+ }
+
+ public static class LandBan {
+ /**
+ * landaddress : 朱家尖镇
+ * strong : 强台风
+ * lng : 122.39
+ * lat : 29.83
+ * info : “灿鸿”11日16时40分前后登陆浙江舟山市朱家尖镇
+ * landtime : 2015/7/11 16:40:00
+ */
+
+ private String landaddress;
+ private String strong;
+ private Double lng;
+ private Double lat;
+ private String info;
+ private String landtime;
+
+ public String getLandaddress() {
+ return landaddress;
+ }
+
+ public void setLandaddress(String landaddress) {
+ this.landaddress = landaddress;
+ }
+
+ public String getStrong() {
+ return strong;
+ }
+
+ public void setStrong(String strong) {
+ this.strong = strong;
+ }
+
+ public Double getLng() {
+ return lng;
+ }
+
+ public void setLng(Double lng) {
+ this.lng = lng;
+ }
+
+ public Double getLat() {
+ return lat;
+ }
+
+ public void setLat(Double lat) {
+ this.lat = lat;
+ }
+
+ public String getInfo() {
+ return info;
+ }
+
+ public void setInfo(String info) {
+ this.info = info;
+ }
+
+ public String getLandtime() {
+ return landtime;
+ }
+
+ public void setLandtime(String landtime) {
+ this.landtime = landtime;
+ }
+ }
+
+ public List getPoints() {
+ return points;
+ }
+
+ public void setPoints(List points) {
+ this.points = points;
+ }
+
+ public static class PointsBean {
+ /**
+ * time : 2021-9-23 20:00:00
+ * pressure : 998
+ * radius10 :
+ * speed : 18
+ * strong : 热带风暴
+ * movespeed : 20
+ * radius12 :
+ * power : 8
+ * lng : 143.30
+ * movedirection : 西北西
+ * lat : 13.80
+ * radius7 : 250|220|200|180
+ * jl : “蒲公英”将以每小时23公里左右的速度向北偏东方向移动,强度变化不大。 (下次更新时间为30日14时30分)
+ * ckposition : 距离日本东京南偏西方向约1060公里
+ */
+
+ private String time;
+ private String pressure;
+ private String radius10;
+ private String speed;
+ private String strong;
+ private String movespeed;
+ private String radius12;
+ private String power;
+ private Double lng;
+ private String movedirection;
+ private Double lat;
+ private String radius7;
+ private String jl;
+ private String ckposition;
+
+ public String getTime() {
+ return time;
+ }
+
+ public void setTime(String time) {
+ this.time = time;
+ }
+
+ public String getPressure() {
+ return pressure;
+ }
+
+ public void setPressure(String pressure) {
+ this.pressure = pressure;
+ }
+
+ public String getRadius10() {
+ return radius10;
+ }
+
+ public void setRadius10(String radius10) {
+ this.radius10 = radius10;
+ }
+
+ public String getSpeed() {
+ return speed;
+ }
+
+ public void setSpeed(String speed) {
+ this.speed = speed;
+ }
+
+ public String getStrong() {
+ return strong;
+ }
+
+ public void setStrong(String strong) {
+ this.strong = strong;
+ }
+
+ public String getMovespeed() {
+ return movespeed;
+ }
+
+ public void setMovespeed(String movespeed) {
+ this.movespeed = movespeed;
+ }
+
+ public String getRadius12() {
+ return radius12;
+ }
+
+ public void setRadius12(String radius12) {
+ this.radius12 = radius12;
+ }
+
+ public String getPower() {
+ return power;
+ }
+
+ public void setPower(String power) {
+ this.power = power;
+ }
+
+ public Double getLng() {
+ return lng;
+ }
+
+ public void setLng(Double lng) {
+ this.lng = lng;
+ }
+
+ public String getMovedirection() {
+ return movedirection;
+ }
+
+ public void setMovedirection(String movedirection) {
+ this.movedirection = movedirection;
+ }
+
+ public Double getLat() {
+ return lat;
+ }
+
+ public void setLat(Double lat) {
+ this.lat = lat;
+ }
+
+ public String getRadius7() {
+ return radius7;
+ }
+
+ public void setRadius7(String radius7) {
+ this.radius7 = radius7;
+ }
+
+ public String getJl() {
+ return jl;
+ }
+
+ public void setJl(String jl) {
+ this.jl = jl;
+ }
+
+ public String getCkposition() {
+ return ckposition;
+ }
+
+ public void setCkposition(String ckposition) {
+ this.ckposition = ckposition;
+ }
+ }
+ }
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/remote/TyphoonModel.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/remote/TyphoonModel.java
new file mode 100644
index 0000000..e293e8d
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/remote/TyphoonModel.java
@@ -0,0 +1,237 @@
+package com.casic.missiles.modular.system.model.remote;
+
+import java.util.List;
+
+/**
+ * 第三方台风数据模型
+ *
+ * @author a203
+ */
+public class TyphoonModel {
+
+ /**
+ * showapi_res_error :
+ * showapi_fee_num : 1
+ * showapi_res_code : 0
+ * showapi_res_id : 61554fbe0de376d03494057c
+ * showapi_res_body : {"ret_code":0,"list":[{"pressure":"945","tfid":"202116","radius10":"150","speed":"48","lng":"136.40","radius7":"350","time":"2021-09-30 08:00:00","movespeed":"23","strong":"强台风","name":"蒲公英","power":"15","movedirection":"北北东","lat":"26.60","enname":"Mindulle"}]}
+ */
+
+ private String showapi_res_error;
+ private int showapi_fee_num;
+ private int showapi_res_code;
+ private String showapi_res_id;
+ private ShowapiResBodyBean showapi_res_body;
+
+ public String getShowapi_res_error() {
+ return showapi_res_error;
+ }
+
+ public void setShowapi_res_error(String showapi_res_error) {
+ this.showapi_res_error = showapi_res_error;
+ }
+
+ public int getShowapi_fee_num() {
+ return showapi_fee_num;
+ }
+
+ public void setShowapi_fee_num(int showapi_fee_num) {
+ this.showapi_fee_num = showapi_fee_num;
+ }
+
+ public int getShowapi_res_code() {
+ return showapi_res_code;
+ }
+
+ public void setShowapi_res_code(int showapi_res_code) {
+ this.showapi_res_code = showapi_res_code;
+ }
+
+ public String getShowapi_res_id() {
+ return showapi_res_id;
+ }
+
+ public void setShowapi_res_id(String showapi_res_id) {
+ this.showapi_res_id = showapi_res_id;
+ }
+
+ public ShowapiResBodyBean getShowapi_res_body() {
+ return showapi_res_body;
+ }
+
+ public void setShowapi_res_body(ShowapiResBodyBean showapi_res_body) {
+ this.showapi_res_body = showapi_res_body;
+ }
+
+ public static class ShowapiResBodyBean {
+ /**
+ * ret_code : 0
+ * list : [{"pressure":"945","tfid":"202116","radius10":"150","speed":"48","lng":"136.40","radius7":"350","time":"2021-09-30 08:00:00","movespeed":"23","strong":"强台风","name":"蒲公英","power":"15","movedirection":"北北东","lat":"26.60","enname":"Mindulle"}]
+ */
+
+ private int ret_code;
+ private List list;
+
+ public int getRet_code() {
+ return ret_code;
+ }
+
+ public void setRet_code(int ret_code) {
+ this.ret_code = ret_code;
+ }
+
+ public List getList() {
+ return list;
+ }
+
+ public void setList(List list) {
+ this.list = list;
+ }
+
+ public static class ListBean {
+ /**
+ * pressure : 945
+ * tfid : 202116
+ * radius10 : 150
+ * speed : 48
+ * lng : 136.40
+ * radius7 : 350
+ * time : 2021-09-30 08:00:00
+ * movespeed : 23
+ * strong : 强台风
+ * name : 蒲公英
+ * power : 15
+ * movedirection : 北北东
+ * lat : 26.60
+ * enname : Mindulle
+ */
+
+ private String pressure;
+ private String tfid;
+ private String radius10;
+ private String speed;
+ private String lng;
+ private String radius7;
+ private String time;
+ private String movespeed;
+ private String strong;
+ private String name;
+ private String power;
+ private String movedirection;
+ private String lat;
+ private String enname;
+
+ public String getPressure() {
+ return pressure;
+ }
+
+ public void setPressure(String pressure) {
+ this.pressure = pressure;
+ }
+
+ public String getTfid() {
+ return tfid;
+ }
+
+ public void setTfid(String tfid) {
+ this.tfid = tfid;
+ }
+
+ public String getRadius10() {
+ return radius10;
+ }
+
+ public void setRadius10(String radius10) {
+ this.radius10 = radius10;
+ }
+
+ public String getSpeed() {
+ return speed;
+ }
+
+ public void setSpeed(String speed) {
+ this.speed = speed;
+ }
+
+ public String getLng() {
+ return lng;
+ }
+
+ public void setLng(String lng) {
+ this.lng = lng;
+ }
+
+ public String getRadius7() {
+ return radius7;
+ }
+
+ public void setRadius7(String radius7) {
+ this.radius7 = radius7;
+ }
+
+ public String getTime() {
+ return time;
+ }
+
+ public void setTime(String time) {
+ this.time = time;
+ }
+
+ public String getMovespeed() {
+ return movespeed;
+ }
+
+ public void setMovespeed(String movespeed) {
+ this.movespeed = movespeed;
+ }
+
+ public String getStrong() {
+ return strong;
+ }
+
+ public void setStrong(String strong) {
+ this.strong = strong;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getPower() {
+ return power;
+ }
+
+ public void setPower(String power) {
+ this.power = power;
+ }
+
+ public String getMovedirection() {
+ return movedirection;
+ }
+
+ public void setMovedirection(String movedirection) {
+ this.movedirection = movedirection;
+ }
+
+ public String getLat() {
+ return lat;
+ }
+
+ public void setLat(String lat) {
+ this.lat = lat;
+ }
+
+ public String getEnname() {
+ return enname;
+ }
+
+ public void setEnname(String enname) {
+ this.enname = enname;
+ }
+ }
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/LandPoint.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/LandPoint.java
new file mode 100644
index 0000000..daaed2f
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/LandPoint.java
@@ -0,0 +1,67 @@
+package com.casic.missiles.modular.system.model.sql;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import lombok.Data;
+
+/**
+ * 台风登陆点数据库模型
+ *
+ * @author a203
+ */
+@Data
+@TableName("tf_land_point")
+public class LandPoint extends Model {
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 台风数据库主键
+ */
+ @TableId(value = "ID", type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 台风ID
+ */
+ @TableField("TYPHOON_ID")
+ private String typhoonId;
+
+ /**
+ * 台风登陆点
+ */
+ @TableField("LAND_ADDRESS")
+ private String landAddress;
+
+ /**
+ * 台风登陆时间
+ */
+ @TableField("LAND_TIME")
+ private String landTime;
+
+ /**
+ * 台风类型-热带风暴/强台风...
+ */
+ @TableField("TYPE")
+ private String type;
+
+ /**
+ * 经度
+ */
+ @TableField("LNG")
+ private Double lng;
+
+ /**
+ * 纬度
+ */
+ @TableField("LAT")
+ private Double lat;
+
+ /**
+ * 台风登陆细节
+ */
+ @TableField("INFO")
+ private String info;
+}
diff --git a/casic-server/pom.xml b/casic-server/pom.xml
index 913a287..71c67c0 100644
--- a/casic-server/pom.xml
+++ b/casic-server/pom.xml
@@ -36,6 +36,16 @@
provided
+
+ com.alibaba
+ fastjson
+ ${fastjson.version}
+
+
+ com.squareup.okhttp3
+ okhttp
+ 4.9.1
+
diff --git a/casic-server/src/main/java/com/casic/missiles/job/TyphoonQuartzJob.java b/casic-server/src/main/java/com/casic/missiles/job/TyphoonQuartzJob.java
new file mode 100644
index 0000000..87b8c72
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/job/TyphoonQuartzJob.java
@@ -0,0 +1,27 @@
+package com.casic.missiles.job;
+
+import com.casic.missiles.modular.system.service.ITyphoonService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+/**
+ * 台风数据定时任务,每小时执行一次
+ *
+ * @author a203
+ * @Description 依赖casic-job-quartz,并在CasicApplication上增加注解 @EnableScheduling
+ */
+@Slf4j
+@Component
+public class TyphoonQuartzJob {
+ private final ITyphoonService typhoonService;
+
+ public TyphoonQuartzJob(ITyphoonService typhoonService) {
+ this.typhoonService = typhoonService;
+ }
+
+ @Scheduled(cron = "0 0 */1 * * ?")
+ public void execute() {
+ typhoonService.saveTyphoon();
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DemoController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DemoController.java
deleted file mode 100644
index 87b6fec..0000000
--- a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/DemoController.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.casic.missiles.modular.system.controller;
-
-
-import com.casic.missiles.model.application.event.core.EventPublisher;
-import com.casic.missiles.model.application.event.enums.ModelEventTypeEnum;
-import com.casic.missiles.model.response.ResponseData;
-import com.casic.missiles.modular.system.event.UserEvent;
-import com.casic.missiles.modular.system.model.User;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.ResponseBody;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * @ClassName DemoController
- * @Description TODO
- * @Author lenovo
- * @Date 2020/6/13 15:38
- * @Version 1.0
- */
-@RestController
-@RequestMapping("/demo")
-public class DemoController {
- @Autowired
- private EventPublisher publisher;
-
- /**
- * 获取mockToken
- */
- @PostMapping("/list")
- @ResponseBody
- public Object list() {
- User user = new User();
- user.setAccount("张三");
- publisher.publishEvent(new UserEvent(ModelEventTypeEnum.ADD, user));
- return ResponseData.success();
- }
-
-
-}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/controller/EnvironmentController.java b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/EnvironmentController.java
new file mode 100644
index 0000000..44a55d6
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/controller/EnvironmentController.java
@@ -0,0 +1,62 @@
+package com.casic.missiles.modular.system.controller;
+
+import com.casic.missiles.model.response.ResponseData;
+import com.casic.missiles.modular.system.dto.OceanDetailDTO;
+import com.casic.missiles.modular.system.dto.TyphoonDTO;
+import com.casic.missiles.modular.system.dto.TyphoonDetailDTO;
+import com.casic.missiles.modular.system.service.IOceanService;
+import com.casic.missiles.modular.system.service.ITyphoonService;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.util.List;
+
+/**
+ * 环境控制器
+ *
+ * @author a203
+ */
+@Controller
+@RequestMapping("/environment")
+public class EnvironmentController {
+ private final ITyphoonService typhoonService;
+ private final IOceanService oceanService;
+
+ public EnvironmentController(ITyphoonService typhoonService, IOceanService oceanService) {
+ this.typhoonService = typhoonService;
+ this.oceanService = oceanService;
+ }
+
+ /**
+ * 台风列表
+ */
+ @GetMapping(value = "/typhoonList")
+ @ResponseBody
+ public Object list() {
+ List typhoonList = typhoonService.currentTyphoonList();
+ return ResponseData.success(typhoonList);
+ }
+
+ /**
+ * 台风详情
+ */
+ @GetMapping(value = "/typhoonDetail/{typhoonId}")
+ @ResponseBody
+ public Object detail(@PathVariable("typhoonId") String typhoonId) {
+ TyphoonDetailDTO detailDTO = typhoonService.typhoonDetail(typhoonId);
+ return ResponseData.success(detailDTO);
+ }
+
+ /**
+ * 洋流详情
+ */
+ @GetMapping(value = "/ocean")
+ @ResponseBody
+ public Object oceanDetail(double lng, double lat, String date, String days, String hour) {
+ OceanDetailDTO detailDTO = oceanService.oceanDetail(lng, lat, date, days, hour);
+ return ResponseData.success(detailDTO);
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/LandPointMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/LandPointMapper.java
new file mode 100644
index 0000000..1f4757d
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/LandPointMapper.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.modular.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.modular.system.model.sql.LandPoint;
+
+/**
+ * 台风登陆数据信息 Mapper 接口
+ *
+ * @author a203
+ */
+public interface LandPointMapper extends BaseMapper {
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RoutePointMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RoutePointMapper.java
new file mode 100644
index 0000000..f31f6d0
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/RoutePointMapper.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.modular.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.modular.system.model.sql.RoutePoint;
+
+/**
+ * 台风移动点数据信息 Mapper 接口
+ *
+ * @author a203
+ */
+public interface RoutePointMapper extends BaseMapper {
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonDetailMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonDetailMapper.java
new file mode 100644
index 0000000..bce7a6b
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonDetailMapper.java
@@ -0,0 +1,13 @@
+package com.casic.missiles.modular.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.modular.system.model.sql.TyphoonDetail;
+
+/**
+ * 台风数据信息 Mapper 接口
+ *
+ * @author a203
+ */
+public interface TyphoonDetailMapper extends BaseMapper {
+
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonMapper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonMapper.java
new file mode 100644
index 0000000..40fcb32
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/TyphoonMapper.java
@@ -0,0 +1,21 @@
+package com.casic.missiles.modular.system.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.casic.missiles.modular.system.model.sql.Typhoon;
+
+import java.util.List;
+
+/**
+ * 台风数据信息 Mapper 接口
+ *
+ * @author a203
+ */
+public interface TyphoonMapper extends BaseMapper {
+
+ /**
+ * 查询当前未消散的台风
+ *
+ * @return {@link List}
+ */
+ List selectCurrentTyphoon();
+}
\ No newline at end of file
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/TyphoonMapper.xml b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/TyphoonMapper.xml
new file mode 100644
index 0000000..73498fb
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dao/mapping/TyphoonMapper.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java
new file mode 100644
index 0000000..2debc96
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/OceanDetailDTO.java
@@ -0,0 +1,152 @@
+package com.casic.missiles.modular.system.dto;
+
+import com.casic.missiles.modular.system.model.remote.OceanDetailModel;
+import lombok.Data;
+
+import java.text.DecimalFormat;
+
+/**
+ * @author a203
+ */
+@Data
+public class OceanDetailDTO {
+
+ /**
+ * 海温, 单位: ℃(摄氏度)
+ */
+ private Double temperature;
+
+ /**
+ * 海拔, 单位: m(米)
+ */
+ private Double altitude;
+
+ /**
+ * 气压, 单位: hPa
+ */
+ private Double pressure;
+
+ /**
+ * 涌浪高度, 单位: m(米)
+ */
+ private Double swellHeight;
+
+ /**
+ * 涌浪方向, 单位: 度[0,360]
+ */
+ private Double swellDir;
+
+ /**
+ * 涌浪周期, 单位: s(秒)
+ */
+ private Double swellPrd;
+
+ /**
+ * 风浪高度, 单位: m(米)
+ */
+ private Double waveHeight;
+
+ /**
+ * 风浪方向, 单位: 度[0,360]
+ */
+ private Double waveDir;
+
+ /**
+ * 风浪周期, 单位: s(秒)
+ */
+ private Double wavePrd;
+
+ /**
+ * 海流速度, 单位: m/s
+ */
+ private Double speed;
+
+ /**
+ * 海流方向, 单位: 度[0,360]
+ */
+ private Double oceanDir;
+
+ /**
+ * 风速,单位: m/s
+ */
+ private Double windSpeed;
+
+ /**
+ * 风向,单位: 度[0,360]
+ */
+ private Double windDir;
+
+ /**
+ * 海浪预测
+ */
+ private PreviewBean forecast;
+
+ @Data
+ public static class PreviewBean {
+ /**
+ * 涌浪高度, 单位: m(米)
+ */
+ private Double swellHeight;
+
+ /**
+ * 涌浪方向, 单位: 度[0,360]
+ */
+ private Double swellDir;
+
+ /**
+ * 涌浪周期, 单位: s(秒)
+ */
+ private Double swellPrd;
+
+ /**
+ * 风浪高度, 单位: m(米)
+ */
+ private Double waveHeight;
+
+ /**
+ * 风浪方向, 单位: 度[0,360]
+ */
+ private Double waveDir;
+
+ /**
+ * 风浪周期, 单位: s(秒)
+ */
+ private Double wavePrd;
+ }
+
+ public OceanDetailDTO(OceanDetailModel remoteData) {
+ OceanDetailModel.DataBean.ListBean listBean = remoteData.getData().getList().get(0);
+ OceanDetailModel.DataBean.ListBean.YtxBean ytxBean = listBean.getYtx();
+ OceanDetailModel.DataBean.ListBean.MeteoBean meteoBean = listBean.getMeteo();
+ if (ytxBean != null) {
+ this.temperature = formatData(ytxBean.getSurfaceTem());
+ this.altitude = formatData(0.00);
+ this.pressure = formatData(ytxBean.getSurfPres());
+ this.swellHeight = formatData(ytxBean.getSwellHgt());
+ this.swellDir = formatData(ytxBean.getSwellDir());
+ this.swellPrd = formatData(ytxBean.getSwellPrd());
+ this.waveHeight = formatData(ytxBean.getWaveHgt());
+ this.waveDir = formatData(ytxBean.getWaveDir());
+ this.wavePrd = formatData(ytxBean.getWavePrd());
+ this.speed = formatData(ytxBean.getWindMag());
+ this.oceanDir = formatData(ytxBean.getCurrentDir());
+ this.windSpeed = formatData(ytxBean.getWindMag());
+ this.windDir = formatData(ytxBean.getWindDir());
+ }
+ PreviewBean bean = new PreviewBean();
+ if (meteoBean != null) {
+ bean.swellHeight = formatData(meteoBean.getSwellHgt());
+ bean.swellDir = formatData(meteoBean.getSwellDir());
+ bean.swellPrd = formatData(meteoBean.getSwellPrd());
+ bean.waveHeight = formatData(meteoBean.getWaveHgt());
+ bean.waveDir = formatData(meteoBean.getWaveDir());
+ bean.wavePrd = formatData(meteoBean.getWavePrd());
+ }
+ this.forecast = bean;
+ }
+
+ private Double formatData(Double data) {
+ DecimalFormat df = new DecimalFormat("#.00");
+ return Double.parseDouble(df.format(data));
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TyphoonDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TyphoonDTO.java
new file mode 100644
index 0000000..e3b3bb3
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TyphoonDTO.java
@@ -0,0 +1,84 @@
+package com.casic.missiles.modular.system.dto;
+
+import com.casic.missiles.modular.system.model.sql.Typhoon;
+import lombok.Data;
+
+/**
+ * @author a203
+ */
+@Data
+public class TyphoonDTO {
+ /**
+ * 台风ID
+ */
+ private String typhoonId;
+ /**
+ * 台风中文代号
+ */
+ private String name;
+ /**
+ * 台风英文代号
+ */
+ private String engName;
+ /**
+ * 经度
+ */
+ private Double lng;
+ /**
+ * 纬度
+ */
+ private Double lat;
+ /**
+ * 台风风力等级描述
+ */
+ private String typhoonType;
+ /**
+ * 台风中心气压,单位【百帕】
+ */
+ private String centerPressure;
+ /**
+ * 风速,单位【米/每秒】
+ */
+ private String speed;
+ /**
+ * 风力,单位【级】
+ */
+ private Integer power;
+ /**
+ * 台风整体移动速度,单位【公里/小时】
+ */
+ private String moveSpeed;
+ /**
+ * 台风未来移动方向
+ */
+ private String moveDirection;
+ /**
+ * 10级风力影响半径
+ */
+ private String radius10;
+ /**
+ * 7级风力影响半径
+ */
+ private String radius7;
+ /**
+ * 数据更新时间
+ */
+ private String time;
+
+ public TyphoonDTO(Typhoon data) {
+ this.typhoonId = data.getTyphoonId();
+ this.name = data.getName();
+ this.engName = data.getEngName();
+ this.lng = data.getLng();
+ this.lat = data.getLat();
+ this.typhoonType = data.getTyphoonType();
+ this.centerPressure = data.getCenterPressure();
+ this.speed = data.getSpeed();
+ this.power = data.getPower();
+ this.moveSpeed = data.getMoveSpeed();
+ this.moveDirection = data.getMoveDirection();
+ this.radius10 = data.getRadius10();
+ this.radius7 = data.getRadius7();
+ this.time = data.getTime();
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TyphoonDetailDTO.java b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TyphoonDetailDTO.java
new file mode 100644
index 0000000..295c57f
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/dto/TyphoonDetailDTO.java
@@ -0,0 +1,190 @@
+package com.casic.missiles.modular.system.dto;
+
+import com.casic.missiles.modular.system.model.sql.LandPoint;
+import com.casic.missiles.modular.system.model.sql.RoutePoint;
+import com.casic.missiles.modular.system.model.sql.TyphoonDetail;
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 台风详情
+ *
+ * @author a203
+ */
+@Data
+public class TyphoonDetailDTO {
+ /**
+ * 台风ID
+ */
+ private String typhoonId;
+ /**
+ * 台风中文代号
+ */
+ private String name;
+ /**
+ * 台风英文代号
+ */
+ private String engName;
+ /**
+ * 台风告警级别
+ */
+ private String warnLevel;
+ /**
+ * 台风中心经度
+ */
+ private Double centerLng;
+ /**
+ * 台风中心纬度
+ */
+ private Double centerLat;
+ /**
+ * 台风开始时间
+ */
+ private String startTime;
+ /**
+ * 台风结束时间
+ */
+ private String endTime;
+ /**
+ * 台风状态
+ */
+ private String isActive;
+ /**
+ * 台风登陆点
+ */
+ private List land;
+ /**
+ * 台风路径
+ */
+ private List points;
+
+ @Data
+ public static class LandBan {
+ /**
+ * 台风登陆点
+ */
+ private String landAddress;
+ /**
+ * 台风类型-热带风暴/强台风...
+ */
+ private String type;
+ private Double lng;
+ private Double lat;
+ /**
+ * 台风登陆细节
+ */
+ private String info;
+ /**
+ * 台风登陆时间
+ */
+ private String landTime;
+ }
+
+ @Data
+ public static class PointBean {
+ /**
+ * 数据更新时间
+ */
+ private String time;
+ /**
+ * 台风中心气压,单位【百帕】
+ */
+ private String centerPressure;
+ /**
+ * 风速,单位【米/每秒】
+ */
+ private String speed;
+ /**
+ * 台风风力等级描述
+ */
+ private String typhoonType;
+ /**
+ * 台风整体移动速度,单位【公里/小时】
+ */
+ private String moveSpeed;
+ /**
+ * 风力,单位【级】
+ */
+ private Integer power;
+ /**
+ * 台风未来移动方向
+ */
+ private String moveDirection;
+ /**
+ * 经度
+ */
+ private Double lng;
+ /**
+ * 纬度
+ */
+ private Double lat;
+ /**
+ * 12级风力影响半径
+ */
+ private String radius12;
+ /**
+ * 10级风力影响半径
+ */
+ private String radius10;
+ /**
+ * 7级风力影响半径
+ */
+ private String radius7;
+ /**
+ * 台风路线预测
+ */
+ private String routePrediction;
+ /**
+ * 中心位置
+ */
+ private String centerPosition;
+ }
+
+ public TyphoonDetailDTO(TyphoonDetail detail, List landBeans, List routeBeans) {
+ this.typhoonId = detail.getTyphoonId();
+ this.name = detail.getName();
+ this.engName = detail.getEngName();
+ this.warnLevel = detail.getWarnLevel();
+ this.centerLng = detail.getCenterLng();
+ this.centerLat = detail.getCenterLat();
+ this.startTime = detail.getStartTime();
+ this.endTime = detail.getEndTime();
+ this.isActive = detail.getIsActive();
+
+ List lands = new ArrayList<>();
+ for (LandPoint landBean : landBeans) {
+ LandBan bean = new LandBan();
+ bean.landAddress = landBean.getLandAddress();
+ bean.landTime = landBean.getLandTime();
+ bean.type = landBean.getType();
+ bean.lng = landBean.getLng();
+ bean.lat = landBean.getLat();
+ bean.info = landBean.getInfo();
+ lands.add(bean);
+ }
+ this.land = lands;
+
+ List points = new ArrayList<>();
+ for (RoutePoint point : routeBeans) {
+ PointBean pointBean = new PointBean();
+ pointBean.time = point.getTime();
+ pointBean.centerPressure = point.getCenterPressure();
+ pointBean.speed = point.getSpeed();
+ pointBean.typhoonType = point.getTyphoonType();
+ pointBean.moveSpeed = point.getMoveSpeed();
+ pointBean.power = point.getPower();
+ pointBean.moveDirection = point.getMoveDirection();
+ pointBean.lng = point.getLng();
+ pointBean.lat = point.getLat();
+ pointBean.radius12 = point.getRadius12();
+ pointBean.radius10 = point.getRadius10();
+ pointBean.radius7 = point.getRadius7();
+ pointBean.routePrediction = point.getRoutePrediction();
+ pointBean.centerPosition = point.getCenterPosition();
+ points.add(pointBean);
+ }
+ this.points = points;
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java
deleted file mode 100644
index c6ed867..0000000
--- a/casic-server/src/main/java/com/casic/missiles/modular/system/event/UserEvent.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.casic.missiles.modular.system.event;
-
-import com.casic.missiles.model.application.event.core.ModelEvent;
-import com.casic.missiles.model.application.event.type.AbstractEventTypeEnum;
-import com.casic.missiles.modular.system.model.User;
-
-/**
- * 用户事件
- *
- * @author lwh
- */
-public class UserEvent extends ModelEvent {
- /**
- * Create a new {@code ApplicationEvent}.
- *
- * @param type 事件类型
- * @param source the object on which the event initially occurred or with
- * which the event is associated (never {@code null})
- */
- public UserEvent(AbstractEventTypeEnum type, User source) {
- super(type, source);
- }
-}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java
deleted file mode 100644
index 4480ef2..0000000
--- a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserOneListener.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.casic.missiles.modular.system.event.listener;
-
-import com.casic.missiles.core.application.event.UserLoginEvent;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.context.event.EventListener;
-import org.springframework.stereotype.Component;
-
-/**
- * 用户事件订阅
- *
- * @author lwh
- */
-@Slf4j
-@Component
-public class UserOneListener {
- @EventListener
- public void onApplicationEvent(UserLoginEvent event) {
- log.debug("用户1订阅:{}", event);
- }
-}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java b/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java
deleted file mode 100644
index 8447a22..0000000
--- a/casic-server/src/main/java/com/casic/missiles/modular/system/event/listener/UserTwoListener.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.casic.missiles.modular.system.event.listener;
-
-import com.casic.missiles.model.application.event.core.EventSubscriber;
-import com.casic.missiles.modular.system.event.UserEvent;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Component;
-
-/**
- * 用户事件订阅
- *
- * @author lwh
- */
-@Slf4j
-@Component
-public class UserTwoListener extends EventSubscriber {
- @Override
- public void onApplicationEvent(UserEvent event) {
- log.debug("用户2订阅:{}", event);
- }
-}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/remote/OceanDetailModel.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/remote/OceanDetailModel.java
new file mode 100644
index 0000000..742560a
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/remote/OceanDetailModel.java
@@ -0,0 +1,439 @@
+package com.casic.missiles.modular.system.model.remote;
+
+import java.util.List;
+
+/**
+ * 第三方洋流数据模型
+ *
+ * @author a203
+ */
+public class OceanDetailModel {
+
+ /**
+ * code : 0
+ * data : {"lon":114.338597,"lat":18.273134,"date":"2021-10-21","hour":10,"list":[{"date":"2021-10-21","ytx":{"currentMag":0.8194745182991028,"currentDir":311.85589599609375,"swellDir":54.90005874633789,"swellHgt":1.0300003290176392,"swellPrd":6.740001201629639,"waveDir":51.860050201416016,"waveHgt":1.0500003099441528,"wavePrd":6.740001201629639,"windMag":4.520016193389893,"windDir":84.48993682861328,"surfPres":101099.5625,"surface_Tem":301.4056800842285,"surfaceTem":28.255680084228516,"surfTem":28.255680084228516},"meteo":{"currentMag":0.8194745182991028,"currentDir":311.85589599609375,"swellDir":54.90005874633789,"swellHgt":1.0300003290176392,"swellPrd":6.740001201629639,"waveDir":51.860050201416016,"waveHgt":1.0500003099441528,"wavePrd":6.740001201629639,"windMag":4.520016193389893,"windDir":84.48993682861328,"surfPres":101099.5625,"surface_Tem":301.4056800842285,"surfaceTem":28.255680084228516,"surfTem":28.255680084228516}}]}
+ * message : success
+ * etime : 1634786517992
+ */
+
+ private int code;
+ private DataBean data;
+ private String message;
+ private long etime;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public DataBean getData() {
+ return data;
+ }
+
+ public void setData(DataBean data) {
+ this.data = data;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public long getEtime() {
+ return etime;
+ }
+
+ public void setEtime(long etime) {
+ this.etime = etime;
+ }
+
+ public static class DataBean {
+ /**
+ * lon : 114.338597
+ * lat : 18.273134
+ * date : 2021-10-21
+ * hour : 10
+ * list : [{"date":"2021-10-21","ytx":{"currentMag":0.8194745182991028,"currentDir":311.85589599609375,"swellDir":54.90005874633789,"swellHgt":1.0300003290176392,"swellPrd":6.740001201629639,"waveDir":51.860050201416016,"waveHgt":1.0500003099441528,"wavePrd":6.740001201629639,"windMag":4.520016193389893,"windDir":84.48993682861328,"surfPres":101099.5625,"surface_Tem":301.4056800842285,"surfaceTem":28.255680084228516,"surfTem":28.255680084228516},"meteo":{"currentMag":0.8194745182991028,"currentDir":311.85589599609375,"swellDir":54.90005874633789,"swellHgt":1.0300003290176392,"swellPrd":6.740001201629639,"waveDir":51.860050201416016,"waveHgt":1.0500003099441528,"wavePrd":6.740001201629639,"windMag":4.520016193389893,"windDir":84.48993682861328,"surfPres":101099.5625,"surface_Tem":301.4056800842285,"surfaceTem":28.255680084228516,"surfTem":28.255680084228516}}]
+ */
+
+ private double lon;
+ private double lat;
+ private String date;
+ private int hour;
+ private List list;
+
+ public double getLon() {
+ return lon;
+ }
+
+ public void setLon(double lon) {
+ this.lon = lon;
+ }
+
+ public double getLat() {
+ return lat;
+ }
+
+ public void setLat(double lat) {
+ this.lat = lat;
+ }
+
+ public String getDate() {
+ return date;
+ }
+
+ public void setDate(String date) {
+ this.date = date;
+ }
+
+ public int getHour() {
+ return hour;
+ }
+
+ public void setHour(int hour) {
+ this.hour = hour;
+ }
+
+ public List getList() {
+ return list;
+ }
+
+ public void setList(List list) {
+ this.list = list;
+ }
+
+ public static class ListBean {
+ /**
+ * date : 2021-10-21
+ * ytx : {"currentMag":0.8194745182991028,"currentDir":311.85589599609375,"swellDir":54.90005874633789,"swellHgt":1.0300003290176392,"swellPrd":6.740001201629639,"waveDir":51.860050201416016,"waveHgt":1.0500003099441528,"wavePrd":6.740001201629639,"windMag":4.520016193389893,"windDir":84.48993682861328,"surfPres":101099.5625,"surface_Tem":301.4056800842285,"surfaceTem":28.255680084228516,"surfTem":28.255680084228516}
+ * meteo : {"currentMag":0.8194745182991028,"currentDir":311.85589599609375,"swellDir":54.90005874633789,"swellHgt":1.0300003290176392,"swellPrd":6.740001201629639,"waveDir":51.860050201416016,"waveHgt":1.0500003099441528,"wavePrd":6.740001201629639,"windMag":4.520016193389893,"windDir":84.48993682861328,"surfPres":101099.5625,"surface_Tem":301.4056800842285,"surfaceTem":28.255680084228516,"surfTem":28.255680084228516}
+ */
+
+ private String date;
+ private YtxBean ytx;
+ private MeteoBean meteo;
+
+ public String getDate() {
+ return date;
+ }
+
+ public void setDate(String date) {
+ this.date = date;
+ }
+
+ public YtxBean getYtx() {
+ return ytx;
+ }
+
+ public void setYtx(YtxBean ytx) {
+ this.ytx = ytx;
+ }
+
+ public MeteoBean getMeteo() {
+ return meteo;
+ }
+
+ public void setMeteo(MeteoBean meteo) {
+ this.meteo = meteo;
+ }
+
+ public static class YtxBean {
+ /**
+ * currentMag : 0.8194745182991028
+ * currentDir : 311.85589599609375
+ * swellDir : 54.90005874633789
+ * swellHgt : 1.0300003290176392
+ * swellPrd : 6.740001201629639
+ * waveDir : 51.860050201416016
+ * waveHgt : 1.0500003099441528
+ * wavePrd : 6.740001201629639
+ * windMag : 4.520016193389893
+ * windDir : 84.48993682861328
+ * surfPres : 101099.5625
+ * surface_Tem : 301.4056800842285
+ * surfaceTem : 28.255680084228516
+ * surfTem : 28.255680084228516
+ */
+
+ private double currentMag;
+ private double currentDir;
+ private double swellDir;
+ private double swellHgt;
+ private double swellPrd;
+ private double waveDir;
+ private double waveHgt;
+ private double wavePrd;
+ private double windMag;
+ private double windDir;
+ private double surfPres;
+ private double surface_Tem;
+ private double surfaceTem;
+ private double surfTem;
+
+ public double getCurrentMag() {
+ return currentMag;
+ }
+
+ public void setCurrentMag(double currentMag) {
+ this.currentMag = currentMag;
+ }
+
+ public double getCurrentDir() {
+ return currentDir;
+ }
+
+ public void setCurrentDir(double currentDir) {
+ this.currentDir = currentDir;
+ }
+
+ public double getSwellDir() {
+ return swellDir;
+ }
+
+ public void setSwellDir(double swellDir) {
+ this.swellDir = swellDir;
+ }
+
+ public double getSwellHgt() {
+ return swellHgt;
+ }
+
+ public void setSwellHgt(double swellHgt) {
+ this.swellHgt = swellHgt;
+ }
+
+ public double getSwellPrd() {
+ return swellPrd;
+ }
+
+ public void setSwellPrd(double swellPrd) {
+ this.swellPrd = swellPrd;
+ }
+
+ public double getWaveDir() {
+ return waveDir;
+ }
+
+ public void setWaveDir(double waveDir) {
+ this.waveDir = waveDir;
+ }
+
+ public double getWaveHgt() {
+ return waveHgt;
+ }
+
+ public void setWaveHgt(double waveHgt) {
+ this.waveHgt = waveHgt;
+ }
+
+ public double getWavePrd() {
+ return wavePrd;
+ }
+
+ public void setWavePrd(double wavePrd) {
+ this.wavePrd = wavePrd;
+ }
+
+ public double getWindMag() {
+ return windMag;
+ }
+
+ public void setWindMag(double windMag) {
+ this.windMag = windMag;
+ }
+
+ public double getWindDir() {
+ return windDir;
+ }
+
+ public void setWindDir(double windDir) {
+ this.windDir = windDir;
+ }
+
+ public double getSurfPres() {
+ return surfPres;
+ }
+
+ public void setSurfPres(double surfPres) {
+ this.surfPres = surfPres;
+ }
+
+ public double getSurface_Tem() {
+ return surface_Tem;
+ }
+
+ public void setSurface_Tem(double surface_Tem) {
+ this.surface_Tem = surface_Tem;
+ }
+
+ public double getSurfaceTem() {
+ return surfaceTem;
+ }
+
+ public void setSurfaceTem(double surfaceTem) {
+ this.surfaceTem = surfaceTem;
+ }
+
+ public double getSurfTem() {
+ return surfTem;
+ }
+
+ public void setSurfTem(double surfTem) {
+ this.surfTem = surfTem;
+ }
+ }
+
+ public static class MeteoBean {
+ /**
+ * currentMag : 0.8194745182991028
+ * currentDir : 311.85589599609375
+ * swellDir : 54.90005874633789
+ * swellHgt : 1.0300003290176392
+ * swellPrd : 6.740001201629639
+ * waveDir : 51.860050201416016
+ * waveHgt : 1.0500003099441528
+ * wavePrd : 6.740001201629639
+ * windMag : 4.520016193389893
+ * windDir : 84.48993682861328
+ * surfPres : 101099.5625
+ * surface_Tem : 301.4056800842285
+ * surfaceTem : 28.255680084228516
+ * surfTem : 28.255680084228516
+ */
+
+ private double currentMag;
+ private double currentDir;
+ private double swellDir;
+ private double swellHgt;
+ private double swellPrd;
+ private double waveDir;
+ private double waveHgt;
+ private double wavePrd;
+ private double windMag;
+ private double windDir;
+ private double surfPres;
+ private double surface_Tem;
+ private double surfaceTem;
+ private double surfTem;
+
+ public double getCurrentMag() {
+ return currentMag;
+ }
+
+ public void setCurrentMag(double currentMag) {
+ this.currentMag = currentMag;
+ }
+
+ public double getCurrentDir() {
+ return currentDir;
+ }
+
+ public void setCurrentDir(double currentDir) {
+ this.currentDir = currentDir;
+ }
+
+ public double getSwellDir() {
+ return swellDir;
+ }
+
+ public void setSwellDir(double swellDir) {
+ this.swellDir = swellDir;
+ }
+
+ public double getSwellHgt() {
+ return swellHgt;
+ }
+
+ public void setSwellHgt(double swellHgt) {
+ this.swellHgt = swellHgt;
+ }
+
+ public double getSwellPrd() {
+ return swellPrd;
+ }
+
+ public void setSwellPrd(double swellPrd) {
+ this.swellPrd = swellPrd;
+ }
+
+ public double getWaveDir() {
+ return waveDir;
+ }
+
+ public void setWaveDir(double waveDir) {
+ this.waveDir = waveDir;
+ }
+
+ public double getWaveHgt() {
+ return waveHgt;
+ }
+
+ public void setWaveHgt(double waveHgt) {
+ this.waveHgt = waveHgt;
+ }
+
+ public double getWavePrd() {
+ return wavePrd;
+ }
+
+ public void setWavePrd(double wavePrd) {
+ this.wavePrd = wavePrd;
+ }
+
+ public double getWindMag() {
+ return windMag;
+ }
+
+ public void setWindMag(double windMag) {
+ this.windMag = windMag;
+ }
+
+ public double getWindDir() {
+ return windDir;
+ }
+
+ public void setWindDir(double windDir) {
+ this.windDir = windDir;
+ }
+
+ public double getSurfPres() {
+ return surfPres;
+ }
+
+ public void setSurfPres(double surfPres) {
+ this.surfPres = surfPres;
+ }
+
+ public double getSurface_Tem() {
+ return surface_Tem;
+ }
+
+ public void setSurface_Tem(double surface_Tem) {
+ this.surface_Tem = surface_Tem;
+ }
+
+ public double getSurfaceTem() {
+ return surfaceTem;
+ }
+
+ public void setSurfaceTem(double surfaceTem) {
+ this.surfaceTem = surfaceTem;
+ }
+
+ public double getSurfTem() {
+ return surfTem;
+ }
+
+ public void setSurfTem(double surfTem) {
+ this.surfTem = surfTem;
+ }
+ }
+ }
+ }
+}
diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/remote/TyphoonDetailModel.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/remote/TyphoonDetailModel.java
new file mode 100644
index 0000000..26d347b
--- /dev/null
+++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/remote/TyphoonDetailModel.java
@@ -0,0 +1,419 @@
+package com.casic.missiles.modular.system.model.remote;
+
+import java.util.List;
+
+/**
+ * 第三方台风数据模型
+ *
+ * @author a203
+ */
+public class TyphoonDetailModel {
+
+ /**
+ * showapi_res_error :
+ * showapi_fee_num : 1
+ * showapi_res_code : 0
+ * showapi_res_id : 6155596a0de376ce34c7b594
+ * showapi_res_body : {"ret_code":0,"obj":{"endtime":"2021-9-30 8:00:00","centerlng":"139.300000","starttime":"2021-9-23 20:00:00","tfid":"202116","isactive":"1","centerlat":"25.200000","name":"蒲公英","land":[],"warnlevel":"white","points":[{"time":"2021-9-23 20:00:00","pressure":"998","radius10":"","speed":"18","strong":"热带风暴","movespeed":"20","radius12":"","power":"8","lng":"143.30","movedirection":"西北西","lat":"13.80","radius7":"250|220|200|180"},{"time":"2021-9-24 2:00:00","pressure":"998","radius10":"","speed":"18","strong":"热带风暴","movespeed":"24","radius12":"","power":"8","lng":"142.10","movedirection":"西北西","lat":"14.10","radius7":"250|220|200|180"},{"time":"2021-9-24 5:00:00","pressure":"998","radius10":"","speed":"18","strong":"热带风暴","movespeed":"18","radius12":"","power":"8","lng":"141.50","movedirection":"北西","lat":"14.50","radius7":"250|220|200|180"},{"time":"2021-9-24 8:00:00","pressure":"998","radius10":"","speed":"18","strong":"热带风暴","movespeed":"15","radius12":"","power":"8","lng":"141.10","movedirection":"西北西","lat":"14.60","radius7":"250|220|200|180"},{"time":"2021-9-24 14:00:00","pressure":"990","radius10":"","speed":"23","strong":"热带风暴","movespeed":"20","radius12":"","power":"9","lng":"140.40","movedirection":"北西","lat":"15.10","radius7":"300|250|220|200"},{"time":"2021-9-24 17:00:00","pressure":"990","radius10":"","speed":"23","strong":"热带风暴","movespeed":"15","radius12":"","power":"9","lng":"140.00","movedirection":"北西","lat":"15.40","radius7":"300|250|220|200"},{"time":"2021-9-24 20:00:00","pressure":"982","radius10":"100|100|120|120","speed":"28","strong":"强热带风暴","movespeed":"16","radius12":"","power":"10","lng":"139.60","movedirection":"北西","lat":"15.70","radius7":"320|320|260|260"},{"time":"2021-9-25 2:00:00","pressure":"982","radius10":"100|100|120|120","speed":"28","strong":"强热带风暴","movespeed":"15","radius12":"","power":"10","lng":"138.90","movedirection":"北西","lat":"16.50","radius7":"320|320|260|260"},{"time":"2021-9-25 5:00:00","pressure":"980","radius10":"100|100|120|120","speed":"30","strong":"强热带风暴","movespeed":"12","radius12":"","power":"11","lng":"138.20","movedirection":"北北西","lat":"17.00","radius7":"320|320|260|260"},{"time":"2021-9-25 8:00:00","pressure":"975","radius10":"100|100|120|120","speed":"33","strong":"台风","movespeed":"11","radius12":"","power":"12","lng":"138.10","movedirection":"北北西","lat":"17.10","radius7":"320|320|260|260"},{"time":"2021-9-25 14:00:00","pressure":"955","radius10":"180|160|180|200","speed":"42","strong":"强台风","movespeed":"10","radius12":"100|80|100|120","power":"14","lng":"137.70","movedirection":"北北西","lat":"17.60","radius7":"320|300|320|350"},{"time":"2021-9-25 17:00:00","pressure":"950","radius10":"180|160|180|200","speed":"45","strong":"强台风","movespeed":"10","radius12":"100|80|100|120","power":"14","lng":"137.70","movedirection":"北北西","lat":"17.80","radius7":"320|300|320|350"},{"time":"2021-9-25 20:00:00","pressure":"940","radius10":"180|180|180|200","speed":"50","strong":"强台风","movespeed":"10","radius12":"100|100|100|120","power":"15","lng":"137.60","movedirection":"北北西","lat":"18.10","radius7":"320|300|320|350"},{"time":"2021-9-26 2:00:00","pressure":"940","radius10":"180|180|180|200","speed":"50","strong":"强台风","movespeed":"10","radius12":"100|100|100|120","power":"15","lng":"137.00","movedirection":"北北西","lat":"18.50","radius7":"320|300|320|350"},{"time":"2021-9-26 5:00:00","pressure":"940","radius10":"180|180|180|200","speed":"50","strong":"强台风","movespeed":"10","radius12":"100|100|100|120","power":"15","lng":"137.00","movedirection":"北北西","lat":"18.70","radius7":"320|300|320|350"},{"time":"2021-9-26 8:00:00","pressure":"930","radius10":"180|180|180|200","speed":"55","strong":"超强台风","movespeed":"6","radius12":"100|100|100|120","power":"16","lng":"136.80","movedirection":"北北西","lat":"18.70","radius7":"320|300|320|350"},{"time":"2021-9-26 14:00:00","pressure":"920","radius10":"180|180|180|200","speed":"60","strong":"超强台风","movespeed":"5","radius12":"100|100|100|120","power":"17","lng":"136.70","movedirection":"北","lat":"18.80","radius7":"320|300|320|350"},{"time":"2021-9-26 17:00:00","pressure":"920","radius10":"180|180|180|200","speed":"60","strong":"超强台风","movespeed":"3","radius12":"100|100|100|120","power":"17","lng":"136.70","movedirection":"北北西","lat":"18.90","radius7":"320|300|320|350"},{"time":"2021-9-26 20:00:00","pressure":"920","radius10":"180|180|180|200","speed":"60","strong":"超强台风","movespeed":"4","radius12":"100|100|100|120","power":"17","lng":"136.70","movedirection":"北北西","lat":"19.00","radius7":"320|300|320|350"},{"time":"2021-9-27 2:00:00","pressure":"920","radius10":"180|180|180|200","speed":"60","strong":"超强台风","movespeed":"6","radius12":"100|100|100|120","power":"17","lng":"136.80","movedirection":"北西","lat":"19.30","radius7":"320|300|320|350"},{"time":"2021-9-27 5:00:00","pressure":"930","radius10":"180|180|180|200","speed":"55","strong":"超强台风","movespeed":"6","radius12":"100|100|100|120","power":"16","lng":"136.70","movedirection":"北西","lat":"19.60","radius7":"320|300|320|350"},{"time":"2021-9-27 8:00:00","pressure":"935","radius10":"180|180|180|200","speed":"52","strong":"超强台风","movespeed":"6","radius12":"100|100|100|120","power":"16","lng":"136.70","movedirection":"北北西","lat":"19.60","radius7":"320|300|320|350"},{"time":"2021-9-27 14:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"7","radius12":"80|70|70|70","power":"16","lng":"136.60","movedirection":"北西","lat":"19.90","radius7":"320|300|320|350"},{"time":"2021-9-27 17:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"8","radius12":"80|70|70|70","power":"16","lng":"136.50","movedirection":"北西","lat":"20.00","radius7":"350|300|320|350"},{"time":"2021-9-27 20:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"8","radius12":"80|70|70|70","power":"16","lng":"136.40","movedirection":"北西","lat":"20.20","radius7":"350|300|320|350"},{"time":"2021-9-28 2:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"11","radius12":"80|70|70|70","power":"16","lng":"136.30","movedirection":"北西","lat":"20.40","radius7":"350|300|320|350"},{"time":"2021-9-28 5:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"12","radius12":"80|70|70|70","power":"16","lng":"136.20","movedirection":"北北西","lat":"20.60","radius7":"350|300|320|350"},{"time":"2021-9-28 8:00:00","pressure":"940","radius10":"150|120|120|120","speed":"50","strong":"强台风","movespeed":"12","radius12":"80|70|70|70","power":"15","lng":"136.20","movedirection":"北北西","lat":"20.90","radius7":"350|300|320|350"},{"time":"2021-9-28 14:00:00","pressure":"940","radius10":"150|120|120|120","speed":"50","strong":"强台风","movespeed":"12","radius12":"80|70|70|70","power":"15","lng":"135.80","movedirection":"北北西","lat":"21.50","radius7":"350|300|320|350"},{"time":"2021-9-28 17:00:00","pressure":"940","radius10":"150|120|120|120","speed":"50","strong":"强台风","movespeed":"13","radius12":"80|70|70|70","power":"15","lng":"135.70","movedirection":"北北西","lat":"21.70","radius7":"350|300|320|350"},{"time":"2021-9-28 20:00:00","pressure":"940","radius10":"150|120|120|120","speed":"50","strong":"强台风","movespeed":"13","radius12":"80|70|70|70","power":"15","lng":"135.40","movedirection":"北北西","lat":"22.00","radius7":"350|300|320|350"},{"time":"2021-9-29 2:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"14","radius12":"80|70|70|70","power":"16","lng":"135.60","movedirection":"北","lat":"22.70","radius7":"350|300|320|350"},{"time":"2021-9-29 5:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"15","radius12":"80|70|70|70","power":"16","lng":"135.50","movedirection":"北","lat":"22.80","radius7":"350|300|320|350"},{"time":"2021-9-29 8:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"15","radius12":"80|70|70|70","power":"16","lng":"135.30","movedirection":"北","lat":"23.40","radius7":"350|300|320|350"},{"time":"2021-9-29 14:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"17","radius12":"80|70|70|70","power":"16","lng":"135.40","movedirection":"北北东","lat":"24.20","radius7":"350|300|320|350"},{"time":"2021-9-29 17:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"20","radius12":"80|70|70|70","power":"16","lng":"135.40","movedirection":"北北东","lat":"24.50","radius7":"350|300|320|350"},{"time":"2021-9-29 20:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"20","radius12":"80|70|70|70","power":"16","lng":"135.50","movedirection":"北北东","lat":"24.80","radius7":"350|300|320|350"},{"time":"2021-9-30 2:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"22","radius12":"80|70|70|70","power":"16","lng":"135.80","movedirection":"北北东","lat":"25.80","radius7":"350|300|320|350"},{"time":"2021-9-30 5:00:00","pressure":"940","radius10":"150|120|120|120","speed":"50","strong":"强台风","movespeed":"18","radius12":"80|70|70|70","power":"15","lng":"136.10","movedirection":"北北东","lat":"26.20","radius7":"350|300|320|350"},{"pressure":"945","radius10":"150|120|120|120","speed":"48","radius12":"80|70|70|70","lng":"136.40","jl":" \u201c蒲公英\u201d将以每小时23公里左右的速度向北偏东方向移动,强度变化不大。 (下次更新时间为30日14时30分)","radius7":"350|300|320|350","time":"2021-9-30 8:00:00","strong":"强台风","movespeed":"23","power":"15","movedirection":"北北东","ckposition":" 距离日本东京南偏西方向约1060公里","lat":"26.60"}],"enname":"Mindulle"}}
+ */
+
+ private String showapi_res_error;
+ private int showapi_fee_num;
+ private int showapi_res_code;
+ private String showapi_res_id;
+ private ShowapiResBodyBean showapi_res_body;
+
+ public String getShowapi_res_error() {
+ return showapi_res_error;
+ }
+
+ public void setShowapi_res_error(String showapi_res_error) {
+ this.showapi_res_error = showapi_res_error;
+ }
+
+ public int getShowapi_fee_num() {
+ return showapi_fee_num;
+ }
+
+ public void setShowapi_fee_num(int showapi_fee_num) {
+ this.showapi_fee_num = showapi_fee_num;
+ }
+
+ public int getShowapi_res_code() {
+ return showapi_res_code;
+ }
+
+ public void setShowapi_res_code(int showapi_res_code) {
+ this.showapi_res_code = showapi_res_code;
+ }
+
+ public String getShowapi_res_id() {
+ return showapi_res_id;
+ }
+
+ public void setShowapi_res_id(String showapi_res_id) {
+ this.showapi_res_id = showapi_res_id;
+ }
+
+ public ShowapiResBodyBean getShowapi_res_body() {
+ return showapi_res_body;
+ }
+
+ public void setShowapi_res_body(ShowapiResBodyBean showapi_res_body) {
+ this.showapi_res_body = showapi_res_body;
+ }
+
+ public static class ShowapiResBodyBean {
+ /**
+ * ret_code : 0
+ * obj : {"endtime":"2021-9-30 8:00:00","centerlng":"139.300000","starttime":"2021-9-23 20:00:00","tfid":"202116","isactive":"1","centerlat":"25.200000","name":"蒲公英","land":[],"warnlevel":"white","points":[{"time":"2021-9-23 20:00:00","pressure":"998","radius10":"","speed":"18","strong":"热带风暴","movespeed":"20","radius12":"","power":"8","lng":"143.30","movedirection":"西北西","lat":"13.80","radius7":"250|220|200|180"},{"time":"2021-9-24 2:00:00","pressure":"998","radius10":"","speed":"18","strong":"热带风暴","movespeed":"24","radius12":"","power":"8","lng":"142.10","movedirection":"西北西","lat":"14.10","radius7":"250|220|200|180"},{"time":"2021-9-24 5:00:00","pressure":"998","radius10":"","speed":"18","strong":"热带风暴","movespeed":"18","radius12":"","power":"8","lng":"141.50","movedirection":"北西","lat":"14.50","radius7":"250|220|200|180"},{"time":"2021-9-24 8:00:00","pressure":"998","radius10":"","speed":"18","strong":"热带风暴","movespeed":"15","radius12":"","power":"8","lng":"141.10","movedirection":"西北西","lat":"14.60","radius7":"250|220|200|180"},{"time":"2021-9-24 14:00:00","pressure":"990","radius10":"","speed":"23","strong":"热带风暴","movespeed":"20","radius12":"","power":"9","lng":"140.40","movedirection":"北西","lat":"15.10","radius7":"300|250|220|200"},{"time":"2021-9-24 17:00:00","pressure":"990","radius10":"","speed":"23","strong":"热带风暴","movespeed":"15","radius12":"","power":"9","lng":"140.00","movedirection":"北西","lat":"15.40","radius7":"300|250|220|200"},{"time":"2021-9-24 20:00:00","pressure":"982","radius10":"100|100|120|120","speed":"28","strong":"强热带风暴","movespeed":"16","radius12":"","power":"10","lng":"139.60","movedirection":"北西","lat":"15.70","radius7":"320|320|260|260"},{"time":"2021-9-25 2:00:00","pressure":"982","radius10":"100|100|120|120","speed":"28","strong":"强热带风暴","movespeed":"15","radius12":"","power":"10","lng":"138.90","movedirection":"北西","lat":"16.50","radius7":"320|320|260|260"},{"time":"2021-9-25 5:00:00","pressure":"980","radius10":"100|100|120|120","speed":"30","strong":"强热带风暴","movespeed":"12","radius12":"","power":"11","lng":"138.20","movedirection":"北北西","lat":"17.00","radius7":"320|320|260|260"},{"time":"2021-9-25 8:00:00","pressure":"975","radius10":"100|100|120|120","speed":"33","strong":"台风","movespeed":"11","radius12":"","power":"12","lng":"138.10","movedirection":"北北西","lat":"17.10","radius7":"320|320|260|260"},{"time":"2021-9-25 14:00:00","pressure":"955","radius10":"180|160|180|200","speed":"42","strong":"强台风","movespeed":"10","radius12":"100|80|100|120","power":"14","lng":"137.70","movedirection":"北北西","lat":"17.60","radius7":"320|300|320|350"},{"time":"2021-9-25 17:00:00","pressure":"950","radius10":"180|160|180|200","speed":"45","strong":"强台风","movespeed":"10","radius12":"100|80|100|120","power":"14","lng":"137.70","movedirection":"北北西","lat":"17.80","radius7":"320|300|320|350"},{"time":"2021-9-25 20:00:00","pressure":"940","radius10":"180|180|180|200","speed":"50","strong":"强台风","movespeed":"10","radius12":"100|100|100|120","power":"15","lng":"137.60","movedirection":"北北西","lat":"18.10","radius7":"320|300|320|350"},{"time":"2021-9-26 2:00:00","pressure":"940","radius10":"180|180|180|200","speed":"50","strong":"强台风","movespeed":"10","radius12":"100|100|100|120","power":"15","lng":"137.00","movedirection":"北北西","lat":"18.50","radius7":"320|300|320|350"},{"time":"2021-9-26 5:00:00","pressure":"940","radius10":"180|180|180|200","speed":"50","strong":"强台风","movespeed":"10","radius12":"100|100|100|120","power":"15","lng":"137.00","movedirection":"北北西","lat":"18.70","radius7":"320|300|320|350"},{"time":"2021-9-26 8:00:00","pressure":"930","radius10":"180|180|180|200","speed":"55","strong":"超强台风","movespeed":"6","radius12":"100|100|100|120","power":"16","lng":"136.80","movedirection":"北北西","lat":"18.70","radius7":"320|300|320|350"},{"time":"2021-9-26 14:00:00","pressure":"920","radius10":"180|180|180|200","speed":"60","strong":"超强台风","movespeed":"5","radius12":"100|100|100|120","power":"17","lng":"136.70","movedirection":"北","lat":"18.80","radius7":"320|300|320|350"},{"time":"2021-9-26 17:00:00","pressure":"920","radius10":"180|180|180|200","speed":"60","strong":"超强台风","movespeed":"3","radius12":"100|100|100|120","power":"17","lng":"136.70","movedirection":"北北西","lat":"18.90","radius7":"320|300|320|350"},{"time":"2021-9-26 20:00:00","pressure":"920","radius10":"180|180|180|200","speed":"60","strong":"超强台风","movespeed":"4","radius12":"100|100|100|120","power":"17","lng":"136.70","movedirection":"北北西","lat":"19.00","radius7":"320|300|320|350"},{"time":"2021-9-27 2:00:00","pressure":"920","radius10":"180|180|180|200","speed":"60","strong":"超强台风","movespeed":"6","radius12":"100|100|100|120","power":"17","lng":"136.80","movedirection":"北西","lat":"19.30","radius7":"320|300|320|350"},{"time":"2021-9-27 5:00:00","pressure":"930","radius10":"180|180|180|200","speed":"55","strong":"超强台风","movespeed":"6","radius12":"100|100|100|120","power":"16","lng":"136.70","movedirection":"北西","lat":"19.60","radius7":"320|300|320|350"},{"time":"2021-9-27 8:00:00","pressure":"935","radius10":"180|180|180|200","speed":"52","strong":"超强台风","movespeed":"6","radius12":"100|100|100|120","power":"16","lng":"136.70","movedirection":"北北西","lat":"19.60","radius7":"320|300|320|350"},{"time":"2021-9-27 14:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"7","radius12":"80|70|70|70","power":"16","lng":"136.60","movedirection":"北西","lat":"19.90","radius7":"320|300|320|350"},{"time":"2021-9-27 17:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"8","radius12":"80|70|70|70","power":"16","lng":"136.50","movedirection":"北西","lat":"20.00","radius7":"350|300|320|350"},{"time":"2021-9-27 20:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"8","radius12":"80|70|70|70","power":"16","lng":"136.40","movedirection":"北西","lat":"20.20","radius7":"350|300|320|350"},{"time":"2021-9-28 2:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"11","radius12":"80|70|70|70","power":"16","lng":"136.30","movedirection":"北西","lat":"20.40","radius7":"350|300|320|350"},{"time":"2021-9-28 5:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"12","radius12":"80|70|70|70","power":"16","lng":"136.20","movedirection":"北北西","lat":"20.60","radius7":"350|300|320|350"},{"time":"2021-9-28 8:00:00","pressure":"940","radius10":"150|120|120|120","speed":"50","strong":"强台风","movespeed":"12","radius12":"80|70|70|70","power":"15","lng":"136.20","movedirection":"北北西","lat":"20.90","radius7":"350|300|320|350"},{"time":"2021-9-28 14:00:00","pressure":"940","radius10":"150|120|120|120","speed":"50","strong":"强台风","movespeed":"12","radius12":"80|70|70|70","power":"15","lng":"135.80","movedirection":"北北西","lat":"21.50","radius7":"350|300|320|350"},{"time":"2021-9-28 17:00:00","pressure":"940","radius10":"150|120|120|120","speed":"50","strong":"强台风","movespeed":"13","radius12":"80|70|70|70","power":"15","lng":"135.70","movedirection":"北北西","lat":"21.70","radius7":"350|300|320|350"},{"time":"2021-9-28 20:00:00","pressure":"940","radius10":"150|120|120|120","speed":"50","strong":"强台风","movespeed":"13","radius12":"80|70|70|70","power":"15","lng":"135.40","movedirection":"北北西","lat":"22.00","radius7":"350|300|320|350"},{"time":"2021-9-29 2:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"14","radius12":"80|70|70|70","power":"16","lng":"135.60","movedirection":"北","lat":"22.70","radius7":"350|300|320|350"},{"time":"2021-9-29 5:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"15","radius12":"80|70|70|70","power":"16","lng":"135.50","movedirection":"北","lat":"22.80","radius7":"350|300|320|350"},{"time":"2021-9-29 8:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"15","radius12":"80|70|70|70","power":"16","lng":"135.30","movedirection":"北","lat":"23.40","radius7":"350|300|320|350"},{"time":"2021-9-29 14:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"17","radius12":"80|70|70|70","power":"16","lng":"135.40","movedirection":"北北东","lat":"24.20","radius7":"350|300|320|350"},{"time":"2021-9-29 17:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"20","radius12":"80|70|70|70","power":"16","lng":"135.40","movedirection":"北北东","lat":"24.50","radius7":"350|300|320|350"},{"time":"2021-9-29 20:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"20","radius12":"80|70|70|70","power":"16","lng":"135.50","movedirection":"北北东","lat":"24.80","radius7":"350|300|320|350"},{"time":"2021-9-30 2:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"22","radius12":"80|70|70|70","power":"16","lng":"135.80","movedirection":"北北东","lat":"25.80","radius7":"350|300|320|350"},{"time":"2021-9-30 5:00:00","pressure":"940","radius10":"150|120|120|120","speed":"50","strong":"强台风","movespeed":"18","radius12":"80|70|70|70","power":"15","lng":"136.10","movedirection":"北北东","lat":"26.20","radius7":"350|300|320|350"},{"pressure":"945","radius10":"150|120|120|120","speed":"48","radius12":"80|70|70|70","lng":"136.40","jl":" \u201c蒲公英\u201d将以每小时23公里左右的速度向北偏东方向移动,强度变化不大。 (下次更新时间为30日14时30分)","radius7":"350|300|320|350","time":"2021-9-30 8:00:00","strong":"强台风","movespeed":"23","power":"15","movedirection":"北北东","ckposition":" 距离日本东京南偏西方向约1060公里","lat":"26.60"}],"enname":"Mindulle"}
+ */
+
+ private int ret_code;
+ private ObjBean obj;
+
+ public int getRet_code() {
+ return ret_code;
+ }
+
+ public void setRet_code(int ret_code) {
+ this.ret_code = ret_code;
+ }
+
+ public ObjBean getObj() {
+ return obj;
+ }
+
+ public void setObj(ObjBean obj) {
+ this.obj = obj;
+ }
+
+ public static class ObjBean {
+ /**
+ * endtime : 2021-9-30 8:00:00
+ * centerlng : 139.300000
+ * starttime : 2021-9-23 20:00:00
+ * tfid : 202116
+ * isactive : 1
+ * centerlat : 25.200000
+ * name : 蒲公英
+ * land : [{"landaddress":"朱家尖镇","strong":"强台风","lng":"122.39","lat":"29.83","info":"\u201c灿鸿\u201d11日16时40分前后登陆浙江舟山市朱家尖镇","landtime":"2015/7/11 16:40:00"}]
+ * warnlevel : white
+ * points : [{"time":"2021-9-23 20:00:00","pressure":"998","radius10":"","speed":"18","strong":"热带风暴","movespeed":"20","radius12":"","power":"8","lng":"143.30","movedirection":"西北西","lat":"13.80","radius7":"250|220|200|180"},{"time":"2021-9-24 2:00:00","pressure":"998","radius10":"","speed":"18","strong":"热带风暴","movespeed":"24","radius12":"","power":"8","lng":"142.10","movedirection":"西北西","lat":"14.10","radius7":"250|220|200|180"},{"time":"2021-9-24 5:00:00","pressure":"998","radius10":"","speed":"18","strong":"热带风暴","movespeed":"18","radius12":"","power":"8","lng":"141.50","movedirection":"北西","lat":"14.50","radius7":"250|220|200|180"},{"time":"2021-9-24 8:00:00","pressure":"998","radius10":"","speed":"18","strong":"热带风暴","movespeed":"15","radius12":"","power":"8","lng":"141.10","movedirection":"西北西","lat":"14.60","radius7":"250|220|200|180"},{"time":"2021-9-24 14:00:00","pressure":"990","radius10":"","speed":"23","strong":"热带风暴","movespeed":"20","radius12":"","power":"9","lng":"140.40","movedirection":"北西","lat":"15.10","radius7":"300|250|220|200"},{"time":"2021-9-24 17:00:00","pressure":"990","radius10":"","speed":"23","strong":"热带风暴","movespeed":"15","radius12":"","power":"9","lng":"140.00","movedirection":"北西","lat":"15.40","radius7":"300|250|220|200"},{"time":"2021-9-24 20:00:00","pressure":"982","radius10":"100|100|120|120","speed":"28","strong":"强热带风暴","movespeed":"16","radius12":"","power":"10","lng":"139.60","movedirection":"北西","lat":"15.70","radius7":"320|320|260|260"},{"time":"2021-9-25 2:00:00","pressure":"982","radius10":"100|100|120|120","speed":"28","strong":"强热带风暴","movespeed":"15","radius12":"","power":"10","lng":"138.90","movedirection":"北西","lat":"16.50","radius7":"320|320|260|260"},{"time":"2021-9-25 5:00:00","pressure":"980","radius10":"100|100|120|120","speed":"30","strong":"强热带风暴","movespeed":"12","radius12":"","power":"11","lng":"138.20","movedirection":"北北西","lat":"17.00","radius7":"320|320|260|260"},{"time":"2021-9-25 8:00:00","pressure":"975","radius10":"100|100|120|120","speed":"33","strong":"台风","movespeed":"11","radius12":"","power":"12","lng":"138.10","movedirection":"北北西","lat":"17.10","radius7":"320|320|260|260"},{"time":"2021-9-25 14:00:00","pressure":"955","radius10":"180|160|180|200","speed":"42","strong":"强台风","movespeed":"10","radius12":"100|80|100|120","power":"14","lng":"137.70","movedirection":"北北西","lat":"17.60","radius7":"320|300|320|350"},{"time":"2021-9-25 17:00:00","pressure":"950","radius10":"180|160|180|200","speed":"45","strong":"强台风","movespeed":"10","radius12":"100|80|100|120","power":"14","lng":"137.70","movedirection":"北北西","lat":"17.80","radius7":"320|300|320|350"},{"time":"2021-9-25 20:00:00","pressure":"940","radius10":"180|180|180|200","speed":"50","strong":"强台风","movespeed":"10","radius12":"100|100|100|120","power":"15","lng":"137.60","movedirection":"北北西","lat":"18.10","radius7":"320|300|320|350"},{"time":"2021-9-26 2:00:00","pressure":"940","radius10":"180|180|180|200","speed":"50","strong":"强台风","movespeed":"10","radius12":"100|100|100|120","power":"15","lng":"137.00","movedirection":"北北西","lat":"18.50","radius7":"320|300|320|350"},{"time":"2021-9-26 5:00:00","pressure":"940","radius10":"180|180|180|200","speed":"50","strong":"强台风","movespeed":"10","radius12":"100|100|100|120","power":"15","lng":"137.00","movedirection":"北北西","lat":"18.70","radius7":"320|300|320|350"},{"time":"2021-9-26 8:00:00","pressure":"930","radius10":"180|180|180|200","speed":"55","strong":"超强台风","movespeed":"6","radius12":"100|100|100|120","power":"16","lng":"136.80","movedirection":"北北西","lat":"18.70","radius7":"320|300|320|350"},{"time":"2021-9-26 14:00:00","pressure":"920","radius10":"180|180|180|200","speed":"60","strong":"超强台风","movespeed":"5","radius12":"100|100|100|120","power":"17","lng":"136.70","movedirection":"北","lat":"18.80","radius7":"320|300|320|350"},{"time":"2021-9-26 17:00:00","pressure":"920","radius10":"180|180|180|200","speed":"60","strong":"超强台风","movespeed":"3","radius12":"100|100|100|120","power":"17","lng":"136.70","movedirection":"北北西","lat":"18.90","radius7":"320|300|320|350"},{"time":"2021-9-26 20:00:00","pressure":"920","radius10":"180|180|180|200","speed":"60","strong":"超强台风","movespeed":"4","radius12":"100|100|100|120","power":"17","lng":"136.70","movedirection":"北北西","lat":"19.00","radius7":"320|300|320|350"},{"time":"2021-9-27 2:00:00","pressure":"920","radius10":"180|180|180|200","speed":"60","strong":"超强台风","movespeed":"6","radius12":"100|100|100|120","power":"17","lng":"136.80","movedirection":"北西","lat":"19.30","radius7":"320|300|320|350"},{"time":"2021-9-27 5:00:00","pressure":"930","radius10":"180|180|180|200","speed":"55","strong":"超强台风","movespeed":"6","radius12":"100|100|100|120","power":"16","lng":"136.70","movedirection":"北西","lat":"19.60","radius7":"320|300|320|350"},{"time":"2021-9-27 8:00:00","pressure":"935","radius10":"180|180|180|200","speed":"52","strong":"超强台风","movespeed":"6","radius12":"100|100|100|120","power":"16","lng":"136.70","movedirection":"北北西","lat":"19.60","radius7":"320|300|320|350"},{"time":"2021-9-27 14:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"7","radius12":"80|70|70|70","power":"16","lng":"136.60","movedirection":"北西","lat":"19.90","radius7":"320|300|320|350"},{"time":"2021-9-27 17:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"8","radius12":"80|70|70|70","power":"16","lng":"136.50","movedirection":"北西","lat":"20.00","radius7":"350|300|320|350"},{"time":"2021-9-27 20:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"8","radius12":"80|70|70|70","power":"16","lng":"136.40","movedirection":"北西","lat":"20.20","radius7":"350|300|320|350"},{"time":"2021-9-28 2:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"11","radius12":"80|70|70|70","power":"16","lng":"136.30","movedirection":"北西","lat":"20.40","radius7":"350|300|320|350"},{"time":"2021-9-28 5:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"12","radius12":"80|70|70|70","power":"16","lng":"136.20","movedirection":"北北西","lat":"20.60","radius7":"350|300|320|350"},{"time":"2021-9-28 8:00:00","pressure":"940","radius10":"150|120|120|120","speed":"50","strong":"强台风","movespeed":"12","radius12":"80|70|70|70","power":"15","lng":"136.20","movedirection":"北北西","lat":"20.90","radius7":"350|300|320|350"},{"time":"2021-9-28 14:00:00","pressure":"940","radius10":"150|120|120|120","speed":"50","strong":"强台风","movespeed":"12","radius12":"80|70|70|70","power":"15","lng":"135.80","movedirection":"北北西","lat":"21.50","radius7":"350|300|320|350"},{"time":"2021-9-28 17:00:00","pressure":"940","radius10":"150|120|120|120","speed":"50","strong":"强台风","movespeed":"13","radius12":"80|70|70|70","power":"15","lng":"135.70","movedirection":"北北西","lat":"21.70","radius7":"350|300|320|350"},{"time":"2021-9-28 20:00:00","pressure":"940","radius10":"150|120|120|120","speed":"50","strong":"强台风","movespeed":"13","radius12":"80|70|70|70","power":"15","lng":"135.40","movedirection":"北北西","lat":"22.00","radius7":"350|300|320|350"},{"time":"2021-9-29 2:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"14","radius12":"80|70|70|70","power":"16","lng":"135.60","movedirection":"北","lat":"22.70","radius7":"350|300|320|350"},{"time":"2021-9-29 5:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"15","radius12":"80|70|70|70","power":"16","lng":"135.50","movedirection":"北","lat":"22.80","radius7":"350|300|320|350"},{"time":"2021-9-29 8:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"15","radius12":"80|70|70|70","power":"16","lng":"135.30","movedirection":"北","lat":"23.40","radius7":"350|300|320|350"},{"time":"2021-9-29 14:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"17","radius12":"80|70|70|70","power":"16","lng":"135.40","movedirection":"北北东","lat":"24.20","radius7":"350|300|320|350"},{"time":"2021-9-29 17:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"20","radius12":"80|70|70|70","power":"16","lng":"135.40","movedirection":"北北东","lat":"24.50","radius7":"350|300|320|350"},{"time":"2021-9-29 20:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"20","radius12":"80|70|70|70","power":"16","lng":"135.50","movedirection":"北北东","lat":"24.80","radius7":"350|300|320|350"},{"time":"2021-9-30 2:00:00","pressure":"935","radius10":"150|120|120|120","speed":"52","strong":"超强台风","movespeed":"22","radius12":"80|70|70|70","power":"16","lng":"135.80","movedirection":"北北东","lat":"25.80","radius7":"350|300|320|350"},{"time":"2021-9-30 5:00:00","pressure":"940","radius10":"150|120|120|120","speed":"50","strong":"强台风","movespeed":"18","radius12":"80|70|70|70","power":"15","lng":"136.10","movedirection":"北北东","lat":"26.20","radius7":"350|300|320|350"},{"pressure":"945","radius10":"150|120|120|120","speed":"48","radius12":"80|70|70|70","lng":"136.40","jl":" \u201c蒲公英\u201d将以每小时23公里左右的速度向北偏东方向移动,强度变化不大。 (下次更新时间为30日14时30分)","radius7":"350|300|320|350","time":"2021-9-30 8:00:00","strong":"强台风","movespeed":"23","power":"15","movedirection":"北北东","ckposition":" 距离日本东京南偏西方向约1060公里","lat":"26.60"}]
+ * enname : Mindulle
+ */
+
+ private String endtime;
+ private String centerlng;
+ private String starttime;
+ private String tfid;
+ private String isactive;
+ private String centerlat;
+ private String name;
+ private String warnlevel;
+ private String enname;
+ private List land;
+ private List points;
+
+ public String getEndtime() {
+ return endtime;
+ }
+
+ public void setEndtime(String endtime) {
+ this.endtime = endtime;
+ }
+
+ public String getCenterlng() {
+ return centerlng;
+ }
+
+ public void setCenterlng(String centerlng) {
+ this.centerlng = centerlng;
+ }
+
+ public String getStarttime() {
+ return starttime;
+ }
+
+ public void setStarttime(String starttime) {
+ this.starttime = starttime;
+ }
+
+ public String getTfid() {
+ return tfid;
+ }
+
+ public void setTfid(String tfid) {
+ this.tfid = tfid;
+ }
+
+ public String getIsactive() {
+ return isactive;
+ }
+
+ public void setIsactive(String isactive) {
+ this.isactive = isactive;
+ }
+
+ public String getCenterlat() {
+ return centerlat;
+ }
+
+ public void setCenterlat(String centerlat) {
+ this.centerlat = centerlat;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getWarnlevel() {
+ return warnlevel;
+ }
+
+ public void setWarnlevel(String warnlevel) {
+ this.warnlevel = warnlevel;
+ }
+
+ public String getEnname() {
+ return enname;
+ }
+
+ public void setEnname(String enname) {
+ this.enname = enname;
+ }
+
+ public List getLand() {
+ return land;
+ }
+
+ public void setLand(List land) {
+ this.land = land;
+ }
+
+ public static class LandBan {
+ /**
+ * landaddress : 朱家尖镇
+ * strong : 强台风
+ * lng : 122.39
+ * lat : 29.83
+ * info : “灿鸿”11日16时40分前后登陆浙江舟山市朱家尖镇
+ * landtime : 2015/7/11 16:40:00
+ */
+
+ private String landaddress;
+ private String strong;
+ private Double lng;
+ private Double lat;
+ private String info;
+ private String landtime;
+
+ public String getLandaddress() {
+ return landaddress;
+ }
+
+ public void setLandaddress(String landaddress) {
+ this.landaddress = landaddress;
+ }
+
+ public String getStrong() {
+ return strong;
+ }
+
+ public void setStrong(String strong) {
+ this.strong = strong;
+ }
+
+ public Double getLng() {
+ return lng;
+ }
+
+ public void setLng(Double lng) {
+ this.lng = lng;
+ }
+
+ public Double getLat() {
+ return lat;
+ }
+
+ public void setLat(Double lat) {
+ this.lat = lat;
+ }
+
+ public String getInfo() {
+ return info;
+ }
+
+ public void setInfo(String info) {
+ this.info = info;
+ }
+
+ public String getLandtime() {
+ return landtime;
+ }
+
+ public void setLandtime(String landtime) {
+ this.landtime = landtime;
+ }
+ }
+
+ public List getPoints() {
+ return points;
+ }
+
+ public void setPoints(List