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 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/src/main/java/com/casic/missiles/modular/system/model/sql/RoutePoint.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/RoutePoint.java new file mode 100644 index 0000000..d8dad80 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/RoutePoint.java @@ -0,0 +1,117 @@ +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_route_point") +public class RoutePoint extends Model { + private static final long serialVersionUID = 1L; + + /** + * 台风数据库主键 + *

+ * type = IdType.AUTO 是数据库自增 + */ + @TableId(value = "ID", type = IdType.ASSIGN_ID) + private Long id; + + /** + * 台风ID + */ + @TableField("TYPHOON_ID") + private String typhoonId; + + /** + * 数据更新时间 + */ + @TableField("TIME") + private String time; + + /** + * 台风中心气压,单位【百帕】 + */ + @TableField("CENTER_PRESSURE") + private String centerPressure; + + /** + * 风速,单位【米/每秒】 + */ + @TableField("SPEED") + private String speed; + + /** + * 台风风力等级描述 + */ + @TableField("TYPHOON_TYPE") + private String typhoonType; + + /** + * 台风整体移动速度,单位【公里/小时】 + */ + @TableField("MOVE_SPEED") + private String moveSpeed; + + /** + * 风力,单位【级】 + */ + @TableField("POWER") + private Integer power; + + /** + * 台风未来移动方向 + */ + @TableField("MOVE_DIRECTION") + private String moveDirection; + + /** + * 经度 + */ + @TableField("LNG") + private Double lng; + + /** + * 纬度 + */ + @TableField("LAT") + private Double lat; + + /** + * 12级风力影响半径 + */ + @TableField("RADIUS_12") + private String radius12; + + /** + * 10级风力影响半径 + */ + @TableField("RADIUS_10") + private String radius10; + + /** + * 7级风力影响半径 + */ + @TableField("RADIUS_7") + private String radius7; + + /** + * 台风路线预测 + */ + @TableField("ROUTE_PREDICTION") + private String routePrediction; + + /** + * 中心位置 + */ + @TableField("CENTER_POSITION") + private String centerPosition; +} 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/src/main/java/com/casic/missiles/modular/system/model/sql/RoutePoint.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/RoutePoint.java new file mode 100644 index 0000000..d8dad80 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/RoutePoint.java @@ -0,0 +1,117 @@ +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_route_point") +public class RoutePoint extends Model { + private static final long serialVersionUID = 1L; + + /** + * 台风数据库主键 + *

+ * type = IdType.AUTO 是数据库自增 + */ + @TableId(value = "ID", type = IdType.ASSIGN_ID) + private Long id; + + /** + * 台风ID + */ + @TableField("TYPHOON_ID") + private String typhoonId; + + /** + * 数据更新时间 + */ + @TableField("TIME") + private String time; + + /** + * 台风中心气压,单位【百帕】 + */ + @TableField("CENTER_PRESSURE") + private String centerPressure; + + /** + * 风速,单位【米/每秒】 + */ + @TableField("SPEED") + private String speed; + + /** + * 台风风力等级描述 + */ + @TableField("TYPHOON_TYPE") + private String typhoonType; + + /** + * 台风整体移动速度,单位【公里/小时】 + */ + @TableField("MOVE_SPEED") + private String moveSpeed; + + /** + * 风力,单位【级】 + */ + @TableField("POWER") + private Integer power; + + /** + * 台风未来移动方向 + */ + @TableField("MOVE_DIRECTION") + private String moveDirection; + + /** + * 经度 + */ + @TableField("LNG") + private Double lng; + + /** + * 纬度 + */ + @TableField("LAT") + private Double lat; + + /** + * 12级风力影响半径 + */ + @TableField("RADIUS_12") + private String radius12; + + /** + * 10级风力影响半径 + */ + @TableField("RADIUS_10") + private String radius10; + + /** + * 7级风力影响半径 + */ + @TableField("RADIUS_7") + private String radius7; + + /** + * 台风路线预测 + */ + @TableField("ROUTE_PREDICTION") + private String routePrediction; + + /** + * 中心位置 + */ + @TableField("CENTER_POSITION") + private String centerPosition; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/Typhoon.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/Typhoon.java new file mode 100644 index 0000000..2a88897 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/Typhoon.java @@ -0,0 +1,101 @@ +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_list") +public class Typhoon 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("NAME") + private String name; + /** + * 台风英文代号 + */ + @TableField("ENG_NAME") + private String engName; + /** + * 经度 + */ + @TableField("LNG") + private Double lng; + /** + * 纬度 + */ + @TableField("LAT") + private Double lat; + /** + * 台风风力等级描述 + */ + @TableField("TYPHOON_TYPE") + private String typhoonType; + /** + * 台风中心气压,单位【百帕】 + */ + @TableField("CENTER_PRESSURE") + private String centerPressure; + /** + * 风速,单位【米/每秒】 + */ + @TableField("SPEED") + private String speed; + /** + * 风力,单位【级】 + */ + @TableField("POWER") + private Integer power; + /** + * 台风整体移动速度,单位【公里/小时】 + */ + @TableField("MOVE_SPEED") + private String moveSpeed; + /** + * 台风未来移动方向 + */ + @TableField("MOVE_DIRECTION") + private String moveDirection; + /** + * 10级风力影响半径 + */ + @TableField("RADIUS_10") + private String radius10; + /** + * 7级风力影响半径 + */ + @TableField("RADIUS_7") + private String radius7; + /** + * 数据更新时间 + */ + @TableField("TIME") + private String time; + /** + * 台风是否已消散,1-未消散,0-已消散 + */ + @TableField("IS_ACTIVE") + private String isActive; +} 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/src/main/java/com/casic/missiles/modular/system/model/sql/RoutePoint.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/RoutePoint.java new file mode 100644 index 0000000..d8dad80 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/RoutePoint.java @@ -0,0 +1,117 @@ +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_route_point") +public class RoutePoint extends Model { + private static final long serialVersionUID = 1L; + + /** + * 台风数据库主键 + *

+ * type = IdType.AUTO 是数据库自增 + */ + @TableId(value = "ID", type = IdType.ASSIGN_ID) + private Long id; + + /** + * 台风ID + */ + @TableField("TYPHOON_ID") + private String typhoonId; + + /** + * 数据更新时间 + */ + @TableField("TIME") + private String time; + + /** + * 台风中心气压,单位【百帕】 + */ + @TableField("CENTER_PRESSURE") + private String centerPressure; + + /** + * 风速,单位【米/每秒】 + */ + @TableField("SPEED") + private String speed; + + /** + * 台风风力等级描述 + */ + @TableField("TYPHOON_TYPE") + private String typhoonType; + + /** + * 台风整体移动速度,单位【公里/小时】 + */ + @TableField("MOVE_SPEED") + private String moveSpeed; + + /** + * 风力,单位【级】 + */ + @TableField("POWER") + private Integer power; + + /** + * 台风未来移动方向 + */ + @TableField("MOVE_DIRECTION") + private String moveDirection; + + /** + * 经度 + */ + @TableField("LNG") + private Double lng; + + /** + * 纬度 + */ + @TableField("LAT") + private Double lat; + + /** + * 12级风力影响半径 + */ + @TableField("RADIUS_12") + private String radius12; + + /** + * 10级风力影响半径 + */ + @TableField("RADIUS_10") + private String radius10; + + /** + * 7级风力影响半径 + */ + @TableField("RADIUS_7") + private String radius7; + + /** + * 台风路线预测 + */ + @TableField("ROUTE_PREDICTION") + private String routePrediction; + + /** + * 中心位置 + */ + @TableField("CENTER_POSITION") + private String centerPosition; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/Typhoon.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/Typhoon.java new file mode 100644 index 0000000..2a88897 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/Typhoon.java @@ -0,0 +1,101 @@ +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_list") +public class Typhoon 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("NAME") + private String name; + /** + * 台风英文代号 + */ + @TableField("ENG_NAME") + private String engName; + /** + * 经度 + */ + @TableField("LNG") + private Double lng; + /** + * 纬度 + */ + @TableField("LAT") + private Double lat; + /** + * 台风风力等级描述 + */ + @TableField("TYPHOON_TYPE") + private String typhoonType; + /** + * 台风中心气压,单位【百帕】 + */ + @TableField("CENTER_PRESSURE") + private String centerPressure; + /** + * 风速,单位【米/每秒】 + */ + @TableField("SPEED") + private String speed; + /** + * 风力,单位【级】 + */ + @TableField("POWER") + private Integer power; + /** + * 台风整体移动速度,单位【公里/小时】 + */ + @TableField("MOVE_SPEED") + private String moveSpeed; + /** + * 台风未来移动方向 + */ + @TableField("MOVE_DIRECTION") + private String moveDirection; + /** + * 10级风力影响半径 + */ + @TableField("RADIUS_10") + private String radius10; + /** + * 7级风力影响半径 + */ + @TableField("RADIUS_7") + private String radius7; + /** + * 数据更新时间 + */ + @TableField("TIME") + private String time; + /** + * 台风是否已消散,1-未消散,0-已消散 + */ + @TableField("IS_ACTIVE") + private String isActive; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/TyphoonDetail.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/TyphoonDetail.java new file mode 100644 index 0000000..6a64023 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/TyphoonDetail.java @@ -0,0 +1,79 @@ +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_detail") +public class TyphoonDetail 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("NAME") + private String name; + + /** + * 台风英文代号 + */ + @TableField("ENG_NAME") + private String engName; + + /** + * 台风告警级别 + */ + @TableField("WARN_LEVEL") + private String warnLevel; + + /** + * 台风中心经度 + */ + @TableField("CENTER_LNG") + private Double centerLng; + + /** + * 台风中心纬度 + */ + @TableField("CENTER_LAT") + private Double centerLat; + + /** + * 台风开始时间 + */ + @TableField("START_TIME") + private String startTime; + + /** + * 台风结束时间 + */ + @TableField("END_TIME") + private String endTime; + + /** + * 台风状态 + */ + @TableField("IS_ACTIVE") + private String isActive; +} 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/src/main/java/com/casic/missiles/modular/system/model/sql/RoutePoint.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/RoutePoint.java new file mode 100644 index 0000000..d8dad80 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/RoutePoint.java @@ -0,0 +1,117 @@ +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_route_point") +public class RoutePoint extends Model { + private static final long serialVersionUID = 1L; + + /** + * 台风数据库主键 + *

+ * type = IdType.AUTO 是数据库自增 + */ + @TableId(value = "ID", type = IdType.ASSIGN_ID) + private Long id; + + /** + * 台风ID + */ + @TableField("TYPHOON_ID") + private String typhoonId; + + /** + * 数据更新时间 + */ + @TableField("TIME") + private String time; + + /** + * 台风中心气压,单位【百帕】 + */ + @TableField("CENTER_PRESSURE") + private String centerPressure; + + /** + * 风速,单位【米/每秒】 + */ + @TableField("SPEED") + private String speed; + + /** + * 台风风力等级描述 + */ + @TableField("TYPHOON_TYPE") + private String typhoonType; + + /** + * 台风整体移动速度,单位【公里/小时】 + */ + @TableField("MOVE_SPEED") + private String moveSpeed; + + /** + * 风力,单位【级】 + */ + @TableField("POWER") + private Integer power; + + /** + * 台风未来移动方向 + */ + @TableField("MOVE_DIRECTION") + private String moveDirection; + + /** + * 经度 + */ + @TableField("LNG") + private Double lng; + + /** + * 纬度 + */ + @TableField("LAT") + private Double lat; + + /** + * 12级风力影响半径 + */ + @TableField("RADIUS_12") + private String radius12; + + /** + * 10级风力影响半径 + */ + @TableField("RADIUS_10") + private String radius10; + + /** + * 7级风力影响半径 + */ + @TableField("RADIUS_7") + private String radius7; + + /** + * 台风路线预测 + */ + @TableField("ROUTE_PREDICTION") + private String routePrediction; + + /** + * 中心位置 + */ + @TableField("CENTER_POSITION") + private String centerPosition; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/Typhoon.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/Typhoon.java new file mode 100644 index 0000000..2a88897 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/Typhoon.java @@ -0,0 +1,101 @@ +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_list") +public class Typhoon 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("NAME") + private String name; + /** + * 台风英文代号 + */ + @TableField("ENG_NAME") + private String engName; + /** + * 经度 + */ + @TableField("LNG") + private Double lng; + /** + * 纬度 + */ + @TableField("LAT") + private Double lat; + /** + * 台风风力等级描述 + */ + @TableField("TYPHOON_TYPE") + private String typhoonType; + /** + * 台风中心气压,单位【百帕】 + */ + @TableField("CENTER_PRESSURE") + private String centerPressure; + /** + * 风速,单位【米/每秒】 + */ + @TableField("SPEED") + private String speed; + /** + * 风力,单位【级】 + */ + @TableField("POWER") + private Integer power; + /** + * 台风整体移动速度,单位【公里/小时】 + */ + @TableField("MOVE_SPEED") + private String moveSpeed; + /** + * 台风未来移动方向 + */ + @TableField("MOVE_DIRECTION") + private String moveDirection; + /** + * 10级风力影响半径 + */ + @TableField("RADIUS_10") + private String radius10; + /** + * 7级风力影响半径 + */ + @TableField("RADIUS_7") + private String radius7; + /** + * 数据更新时间 + */ + @TableField("TIME") + private String time; + /** + * 台风是否已消散,1-未消散,0-已消散 + */ + @TableField("IS_ACTIVE") + private String isActive; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/TyphoonDetail.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/TyphoonDetail.java new file mode 100644 index 0000000..6a64023 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/TyphoonDetail.java @@ -0,0 +1,79 @@ +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_detail") +public class TyphoonDetail 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("NAME") + private String name; + + /** + * 台风英文代号 + */ + @TableField("ENG_NAME") + private String engName; + + /** + * 台风告警级别 + */ + @TableField("WARN_LEVEL") + private String warnLevel; + + /** + * 台风中心经度 + */ + @TableField("CENTER_LNG") + private Double centerLng; + + /** + * 台风中心纬度 + */ + @TableField("CENTER_LAT") + private Double centerLat; + + /** + * 台风开始时间 + */ + @TableField("START_TIME") + private String startTime; + + /** + * 台风结束时间 + */ + @TableField("END_TIME") + private String endTime; + + /** + * 台风状态 + */ + @TableField("IS_ACTIVE") + private String isActive; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/ILandPointService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ILandPointService.java new file mode 100644 index 0000000..ae8ccb4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ILandPointService.java @@ -0,0 +1,13 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.model.sql.LandPoint; + +/** + * 台风登陆点数据信息 服务类 + * + * @author a203 + */ +public interface ILandPointService extends IService { + +} 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/src/main/java/com/casic/missiles/modular/system/model/sql/RoutePoint.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/RoutePoint.java new file mode 100644 index 0000000..d8dad80 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/RoutePoint.java @@ -0,0 +1,117 @@ +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_route_point") +public class RoutePoint extends Model { + private static final long serialVersionUID = 1L; + + /** + * 台风数据库主键 + *

+ * type = IdType.AUTO 是数据库自增 + */ + @TableId(value = "ID", type = IdType.ASSIGN_ID) + private Long id; + + /** + * 台风ID + */ + @TableField("TYPHOON_ID") + private String typhoonId; + + /** + * 数据更新时间 + */ + @TableField("TIME") + private String time; + + /** + * 台风中心气压,单位【百帕】 + */ + @TableField("CENTER_PRESSURE") + private String centerPressure; + + /** + * 风速,单位【米/每秒】 + */ + @TableField("SPEED") + private String speed; + + /** + * 台风风力等级描述 + */ + @TableField("TYPHOON_TYPE") + private String typhoonType; + + /** + * 台风整体移动速度,单位【公里/小时】 + */ + @TableField("MOVE_SPEED") + private String moveSpeed; + + /** + * 风力,单位【级】 + */ + @TableField("POWER") + private Integer power; + + /** + * 台风未来移动方向 + */ + @TableField("MOVE_DIRECTION") + private String moveDirection; + + /** + * 经度 + */ + @TableField("LNG") + private Double lng; + + /** + * 纬度 + */ + @TableField("LAT") + private Double lat; + + /** + * 12级风力影响半径 + */ + @TableField("RADIUS_12") + private String radius12; + + /** + * 10级风力影响半径 + */ + @TableField("RADIUS_10") + private String radius10; + + /** + * 7级风力影响半径 + */ + @TableField("RADIUS_7") + private String radius7; + + /** + * 台风路线预测 + */ + @TableField("ROUTE_PREDICTION") + private String routePrediction; + + /** + * 中心位置 + */ + @TableField("CENTER_POSITION") + private String centerPosition; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/Typhoon.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/Typhoon.java new file mode 100644 index 0000000..2a88897 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/Typhoon.java @@ -0,0 +1,101 @@ +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_list") +public class Typhoon 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("NAME") + private String name; + /** + * 台风英文代号 + */ + @TableField("ENG_NAME") + private String engName; + /** + * 经度 + */ + @TableField("LNG") + private Double lng; + /** + * 纬度 + */ + @TableField("LAT") + private Double lat; + /** + * 台风风力等级描述 + */ + @TableField("TYPHOON_TYPE") + private String typhoonType; + /** + * 台风中心气压,单位【百帕】 + */ + @TableField("CENTER_PRESSURE") + private String centerPressure; + /** + * 风速,单位【米/每秒】 + */ + @TableField("SPEED") + private String speed; + /** + * 风力,单位【级】 + */ + @TableField("POWER") + private Integer power; + /** + * 台风整体移动速度,单位【公里/小时】 + */ + @TableField("MOVE_SPEED") + private String moveSpeed; + /** + * 台风未来移动方向 + */ + @TableField("MOVE_DIRECTION") + private String moveDirection; + /** + * 10级风力影响半径 + */ + @TableField("RADIUS_10") + private String radius10; + /** + * 7级风力影响半径 + */ + @TableField("RADIUS_7") + private String radius7; + /** + * 数据更新时间 + */ + @TableField("TIME") + private String time; + /** + * 台风是否已消散,1-未消散,0-已消散 + */ + @TableField("IS_ACTIVE") + private String isActive; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/TyphoonDetail.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/TyphoonDetail.java new file mode 100644 index 0000000..6a64023 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/TyphoonDetail.java @@ -0,0 +1,79 @@ +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_detail") +public class TyphoonDetail 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("NAME") + private String name; + + /** + * 台风英文代号 + */ + @TableField("ENG_NAME") + private String engName; + + /** + * 台风告警级别 + */ + @TableField("WARN_LEVEL") + private String warnLevel; + + /** + * 台风中心经度 + */ + @TableField("CENTER_LNG") + private Double centerLng; + + /** + * 台风中心纬度 + */ + @TableField("CENTER_LAT") + private Double centerLat; + + /** + * 台风开始时间 + */ + @TableField("START_TIME") + private String startTime; + + /** + * 台风结束时间 + */ + @TableField("END_TIME") + private String endTime; + + /** + * 台风状态 + */ + @TableField("IS_ACTIVE") + private String isActive; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/ILandPointService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ILandPointService.java new file mode 100644 index 0000000..ae8ccb4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ILandPointService.java @@ -0,0 +1,13 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.model.sql.LandPoint; + +/** + * 台风登陆点数据信息 服务类 + * + * @author a203 + */ +public interface ILandPointService extends IService { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IOceanService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IOceanService.java new file mode 100644 index 0000000..486b589 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IOceanService.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.OceanDetailDTO; + +/** + * 洋流数据信息 服务类 + * + * @author a203 + */ +public interface IOceanService { + /** + * 查询洋流数据 + * + * @param lng 经度 + * @param lat 纬度 + * @param date 预报起报日期 + * @param days 预报的是几天后,0表示当天,1表示明天,以此类推 + * @param hour 预报的是days的哪一个小时 + * @return {@link OceanDetailDTO} + */ + OceanDetailDTO oceanDetail(double lng, double lat, String date, String days, String hour); +} 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/src/main/java/com/casic/missiles/modular/system/model/sql/RoutePoint.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/RoutePoint.java new file mode 100644 index 0000000..d8dad80 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/RoutePoint.java @@ -0,0 +1,117 @@ +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_route_point") +public class RoutePoint extends Model { + private static final long serialVersionUID = 1L; + + /** + * 台风数据库主键 + *

+ * type = IdType.AUTO 是数据库自增 + */ + @TableId(value = "ID", type = IdType.ASSIGN_ID) + private Long id; + + /** + * 台风ID + */ + @TableField("TYPHOON_ID") + private String typhoonId; + + /** + * 数据更新时间 + */ + @TableField("TIME") + private String time; + + /** + * 台风中心气压,单位【百帕】 + */ + @TableField("CENTER_PRESSURE") + private String centerPressure; + + /** + * 风速,单位【米/每秒】 + */ + @TableField("SPEED") + private String speed; + + /** + * 台风风力等级描述 + */ + @TableField("TYPHOON_TYPE") + private String typhoonType; + + /** + * 台风整体移动速度,单位【公里/小时】 + */ + @TableField("MOVE_SPEED") + private String moveSpeed; + + /** + * 风力,单位【级】 + */ + @TableField("POWER") + private Integer power; + + /** + * 台风未来移动方向 + */ + @TableField("MOVE_DIRECTION") + private String moveDirection; + + /** + * 经度 + */ + @TableField("LNG") + private Double lng; + + /** + * 纬度 + */ + @TableField("LAT") + private Double lat; + + /** + * 12级风力影响半径 + */ + @TableField("RADIUS_12") + private String radius12; + + /** + * 10级风力影响半径 + */ + @TableField("RADIUS_10") + private String radius10; + + /** + * 7级风力影响半径 + */ + @TableField("RADIUS_7") + private String radius7; + + /** + * 台风路线预测 + */ + @TableField("ROUTE_PREDICTION") + private String routePrediction; + + /** + * 中心位置 + */ + @TableField("CENTER_POSITION") + private String centerPosition; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/Typhoon.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/Typhoon.java new file mode 100644 index 0000000..2a88897 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/Typhoon.java @@ -0,0 +1,101 @@ +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_list") +public class Typhoon 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("NAME") + private String name; + /** + * 台风英文代号 + */ + @TableField("ENG_NAME") + private String engName; + /** + * 经度 + */ + @TableField("LNG") + private Double lng; + /** + * 纬度 + */ + @TableField("LAT") + private Double lat; + /** + * 台风风力等级描述 + */ + @TableField("TYPHOON_TYPE") + private String typhoonType; + /** + * 台风中心气压,单位【百帕】 + */ + @TableField("CENTER_PRESSURE") + private String centerPressure; + /** + * 风速,单位【米/每秒】 + */ + @TableField("SPEED") + private String speed; + /** + * 风力,单位【级】 + */ + @TableField("POWER") + private Integer power; + /** + * 台风整体移动速度,单位【公里/小时】 + */ + @TableField("MOVE_SPEED") + private String moveSpeed; + /** + * 台风未来移动方向 + */ + @TableField("MOVE_DIRECTION") + private String moveDirection; + /** + * 10级风力影响半径 + */ + @TableField("RADIUS_10") + private String radius10; + /** + * 7级风力影响半径 + */ + @TableField("RADIUS_7") + private String radius7; + /** + * 数据更新时间 + */ + @TableField("TIME") + private String time; + /** + * 台风是否已消散,1-未消散,0-已消散 + */ + @TableField("IS_ACTIVE") + private String isActive; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/TyphoonDetail.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/TyphoonDetail.java new file mode 100644 index 0000000..6a64023 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/TyphoonDetail.java @@ -0,0 +1,79 @@ +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_detail") +public class TyphoonDetail 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("NAME") + private String name; + + /** + * 台风英文代号 + */ + @TableField("ENG_NAME") + private String engName; + + /** + * 台风告警级别 + */ + @TableField("WARN_LEVEL") + private String warnLevel; + + /** + * 台风中心经度 + */ + @TableField("CENTER_LNG") + private Double centerLng; + + /** + * 台风中心纬度 + */ + @TableField("CENTER_LAT") + private Double centerLat; + + /** + * 台风开始时间 + */ + @TableField("START_TIME") + private String startTime; + + /** + * 台风结束时间 + */ + @TableField("END_TIME") + private String endTime; + + /** + * 台风状态 + */ + @TableField("IS_ACTIVE") + private String isActive; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/ILandPointService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ILandPointService.java new file mode 100644 index 0000000..ae8ccb4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ILandPointService.java @@ -0,0 +1,13 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.model.sql.LandPoint; + +/** + * 台风登陆点数据信息 服务类 + * + * @author a203 + */ +public interface ILandPointService extends IService { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IOceanService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IOceanService.java new file mode 100644 index 0000000..486b589 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IOceanService.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.OceanDetailDTO; + +/** + * 洋流数据信息 服务类 + * + * @author a203 + */ +public interface IOceanService { + /** + * 查询洋流数据 + * + * @param lng 经度 + * @param lat 纬度 + * @param date 预报起报日期 + * @param days 预报的是几天后,0表示当天,1表示明天,以此类推 + * @param hour 预报的是days的哪一个小时 + * @return {@link OceanDetailDTO} + */ + OceanDetailDTO oceanDetail(double lng, double lat, String date, String days, String hour); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRoutePointService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRoutePointService.java new file mode 100644 index 0000000..e4c225f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRoutePointService.java @@ -0,0 +1,13 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.model.sql.RoutePoint; + +/** + * 台风移动点数据信息 服务类 + * + * @author a203 + */ +public interface IRoutePointService extends IService { + +} 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/src/main/java/com/casic/missiles/modular/system/model/sql/RoutePoint.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/RoutePoint.java new file mode 100644 index 0000000..d8dad80 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/RoutePoint.java @@ -0,0 +1,117 @@ +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_route_point") +public class RoutePoint extends Model { + private static final long serialVersionUID = 1L; + + /** + * 台风数据库主键 + *

+ * type = IdType.AUTO 是数据库自增 + */ + @TableId(value = "ID", type = IdType.ASSIGN_ID) + private Long id; + + /** + * 台风ID + */ + @TableField("TYPHOON_ID") + private String typhoonId; + + /** + * 数据更新时间 + */ + @TableField("TIME") + private String time; + + /** + * 台风中心气压,单位【百帕】 + */ + @TableField("CENTER_PRESSURE") + private String centerPressure; + + /** + * 风速,单位【米/每秒】 + */ + @TableField("SPEED") + private String speed; + + /** + * 台风风力等级描述 + */ + @TableField("TYPHOON_TYPE") + private String typhoonType; + + /** + * 台风整体移动速度,单位【公里/小时】 + */ + @TableField("MOVE_SPEED") + private String moveSpeed; + + /** + * 风力,单位【级】 + */ + @TableField("POWER") + private Integer power; + + /** + * 台风未来移动方向 + */ + @TableField("MOVE_DIRECTION") + private String moveDirection; + + /** + * 经度 + */ + @TableField("LNG") + private Double lng; + + /** + * 纬度 + */ + @TableField("LAT") + private Double lat; + + /** + * 12级风力影响半径 + */ + @TableField("RADIUS_12") + private String radius12; + + /** + * 10级风力影响半径 + */ + @TableField("RADIUS_10") + private String radius10; + + /** + * 7级风力影响半径 + */ + @TableField("RADIUS_7") + private String radius7; + + /** + * 台风路线预测 + */ + @TableField("ROUTE_PREDICTION") + private String routePrediction; + + /** + * 中心位置 + */ + @TableField("CENTER_POSITION") + private String centerPosition; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/Typhoon.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/Typhoon.java new file mode 100644 index 0000000..2a88897 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/Typhoon.java @@ -0,0 +1,101 @@ +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_list") +public class Typhoon 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("NAME") + private String name; + /** + * 台风英文代号 + */ + @TableField("ENG_NAME") + private String engName; + /** + * 经度 + */ + @TableField("LNG") + private Double lng; + /** + * 纬度 + */ + @TableField("LAT") + private Double lat; + /** + * 台风风力等级描述 + */ + @TableField("TYPHOON_TYPE") + private String typhoonType; + /** + * 台风中心气压,单位【百帕】 + */ + @TableField("CENTER_PRESSURE") + private String centerPressure; + /** + * 风速,单位【米/每秒】 + */ + @TableField("SPEED") + private String speed; + /** + * 风力,单位【级】 + */ + @TableField("POWER") + private Integer power; + /** + * 台风整体移动速度,单位【公里/小时】 + */ + @TableField("MOVE_SPEED") + private String moveSpeed; + /** + * 台风未来移动方向 + */ + @TableField("MOVE_DIRECTION") + private String moveDirection; + /** + * 10级风力影响半径 + */ + @TableField("RADIUS_10") + private String radius10; + /** + * 7级风力影响半径 + */ + @TableField("RADIUS_7") + private String radius7; + /** + * 数据更新时间 + */ + @TableField("TIME") + private String time; + /** + * 台风是否已消散,1-未消散,0-已消散 + */ + @TableField("IS_ACTIVE") + private String isActive; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/TyphoonDetail.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/TyphoonDetail.java new file mode 100644 index 0000000..6a64023 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/TyphoonDetail.java @@ -0,0 +1,79 @@ +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_detail") +public class TyphoonDetail 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("NAME") + private String name; + + /** + * 台风英文代号 + */ + @TableField("ENG_NAME") + private String engName; + + /** + * 台风告警级别 + */ + @TableField("WARN_LEVEL") + private String warnLevel; + + /** + * 台风中心经度 + */ + @TableField("CENTER_LNG") + private Double centerLng; + + /** + * 台风中心纬度 + */ + @TableField("CENTER_LAT") + private Double centerLat; + + /** + * 台风开始时间 + */ + @TableField("START_TIME") + private String startTime; + + /** + * 台风结束时间 + */ + @TableField("END_TIME") + private String endTime; + + /** + * 台风状态 + */ + @TableField("IS_ACTIVE") + private String isActive; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/ILandPointService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ILandPointService.java new file mode 100644 index 0000000..ae8ccb4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ILandPointService.java @@ -0,0 +1,13 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.model.sql.LandPoint; + +/** + * 台风登陆点数据信息 服务类 + * + * @author a203 + */ +public interface ILandPointService extends IService { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IOceanService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IOceanService.java new file mode 100644 index 0000000..486b589 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IOceanService.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.OceanDetailDTO; + +/** + * 洋流数据信息 服务类 + * + * @author a203 + */ +public interface IOceanService { + /** + * 查询洋流数据 + * + * @param lng 经度 + * @param lat 纬度 + * @param date 预报起报日期 + * @param days 预报的是几天后,0表示当天,1表示明天,以此类推 + * @param hour 预报的是days的哪一个小时 + * @return {@link OceanDetailDTO} + */ + OceanDetailDTO oceanDetail(double lng, double lat, String date, String days, String hour); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRoutePointService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRoutePointService.java new file mode 100644 index 0000000..e4c225f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRoutePointService.java @@ -0,0 +1,13 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.model.sql.RoutePoint; + +/** + * 台风移动点数据信息 服务类 + * + * @author a203 + */ +public interface IRoutePointService extends IService { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonDetailService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonDetailService.java new file mode 100644 index 0000000..8db2e65 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonDetailService.java @@ -0,0 +1,13 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.model.sql.TyphoonDetail; + +/** + * 台风详情数据信息 服务类 + * + * @author a203 + */ +public interface ITyphoonDetailService extends IService { + +} 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/src/main/java/com/casic/missiles/modular/system/model/sql/RoutePoint.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/RoutePoint.java new file mode 100644 index 0000000..d8dad80 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/RoutePoint.java @@ -0,0 +1,117 @@ +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_route_point") +public class RoutePoint extends Model { + private static final long serialVersionUID = 1L; + + /** + * 台风数据库主键 + *

+ * type = IdType.AUTO 是数据库自增 + */ + @TableId(value = "ID", type = IdType.ASSIGN_ID) + private Long id; + + /** + * 台风ID + */ + @TableField("TYPHOON_ID") + private String typhoonId; + + /** + * 数据更新时间 + */ + @TableField("TIME") + private String time; + + /** + * 台风中心气压,单位【百帕】 + */ + @TableField("CENTER_PRESSURE") + private String centerPressure; + + /** + * 风速,单位【米/每秒】 + */ + @TableField("SPEED") + private String speed; + + /** + * 台风风力等级描述 + */ + @TableField("TYPHOON_TYPE") + private String typhoonType; + + /** + * 台风整体移动速度,单位【公里/小时】 + */ + @TableField("MOVE_SPEED") + private String moveSpeed; + + /** + * 风力,单位【级】 + */ + @TableField("POWER") + private Integer power; + + /** + * 台风未来移动方向 + */ + @TableField("MOVE_DIRECTION") + private String moveDirection; + + /** + * 经度 + */ + @TableField("LNG") + private Double lng; + + /** + * 纬度 + */ + @TableField("LAT") + private Double lat; + + /** + * 12级风力影响半径 + */ + @TableField("RADIUS_12") + private String radius12; + + /** + * 10级风力影响半径 + */ + @TableField("RADIUS_10") + private String radius10; + + /** + * 7级风力影响半径 + */ + @TableField("RADIUS_7") + private String radius7; + + /** + * 台风路线预测 + */ + @TableField("ROUTE_PREDICTION") + private String routePrediction; + + /** + * 中心位置 + */ + @TableField("CENTER_POSITION") + private String centerPosition; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/Typhoon.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/Typhoon.java new file mode 100644 index 0000000..2a88897 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/Typhoon.java @@ -0,0 +1,101 @@ +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_list") +public class Typhoon 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("NAME") + private String name; + /** + * 台风英文代号 + */ + @TableField("ENG_NAME") + private String engName; + /** + * 经度 + */ + @TableField("LNG") + private Double lng; + /** + * 纬度 + */ + @TableField("LAT") + private Double lat; + /** + * 台风风力等级描述 + */ + @TableField("TYPHOON_TYPE") + private String typhoonType; + /** + * 台风中心气压,单位【百帕】 + */ + @TableField("CENTER_PRESSURE") + private String centerPressure; + /** + * 风速,单位【米/每秒】 + */ + @TableField("SPEED") + private String speed; + /** + * 风力,单位【级】 + */ + @TableField("POWER") + private Integer power; + /** + * 台风整体移动速度,单位【公里/小时】 + */ + @TableField("MOVE_SPEED") + private String moveSpeed; + /** + * 台风未来移动方向 + */ + @TableField("MOVE_DIRECTION") + private String moveDirection; + /** + * 10级风力影响半径 + */ + @TableField("RADIUS_10") + private String radius10; + /** + * 7级风力影响半径 + */ + @TableField("RADIUS_7") + private String radius7; + /** + * 数据更新时间 + */ + @TableField("TIME") + private String time; + /** + * 台风是否已消散,1-未消散,0-已消散 + */ + @TableField("IS_ACTIVE") + private String isActive; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/TyphoonDetail.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/TyphoonDetail.java new file mode 100644 index 0000000..6a64023 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/TyphoonDetail.java @@ -0,0 +1,79 @@ +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_detail") +public class TyphoonDetail 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("NAME") + private String name; + + /** + * 台风英文代号 + */ + @TableField("ENG_NAME") + private String engName; + + /** + * 台风告警级别 + */ + @TableField("WARN_LEVEL") + private String warnLevel; + + /** + * 台风中心经度 + */ + @TableField("CENTER_LNG") + private Double centerLng; + + /** + * 台风中心纬度 + */ + @TableField("CENTER_LAT") + private Double centerLat; + + /** + * 台风开始时间 + */ + @TableField("START_TIME") + private String startTime; + + /** + * 台风结束时间 + */ + @TableField("END_TIME") + private String endTime; + + /** + * 台风状态 + */ + @TableField("IS_ACTIVE") + private String isActive; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/ILandPointService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ILandPointService.java new file mode 100644 index 0000000..ae8ccb4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ILandPointService.java @@ -0,0 +1,13 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.model.sql.LandPoint; + +/** + * 台风登陆点数据信息 服务类 + * + * @author a203 + */ +public interface ILandPointService extends IService { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IOceanService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IOceanService.java new file mode 100644 index 0000000..486b589 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IOceanService.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.OceanDetailDTO; + +/** + * 洋流数据信息 服务类 + * + * @author a203 + */ +public interface IOceanService { + /** + * 查询洋流数据 + * + * @param lng 经度 + * @param lat 纬度 + * @param date 预报起报日期 + * @param days 预报的是几天后,0表示当天,1表示明天,以此类推 + * @param hour 预报的是days的哪一个小时 + * @return {@link OceanDetailDTO} + */ + OceanDetailDTO oceanDetail(double lng, double lat, String date, String days, String hour); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRoutePointService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRoutePointService.java new file mode 100644 index 0000000..e4c225f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRoutePointService.java @@ -0,0 +1,13 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.model.sql.RoutePoint; + +/** + * 台风移动点数据信息 服务类 + * + * @author a203 + */ +public interface IRoutePointService extends IService { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonDetailService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonDetailService.java new file mode 100644 index 0000000..8db2e65 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonDetailService.java @@ -0,0 +1,13 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.model.sql.TyphoonDetail; + +/** + * 台风详情数据信息 服务类 + * + * @author a203 + */ +public interface ITyphoonDetailService extends IService { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonService.java new file mode 100644 index 0000000..2daf133 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonService.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.dto.TyphoonDTO; +import com.casic.missiles.modular.system.dto.TyphoonDetailDTO; +import com.casic.missiles.modular.system.model.sql.Typhoon; + +import java.util.List; + +/** + * 台风列表数据信息 服务类 + * + * @author a203 + */ +public interface ITyphoonService extends IService { + /** + * 保存台风列表 + */ + void saveTyphoon(); + + /***开放接口给内网服务器使用**************************************/ + + /** + * 查询台风列表 + * + * @return {@link List } + */ + List currentTyphoonList(); + + /** + * 查询台风详情 + * + * @param typhoonId 台风ID + * @return {@link TyphoonDetailDTO} + */ + TyphoonDetailDTO typhoonDetail(String typhoonId); +} 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/src/main/java/com/casic/missiles/modular/system/model/sql/RoutePoint.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/RoutePoint.java new file mode 100644 index 0000000..d8dad80 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/RoutePoint.java @@ -0,0 +1,117 @@ +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_route_point") +public class RoutePoint extends Model { + private static final long serialVersionUID = 1L; + + /** + * 台风数据库主键 + *

+ * type = IdType.AUTO 是数据库自增 + */ + @TableId(value = "ID", type = IdType.ASSIGN_ID) + private Long id; + + /** + * 台风ID + */ + @TableField("TYPHOON_ID") + private String typhoonId; + + /** + * 数据更新时间 + */ + @TableField("TIME") + private String time; + + /** + * 台风中心气压,单位【百帕】 + */ + @TableField("CENTER_PRESSURE") + private String centerPressure; + + /** + * 风速,单位【米/每秒】 + */ + @TableField("SPEED") + private String speed; + + /** + * 台风风力等级描述 + */ + @TableField("TYPHOON_TYPE") + private String typhoonType; + + /** + * 台风整体移动速度,单位【公里/小时】 + */ + @TableField("MOVE_SPEED") + private String moveSpeed; + + /** + * 风力,单位【级】 + */ + @TableField("POWER") + private Integer power; + + /** + * 台风未来移动方向 + */ + @TableField("MOVE_DIRECTION") + private String moveDirection; + + /** + * 经度 + */ + @TableField("LNG") + private Double lng; + + /** + * 纬度 + */ + @TableField("LAT") + private Double lat; + + /** + * 12级风力影响半径 + */ + @TableField("RADIUS_12") + private String radius12; + + /** + * 10级风力影响半径 + */ + @TableField("RADIUS_10") + private String radius10; + + /** + * 7级风力影响半径 + */ + @TableField("RADIUS_7") + private String radius7; + + /** + * 台风路线预测 + */ + @TableField("ROUTE_PREDICTION") + private String routePrediction; + + /** + * 中心位置 + */ + @TableField("CENTER_POSITION") + private String centerPosition; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/Typhoon.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/Typhoon.java new file mode 100644 index 0000000..2a88897 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/Typhoon.java @@ -0,0 +1,101 @@ +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_list") +public class Typhoon 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("NAME") + private String name; + /** + * 台风英文代号 + */ + @TableField("ENG_NAME") + private String engName; + /** + * 经度 + */ + @TableField("LNG") + private Double lng; + /** + * 纬度 + */ + @TableField("LAT") + private Double lat; + /** + * 台风风力等级描述 + */ + @TableField("TYPHOON_TYPE") + private String typhoonType; + /** + * 台风中心气压,单位【百帕】 + */ + @TableField("CENTER_PRESSURE") + private String centerPressure; + /** + * 风速,单位【米/每秒】 + */ + @TableField("SPEED") + private String speed; + /** + * 风力,单位【级】 + */ + @TableField("POWER") + private Integer power; + /** + * 台风整体移动速度,单位【公里/小时】 + */ + @TableField("MOVE_SPEED") + private String moveSpeed; + /** + * 台风未来移动方向 + */ + @TableField("MOVE_DIRECTION") + private String moveDirection; + /** + * 10级风力影响半径 + */ + @TableField("RADIUS_10") + private String radius10; + /** + * 7级风力影响半径 + */ + @TableField("RADIUS_7") + private String radius7; + /** + * 数据更新时间 + */ + @TableField("TIME") + private String time; + /** + * 台风是否已消散,1-未消散,0-已消散 + */ + @TableField("IS_ACTIVE") + private String isActive; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/TyphoonDetail.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/TyphoonDetail.java new file mode 100644 index 0000000..6a64023 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/TyphoonDetail.java @@ -0,0 +1,79 @@ +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_detail") +public class TyphoonDetail 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("NAME") + private String name; + + /** + * 台风英文代号 + */ + @TableField("ENG_NAME") + private String engName; + + /** + * 台风告警级别 + */ + @TableField("WARN_LEVEL") + private String warnLevel; + + /** + * 台风中心经度 + */ + @TableField("CENTER_LNG") + private Double centerLng; + + /** + * 台风中心纬度 + */ + @TableField("CENTER_LAT") + private Double centerLat; + + /** + * 台风开始时间 + */ + @TableField("START_TIME") + private String startTime; + + /** + * 台风结束时间 + */ + @TableField("END_TIME") + private String endTime; + + /** + * 台风状态 + */ + @TableField("IS_ACTIVE") + private String isActive; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/ILandPointService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ILandPointService.java new file mode 100644 index 0000000..ae8ccb4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ILandPointService.java @@ -0,0 +1,13 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.model.sql.LandPoint; + +/** + * 台风登陆点数据信息 服务类 + * + * @author a203 + */ +public interface ILandPointService extends IService { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IOceanService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IOceanService.java new file mode 100644 index 0000000..486b589 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IOceanService.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.OceanDetailDTO; + +/** + * 洋流数据信息 服务类 + * + * @author a203 + */ +public interface IOceanService { + /** + * 查询洋流数据 + * + * @param lng 经度 + * @param lat 纬度 + * @param date 预报起报日期 + * @param days 预报的是几天后,0表示当天,1表示明天,以此类推 + * @param hour 预报的是days的哪一个小时 + * @return {@link OceanDetailDTO} + */ + OceanDetailDTO oceanDetail(double lng, double lat, String date, String days, String hour); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRoutePointService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRoutePointService.java new file mode 100644 index 0000000..e4c225f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRoutePointService.java @@ -0,0 +1,13 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.model.sql.RoutePoint; + +/** + * 台风移动点数据信息 服务类 + * + * @author a203 + */ +public interface IRoutePointService extends IService { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonDetailService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonDetailService.java new file mode 100644 index 0000000..8db2e65 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonDetailService.java @@ -0,0 +1,13 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.model.sql.TyphoonDetail; + +/** + * 台风详情数据信息 服务类 + * + * @author a203 + */ +public interface ITyphoonDetailService extends IService { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonService.java new file mode 100644 index 0000000..2daf133 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonService.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.dto.TyphoonDTO; +import com.casic.missiles.modular.system.dto.TyphoonDetailDTO; +import com.casic.missiles.modular.system.model.sql.Typhoon; + +import java.util.List; + +/** + * 台风列表数据信息 服务类 + * + * @author a203 + */ +public interface ITyphoonService extends IService { + /** + * 保存台风列表 + */ + void saveTyphoon(); + + /***开放接口给内网服务器使用**************************************/ + + /** + * 查询台风列表 + * + * @return {@link List } + */ + List currentTyphoonList(); + + /** + * 查询台风详情 + * + * @param typhoonId 台风ID + * @return {@link TyphoonDetailDTO} + */ + TyphoonDetailDTO typhoonDetail(String typhoonId); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/LandPointServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/LandPointServiceImpl.java new file mode 100644 index 0000000..5cff515 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/LandPointServiceImpl.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.LandPointMapper; +import com.casic.missiles.modular.system.model.sql.LandPoint; +import com.casic.missiles.modular.system.service.ILandPointService; +import org.springframework.stereotype.Service; + +/** + * 台风数据信息 服务实现类 + * + * @author a203 + */ + +@Service +public class LandPointServiceImpl extends ServiceImpl implements ILandPointService { + + public LandPointServiceImpl() { + + } +} 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/src/main/java/com/casic/missiles/modular/system/model/sql/RoutePoint.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/RoutePoint.java new file mode 100644 index 0000000..d8dad80 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/RoutePoint.java @@ -0,0 +1,117 @@ +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_route_point") +public class RoutePoint extends Model { + private static final long serialVersionUID = 1L; + + /** + * 台风数据库主键 + *

+ * type = IdType.AUTO 是数据库自增 + */ + @TableId(value = "ID", type = IdType.ASSIGN_ID) + private Long id; + + /** + * 台风ID + */ + @TableField("TYPHOON_ID") + private String typhoonId; + + /** + * 数据更新时间 + */ + @TableField("TIME") + private String time; + + /** + * 台风中心气压,单位【百帕】 + */ + @TableField("CENTER_PRESSURE") + private String centerPressure; + + /** + * 风速,单位【米/每秒】 + */ + @TableField("SPEED") + private String speed; + + /** + * 台风风力等级描述 + */ + @TableField("TYPHOON_TYPE") + private String typhoonType; + + /** + * 台风整体移动速度,单位【公里/小时】 + */ + @TableField("MOVE_SPEED") + private String moveSpeed; + + /** + * 风力,单位【级】 + */ + @TableField("POWER") + private Integer power; + + /** + * 台风未来移动方向 + */ + @TableField("MOVE_DIRECTION") + private String moveDirection; + + /** + * 经度 + */ + @TableField("LNG") + private Double lng; + + /** + * 纬度 + */ + @TableField("LAT") + private Double lat; + + /** + * 12级风力影响半径 + */ + @TableField("RADIUS_12") + private String radius12; + + /** + * 10级风力影响半径 + */ + @TableField("RADIUS_10") + private String radius10; + + /** + * 7级风力影响半径 + */ + @TableField("RADIUS_7") + private String radius7; + + /** + * 台风路线预测 + */ + @TableField("ROUTE_PREDICTION") + private String routePrediction; + + /** + * 中心位置 + */ + @TableField("CENTER_POSITION") + private String centerPosition; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/Typhoon.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/Typhoon.java new file mode 100644 index 0000000..2a88897 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/Typhoon.java @@ -0,0 +1,101 @@ +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_list") +public class Typhoon 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("NAME") + private String name; + /** + * 台风英文代号 + */ + @TableField("ENG_NAME") + private String engName; + /** + * 经度 + */ + @TableField("LNG") + private Double lng; + /** + * 纬度 + */ + @TableField("LAT") + private Double lat; + /** + * 台风风力等级描述 + */ + @TableField("TYPHOON_TYPE") + private String typhoonType; + /** + * 台风中心气压,单位【百帕】 + */ + @TableField("CENTER_PRESSURE") + private String centerPressure; + /** + * 风速,单位【米/每秒】 + */ + @TableField("SPEED") + private String speed; + /** + * 风力,单位【级】 + */ + @TableField("POWER") + private Integer power; + /** + * 台风整体移动速度,单位【公里/小时】 + */ + @TableField("MOVE_SPEED") + private String moveSpeed; + /** + * 台风未来移动方向 + */ + @TableField("MOVE_DIRECTION") + private String moveDirection; + /** + * 10级风力影响半径 + */ + @TableField("RADIUS_10") + private String radius10; + /** + * 7级风力影响半径 + */ + @TableField("RADIUS_7") + private String radius7; + /** + * 数据更新时间 + */ + @TableField("TIME") + private String time; + /** + * 台风是否已消散,1-未消散,0-已消散 + */ + @TableField("IS_ACTIVE") + private String isActive; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/TyphoonDetail.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/TyphoonDetail.java new file mode 100644 index 0000000..6a64023 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/TyphoonDetail.java @@ -0,0 +1,79 @@ +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_detail") +public class TyphoonDetail 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("NAME") + private String name; + + /** + * 台风英文代号 + */ + @TableField("ENG_NAME") + private String engName; + + /** + * 台风告警级别 + */ + @TableField("WARN_LEVEL") + private String warnLevel; + + /** + * 台风中心经度 + */ + @TableField("CENTER_LNG") + private Double centerLng; + + /** + * 台风中心纬度 + */ + @TableField("CENTER_LAT") + private Double centerLat; + + /** + * 台风开始时间 + */ + @TableField("START_TIME") + private String startTime; + + /** + * 台风结束时间 + */ + @TableField("END_TIME") + private String endTime; + + /** + * 台风状态 + */ + @TableField("IS_ACTIVE") + private String isActive; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/ILandPointService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ILandPointService.java new file mode 100644 index 0000000..ae8ccb4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ILandPointService.java @@ -0,0 +1,13 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.model.sql.LandPoint; + +/** + * 台风登陆点数据信息 服务类 + * + * @author a203 + */ +public interface ILandPointService extends IService { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IOceanService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IOceanService.java new file mode 100644 index 0000000..486b589 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IOceanService.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.OceanDetailDTO; + +/** + * 洋流数据信息 服务类 + * + * @author a203 + */ +public interface IOceanService { + /** + * 查询洋流数据 + * + * @param lng 经度 + * @param lat 纬度 + * @param date 预报起报日期 + * @param days 预报的是几天后,0表示当天,1表示明天,以此类推 + * @param hour 预报的是days的哪一个小时 + * @return {@link OceanDetailDTO} + */ + OceanDetailDTO oceanDetail(double lng, double lat, String date, String days, String hour); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRoutePointService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRoutePointService.java new file mode 100644 index 0000000..e4c225f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRoutePointService.java @@ -0,0 +1,13 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.model.sql.RoutePoint; + +/** + * 台风移动点数据信息 服务类 + * + * @author a203 + */ +public interface IRoutePointService extends IService { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonDetailService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonDetailService.java new file mode 100644 index 0000000..8db2e65 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonDetailService.java @@ -0,0 +1,13 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.model.sql.TyphoonDetail; + +/** + * 台风详情数据信息 服务类 + * + * @author a203 + */ +public interface ITyphoonDetailService extends IService { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonService.java new file mode 100644 index 0000000..2daf133 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonService.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.dto.TyphoonDTO; +import com.casic.missiles.modular.system.dto.TyphoonDetailDTO; +import com.casic.missiles.modular.system.model.sql.Typhoon; + +import java.util.List; + +/** + * 台风列表数据信息 服务类 + * + * @author a203 + */ +public interface ITyphoonService extends IService { + /** + * 保存台风列表 + */ + void saveTyphoon(); + + /***开放接口给内网服务器使用**************************************/ + + /** + * 查询台风列表 + * + * @return {@link List } + */ + List currentTyphoonList(); + + /** + * 查询台风详情 + * + * @param typhoonId 台风ID + * @return {@link TyphoonDetailDTO} + */ + TyphoonDetailDTO typhoonDetail(String typhoonId); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/LandPointServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/LandPointServiceImpl.java new file mode 100644 index 0000000..5cff515 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/LandPointServiceImpl.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.LandPointMapper; +import com.casic.missiles.modular.system.model.sql.LandPoint; +import com.casic.missiles.modular.system.service.ILandPointService; +import org.springframework.stereotype.Service; + +/** + * 台风数据信息 服务实现类 + * + * @author a203 + */ + +@Service +public class LandPointServiceImpl extends ServiceImpl implements ILandPointService { + + public LandPointServiceImpl() { + + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/OceanServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/OceanServiceImpl.java new file mode 100644 index 0000000..4416594 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/OceanServiceImpl.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.TypeReference; +import com.casic.missiles.modular.system.dto.OceanDetailDTO; +import com.casic.missiles.modular.system.model.remote.OceanDetailModel; +import com.casic.missiles.modular.system.service.IOceanService; +import com.casic.missiles.modular.system.utils.HttpRequestHelper; +import org.springframework.stereotype.Service; + +/** + * 洋流数据信息 服务实现类 + * + * @author a203 + */ + +@Service +public class OceanServiceImpl implements IOceanService { + + private static final String SUCCESS_CODE = "0"; + + public OceanServiceImpl() { + + } + + @Override + public OceanDetailDTO oceanDetail(double lng, double lat, String date, String days, String hour) { + String oceanData = HttpRequestHelper.obtainOceanData(lng, lat, date, days, hour); + /** + * 解析洋流数据返回给前端 + * */ + if (SUCCESS_CODE.equals(HttpRequestHelper.getOceanCode(oceanData))) { + OceanDetailModel remoteData = JSON.parseObject(oceanData, new TypeReference() { + }); + if (remoteData == null) { + return null; + } + return new OceanDetailDTO(remoteData); + } + return null; + } +} 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/src/main/java/com/casic/missiles/modular/system/model/sql/RoutePoint.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/RoutePoint.java new file mode 100644 index 0000000..d8dad80 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/RoutePoint.java @@ -0,0 +1,117 @@ +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_route_point") +public class RoutePoint extends Model { + private static final long serialVersionUID = 1L; + + /** + * 台风数据库主键 + *

+ * type = IdType.AUTO 是数据库自增 + */ + @TableId(value = "ID", type = IdType.ASSIGN_ID) + private Long id; + + /** + * 台风ID + */ + @TableField("TYPHOON_ID") + private String typhoonId; + + /** + * 数据更新时间 + */ + @TableField("TIME") + private String time; + + /** + * 台风中心气压,单位【百帕】 + */ + @TableField("CENTER_PRESSURE") + private String centerPressure; + + /** + * 风速,单位【米/每秒】 + */ + @TableField("SPEED") + private String speed; + + /** + * 台风风力等级描述 + */ + @TableField("TYPHOON_TYPE") + private String typhoonType; + + /** + * 台风整体移动速度,单位【公里/小时】 + */ + @TableField("MOVE_SPEED") + private String moveSpeed; + + /** + * 风力,单位【级】 + */ + @TableField("POWER") + private Integer power; + + /** + * 台风未来移动方向 + */ + @TableField("MOVE_DIRECTION") + private String moveDirection; + + /** + * 经度 + */ + @TableField("LNG") + private Double lng; + + /** + * 纬度 + */ + @TableField("LAT") + private Double lat; + + /** + * 12级风力影响半径 + */ + @TableField("RADIUS_12") + private String radius12; + + /** + * 10级风力影响半径 + */ + @TableField("RADIUS_10") + private String radius10; + + /** + * 7级风力影响半径 + */ + @TableField("RADIUS_7") + private String radius7; + + /** + * 台风路线预测 + */ + @TableField("ROUTE_PREDICTION") + private String routePrediction; + + /** + * 中心位置 + */ + @TableField("CENTER_POSITION") + private String centerPosition; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/Typhoon.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/Typhoon.java new file mode 100644 index 0000000..2a88897 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/Typhoon.java @@ -0,0 +1,101 @@ +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_list") +public class Typhoon 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("NAME") + private String name; + /** + * 台风英文代号 + */ + @TableField("ENG_NAME") + private String engName; + /** + * 经度 + */ + @TableField("LNG") + private Double lng; + /** + * 纬度 + */ + @TableField("LAT") + private Double lat; + /** + * 台风风力等级描述 + */ + @TableField("TYPHOON_TYPE") + private String typhoonType; + /** + * 台风中心气压,单位【百帕】 + */ + @TableField("CENTER_PRESSURE") + private String centerPressure; + /** + * 风速,单位【米/每秒】 + */ + @TableField("SPEED") + private String speed; + /** + * 风力,单位【级】 + */ + @TableField("POWER") + private Integer power; + /** + * 台风整体移动速度,单位【公里/小时】 + */ + @TableField("MOVE_SPEED") + private String moveSpeed; + /** + * 台风未来移动方向 + */ + @TableField("MOVE_DIRECTION") + private String moveDirection; + /** + * 10级风力影响半径 + */ + @TableField("RADIUS_10") + private String radius10; + /** + * 7级风力影响半径 + */ + @TableField("RADIUS_7") + private String radius7; + /** + * 数据更新时间 + */ + @TableField("TIME") + private String time; + /** + * 台风是否已消散,1-未消散,0-已消散 + */ + @TableField("IS_ACTIVE") + private String isActive; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/TyphoonDetail.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/TyphoonDetail.java new file mode 100644 index 0000000..6a64023 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/TyphoonDetail.java @@ -0,0 +1,79 @@ +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_detail") +public class TyphoonDetail 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("NAME") + private String name; + + /** + * 台风英文代号 + */ + @TableField("ENG_NAME") + private String engName; + + /** + * 台风告警级别 + */ + @TableField("WARN_LEVEL") + private String warnLevel; + + /** + * 台风中心经度 + */ + @TableField("CENTER_LNG") + private Double centerLng; + + /** + * 台风中心纬度 + */ + @TableField("CENTER_LAT") + private Double centerLat; + + /** + * 台风开始时间 + */ + @TableField("START_TIME") + private String startTime; + + /** + * 台风结束时间 + */ + @TableField("END_TIME") + private String endTime; + + /** + * 台风状态 + */ + @TableField("IS_ACTIVE") + private String isActive; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/ILandPointService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ILandPointService.java new file mode 100644 index 0000000..ae8ccb4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ILandPointService.java @@ -0,0 +1,13 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.model.sql.LandPoint; + +/** + * 台风登陆点数据信息 服务类 + * + * @author a203 + */ +public interface ILandPointService extends IService { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IOceanService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IOceanService.java new file mode 100644 index 0000000..486b589 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IOceanService.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.OceanDetailDTO; + +/** + * 洋流数据信息 服务类 + * + * @author a203 + */ +public interface IOceanService { + /** + * 查询洋流数据 + * + * @param lng 经度 + * @param lat 纬度 + * @param date 预报起报日期 + * @param days 预报的是几天后,0表示当天,1表示明天,以此类推 + * @param hour 预报的是days的哪一个小时 + * @return {@link OceanDetailDTO} + */ + OceanDetailDTO oceanDetail(double lng, double lat, String date, String days, String hour); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRoutePointService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRoutePointService.java new file mode 100644 index 0000000..e4c225f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRoutePointService.java @@ -0,0 +1,13 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.model.sql.RoutePoint; + +/** + * 台风移动点数据信息 服务类 + * + * @author a203 + */ +public interface IRoutePointService extends IService { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonDetailService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonDetailService.java new file mode 100644 index 0000000..8db2e65 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonDetailService.java @@ -0,0 +1,13 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.model.sql.TyphoonDetail; + +/** + * 台风详情数据信息 服务类 + * + * @author a203 + */ +public interface ITyphoonDetailService extends IService { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonService.java new file mode 100644 index 0000000..2daf133 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonService.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.dto.TyphoonDTO; +import com.casic.missiles.modular.system.dto.TyphoonDetailDTO; +import com.casic.missiles.modular.system.model.sql.Typhoon; + +import java.util.List; + +/** + * 台风列表数据信息 服务类 + * + * @author a203 + */ +public interface ITyphoonService extends IService { + /** + * 保存台风列表 + */ + void saveTyphoon(); + + /***开放接口给内网服务器使用**************************************/ + + /** + * 查询台风列表 + * + * @return {@link List } + */ + List currentTyphoonList(); + + /** + * 查询台风详情 + * + * @param typhoonId 台风ID + * @return {@link TyphoonDetailDTO} + */ + TyphoonDetailDTO typhoonDetail(String typhoonId); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/LandPointServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/LandPointServiceImpl.java new file mode 100644 index 0000000..5cff515 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/LandPointServiceImpl.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.LandPointMapper; +import com.casic.missiles.modular.system.model.sql.LandPoint; +import com.casic.missiles.modular.system.service.ILandPointService; +import org.springframework.stereotype.Service; + +/** + * 台风数据信息 服务实现类 + * + * @author a203 + */ + +@Service +public class LandPointServiceImpl extends ServiceImpl implements ILandPointService { + + public LandPointServiceImpl() { + + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/OceanServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/OceanServiceImpl.java new file mode 100644 index 0000000..4416594 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/OceanServiceImpl.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.TypeReference; +import com.casic.missiles.modular.system.dto.OceanDetailDTO; +import com.casic.missiles.modular.system.model.remote.OceanDetailModel; +import com.casic.missiles.modular.system.service.IOceanService; +import com.casic.missiles.modular.system.utils.HttpRequestHelper; +import org.springframework.stereotype.Service; + +/** + * 洋流数据信息 服务实现类 + * + * @author a203 + */ + +@Service +public class OceanServiceImpl implements IOceanService { + + private static final String SUCCESS_CODE = "0"; + + public OceanServiceImpl() { + + } + + @Override + public OceanDetailDTO oceanDetail(double lng, double lat, String date, String days, String hour) { + String oceanData = HttpRequestHelper.obtainOceanData(lng, lat, date, days, hour); + /** + * 解析洋流数据返回给前端 + * */ + if (SUCCESS_CODE.equals(HttpRequestHelper.getOceanCode(oceanData))) { + OceanDetailModel remoteData = JSON.parseObject(oceanData, new TypeReference() { + }); + if (remoteData == null) { + return null; + } + return new OceanDetailDTO(remoteData); + } + return null; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RoutePointServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RoutePointServiceImpl.java new file mode 100644 index 0000000..7fb4bdd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RoutePointServiceImpl.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RoutePointMapper; +import com.casic.missiles.modular.system.model.sql.RoutePoint; +import com.casic.missiles.modular.system.service.IRoutePointService; +import org.springframework.stereotype.Service; + +/** + * 台风数据信息 服务实现类 + * + * @author a203 + */ + +@Service +public class RoutePointServiceImpl extends ServiceImpl implements IRoutePointService { + + public RoutePointServiceImpl() { + + } +} 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/src/main/java/com/casic/missiles/modular/system/model/sql/RoutePoint.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/RoutePoint.java new file mode 100644 index 0000000..d8dad80 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/RoutePoint.java @@ -0,0 +1,117 @@ +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_route_point") +public class RoutePoint extends Model { + private static final long serialVersionUID = 1L; + + /** + * 台风数据库主键 + *

+ * type = IdType.AUTO 是数据库自增 + */ + @TableId(value = "ID", type = IdType.ASSIGN_ID) + private Long id; + + /** + * 台风ID + */ + @TableField("TYPHOON_ID") + private String typhoonId; + + /** + * 数据更新时间 + */ + @TableField("TIME") + private String time; + + /** + * 台风中心气压,单位【百帕】 + */ + @TableField("CENTER_PRESSURE") + private String centerPressure; + + /** + * 风速,单位【米/每秒】 + */ + @TableField("SPEED") + private String speed; + + /** + * 台风风力等级描述 + */ + @TableField("TYPHOON_TYPE") + private String typhoonType; + + /** + * 台风整体移动速度,单位【公里/小时】 + */ + @TableField("MOVE_SPEED") + private String moveSpeed; + + /** + * 风力,单位【级】 + */ + @TableField("POWER") + private Integer power; + + /** + * 台风未来移动方向 + */ + @TableField("MOVE_DIRECTION") + private String moveDirection; + + /** + * 经度 + */ + @TableField("LNG") + private Double lng; + + /** + * 纬度 + */ + @TableField("LAT") + private Double lat; + + /** + * 12级风力影响半径 + */ + @TableField("RADIUS_12") + private String radius12; + + /** + * 10级风力影响半径 + */ + @TableField("RADIUS_10") + private String radius10; + + /** + * 7级风力影响半径 + */ + @TableField("RADIUS_7") + private String radius7; + + /** + * 台风路线预测 + */ + @TableField("ROUTE_PREDICTION") + private String routePrediction; + + /** + * 中心位置 + */ + @TableField("CENTER_POSITION") + private String centerPosition; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/Typhoon.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/Typhoon.java new file mode 100644 index 0000000..2a88897 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/Typhoon.java @@ -0,0 +1,101 @@ +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_list") +public class Typhoon 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("NAME") + private String name; + /** + * 台风英文代号 + */ + @TableField("ENG_NAME") + private String engName; + /** + * 经度 + */ + @TableField("LNG") + private Double lng; + /** + * 纬度 + */ + @TableField("LAT") + private Double lat; + /** + * 台风风力等级描述 + */ + @TableField("TYPHOON_TYPE") + private String typhoonType; + /** + * 台风中心气压,单位【百帕】 + */ + @TableField("CENTER_PRESSURE") + private String centerPressure; + /** + * 风速,单位【米/每秒】 + */ + @TableField("SPEED") + private String speed; + /** + * 风力,单位【级】 + */ + @TableField("POWER") + private Integer power; + /** + * 台风整体移动速度,单位【公里/小时】 + */ + @TableField("MOVE_SPEED") + private String moveSpeed; + /** + * 台风未来移动方向 + */ + @TableField("MOVE_DIRECTION") + private String moveDirection; + /** + * 10级风力影响半径 + */ + @TableField("RADIUS_10") + private String radius10; + /** + * 7级风力影响半径 + */ + @TableField("RADIUS_7") + private String radius7; + /** + * 数据更新时间 + */ + @TableField("TIME") + private String time; + /** + * 台风是否已消散,1-未消散,0-已消散 + */ + @TableField("IS_ACTIVE") + private String isActive; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/TyphoonDetail.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/TyphoonDetail.java new file mode 100644 index 0000000..6a64023 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/TyphoonDetail.java @@ -0,0 +1,79 @@ +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_detail") +public class TyphoonDetail 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("NAME") + private String name; + + /** + * 台风英文代号 + */ + @TableField("ENG_NAME") + private String engName; + + /** + * 台风告警级别 + */ + @TableField("WARN_LEVEL") + private String warnLevel; + + /** + * 台风中心经度 + */ + @TableField("CENTER_LNG") + private Double centerLng; + + /** + * 台风中心纬度 + */ + @TableField("CENTER_LAT") + private Double centerLat; + + /** + * 台风开始时间 + */ + @TableField("START_TIME") + private String startTime; + + /** + * 台风结束时间 + */ + @TableField("END_TIME") + private String endTime; + + /** + * 台风状态 + */ + @TableField("IS_ACTIVE") + private String isActive; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/ILandPointService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ILandPointService.java new file mode 100644 index 0000000..ae8ccb4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ILandPointService.java @@ -0,0 +1,13 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.model.sql.LandPoint; + +/** + * 台风登陆点数据信息 服务类 + * + * @author a203 + */ +public interface ILandPointService extends IService { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IOceanService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IOceanService.java new file mode 100644 index 0000000..486b589 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IOceanService.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.OceanDetailDTO; + +/** + * 洋流数据信息 服务类 + * + * @author a203 + */ +public interface IOceanService { + /** + * 查询洋流数据 + * + * @param lng 经度 + * @param lat 纬度 + * @param date 预报起报日期 + * @param days 预报的是几天后,0表示当天,1表示明天,以此类推 + * @param hour 预报的是days的哪一个小时 + * @return {@link OceanDetailDTO} + */ + OceanDetailDTO oceanDetail(double lng, double lat, String date, String days, String hour); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRoutePointService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRoutePointService.java new file mode 100644 index 0000000..e4c225f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRoutePointService.java @@ -0,0 +1,13 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.model.sql.RoutePoint; + +/** + * 台风移动点数据信息 服务类 + * + * @author a203 + */ +public interface IRoutePointService extends IService { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonDetailService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonDetailService.java new file mode 100644 index 0000000..8db2e65 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonDetailService.java @@ -0,0 +1,13 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.model.sql.TyphoonDetail; + +/** + * 台风详情数据信息 服务类 + * + * @author a203 + */ +public interface ITyphoonDetailService extends IService { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonService.java new file mode 100644 index 0000000..2daf133 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonService.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.dto.TyphoonDTO; +import com.casic.missiles.modular.system.dto.TyphoonDetailDTO; +import com.casic.missiles.modular.system.model.sql.Typhoon; + +import java.util.List; + +/** + * 台风列表数据信息 服务类 + * + * @author a203 + */ +public interface ITyphoonService extends IService { + /** + * 保存台风列表 + */ + void saveTyphoon(); + + /***开放接口给内网服务器使用**************************************/ + + /** + * 查询台风列表 + * + * @return {@link List } + */ + List currentTyphoonList(); + + /** + * 查询台风详情 + * + * @param typhoonId 台风ID + * @return {@link TyphoonDetailDTO} + */ + TyphoonDetailDTO typhoonDetail(String typhoonId); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/LandPointServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/LandPointServiceImpl.java new file mode 100644 index 0000000..5cff515 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/LandPointServiceImpl.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.LandPointMapper; +import com.casic.missiles.modular.system.model.sql.LandPoint; +import com.casic.missiles.modular.system.service.ILandPointService; +import org.springframework.stereotype.Service; + +/** + * 台风数据信息 服务实现类 + * + * @author a203 + */ + +@Service +public class LandPointServiceImpl extends ServiceImpl implements ILandPointService { + + public LandPointServiceImpl() { + + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/OceanServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/OceanServiceImpl.java new file mode 100644 index 0000000..4416594 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/OceanServiceImpl.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.TypeReference; +import com.casic.missiles.modular.system.dto.OceanDetailDTO; +import com.casic.missiles.modular.system.model.remote.OceanDetailModel; +import com.casic.missiles.modular.system.service.IOceanService; +import com.casic.missiles.modular.system.utils.HttpRequestHelper; +import org.springframework.stereotype.Service; + +/** + * 洋流数据信息 服务实现类 + * + * @author a203 + */ + +@Service +public class OceanServiceImpl implements IOceanService { + + private static final String SUCCESS_CODE = "0"; + + public OceanServiceImpl() { + + } + + @Override + public OceanDetailDTO oceanDetail(double lng, double lat, String date, String days, String hour) { + String oceanData = HttpRequestHelper.obtainOceanData(lng, lat, date, days, hour); + /** + * 解析洋流数据返回给前端 + * */ + if (SUCCESS_CODE.equals(HttpRequestHelper.getOceanCode(oceanData))) { + OceanDetailModel remoteData = JSON.parseObject(oceanData, new TypeReference() { + }); + if (remoteData == null) { + return null; + } + return new OceanDetailDTO(remoteData); + } + return null; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RoutePointServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RoutePointServiceImpl.java new file mode 100644 index 0000000..7fb4bdd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RoutePointServiceImpl.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RoutePointMapper; +import com.casic.missiles.modular.system.model.sql.RoutePoint; +import com.casic.missiles.modular.system.service.IRoutePointService; +import org.springframework.stereotype.Service; + +/** + * 台风数据信息 服务实现类 + * + * @author a203 + */ + +@Service +public class RoutePointServiceImpl extends ServiceImpl implements IRoutePointService { + + public RoutePointServiceImpl() { + + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/TyphoonDetailServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/TyphoonDetailServiceImpl.java new file mode 100644 index 0000000..128df09 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/TyphoonDetailServiceImpl.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.TyphoonDetailMapper; +import com.casic.missiles.modular.system.model.sql.TyphoonDetail; +import com.casic.missiles.modular.system.service.ITyphoonDetailService; +import org.springframework.stereotype.Service; + +/** + * 台风数据信息 服务实现类 + * + * @author a203 + */ + +@Service +public class TyphoonDetailServiceImpl extends ServiceImpl implements ITyphoonDetailService { + + public TyphoonDetailServiceImpl() { + + } +} 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/src/main/java/com/casic/missiles/modular/system/model/sql/RoutePoint.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/RoutePoint.java new file mode 100644 index 0000000..d8dad80 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/RoutePoint.java @@ -0,0 +1,117 @@ +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_route_point") +public class RoutePoint extends Model { + private static final long serialVersionUID = 1L; + + /** + * 台风数据库主键 + *

+ * type = IdType.AUTO 是数据库自增 + */ + @TableId(value = "ID", type = IdType.ASSIGN_ID) + private Long id; + + /** + * 台风ID + */ + @TableField("TYPHOON_ID") + private String typhoonId; + + /** + * 数据更新时间 + */ + @TableField("TIME") + private String time; + + /** + * 台风中心气压,单位【百帕】 + */ + @TableField("CENTER_PRESSURE") + private String centerPressure; + + /** + * 风速,单位【米/每秒】 + */ + @TableField("SPEED") + private String speed; + + /** + * 台风风力等级描述 + */ + @TableField("TYPHOON_TYPE") + private String typhoonType; + + /** + * 台风整体移动速度,单位【公里/小时】 + */ + @TableField("MOVE_SPEED") + private String moveSpeed; + + /** + * 风力,单位【级】 + */ + @TableField("POWER") + private Integer power; + + /** + * 台风未来移动方向 + */ + @TableField("MOVE_DIRECTION") + private String moveDirection; + + /** + * 经度 + */ + @TableField("LNG") + private Double lng; + + /** + * 纬度 + */ + @TableField("LAT") + private Double lat; + + /** + * 12级风力影响半径 + */ + @TableField("RADIUS_12") + private String radius12; + + /** + * 10级风力影响半径 + */ + @TableField("RADIUS_10") + private String radius10; + + /** + * 7级风力影响半径 + */ + @TableField("RADIUS_7") + private String radius7; + + /** + * 台风路线预测 + */ + @TableField("ROUTE_PREDICTION") + private String routePrediction; + + /** + * 中心位置 + */ + @TableField("CENTER_POSITION") + private String centerPosition; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/Typhoon.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/Typhoon.java new file mode 100644 index 0000000..2a88897 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/Typhoon.java @@ -0,0 +1,101 @@ +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_list") +public class Typhoon 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("NAME") + private String name; + /** + * 台风英文代号 + */ + @TableField("ENG_NAME") + private String engName; + /** + * 经度 + */ + @TableField("LNG") + private Double lng; + /** + * 纬度 + */ + @TableField("LAT") + private Double lat; + /** + * 台风风力等级描述 + */ + @TableField("TYPHOON_TYPE") + private String typhoonType; + /** + * 台风中心气压,单位【百帕】 + */ + @TableField("CENTER_PRESSURE") + private String centerPressure; + /** + * 风速,单位【米/每秒】 + */ + @TableField("SPEED") + private String speed; + /** + * 风力,单位【级】 + */ + @TableField("POWER") + private Integer power; + /** + * 台风整体移动速度,单位【公里/小时】 + */ + @TableField("MOVE_SPEED") + private String moveSpeed; + /** + * 台风未来移动方向 + */ + @TableField("MOVE_DIRECTION") + private String moveDirection; + /** + * 10级风力影响半径 + */ + @TableField("RADIUS_10") + private String radius10; + /** + * 7级风力影响半径 + */ + @TableField("RADIUS_7") + private String radius7; + /** + * 数据更新时间 + */ + @TableField("TIME") + private String time; + /** + * 台风是否已消散,1-未消散,0-已消散 + */ + @TableField("IS_ACTIVE") + private String isActive; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/TyphoonDetail.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/TyphoonDetail.java new file mode 100644 index 0000000..6a64023 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/TyphoonDetail.java @@ -0,0 +1,79 @@ +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_detail") +public class TyphoonDetail 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("NAME") + private String name; + + /** + * 台风英文代号 + */ + @TableField("ENG_NAME") + private String engName; + + /** + * 台风告警级别 + */ + @TableField("WARN_LEVEL") + private String warnLevel; + + /** + * 台风中心经度 + */ + @TableField("CENTER_LNG") + private Double centerLng; + + /** + * 台风中心纬度 + */ + @TableField("CENTER_LAT") + private Double centerLat; + + /** + * 台风开始时间 + */ + @TableField("START_TIME") + private String startTime; + + /** + * 台风结束时间 + */ + @TableField("END_TIME") + private String endTime; + + /** + * 台风状态 + */ + @TableField("IS_ACTIVE") + private String isActive; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/ILandPointService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ILandPointService.java new file mode 100644 index 0000000..ae8ccb4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ILandPointService.java @@ -0,0 +1,13 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.model.sql.LandPoint; + +/** + * 台风登陆点数据信息 服务类 + * + * @author a203 + */ +public interface ILandPointService extends IService { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IOceanService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IOceanService.java new file mode 100644 index 0000000..486b589 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IOceanService.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.OceanDetailDTO; + +/** + * 洋流数据信息 服务类 + * + * @author a203 + */ +public interface IOceanService { + /** + * 查询洋流数据 + * + * @param lng 经度 + * @param lat 纬度 + * @param date 预报起报日期 + * @param days 预报的是几天后,0表示当天,1表示明天,以此类推 + * @param hour 预报的是days的哪一个小时 + * @return {@link OceanDetailDTO} + */ + OceanDetailDTO oceanDetail(double lng, double lat, String date, String days, String hour); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRoutePointService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRoutePointService.java new file mode 100644 index 0000000..e4c225f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRoutePointService.java @@ -0,0 +1,13 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.model.sql.RoutePoint; + +/** + * 台风移动点数据信息 服务类 + * + * @author a203 + */ +public interface IRoutePointService extends IService { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonDetailService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonDetailService.java new file mode 100644 index 0000000..8db2e65 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonDetailService.java @@ -0,0 +1,13 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.model.sql.TyphoonDetail; + +/** + * 台风详情数据信息 服务类 + * + * @author a203 + */ +public interface ITyphoonDetailService extends IService { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonService.java new file mode 100644 index 0000000..2daf133 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonService.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.dto.TyphoonDTO; +import com.casic.missiles.modular.system.dto.TyphoonDetailDTO; +import com.casic.missiles.modular.system.model.sql.Typhoon; + +import java.util.List; + +/** + * 台风列表数据信息 服务类 + * + * @author a203 + */ +public interface ITyphoonService extends IService { + /** + * 保存台风列表 + */ + void saveTyphoon(); + + /***开放接口给内网服务器使用**************************************/ + + /** + * 查询台风列表 + * + * @return {@link List } + */ + List currentTyphoonList(); + + /** + * 查询台风详情 + * + * @param typhoonId 台风ID + * @return {@link TyphoonDetailDTO} + */ + TyphoonDetailDTO typhoonDetail(String typhoonId); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/LandPointServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/LandPointServiceImpl.java new file mode 100644 index 0000000..5cff515 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/LandPointServiceImpl.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.LandPointMapper; +import com.casic.missiles.modular.system.model.sql.LandPoint; +import com.casic.missiles.modular.system.service.ILandPointService; +import org.springframework.stereotype.Service; + +/** + * 台风数据信息 服务实现类 + * + * @author a203 + */ + +@Service +public class LandPointServiceImpl extends ServiceImpl implements ILandPointService { + + public LandPointServiceImpl() { + + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/OceanServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/OceanServiceImpl.java new file mode 100644 index 0000000..4416594 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/OceanServiceImpl.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.TypeReference; +import com.casic.missiles.modular.system.dto.OceanDetailDTO; +import com.casic.missiles.modular.system.model.remote.OceanDetailModel; +import com.casic.missiles.modular.system.service.IOceanService; +import com.casic.missiles.modular.system.utils.HttpRequestHelper; +import org.springframework.stereotype.Service; + +/** + * 洋流数据信息 服务实现类 + * + * @author a203 + */ + +@Service +public class OceanServiceImpl implements IOceanService { + + private static final String SUCCESS_CODE = "0"; + + public OceanServiceImpl() { + + } + + @Override + public OceanDetailDTO oceanDetail(double lng, double lat, String date, String days, String hour) { + String oceanData = HttpRequestHelper.obtainOceanData(lng, lat, date, days, hour); + /** + * 解析洋流数据返回给前端 + * */ + if (SUCCESS_CODE.equals(HttpRequestHelper.getOceanCode(oceanData))) { + OceanDetailModel remoteData = JSON.parseObject(oceanData, new TypeReference() { + }); + if (remoteData == null) { + return null; + } + return new OceanDetailDTO(remoteData); + } + return null; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RoutePointServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RoutePointServiceImpl.java new file mode 100644 index 0000000..7fb4bdd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RoutePointServiceImpl.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RoutePointMapper; +import com.casic.missiles.modular.system.model.sql.RoutePoint; +import com.casic.missiles.modular.system.service.IRoutePointService; +import org.springframework.stereotype.Service; + +/** + * 台风数据信息 服务实现类 + * + * @author a203 + */ + +@Service +public class RoutePointServiceImpl extends ServiceImpl implements IRoutePointService { + + public RoutePointServiceImpl() { + + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/TyphoonDetailServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/TyphoonDetailServiceImpl.java new file mode 100644 index 0000000..128df09 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/TyphoonDetailServiceImpl.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.TyphoonDetailMapper; +import com.casic.missiles.modular.system.model.sql.TyphoonDetail; +import com.casic.missiles.modular.system.service.ITyphoonDetailService; +import org.springframework.stereotype.Service; + +/** + * 台风数据信息 服务实现类 + * + * @author a203 + */ + +@Service +public class TyphoonDetailServiceImpl extends ServiceImpl implements ITyphoonDetailService { + + public TyphoonDetailServiceImpl() { + + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/TyphoonServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/TyphoonServiceImpl.java new file mode 100644 index 0000000..8e73254 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/TyphoonServiceImpl.java @@ -0,0 +1,202 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.TypeReference; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.TyphoonMapper; +import com.casic.missiles.modular.system.dto.TyphoonDTO; +import com.casic.missiles.modular.system.dto.TyphoonDetailDTO; +import com.casic.missiles.modular.system.model.remote.TyphoonDetailModel; +import com.casic.missiles.modular.system.model.remote.TyphoonModel; +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.Typhoon; +import com.casic.missiles.modular.system.model.sql.TyphoonDetail; +import com.casic.missiles.modular.system.service.ILandPointService; +import com.casic.missiles.modular.system.service.IRoutePointService; +import com.casic.missiles.modular.system.service.ITyphoonDetailService; +import com.casic.missiles.modular.system.service.ITyphoonService; +import com.casic.missiles.modular.system.utils.Constant; +import com.casic.missiles.modular.system.utils.HttpRequestHelper; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +/** + * 台风数据信息 服务实现类 + * + * @author a203 + */ +@Slf4j +@Service +public class TyphoonServiceImpl extends ServiceImpl implements ITyphoonService { + + private static final String SUCCESS_CODE = "0"; + + private final ITyphoonDetailService detailService; + private final ILandPointService landPointService; + private final IRoutePointService routePointService; + + public TyphoonServiceImpl(ITyphoonDetailService detailService, + ILandPointService landPointService, + IRoutePointService routePointService) { + this.detailService = detailService; + this.landPointService = landPointService; + this.routePointService = routePointService; + } + + /** + * 保存台风列表 + */ + @Override + public void saveTyphoon() { + /** + * 获取台风接口数据 + * */ + String res = HttpRequestHelper.doGet(Constant.TYPHOON_LIST + System.currentTimeMillis()); + if (SUCCESS_CODE.equals(HttpRequestHelper.getTyphoonCode(res))) { + TyphoonModel remoteData = JSON.parseObject(res, new TypeReference() { + }); + List beans = remoteData.getShowapi_res_body().getList(); + for (TyphoonModel.ShowapiResBodyBean.ListBean data : beans) { + Typhoon entity = new Typhoon(); + entity.setTyphoonId(data.getTfid()); + entity.setName(data.getName()); + entity.setEngName(data.getEnname()); + entity.setLng(Double.valueOf(data.getLng())); + entity.setLat(Double.valueOf(data.getLat())); + entity.setTyphoonType(data.getStrong()); + entity.setCenterPressure(data.getPressure()); + entity.setSpeed(data.getSpeed()); + entity.setPower(Integer.valueOf(data.getPower())); + entity.setMoveSpeed(data.getMovespeed()); + entity.setMoveDirection(data.getMovedirection()); + entity.setRadius7(data.getRadius7()); + entity.setRadius10(data.getRadius10()); + entity.setTime(data.getTime()); + entity.setIsActive("1"); + this.baseMapper.insert(entity); + } + } + updateTyphoonDetail(); + } + + /** + * 更新台风详情 + */ + private void updateTyphoonDetail() { + //筛选出还未消散的台风并更新详情 + List typhoons = this.baseMapper.selectCurrentTyphoon(); + for (Typhoon typhoon : typhoons) { + /** + * 获取台风接口数据 + * */ + String res = HttpRequestHelper.doGet( + Constant.TYPHOON_DETAIL.replace("ID", typhoon.getTyphoonId()) + + System.currentTimeMillis()); + if (SUCCESS_CODE.equals(HttpRequestHelper.getTyphoonCode(res))) { + TyphoonDetailModel remoteData = JSON.parseObject(res, new TypeReference() { + }); + TyphoonDetailModel.ShowapiResBodyBean.ObjBean objBean = remoteData.getShowapi_res_body().getObj(); + + String typhoonId = objBean.getTfid(); + /** + * 保存台风基本情况存到数据库 + * */ + TyphoonDetail detail = new TyphoonDetail(); + detail.setTyphoonId(objBean.getTfid()); + detail.setName(objBean.getName()); + detail.setEngName(objBean.getEnname()); + detail.setWarnLevel(objBean.getWarnlevel()); + detail.setCenterLng(Double.parseDouble(objBean.getCenterlng())); + detail.setCenterLat(Double.parseDouble(objBean.getCenterlat())); + detail.setStartTime(objBean.getStarttime()); + detail.setEndTime(objBean.getEndtime()); + detail.setIsActive(objBean.getIsactive()); + QueryWrapper queryWrapper = new QueryWrapper().eq("TYPHOON_ID", typhoonId); + detailService.saveOrUpdate(detail, queryWrapper); + + /** + * 更新台风列表台风状态 + * */ + typhoon.setIsActive(objBean.getIsactive()); + saveOrUpdate(typhoon, new QueryWrapper().eq("TYPHOON_ID", typhoonId)); + + /** + * 保存台风登陆情况存到数据库 + * */ + List landBeans = objBean.getLand(); + for (TyphoonDetailModel.ShowapiResBodyBean.ObjBean.LandBan bean : landBeans) { + LandPoint landPoint = new LandPoint(); + + landPoint.setTyphoonId(typhoonId); + landPoint.setLandAddress(bean.getLandaddress()); + landPoint.setLandTime(bean.getLandtime()); + landPoint.setType(bean.getStrong()); + landPoint.setLng(bean.getLng()); + landPoint.setLat(bean.getLat()); + landPoint.setInfo(bean.getInfo()); + landPointService.save(landPoint); + } + + /** + * 保存台风移动路径存到数据库 + * */ + List routePoints = objBean.getPoints(); + routePointService.remove(new QueryWrapper().eq("TYPHOON_ID", typhoonId)); + for (TyphoonDetailModel.ShowapiResBodyBean.ObjBean.PointsBean point : routePoints) { + RoutePoint routePoint = new RoutePoint(); + + routePoint.setTyphoonId(typhoonId); + routePoint.setTime(point.getTime()); + routePoint.setCenterPressure(point.getPressure()); + routePoint.setSpeed(point.getSpeed()); + routePoint.setTyphoonType(point.getStrong()); + routePoint.setMoveSpeed(point.getMovespeed()); + routePoint.setPower(Integer.parseInt(point.getPower())); + routePoint.setMoveDirection(point.getMovedirection()); + routePoint.setLng(point.getLng()); + routePoint.setLat(point.getLat()); + routePoint.setRadius12(point.getRadius12()); + routePoint.setRadius10(point.getRadius10()); + routePoint.setRadius7(point.getRadius7()); + routePoint.setRoutePrediction(point.getJl()); + routePoint.setCenterPosition(point.getCkposition()); + routePointService.save(routePoint); + } + } + } + } + + @Override + public List currentTyphoonList() { + List typhoonList = new ArrayList<>(); + //筛选出还未消散的台风并更新详情 + List typhoons = this.baseMapper.selectCurrentTyphoon(); + for (Typhoon typhoon : typhoons) { + typhoonList.add(new TyphoonDTO(typhoon)); + } + return typhoonList; + } + + @Override + public TyphoonDetailDTO typhoonDetail(String typhoonId) { + TyphoonDetail typhoonDetail = detailService.getOne( + new QueryWrapper().eq("TYPHOON_ID", typhoonId) + ); + if (typhoonDetail == null) { + return null; + } + log.info(JSON.toJSONString(typhoonDetail)); + List landPoints = landPointService.list( + new QueryWrapper().eq("TYPHOON_ID", typhoonId) + ); + List routePoints = routePointService.list( + new QueryWrapper().eq("TYPHOON_ID", typhoonId) + ); + return new TyphoonDetailDTO(typhoonDetail, landPoints, routePoints); + } +} 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/src/main/java/com/casic/missiles/modular/system/model/sql/RoutePoint.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/RoutePoint.java new file mode 100644 index 0000000..d8dad80 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/RoutePoint.java @@ -0,0 +1,117 @@ +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_route_point") +public class RoutePoint extends Model { + private static final long serialVersionUID = 1L; + + /** + * 台风数据库主键 + *

+ * type = IdType.AUTO 是数据库自增 + */ + @TableId(value = "ID", type = IdType.ASSIGN_ID) + private Long id; + + /** + * 台风ID + */ + @TableField("TYPHOON_ID") + private String typhoonId; + + /** + * 数据更新时间 + */ + @TableField("TIME") + private String time; + + /** + * 台风中心气压,单位【百帕】 + */ + @TableField("CENTER_PRESSURE") + private String centerPressure; + + /** + * 风速,单位【米/每秒】 + */ + @TableField("SPEED") + private String speed; + + /** + * 台风风力等级描述 + */ + @TableField("TYPHOON_TYPE") + private String typhoonType; + + /** + * 台风整体移动速度,单位【公里/小时】 + */ + @TableField("MOVE_SPEED") + private String moveSpeed; + + /** + * 风力,单位【级】 + */ + @TableField("POWER") + private Integer power; + + /** + * 台风未来移动方向 + */ + @TableField("MOVE_DIRECTION") + private String moveDirection; + + /** + * 经度 + */ + @TableField("LNG") + private Double lng; + + /** + * 纬度 + */ + @TableField("LAT") + private Double lat; + + /** + * 12级风力影响半径 + */ + @TableField("RADIUS_12") + private String radius12; + + /** + * 10级风力影响半径 + */ + @TableField("RADIUS_10") + private String radius10; + + /** + * 7级风力影响半径 + */ + @TableField("RADIUS_7") + private String radius7; + + /** + * 台风路线预测 + */ + @TableField("ROUTE_PREDICTION") + private String routePrediction; + + /** + * 中心位置 + */ + @TableField("CENTER_POSITION") + private String centerPosition; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/Typhoon.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/Typhoon.java new file mode 100644 index 0000000..2a88897 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/Typhoon.java @@ -0,0 +1,101 @@ +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_list") +public class Typhoon 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("NAME") + private String name; + /** + * 台风英文代号 + */ + @TableField("ENG_NAME") + private String engName; + /** + * 经度 + */ + @TableField("LNG") + private Double lng; + /** + * 纬度 + */ + @TableField("LAT") + private Double lat; + /** + * 台风风力等级描述 + */ + @TableField("TYPHOON_TYPE") + private String typhoonType; + /** + * 台风中心气压,单位【百帕】 + */ + @TableField("CENTER_PRESSURE") + private String centerPressure; + /** + * 风速,单位【米/每秒】 + */ + @TableField("SPEED") + private String speed; + /** + * 风力,单位【级】 + */ + @TableField("POWER") + private Integer power; + /** + * 台风整体移动速度,单位【公里/小时】 + */ + @TableField("MOVE_SPEED") + private String moveSpeed; + /** + * 台风未来移动方向 + */ + @TableField("MOVE_DIRECTION") + private String moveDirection; + /** + * 10级风力影响半径 + */ + @TableField("RADIUS_10") + private String radius10; + /** + * 7级风力影响半径 + */ + @TableField("RADIUS_7") + private String radius7; + /** + * 数据更新时间 + */ + @TableField("TIME") + private String time; + /** + * 台风是否已消散,1-未消散,0-已消散 + */ + @TableField("IS_ACTIVE") + private String isActive; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/TyphoonDetail.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/TyphoonDetail.java new file mode 100644 index 0000000..6a64023 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/TyphoonDetail.java @@ -0,0 +1,79 @@ +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_detail") +public class TyphoonDetail 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("NAME") + private String name; + + /** + * 台风英文代号 + */ + @TableField("ENG_NAME") + private String engName; + + /** + * 台风告警级别 + */ + @TableField("WARN_LEVEL") + private String warnLevel; + + /** + * 台风中心经度 + */ + @TableField("CENTER_LNG") + private Double centerLng; + + /** + * 台风中心纬度 + */ + @TableField("CENTER_LAT") + private Double centerLat; + + /** + * 台风开始时间 + */ + @TableField("START_TIME") + private String startTime; + + /** + * 台风结束时间 + */ + @TableField("END_TIME") + private String endTime; + + /** + * 台风状态 + */ + @TableField("IS_ACTIVE") + private String isActive; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/ILandPointService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ILandPointService.java new file mode 100644 index 0000000..ae8ccb4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ILandPointService.java @@ -0,0 +1,13 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.model.sql.LandPoint; + +/** + * 台风登陆点数据信息 服务类 + * + * @author a203 + */ +public interface ILandPointService extends IService { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IOceanService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IOceanService.java new file mode 100644 index 0000000..486b589 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IOceanService.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.OceanDetailDTO; + +/** + * 洋流数据信息 服务类 + * + * @author a203 + */ +public interface IOceanService { + /** + * 查询洋流数据 + * + * @param lng 经度 + * @param lat 纬度 + * @param date 预报起报日期 + * @param days 预报的是几天后,0表示当天,1表示明天,以此类推 + * @param hour 预报的是days的哪一个小时 + * @return {@link OceanDetailDTO} + */ + OceanDetailDTO oceanDetail(double lng, double lat, String date, String days, String hour); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRoutePointService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRoutePointService.java new file mode 100644 index 0000000..e4c225f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRoutePointService.java @@ -0,0 +1,13 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.model.sql.RoutePoint; + +/** + * 台风移动点数据信息 服务类 + * + * @author a203 + */ +public interface IRoutePointService extends IService { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonDetailService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonDetailService.java new file mode 100644 index 0000000..8db2e65 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonDetailService.java @@ -0,0 +1,13 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.model.sql.TyphoonDetail; + +/** + * 台风详情数据信息 服务类 + * + * @author a203 + */ +public interface ITyphoonDetailService extends IService { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonService.java new file mode 100644 index 0000000..2daf133 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonService.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.dto.TyphoonDTO; +import com.casic.missiles.modular.system.dto.TyphoonDetailDTO; +import com.casic.missiles.modular.system.model.sql.Typhoon; + +import java.util.List; + +/** + * 台风列表数据信息 服务类 + * + * @author a203 + */ +public interface ITyphoonService extends IService { + /** + * 保存台风列表 + */ + void saveTyphoon(); + + /***开放接口给内网服务器使用**************************************/ + + /** + * 查询台风列表 + * + * @return {@link List } + */ + List currentTyphoonList(); + + /** + * 查询台风详情 + * + * @param typhoonId 台风ID + * @return {@link TyphoonDetailDTO} + */ + TyphoonDetailDTO typhoonDetail(String typhoonId); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/LandPointServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/LandPointServiceImpl.java new file mode 100644 index 0000000..5cff515 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/LandPointServiceImpl.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.LandPointMapper; +import com.casic.missiles.modular.system.model.sql.LandPoint; +import com.casic.missiles.modular.system.service.ILandPointService; +import org.springframework.stereotype.Service; + +/** + * 台风数据信息 服务实现类 + * + * @author a203 + */ + +@Service +public class LandPointServiceImpl extends ServiceImpl implements ILandPointService { + + public LandPointServiceImpl() { + + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/OceanServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/OceanServiceImpl.java new file mode 100644 index 0000000..4416594 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/OceanServiceImpl.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.TypeReference; +import com.casic.missiles.modular.system.dto.OceanDetailDTO; +import com.casic.missiles.modular.system.model.remote.OceanDetailModel; +import com.casic.missiles.modular.system.service.IOceanService; +import com.casic.missiles.modular.system.utils.HttpRequestHelper; +import org.springframework.stereotype.Service; + +/** + * 洋流数据信息 服务实现类 + * + * @author a203 + */ + +@Service +public class OceanServiceImpl implements IOceanService { + + private static final String SUCCESS_CODE = "0"; + + public OceanServiceImpl() { + + } + + @Override + public OceanDetailDTO oceanDetail(double lng, double lat, String date, String days, String hour) { + String oceanData = HttpRequestHelper.obtainOceanData(lng, lat, date, days, hour); + /** + * 解析洋流数据返回给前端 + * */ + if (SUCCESS_CODE.equals(HttpRequestHelper.getOceanCode(oceanData))) { + OceanDetailModel remoteData = JSON.parseObject(oceanData, new TypeReference() { + }); + if (remoteData == null) { + return null; + } + return new OceanDetailDTO(remoteData); + } + return null; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RoutePointServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RoutePointServiceImpl.java new file mode 100644 index 0000000..7fb4bdd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RoutePointServiceImpl.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RoutePointMapper; +import com.casic.missiles.modular.system.model.sql.RoutePoint; +import com.casic.missiles.modular.system.service.IRoutePointService; +import org.springframework.stereotype.Service; + +/** + * 台风数据信息 服务实现类 + * + * @author a203 + */ + +@Service +public class RoutePointServiceImpl extends ServiceImpl implements IRoutePointService { + + public RoutePointServiceImpl() { + + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/TyphoonDetailServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/TyphoonDetailServiceImpl.java new file mode 100644 index 0000000..128df09 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/TyphoonDetailServiceImpl.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.TyphoonDetailMapper; +import com.casic.missiles.modular.system.model.sql.TyphoonDetail; +import com.casic.missiles.modular.system.service.ITyphoonDetailService; +import org.springframework.stereotype.Service; + +/** + * 台风数据信息 服务实现类 + * + * @author a203 + */ + +@Service +public class TyphoonDetailServiceImpl extends ServiceImpl implements ITyphoonDetailService { + + public TyphoonDetailServiceImpl() { + + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/TyphoonServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/TyphoonServiceImpl.java new file mode 100644 index 0000000..8e73254 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/TyphoonServiceImpl.java @@ -0,0 +1,202 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.TypeReference; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.TyphoonMapper; +import com.casic.missiles.modular.system.dto.TyphoonDTO; +import com.casic.missiles.modular.system.dto.TyphoonDetailDTO; +import com.casic.missiles.modular.system.model.remote.TyphoonDetailModel; +import com.casic.missiles.modular.system.model.remote.TyphoonModel; +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.Typhoon; +import com.casic.missiles.modular.system.model.sql.TyphoonDetail; +import com.casic.missiles.modular.system.service.ILandPointService; +import com.casic.missiles.modular.system.service.IRoutePointService; +import com.casic.missiles.modular.system.service.ITyphoonDetailService; +import com.casic.missiles.modular.system.service.ITyphoonService; +import com.casic.missiles.modular.system.utils.Constant; +import com.casic.missiles.modular.system.utils.HttpRequestHelper; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +/** + * 台风数据信息 服务实现类 + * + * @author a203 + */ +@Slf4j +@Service +public class TyphoonServiceImpl extends ServiceImpl implements ITyphoonService { + + private static final String SUCCESS_CODE = "0"; + + private final ITyphoonDetailService detailService; + private final ILandPointService landPointService; + private final IRoutePointService routePointService; + + public TyphoonServiceImpl(ITyphoonDetailService detailService, + ILandPointService landPointService, + IRoutePointService routePointService) { + this.detailService = detailService; + this.landPointService = landPointService; + this.routePointService = routePointService; + } + + /** + * 保存台风列表 + */ + @Override + public void saveTyphoon() { + /** + * 获取台风接口数据 + * */ + String res = HttpRequestHelper.doGet(Constant.TYPHOON_LIST + System.currentTimeMillis()); + if (SUCCESS_CODE.equals(HttpRequestHelper.getTyphoonCode(res))) { + TyphoonModel remoteData = JSON.parseObject(res, new TypeReference() { + }); + List beans = remoteData.getShowapi_res_body().getList(); + for (TyphoonModel.ShowapiResBodyBean.ListBean data : beans) { + Typhoon entity = new Typhoon(); + entity.setTyphoonId(data.getTfid()); + entity.setName(data.getName()); + entity.setEngName(data.getEnname()); + entity.setLng(Double.valueOf(data.getLng())); + entity.setLat(Double.valueOf(data.getLat())); + entity.setTyphoonType(data.getStrong()); + entity.setCenterPressure(data.getPressure()); + entity.setSpeed(data.getSpeed()); + entity.setPower(Integer.valueOf(data.getPower())); + entity.setMoveSpeed(data.getMovespeed()); + entity.setMoveDirection(data.getMovedirection()); + entity.setRadius7(data.getRadius7()); + entity.setRadius10(data.getRadius10()); + entity.setTime(data.getTime()); + entity.setIsActive("1"); + this.baseMapper.insert(entity); + } + } + updateTyphoonDetail(); + } + + /** + * 更新台风详情 + */ + private void updateTyphoonDetail() { + //筛选出还未消散的台风并更新详情 + List typhoons = this.baseMapper.selectCurrentTyphoon(); + for (Typhoon typhoon : typhoons) { + /** + * 获取台风接口数据 + * */ + String res = HttpRequestHelper.doGet( + Constant.TYPHOON_DETAIL.replace("ID", typhoon.getTyphoonId()) + + System.currentTimeMillis()); + if (SUCCESS_CODE.equals(HttpRequestHelper.getTyphoonCode(res))) { + TyphoonDetailModel remoteData = JSON.parseObject(res, new TypeReference() { + }); + TyphoonDetailModel.ShowapiResBodyBean.ObjBean objBean = remoteData.getShowapi_res_body().getObj(); + + String typhoonId = objBean.getTfid(); + /** + * 保存台风基本情况存到数据库 + * */ + TyphoonDetail detail = new TyphoonDetail(); + detail.setTyphoonId(objBean.getTfid()); + detail.setName(objBean.getName()); + detail.setEngName(objBean.getEnname()); + detail.setWarnLevel(objBean.getWarnlevel()); + detail.setCenterLng(Double.parseDouble(objBean.getCenterlng())); + detail.setCenterLat(Double.parseDouble(objBean.getCenterlat())); + detail.setStartTime(objBean.getStarttime()); + detail.setEndTime(objBean.getEndtime()); + detail.setIsActive(objBean.getIsactive()); + QueryWrapper queryWrapper = new QueryWrapper().eq("TYPHOON_ID", typhoonId); + detailService.saveOrUpdate(detail, queryWrapper); + + /** + * 更新台风列表台风状态 + * */ + typhoon.setIsActive(objBean.getIsactive()); + saveOrUpdate(typhoon, new QueryWrapper().eq("TYPHOON_ID", typhoonId)); + + /** + * 保存台风登陆情况存到数据库 + * */ + List landBeans = objBean.getLand(); + for (TyphoonDetailModel.ShowapiResBodyBean.ObjBean.LandBan bean : landBeans) { + LandPoint landPoint = new LandPoint(); + + landPoint.setTyphoonId(typhoonId); + landPoint.setLandAddress(bean.getLandaddress()); + landPoint.setLandTime(bean.getLandtime()); + landPoint.setType(bean.getStrong()); + landPoint.setLng(bean.getLng()); + landPoint.setLat(bean.getLat()); + landPoint.setInfo(bean.getInfo()); + landPointService.save(landPoint); + } + + /** + * 保存台风移动路径存到数据库 + * */ + List routePoints = objBean.getPoints(); + routePointService.remove(new QueryWrapper().eq("TYPHOON_ID", typhoonId)); + for (TyphoonDetailModel.ShowapiResBodyBean.ObjBean.PointsBean point : routePoints) { + RoutePoint routePoint = new RoutePoint(); + + routePoint.setTyphoonId(typhoonId); + routePoint.setTime(point.getTime()); + routePoint.setCenterPressure(point.getPressure()); + routePoint.setSpeed(point.getSpeed()); + routePoint.setTyphoonType(point.getStrong()); + routePoint.setMoveSpeed(point.getMovespeed()); + routePoint.setPower(Integer.parseInt(point.getPower())); + routePoint.setMoveDirection(point.getMovedirection()); + routePoint.setLng(point.getLng()); + routePoint.setLat(point.getLat()); + routePoint.setRadius12(point.getRadius12()); + routePoint.setRadius10(point.getRadius10()); + routePoint.setRadius7(point.getRadius7()); + routePoint.setRoutePrediction(point.getJl()); + routePoint.setCenterPosition(point.getCkposition()); + routePointService.save(routePoint); + } + } + } + } + + @Override + public List currentTyphoonList() { + List typhoonList = new ArrayList<>(); + //筛选出还未消散的台风并更新详情 + List typhoons = this.baseMapper.selectCurrentTyphoon(); + for (Typhoon typhoon : typhoons) { + typhoonList.add(new TyphoonDTO(typhoon)); + } + return typhoonList; + } + + @Override + public TyphoonDetailDTO typhoonDetail(String typhoonId) { + TyphoonDetail typhoonDetail = detailService.getOne( + new QueryWrapper().eq("TYPHOON_ID", typhoonId) + ); + if (typhoonDetail == null) { + return null; + } + log.info(JSON.toJSONString(typhoonDetail)); + List landPoints = landPointService.list( + new QueryWrapper().eq("TYPHOON_ID", typhoonId) + ); + List routePoints = routePointService.list( + new QueryWrapper().eq("TYPHOON_ID", typhoonId) + ); + return new TyphoonDetailDTO(typhoonDetail, landPoints, routePoints); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/utils/Constant.java b/casic-server/src/main/java/com/casic/missiles/modular/system/utils/Constant.java new file mode 100644 index 0000000..552a6e9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/utils/Constant.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.system.utils; + +/** + * @author a203 + */ +public class Constant { + /** + * 热带气旋/台风相关常量 + */ + private static final String BASE_URL = "https://route.showapi.com"; + private static final String API_APPID = "780330"; + private static final String API_SIGN_KEY = "f30ac28b65cc447da936448c57bc5d99"; + + public static final String TYPHOON_LIST = BASE_URL + + "/342-1?" + + "showapi_appid=" + API_APPID + "&" + + "showapi_sign=" + API_SIGN_KEY + "&" + + "showapi_timestamp="; + + public static final String TYPHOON_DETAIL = BASE_URL + + "/342-2?" + + "showapi_appid=" + API_APPID + "&" + + "showapi_sign=" + API_SIGN_KEY + "&" + + "tfid=ID" + "&" + + "showapi_timestamp="; + + /** + * 洋流相关常量 + */ + private static final String OCEAN_BASE_URL = "http://api.meteo.open.ninecosmos.cn"; + public static final String OCEAN_HEADER_NAME = "Authorization"; + public static final String OCEAN_APPID = "WXZH888888"; + public static final String OCEAN_APP_KEY = "xb#bD&xtho@b80scbDb"; + + public static final String OCEAN_TOKEN = OCEAN_BASE_URL + "/us/users/open/token"; + public static final String OCEAN_DETAIL = OCEAN_BASE_URL + "/mr/netcdf/meteo/ytx"; +} 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/src/main/java/com/casic/missiles/modular/system/model/sql/RoutePoint.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/RoutePoint.java new file mode 100644 index 0000000..d8dad80 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/RoutePoint.java @@ -0,0 +1,117 @@ +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_route_point") +public class RoutePoint extends Model { + private static final long serialVersionUID = 1L; + + /** + * 台风数据库主键 + *

+ * type = IdType.AUTO 是数据库自增 + */ + @TableId(value = "ID", type = IdType.ASSIGN_ID) + private Long id; + + /** + * 台风ID + */ + @TableField("TYPHOON_ID") + private String typhoonId; + + /** + * 数据更新时间 + */ + @TableField("TIME") + private String time; + + /** + * 台风中心气压,单位【百帕】 + */ + @TableField("CENTER_PRESSURE") + private String centerPressure; + + /** + * 风速,单位【米/每秒】 + */ + @TableField("SPEED") + private String speed; + + /** + * 台风风力等级描述 + */ + @TableField("TYPHOON_TYPE") + private String typhoonType; + + /** + * 台风整体移动速度,单位【公里/小时】 + */ + @TableField("MOVE_SPEED") + private String moveSpeed; + + /** + * 风力,单位【级】 + */ + @TableField("POWER") + private Integer power; + + /** + * 台风未来移动方向 + */ + @TableField("MOVE_DIRECTION") + private String moveDirection; + + /** + * 经度 + */ + @TableField("LNG") + private Double lng; + + /** + * 纬度 + */ + @TableField("LAT") + private Double lat; + + /** + * 12级风力影响半径 + */ + @TableField("RADIUS_12") + private String radius12; + + /** + * 10级风力影响半径 + */ + @TableField("RADIUS_10") + private String radius10; + + /** + * 7级风力影响半径 + */ + @TableField("RADIUS_7") + private String radius7; + + /** + * 台风路线预测 + */ + @TableField("ROUTE_PREDICTION") + private String routePrediction; + + /** + * 中心位置 + */ + @TableField("CENTER_POSITION") + private String centerPosition; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/Typhoon.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/Typhoon.java new file mode 100644 index 0000000..2a88897 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/Typhoon.java @@ -0,0 +1,101 @@ +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_list") +public class Typhoon 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("NAME") + private String name; + /** + * 台风英文代号 + */ + @TableField("ENG_NAME") + private String engName; + /** + * 经度 + */ + @TableField("LNG") + private Double lng; + /** + * 纬度 + */ + @TableField("LAT") + private Double lat; + /** + * 台风风力等级描述 + */ + @TableField("TYPHOON_TYPE") + private String typhoonType; + /** + * 台风中心气压,单位【百帕】 + */ + @TableField("CENTER_PRESSURE") + private String centerPressure; + /** + * 风速,单位【米/每秒】 + */ + @TableField("SPEED") + private String speed; + /** + * 风力,单位【级】 + */ + @TableField("POWER") + private Integer power; + /** + * 台风整体移动速度,单位【公里/小时】 + */ + @TableField("MOVE_SPEED") + private String moveSpeed; + /** + * 台风未来移动方向 + */ + @TableField("MOVE_DIRECTION") + private String moveDirection; + /** + * 10级风力影响半径 + */ + @TableField("RADIUS_10") + private String radius10; + /** + * 7级风力影响半径 + */ + @TableField("RADIUS_7") + private String radius7; + /** + * 数据更新时间 + */ + @TableField("TIME") + private String time; + /** + * 台风是否已消散,1-未消散,0-已消散 + */ + @TableField("IS_ACTIVE") + private String isActive; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/TyphoonDetail.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/TyphoonDetail.java new file mode 100644 index 0000000..6a64023 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/TyphoonDetail.java @@ -0,0 +1,79 @@ +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_detail") +public class TyphoonDetail 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("NAME") + private String name; + + /** + * 台风英文代号 + */ + @TableField("ENG_NAME") + private String engName; + + /** + * 台风告警级别 + */ + @TableField("WARN_LEVEL") + private String warnLevel; + + /** + * 台风中心经度 + */ + @TableField("CENTER_LNG") + private Double centerLng; + + /** + * 台风中心纬度 + */ + @TableField("CENTER_LAT") + private Double centerLat; + + /** + * 台风开始时间 + */ + @TableField("START_TIME") + private String startTime; + + /** + * 台风结束时间 + */ + @TableField("END_TIME") + private String endTime; + + /** + * 台风状态 + */ + @TableField("IS_ACTIVE") + private String isActive; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/ILandPointService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ILandPointService.java new file mode 100644 index 0000000..ae8ccb4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ILandPointService.java @@ -0,0 +1,13 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.model.sql.LandPoint; + +/** + * 台风登陆点数据信息 服务类 + * + * @author a203 + */ +public interface ILandPointService extends IService { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IOceanService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IOceanService.java new file mode 100644 index 0000000..486b589 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IOceanService.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.OceanDetailDTO; + +/** + * 洋流数据信息 服务类 + * + * @author a203 + */ +public interface IOceanService { + /** + * 查询洋流数据 + * + * @param lng 经度 + * @param lat 纬度 + * @param date 预报起报日期 + * @param days 预报的是几天后,0表示当天,1表示明天,以此类推 + * @param hour 预报的是days的哪一个小时 + * @return {@link OceanDetailDTO} + */ + OceanDetailDTO oceanDetail(double lng, double lat, String date, String days, String hour); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRoutePointService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRoutePointService.java new file mode 100644 index 0000000..e4c225f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRoutePointService.java @@ -0,0 +1,13 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.model.sql.RoutePoint; + +/** + * 台风移动点数据信息 服务类 + * + * @author a203 + */ +public interface IRoutePointService extends IService { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonDetailService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonDetailService.java new file mode 100644 index 0000000..8db2e65 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonDetailService.java @@ -0,0 +1,13 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.model.sql.TyphoonDetail; + +/** + * 台风详情数据信息 服务类 + * + * @author a203 + */ +public interface ITyphoonDetailService extends IService { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonService.java new file mode 100644 index 0000000..2daf133 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonService.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.dto.TyphoonDTO; +import com.casic.missiles.modular.system.dto.TyphoonDetailDTO; +import com.casic.missiles.modular.system.model.sql.Typhoon; + +import java.util.List; + +/** + * 台风列表数据信息 服务类 + * + * @author a203 + */ +public interface ITyphoonService extends IService { + /** + * 保存台风列表 + */ + void saveTyphoon(); + + /***开放接口给内网服务器使用**************************************/ + + /** + * 查询台风列表 + * + * @return {@link List } + */ + List currentTyphoonList(); + + /** + * 查询台风详情 + * + * @param typhoonId 台风ID + * @return {@link TyphoonDetailDTO} + */ + TyphoonDetailDTO typhoonDetail(String typhoonId); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/LandPointServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/LandPointServiceImpl.java new file mode 100644 index 0000000..5cff515 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/LandPointServiceImpl.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.LandPointMapper; +import com.casic.missiles.modular.system.model.sql.LandPoint; +import com.casic.missiles.modular.system.service.ILandPointService; +import org.springframework.stereotype.Service; + +/** + * 台风数据信息 服务实现类 + * + * @author a203 + */ + +@Service +public class LandPointServiceImpl extends ServiceImpl implements ILandPointService { + + public LandPointServiceImpl() { + + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/OceanServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/OceanServiceImpl.java new file mode 100644 index 0000000..4416594 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/OceanServiceImpl.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.TypeReference; +import com.casic.missiles.modular.system.dto.OceanDetailDTO; +import com.casic.missiles.modular.system.model.remote.OceanDetailModel; +import com.casic.missiles.modular.system.service.IOceanService; +import com.casic.missiles.modular.system.utils.HttpRequestHelper; +import org.springframework.stereotype.Service; + +/** + * 洋流数据信息 服务实现类 + * + * @author a203 + */ + +@Service +public class OceanServiceImpl implements IOceanService { + + private static final String SUCCESS_CODE = "0"; + + public OceanServiceImpl() { + + } + + @Override + public OceanDetailDTO oceanDetail(double lng, double lat, String date, String days, String hour) { + String oceanData = HttpRequestHelper.obtainOceanData(lng, lat, date, days, hour); + /** + * 解析洋流数据返回给前端 + * */ + if (SUCCESS_CODE.equals(HttpRequestHelper.getOceanCode(oceanData))) { + OceanDetailModel remoteData = JSON.parseObject(oceanData, new TypeReference() { + }); + if (remoteData == null) { + return null; + } + return new OceanDetailDTO(remoteData); + } + return null; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RoutePointServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RoutePointServiceImpl.java new file mode 100644 index 0000000..7fb4bdd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RoutePointServiceImpl.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RoutePointMapper; +import com.casic.missiles.modular.system.model.sql.RoutePoint; +import com.casic.missiles.modular.system.service.IRoutePointService; +import org.springframework.stereotype.Service; + +/** + * 台风数据信息 服务实现类 + * + * @author a203 + */ + +@Service +public class RoutePointServiceImpl extends ServiceImpl implements IRoutePointService { + + public RoutePointServiceImpl() { + + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/TyphoonDetailServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/TyphoonDetailServiceImpl.java new file mode 100644 index 0000000..128df09 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/TyphoonDetailServiceImpl.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.TyphoonDetailMapper; +import com.casic.missiles.modular.system.model.sql.TyphoonDetail; +import com.casic.missiles.modular.system.service.ITyphoonDetailService; +import org.springframework.stereotype.Service; + +/** + * 台风数据信息 服务实现类 + * + * @author a203 + */ + +@Service +public class TyphoonDetailServiceImpl extends ServiceImpl implements ITyphoonDetailService { + + public TyphoonDetailServiceImpl() { + + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/TyphoonServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/TyphoonServiceImpl.java new file mode 100644 index 0000000..8e73254 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/TyphoonServiceImpl.java @@ -0,0 +1,202 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.TypeReference; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.TyphoonMapper; +import com.casic.missiles.modular.system.dto.TyphoonDTO; +import com.casic.missiles.modular.system.dto.TyphoonDetailDTO; +import com.casic.missiles.modular.system.model.remote.TyphoonDetailModel; +import com.casic.missiles.modular.system.model.remote.TyphoonModel; +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.Typhoon; +import com.casic.missiles.modular.system.model.sql.TyphoonDetail; +import com.casic.missiles.modular.system.service.ILandPointService; +import com.casic.missiles.modular.system.service.IRoutePointService; +import com.casic.missiles.modular.system.service.ITyphoonDetailService; +import com.casic.missiles.modular.system.service.ITyphoonService; +import com.casic.missiles.modular.system.utils.Constant; +import com.casic.missiles.modular.system.utils.HttpRequestHelper; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +/** + * 台风数据信息 服务实现类 + * + * @author a203 + */ +@Slf4j +@Service +public class TyphoonServiceImpl extends ServiceImpl implements ITyphoonService { + + private static final String SUCCESS_CODE = "0"; + + private final ITyphoonDetailService detailService; + private final ILandPointService landPointService; + private final IRoutePointService routePointService; + + public TyphoonServiceImpl(ITyphoonDetailService detailService, + ILandPointService landPointService, + IRoutePointService routePointService) { + this.detailService = detailService; + this.landPointService = landPointService; + this.routePointService = routePointService; + } + + /** + * 保存台风列表 + */ + @Override + public void saveTyphoon() { + /** + * 获取台风接口数据 + * */ + String res = HttpRequestHelper.doGet(Constant.TYPHOON_LIST + System.currentTimeMillis()); + if (SUCCESS_CODE.equals(HttpRequestHelper.getTyphoonCode(res))) { + TyphoonModel remoteData = JSON.parseObject(res, new TypeReference() { + }); + List beans = remoteData.getShowapi_res_body().getList(); + for (TyphoonModel.ShowapiResBodyBean.ListBean data : beans) { + Typhoon entity = new Typhoon(); + entity.setTyphoonId(data.getTfid()); + entity.setName(data.getName()); + entity.setEngName(data.getEnname()); + entity.setLng(Double.valueOf(data.getLng())); + entity.setLat(Double.valueOf(data.getLat())); + entity.setTyphoonType(data.getStrong()); + entity.setCenterPressure(data.getPressure()); + entity.setSpeed(data.getSpeed()); + entity.setPower(Integer.valueOf(data.getPower())); + entity.setMoveSpeed(data.getMovespeed()); + entity.setMoveDirection(data.getMovedirection()); + entity.setRadius7(data.getRadius7()); + entity.setRadius10(data.getRadius10()); + entity.setTime(data.getTime()); + entity.setIsActive("1"); + this.baseMapper.insert(entity); + } + } + updateTyphoonDetail(); + } + + /** + * 更新台风详情 + */ + private void updateTyphoonDetail() { + //筛选出还未消散的台风并更新详情 + List typhoons = this.baseMapper.selectCurrentTyphoon(); + for (Typhoon typhoon : typhoons) { + /** + * 获取台风接口数据 + * */ + String res = HttpRequestHelper.doGet( + Constant.TYPHOON_DETAIL.replace("ID", typhoon.getTyphoonId()) + + System.currentTimeMillis()); + if (SUCCESS_CODE.equals(HttpRequestHelper.getTyphoonCode(res))) { + TyphoonDetailModel remoteData = JSON.parseObject(res, new TypeReference() { + }); + TyphoonDetailModel.ShowapiResBodyBean.ObjBean objBean = remoteData.getShowapi_res_body().getObj(); + + String typhoonId = objBean.getTfid(); + /** + * 保存台风基本情况存到数据库 + * */ + TyphoonDetail detail = new TyphoonDetail(); + detail.setTyphoonId(objBean.getTfid()); + detail.setName(objBean.getName()); + detail.setEngName(objBean.getEnname()); + detail.setWarnLevel(objBean.getWarnlevel()); + detail.setCenterLng(Double.parseDouble(objBean.getCenterlng())); + detail.setCenterLat(Double.parseDouble(objBean.getCenterlat())); + detail.setStartTime(objBean.getStarttime()); + detail.setEndTime(objBean.getEndtime()); + detail.setIsActive(objBean.getIsactive()); + QueryWrapper queryWrapper = new QueryWrapper().eq("TYPHOON_ID", typhoonId); + detailService.saveOrUpdate(detail, queryWrapper); + + /** + * 更新台风列表台风状态 + * */ + typhoon.setIsActive(objBean.getIsactive()); + saveOrUpdate(typhoon, new QueryWrapper().eq("TYPHOON_ID", typhoonId)); + + /** + * 保存台风登陆情况存到数据库 + * */ + List landBeans = objBean.getLand(); + for (TyphoonDetailModel.ShowapiResBodyBean.ObjBean.LandBan bean : landBeans) { + LandPoint landPoint = new LandPoint(); + + landPoint.setTyphoonId(typhoonId); + landPoint.setLandAddress(bean.getLandaddress()); + landPoint.setLandTime(bean.getLandtime()); + landPoint.setType(bean.getStrong()); + landPoint.setLng(bean.getLng()); + landPoint.setLat(bean.getLat()); + landPoint.setInfo(bean.getInfo()); + landPointService.save(landPoint); + } + + /** + * 保存台风移动路径存到数据库 + * */ + List routePoints = objBean.getPoints(); + routePointService.remove(new QueryWrapper().eq("TYPHOON_ID", typhoonId)); + for (TyphoonDetailModel.ShowapiResBodyBean.ObjBean.PointsBean point : routePoints) { + RoutePoint routePoint = new RoutePoint(); + + routePoint.setTyphoonId(typhoonId); + routePoint.setTime(point.getTime()); + routePoint.setCenterPressure(point.getPressure()); + routePoint.setSpeed(point.getSpeed()); + routePoint.setTyphoonType(point.getStrong()); + routePoint.setMoveSpeed(point.getMovespeed()); + routePoint.setPower(Integer.parseInt(point.getPower())); + routePoint.setMoveDirection(point.getMovedirection()); + routePoint.setLng(point.getLng()); + routePoint.setLat(point.getLat()); + routePoint.setRadius12(point.getRadius12()); + routePoint.setRadius10(point.getRadius10()); + routePoint.setRadius7(point.getRadius7()); + routePoint.setRoutePrediction(point.getJl()); + routePoint.setCenterPosition(point.getCkposition()); + routePointService.save(routePoint); + } + } + } + } + + @Override + public List currentTyphoonList() { + List typhoonList = new ArrayList<>(); + //筛选出还未消散的台风并更新详情 + List typhoons = this.baseMapper.selectCurrentTyphoon(); + for (Typhoon typhoon : typhoons) { + typhoonList.add(new TyphoonDTO(typhoon)); + } + return typhoonList; + } + + @Override + public TyphoonDetailDTO typhoonDetail(String typhoonId) { + TyphoonDetail typhoonDetail = detailService.getOne( + new QueryWrapper().eq("TYPHOON_ID", typhoonId) + ); + if (typhoonDetail == null) { + return null; + } + log.info(JSON.toJSONString(typhoonDetail)); + List landPoints = landPointService.list( + new QueryWrapper().eq("TYPHOON_ID", typhoonId) + ); + List routePoints = routePointService.list( + new QueryWrapper().eq("TYPHOON_ID", typhoonId) + ); + return new TyphoonDetailDTO(typhoonDetail, landPoints, routePoints); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/utils/Constant.java b/casic-server/src/main/java/com/casic/missiles/modular/system/utils/Constant.java new file mode 100644 index 0000000..552a6e9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/utils/Constant.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.system.utils; + +/** + * @author a203 + */ +public class Constant { + /** + * 热带气旋/台风相关常量 + */ + private static final String BASE_URL = "https://route.showapi.com"; + private static final String API_APPID = "780330"; + private static final String API_SIGN_KEY = "f30ac28b65cc447da936448c57bc5d99"; + + public static final String TYPHOON_LIST = BASE_URL + + "/342-1?" + + "showapi_appid=" + API_APPID + "&" + + "showapi_sign=" + API_SIGN_KEY + "&" + + "showapi_timestamp="; + + public static final String TYPHOON_DETAIL = BASE_URL + + "/342-2?" + + "showapi_appid=" + API_APPID + "&" + + "showapi_sign=" + API_SIGN_KEY + "&" + + "tfid=ID" + "&" + + "showapi_timestamp="; + + /** + * 洋流相关常量 + */ + private static final String OCEAN_BASE_URL = "http://api.meteo.open.ninecosmos.cn"; + public static final String OCEAN_HEADER_NAME = "Authorization"; + public static final String OCEAN_APPID = "WXZH888888"; + public static final String OCEAN_APP_KEY = "xb#bD&xtho@b80scbDb"; + + public static final String OCEAN_TOKEN = OCEAN_BASE_URL + "/us/users/open/token"; + public static final String OCEAN_DETAIL = OCEAN_BASE_URL + "/mr/netcdf/meteo/ytx"; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/utils/HttpRequestHelper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/utils/HttpRequestHelper.java new file mode 100644 index 0000000..1e0cd94 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/utils/HttpRequestHelper.java @@ -0,0 +1,115 @@ +package com.casic.missiles.modular.system.utils; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONException; +import com.alibaba.fastjson.JSONObject; +import lombok.NonNull; +import okhttp3.*; + +import java.io.IOException; +import java.util.Objects; +import java.util.concurrent.TimeUnit; + +/** + * 网络请求工具 + * + * @author a203 + */ +public class HttpRequestHelper { + + public static RequestBody createRequestBody(String value) { + return RequestBody.create(MediaType.parse("application/json; charset=utf-8"), value); + } + + public static String doPost(Request request) { + return streamResponse(request); + } + + public static String doGet(String url) { + return streamResponse(new Request.Builder() + .url(url) + .build()); + } + + private static String streamResponse(@NonNull Request request) { + OkHttpClient httpClient = new OkHttpClient.Builder() + .connectTimeout(10, TimeUnit.SECONDS) + .writeTimeout(10, TimeUnit.SECONDS) + .readTimeout(20, TimeUnit.SECONDS) + .build(); + Call call = httpClient.newCall(request); + try { + Response response = call.execute(); + return response.body() != null ? Objects.requireNonNull(response.body()).string() : ""; + } catch (IOException e) { + e.printStackTrace(); + } + return ""; + } + + public static String obtainOceanData(double lng, double lat, String date, String days, String hour) { + /** + * 获取洋流数据Token + * */ + JSONObject object = new JSONObject(); + try { + object.put("appId", Constant.OCEAN_APPID); + object.put("appKey", Constant.OCEAN_APP_KEY); + } catch (JSONException e) { + e.printStackTrace(); + } + Request tokenRequest = new Request.Builder() + .url(Constant.OCEAN_TOKEN) + .post(HttpRequestHelper.createRequestBody(object.toJSONString())) + .build(); + String tokenJson = HttpRequestHelper.doPost(tokenRequest); + if ("".equals(tokenJson)) { + return null; + } + /** + * 解析token + * */ + JSONObject tokenObject = JSON.parseObject(tokenJson); + JSONObject dataObject = tokenObject.getJSONObject("data"); + String token = dataObject.getString("token"); + /** + * 封装请求参数 + * */ + JSONObject jsonObject = new JSONObject(); + try { + jsonObject.put("lon", lng); + jsonObject.put("lat", lat); + jsonObject.put("date", date); + jsonObject.put("hour", days); + jsonObject.put("days", hour); + } catch (JSONException e) { + e.printStackTrace(); + } + /** + * 获取洋流数据 + * */ + Request request = new Request.Builder() + .addHeader(Constant.OCEAN_HEADER_NAME, token) + .url(Constant.OCEAN_DETAIL) + .post(HttpRequestHelper.createRequestBody(jsonObject.toJSONString())) + .build(); + return HttpRequestHelper.doPost(request); + } + + public static String getTyphoonCode(String value) { + if ("".equals(value)) { + return value; + } + JSONObject jsonObject = JSON.parseObject(value); + return jsonObject.getString("showapi_res_code"); + } + + public static String getOceanCode(String value) { + if ("".equals(value)) { + return value; + } + JSONObject jsonObject = JSON.parseObject(value); + Integer code = jsonObject.getInteger("code"); + return String.valueOf(code); + } +} 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/src/main/java/com/casic/missiles/modular/system/model/sql/RoutePoint.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/RoutePoint.java new file mode 100644 index 0000000..d8dad80 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/RoutePoint.java @@ -0,0 +1,117 @@ +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_route_point") +public class RoutePoint extends Model { + private static final long serialVersionUID = 1L; + + /** + * 台风数据库主键 + *

+ * type = IdType.AUTO 是数据库自增 + */ + @TableId(value = "ID", type = IdType.ASSIGN_ID) + private Long id; + + /** + * 台风ID + */ + @TableField("TYPHOON_ID") + private String typhoonId; + + /** + * 数据更新时间 + */ + @TableField("TIME") + private String time; + + /** + * 台风中心气压,单位【百帕】 + */ + @TableField("CENTER_PRESSURE") + private String centerPressure; + + /** + * 风速,单位【米/每秒】 + */ + @TableField("SPEED") + private String speed; + + /** + * 台风风力等级描述 + */ + @TableField("TYPHOON_TYPE") + private String typhoonType; + + /** + * 台风整体移动速度,单位【公里/小时】 + */ + @TableField("MOVE_SPEED") + private String moveSpeed; + + /** + * 风力,单位【级】 + */ + @TableField("POWER") + private Integer power; + + /** + * 台风未来移动方向 + */ + @TableField("MOVE_DIRECTION") + private String moveDirection; + + /** + * 经度 + */ + @TableField("LNG") + private Double lng; + + /** + * 纬度 + */ + @TableField("LAT") + private Double lat; + + /** + * 12级风力影响半径 + */ + @TableField("RADIUS_12") + private String radius12; + + /** + * 10级风力影响半径 + */ + @TableField("RADIUS_10") + private String radius10; + + /** + * 7级风力影响半径 + */ + @TableField("RADIUS_7") + private String radius7; + + /** + * 台风路线预测 + */ + @TableField("ROUTE_PREDICTION") + private String routePrediction; + + /** + * 中心位置 + */ + @TableField("CENTER_POSITION") + private String centerPosition; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/Typhoon.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/Typhoon.java new file mode 100644 index 0000000..2a88897 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/Typhoon.java @@ -0,0 +1,101 @@ +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_list") +public class Typhoon 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("NAME") + private String name; + /** + * 台风英文代号 + */ + @TableField("ENG_NAME") + private String engName; + /** + * 经度 + */ + @TableField("LNG") + private Double lng; + /** + * 纬度 + */ + @TableField("LAT") + private Double lat; + /** + * 台风风力等级描述 + */ + @TableField("TYPHOON_TYPE") + private String typhoonType; + /** + * 台风中心气压,单位【百帕】 + */ + @TableField("CENTER_PRESSURE") + private String centerPressure; + /** + * 风速,单位【米/每秒】 + */ + @TableField("SPEED") + private String speed; + /** + * 风力,单位【级】 + */ + @TableField("POWER") + private Integer power; + /** + * 台风整体移动速度,单位【公里/小时】 + */ + @TableField("MOVE_SPEED") + private String moveSpeed; + /** + * 台风未来移动方向 + */ + @TableField("MOVE_DIRECTION") + private String moveDirection; + /** + * 10级风力影响半径 + */ + @TableField("RADIUS_10") + private String radius10; + /** + * 7级风力影响半径 + */ + @TableField("RADIUS_7") + private String radius7; + /** + * 数据更新时间 + */ + @TableField("TIME") + private String time; + /** + * 台风是否已消散,1-未消散,0-已消散 + */ + @TableField("IS_ACTIVE") + private String isActive; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/TyphoonDetail.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/TyphoonDetail.java new file mode 100644 index 0000000..6a64023 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/TyphoonDetail.java @@ -0,0 +1,79 @@ +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_detail") +public class TyphoonDetail 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("NAME") + private String name; + + /** + * 台风英文代号 + */ + @TableField("ENG_NAME") + private String engName; + + /** + * 台风告警级别 + */ + @TableField("WARN_LEVEL") + private String warnLevel; + + /** + * 台风中心经度 + */ + @TableField("CENTER_LNG") + private Double centerLng; + + /** + * 台风中心纬度 + */ + @TableField("CENTER_LAT") + private Double centerLat; + + /** + * 台风开始时间 + */ + @TableField("START_TIME") + private String startTime; + + /** + * 台风结束时间 + */ + @TableField("END_TIME") + private String endTime; + + /** + * 台风状态 + */ + @TableField("IS_ACTIVE") + private String isActive; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/ILandPointService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ILandPointService.java new file mode 100644 index 0000000..ae8ccb4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ILandPointService.java @@ -0,0 +1,13 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.model.sql.LandPoint; + +/** + * 台风登陆点数据信息 服务类 + * + * @author a203 + */ +public interface ILandPointService extends IService { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IOceanService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IOceanService.java new file mode 100644 index 0000000..486b589 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IOceanService.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.OceanDetailDTO; + +/** + * 洋流数据信息 服务类 + * + * @author a203 + */ +public interface IOceanService { + /** + * 查询洋流数据 + * + * @param lng 经度 + * @param lat 纬度 + * @param date 预报起报日期 + * @param days 预报的是几天后,0表示当天,1表示明天,以此类推 + * @param hour 预报的是days的哪一个小时 + * @return {@link OceanDetailDTO} + */ + OceanDetailDTO oceanDetail(double lng, double lat, String date, String days, String hour); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRoutePointService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRoutePointService.java new file mode 100644 index 0000000..e4c225f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRoutePointService.java @@ -0,0 +1,13 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.model.sql.RoutePoint; + +/** + * 台风移动点数据信息 服务类 + * + * @author a203 + */ +public interface IRoutePointService extends IService { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonDetailService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonDetailService.java new file mode 100644 index 0000000..8db2e65 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonDetailService.java @@ -0,0 +1,13 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.model.sql.TyphoonDetail; + +/** + * 台风详情数据信息 服务类 + * + * @author a203 + */ +public interface ITyphoonDetailService extends IService { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonService.java new file mode 100644 index 0000000..2daf133 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonService.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.dto.TyphoonDTO; +import com.casic.missiles.modular.system.dto.TyphoonDetailDTO; +import com.casic.missiles.modular.system.model.sql.Typhoon; + +import java.util.List; + +/** + * 台风列表数据信息 服务类 + * + * @author a203 + */ +public interface ITyphoonService extends IService { + /** + * 保存台风列表 + */ + void saveTyphoon(); + + /***开放接口给内网服务器使用**************************************/ + + /** + * 查询台风列表 + * + * @return {@link List } + */ + List currentTyphoonList(); + + /** + * 查询台风详情 + * + * @param typhoonId 台风ID + * @return {@link TyphoonDetailDTO} + */ + TyphoonDetailDTO typhoonDetail(String typhoonId); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/LandPointServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/LandPointServiceImpl.java new file mode 100644 index 0000000..5cff515 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/LandPointServiceImpl.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.LandPointMapper; +import com.casic.missiles.modular.system.model.sql.LandPoint; +import com.casic.missiles.modular.system.service.ILandPointService; +import org.springframework.stereotype.Service; + +/** + * 台风数据信息 服务实现类 + * + * @author a203 + */ + +@Service +public class LandPointServiceImpl extends ServiceImpl implements ILandPointService { + + public LandPointServiceImpl() { + + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/OceanServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/OceanServiceImpl.java new file mode 100644 index 0000000..4416594 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/OceanServiceImpl.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.TypeReference; +import com.casic.missiles.modular.system.dto.OceanDetailDTO; +import com.casic.missiles.modular.system.model.remote.OceanDetailModel; +import com.casic.missiles.modular.system.service.IOceanService; +import com.casic.missiles.modular.system.utils.HttpRequestHelper; +import org.springframework.stereotype.Service; + +/** + * 洋流数据信息 服务实现类 + * + * @author a203 + */ + +@Service +public class OceanServiceImpl implements IOceanService { + + private static final String SUCCESS_CODE = "0"; + + public OceanServiceImpl() { + + } + + @Override + public OceanDetailDTO oceanDetail(double lng, double lat, String date, String days, String hour) { + String oceanData = HttpRequestHelper.obtainOceanData(lng, lat, date, days, hour); + /** + * 解析洋流数据返回给前端 + * */ + if (SUCCESS_CODE.equals(HttpRequestHelper.getOceanCode(oceanData))) { + OceanDetailModel remoteData = JSON.parseObject(oceanData, new TypeReference() { + }); + if (remoteData == null) { + return null; + } + return new OceanDetailDTO(remoteData); + } + return null; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RoutePointServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RoutePointServiceImpl.java new file mode 100644 index 0000000..7fb4bdd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RoutePointServiceImpl.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RoutePointMapper; +import com.casic.missiles.modular.system.model.sql.RoutePoint; +import com.casic.missiles.modular.system.service.IRoutePointService; +import org.springframework.stereotype.Service; + +/** + * 台风数据信息 服务实现类 + * + * @author a203 + */ + +@Service +public class RoutePointServiceImpl extends ServiceImpl implements IRoutePointService { + + public RoutePointServiceImpl() { + + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/TyphoonDetailServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/TyphoonDetailServiceImpl.java new file mode 100644 index 0000000..128df09 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/TyphoonDetailServiceImpl.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.TyphoonDetailMapper; +import com.casic.missiles.modular.system.model.sql.TyphoonDetail; +import com.casic.missiles.modular.system.service.ITyphoonDetailService; +import org.springframework.stereotype.Service; + +/** + * 台风数据信息 服务实现类 + * + * @author a203 + */ + +@Service +public class TyphoonDetailServiceImpl extends ServiceImpl implements ITyphoonDetailService { + + public TyphoonDetailServiceImpl() { + + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/TyphoonServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/TyphoonServiceImpl.java new file mode 100644 index 0000000..8e73254 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/TyphoonServiceImpl.java @@ -0,0 +1,202 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.TypeReference; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.TyphoonMapper; +import com.casic.missiles.modular.system.dto.TyphoonDTO; +import com.casic.missiles.modular.system.dto.TyphoonDetailDTO; +import com.casic.missiles.modular.system.model.remote.TyphoonDetailModel; +import com.casic.missiles.modular.system.model.remote.TyphoonModel; +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.Typhoon; +import com.casic.missiles.modular.system.model.sql.TyphoonDetail; +import com.casic.missiles.modular.system.service.ILandPointService; +import com.casic.missiles.modular.system.service.IRoutePointService; +import com.casic.missiles.modular.system.service.ITyphoonDetailService; +import com.casic.missiles.modular.system.service.ITyphoonService; +import com.casic.missiles.modular.system.utils.Constant; +import com.casic.missiles.modular.system.utils.HttpRequestHelper; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +/** + * 台风数据信息 服务实现类 + * + * @author a203 + */ +@Slf4j +@Service +public class TyphoonServiceImpl extends ServiceImpl implements ITyphoonService { + + private static final String SUCCESS_CODE = "0"; + + private final ITyphoonDetailService detailService; + private final ILandPointService landPointService; + private final IRoutePointService routePointService; + + public TyphoonServiceImpl(ITyphoonDetailService detailService, + ILandPointService landPointService, + IRoutePointService routePointService) { + this.detailService = detailService; + this.landPointService = landPointService; + this.routePointService = routePointService; + } + + /** + * 保存台风列表 + */ + @Override + public void saveTyphoon() { + /** + * 获取台风接口数据 + * */ + String res = HttpRequestHelper.doGet(Constant.TYPHOON_LIST + System.currentTimeMillis()); + if (SUCCESS_CODE.equals(HttpRequestHelper.getTyphoonCode(res))) { + TyphoonModel remoteData = JSON.parseObject(res, new TypeReference() { + }); + List beans = remoteData.getShowapi_res_body().getList(); + for (TyphoonModel.ShowapiResBodyBean.ListBean data : beans) { + Typhoon entity = new Typhoon(); + entity.setTyphoonId(data.getTfid()); + entity.setName(data.getName()); + entity.setEngName(data.getEnname()); + entity.setLng(Double.valueOf(data.getLng())); + entity.setLat(Double.valueOf(data.getLat())); + entity.setTyphoonType(data.getStrong()); + entity.setCenterPressure(data.getPressure()); + entity.setSpeed(data.getSpeed()); + entity.setPower(Integer.valueOf(data.getPower())); + entity.setMoveSpeed(data.getMovespeed()); + entity.setMoveDirection(data.getMovedirection()); + entity.setRadius7(data.getRadius7()); + entity.setRadius10(data.getRadius10()); + entity.setTime(data.getTime()); + entity.setIsActive("1"); + this.baseMapper.insert(entity); + } + } + updateTyphoonDetail(); + } + + /** + * 更新台风详情 + */ + private void updateTyphoonDetail() { + //筛选出还未消散的台风并更新详情 + List typhoons = this.baseMapper.selectCurrentTyphoon(); + for (Typhoon typhoon : typhoons) { + /** + * 获取台风接口数据 + * */ + String res = HttpRequestHelper.doGet( + Constant.TYPHOON_DETAIL.replace("ID", typhoon.getTyphoonId()) + + System.currentTimeMillis()); + if (SUCCESS_CODE.equals(HttpRequestHelper.getTyphoonCode(res))) { + TyphoonDetailModel remoteData = JSON.parseObject(res, new TypeReference() { + }); + TyphoonDetailModel.ShowapiResBodyBean.ObjBean objBean = remoteData.getShowapi_res_body().getObj(); + + String typhoonId = objBean.getTfid(); + /** + * 保存台风基本情况存到数据库 + * */ + TyphoonDetail detail = new TyphoonDetail(); + detail.setTyphoonId(objBean.getTfid()); + detail.setName(objBean.getName()); + detail.setEngName(objBean.getEnname()); + detail.setWarnLevel(objBean.getWarnlevel()); + detail.setCenterLng(Double.parseDouble(objBean.getCenterlng())); + detail.setCenterLat(Double.parseDouble(objBean.getCenterlat())); + detail.setStartTime(objBean.getStarttime()); + detail.setEndTime(objBean.getEndtime()); + detail.setIsActive(objBean.getIsactive()); + QueryWrapper queryWrapper = new QueryWrapper().eq("TYPHOON_ID", typhoonId); + detailService.saveOrUpdate(detail, queryWrapper); + + /** + * 更新台风列表台风状态 + * */ + typhoon.setIsActive(objBean.getIsactive()); + saveOrUpdate(typhoon, new QueryWrapper().eq("TYPHOON_ID", typhoonId)); + + /** + * 保存台风登陆情况存到数据库 + * */ + List landBeans = objBean.getLand(); + for (TyphoonDetailModel.ShowapiResBodyBean.ObjBean.LandBan bean : landBeans) { + LandPoint landPoint = new LandPoint(); + + landPoint.setTyphoonId(typhoonId); + landPoint.setLandAddress(bean.getLandaddress()); + landPoint.setLandTime(bean.getLandtime()); + landPoint.setType(bean.getStrong()); + landPoint.setLng(bean.getLng()); + landPoint.setLat(bean.getLat()); + landPoint.setInfo(bean.getInfo()); + landPointService.save(landPoint); + } + + /** + * 保存台风移动路径存到数据库 + * */ + List routePoints = objBean.getPoints(); + routePointService.remove(new QueryWrapper().eq("TYPHOON_ID", typhoonId)); + for (TyphoonDetailModel.ShowapiResBodyBean.ObjBean.PointsBean point : routePoints) { + RoutePoint routePoint = new RoutePoint(); + + routePoint.setTyphoonId(typhoonId); + routePoint.setTime(point.getTime()); + routePoint.setCenterPressure(point.getPressure()); + routePoint.setSpeed(point.getSpeed()); + routePoint.setTyphoonType(point.getStrong()); + routePoint.setMoveSpeed(point.getMovespeed()); + routePoint.setPower(Integer.parseInt(point.getPower())); + routePoint.setMoveDirection(point.getMovedirection()); + routePoint.setLng(point.getLng()); + routePoint.setLat(point.getLat()); + routePoint.setRadius12(point.getRadius12()); + routePoint.setRadius10(point.getRadius10()); + routePoint.setRadius7(point.getRadius7()); + routePoint.setRoutePrediction(point.getJl()); + routePoint.setCenterPosition(point.getCkposition()); + routePointService.save(routePoint); + } + } + } + } + + @Override + public List currentTyphoonList() { + List typhoonList = new ArrayList<>(); + //筛选出还未消散的台风并更新详情 + List typhoons = this.baseMapper.selectCurrentTyphoon(); + for (Typhoon typhoon : typhoons) { + typhoonList.add(new TyphoonDTO(typhoon)); + } + return typhoonList; + } + + @Override + public TyphoonDetailDTO typhoonDetail(String typhoonId) { + TyphoonDetail typhoonDetail = detailService.getOne( + new QueryWrapper().eq("TYPHOON_ID", typhoonId) + ); + if (typhoonDetail == null) { + return null; + } + log.info(JSON.toJSONString(typhoonDetail)); + List landPoints = landPointService.list( + new QueryWrapper().eq("TYPHOON_ID", typhoonId) + ); + List routePoints = routePointService.list( + new QueryWrapper().eq("TYPHOON_ID", typhoonId) + ); + return new TyphoonDetailDTO(typhoonDetail, landPoints, routePoints); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/utils/Constant.java b/casic-server/src/main/java/com/casic/missiles/modular/system/utils/Constant.java new file mode 100644 index 0000000..552a6e9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/utils/Constant.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.system.utils; + +/** + * @author a203 + */ +public class Constant { + /** + * 热带气旋/台风相关常量 + */ + private static final String BASE_URL = "https://route.showapi.com"; + private static final String API_APPID = "780330"; + private static final String API_SIGN_KEY = "f30ac28b65cc447da936448c57bc5d99"; + + public static final String TYPHOON_LIST = BASE_URL + + "/342-1?" + + "showapi_appid=" + API_APPID + "&" + + "showapi_sign=" + API_SIGN_KEY + "&" + + "showapi_timestamp="; + + public static final String TYPHOON_DETAIL = BASE_URL + + "/342-2?" + + "showapi_appid=" + API_APPID + "&" + + "showapi_sign=" + API_SIGN_KEY + "&" + + "tfid=ID" + "&" + + "showapi_timestamp="; + + /** + * 洋流相关常量 + */ + private static final String OCEAN_BASE_URL = "http://api.meteo.open.ninecosmos.cn"; + public static final String OCEAN_HEADER_NAME = "Authorization"; + public static final String OCEAN_APPID = "WXZH888888"; + public static final String OCEAN_APP_KEY = "xb#bD&xtho@b80scbDb"; + + public static final String OCEAN_TOKEN = OCEAN_BASE_URL + "/us/users/open/token"; + public static final String OCEAN_DETAIL = OCEAN_BASE_URL + "/mr/netcdf/meteo/ytx"; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/utils/HttpRequestHelper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/utils/HttpRequestHelper.java new file mode 100644 index 0000000..1e0cd94 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/utils/HttpRequestHelper.java @@ -0,0 +1,115 @@ +package com.casic.missiles.modular.system.utils; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONException; +import com.alibaba.fastjson.JSONObject; +import lombok.NonNull; +import okhttp3.*; + +import java.io.IOException; +import java.util.Objects; +import java.util.concurrent.TimeUnit; + +/** + * 网络请求工具 + * + * @author a203 + */ +public class HttpRequestHelper { + + public static RequestBody createRequestBody(String value) { + return RequestBody.create(MediaType.parse("application/json; charset=utf-8"), value); + } + + public static String doPost(Request request) { + return streamResponse(request); + } + + public static String doGet(String url) { + return streamResponse(new Request.Builder() + .url(url) + .build()); + } + + private static String streamResponse(@NonNull Request request) { + OkHttpClient httpClient = new OkHttpClient.Builder() + .connectTimeout(10, TimeUnit.SECONDS) + .writeTimeout(10, TimeUnit.SECONDS) + .readTimeout(20, TimeUnit.SECONDS) + .build(); + Call call = httpClient.newCall(request); + try { + Response response = call.execute(); + return response.body() != null ? Objects.requireNonNull(response.body()).string() : ""; + } catch (IOException e) { + e.printStackTrace(); + } + return ""; + } + + public static String obtainOceanData(double lng, double lat, String date, String days, String hour) { + /** + * 获取洋流数据Token + * */ + JSONObject object = new JSONObject(); + try { + object.put("appId", Constant.OCEAN_APPID); + object.put("appKey", Constant.OCEAN_APP_KEY); + } catch (JSONException e) { + e.printStackTrace(); + } + Request tokenRequest = new Request.Builder() + .url(Constant.OCEAN_TOKEN) + .post(HttpRequestHelper.createRequestBody(object.toJSONString())) + .build(); + String tokenJson = HttpRequestHelper.doPost(tokenRequest); + if ("".equals(tokenJson)) { + return null; + } + /** + * 解析token + * */ + JSONObject tokenObject = JSON.parseObject(tokenJson); + JSONObject dataObject = tokenObject.getJSONObject("data"); + String token = dataObject.getString("token"); + /** + * 封装请求参数 + * */ + JSONObject jsonObject = new JSONObject(); + try { + jsonObject.put("lon", lng); + jsonObject.put("lat", lat); + jsonObject.put("date", date); + jsonObject.put("hour", days); + jsonObject.put("days", hour); + } catch (JSONException e) { + e.printStackTrace(); + } + /** + * 获取洋流数据 + * */ + Request request = new Request.Builder() + .addHeader(Constant.OCEAN_HEADER_NAME, token) + .url(Constant.OCEAN_DETAIL) + .post(HttpRequestHelper.createRequestBody(jsonObject.toJSONString())) + .build(); + return HttpRequestHelper.doPost(request); + } + + public static String getTyphoonCode(String value) { + if ("".equals(value)) { + return value; + } + JSONObject jsonObject = JSON.parseObject(value); + return jsonObject.getString("showapi_res_code"); + } + + public static String getOceanCode(String value) { + if ("".equals(value)) { + return value; + } + JSONObject jsonObject = JSON.parseObject(value); + Integer code = jsonObject.getInteger("code"); + return String.valueOf(code); + } +} diff --git a/casic-web/pom.xml b/casic-web/pom.xml index 73e9d68..7d97900 100644 --- a/casic-web/pom.xml +++ b/casic-web/pom.xml @@ -107,6 +107,11 @@ + + com.casic + casic-job-quartz + 2.0.0.alpha + 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/src/main/java/com/casic/missiles/modular/system/model/sql/RoutePoint.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/RoutePoint.java new file mode 100644 index 0000000..d8dad80 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/RoutePoint.java @@ -0,0 +1,117 @@ +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_route_point") +public class RoutePoint extends Model { + private static final long serialVersionUID = 1L; + + /** + * 台风数据库主键 + *

+ * type = IdType.AUTO 是数据库自增 + */ + @TableId(value = "ID", type = IdType.ASSIGN_ID) + private Long id; + + /** + * 台风ID + */ + @TableField("TYPHOON_ID") + private String typhoonId; + + /** + * 数据更新时间 + */ + @TableField("TIME") + private String time; + + /** + * 台风中心气压,单位【百帕】 + */ + @TableField("CENTER_PRESSURE") + private String centerPressure; + + /** + * 风速,单位【米/每秒】 + */ + @TableField("SPEED") + private String speed; + + /** + * 台风风力等级描述 + */ + @TableField("TYPHOON_TYPE") + private String typhoonType; + + /** + * 台风整体移动速度,单位【公里/小时】 + */ + @TableField("MOVE_SPEED") + private String moveSpeed; + + /** + * 风力,单位【级】 + */ + @TableField("POWER") + private Integer power; + + /** + * 台风未来移动方向 + */ + @TableField("MOVE_DIRECTION") + private String moveDirection; + + /** + * 经度 + */ + @TableField("LNG") + private Double lng; + + /** + * 纬度 + */ + @TableField("LAT") + private Double lat; + + /** + * 12级风力影响半径 + */ + @TableField("RADIUS_12") + private String radius12; + + /** + * 10级风力影响半径 + */ + @TableField("RADIUS_10") + private String radius10; + + /** + * 7级风力影响半径 + */ + @TableField("RADIUS_7") + private String radius7; + + /** + * 台风路线预测 + */ + @TableField("ROUTE_PREDICTION") + private String routePrediction; + + /** + * 中心位置 + */ + @TableField("CENTER_POSITION") + private String centerPosition; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/Typhoon.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/Typhoon.java new file mode 100644 index 0000000..2a88897 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/Typhoon.java @@ -0,0 +1,101 @@ +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_list") +public class Typhoon 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("NAME") + private String name; + /** + * 台风英文代号 + */ + @TableField("ENG_NAME") + private String engName; + /** + * 经度 + */ + @TableField("LNG") + private Double lng; + /** + * 纬度 + */ + @TableField("LAT") + private Double lat; + /** + * 台风风力等级描述 + */ + @TableField("TYPHOON_TYPE") + private String typhoonType; + /** + * 台风中心气压,单位【百帕】 + */ + @TableField("CENTER_PRESSURE") + private String centerPressure; + /** + * 风速,单位【米/每秒】 + */ + @TableField("SPEED") + private String speed; + /** + * 风力,单位【级】 + */ + @TableField("POWER") + private Integer power; + /** + * 台风整体移动速度,单位【公里/小时】 + */ + @TableField("MOVE_SPEED") + private String moveSpeed; + /** + * 台风未来移动方向 + */ + @TableField("MOVE_DIRECTION") + private String moveDirection; + /** + * 10级风力影响半径 + */ + @TableField("RADIUS_10") + private String radius10; + /** + * 7级风力影响半径 + */ + @TableField("RADIUS_7") + private String radius7; + /** + * 数据更新时间 + */ + @TableField("TIME") + private String time; + /** + * 台风是否已消散,1-未消散,0-已消散 + */ + @TableField("IS_ACTIVE") + private String isActive; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/TyphoonDetail.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/TyphoonDetail.java new file mode 100644 index 0000000..6a64023 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/TyphoonDetail.java @@ -0,0 +1,79 @@ +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_detail") +public class TyphoonDetail 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("NAME") + private String name; + + /** + * 台风英文代号 + */ + @TableField("ENG_NAME") + private String engName; + + /** + * 台风告警级别 + */ + @TableField("WARN_LEVEL") + private String warnLevel; + + /** + * 台风中心经度 + */ + @TableField("CENTER_LNG") + private Double centerLng; + + /** + * 台风中心纬度 + */ + @TableField("CENTER_LAT") + private Double centerLat; + + /** + * 台风开始时间 + */ + @TableField("START_TIME") + private String startTime; + + /** + * 台风结束时间 + */ + @TableField("END_TIME") + private String endTime; + + /** + * 台风状态 + */ + @TableField("IS_ACTIVE") + private String isActive; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/ILandPointService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ILandPointService.java new file mode 100644 index 0000000..ae8ccb4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ILandPointService.java @@ -0,0 +1,13 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.model.sql.LandPoint; + +/** + * 台风登陆点数据信息 服务类 + * + * @author a203 + */ +public interface ILandPointService extends IService { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IOceanService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IOceanService.java new file mode 100644 index 0000000..486b589 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IOceanService.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.OceanDetailDTO; + +/** + * 洋流数据信息 服务类 + * + * @author a203 + */ +public interface IOceanService { + /** + * 查询洋流数据 + * + * @param lng 经度 + * @param lat 纬度 + * @param date 预报起报日期 + * @param days 预报的是几天后,0表示当天,1表示明天,以此类推 + * @param hour 预报的是days的哪一个小时 + * @return {@link OceanDetailDTO} + */ + OceanDetailDTO oceanDetail(double lng, double lat, String date, String days, String hour); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRoutePointService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRoutePointService.java new file mode 100644 index 0000000..e4c225f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRoutePointService.java @@ -0,0 +1,13 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.model.sql.RoutePoint; + +/** + * 台风移动点数据信息 服务类 + * + * @author a203 + */ +public interface IRoutePointService extends IService { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonDetailService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonDetailService.java new file mode 100644 index 0000000..8db2e65 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonDetailService.java @@ -0,0 +1,13 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.model.sql.TyphoonDetail; + +/** + * 台风详情数据信息 服务类 + * + * @author a203 + */ +public interface ITyphoonDetailService extends IService { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonService.java new file mode 100644 index 0000000..2daf133 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonService.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.dto.TyphoonDTO; +import com.casic.missiles.modular.system.dto.TyphoonDetailDTO; +import com.casic.missiles.modular.system.model.sql.Typhoon; + +import java.util.List; + +/** + * 台风列表数据信息 服务类 + * + * @author a203 + */ +public interface ITyphoonService extends IService { + /** + * 保存台风列表 + */ + void saveTyphoon(); + + /***开放接口给内网服务器使用**************************************/ + + /** + * 查询台风列表 + * + * @return {@link List } + */ + List currentTyphoonList(); + + /** + * 查询台风详情 + * + * @param typhoonId 台风ID + * @return {@link TyphoonDetailDTO} + */ + TyphoonDetailDTO typhoonDetail(String typhoonId); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/LandPointServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/LandPointServiceImpl.java new file mode 100644 index 0000000..5cff515 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/LandPointServiceImpl.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.LandPointMapper; +import com.casic.missiles.modular.system.model.sql.LandPoint; +import com.casic.missiles.modular.system.service.ILandPointService; +import org.springframework.stereotype.Service; + +/** + * 台风数据信息 服务实现类 + * + * @author a203 + */ + +@Service +public class LandPointServiceImpl extends ServiceImpl implements ILandPointService { + + public LandPointServiceImpl() { + + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/OceanServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/OceanServiceImpl.java new file mode 100644 index 0000000..4416594 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/OceanServiceImpl.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.TypeReference; +import com.casic.missiles.modular.system.dto.OceanDetailDTO; +import com.casic.missiles.modular.system.model.remote.OceanDetailModel; +import com.casic.missiles.modular.system.service.IOceanService; +import com.casic.missiles.modular.system.utils.HttpRequestHelper; +import org.springframework.stereotype.Service; + +/** + * 洋流数据信息 服务实现类 + * + * @author a203 + */ + +@Service +public class OceanServiceImpl implements IOceanService { + + private static final String SUCCESS_CODE = "0"; + + public OceanServiceImpl() { + + } + + @Override + public OceanDetailDTO oceanDetail(double lng, double lat, String date, String days, String hour) { + String oceanData = HttpRequestHelper.obtainOceanData(lng, lat, date, days, hour); + /** + * 解析洋流数据返回给前端 + * */ + if (SUCCESS_CODE.equals(HttpRequestHelper.getOceanCode(oceanData))) { + OceanDetailModel remoteData = JSON.parseObject(oceanData, new TypeReference() { + }); + if (remoteData == null) { + return null; + } + return new OceanDetailDTO(remoteData); + } + return null; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RoutePointServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RoutePointServiceImpl.java new file mode 100644 index 0000000..7fb4bdd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RoutePointServiceImpl.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RoutePointMapper; +import com.casic.missiles.modular.system.model.sql.RoutePoint; +import com.casic.missiles.modular.system.service.IRoutePointService; +import org.springframework.stereotype.Service; + +/** + * 台风数据信息 服务实现类 + * + * @author a203 + */ + +@Service +public class RoutePointServiceImpl extends ServiceImpl implements IRoutePointService { + + public RoutePointServiceImpl() { + + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/TyphoonDetailServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/TyphoonDetailServiceImpl.java new file mode 100644 index 0000000..128df09 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/TyphoonDetailServiceImpl.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.TyphoonDetailMapper; +import com.casic.missiles.modular.system.model.sql.TyphoonDetail; +import com.casic.missiles.modular.system.service.ITyphoonDetailService; +import org.springframework.stereotype.Service; + +/** + * 台风数据信息 服务实现类 + * + * @author a203 + */ + +@Service +public class TyphoonDetailServiceImpl extends ServiceImpl implements ITyphoonDetailService { + + public TyphoonDetailServiceImpl() { + + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/TyphoonServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/TyphoonServiceImpl.java new file mode 100644 index 0000000..8e73254 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/TyphoonServiceImpl.java @@ -0,0 +1,202 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.TypeReference; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.TyphoonMapper; +import com.casic.missiles.modular.system.dto.TyphoonDTO; +import com.casic.missiles.modular.system.dto.TyphoonDetailDTO; +import com.casic.missiles.modular.system.model.remote.TyphoonDetailModel; +import com.casic.missiles.modular.system.model.remote.TyphoonModel; +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.Typhoon; +import com.casic.missiles.modular.system.model.sql.TyphoonDetail; +import com.casic.missiles.modular.system.service.ILandPointService; +import com.casic.missiles.modular.system.service.IRoutePointService; +import com.casic.missiles.modular.system.service.ITyphoonDetailService; +import com.casic.missiles.modular.system.service.ITyphoonService; +import com.casic.missiles.modular.system.utils.Constant; +import com.casic.missiles.modular.system.utils.HttpRequestHelper; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +/** + * 台风数据信息 服务实现类 + * + * @author a203 + */ +@Slf4j +@Service +public class TyphoonServiceImpl extends ServiceImpl implements ITyphoonService { + + private static final String SUCCESS_CODE = "0"; + + private final ITyphoonDetailService detailService; + private final ILandPointService landPointService; + private final IRoutePointService routePointService; + + public TyphoonServiceImpl(ITyphoonDetailService detailService, + ILandPointService landPointService, + IRoutePointService routePointService) { + this.detailService = detailService; + this.landPointService = landPointService; + this.routePointService = routePointService; + } + + /** + * 保存台风列表 + */ + @Override + public void saveTyphoon() { + /** + * 获取台风接口数据 + * */ + String res = HttpRequestHelper.doGet(Constant.TYPHOON_LIST + System.currentTimeMillis()); + if (SUCCESS_CODE.equals(HttpRequestHelper.getTyphoonCode(res))) { + TyphoonModel remoteData = JSON.parseObject(res, new TypeReference() { + }); + List beans = remoteData.getShowapi_res_body().getList(); + for (TyphoonModel.ShowapiResBodyBean.ListBean data : beans) { + Typhoon entity = new Typhoon(); + entity.setTyphoonId(data.getTfid()); + entity.setName(data.getName()); + entity.setEngName(data.getEnname()); + entity.setLng(Double.valueOf(data.getLng())); + entity.setLat(Double.valueOf(data.getLat())); + entity.setTyphoonType(data.getStrong()); + entity.setCenterPressure(data.getPressure()); + entity.setSpeed(data.getSpeed()); + entity.setPower(Integer.valueOf(data.getPower())); + entity.setMoveSpeed(data.getMovespeed()); + entity.setMoveDirection(data.getMovedirection()); + entity.setRadius7(data.getRadius7()); + entity.setRadius10(data.getRadius10()); + entity.setTime(data.getTime()); + entity.setIsActive("1"); + this.baseMapper.insert(entity); + } + } + updateTyphoonDetail(); + } + + /** + * 更新台风详情 + */ + private void updateTyphoonDetail() { + //筛选出还未消散的台风并更新详情 + List typhoons = this.baseMapper.selectCurrentTyphoon(); + for (Typhoon typhoon : typhoons) { + /** + * 获取台风接口数据 + * */ + String res = HttpRequestHelper.doGet( + Constant.TYPHOON_DETAIL.replace("ID", typhoon.getTyphoonId()) + + System.currentTimeMillis()); + if (SUCCESS_CODE.equals(HttpRequestHelper.getTyphoonCode(res))) { + TyphoonDetailModel remoteData = JSON.parseObject(res, new TypeReference() { + }); + TyphoonDetailModel.ShowapiResBodyBean.ObjBean objBean = remoteData.getShowapi_res_body().getObj(); + + String typhoonId = objBean.getTfid(); + /** + * 保存台风基本情况存到数据库 + * */ + TyphoonDetail detail = new TyphoonDetail(); + detail.setTyphoonId(objBean.getTfid()); + detail.setName(objBean.getName()); + detail.setEngName(objBean.getEnname()); + detail.setWarnLevel(objBean.getWarnlevel()); + detail.setCenterLng(Double.parseDouble(objBean.getCenterlng())); + detail.setCenterLat(Double.parseDouble(objBean.getCenterlat())); + detail.setStartTime(objBean.getStarttime()); + detail.setEndTime(objBean.getEndtime()); + detail.setIsActive(objBean.getIsactive()); + QueryWrapper queryWrapper = new QueryWrapper().eq("TYPHOON_ID", typhoonId); + detailService.saveOrUpdate(detail, queryWrapper); + + /** + * 更新台风列表台风状态 + * */ + typhoon.setIsActive(objBean.getIsactive()); + saveOrUpdate(typhoon, new QueryWrapper().eq("TYPHOON_ID", typhoonId)); + + /** + * 保存台风登陆情况存到数据库 + * */ + List landBeans = objBean.getLand(); + for (TyphoonDetailModel.ShowapiResBodyBean.ObjBean.LandBan bean : landBeans) { + LandPoint landPoint = new LandPoint(); + + landPoint.setTyphoonId(typhoonId); + landPoint.setLandAddress(bean.getLandaddress()); + landPoint.setLandTime(bean.getLandtime()); + landPoint.setType(bean.getStrong()); + landPoint.setLng(bean.getLng()); + landPoint.setLat(bean.getLat()); + landPoint.setInfo(bean.getInfo()); + landPointService.save(landPoint); + } + + /** + * 保存台风移动路径存到数据库 + * */ + List routePoints = objBean.getPoints(); + routePointService.remove(new QueryWrapper().eq("TYPHOON_ID", typhoonId)); + for (TyphoonDetailModel.ShowapiResBodyBean.ObjBean.PointsBean point : routePoints) { + RoutePoint routePoint = new RoutePoint(); + + routePoint.setTyphoonId(typhoonId); + routePoint.setTime(point.getTime()); + routePoint.setCenterPressure(point.getPressure()); + routePoint.setSpeed(point.getSpeed()); + routePoint.setTyphoonType(point.getStrong()); + routePoint.setMoveSpeed(point.getMovespeed()); + routePoint.setPower(Integer.parseInt(point.getPower())); + routePoint.setMoveDirection(point.getMovedirection()); + routePoint.setLng(point.getLng()); + routePoint.setLat(point.getLat()); + routePoint.setRadius12(point.getRadius12()); + routePoint.setRadius10(point.getRadius10()); + routePoint.setRadius7(point.getRadius7()); + routePoint.setRoutePrediction(point.getJl()); + routePoint.setCenterPosition(point.getCkposition()); + routePointService.save(routePoint); + } + } + } + } + + @Override + public List currentTyphoonList() { + List typhoonList = new ArrayList<>(); + //筛选出还未消散的台风并更新详情 + List typhoons = this.baseMapper.selectCurrentTyphoon(); + for (Typhoon typhoon : typhoons) { + typhoonList.add(new TyphoonDTO(typhoon)); + } + return typhoonList; + } + + @Override + public TyphoonDetailDTO typhoonDetail(String typhoonId) { + TyphoonDetail typhoonDetail = detailService.getOne( + new QueryWrapper().eq("TYPHOON_ID", typhoonId) + ); + if (typhoonDetail == null) { + return null; + } + log.info(JSON.toJSONString(typhoonDetail)); + List landPoints = landPointService.list( + new QueryWrapper().eq("TYPHOON_ID", typhoonId) + ); + List routePoints = routePointService.list( + new QueryWrapper().eq("TYPHOON_ID", typhoonId) + ); + return new TyphoonDetailDTO(typhoonDetail, landPoints, routePoints); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/utils/Constant.java b/casic-server/src/main/java/com/casic/missiles/modular/system/utils/Constant.java new file mode 100644 index 0000000..552a6e9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/utils/Constant.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.system.utils; + +/** + * @author a203 + */ +public class Constant { + /** + * 热带气旋/台风相关常量 + */ + private static final String BASE_URL = "https://route.showapi.com"; + private static final String API_APPID = "780330"; + private static final String API_SIGN_KEY = "f30ac28b65cc447da936448c57bc5d99"; + + public static final String TYPHOON_LIST = BASE_URL + + "/342-1?" + + "showapi_appid=" + API_APPID + "&" + + "showapi_sign=" + API_SIGN_KEY + "&" + + "showapi_timestamp="; + + public static final String TYPHOON_DETAIL = BASE_URL + + "/342-2?" + + "showapi_appid=" + API_APPID + "&" + + "showapi_sign=" + API_SIGN_KEY + "&" + + "tfid=ID" + "&" + + "showapi_timestamp="; + + /** + * 洋流相关常量 + */ + private static final String OCEAN_BASE_URL = "http://api.meteo.open.ninecosmos.cn"; + public static final String OCEAN_HEADER_NAME = "Authorization"; + public static final String OCEAN_APPID = "WXZH888888"; + public static final String OCEAN_APP_KEY = "xb#bD&xtho@b80scbDb"; + + public static final String OCEAN_TOKEN = OCEAN_BASE_URL + "/us/users/open/token"; + public static final String OCEAN_DETAIL = OCEAN_BASE_URL + "/mr/netcdf/meteo/ytx"; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/utils/HttpRequestHelper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/utils/HttpRequestHelper.java new file mode 100644 index 0000000..1e0cd94 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/utils/HttpRequestHelper.java @@ -0,0 +1,115 @@ +package com.casic.missiles.modular.system.utils; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONException; +import com.alibaba.fastjson.JSONObject; +import lombok.NonNull; +import okhttp3.*; + +import java.io.IOException; +import java.util.Objects; +import java.util.concurrent.TimeUnit; + +/** + * 网络请求工具 + * + * @author a203 + */ +public class HttpRequestHelper { + + public static RequestBody createRequestBody(String value) { + return RequestBody.create(MediaType.parse("application/json; charset=utf-8"), value); + } + + public static String doPost(Request request) { + return streamResponse(request); + } + + public static String doGet(String url) { + return streamResponse(new Request.Builder() + .url(url) + .build()); + } + + private static String streamResponse(@NonNull Request request) { + OkHttpClient httpClient = new OkHttpClient.Builder() + .connectTimeout(10, TimeUnit.SECONDS) + .writeTimeout(10, TimeUnit.SECONDS) + .readTimeout(20, TimeUnit.SECONDS) + .build(); + Call call = httpClient.newCall(request); + try { + Response response = call.execute(); + return response.body() != null ? Objects.requireNonNull(response.body()).string() : ""; + } catch (IOException e) { + e.printStackTrace(); + } + return ""; + } + + public static String obtainOceanData(double lng, double lat, String date, String days, String hour) { + /** + * 获取洋流数据Token + * */ + JSONObject object = new JSONObject(); + try { + object.put("appId", Constant.OCEAN_APPID); + object.put("appKey", Constant.OCEAN_APP_KEY); + } catch (JSONException e) { + e.printStackTrace(); + } + Request tokenRequest = new Request.Builder() + .url(Constant.OCEAN_TOKEN) + .post(HttpRequestHelper.createRequestBody(object.toJSONString())) + .build(); + String tokenJson = HttpRequestHelper.doPost(tokenRequest); + if ("".equals(tokenJson)) { + return null; + } + /** + * 解析token + * */ + JSONObject tokenObject = JSON.parseObject(tokenJson); + JSONObject dataObject = tokenObject.getJSONObject("data"); + String token = dataObject.getString("token"); + /** + * 封装请求参数 + * */ + JSONObject jsonObject = new JSONObject(); + try { + jsonObject.put("lon", lng); + jsonObject.put("lat", lat); + jsonObject.put("date", date); + jsonObject.put("hour", days); + jsonObject.put("days", hour); + } catch (JSONException e) { + e.printStackTrace(); + } + /** + * 获取洋流数据 + * */ + Request request = new Request.Builder() + .addHeader(Constant.OCEAN_HEADER_NAME, token) + .url(Constant.OCEAN_DETAIL) + .post(HttpRequestHelper.createRequestBody(jsonObject.toJSONString())) + .build(); + return HttpRequestHelper.doPost(request); + } + + public static String getTyphoonCode(String value) { + if ("".equals(value)) { + return value; + } + JSONObject jsonObject = JSON.parseObject(value); + return jsonObject.getString("showapi_res_code"); + } + + public static String getOceanCode(String value) { + if ("".equals(value)) { + return value; + } + JSONObject jsonObject = JSON.parseObject(value); + Integer code = jsonObject.getInteger("code"); + return String.valueOf(code); + } +} diff --git a/casic-web/pom.xml b/casic-web/pom.xml index 73e9d68..7d97900 100644 --- a/casic-web/pom.xml +++ b/casic-web/pom.xml @@ -107,6 +107,11 @@ + + com.casic + casic-job-quartz + 2.0.0.alpha + diff --git a/casic-web/src/main/java/com/casic/missiles/CasicApplication.java b/casic-web/src/main/java/com/casic/missiles/CasicApplication.java index a90ac89..499eedd 100644 --- a/casic-web/src/main/java/com/casic/missiles/CasicApplication.java +++ b/casic-web/src/main/java/com/casic/missiles/CasicApplication.java @@ -5,6 +5,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCaching; import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.transaction.annotation.EnableTransactionManagement; /** @@ -17,6 +18,7 @@ @EnableTransactionManagement(proxyTargetClass = true) @EnableAsync @Slf4j +@EnableScheduling public class CasicApplication { public static void main(String[] args) { SpringApplication.run(CasicApplication.class, args); 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/src/main/java/com/casic/missiles/modular/system/model/sql/RoutePoint.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/RoutePoint.java new file mode 100644 index 0000000..d8dad80 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/RoutePoint.java @@ -0,0 +1,117 @@ +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_route_point") +public class RoutePoint extends Model { + private static final long serialVersionUID = 1L; + + /** + * 台风数据库主键 + *

+ * type = IdType.AUTO 是数据库自增 + */ + @TableId(value = "ID", type = IdType.ASSIGN_ID) + private Long id; + + /** + * 台风ID + */ + @TableField("TYPHOON_ID") + private String typhoonId; + + /** + * 数据更新时间 + */ + @TableField("TIME") + private String time; + + /** + * 台风中心气压,单位【百帕】 + */ + @TableField("CENTER_PRESSURE") + private String centerPressure; + + /** + * 风速,单位【米/每秒】 + */ + @TableField("SPEED") + private String speed; + + /** + * 台风风力等级描述 + */ + @TableField("TYPHOON_TYPE") + private String typhoonType; + + /** + * 台风整体移动速度,单位【公里/小时】 + */ + @TableField("MOVE_SPEED") + private String moveSpeed; + + /** + * 风力,单位【级】 + */ + @TableField("POWER") + private Integer power; + + /** + * 台风未来移动方向 + */ + @TableField("MOVE_DIRECTION") + private String moveDirection; + + /** + * 经度 + */ + @TableField("LNG") + private Double lng; + + /** + * 纬度 + */ + @TableField("LAT") + private Double lat; + + /** + * 12级风力影响半径 + */ + @TableField("RADIUS_12") + private String radius12; + + /** + * 10级风力影响半径 + */ + @TableField("RADIUS_10") + private String radius10; + + /** + * 7级风力影响半径 + */ + @TableField("RADIUS_7") + private String radius7; + + /** + * 台风路线预测 + */ + @TableField("ROUTE_PREDICTION") + private String routePrediction; + + /** + * 中心位置 + */ + @TableField("CENTER_POSITION") + private String centerPosition; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/Typhoon.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/Typhoon.java new file mode 100644 index 0000000..2a88897 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/Typhoon.java @@ -0,0 +1,101 @@ +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_list") +public class Typhoon 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("NAME") + private String name; + /** + * 台风英文代号 + */ + @TableField("ENG_NAME") + private String engName; + /** + * 经度 + */ + @TableField("LNG") + private Double lng; + /** + * 纬度 + */ + @TableField("LAT") + private Double lat; + /** + * 台风风力等级描述 + */ + @TableField("TYPHOON_TYPE") + private String typhoonType; + /** + * 台风中心气压,单位【百帕】 + */ + @TableField("CENTER_PRESSURE") + private String centerPressure; + /** + * 风速,单位【米/每秒】 + */ + @TableField("SPEED") + private String speed; + /** + * 风力,单位【级】 + */ + @TableField("POWER") + private Integer power; + /** + * 台风整体移动速度,单位【公里/小时】 + */ + @TableField("MOVE_SPEED") + private String moveSpeed; + /** + * 台风未来移动方向 + */ + @TableField("MOVE_DIRECTION") + private String moveDirection; + /** + * 10级风力影响半径 + */ + @TableField("RADIUS_10") + private String radius10; + /** + * 7级风力影响半径 + */ + @TableField("RADIUS_7") + private String radius7; + /** + * 数据更新时间 + */ + @TableField("TIME") + private String time; + /** + * 台风是否已消散,1-未消散,0-已消散 + */ + @TableField("IS_ACTIVE") + private String isActive; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/TyphoonDetail.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/TyphoonDetail.java new file mode 100644 index 0000000..6a64023 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/TyphoonDetail.java @@ -0,0 +1,79 @@ +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_detail") +public class TyphoonDetail 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("NAME") + private String name; + + /** + * 台风英文代号 + */ + @TableField("ENG_NAME") + private String engName; + + /** + * 台风告警级别 + */ + @TableField("WARN_LEVEL") + private String warnLevel; + + /** + * 台风中心经度 + */ + @TableField("CENTER_LNG") + private Double centerLng; + + /** + * 台风中心纬度 + */ + @TableField("CENTER_LAT") + private Double centerLat; + + /** + * 台风开始时间 + */ + @TableField("START_TIME") + private String startTime; + + /** + * 台风结束时间 + */ + @TableField("END_TIME") + private String endTime; + + /** + * 台风状态 + */ + @TableField("IS_ACTIVE") + private String isActive; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/ILandPointService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ILandPointService.java new file mode 100644 index 0000000..ae8ccb4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ILandPointService.java @@ -0,0 +1,13 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.model.sql.LandPoint; + +/** + * 台风登陆点数据信息 服务类 + * + * @author a203 + */ +public interface ILandPointService extends IService { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IOceanService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IOceanService.java new file mode 100644 index 0000000..486b589 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IOceanService.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.OceanDetailDTO; + +/** + * 洋流数据信息 服务类 + * + * @author a203 + */ +public interface IOceanService { + /** + * 查询洋流数据 + * + * @param lng 经度 + * @param lat 纬度 + * @param date 预报起报日期 + * @param days 预报的是几天后,0表示当天,1表示明天,以此类推 + * @param hour 预报的是days的哪一个小时 + * @return {@link OceanDetailDTO} + */ + OceanDetailDTO oceanDetail(double lng, double lat, String date, String days, String hour); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRoutePointService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRoutePointService.java new file mode 100644 index 0000000..e4c225f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRoutePointService.java @@ -0,0 +1,13 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.model.sql.RoutePoint; + +/** + * 台风移动点数据信息 服务类 + * + * @author a203 + */ +public interface IRoutePointService extends IService { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonDetailService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonDetailService.java new file mode 100644 index 0000000..8db2e65 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonDetailService.java @@ -0,0 +1,13 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.model.sql.TyphoonDetail; + +/** + * 台风详情数据信息 服务类 + * + * @author a203 + */ +public interface ITyphoonDetailService extends IService { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonService.java new file mode 100644 index 0000000..2daf133 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonService.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.dto.TyphoonDTO; +import com.casic.missiles.modular.system.dto.TyphoonDetailDTO; +import com.casic.missiles.modular.system.model.sql.Typhoon; + +import java.util.List; + +/** + * 台风列表数据信息 服务类 + * + * @author a203 + */ +public interface ITyphoonService extends IService { + /** + * 保存台风列表 + */ + void saveTyphoon(); + + /***开放接口给内网服务器使用**************************************/ + + /** + * 查询台风列表 + * + * @return {@link List } + */ + List currentTyphoonList(); + + /** + * 查询台风详情 + * + * @param typhoonId 台风ID + * @return {@link TyphoonDetailDTO} + */ + TyphoonDetailDTO typhoonDetail(String typhoonId); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/LandPointServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/LandPointServiceImpl.java new file mode 100644 index 0000000..5cff515 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/LandPointServiceImpl.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.LandPointMapper; +import com.casic.missiles.modular.system.model.sql.LandPoint; +import com.casic.missiles.modular.system.service.ILandPointService; +import org.springframework.stereotype.Service; + +/** + * 台风数据信息 服务实现类 + * + * @author a203 + */ + +@Service +public class LandPointServiceImpl extends ServiceImpl implements ILandPointService { + + public LandPointServiceImpl() { + + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/OceanServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/OceanServiceImpl.java new file mode 100644 index 0000000..4416594 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/OceanServiceImpl.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.TypeReference; +import com.casic.missiles.modular.system.dto.OceanDetailDTO; +import com.casic.missiles.modular.system.model.remote.OceanDetailModel; +import com.casic.missiles.modular.system.service.IOceanService; +import com.casic.missiles.modular.system.utils.HttpRequestHelper; +import org.springframework.stereotype.Service; + +/** + * 洋流数据信息 服务实现类 + * + * @author a203 + */ + +@Service +public class OceanServiceImpl implements IOceanService { + + private static final String SUCCESS_CODE = "0"; + + public OceanServiceImpl() { + + } + + @Override + public OceanDetailDTO oceanDetail(double lng, double lat, String date, String days, String hour) { + String oceanData = HttpRequestHelper.obtainOceanData(lng, lat, date, days, hour); + /** + * 解析洋流数据返回给前端 + * */ + if (SUCCESS_CODE.equals(HttpRequestHelper.getOceanCode(oceanData))) { + OceanDetailModel remoteData = JSON.parseObject(oceanData, new TypeReference() { + }); + if (remoteData == null) { + return null; + } + return new OceanDetailDTO(remoteData); + } + return null; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RoutePointServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RoutePointServiceImpl.java new file mode 100644 index 0000000..7fb4bdd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RoutePointServiceImpl.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RoutePointMapper; +import com.casic.missiles.modular.system.model.sql.RoutePoint; +import com.casic.missiles.modular.system.service.IRoutePointService; +import org.springframework.stereotype.Service; + +/** + * 台风数据信息 服务实现类 + * + * @author a203 + */ + +@Service +public class RoutePointServiceImpl extends ServiceImpl implements IRoutePointService { + + public RoutePointServiceImpl() { + + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/TyphoonDetailServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/TyphoonDetailServiceImpl.java new file mode 100644 index 0000000..128df09 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/TyphoonDetailServiceImpl.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.TyphoonDetailMapper; +import com.casic.missiles.modular.system.model.sql.TyphoonDetail; +import com.casic.missiles.modular.system.service.ITyphoonDetailService; +import org.springframework.stereotype.Service; + +/** + * 台风数据信息 服务实现类 + * + * @author a203 + */ + +@Service +public class TyphoonDetailServiceImpl extends ServiceImpl implements ITyphoonDetailService { + + public TyphoonDetailServiceImpl() { + + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/TyphoonServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/TyphoonServiceImpl.java new file mode 100644 index 0000000..8e73254 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/TyphoonServiceImpl.java @@ -0,0 +1,202 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.TypeReference; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.TyphoonMapper; +import com.casic.missiles.modular.system.dto.TyphoonDTO; +import com.casic.missiles.modular.system.dto.TyphoonDetailDTO; +import com.casic.missiles.modular.system.model.remote.TyphoonDetailModel; +import com.casic.missiles.modular.system.model.remote.TyphoonModel; +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.Typhoon; +import com.casic.missiles.modular.system.model.sql.TyphoonDetail; +import com.casic.missiles.modular.system.service.ILandPointService; +import com.casic.missiles.modular.system.service.IRoutePointService; +import com.casic.missiles.modular.system.service.ITyphoonDetailService; +import com.casic.missiles.modular.system.service.ITyphoonService; +import com.casic.missiles.modular.system.utils.Constant; +import com.casic.missiles.modular.system.utils.HttpRequestHelper; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +/** + * 台风数据信息 服务实现类 + * + * @author a203 + */ +@Slf4j +@Service +public class TyphoonServiceImpl extends ServiceImpl implements ITyphoonService { + + private static final String SUCCESS_CODE = "0"; + + private final ITyphoonDetailService detailService; + private final ILandPointService landPointService; + private final IRoutePointService routePointService; + + public TyphoonServiceImpl(ITyphoonDetailService detailService, + ILandPointService landPointService, + IRoutePointService routePointService) { + this.detailService = detailService; + this.landPointService = landPointService; + this.routePointService = routePointService; + } + + /** + * 保存台风列表 + */ + @Override + public void saveTyphoon() { + /** + * 获取台风接口数据 + * */ + String res = HttpRequestHelper.doGet(Constant.TYPHOON_LIST + System.currentTimeMillis()); + if (SUCCESS_CODE.equals(HttpRequestHelper.getTyphoonCode(res))) { + TyphoonModel remoteData = JSON.parseObject(res, new TypeReference() { + }); + List beans = remoteData.getShowapi_res_body().getList(); + for (TyphoonModel.ShowapiResBodyBean.ListBean data : beans) { + Typhoon entity = new Typhoon(); + entity.setTyphoonId(data.getTfid()); + entity.setName(data.getName()); + entity.setEngName(data.getEnname()); + entity.setLng(Double.valueOf(data.getLng())); + entity.setLat(Double.valueOf(data.getLat())); + entity.setTyphoonType(data.getStrong()); + entity.setCenterPressure(data.getPressure()); + entity.setSpeed(data.getSpeed()); + entity.setPower(Integer.valueOf(data.getPower())); + entity.setMoveSpeed(data.getMovespeed()); + entity.setMoveDirection(data.getMovedirection()); + entity.setRadius7(data.getRadius7()); + entity.setRadius10(data.getRadius10()); + entity.setTime(data.getTime()); + entity.setIsActive("1"); + this.baseMapper.insert(entity); + } + } + updateTyphoonDetail(); + } + + /** + * 更新台风详情 + */ + private void updateTyphoonDetail() { + //筛选出还未消散的台风并更新详情 + List typhoons = this.baseMapper.selectCurrentTyphoon(); + for (Typhoon typhoon : typhoons) { + /** + * 获取台风接口数据 + * */ + String res = HttpRequestHelper.doGet( + Constant.TYPHOON_DETAIL.replace("ID", typhoon.getTyphoonId()) + + System.currentTimeMillis()); + if (SUCCESS_CODE.equals(HttpRequestHelper.getTyphoonCode(res))) { + TyphoonDetailModel remoteData = JSON.parseObject(res, new TypeReference() { + }); + TyphoonDetailModel.ShowapiResBodyBean.ObjBean objBean = remoteData.getShowapi_res_body().getObj(); + + String typhoonId = objBean.getTfid(); + /** + * 保存台风基本情况存到数据库 + * */ + TyphoonDetail detail = new TyphoonDetail(); + detail.setTyphoonId(objBean.getTfid()); + detail.setName(objBean.getName()); + detail.setEngName(objBean.getEnname()); + detail.setWarnLevel(objBean.getWarnlevel()); + detail.setCenterLng(Double.parseDouble(objBean.getCenterlng())); + detail.setCenterLat(Double.parseDouble(objBean.getCenterlat())); + detail.setStartTime(objBean.getStarttime()); + detail.setEndTime(objBean.getEndtime()); + detail.setIsActive(objBean.getIsactive()); + QueryWrapper queryWrapper = new QueryWrapper().eq("TYPHOON_ID", typhoonId); + detailService.saveOrUpdate(detail, queryWrapper); + + /** + * 更新台风列表台风状态 + * */ + typhoon.setIsActive(objBean.getIsactive()); + saveOrUpdate(typhoon, new QueryWrapper().eq("TYPHOON_ID", typhoonId)); + + /** + * 保存台风登陆情况存到数据库 + * */ + List landBeans = objBean.getLand(); + for (TyphoonDetailModel.ShowapiResBodyBean.ObjBean.LandBan bean : landBeans) { + LandPoint landPoint = new LandPoint(); + + landPoint.setTyphoonId(typhoonId); + landPoint.setLandAddress(bean.getLandaddress()); + landPoint.setLandTime(bean.getLandtime()); + landPoint.setType(bean.getStrong()); + landPoint.setLng(bean.getLng()); + landPoint.setLat(bean.getLat()); + landPoint.setInfo(bean.getInfo()); + landPointService.save(landPoint); + } + + /** + * 保存台风移动路径存到数据库 + * */ + List routePoints = objBean.getPoints(); + routePointService.remove(new QueryWrapper().eq("TYPHOON_ID", typhoonId)); + for (TyphoonDetailModel.ShowapiResBodyBean.ObjBean.PointsBean point : routePoints) { + RoutePoint routePoint = new RoutePoint(); + + routePoint.setTyphoonId(typhoonId); + routePoint.setTime(point.getTime()); + routePoint.setCenterPressure(point.getPressure()); + routePoint.setSpeed(point.getSpeed()); + routePoint.setTyphoonType(point.getStrong()); + routePoint.setMoveSpeed(point.getMovespeed()); + routePoint.setPower(Integer.parseInt(point.getPower())); + routePoint.setMoveDirection(point.getMovedirection()); + routePoint.setLng(point.getLng()); + routePoint.setLat(point.getLat()); + routePoint.setRadius12(point.getRadius12()); + routePoint.setRadius10(point.getRadius10()); + routePoint.setRadius7(point.getRadius7()); + routePoint.setRoutePrediction(point.getJl()); + routePoint.setCenterPosition(point.getCkposition()); + routePointService.save(routePoint); + } + } + } + } + + @Override + public List currentTyphoonList() { + List typhoonList = new ArrayList<>(); + //筛选出还未消散的台风并更新详情 + List typhoons = this.baseMapper.selectCurrentTyphoon(); + for (Typhoon typhoon : typhoons) { + typhoonList.add(new TyphoonDTO(typhoon)); + } + return typhoonList; + } + + @Override + public TyphoonDetailDTO typhoonDetail(String typhoonId) { + TyphoonDetail typhoonDetail = detailService.getOne( + new QueryWrapper().eq("TYPHOON_ID", typhoonId) + ); + if (typhoonDetail == null) { + return null; + } + log.info(JSON.toJSONString(typhoonDetail)); + List landPoints = landPointService.list( + new QueryWrapper().eq("TYPHOON_ID", typhoonId) + ); + List routePoints = routePointService.list( + new QueryWrapper().eq("TYPHOON_ID", typhoonId) + ); + return new TyphoonDetailDTO(typhoonDetail, landPoints, routePoints); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/utils/Constant.java b/casic-server/src/main/java/com/casic/missiles/modular/system/utils/Constant.java new file mode 100644 index 0000000..552a6e9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/utils/Constant.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.system.utils; + +/** + * @author a203 + */ +public class Constant { + /** + * 热带气旋/台风相关常量 + */ + private static final String BASE_URL = "https://route.showapi.com"; + private static final String API_APPID = "780330"; + private static final String API_SIGN_KEY = "f30ac28b65cc447da936448c57bc5d99"; + + public static final String TYPHOON_LIST = BASE_URL + + "/342-1?" + + "showapi_appid=" + API_APPID + "&" + + "showapi_sign=" + API_SIGN_KEY + "&" + + "showapi_timestamp="; + + public static final String TYPHOON_DETAIL = BASE_URL + + "/342-2?" + + "showapi_appid=" + API_APPID + "&" + + "showapi_sign=" + API_SIGN_KEY + "&" + + "tfid=ID" + "&" + + "showapi_timestamp="; + + /** + * 洋流相关常量 + */ + private static final String OCEAN_BASE_URL = "http://api.meteo.open.ninecosmos.cn"; + public static final String OCEAN_HEADER_NAME = "Authorization"; + public static final String OCEAN_APPID = "WXZH888888"; + public static final String OCEAN_APP_KEY = "xb#bD&xtho@b80scbDb"; + + public static final String OCEAN_TOKEN = OCEAN_BASE_URL + "/us/users/open/token"; + public static final String OCEAN_DETAIL = OCEAN_BASE_URL + "/mr/netcdf/meteo/ytx"; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/utils/HttpRequestHelper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/utils/HttpRequestHelper.java new file mode 100644 index 0000000..1e0cd94 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/utils/HttpRequestHelper.java @@ -0,0 +1,115 @@ +package com.casic.missiles.modular.system.utils; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONException; +import com.alibaba.fastjson.JSONObject; +import lombok.NonNull; +import okhttp3.*; + +import java.io.IOException; +import java.util.Objects; +import java.util.concurrent.TimeUnit; + +/** + * 网络请求工具 + * + * @author a203 + */ +public class HttpRequestHelper { + + public static RequestBody createRequestBody(String value) { + return RequestBody.create(MediaType.parse("application/json; charset=utf-8"), value); + } + + public static String doPost(Request request) { + return streamResponse(request); + } + + public static String doGet(String url) { + return streamResponse(new Request.Builder() + .url(url) + .build()); + } + + private static String streamResponse(@NonNull Request request) { + OkHttpClient httpClient = new OkHttpClient.Builder() + .connectTimeout(10, TimeUnit.SECONDS) + .writeTimeout(10, TimeUnit.SECONDS) + .readTimeout(20, TimeUnit.SECONDS) + .build(); + Call call = httpClient.newCall(request); + try { + Response response = call.execute(); + return response.body() != null ? Objects.requireNonNull(response.body()).string() : ""; + } catch (IOException e) { + e.printStackTrace(); + } + return ""; + } + + public static String obtainOceanData(double lng, double lat, String date, String days, String hour) { + /** + * 获取洋流数据Token + * */ + JSONObject object = new JSONObject(); + try { + object.put("appId", Constant.OCEAN_APPID); + object.put("appKey", Constant.OCEAN_APP_KEY); + } catch (JSONException e) { + e.printStackTrace(); + } + Request tokenRequest = new Request.Builder() + .url(Constant.OCEAN_TOKEN) + .post(HttpRequestHelper.createRequestBody(object.toJSONString())) + .build(); + String tokenJson = HttpRequestHelper.doPost(tokenRequest); + if ("".equals(tokenJson)) { + return null; + } + /** + * 解析token + * */ + JSONObject tokenObject = JSON.parseObject(tokenJson); + JSONObject dataObject = tokenObject.getJSONObject("data"); + String token = dataObject.getString("token"); + /** + * 封装请求参数 + * */ + JSONObject jsonObject = new JSONObject(); + try { + jsonObject.put("lon", lng); + jsonObject.put("lat", lat); + jsonObject.put("date", date); + jsonObject.put("hour", days); + jsonObject.put("days", hour); + } catch (JSONException e) { + e.printStackTrace(); + } + /** + * 获取洋流数据 + * */ + Request request = new Request.Builder() + .addHeader(Constant.OCEAN_HEADER_NAME, token) + .url(Constant.OCEAN_DETAIL) + .post(HttpRequestHelper.createRequestBody(jsonObject.toJSONString())) + .build(); + return HttpRequestHelper.doPost(request); + } + + public static String getTyphoonCode(String value) { + if ("".equals(value)) { + return value; + } + JSONObject jsonObject = JSON.parseObject(value); + return jsonObject.getString("showapi_res_code"); + } + + public static String getOceanCode(String value) { + if ("".equals(value)) { + return value; + } + JSONObject jsonObject = JSON.parseObject(value); + Integer code = jsonObject.getInteger("code"); + return String.valueOf(code); + } +} diff --git a/casic-web/pom.xml b/casic-web/pom.xml index 73e9d68..7d97900 100644 --- a/casic-web/pom.xml +++ b/casic-web/pom.xml @@ -107,6 +107,11 @@ + + com.casic + casic-job-quartz + 2.0.0.alpha + diff --git a/casic-web/src/main/java/com/casic/missiles/CasicApplication.java b/casic-web/src/main/java/com/casic/missiles/CasicApplication.java index a90ac89..499eedd 100644 --- a/casic-web/src/main/java/com/casic/missiles/CasicApplication.java +++ b/casic-web/src/main/java/com/casic/missiles/CasicApplication.java @@ -5,6 +5,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCaching; import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.transaction.annotation.EnableTransactionManagement; /** @@ -17,6 +18,7 @@ @EnableTransactionManagement(proxyTargetClass = true) @EnableAsync @Slf4j +@EnableScheduling public class CasicApplication { public static void main(String[] args) { SpringApplication.run(CasicApplication.class, args); diff --git a/casic-web/src/main/resources/config/application-dev.yml b/casic-web/src/main/resources/config/application-dev.yml index 8c18554..0f6d593 100644 --- a/casic-web/src/main/resources/config/application-dev.yml +++ b/casic-web/src/main/resources/config/application-dev.yml @@ -1,10 +1,10 @@ server: - port: 8083 + port: 8085 ################### spring配置 ################### spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_template2.0?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true + url: jdbc:mysql://111.198.10.15:11336/casic_mobile_shelter_extranet?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true username: root password: Casic203 jms: @@ -19,7 +19,7 @@ # redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer casic: #kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/environment/** #flowable数据源和多数据源配置 db: init: 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/src/main/java/com/casic/missiles/modular/system/model/sql/RoutePoint.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/RoutePoint.java new file mode 100644 index 0000000..d8dad80 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/RoutePoint.java @@ -0,0 +1,117 @@ +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_route_point") +public class RoutePoint extends Model { + private static final long serialVersionUID = 1L; + + /** + * 台风数据库主键 + *

+ * type = IdType.AUTO 是数据库自增 + */ + @TableId(value = "ID", type = IdType.ASSIGN_ID) + private Long id; + + /** + * 台风ID + */ + @TableField("TYPHOON_ID") + private String typhoonId; + + /** + * 数据更新时间 + */ + @TableField("TIME") + private String time; + + /** + * 台风中心气压,单位【百帕】 + */ + @TableField("CENTER_PRESSURE") + private String centerPressure; + + /** + * 风速,单位【米/每秒】 + */ + @TableField("SPEED") + private String speed; + + /** + * 台风风力等级描述 + */ + @TableField("TYPHOON_TYPE") + private String typhoonType; + + /** + * 台风整体移动速度,单位【公里/小时】 + */ + @TableField("MOVE_SPEED") + private String moveSpeed; + + /** + * 风力,单位【级】 + */ + @TableField("POWER") + private Integer power; + + /** + * 台风未来移动方向 + */ + @TableField("MOVE_DIRECTION") + private String moveDirection; + + /** + * 经度 + */ + @TableField("LNG") + private Double lng; + + /** + * 纬度 + */ + @TableField("LAT") + private Double lat; + + /** + * 12级风力影响半径 + */ + @TableField("RADIUS_12") + private String radius12; + + /** + * 10级风力影响半径 + */ + @TableField("RADIUS_10") + private String radius10; + + /** + * 7级风力影响半径 + */ + @TableField("RADIUS_7") + private String radius7; + + /** + * 台风路线预测 + */ + @TableField("ROUTE_PREDICTION") + private String routePrediction; + + /** + * 中心位置 + */ + @TableField("CENTER_POSITION") + private String centerPosition; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/Typhoon.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/Typhoon.java new file mode 100644 index 0000000..2a88897 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/Typhoon.java @@ -0,0 +1,101 @@ +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_list") +public class Typhoon 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("NAME") + private String name; + /** + * 台风英文代号 + */ + @TableField("ENG_NAME") + private String engName; + /** + * 经度 + */ + @TableField("LNG") + private Double lng; + /** + * 纬度 + */ + @TableField("LAT") + private Double lat; + /** + * 台风风力等级描述 + */ + @TableField("TYPHOON_TYPE") + private String typhoonType; + /** + * 台风中心气压,单位【百帕】 + */ + @TableField("CENTER_PRESSURE") + private String centerPressure; + /** + * 风速,单位【米/每秒】 + */ + @TableField("SPEED") + private String speed; + /** + * 风力,单位【级】 + */ + @TableField("POWER") + private Integer power; + /** + * 台风整体移动速度,单位【公里/小时】 + */ + @TableField("MOVE_SPEED") + private String moveSpeed; + /** + * 台风未来移动方向 + */ + @TableField("MOVE_DIRECTION") + private String moveDirection; + /** + * 10级风力影响半径 + */ + @TableField("RADIUS_10") + private String radius10; + /** + * 7级风力影响半径 + */ + @TableField("RADIUS_7") + private String radius7; + /** + * 数据更新时间 + */ + @TableField("TIME") + private String time; + /** + * 台风是否已消散,1-未消散,0-已消散 + */ + @TableField("IS_ACTIVE") + private String isActive; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/TyphoonDetail.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/TyphoonDetail.java new file mode 100644 index 0000000..6a64023 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/TyphoonDetail.java @@ -0,0 +1,79 @@ +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_detail") +public class TyphoonDetail 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("NAME") + private String name; + + /** + * 台风英文代号 + */ + @TableField("ENG_NAME") + private String engName; + + /** + * 台风告警级别 + */ + @TableField("WARN_LEVEL") + private String warnLevel; + + /** + * 台风中心经度 + */ + @TableField("CENTER_LNG") + private Double centerLng; + + /** + * 台风中心纬度 + */ + @TableField("CENTER_LAT") + private Double centerLat; + + /** + * 台风开始时间 + */ + @TableField("START_TIME") + private String startTime; + + /** + * 台风结束时间 + */ + @TableField("END_TIME") + private String endTime; + + /** + * 台风状态 + */ + @TableField("IS_ACTIVE") + private String isActive; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/ILandPointService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ILandPointService.java new file mode 100644 index 0000000..ae8ccb4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ILandPointService.java @@ -0,0 +1,13 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.model.sql.LandPoint; + +/** + * 台风登陆点数据信息 服务类 + * + * @author a203 + */ +public interface ILandPointService extends IService { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IOceanService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IOceanService.java new file mode 100644 index 0000000..486b589 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IOceanService.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.OceanDetailDTO; + +/** + * 洋流数据信息 服务类 + * + * @author a203 + */ +public interface IOceanService { + /** + * 查询洋流数据 + * + * @param lng 经度 + * @param lat 纬度 + * @param date 预报起报日期 + * @param days 预报的是几天后,0表示当天,1表示明天,以此类推 + * @param hour 预报的是days的哪一个小时 + * @return {@link OceanDetailDTO} + */ + OceanDetailDTO oceanDetail(double lng, double lat, String date, String days, String hour); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRoutePointService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRoutePointService.java new file mode 100644 index 0000000..e4c225f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRoutePointService.java @@ -0,0 +1,13 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.model.sql.RoutePoint; + +/** + * 台风移动点数据信息 服务类 + * + * @author a203 + */ +public interface IRoutePointService extends IService { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonDetailService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonDetailService.java new file mode 100644 index 0000000..8db2e65 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonDetailService.java @@ -0,0 +1,13 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.model.sql.TyphoonDetail; + +/** + * 台风详情数据信息 服务类 + * + * @author a203 + */ +public interface ITyphoonDetailService extends IService { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonService.java new file mode 100644 index 0000000..2daf133 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonService.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.dto.TyphoonDTO; +import com.casic.missiles.modular.system.dto.TyphoonDetailDTO; +import com.casic.missiles.modular.system.model.sql.Typhoon; + +import java.util.List; + +/** + * 台风列表数据信息 服务类 + * + * @author a203 + */ +public interface ITyphoonService extends IService { + /** + * 保存台风列表 + */ + void saveTyphoon(); + + /***开放接口给内网服务器使用**************************************/ + + /** + * 查询台风列表 + * + * @return {@link List } + */ + List currentTyphoonList(); + + /** + * 查询台风详情 + * + * @param typhoonId 台风ID + * @return {@link TyphoonDetailDTO} + */ + TyphoonDetailDTO typhoonDetail(String typhoonId); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/LandPointServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/LandPointServiceImpl.java new file mode 100644 index 0000000..5cff515 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/LandPointServiceImpl.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.LandPointMapper; +import com.casic.missiles.modular.system.model.sql.LandPoint; +import com.casic.missiles.modular.system.service.ILandPointService; +import org.springframework.stereotype.Service; + +/** + * 台风数据信息 服务实现类 + * + * @author a203 + */ + +@Service +public class LandPointServiceImpl extends ServiceImpl implements ILandPointService { + + public LandPointServiceImpl() { + + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/OceanServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/OceanServiceImpl.java new file mode 100644 index 0000000..4416594 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/OceanServiceImpl.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.TypeReference; +import com.casic.missiles.modular.system.dto.OceanDetailDTO; +import com.casic.missiles.modular.system.model.remote.OceanDetailModel; +import com.casic.missiles.modular.system.service.IOceanService; +import com.casic.missiles.modular.system.utils.HttpRequestHelper; +import org.springframework.stereotype.Service; + +/** + * 洋流数据信息 服务实现类 + * + * @author a203 + */ + +@Service +public class OceanServiceImpl implements IOceanService { + + private static final String SUCCESS_CODE = "0"; + + public OceanServiceImpl() { + + } + + @Override + public OceanDetailDTO oceanDetail(double lng, double lat, String date, String days, String hour) { + String oceanData = HttpRequestHelper.obtainOceanData(lng, lat, date, days, hour); + /** + * 解析洋流数据返回给前端 + * */ + if (SUCCESS_CODE.equals(HttpRequestHelper.getOceanCode(oceanData))) { + OceanDetailModel remoteData = JSON.parseObject(oceanData, new TypeReference() { + }); + if (remoteData == null) { + return null; + } + return new OceanDetailDTO(remoteData); + } + return null; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RoutePointServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RoutePointServiceImpl.java new file mode 100644 index 0000000..7fb4bdd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RoutePointServiceImpl.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RoutePointMapper; +import com.casic.missiles.modular.system.model.sql.RoutePoint; +import com.casic.missiles.modular.system.service.IRoutePointService; +import org.springframework.stereotype.Service; + +/** + * 台风数据信息 服务实现类 + * + * @author a203 + */ + +@Service +public class RoutePointServiceImpl extends ServiceImpl implements IRoutePointService { + + public RoutePointServiceImpl() { + + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/TyphoonDetailServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/TyphoonDetailServiceImpl.java new file mode 100644 index 0000000..128df09 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/TyphoonDetailServiceImpl.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.TyphoonDetailMapper; +import com.casic.missiles.modular.system.model.sql.TyphoonDetail; +import com.casic.missiles.modular.system.service.ITyphoonDetailService; +import org.springframework.stereotype.Service; + +/** + * 台风数据信息 服务实现类 + * + * @author a203 + */ + +@Service +public class TyphoonDetailServiceImpl extends ServiceImpl implements ITyphoonDetailService { + + public TyphoonDetailServiceImpl() { + + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/TyphoonServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/TyphoonServiceImpl.java new file mode 100644 index 0000000..8e73254 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/TyphoonServiceImpl.java @@ -0,0 +1,202 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.TypeReference; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.TyphoonMapper; +import com.casic.missiles.modular.system.dto.TyphoonDTO; +import com.casic.missiles.modular.system.dto.TyphoonDetailDTO; +import com.casic.missiles.modular.system.model.remote.TyphoonDetailModel; +import com.casic.missiles.modular.system.model.remote.TyphoonModel; +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.Typhoon; +import com.casic.missiles.modular.system.model.sql.TyphoonDetail; +import com.casic.missiles.modular.system.service.ILandPointService; +import com.casic.missiles.modular.system.service.IRoutePointService; +import com.casic.missiles.modular.system.service.ITyphoonDetailService; +import com.casic.missiles.modular.system.service.ITyphoonService; +import com.casic.missiles.modular.system.utils.Constant; +import com.casic.missiles.modular.system.utils.HttpRequestHelper; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +/** + * 台风数据信息 服务实现类 + * + * @author a203 + */ +@Slf4j +@Service +public class TyphoonServiceImpl extends ServiceImpl implements ITyphoonService { + + private static final String SUCCESS_CODE = "0"; + + private final ITyphoonDetailService detailService; + private final ILandPointService landPointService; + private final IRoutePointService routePointService; + + public TyphoonServiceImpl(ITyphoonDetailService detailService, + ILandPointService landPointService, + IRoutePointService routePointService) { + this.detailService = detailService; + this.landPointService = landPointService; + this.routePointService = routePointService; + } + + /** + * 保存台风列表 + */ + @Override + public void saveTyphoon() { + /** + * 获取台风接口数据 + * */ + String res = HttpRequestHelper.doGet(Constant.TYPHOON_LIST + System.currentTimeMillis()); + if (SUCCESS_CODE.equals(HttpRequestHelper.getTyphoonCode(res))) { + TyphoonModel remoteData = JSON.parseObject(res, new TypeReference() { + }); + List beans = remoteData.getShowapi_res_body().getList(); + for (TyphoonModel.ShowapiResBodyBean.ListBean data : beans) { + Typhoon entity = new Typhoon(); + entity.setTyphoonId(data.getTfid()); + entity.setName(data.getName()); + entity.setEngName(data.getEnname()); + entity.setLng(Double.valueOf(data.getLng())); + entity.setLat(Double.valueOf(data.getLat())); + entity.setTyphoonType(data.getStrong()); + entity.setCenterPressure(data.getPressure()); + entity.setSpeed(data.getSpeed()); + entity.setPower(Integer.valueOf(data.getPower())); + entity.setMoveSpeed(data.getMovespeed()); + entity.setMoveDirection(data.getMovedirection()); + entity.setRadius7(data.getRadius7()); + entity.setRadius10(data.getRadius10()); + entity.setTime(data.getTime()); + entity.setIsActive("1"); + this.baseMapper.insert(entity); + } + } + updateTyphoonDetail(); + } + + /** + * 更新台风详情 + */ + private void updateTyphoonDetail() { + //筛选出还未消散的台风并更新详情 + List typhoons = this.baseMapper.selectCurrentTyphoon(); + for (Typhoon typhoon : typhoons) { + /** + * 获取台风接口数据 + * */ + String res = HttpRequestHelper.doGet( + Constant.TYPHOON_DETAIL.replace("ID", typhoon.getTyphoonId()) + + System.currentTimeMillis()); + if (SUCCESS_CODE.equals(HttpRequestHelper.getTyphoonCode(res))) { + TyphoonDetailModel remoteData = JSON.parseObject(res, new TypeReference() { + }); + TyphoonDetailModel.ShowapiResBodyBean.ObjBean objBean = remoteData.getShowapi_res_body().getObj(); + + String typhoonId = objBean.getTfid(); + /** + * 保存台风基本情况存到数据库 + * */ + TyphoonDetail detail = new TyphoonDetail(); + detail.setTyphoonId(objBean.getTfid()); + detail.setName(objBean.getName()); + detail.setEngName(objBean.getEnname()); + detail.setWarnLevel(objBean.getWarnlevel()); + detail.setCenterLng(Double.parseDouble(objBean.getCenterlng())); + detail.setCenterLat(Double.parseDouble(objBean.getCenterlat())); + detail.setStartTime(objBean.getStarttime()); + detail.setEndTime(objBean.getEndtime()); + detail.setIsActive(objBean.getIsactive()); + QueryWrapper queryWrapper = new QueryWrapper().eq("TYPHOON_ID", typhoonId); + detailService.saveOrUpdate(detail, queryWrapper); + + /** + * 更新台风列表台风状态 + * */ + typhoon.setIsActive(objBean.getIsactive()); + saveOrUpdate(typhoon, new QueryWrapper().eq("TYPHOON_ID", typhoonId)); + + /** + * 保存台风登陆情况存到数据库 + * */ + List landBeans = objBean.getLand(); + for (TyphoonDetailModel.ShowapiResBodyBean.ObjBean.LandBan bean : landBeans) { + LandPoint landPoint = new LandPoint(); + + landPoint.setTyphoonId(typhoonId); + landPoint.setLandAddress(bean.getLandaddress()); + landPoint.setLandTime(bean.getLandtime()); + landPoint.setType(bean.getStrong()); + landPoint.setLng(bean.getLng()); + landPoint.setLat(bean.getLat()); + landPoint.setInfo(bean.getInfo()); + landPointService.save(landPoint); + } + + /** + * 保存台风移动路径存到数据库 + * */ + List routePoints = objBean.getPoints(); + routePointService.remove(new QueryWrapper().eq("TYPHOON_ID", typhoonId)); + for (TyphoonDetailModel.ShowapiResBodyBean.ObjBean.PointsBean point : routePoints) { + RoutePoint routePoint = new RoutePoint(); + + routePoint.setTyphoonId(typhoonId); + routePoint.setTime(point.getTime()); + routePoint.setCenterPressure(point.getPressure()); + routePoint.setSpeed(point.getSpeed()); + routePoint.setTyphoonType(point.getStrong()); + routePoint.setMoveSpeed(point.getMovespeed()); + routePoint.setPower(Integer.parseInt(point.getPower())); + routePoint.setMoveDirection(point.getMovedirection()); + routePoint.setLng(point.getLng()); + routePoint.setLat(point.getLat()); + routePoint.setRadius12(point.getRadius12()); + routePoint.setRadius10(point.getRadius10()); + routePoint.setRadius7(point.getRadius7()); + routePoint.setRoutePrediction(point.getJl()); + routePoint.setCenterPosition(point.getCkposition()); + routePointService.save(routePoint); + } + } + } + } + + @Override + public List currentTyphoonList() { + List typhoonList = new ArrayList<>(); + //筛选出还未消散的台风并更新详情 + List typhoons = this.baseMapper.selectCurrentTyphoon(); + for (Typhoon typhoon : typhoons) { + typhoonList.add(new TyphoonDTO(typhoon)); + } + return typhoonList; + } + + @Override + public TyphoonDetailDTO typhoonDetail(String typhoonId) { + TyphoonDetail typhoonDetail = detailService.getOne( + new QueryWrapper().eq("TYPHOON_ID", typhoonId) + ); + if (typhoonDetail == null) { + return null; + } + log.info(JSON.toJSONString(typhoonDetail)); + List landPoints = landPointService.list( + new QueryWrapper().eq("TYPHOON_ID", typhoonId) + ); + List routePoints = routePointService.list( + new QueryWrapper().eq("TYPHOON_ID", typhoonId) + ); + return new TyphoonDetailDTO(typhoonDetail, landPoints, routePoints); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/utils/Constant.java b/casic-server/src/main/java/com/casic/missiles/modular/system/utils/Constant.java new file mode 100644 index 0000000..552a6e9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/utils/Constant.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.system.utils; + +/** + * @author a203 + */ +public class Constant { + /** + * 热带气旋/台风相关常量 + */ + private static final String BASE_URL = "https://route.showapi.com"; + private static final String API_APPID = "780330"; + private static final String API_SIGN_KEY = "f30ac28b65cc447da936448c57bc5d99"; + + public static final String TYPHOON_LIST = BASE_URL + + "/342-1?" + + "showapi_appid=" + API_APPID + "&" + + "showapi_sign=" + API_SIGN_KEY + "&" + + "showapi_timestamp="; + + public static final String TYPHOON_DETAIL = BASE_URL + + "/342-2?" + + "showapi_appid=" + API_APPID + "&" + + "showapi_sign=" + API_SIGN_KEY + "&" + + "tfid=ID" + "&" + + "showapi_timestamp="; + + /** + * 洋流相关常量 + */ + private static final String OCEAN_BASE_URL = "http://api.meteo.open.ninecosmos.cn"; + public static final String OCEAN_HEADER_NAME = "Authorization"; + public static final String OCEAN_APPID = "WXZH888888"; + public static final String OCEAN_APP_KEY = "xb#bD&xtho@b80scbDb"; + + public static final String OCEAN_TOKEN = OCEAN_BASE_URL + "/us/users/open/token"; + public static final String OCEAN_DETAIL = OCEAN_BASE_URL + "/mr/netcdf/meteo/ytx"; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/utils/HttpRequestHelper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/utils/HttpRequestHelper.java new file mode 100644 index 0000000..1e0cd94 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/utils/HttpRequestHelper.java @@ -0,0 +1,115 @@ +package com.casic.missiles.modular.system.utils; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONException; +import com.alibaba.fastjson.JSONObject; +import lombok.NonNull; +import okhttp3.*; + +import java.io.IOException; +import java.util.Objects; +import java.util.concurrent.TimeUnit; + +/** + * 网络请求工具 + * + * @author a203 + */ +public class HttpRequestHelper { + + public static RequestBody createRequestBody(String value) { + return RequestBody.create(MediaType.parse("application/json; charset=utf-8"), value); + } + + public static String doPost(Request request) { + return streamResponse(request); + } + + public static String doGet(String url) { + return streamResponse(new Request.Builder() + .url(url) + .build()); + } + + private static String streamResponse(@NonNull Request request) { + OkHttpClient httpClient = new OkHttpClient.Builder() + .connectTimeout(10, TimeUnit.SECONDS) + .writeTimeout(10, TimeUnit.SECONDS) + .readTimeout(20, TimeUnit.SECONDS) + .build(); + Call call = httpClient.newCall(request); + try { + Response response = call.execute(); + return response.body() != null ? Objects.requireNonNull(response.body()).string() : ""; + } catch (IOException e) { + e.printStackTrace(); + } + return ""; + } + + public static String obtainOceanData(double lng, double lat, String date, String days, String hour) { + /** + * 获取洋流数据Token + * */ + JSONObject object = new JSONObject(); + try { + object.put("appId", Constant.OCEAN_APPID); + object.put("appKey", Constant.OCEAN_APP_KEY); + } catch (JSONException e) { + e.printStackTrace(); + } + Request tokenRequest = new Request.Builder() + .url(Constant.OCEAN_TOKEN) + .post(HttpRequestHelper.createRequestBody(object.toJSONString())) + .build(); + String tokenJson = HttpRequestHelper.doPost(tokenRequest); + if ("".equals(tokenJson)) { + return null; + } + /** + * 解析token + * */ + JSONObject tokenObject = JSON.parseObject(tokenJson); + JSONObject dataObject = tokenObject.getJSONObject("data"); + String token = dataObject.getString("token"); + /** + * 封装请求参数 + * */ + JSONObject jsonObject = new JSONObject(); + try { + jsonObject.put("lon", lng); + jsonObject.put("lat", lat); + jsonObject.put("date", date); + jsonObject.put("hour", days); + jsonObject.put("days", hour); + } catch (JSONException e) { + e.printStackTrace(); + } + /** + * 获取洋流数据 + * */ + Request request = new Request.Builder() + .addHeader(Constant.OCEAN_HEADER_NAME, token) + .url(Constant.OCEAN_DETAIL) + .post(HttpRequestHelper.createRequestBody(jsonObject.toJSONString())) + .build(); + return HttpRequestHelper.doPost(request); + } + + public static String getTyphoonCode(String value) { + if ("".equals(value)) { + return value; + } + JSONObject jsonObject = JSON.parseObject(value); + return jsonObject.getString("showapi_res_code"); + } + + public static String getOceanCode(String value) { + if ("".equals(value)) { + return value; + } + JSONObject jsonObject = JSON.parseObject(value); + Integer code = jsonObject.getInteger("code"); + return String.valueOf(code); + } +} diff --git a/casic-web/pom.xml b/casic-web/pom.xml index 73e9d68..7d97900 100644 --- a/casic-web/pom.xml +++ b/casic-web/pom.xml @@ -107,6 +107,11 @@ + + com.casic + casic-job-quartz + 2.0.0.alpha + diff --git a/casic-web/src/main/java/com/casic/missiles/CasicApplication.java b/casic-web/src/main/java/com/casic/missiles/CasicApplication.java index a90ac89..499eedd 100644 --- a/casic-web/src/main/java/com/casic/missiles/CasicApplication.java +++ b/casic-web/src/main/java/com/casic/missiles/CasicApplication.java @@ -5,6 +5,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCaching; import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.transaction.annotation.EnableTransactionManagement; /** @@ -17,6 +18,7 @@ @EnableTransactionManagement(proxyTargetClass = true) @EnableAsync @Slf4j +@EnableScheduling public class CasicApplication { public static void main(String[] args) { SpringApplication.run(CasicApplication.class, args); diff --git a/casic-web/src/main/resources/config/application-dev.yml b/casic-web/src/main/resources/config/application-dev.yml index 8c18554..0f6d593 100644 --- a/casic-web/src/main/resources/config/application-dev.yml +++ b/casic-web/src/main/resources/config/application-dev.yml @@ -1,10 +1,10 @@ server: - port: 8083 + port: 8085 ################### spring配置 ################### spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_template2.0?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true + url: jdbc:mysql://111.198.10.15:11336/casic_mobile_shelter_extranet?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true username: root password: Casic203 jms: @@ -19,7 +19,7 @@ # redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer casic: #kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/environment/** #flowable数据源和多数据源配置 db: init: diff --git a/casic-web/src/main/resources/config/application-prod.yml b/casic-web/src/main/resources/config/application-prod.yml index 6553b10..e4dec71 100644 --- a/casic-web/src/main/resources/config/application-prod.yml +++ b/casic-web/src/main/resources/config/application-prod.yml @@ -21,7 +21,7 @@ #flowable数据源和多数据源配置 casic: kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken,/environment/** flowable: datasource: url: jdbc:mysql://10.18.0.20:3306/callcenter_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull 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/src/main/java/com/casic/missiles/modular/system/model/sql/RoutePoint.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/RoutePoint.java new file mode 100644 index 0000000..d8dad80 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/RoutePoint.java @@ -0,0 +1,117 @@ +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_route_point") +public class RoutePoint extends Model { + private static final long serialVersionUID = 1L; + + /** + * 台风数据库主键 + *

+ * type = IdType.AUTO 是数据库自增 + */ + @TableId(value = "ID", type = IdType.ASSIGN_ID) + private Long id; + + /** + * 台风ID + */ + @TableField("TYPHOON_ID") + private String typhoonId; + + /** + * 数据更新时间 + */ + @TableField("TIME") + private String time; + + /** + * 台风中心气压,单位【百帕】 + */ + @TableField("CENTER_PRESSURE") + private String centerPressure; + + /** + * 风速,单位【米/每秒】 + */ + @TableField("SPEED") + private String speed; + + /** + * 台风风力等级描述 + */ + @TableField("TYPHOON_TYPE") + private String typhoonType; + + /** + * 台风整体移动速度,单位【公里/小时】 + */ + @TableField("MOVE_SPEED") + private String moveSpeed; + + /** + * 风力,单位【级】 + */ + @TableField("POWER") + private Integer power; + + /** + * 台风未来移动方向 + */ + @TableField("MOVE_DIRECTION") + private String moveDirection; + + /** + * 经度 + */ + @TableField("LNG") + private Double lng; + + /** + * 纬度 + */ + @TableField("LAT") + private Double lat; + + /** + * 12级风力影响半径 + */ + @TableField("RADIUS_12") + private String radius12; + + /** + * 10级风力影响半径 + */ + @TableField("RADIUS_10") + private String radius10; + + /** + * 7级风力影响半径 + */ + @TableField("RADIUS_7") + private String radius7; + + /** + * 台风路线预测 + */ + @TableField("ROUTE_PREDICTION") + private String routePrediction; + + /** + * 中心位置 + */ + @TableField("CENTER_POSITION") + private String centerPosition; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/Typhoon.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/Typhoon.java new file mode 100644 index 0000000..2a88897 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/Typhoon.java @@ -0,0 +1,101 @@ +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_list") +public class Typhoon 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("NAME") + private String name; + /** + * 台风英文代号 + */ + @TableField("ENG_NAME") + private String engName; + /** + * 经度 + */ + @TableField("LNG") + private Double lng; + /** + * 纬度 + */ + @TableField("LAT") + private Double lat; + /** + * 台风风力等级描述 + */ + @TableField("TYPHOON_TYPE") + private String typhoonType; + /** + * 台风中心气压,单位【百帕】 + */ + @TableField("CENTER_PRESSURE") + private String centerPressure; + /** + * 风速,单位【米/每秒】 + */ + @TableField("SPEED") + private String speed; + /** + * 风力,单位【级】 + */ + @TableField("POWER") + private Integer power; + /** + * 台风整体移动速度,单位【公里/小时】 + */ + @TableField("MOVE_SPEED") + private String moveSpeed; + /** + * 台风未来移动方向 + */ + @TableField("MOVE_DIRECTION") + private String moveDirection; + /** + * 10级风力影响半径 + */ + @TableField("RADIUS_10") + private String radius10; + /** + * 7级风力影响半径 + */ + @TableField("RADIUS_7") + private String radius7; + /** + * 数据更新时间 + */ + @TableField("TIME") + private String time; + /** + * 台风是否已消散,1-未消散,0-已消散 + */ + @TableField("IS_ACTIVE") + private String isActive; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/TyphoonDetail.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/TyphoonDetail.java new file mode 100644 index 0000000..6a64023 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/TyphoonDetail.java @@ -0,0 +1,79 @@ +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_detail") +public class TyphoonDetail 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("NAME") + private String name; + + /** + * 台风英文代号 + */ + @TableField("ENG_NAME") + private String engName; + + /** + * 台风告警级别 + */ + @TableField("WARN_LEVEL") + private String warnLevel; + + /** + * 台风中心经度 + */ + @TableField("CENTER_LNG") + private Double centerLng; + + /** + * 台风中心纬度 + */ + @TableField("CENTER_LAT") + private Double centerLat; + + /** + * 台风开始时间 + */ + @TableField("START_TIME") + private String startTime; + + /** + * 台风结束时间 + */ + @TableField("END_TIME") + private String endTime; + + /** + * 台风状态 + */ + @TableField("IS_ACTIVE") + private String isActive; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/ILandPointService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ILandPointService.java new file mode 100644 index 0000000..ae8ccb4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ILandPointService.java @@ -0,0 +1,13 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.model.sql.LandPoint; + +/** + * 台风登陆点数据信息 服务类 + * + * @author a203 + */ +public interface ILandPointService extends IService { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IOceanService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IOceanService.java new file mode 100644 index 0000000..486b589 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IOceanService.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.OceanDetailDTO; + +/** + * 洋流数据信息 服务类 + * + * @author a203 + */ +public interface IOceanService { + /** + * 查询洋流数据 + * + * @param lng 经度 + * @param lat 纬度 + * @param date 预报起报日期 + * @param days 预报的是几天后,0表示当天,1表示明天,以此类推 + * @param hour 预报的是days的哪一个小时 + * @return {@link OceanDetailDTO} + */ + OceanDetailDTO oceanDetail(double lng, double lat, String date, String days, String hour); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRoutePointService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRoutePointService.java new file mode 100644 index 0000000..e4c225f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRoutePointService.java @@ -0,0 +1,13 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.model.sql.RoutePoint; + +/** + * 台风移动点数据信息 服务类 + * + * @author a203 + */ +public interface IRoutePointService extends IService { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonDetailService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonDetailService.java new file mode 100644 index 0000000..8db2e65 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonDetailService.java @@ -0,0 +1,13 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.model.sql.TyphoonDetail; + +/** + * 台风详情数据信息 服务类 + * + * @author a203 + */ +public interface ITyphoonDetailService extends IService { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonService.java new file mode 100644 index 0000000..2daf133 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonService.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.dto.TyphoonDTO; +import com.casic.missiles.modular.system.dto.TyphoonDetailDTO; +import com.casic.missiles.modular.system.model.sql.Typhoon; + +import java.util.List; + +/** + * 台风列表数据信息 服务类 + * + * @author a203 + */ +public interface ITyphoonService extends IService { + /** + * 保存台风列表 + */ + void saveTyphoon(); + + /***开放接口给内网服务器使用**************************************/ + + /** + * 查询台风列表 + * + * @return {@link List } + */ + List currentTyphoonList(); + + /** + * 查询台风详情 + * + * @param typhoonId 台风ID + * @return {@link TyphoonDetailDTO} + */ + TyphoonDetailDTO typhoonDetail(String typhoonId); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/LandPointServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/LandPointServiceImpl.java new file mode 100644 index 0000000..5cff515 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/LandPointServiceImpl.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.LandPointMapper; +import com.casic.missiles.modular.system.model.sql.LandPoint; +import com.casic.missiles.modular.system.service.ILandPointService; +import org.springframework.stereotype.Service; + +/** + * 台风数据信息 服务实现类 + * + * @author a203 + */ + +@Service +public class LandPointServiceImpl extends ServiceImpl implements ILandPointService { + + public LandPointServiceImpl() { + + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/OceanServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/OceanServiceImpl.java new file mode 100644 index 0000000..4416594 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/OceanServiceImpl.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.TypeReference; +import com.casic.missiles.modular.system.dto.OceanDetailDTO; +import com.casic.missiles.modular.system.model.remote.OceanDetailModel; +import com.casic.missiles.modular.system.service.IOceanService; +import com.casic.missiles.modular.system.utils.HttpRequestHelper; +import org.springframework.stereotype.Service; + +/** + * 洋流数据信息 服务实现类 + * + * @author a203 + */ + +@Service +public class OceanServiceImpl implements IOceanService { + + private static final String SUCCESS_CODE = "0"; + + public OceanServiceImpl() { + + } + + @Override + public OceanDetailDTO oceanDetail(double lng, double lat, String date, String days, String hour) { + String oceanData = HttpRequestHelper.obtainOceanData(lng, lat, date, days, hour); + /** + * 解析洋流数据返回给前端 + * */ + if (SUCCESS_CODE.equals(HttpRequestHelper.getOceanCode(oceanData))) { + OceanDetailModel remoteData = JSON.parseObject(oceanData, new TypeReference() { + }); + if (remoteData == null) { + return null; + } + return new OceanDetailDTO(remoteData); + } + return null; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RoutePointServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RoutePointServiceImpl.java new file mode 100644 index 0000000..7fb4bdd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RoutePointServiceImpl.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RoutePointMapper; +import com.casic.missiles.modular.system.model.sql.RoutePoint; +import com.casic.missiles.modular.system.service.IRoutePointService; +import org.springframework.stereotype.Service; + +/** + * 台风数据信息 服务实现类 + * + * @author a203 + */ + +@Service +public class RoutePointServiceImpl extends ServiceImpl implements IRoutePointService { + + public RoutePointServiceImpl() { + + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/TyphoonDetailServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/TyphoonDetailServiceImpl.java new file mode 100644 index 0000000..128df09 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/TyphoonDetailServiceImpl.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.TyphoonDetailMapper; +import com.casic.missiles.modular.system.model.sql.TyphoonDetail; +import com.casic.missiles.modular.system.service.ITyphoonDetailService; +import org.springframework.stereotype.Service; + +/** + * 台风数据信息 服务实现类 + * + * @author a203 + */ + +@Service +public class TyphoonDetailServiceImpl extends ServiceImpl implements ITyphoonDetailService { + + public TyphoonDetailServiceImpl() { + + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/TyphoonServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/TyphoonServiceImpl.java new file mode 100644 index 0000000..8e73254 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/TyphoonServiceImpl.java @@ -0,0 +1,202 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.TypeReference; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.TyphoonMapper; +import com.casic.missiles.modular.system.dto.TyphoonDTO; +import com.casic.missiles.modular.system.dto.TyphoonDetailDTO; +import com.casic.missiles.modular.system.model.remote.TyphoonDetailModel; +import com.casic.missiles.modular.system.model.remote.TyphoonModel; +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.Typhoon; +import com.casic.missiles.modular.system.model.sql.TyphoonDetail; +import com.casic.missiles.modular.system.service.ILandPointService; +import com.casic.missiles.modular.system.service.IRoutePointService; +import com.casic.missiles.modular.system.service.ITyphoonDetailService; +import com.casic.missiles.modular.system.service.ITyphoonService; +import com.casic.missiles.modular.system.utils.Constant; +import com.casic.missiles.modular.system.utils.HttpRequestHelper; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +/** + * 台风数据信息 服务实现类 + * + * @author a203 + */ +@Slf4j +@Service +public class TyphoonServiceImpl extends ServiceImpl implements ITyphoonService { + + private static final String SUCCESS_CODE = "0"; + + private final ITyphoonDetailService detailService; + private final ILandPointService landPointService; + private final IRoutePointService routePointService; + + public TyphoonServiceImpl(ITyphoonDetailService detailService, + ILandPointService landPointService, + IRoutePointService routePointService) { + this.detailService = detailService; + this.landPointService = landPointService; + this.routePointService = routePointService; + } + + /** + * 保存台风列表 + */ + @Override + public void saveTyphoon() { + /** + * 获取台风接口数据 + * */ + String res = HttpRequestHelper.doGet(Constant.TYPHOON_LIST + System.currentTimeMillis()); + if (SUCCESS_CODE.equals(HttpRequestHelper.getTyphoonCode(res))) { + TyphoonModel remoteData = JSON.parseObject(res, new TypeReference() { + }); + List beans = remoteData.getShowapi_res_body().getList(); + for (TyphoonModel.ShowapiResBodyBean.ListBean data : beans) { + Typhoon entity = new Typhoon(); + entity.setTyphoonId(data.getTfid()); + entity.setName(data.getName()); + entity.setEngName(data.getEnname()); + entity.setLng(Double.valueOf(data.getLng())); + entity.setLat(Double.valueOf(data.getLat())); + entity.setTyphoonType(data.getStrong()); + entity.setCenterPressure(data.getPressure()); + entity.setSpeed(data.getSpeed()); + entity.setPower(Integer.valueOf(data.getPower())); + entity.setMoveSpeed(data.getMovespeed()); + entity.setMoveDirection(data.getMovedirection()); + entity.setRadius7(data.getRadius7()); + entity.setRadius10(data.getRadius10()); + entity.setTime(data.getTime()); + entity.setIsActive("1"); + this.baseMapper.insert(entity); + } + } + updateTyphoonDetail(); + } + + /** + * 更新台风详情 + */ + private void updateTyphoonDetail() { + //筛选出还未消散的台风并更新详情 + List typhoons = this.baseMapper.selectCurrentTyphoon(); + for (Typhoon typhoon : typhoons) { + /** + * 获取台风接口数据 + * */ + String res = HttpRequestHelper.doGet( + Constant.TYPHOON_DETAIL.replace("ID", typhoon.getTyphoonId()) + + System.currentTimeMillis()); + if (SUCCESS_CODE.equals(HttpRequestHelper.getTyphoonCode(res))) { + TyphoonDetailModel remoteData = JSON.parseObject(res, new TypeReference() { + }); + TyphoonDetailModel.ShowapiResBodyBean.ObjBean objBean = remoteData.getShowapi_res_body().getObj(); + + String typhoonId = objBean.getTfid(); + /** + * 保存台风基本情况存到数据库 + * */ + TyphoonDetail detail = new TyphoonDetail(); + detail.setTyphoonId(objBean.getTfid()); + detail.setName(objBean.getName()); + detail.setEngName(objBean.getEnname()); + detail.setWarnLevel(objBean.getWarnlevel()); + detail.setCenterLng(Double.parseDouble(objBean.getCenterlng())); + detail.setCenterLat(Double.parseDouble(objBean.getCenterlat())); + detail.setStartTime(objBean.getStarttime()); + detail.setEndTime(objBean.getEndtime()); + detail.setIsActive(objBean.getIsactive()); + QueryWrapper queryWrapper = new QueryWrapper().eq("TYPHOON_ID", typhoonId); + detailService.saveOrUpdate(detail, queryWrapper); + + /** + * 更新台风列表台风状态 + * */ + typhoon.setIsActive(objBean.getIsactive()); + saveOrUpdate(typhoon, new QueryWrapper().eq("TYPHOON_ID", typhoonId)); + + /** + * 保存台风登陆情况存到数据库 + * */ + List landBeans = objBean.getLand(); + for (TyphoonDetailModel.ShowapiResBodyBean.ObjBean.LandBan bean : landBeans) { + LandPoint landPoint = new LandPoint(); + + landPoint.setTyphoonId(typhoonId); + landPoint.setLandAddress(bean.getLandaddress()); + landPoint.setLandTime(bean.getLandtime()); + landPoint.setType(bean.getStrong()); + landPoint.setLng(bean.getLng()); + landPoint.setLat(bean.getLat()); + landPoint.setInfo(bean.getInfo()); + landPointService.save(landPoint); + } + + /** + * 保存台风移动路径存到数据库 + * */ + List routePoints = objBean.getPoints(); + routePointService.remove(new QueryWrapper().eq("TYPHOON_ID", typhoonId)); + for (TyphoonDetailModel.ShowapiResBodyBean.ObjBean.PointsBean point : routePoints) { + RoutePoint routePoint = new RoutePoint(); + + routePoint.setTyphoonId(typhoonId); + routePoint.setTime(point.getTime()); + routePoint.setCenterPressure(point.getPressure()); + routePoint.setSpeed(point.getSpeed()); + routePoint.setTyphoonType(point.getStrong()); + routePoint.setMoveSpeed(point.getMovespeed()); + routePoint.setPower(Integer.parseInt(point.getPower())); + routePoint.setMoveDirection(point.getMovedirection()); + routePoint.setLng(point.getLng()); + routePoint.setLat(point.getLat()); + routePoint.setRadius12(point.getRadius12()); + routePoint.setRadius10(point.getRadius10()); + routePoint.setRadius7(point.getRadius7()); + routePoint.setRoutePrediction(point.getJl()); + routePoint.setCenterPosition(point.getCkposition()); + routePointService.save(routePoint); + } + } + } + } + + @Override + public List currentTyphoonList() { + List typhoonList = new ArrayList<>(); + //筛选出还未消散的台风并更新详情 + List typhoons = this.baseMapper.selectCurrentTyphoon(); + for (Typhoon typhoon : typhoons) { + typhoonList.add(new TyphoonDTO(typhoon)); + } + return typhoonList; + } + + @Override + public TyphoonDetailDTO typhoonDetail(String typhoonId) { + TyphoonDetail typhoonDetail = detailService.getOne( + new QueryWrapper().eq("TYPHOON_ID", typhoonId) + ); + if (typhoonDetail == null) { + return null; + } + log.info(JSON.toJSONString(typhoonDetail)); + List landPoints = landPointService.list( + new QueryWrapper().eq("TYPHOON_ID", typhoonId) + ); + List routePoints = routePointService.list( + new QueryWrapper().eq("TYPHOON_ID", typhoonId) + ); + return new TyphoonDetailDTO(typhoonDetail, landPoints, routePoints); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/utils/Constant.java b/casic-server/src/main/java/com/casic/missiles/modular/system/utils/Constant.java new file mode 100644 index 0000000..552a6e9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/utils/Constant.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.system.utils; + +/** + * @author a203 + */ +public class Constant { + /** + * 热带气旋/台风相关常量 + */ + private static final String BASE_URL = "https://route.showapi.com"; + private static final String API_APPID = "780330"; + private static final String API_SIGN_KEY = "f30ac28b65cc447da936448c57bc5d99"; + + public static final String TYPHOON_LIST = BASE_URL + + "/342-1?" + + "showapi_appid=" + API_APPID + "&" + + "showapi_sign=" + API_SIGN_KEY + "&" + + "showapi_timestamp="; + + public static final String TYPHOON_DETAIL = BASE_URL + + "/342-2?" + + "showapi_appid=" + API_APPID + "&" + + "showapi_sign=" + API_SIGN_KEY + "&" + + "tfid=ID" + "&" + + "showapi_timestamp="; + + /** + * 洋流相关常量 + */ + private static final String OCEAN_BASE_URL = "http://api.meteo.open.ninecosmos.cn"; + public static final String OCEAN_HEADER_NAME = "Authorization"; + public static final String OCEAN_APPID = "WXZH888888"; + public static final String OCEAN_APP_KEY = "xb#bD&xtho@b80scbDb"; + + public static final String OCEAN_TOKEN = OCEAN_BASE_URL + "/us/users/open/token"; + public static final String OCEAN_DETAIL = OCEAN_BASE_URL + "/mr/netcdf/meteo/ytx"; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/utils/HttpRequestHelper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/utils/HttpRequestHelper.java new file mode 100644 index 0000000..1e0cd94 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/utils/HttpRequestHelper.java @@ -0,0 +1,115 @@ +package com.casic.missiles.modular.system.utils; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONException; +import com.alibaba.fastjson.JSONObject; +import lombok.NonNull; +import okhttp3.*; + +import java.io.IOException; +import java.util.Objects; +import java.util.concurrent.TimeUnit; + +/** + * 网络请求工具 + * + * @author a203 + */ +public class HttpRequestHelper { + + public static RequestBody createRequestBody(String value) { + return RequestBody.create(MediaType.parse("application/json; charset=utf-8"), value); + } + + public static String doPost(Request request) { + return streamResponse(request); + } + + public static String doGet(String url) { + return streamResponse(new Request.Builder() + .url(url) + .build()); + } + + private static String streamResponse(@NonNull Request request) { + OkHttpClient httpClient = new OkHttpClient.Builder() + .connectTimeout(10, TimeUnit.SECONDS) + .writeTimeout(10, TimeUnit.SECONDS) + .readTimeout(20, TimeUnit.SECONDS) + .build(); + Call call = httpClient.newCall(request); + try { + Response response = call.execute(); + return response.body() != null ? Objects.requireNonNull(response.body()).string() : ""; + } catch (IOException e) { + e.printStackTrace(); + } + return ""; + } + + public static String obtainOceanData(double lng, double lat, String date, String days, String hour) { + /** + * 获取洋流数据Token + * */ + JSONObject object = new JSONObject(); + try { + object.put("appId", Constant.OCEAN_APPID); + object.put("appKey", Constant.OCEAN_APP_KEY); + } catch (JSONException e) { + e.printStackTrace(); + } + Request tokenRequest = new Request.Builder() + .url(Constant.OCEAN_TOKEN) + .post(HttpRequestHelper.createRequestBody(object.toJSONString())) + .build(); + String tokenJson = HttpRequestHelper.doPost(tokenRequest); + if ("".equals(tokenJson)) { + return null; + } + /** + * 解析token + * */ + JSONObject tokenObject = JSON.parseObject(tokenJson); + JSONObject dataObject = tokenObject.getJSONObject("data"); + String token = dataObject.getString("token"); + /** + * 封装请求参数 + * */ + JSONObject jsonObject = new JSONObject(); + try { + jsonObject.put("lon", lng); + jsonObject.put("lat", lat); + jsonObject.put("date", date); + jsonObject.put("hour", days); + jsonObject.put("days", hour); + } catch (JSONException e) { + e.printStackTrace(); + } + /** + * 获取洋流数据 + * */ + Request request = new Request.Builder() + .addHeader(Constant.OCEAN_HEADER_NAME, token) + .url(Constant.OCEAN_DETAIL) + .post(HttpRequestHelper.createRequestBody(jsonObject.toJSONString())) + .build(); + return HttpRequestHelper.doPost(request); + } + + public static String getTyphoonCode(String value) { + if ("".equals(value)) { + return value; + } + JSONObject jsonObject = JSON.parseObject(value); + return jsonObject.getString("showapi_res_code"); + } + + public static String getOceanCode(String value) { + if ("".equals(value)) { + return value; + } + JSONObject jsonObject = JSON.parseObject(value); + Integer code = jsonObject.getInteger("code"); + return String.valueOf(code); + } +} diff --git a/casic-web/pom.xml b/casic-web/pom.xml index 73e9d68..7d97900 100644 --- a/casic-web/pom.xml +++ b/casic-web/pom.xml @@ -107,6 +107,11 @@ + + com.casic + casic-job-quartz + 2.0.0.alpha + diff --git a/casic-web/src/main/java/com/casic/missiles/CasicApplication.java b/casic-web/src/main/java/com/casic/missiles/CasicApplication.java index a90ac89..499eedd 100644 --- a/casic-web/src/main/java/com/casic/missiles/CasicApplication.java +++ b/casic-web/src/main/java/com/casic/missiles/CasicApplication.java @@ -5,6 +5,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCaching; import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.transaction.annotation.EnableTransactionManagement; /** @@ -17,6 +18,7 @@ @EnableTransactionManagement(proxyTargetClass = true) @EnableAsync @Slf4j +@EnableScheduling public class CasicApplication { public static void main(String[] args) { SpringApplication.run(CasicApplication.class, args); diff --git a/casic-web/src/main/resources/config/application-dev.yml b/casic-web/src/main/resources/config/application-dev.yml index 8c18554..0f6d593 100644 --- a/casic-web/src/main/resources/config/application-dev.yml +++ b/casic-web/src/main/resources/config/application-dev.yml @@ -1,10 +1,10 @@ server: - port: 8083 + port: 8085 ################### spring配置 ################### spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_template2.0?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true + url: jdbc:mysql://111.198.10.15:11336/casic_mobile_shelter_extranet?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true username: root password: Casic203 jms: @@ -19,7 +19,7 @@ # redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer casic: #kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/environment/** #flowable数据源和多数据源配置 db: init: diff --git a/casic-web/src/main/resources/config/application-prod.yml b/casic-web/src/main/resources/config/application-prod.yml index 6553b10..e4dec71 100644 --- a/casic-web/src/main/resources/config/application-prod.yml +++ b/casic-web/src/main/resources/config/application-prod.yml @@ -21,7 +21,7 @@ #flowable数据源和多数据源配置 casic: kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken,/environment/** flowable: datasource: url: jdbc:mysql://10.18.0.20:3306/callcenter_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull diff --git a/casic-web/src/main/resources/config/application-test.yml b/casic-web/src/main/resources/config/application-test.yml index 54d7252..d59fd10 100644 --- a/casic-web/src/main/resources/config/application-test.yml +++ b/casic-web/src/main/resources/config/application-test.yml @@ -14,7 +14,7 @@ # store-type: redis casic: # kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** + nologin-urls: /user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/**,/environment/** #flowable数据源和多数据源配置 flowable: datasource: 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/src/main/java/com/casic/missiles/modular/system/model/sql/RoutePoint.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/RoutePoint.java new file mode 100644 index 0000000..d8dad80 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/RoutePoint.java @@ -0,0 +1,117 @@ +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_route_point") +public class RoutePoint extends Model { + private static final long serialVersionUID = 1L; + + /** + * 台风数据库主键 + *

+ * type = IdType.AUTO 是数据库自增 + */ + @TableId(value = "ID", type = IdType.ASSIGN_ID) + private Long id; + + /** + * 台风ID + */ + @TableField("TYPHOON_ID") + private String typhoonId; + + /** + * 数据更新时间 + */ + @TableField("TIME") + private String time; + + /** + * 台风中心气压,单位【百帕】 + */ + @TableField("CENTER_PRESSURE") + private String centerPressure; + + /** + * 风速,单位【米/每秒】 + */ + @TableField("SPEED") + private String speed; + + /** + * 台风风力等级描述 + */ + @TableField("TYPHOON_TYPE") + private String typhoonType; + + /** + * 台风整体移动速度,单位【公里/小时】 + */ + @TableField("MOVE_SPEED") + private String moveSpeed; + + /** + * 风力,单位【级】 + */ + @TableField("POWER") + private Integer power; + + /** + * 台风未来移动方向 + */ + @TableField("MOVE_DIRECTION") + private String moveDirection; + + /** + * 经度 + */ + @TableField("LNG") + private Double lng; + + /** + * 纬度 + */ + @TableField("LAT") + private Double lat; + + /** + * 12级风力影响半径 + */ + @TableField("RADIUS_12") + private String radius12; + + /** + * 10级风力影响半径 + */ + @TableField("RADIUS_10") + private String radius10; + + /** + * 7级风力影响半径 + */ + @TableField("RADIUS_7") + private String radius7; + + /** + * 台风路线预测 + */ + @TableField("ROUTE_PREDICTION") + private String routePrediction; + + /** + * 中心位置 + */ + @TableField("CENTER_POSITION") + private String centerPosition; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/Typhoon.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/Typhoon.java new file mode 100644 index 0000000..2a88897 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/Typhoon.java @@ -0,0 +1,101 @@ +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_list") +public class Typhoon 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("NAME") + private String name; + /** + * 台风英文代号 + */ + @TableField("ENG_NAME") + private String engName; + /** + * 经度 + */ + @TableField("LNG") + private Double lng; + /** + * 纬度 + */ + @TableField("LAT") + private Double lat; + /** + * 台风风力等级描述 + */ + @TableField("TYPHOON_TYPE") + private String typhoonType; + /** + * 台风中心气压,单位【百帕】 + */ + @TableField("CENTER_PRESSURE") + private String centerPressure; + /** + * 风速,单位【米/每秒】 + */ + @TableField("SPEED") + private String speed; + /** + * 风力,单位【级】 + */ + @TableField("POWER") + private Integer power; + /** + * 台风整体移动速度,单位【公里/小时】 + */ + @TableField("MOVE_SPEED") + private String moveSpeed; + /** + * 台风未来移动方向 + */ + @TableField("MOVE_DIRECTION") + private String moveDirection; + /** + * 10级风力影响半径 + */ + @TableField("RADIUS_10") + private String radius10; + /** + * 7级风力影响半径 + */ + @TableField("RADIUS_7") + private String radius7; + /** + * 数据更新时间 + */ + @TableField("TIME") + private String time; + /** + * 台风是否已消散,1-未消散,0-已消散 + */ + @TableField("IS_ACTIVE") + private String isActive; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/TyphoonDetail.java b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/TyphoonDetail.java new file mode 100644 index 0000000..6a64023 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/model/sql/TyphoonDetail.java @@ -0,0 +1,79 @@ +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_detail") +public class TyphoonDetail 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("NAME") + private String name; + + /** + * 台风英文代号 + */ + @TableField("ENG_NAME") + private String engName; + + /** + * 台风告警级别 + */ + @TableField("WARN_LEVEL") + private String warnLevel; + + /** + * 台风中心经度 + */ + @TableField("CENTER_LNG") + private Double centerLng; + + /** + * 台风中心纬度 + */ + @TableField("CENTER_LAT") + private Double centerLat; + + /** + * 台风开始时间 + */ + @TableField("START_TIME") + private String startTime; + + /** + * 台风结束时间 + */ + @TableField("END_TIME") + private String endTime; + + /** + * 台风状态 + */ + @TableField("IS_ACTIVE") + private String isActive; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/ILandPointService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ILandPointService.java new file mode 100644 index 0000000..ae8ccb4 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ILandPointService.java @@ -0,0 +1,13 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.model.sql.LandPoint; + +/** + * 台风登陆点数据信息 服务类 + * + * @author a203 + */ +public interface ILandPointService extends IService { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IOceanService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IOceanService.java new file mode 100644 index 0000000..486b589 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IOceanService.java @@ -0,0 +1,22 @@ +package com.casic.missiles.modular.system.service; + +import com.casic.missiles.modular.system.dto.OceanDetailDTO; + +/** + * 洋流数据信息 服务类 + * + * @author a203 + */ +public interface IOceanService { + /** + * 查询洋流数据 + * + * @param lng 经度 + * @param lat 纬度 + * @param date 预报起报日期 + * @param days 预报的是几天后,0表示当天,1表示明天,以此类推 + * @param hour 预报的是days的哪一个小时 + * @return {@link OceanDetailDTO} + */ + OceanDetailDTO oceanDetail(double lng, double lat, String date, String days, String hour); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRoutePointService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRoutePointService.java new file mode 100644 index 0000000..e4c225f --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/IRoutePointService.java @@ -0,0 +1,13 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.model.sql.RoutePoint; + +/** + * 台风移动点数据信息 服务类 + * + * @author a203 + */ +public interface IRoutePointService extends IService { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonDetailService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonDetailService.java new file mode 100644 index 0000000..8db2e65 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonDetailService.java @@ -0,0 +1,13 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.model.sql.TyphoonDetail; + +/** + * 台风详情数据信息 服务类 + * + * @author a203 + */ +public interface ITyphoonDetailService extends IService { + +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonService.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonService.java new file mode 100644 index 0000000..2daf133 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/ITyphoonService.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.modular.system.dto.TyphoonDTO; +import com.casic.missiles.modular.system.dto.TyphoonDetailDTO; +import com.casic.missiles.modular.system.model.sql.Typhoon; + +import java.util.List; + +/** + * 台风列表数据信息 服务类 + * + * @author a203 + */ +public interface ITyphoonService extends IService { + /** + * 保存台风列表 + */ + void saveTyphoon(); + + /***开放接口给内网服务器使用**************************************/ + + /** + * 查询台风列表 + * + * @return {@link List } + */ + List currentTyphoonList(); + + /** + * 查询台风详情 + * + * @param typhoonId 台风ID + * @return {@link TyphoonDetailDTO} + */ + TyphoonDetailDTO typhoonDetail(String typhoonId); +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/LandPointServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/LandPointServiceImpl.java new file mode 100644 index 0000000..5cff515 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/LandPointServiceImpl.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.LandPointMapper; +import com.casic.missiles.modular.system.model.sql.LandPoint; +import com.casic.missiles.modular.system.service.ILandPointService; +import org.springframework.stereotype.Service; + +/** + * 台风数据信息 服务实现类 + * + * @author a203 + */ + +@Service +public class LandPointServiceImpl extends ServiceImpl implements ILandPointService { + + public LandPointServiceImpl() { + + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/OceanServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/OceanServiceImpl.java new file mode 100644 index 0000000..4416594 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/OceanServiceImpl.java @@ -0,0 +1,42 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.TypeReference; +import com.casic.missiles.modular.system.dto.OceanDetailDTO; +import com.casic.missiles.modular.system.model.remote.OceanDetailModel; +import com.casic.missiles.modular.system.service.IOceanService; +import com.casic.missiles.modular.system.utils.HttpRequestHelper; +import org.springframework.stereotype.Service; + +/** + * 洋流数据信息 服务实现类 + * + * @author a203 + */ + +@Service +public class OceanServiceImpl implements IOceanService { + + private static final String SUCCESS_CODE = "0"; + + public OceanServiceImpl() { + + } + + @Override + public OceanDetailDTO oceanDetail(double lng, double lat, String date, String days, String hour) { + String oceanData = HttpRequestHelper.obtainOceanData(lng, lat, date, days, hour); + /** + * 解析洋流数据返回给前端 + * */ + if (SUCCESS_CODE.equals(HttpRequestHelper.getOceanCode(oceanData))) { + OceanDetailModel remoteData = JSON.parseObject(oceanData, new TypeReference() { + }); + if (remoteData == null) { + return null; + } + return new OceanDetailDTO(remoteData); + } + return null; + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RoutePointServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RoutePointServiceImpl.java new file mode 100644 index 0000000..7fb4bdd --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/RoutePointServiceImpl.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.RoutePointMapper; +import com.casic.missiles.modular.system.model.sql.RoutePoint; +import com.casic.missiles.modular.system.service.IRoutePointService; +import org.springframework.stereotype.Service; + +/** + * 台风数据信息 服务实现类 + * + * @author a203 + */ + +@Service +public class RoutePointServiceImpl extends ServiceImpl implements IRoutePointService { + + public RoutePointServiceImpl() { + + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/TyphoonDetailServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/TyphoonDetailServiceImpl.java new file mode 100644 index 0000000..128df09 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/TyphoonDetailServiceImpl.java @@ -0,0 +1,21 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.TyphoonDetailMapper; +import com.casic.missiles.modular.system.model.sql.TyphoonDetail; +import com.casic.missiles.modular.system.service.ITyphoonDetailService; +import org.springframework.stereotype.Service; + +/** + * 台风数据信息 服务实现类 + * + * @author a203 + */ + +@Service +public class TyphoonDetailServiceImpl extends ServiceImpl implements ITyphoonDetailService { + + public TyphoonDetailServiceImpl() { + + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/TyphoonServiceImpl.java b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/TyphoonServiceImpl.java new file mode 100644 index 0000000..8e73254 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/service/impl/TyphoonServiceImpl.java @@ -0,0 +1,202 @@ +package com.casic.missiles.modular.system.service.impl; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.TypeReference; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.modular.system.dao.TyphoonMapper; +import com.casic.missiles.modular.system.dto.TyphoonDTO; +import com.casic.missiles.modular.system.dto.TyphoonDetailDTO; +import com.casic.missiles.modular.system.model.remote.TyphoonDetailModel; +import com.casic.missiles.modular.system.model.remote.TyphoonModel; +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.Typhoon; +import com.casic.missiles.modular.system.model.sql.TyphoonDetail; +import com.casic.missiles.modular.system.service.ILandPointService; +import com.casic.missiles.modular.system.service.IRoutePointService; +import com.casic.missiles.modular.system.service.ITyphoonDetailService; +import com.casic.missiles.modular.system.service.ITyphoonService; +import com.casic.missiles.modular.system.utils.Constant; +import com.casic.missiles.modular.system.utils.HttpRequestHelper; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +/** + * 台风数据信息 服务实现类 + * + * @author a203 + */ +@Slf4j +@Service +public class TyphoonServiceImpl extends ServiceImpl implements ITyphoonService { + + private static final String SUCCESS_CODE = "0"; + + private final ITyphoonDetailService detailService; + private final ILandPointService landPointService; + private final IRoutePointService routePointService; + + public TyphoonServiceImpl(ITyphoonDetailService detailService, + ILandPointService landPointService, + IRoutePointService routePointService) { + this.detailService = detailService; + this.landPointService = landPointService; + this.routePointService = routePointService; + } + + /** + * 保存台风列表 + */ + @Override + public void saveTyphoon() { + /** + * 获取台风接口数据 + * */ + String res = HttpRequestHelper.doGet(Constant.TYPHOON_LIST + System.currentTimeMillis()); + if (SUCCESS_CODE.equals(HttpRequestHelper.getTyphoonCode(res))) { + TyphoonModel remoteData = JSON.parseObject(res, new TypeReference() { + }); + List beans = remoteData.getShowapi_res_body().getList(); + for (TyphoonModel.ShowapiResBodyBean.ListBean data : beans) { + Typhoon entity = new Typhoon(); + entity.setTyphoonId(data.getTfid()); + entity.setName(data.getName()); + entity.setEngName(data.getEnname()); + entity.setLng(Double.valueOf(data.getLng())); + entity.setLat(Double.valueOf(data.getLat())); + entity.setTyphoonType(data.getStrong()); + entity.setCenterPressure(data.getPressure()); + entity.setSpeed(data.getSpeed()); + entity.setPower(Integer.valueOf(data.getPower())); + entity.setMoveSpeed(data.getMovespeed()); + entity.setMoveDirection(data.getMovedirection()); + entity.setRadius7(data.getRadius7()); + entity.setRadius10(data.getRadius10()); + entity.setTime(data.getTime()); + entity.setIsActive("1"); + this.baseMapper.insert(entity); + } + } + updateTyphoonDetail(); + } + + /** + * 更新台风详情 + */ + private void updateTyphoonDetail() { + //筛选出还未消散的台风并更新详情 + List typhoons = this.baseMapper.selectCurrentTyphoon(); + for (Typhoon typhoon : typhoons) { + /** + * 获取台风接口数据 + * */ + String res = HttpRequestHelper.doGet( + Constant.TYPHOON_DETAIL.replace("ID", typhoon.getTyphoonId()) + + System.currentTimeMillis()); + if (SUCCESS_CODE.equals(HttpRequestHelper.getTyphoonCode(res))) { + TyphoonDetailModel remoteData = JSON.parseObject(res, new TypeReference() { + }); + TyphoonDetailModel.ShowapiResBodyBean.ObjBean objBean = remoteData.getShowapi_res_body().getObj(); + + String typhoonId = objBean.getTfid(); + /** + * 保存台风基本情况存到数据库 + * */ + TyphoonDetail detail = new TyphoonDetail(); + detail.setTyphoonId(objBean.getTfid()); + detail.setName(objBean.getName()); + detail.setEngName(objBean.getEnname()); + detail.setWarnLevel(objBean.getWarnlevel()); + detail.setCenterLng(Double.parseDouble(objBean.getCenterlng())); + detail.setCenterLat(Double.parseDouble(objBean.getCenterlat())); + detail.setStartTime(objBean.getStarttime()); + detail.setEndTime(objBean.getEndtime()); + detail.setIsActive(objBean.getIsactive()); + QueryWrapper queryWrapper = new QueryWrapper().eq("TYPHOON_ID", typhoonId); + detailService.saveOrUpdate(detail, queryWrapper); + + /** + * 更新台风列表台风状态 + * */ + typhoon.setIsActive(objBean.getIsactive()); + saveOrUpdate(typhoon, new QueryWrapper().eq("TYPHOON_ID", typhoonId)); + + /** + * 保存台风登陆情况存到数据库 + * */ + List landBeans = objBean.getLand(); + for (TyphoonDetailModel.ShowapiResBodyBean.ObjBean.LandBan bean : landBeans) { + LandPoint landPoint = new LandPoint(); + + landPoint.setTyphoonId(typhoonId); + landPoint.setLandAddress(bean.getLandaddress()); + landPoint.setLandTime(bean.getLandtime()); + landPoint.setType(bean.getStrong()); + landPoint.setLng(bean.getLng()); + landPoint.setLat(bean.getLat()); + landPoint.setInfo(bean.getInfo()); + landPointService.save(landPoint); + } + + /** + * 保存台风移动路径存到数据库 + * */ + List routePoints = objBean.getPoints(); + routePointService.remove(new QueryWrapper().eq("TYPHOON_ID", typhoonId)); + for (TyphoonDetailModel.ShowapiResBodyBean.ObjBean.PointsBean point : routePoints) { + RoutePoint routePoint = new RoutePoint(); + + routePoint.setTyphoonId(typhoonId); + routePoint.setTime(point.getTime()); + routePoint.setCenterPressure(point.getPressure()); + routePoint.setSpeed(point.getSpeed()); + routePoint.setTyphoonType(point.getStrong()); + routePoint.setMoveSpeed(point.getMovespeed()); + routePoint.setPower(Integer.parseInt(point.getPower())); + routePoint.setMoveDirection(point.getMovedirection()); + routePoint.setLng(point.getLng()); + routePoint.setLat(point.getLat()); + routePoint.setRadius12(point.getRadius12()); + routePoint.setRadius10(point.getRadius10()); + routePoint.setRadius7(point.getRadius7()); + routePoint.setRoutePrediction(point.getJl()); + routePoint.setCenterPosition(point.getCkposition()); + routePointService.save(routePoint); + } + } + } + } + + @Override + public List currentTyphoonList() { + List typhoonList = new ArrayList<>(); + //筛选出还未消散的台风并更新详情 + List typhoons = this.baseMapper.selectCurrentTyphoon(); + for (Typhoon typhoon : typhoons) { + typhoonList.add(new TyphoonDTO(typhoon)); + } + return typhoonList; + } + + @Override + public TyphoonDetailDTO typhoonDetail(String typhoonId) { + TyphoonDetail typhoonDetail = detailService.getOne( + new QueryWrapper().eq("TYPHOON_ID", typhoonId) + ); + if (typhoonDetail == null) { + return null; + } + log.info(JSON.toJSONString(typhoonDetail)); + List landPoints = landPointService.list( + new QueryWrapper().eq("TYPHOON_ID", typhoonId) + ); + List routePoints = routePointService.list( + new QueryWrapper().eq("TYPHOON_ID", typhoonId) + ); + return new TyphoonDetailDTO(typhoonDetail, landPoints, routePoints); + } +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/utils/Constant.java b/casic-server/src/main/java/com/casic/missiles/modular/system/utils/Constant.java new file mode 100644 index 0000000..552a6e9 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/utils/Constant.java @@ -0,0 +1,37 @@ +package com.casic.missiles.modular.system.utils; + +/** + * @author a203 + */ +public class Constant { + /** + * 热带气旋/台风相关常量 + */ + private static final String BASE_URL = "https://route.showapi.com"; + private static final String API_APPID = "780330"; + private static final String API_SIGN_KEY = "f30ac28b65cc447da936448c57bc5d99"; + + public static final String TYPHOON_LIST = BASE_URL + + "/342-1?" + + "showapi_appid=" + API_APPID + "&" + + "showapi_sign=" + API_SIGN_KEY + "&" + + "showapi_timestamp="; + + public static final String TYPHOON_DETAIL = BASE_URL + + "/342-2?" + + "showapi_appid=" + API_APPID + "&" + + "showapi_sign=" + API_SIGN_KEY + "&" + + "tfid=ID" + "&" + + "showapi_timestamp="; + + /** + * 洋流相关常量 + */ + private static final String OCEAN_BASE_URL = "http://api.meteo.open.ninecosmos.cn"; + public static final String OCEAN_HEADER_NAME = "Authorization"; + public static final String OCEAN_APPID = "WXZH888888"; + public static final String OCEAN_APP_KEY = "xb#bD&xtho@b80scbDb"; + + public static final String OCEAN_TOKEN = OCEAN_BASE_URL + "/us/users/open/token"; + public static final String OCEAN_DETAIL = OCEAN_BASE_URL + "/mr/netcdf/meteo/ytx"; +} diff --git a/casic-server/src/main/java/com/casic/missiles/modular/system/utils/HttpRequestHelper.java b/casic-server/src/main/java/com/casic/missiles/modular/system/utils/HttpRequestHelper.java new file mode 100644 index 0000000..1e0cd94 --- /dev/null +++ b/casic-server/src/main/java/com/casic/missiles/modular/system/utils/HttpRequestHelper.java @@ -0,0 +1,115 @@ +package com.casic.missiles.modular.system.utils; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONException; +import com.alibaba.fastjson.JSONObject; +import lombok.NonNull; +import okhttp3.*; + +import java.io.IOException; +import java.util.Objects; +import java.util.concurrent.TimeUnit; + +/** + * 网络请求工具 + * + * @author a203 + */ +public class HttpRequestHelper { + + public static RequestBody createRequestBody(String value) { + return RequestBody.create(MediaType.parse("application/json; charset=utf-8"), value); + } + + public static String doPost(Request request) { + return streamResponse(request); + } + + public static String doGet(String url) { + return streamResponse(new Request.Builder() + .url(url) + .build()); + } + + private static String streamResponse(@NonNull Request request) { + OkHttpClient httpClient = new OkHttpClient.Builder() + .connectTimeout(10, TimeUnit.SECONDS) + .writeTimeout(10, TimeUnit.SECONDS) + .readTimeout(20, TimeUnit.SECONDS) + .build(); + Call call = httpClient.newCall(request); + try { + Response response = call.execute(); + return response.body() != null ? Objects.requireNonNull(response.body()).string() : ""; + } catch (IOException e) { + e.printStackTrace(); + } + return ""; + } + + public static String obtainOceanData(double lng, double lat, String date, String days, String hour) { + /** + * 获取洋流数据Token + * */ + JSONObject object = new JSONObject(); + try { + object.put("appId", Constant.OCEAN_APPID); + object.put("appKey", Constant.OCEAN_APP_KEY); + } catch (JSONException e) { + e.printStackTrace(); + } + Request tokenRequest = new Request.Builder() + .url(Constant.OCEAN_TOKEN) + .post(HttpRequestHelper.createRequestBody(object.toJSONString())) + .build(); + String tokenJson = HttpRequestHelper.doPost(tokenRequest); + if ("".equals(tokenJson)) { + return null; + } + /** + * 解析token + * */ + JSONObject tokenObject = JSON.parseObject(tokenJson); + JSONObject dataObject = tokenObject.getJSONObject("data"); + String token = dataObject.getString("token"); + /** + * 封装请求参数 + * */ + JSONObject jsonObject = new JSONObject(); + try { + jsonObject.put("lon", lng); + jsonObject.put("lat", lat); + jsonObject.put("date", date); + jsonObject.put("hour", days); + jsonObject.put("days", hour); + } catch (JSONException e) { + e.printStackTrace(); + } + /** + * 获取洋流数据 + * */ + Request request = new Request.Builder() + .addHeader(Constant.OCEAN_HEADER_NAME, token) + .url(Constant.OCEAN_DETAIL) + .post(HttpRequestHelper.createRequestBody(jsonObject.toJSONString())) + .build(); + return HttpRequestHelper.doPost(request); + } + + public static String getTyphoonCode(String value) { + if ("".equals(value)) { + return value; + } + JSONObject jsonObject = JSON.parseObject(value); + return jsonObject.getString("showapi_res_code"); + } + + public static String getOceanCode(String value) { + if ("".equals(value)) { + return value; + } + JSONObject jsonObject = JSON.parseObject(value); + Integer code = jsonObject.getInteger("code"); + return String.valueOf(code); + } +} diff --git a/casic-web/pom.xml b/casic-web/pom.xml index 73e9d68..7d97900 100644 --- a/casic-web/pom.xml +++ b/casic-web/pom.xml @@ -107,6 +107,11 @@ + + com.casic + casic-job-quartz + 2.0.0.alpha + diff --git a/casic-web/src/main/java/com/casic/missiles/CasicApplication.java b/casic-web/src/main/java/com/casic/missiles/CasicApplication.java index a90ac89..499eedd 100644 --- a/casic-web/src/main/java/com/casic/missiles/CasicApplication.java +++ b/casic-web/src/main/java/com/casic/missiles/CasicApplication.java @@ -5,6 +5,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCaching; import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.transaction.annotation.EnableTransactionManagement; /** @@ -17,6 +18,7 @@ @EnableTransactionManagement(proxyTargetClass = true) @EnableAsync @Slf4j +@EnableScheduling public class CasicApplication { public static void main(String[] args) { SpringApplication.run(CasicApplication.class, args); diff --git a/casic-web/src/main/resources/config/application-dev.yml b/casic-web/src/main/resources/config/application-dev.yml index 8c18554..0f6d593 100644 --- a/casic-web/src/main/resources/config/application-dev.yml +++ b/casic-web/src/main/resources/config/application-dev.yml @@ -1,10 +1,10 @@ server: - port: 8083 + port: 8085 ################### spring配置 ################### spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://111.198.10.15:11336/casic_template2.0?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true + url: jdbc:mysql://111.198.10.15:11336/casic_mobile_shelter_extranet?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTC&&allowMultiQueries=true username: root password: Casic203 jms: @@ -19,7 +19,7 @@ # redisValueSerializer: org.springframework.data.redis.serializer.JdkSerializationRedisSerializer casic: #kaptcha-open: false #是否开启登录时验证码 (true/false) - no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken + no-login-urls: ${casic.sysUrl}/user/login,${casic.sysUrl}/user/appLogin,${casic.sysUrl}/kaptcha/base64,${casic.sysUrl}/config/baseConfig,/route/mockToken,/environment/** #flowable数据源和多数据源配置 db: init: diff --git a/casic-web/src/main/resources/config/application-prod.yml b/casic-web/src/main/resources/config/application-prod.yml index 6553b10..e4dec71 100644 --- a/casic-web/src/main/resources/config/application-prod.yml +++ b/casic-web/src/main/resources/config/application-prod.yml @@ -21,7 +21,7 @@ #flowable数据源和多数据源配置 casic: kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken + nologin-urls: /user/login,/user/appLogin,/kaptcha,/config/baseConfig,/route/mockToken,/environment/** flowable: datasource: url: jdbc:mysql://10.18.0.20:3306/callcenter_flowable?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull diff --git a/casic-web/src/main/resources/config/application-test.yml b/casic-web/src/main/resources/config/application-test.yml index 54d7252..d59fd10 100644 --- a/casic-web/src/main/resources/config/application-test.yml +++ b/casic-web/src/main/resources/config/application-test.yml @@ -14,7 +14,7 @@ # store-type: redis casic: # kaptcha-open: false #是否开启登录时验证码 (true/false) - nologin-urls: /user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/** + nologin-urls: /user/login,/user/appLogin,/kaptcha/base64,/config/baseConfig,/route/mockToken,/workflow/**,/environment/** #flowable数据源和多数据源配置 flowable: datasource: diff --git a/casic-web/src/main/resources/config/application.yml b/casic-web/src/main/resources/config/application.yml index 200ca46..4a5f1f4 100644 --- a/casic-web/src/main/resources/config/application.yml +++ b/casic-web/src/main/resources/config/application.yml @@ -19,7 +19,7 @@ spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) session-invalidate-time: 86400 #session失效时间(只在单机环境下生效,,多机环境在SpringSessionConfig类中配置) 单位:秒 session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 - no-login-urls: /user/login,/kaptcha,/config/baseConfig + no-login-urls: /user/login,/kaptcha,/config/baseConfig,/environment/** config: export-path: D:\java\boot\guns-web-1.0.0-SNAPSHOT\export\