From 9960f2b9fe29c0e82ada1c76622744c05356bbdf Mon Sep 17 00:00:00 2001
From: chenxiwang <1520264117@qq.com>
Date: Wed, 31 Jul 2024 09:48:05 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=AF=BC=E5=87=BA=E6=8E=A5?=
=?UTF-8?q?=E5=8F=A3=EF=BC=9B=E5=A2=9E=E5=8A=A0=E6=B4=AA=E6=B0=B4=E9=A2=84?=
=?UTF-8?q?=E6=8A=A5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pom.xml | 5 +
.../xyt/controller/ForecastHQController.java | 80 +++++++
.../xyt/controller/ForecastHVController.java | 80 +++++++
.../xyt/controller/ForecastKController.java | 80 +++++++
.../controller/ForecastPPaRController.java | 80 +++++++
.../controller/ForecastPlanController.java | 80 +++++++
.../controller/ForecastResultsController.java | 105 ++++++++
.../xyt/controller/ForecastUController.java | 80 +++++++
.../ForecastUseparamController.java | 80 +++++++
.../controller/OsmoticWaterRController.java | 1 +
.../StWaterRReorganizeController.java | 41 ++--
.../project/xyt/mapper/ForecastHQMapper.java | 15 ++
.../project/xyt/mapper/ForecastHVMapper.java | 15 ++
.../project/xyt/mapper/ForecastKMapper.java | 15 ++
.../xyt/mapper/ForecastPPaRMapper.java | 15 ++
.../xyt/mapper/ForecastPlanMapper.java | 15 ++
.../xyt/mapper/ForecastResultsMapper.java | 15 ++
.../project/xyt/mapper/ForecastUMapper.java | 15 ++
.../xyt/mapper/ForecastUseparamMapper.java | 15 ++
.../gunshi/project/xyt/model/ForecastHQ.java | 41 ++++
.../gunshi/project/xyt/model/ForecastHV.java | 41 ++++
.../gunshi/project/xyt/model/ForecastK.java | 62 +++++
.../project/xyt/model/ForecastPPaR.java | 55 +++++
.../project/xyt/model/ForecastPlan.java | 130 ++++++++++
.../project/xyt/model/ForecastResults.java | 98 ++++++++
.../gunshi/project/xyt/model/ForecastU.java | 62 +++++
.../project/xyt/model/ForecastUseparam.java | 110 +++++++++
.../project/xyt/schedule/SchedulerConfig.java | 22 ++
.../xyt/schedule/TaskGroupHandler.java | 123 ++++++++++
.../project/xyt/schedule/TaskGroupJob.java | 44 ++++
.../xyt/schedule/TaskGroupJobRunner.java | 48 ++++
.../xyt/service/ForecastHQService.java | 23 ++
.../xyt/service/ForecastHVService.java | 23 ++
.../project/xyt/service/ForecastKService.java | 23 ++
.../xyt/service/ForecastPPaRService.java | 23 ++
.../xyt/service/ForecastPlanService.java | 23 ++
.../xyt/service/ForecastResultsService.java | 225 ++++++++++++++++++
.../project/xyt/service/ForecastService.java | 4 +-
.../project/xyt/service/ForecastUService.java | 23 ++
.../xyt/service/ForecastUseparamService.java | 23 ++
.../resources/mapper/ForecastHQMapper.xml | 5 +
.../resources/mapper/ForecastHVMapper.xml | 5 +
src/main/resources/mapper/ForecastKMapper.xml | 5 +
.../resources/mapper/ForecastPPaRMapper.xml | 5 +
.../resources/mapper/ForecastPlanMapper.xml | 5 +
.../mapper/ForecastResultsMapper.xml | 5 +
src/main/resources/mapper/ForecastUMapper.xml | 5 +
.../mapper/ForecastUseparamMapper.xml | 5 +
48 files changed, 2069 insertions(+), 29 deletions(-)
create mode 100644 src/main/java/com/gunshi/project/xyt/controller/ForecastHQController.java
create mode 100644 src/main/java/com/gunshi/project/xyt/controller/ForecastHVController.java
create mode 100644 src/main/java/com/gunshi/project/xyt/controller/ForecastKController.java
create mode 100644 src/main/java/com/gunshi/project/xyt/controller/ForecastPPaRController.java
create mode 100644 src/main/java/com/gunshi/project/xyt/controller/ForecastPlanController.java
create mode 100644 src/main/java/com/gunshi/project/xyt/controller/ForecastResultsController.java
create mode 100644 src/main/java/com/gunshi/project/xyt/controller/ForecastUController.java
create mode 100644 src/main/java/com/gunshi/project/xyt/controller/ForecastUseparamController.java
create mode 100644 src/main/java/com/gunshi/project/xyt/mapper/ForecastHQMapper.java
create mode 100644 src/main/java/com/gunshi/project/xyt/mapper/ForecastHVMapper.java
create mode 100644 src/main/java/com/gunshi/project/xyt/mapper/ForecastKMapper.java
create mode 100644 src/main/java/com/gunshi/project/xyt/mapper/ForecastPPaRMapper.java
create mode 100644 src/main/java/com/gunshi/project/xyt/mapper/ForecastPlanMapper.java
create mode 100644 src/main/java/com/gunshi/project/xyt/mapper/ForecastResultsMapper.java
create mode 100644 src/main/java/com/gunshi/project/xyt/mapper/ForecastUMapper.java
create mode 100644 src/main/java/com/gunshi/project/xyt/mapper/ForecastUseparamMapper.java
create mode 100644 src/main/java/com/gunshi/project/xyt/model/ForecastHQ.java
create mode 100644 src/main/java/com/gunshi/project/xyt/model/ForecastHV.java
create mode 100644 src/main/java/com/gunshi/project/xyt/model/ForecastK.java
create mode 100644 src/main/java/com/gunshi/project/xyt/model/ForecastPPaR.java
create mode 100644 src/main/java/com/gunshi/project/xyt/model/ForecastPlan.java
create mode 100644 src/main/java/com/gunshi/project/xyt/model/ForecastResults.java
create mode 100644 src/main/java/com/gunshi/project/xyt/model/ForecastU.java
create mode 100644 src/main/java/com/gunshi/project/xyt/model/ForecastUseparam.java
create mode 100644 src/main/java/com/gunshi/project/xyt/schedule/SchedulerConfig.java
create mode 100644 src/main/java/com/gunshi/project/xyt/schedule/TaskGroupHandler.java
create mode 100644 src/main/java/com/gunshi/project/xyt/schedule/TaskGroupJob.java
create mode 100644 src/main/java/com/gunshi/project/xyt/schedule/TaskGroupJobRunner.java
create mode 100644 src/main/java/com/gunshi/project/xyt/service/ForecastHQService.java
create mode 100644 src/main/java/com/gunshi/project/xyt/service/ForecastHVService.java
create mode 100644 src/main/java/com/gunshi/project/xyt/service/ForecastKService.java
create mode 100644 src/main/java/com/gunshi/project/xyt/service/ForecastPPaRService.java
create mode 100644 src/main/java/com/gunshi/project/xyt/service/ForecastPlanService.java
create mode 100644 src/main/java/com/gunshi/project/xyt/service/ForecastResultsService.java
create mode 100644 src/main/java/com/gunshi/project/xyt/service/ForecastUService.java
create mode 100644 src/main/java/com/gunshi/project/xyt/service/ForecastUseparamService.java
create mode 100644 src/main/resources/mapper/ForecastHQMapper.xml
create mode 100644 src/main/resources/mapper/ForecastHVMapper.xml
create mode 100644 src/main/resources/mapper/ForecastKMapper.xml
create mode 100644 src/main/resources/mapper/ForecastPPaRMapper.xml
create mode 100644 src/main/resources/mapper/ForecastPlanMapper.xml
create mode 100644 src/main/resources/mapper/ForecastResultsMapper.xml
create mode 100644 src/main/resources/mapper/ForecastUMapper.xml
create mode 100644 src/main/resources/mapper/ForecastUseparamMapper.xml
diff --git a/pom.xml b/pom.xml
index f5c1d8b..3b3a713 100644
--- a/pom.xml
+++ b/pom.xml
@@ -95,6 +95,11 @@
artemis-http-client
1.1.3
+
+
+ org.springframework.boot
+ spring-boot-starter-quartz
+
diff --git a/src/main/java/com/gunshi/project/xyt/controller/ForecastHQController.java b/src/main/java/com/gunshi/project/xyt/controller/ForecastHQController.java
new file mode 100644
index 0000000..2f3e144
--- /dev/null
+++ b/src/main/java/com/gunshi/project/xyt/controller/ForecastHQController.java
@@ -0,0 +1,80 @@
+package com.gunshi.project.xyt.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gunshi.core.result.R;
+import com.gunshi.project.xyt.model.ForecastHQ;
+import com.gunshi.project.xyt.service.ForecastHQService;
+import com.gunshi.project.xyt.validate.markers.Insert;
+import com.gunshi.project.xyt.validate.markers.Update;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.io.Serializable;
+import java.util.List;
+/**
+ * 描述: 预报_水位-泄流量表
+ * author: cxw
+ * date: 2024-07-30 10:02:24
+ */
+@Tag(name = "预报_水位-泄流量表")
+@RestController
+@RequestMapping(value="/forecastHQ")
+public class ForecastHQController {
+
+ @Autowired
+ private ForecastHQService service;
+
+
+ @Operation(summary = "新增")
+ @PostMapping("/insert")
+ public R insert(@Validated(Insert.class) @RequestBody ForecastHQ dto) {
+ boolean result = service.save(dto);
+ return R.ok(result ? dto : null);
+ }
+
+ @Operation(summary = "修改")
+ @PostMapping("/update")
+ public R update(@Validated(Update.class) @RequestBody ForecastHQ dto) {
+ boolean result = service.updateById(dto);
+ return R.ok(result ? dto : null);
+ }
+
+ @Operation(summary = "删除")
+ @GetMapping("/del/{id}")
+ public R del(@Schema(name = "id") @PathVariable("id") Serializable id) {
+ return R.ok(service.removeById(id));
+ }
+
+ @Operation(summary = "列表")
+ @PostMapping("/list")
+ public R> list(@RequestBody @Validated ForecastHQ forecastHQ) {
+ QueryWrapper wrapper = new QueryWrapper();
+ if(StringUtils.isNotBlank(forecastHQ.getSortField())){
+ wrapper.orderBy(true, ObjectUtils.isEmpty(forecastHQ.getIsAsc()) ? false : forecastHQ.getIsAsc(), forecastHQ.getSortField());
+ }
+ return R.ok(service.list(wrapper));
+ }
+
+ @Operation(summary = "分页")
+ @PostMapping("/page")
+ public R> page(@RequestBody @Validated ForecastHQ forecastHQ) {
+ QueryWrapper wrapper = new QueryWrapper();
+ if(StringUtils.isNotBlank(forecastHQ.getSortField())){
+ wrapper.orderBy(true, ObjectUtils.isEmpty(forecastHQ.getIsAsc()) ? false : forecastHQ.getIsAsc(), forecastHQ.getSortField());
+ }
+ return R.ok(service.page(forecastHQ.getPageSo().toPage(), wrapper));
+ }
+
+}
diff --git a/src/main/java/com/gunshi/project/xyt/controller/ForecastHVController.java b/src/main/java/com/gunshi/project/xyt/controller/ForecastHVController.java
new file mode 100644
index 0000000..701a275
--- /dev/null
+++ b/src/main/java/com/gunshi/project/xyt/controller/ForecastHVController.java
@@ -0,0 +1,80 @@
+package com.gunshi.project.xyt.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gunshi.core.result.R;
+import com.gunshi.project.xyt.model.ForecastHV;
+import com.gunshi.project.xyt.service.ForecastHVService;
+import com.gunshi.project.xyt.validate.markers.Insert;
+import com.gunshi.project.xyt.validate.markers.Update;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.io.Serializable;
+import java.util.List;
+/**
+ * 描述: 预报_水位-库容
+ * author: cxw
+ * date: 2024-07-30 10:02:24
+ */
+@Tag(name = "预报_水位-库容")
+@RestController
+@RequestMapping(value="/forecastHV")
+public class ForecastHVController {
+
+ @Autowired
+ private ForecastHVService service;
+
+
+ @Operation(summary = "新增")
+ @PostMapping("/insert")
+ public R insert(@Validated(Insert.class) @RequestBody ForecastHV dto) {
+ boolean result = service.save(dto);
+ return R.ok(result ? dto : null);
+ }
+
+ @Operation(summary = "修改")
+ @PostMapping("/update")
+ public R update(@Validated(Update.class) @RequestBody ForecastHV dto) {
+ boolean result = service.updateById(dto);
+ return R.ok(result ? dto : null);
+ }
+
+ @Operation(summary = "删除")
+ @GetMapping("/del/{id}")
+ public R del(@Schema(name = "id") @PathVariable("id") Serializable id) {
+ return R.ok(service.removeById(id));
+ }
+
+ @Operation(summary = "列表")
+ @PostMapping("/list")
+ public R> list(@RequestBody @Validated ForecastHV forecastHV) {
+ QueryWrapper wrapper = new QueryWrapper();
+ if(StringUtils.isNotBlank(forecastHV.getSortField())){
+ wrapper.orderBy(true, ObjectUtils.isEmpty(forecastHV.getIsAsc()) ? false : forecastHV.getIsAsc(), forecastHV.getSortField());
+ }
+ return R.ok(service.list(wrapper));
+ }
+
+ @Operation(summary = "分页")
+ @PostMapping("/page")
+ public R> page(@RequestBody @Validated ForecastHV forecastHV) {
+ QueryWrapper wrapper = new QueryWrapper();
+ if(StringUtils.isNotBlank(forecastHV.getSortField())){
+ wrapper.orderBy(true, ObjectUtils.isEmpty(forecastHV.getIsAsc()) ? false : forecastHV.getIsAsc(), forecastHV.getSortField());
+ }
+ return R.ok(service.page(forecastHV.getPageSo().toPage(), wrapper));
+ }
+
+}
diff --git a/src/main/java/com/gunshi/project/xyt/controller/ForecastKController.java b/src/main/java/com/gunshi/project/xyt/controller/ForecastKController.java
new file mode 100644
index 0000000..fdb71d6
--- /dev/null
+++ b/src/main/java/com/gunshi/project/xyt/controller/ForecastKController.java
@@ -0,0 +1,80 @@
+package com.gunshi.project.xyt.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gunshi.core.result.R;
+import com.gunshi.project.xyt.model.ForecastK;
+import com.gunshi.project.xyt.service.ForecastKService;
+import com.gunshi.project.xyt.validate.markers.Insert;
+import com.gunshi.project.xyt.validate.markers.Update;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.io.Serializable;
+import java.util.List;
+/**
+ * 描述: 前期影响雨量折减系数表
+ * author: cxw
+ * date: 2024-07-30 10:02:24
+ */
+@Tag(name = "前期影响雨量折减系数表")
+@RestController
+@RequestMapping(value="/forecastK")
+public class ForecastKController {
+
+ @Autowired
+ private ForecastKService service;
+
+
+ @Operation(summary = "新增")
+ @PostMapping("/insert")
+ public R insert(@Validated(Insert.class) @RequestBody ForecastK dto) {
+ boolean result = service.save(dto);
+ return R.ok(result ? dto : null);
+ }
+
+ @Operation(summary = "修改")
+ @PostMapping("/update")
+ public R update(@Validated(Update.class) @RequestBody ForecastK dto) {
+ boolean result = service.updateById(dto);
+ return R.ok(result ? dto : null);
+ }
+
+ @Operation(summary = "删除")
+ @GetMapping("/del/{id}")
+ public R del(@Schema(name = "id") @PathVariable("id") Serializable id) {
+ return R.ok(service.removeById(id));
+ }
+
+ @Operation(summary = "列表")
+ @PostMapping("/list")
+ public R> list(@RequestBody @Validated ForecastK forecastK) {
+ QueryWrapper wrapper = new QueryWrapper();
+ if(StringUtils.isNotBlank(forecastK.getSortField())){
+ wrapper.orderBy(true, ObjectUtils.isEmpty(forecastK.getIsAsc()) ? false : forecastK.getIsAsc(), forecastK.getSortField());
+ }
+ return R.ok(service.list(wrapper));
+ }
+
+ @Operation(summary = "分页")
+ @PostMapping("/page")
+ public R> page(@RequestBody @Validated ForecastK forecastK) {
+ QueryWrapper wrapper = new QueryWrapper();
+ if(StringUtils.isNotBlank(forecastK.getSortField())){
+ wrapper.orderBy(true, ObjectUtils.isEmpty(forecastK.getIsAsc()) ? false : forecastK.getIsAsc(), forecastK.getSortField());
+ }
+ return R.ok(service.page(forecastK.getPageSo().toPage(), wrapper));
+ }
+
+}
diff --git a/src/main/java/com/gunshi/project/xyt/controller/ForecastPPaRController.java b/src/main/java/com/gunshi/project/xyt/controller/ForecastPPaRController.java
new file mode 100644
index 0000000..78038ed
--- /dev/null
+++ b/src/main/java/com/gunshi/project/xyt/controller/ForecastPPaRController.java
@@ -0,0 +1,80 @@
+package com.gunshi.project.xyt.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gunshi.core.result.R;
+import com.gunshi.project.xyt.model.ForecastPPaR;
+import com.gunshi.project.xyt.service.ForecastPPaRService;
+import com.gunshi.project.xyt.validate.markers.Insert;
+import com.gunshi.project.xyt.validate.markers.Update;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.io.Serializable;
+import java.util.List;
+/**
+ * 描述: 预报_降雨径流关系表
+ * author: cxw
+ * date: 2024-07-30 10:02:24
+ */
+@Tag(name = "预报_降雨径流关系表")
+@RestController
+@RequestMapping(value="/forecastPPaR")
+public class ForecastPPaRController {
+
+ @Autowired
+ private ForecastPPaRService service;
+
+
+ @Operation(summary = "新增")
+ @PostMapping("/insert")
+ public R insert(@Validated(Insert.class) @RequestBody ForecastPPaR dto) {
+ boolean result = service.save(dto);
+ return R.ok(result ? dto : null);
+ }
+
+ @Operation(summary = "修改")
+ @PostMapping("/update")
+ public R update(@Validated(Update.class) @RequestBody ForecastPPaR dto) {
+ boolean result = service.updateById(dto);
+ return R.ok(result ? dto : null);
+ }
+
+ @Operation(summary = "删除")
+ @GetMapping("/del/{id}")
+ public R del(@Schema(name = "id") @PathVariable("id") Serializable id) {
+ return R.ok(service.removeById(id));
+ }
+
+ @Operation(summary = "列表")
+ @PostMapping("/list")
+ public R> list(@RequestBody @Validated ForecastPPaR forecastPPaR) {
+ QueryWrapper wrapper = new QueryWrapper();
+ if(StringUtils.isNotBlank(forecastPPaR.getSortField())){
+ wrapper.orderBy(true, ObjectUtils.isEmpty(forecastPPaR.getIsAsc()) ? false : forecastPPaR.getIsAsc(), forecastPPaR.getSortField());
+ }
+ return R.ok(service.list(wrapper));
+ }
+
+ @Operation(summary = "分页")
+ @PostMapping("/page")
+ public R> page(@RequestBody @Validated ForecastPPaR forecastPPaR) {
+ QueryWrapper wrapper = new QueryWrapper();
+ if(StringUtils.isNotBlank(forecastPPaR.getSortField())){
+ wrapper.orderBy(true, ObjectUtils.isEmpty(forecastPPaR.getIsAsc()) ? false : forecastPPaR.getIsAsc(), forecastPPaR.getSortField());
+ }
+ return R.ok(service.page(forecastPPaR.getPageSo().toPage(), wrapper));
+ }
+
+}
diff --git a/src/main/java/com/gunshi/project/xyt/controller/ForecastPlanController.java b/src/main/java/com/gunshi/project/xyt/controller/ForecastPlanController.java
new file mode 100644
index 0000000..1337681
--- /dev/null
+++ b/src/main/java/com/gunshi/project/xyt/controller/ForecastPlanController.java
@@ -0,0 +1,80 @@
+package com.gunshi.project.xyt.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gunshi.core.result.R;
+import com.gunshi.project.xyt.model.ForecastPlan;
+import com.gunshi.project.xyt.service.ForecastPlanService;
+import com.gunshi.project.xyt.validate.markers.Insert;
+import com.gunshi.project.xyt.validate.markers.Update;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.io.Serializable;
+import java.util.List;
+/**
+ * 描述: 预测方案管理表
+ * author: cxw
+ * date: 2024-07-30 10:02:24
+ */
+@Tag(name = "预测方案管理表")
+@RestController
+@RequestMapping(value="/forecastPlan")
+public class ForecastPlanController {
+
+ @Autowired
+ private ForecastPlanService service;
+
+
+ @Operation(summary = "新增")
+ @PostMapping("/insert")
+ public R insert(@Validated(Insert.class) @RequestBody ForecastPlan dto) {
+ boolean result = service.save(dto);
+ return R.ok(result ? dto : null);
+ }
+
+ @Operation(summary = "修改")
+ @PostMapping("/update")
+ public R update(@Validated(Update.class) @RequestBody ForecastPlan dto) {
+ boolean result = service.updateById(dto);
+ return R.ok(result ? dto : null);
+ }
+
+ @Operation(summary = "删除")
+ @GetMapping("/del/{id}")
+ public R del(@Schema(name = "id") @PathVariable("id") Serializable id) {
+ return R.ok(service.removeById(id));
+ }
+
+ @Operation(summary = "列表")
+ @PostMapping("/list")
+ public R> list(@RequestBody @Validated ForecastPlan forecastPlan) {
+ QueryWrapper wrapper = new QueryWrapper();
+ if(StringUtils.isNotBlank(forecastPlan.getSortField())){
+ wrapper.orderBy(true, ObjectUtils.isEmpty(forecastPlan.getIsAsc()) ? false : forecastPlan.getIsAsc(), forecastPlan.getSortField());
+ }
+ return R.ok(service.list(wrapper));
+ }
+
+ @Operation(summary = "分页")
+ @PostMapping("/page")
+ public R> page(@RequestBody @Validated ForecastPlan forecastPlan) {
+ QueryWrapper wrapper = new QueryWrapper();
+ if(StringUtils.isNotBlank(forecastPlan.getSortField())){
+ wrapper.orderBy(true, ObjectUtils.isEmpty(forecastPlan.getIsAsc()) ? false : forecastPlan.getIsAsc(), forecastPlan.getSortField());
+ }
+ return R.ok(service.page(forecastPlan.getPageSo().toPage(), wrapper));
+ }
+
+}
diff --git a/src/main/java/com/gunshi/project/xyt/controller/ForecastResultsController.java b/src/main/java/com/gunshi/project/xyt/controller/ForecastResultsController.java
new file mode 100644
index 0000000..2acd202
--- /dev/null
+++ b/src/main/java/com/gunshi/project/xyt/controller/ForecastResultsController.java
@@ -0,0 +1,105 @@
+package com.gunshi.project.xyt.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gunshi.algorithm.RrainfallForecast;
+import com.gunshi.core.result.R;
+import com.gunshi.model.vo.FloodAlgorithemVo;
+import com.gunshi.project.xyt.model.ForecastPlan;
+import com.gunshi.project.xyt.model.ForecastResults;
+import com.gunshi.project.xyt.service.ForecastResultsService;
+import com.gunshi.project.xyt.validate.markers.Insert;
+import com.gunshi.project.xyt.validate.markers.Update;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.io.Serializable;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.List;
+/**
+ * 描述: 预测结果表
+ * author: cxw
+ * date: 2024-07-30 10:02:24
+ */
+@Tag(name = "预测结果表")
+@RestController
+@RequestMapping(value="/forecastResults")
+public class ForecastResultsController {
+
+ @Autowired
+ private ForecastResultsService service;
+
+
+ @Operation(summary = "新增")
+ @PostMapping("/insert")
+ public R insert(@Validated(Insert.class) @RequestBody ForecastResults dto) {
+ boolean result = service.save(dto);
+ return R.ok(result ? dto : null);
+ }
+
+ @Operation(summary = "修改")
+ @PostMapping("/update")
+ public R update(@Validated(Update.class) @RequestBody ForecastResults dto) {
+ boolean result = service.updateById(dto);
+ return R.ok(result ? dto : null);
+ }
+
+ @Operation(summary = "删除")
+ @GetMapping("/del/{id}")
+ public R del(@Schema(name = "id") @PathVariable("id") Serializable id) {
+ return R.ok(service.removeById(id));
+ }
+
+ @Operation(summary = "列表")
+ @PostMapping("/list")
+ public R> list(@RequestBody @Validated ForecastResults forecastResults) {
+ QueryWrapper wrapper = new QueryWrapper();
+ if(StringUtils.isNotBlank(forecastResults.getSortField())){
+ wrapper.orderBy(true, ObjectUtils.isEmpty(forecastResults.getIsAsc()) ? false : forecastResults.getIsAsc(), forecastResults.getSortField());
+ }
+ return R.ok(service.list(wrapper));
+ }
+
+ @Operation(summary = "分页")
+ @PostMapping("/page")
+ public R> page(@RequestBody @Validated ForecastResults forecastResults) {
+ QueryWrapper wrapper = new QueryWrapper();
+ if(StringUtils.isNotBlank(forecastResults.getSortField())){
+ wrapper.orderBy(true, ObjectUtils.isEmpty(forecastResults.getIsAsc()) ? false : forecastResults.getIsAsc(), forecastResults.getSortField());
+ }
+ return R.ok(service.page(forecastResults.getPageSo().toPage(), wrapper));
+ }
+
+
+ @Operation(summary = "洪水预报测试")
+ @PostMapping("/forecastTest")
+ public R> forecastTest() throws Exception {
+ double[] PList = new double[] {6.5, 6.75, 7, 5.25, 3.5, 4, 4.5, 4, 3.5, 4.25, 5, 4, 3, 3, 3, 2.75, 2.5, 1.25, 0, 0.25, 0.5};
+ double[] u = new double[]{1.27, 0.75, 0.45, 0.27, 0.16, 0.09, 0.07, 0.03, 0.02, 0.01, 0.01};
+ return R.ok(RrainfallForecast.getData("2024-06-28 08:00:00", 0.93, 1.0, 120, 0.0, 675.94, 0.5, 100.0, PList, u));
+ }
+
+ @Operation(summary = "洪水预报测试2")
+ @PostMapping("/forecastTest2")
+ public R> forecastTest2() throws Exception {
+ DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ ForecastPlan forecastPlan = new ForecastPlan();
+ forecastPlan.setForecastTm(dateFormat.parse("2024-07-01 22:00:00"));
+ forecastPlan.setStartTm(dateFormat.parse("2024-07-01 16:00:00"));
+ forecastPlan.setEndTm(dateFormat.parse("2024-07-02 03:00:00"));
+ List floodAlgorithemVos = service.floodForecast(forecastPlan);
+ return R.ok(floodAlgorithemVos);
+ }
+}
diff --git a/src/main/java/com/gunshi/project/xyt/controller/ForecastUController.java b/src/main/java/com/gunshi/project/xyt/controller/ForecastUController.java
new file mode 100644
index 0000000..fe454a3
--- /dev/null
+++ b/src/main/java/com/gunshi/project/xyt/controller/ForecastUController.java
@@ -0,0 +1,80 @@
+package com.gunshi.project.xyt.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gunshi.core.result.R;
+import com.gunshi.project.xyt.model.ForecastU;
+import com.gunshi.project.xyt.service.ForecastUService;
+import com.gunshi.project.xyt.validate.markers.Insert;
+import com.gunshi.project.xyt.validate.markers.Update;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.io.Serializable;
+import java.util.List;
+/**
+ * 描述: 时段单位线表
+ * author: cxw
+ * date: 2024-07-30 10:02:24
+ */
+@Tag(name = "时段单位线表")
+@RestController
+@RequestMapping(value="/forecastU")
+public class ForecastUController {
+
+ @Autowired
+ private ForecastUService service;
+
+
+ @Operation(summary = "新增")
+ @PostMapping("/insert")
+ public R insert(@Validated(Insert.class) @RequestBody ForecastU dto) {
+ boolean result = service.save(dto);
+ return R.ok(result ? dto : null);
+ }
+
+ @Operation(summary = "修改")
+ @PostMapping("/update")
+ public R update(@Validated(Update.class) @RequestBody ForecastU dto) {
+ boolean result = service.updateById(dto);
+ return R.ok(result ? dto : null);
+ }
+
+ @Operation(summary = "删除")
+ @GetMapping("/del/{id}")
+ public R del(@Schema(name = "id") @PathVariable("id") Serializable id) {
+ return R.ok(service.removeById(id));
+ }
+
+ @Operation(summary = "列表")
+ @PostMapping("/list")
+ public R> list(@RequestBody @Validated ForecastU forecastU) {
+ QueryWrapper wrapper = new QueryWrapper();
+ if(StringUtils.isNotBlank(forecastU.getSortField())){
+ wrapper.orderBy(true, ObjectUtils.isEmpty(forecastU.getIsAsc()) ? false : forecastU.getIsAsc(), forecastU.getSortField());
+ }
+ return R.ok(service.list(wrapper));
+ }
+
+ @Operation(summary = "分页")
+ @PostMapping("/page")
+ public R> page(@RequestBody @Validated ForecastU forecastU) {
+ QueryWrapper wrapper = new QueryWrapper();
+ if(StringUtils.isNotBlank(forecastU.getSortField())){
+ wrapper.orderBy(true, ObjectUtils.isEmpty(forecastU.getIsAsc()) ? false : forecastU.getIsAsc(), forecastU.getSortField());
+ }
+ return R.ok(service.page(forecastU.getPageSo().toPage(), wrapper));
+ }
+
+}
diff --git a/src/main/java/com/gunshi/project/xyt/controller/ForecastUseparamController.java b/src/main/java/com/gunshi/project/xyt/controller/ForecastUseparamController.java
new file mode 100644
index 0000000..2129b24
--- /dev/null
+++ b/src/main/java/com/gunshi/project/xyt/controller/ForecastUseparamController.java
@@ -0,0 +1,80 @@
+package com.gunshi.project.xyt.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gunshi.core.result.R;
+import com.gunshi.project.xyt.model.ForecastUseparam;
+import com.gunshi.project.xyt.service.ForecastUseparamService;
+import com.gunshi.project.xyt.validate.markers.Insert;
+import com.gunshi.project.xyt.validate.markers.Update;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.io.Serializable;
+import java.util.List;
+/**
+ * 描述: 预报_通用参数管理
+ * author: cxw
+ * date: 2024-07-30 10:02:24
+ */
+@Tag(name = "预报_通用参数管理")
+@RestController
+@RequestMapping(value="/forecastUseparam")
+public class ForecastUseparamController {
+
+ @Autowired
+ private ForecastUseparamService service;
+
+
+ @Operation(summary = "新增")
+ @PostMapping("/insert")
+ public R insert(@Validated(Insert.class) @RequestBody ForecastUseparam dto) {
+ boolean result = service.save(dto);
+ return R.ok(result ? dto : null);
+ }
+
+ @Operation(summary = "修改")
+ @PostMapping("/update")
+ public R update(@Validated(Update.class) @RequestBody ForecastUseparam dto) {
+ boolean result = service.updateById(dto);
+ return R.ok(result ? dto : null);
+ }
+
+ @Operation(summary = "删除")
+ @GetMapping("/del/{id}")
+ public R del(@Schema(name = "id") @PathVariable("id") Serializable id) {
+ return R.ok(service.removeById(id));
+ }
+
+ @Operation(summary = "列表")
+ @PostMapping("/list")
+ public R> list(@RequestBody @Validated ForecastUseparam forecastUseparam) {
+ QueryWrapper wrapper = new QueryWrapper();
+ if(StringUtils.isNotBlank(forecastUseparam.getSortField())){
+ wrapper.orderBy(true, ObjectUtils.isEmpty(forecastUseparam.getIsAsc()) ? false : forecastUseparam.getIsAsc(), forecastUseparam.getSortField());
+ }
+ return R.ok(service.list(wrapper));
+ }
+
+ @Operation(summary = "分页")
+ @PostMapping("/page")
+ public R> page(@RequestBody @Validated ForecastUseparam forecastUseparam) {
+ QueryWrapper wrapper = new QueryWrapper();
+ if(StringUtils.isNotBlank(forecastUseparam.getSortField())){
+ wrapper.orderBy(true, ObjectUtils.isEmpty(forecastUseparam.getIsAsc()) ? false : forecastUseparam.getIsAsc(), forecastUseparam.getSortField());
+ }
+ return R.ok(service.page(forecastUseparam.getPageSo().toPage(), wrapper));
+ }
+
+}
diff --git a/src/main/java/com/gunshi/project/xyt/controller/OsmoticWaterRController.java b/src/main/java/com/gunshi/project/xyt/controller/OsmoticWaterRController.java
index e3dc26f..be52e0e 100644
--- a/src/main/java/com/gunshi/project/xyt/controller/OsmoticWaterRController.java
+++ b/src/main/java/com/gunshi/project/xyt/controller/OsmoticWaterRController.java
@@ -42,6 +42,7 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Objects;
import java.util.stream.Collectors;
/**
diff --git a/src/main/java/com/gunshi/project/xyt/controller/StWaterRReorganizeController.java b/src/main/java/com/gunshi/project/xyt/controller/StWaterRReorganizeController.java
index 0f906d8..598f79b 100644
--- a/src/main/java/com/gunshi/project/xyt/controller/StWaterRReorganizeController.java
+++ b/src/main/java/com/gunshi/project/xyt/controller/StWaterRReorganizeController.java
@@ -1,22 +1,5 @@
package com.gunshi.project.xyt.controller;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-import com.gunshi.algorithm.RrainfallForecast;
-import com.gunshi.model.vo.FloodAlgorithemVo;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.CrossOrigin;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
-
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
@@ -31,11 +14,24 @@ import com.gunshi.project.xyt.util.DateUtil;
import com.gunshi.project.xyt.util.ExcelUtil;
import com.gunshi.project.xyt.validate.markers.Insert;
import com.gunshi.project.xyt.validate.markers.Update;
-
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.servlet.http.HttpServletResponse;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
/**
* 描述: 供水量整编表
* author: cxw
@@ -162,13 +158,4 @@ public class StWaterRReorganizeController {
service.getYearStatisticAnalysis(year, resList);
ExcelUtil.exportExcel(resList, filename, StWaterRReorganizeYearVo.class, response, "统计分析");
}
-
-
- @Operation(summary = "洪水预报测试")
- @PostMapping("/forecastTest")
- public R> forecastTest() throws Exception {
- double[] PList = new double[] {6.5, 6.75, 7, 5.25, 3.5, 4, 4.5, 4, 3.5, 4.25, 5, 4, 3, 3, 3, 2.75, 2.5, 1.25, 0, 0.25, 0.5};
- double[] u = new double[]{1.27, 0.75, 0.45, 0.27, 0.16, 0.09, 0.07, 0.03, 0.02, 0.01, 0.01};
- return R.ok(RrainfallForecast.getData("2024-06-28 08:00:00", 0.93, 1.0, 120, 0.0, 675.94, 0.5, 100, PList, u));
- }
}
diff --git a/src/main/java/com/gunshi/project/xyt/mapper/ForecastHQMapper.java b/src/main/java/com/gunshi/project/xyt/mapper/ForecastHQMapper.java
new file mode 100644
index 0000000..dc6b7fa
--- /dev/null
+++ b/src/main/java/com/gunshi/project/xyt/mapper/ForecastHQMapper.java
@@ -0,0 +1,15 @@
+package com.gunshi.project.xyt.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gunshi.project.xyt.model.ForecastHQ;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 描述: 预报_水位-泄流量表
+ * author: cxw
+ * date: 2024-07-30 10:02:24
+ */
+@Mapper
+public interface ForecastHQMapper extends BaseMapper {
+
+}
diff --git a/src/main/java/com/gunshi/project/xyt/mapper/ForecastHVMapper.java b/src/main/java/com/gunshi/project/xyt/mapper/ForecastHVMapper.java
new file mode 100644
index 0000000..56efc5f
--- /dev/null
+++ b/src/main/java/com/gunshi/project/xyt/mapper/ForecastHVMapper.java
@@ -0,0 +1,15 @@
+package com.gunshi.project.xyt.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gunshi.project.xyt.model.ForecastHV;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 描述: 预报_水位-库容
+ * author: cxw
+ * date: 2024-07-30 10:02:24
+ */
+@Mapper
+public interface ForecastHVMapper extends BaseMapper {
+
+}
diff --git a/src/main/java/com/gunshi/project/xyt/mapper/ForecastKMapper.java b/src/main/java/com/gunshi/project/xyt/mapper/ForecastKMapper.java
new file mode 100644
index 0000000..1be6bd0
--- /dev/null
+++ b/src/main/java/com/gunshi/project/xyt/mapper/ForecastKMapper.java
@@ -0,0 +1,15 @@
+package com.gunshi.project.xyt.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gunshi.project.xyt.model.ForecastK;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 描述: 前期影响雨量折减系数表
+ * author: cxw
+ * date: 2024-07-30 10:02:24
+ */
+@Mapper
+public interface ForecastKMapper extends BaseMapper {
+
+}
diff --git a/src/main/java/com/gunshi/project/xyt/mapper/ForecastPPaRMapper.java b/src/main/java/com/gunshi/project/xyt/mapper/ForecastPPaRMapper.java
new file mode 100644
index 0000000..40159ca
--- /dev/null
+++ b/src/main/java/com/gunshi/project/xyt/mapper/ForecastPPaRMapper.java
@@ -0,0 +1,15 @@
+package com.gunshi.project.xyt.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gunshi.project.xyt.model.ForecastPPaR;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 描述: 预报_降雨径流关系表
+ * author: cxw
+ * date: 2024-07-30 10:02:24
+ */
+@Mapper
+public interface ForecastPPaRMapper extends BaseMapper {
+
+}
diff --git a/src/main/java/com/gunshi/project/xyt/mapper/ForecastPlanMapper.java b/src/main/java/com/gunshi/project/xyt/mapper/ForecastPlanMapper.java
new file mode 100644
index 0000000..2af615a
--- /dev/null
+++ b/src/main/java/com/gunshi/project/xyt/mapper/ForecastPlanMapper.java
@@ -0,0 +1,15 @@
+package com.gunshi.project.xyt.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gunshi.project.xyt.model.ForecastPlan;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 描述: 预测方案管理表
+ * author: cxw
+ * date: 2024-07-30 10:02:24
+ */
+@Mapper
+public interface ForecastPlanMapper extends BaseMapper {
+
+}
diff --git a/src/main/java/com/gunshi/project/xyt/mapper/ForecastResultsMapper.java b/src/main/java/com/gunshi/project/xyt/mapper/ForecastResultsMapper.java
new file mode 100644
index 0000000..4e2607a
--- /dev/null
+++ b/src/main/java/com/gunshi/project/xyt/mapper/ForecastResultsMapper.java
@@ -0,0 +1,15 @@
+package com.gunshi.project.xyt.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gunshi.project.xyt.model.ForecastResults;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 描述: 预测结果表
+ * author: cxw
+ * date: 2024-07-30 10:02:24
+ */
+@Mapper
+public interface ForecastResultsMapper extends BaseMapper {
+
+}
diff --git a/src/main/java/com/gunshi/project/xyt/mapper/ForecastUMapper.java b/src/main/java/com/gunshi/project/xyt/mapper/ForecastUMapper.java
new file mode 100644
index 0000000..6fa01c2
--- /dev/null
+++ b/src/main/java/com/gunshi/project/xyt/mapper/ForecastUMapper.java
@@ -0,0 +1,15 @@
+package com.gunshi.project.xyt.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gunshi.project.xyt.model.ForecastU;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 描述: 时段单位线表
+ * author: cxw
+ * date: 2024-07-30 10:02:24
+ */
+@Mapper
+public interface ForecastUMapper extends BaseMapper {
+
+}
diff --git a/src/main/java/com/gunshi/project/xyt/mapper/ForecastUseparamMapper.java b/src/main/java/com/gunshi/project/xyt/mapper/ForecastUseparamMapper.java
new file mode 100644
index 0000000..0b9e0c2
--- /dev/null
+++ b/src/main/java/com/gunshi/project/xyt/mapper/ForecastUseparamMapper.java
@@ -0,0 +1,15 @@
+package com.gunshi.project.xyt.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gunshi.project.xyt.model.ForecastUseparam;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 描述: 预报_通用参数管理
+ * author: cxw
+ * date: 2024-07-30 10:02:24
+ */
+@Mapper
+public interface ForecastUseparamMapper extends BaseMapper {
+
+}
diff --git a/src/main/java/com/gunshi/project/xyt/model/ForecastHQ.java b/src/main/java/com/gunshi/project/xyt/model/ForecastHQ.java
new file mode 100644
index 0000000..d0ef3c5
--- /dev/null
+++ b/src/main/java/com/gunshi/project/xyt/model/ForecastHQ.java
@@ -0,0 +1,41 @@
+package com.gunshi.project.xyt.model;
+
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.gunshi.project.xyt.entity.page.GenericPageParams;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+* 描述: 预报_水位-泄流量表
+* author: cxw
+* date: 2024-07-30 10:02:23
+*/
+@Schema(description="预报_水位-泄流量表")
+@Data
+@TableName("public.forecast_h_q")
+public class ForecastHQ extends GenericPageParams implements Serializable {
+
+ public final static String thisTableName = "ForecastHQ";
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * h
+ */
+ @TableField(value="h")
+ @Schema(description="h")
+ private BigDecimal h;
+
+ /**
+ * q
+ */
+ @TableField(value="q")
+ @Schema(description="q")
+ private BigDecimal q;
+
+}
diff --git a/src/main/java/com/gunshi/project/xyt/model/ForecastHV.java b/src/main/java/com/gunshi/project/xyt/model/ForecastHV.java
new file mode 100644
index 0000000..0c87331
--- /dev/null
+++ b/src/main/java/com/gunshi/project/xyt/model/ForecastHV.java
@@ -0,0 +1,41 @@
+package com.gunshi.project.xyt.model;
+
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.gunshi.project.xyt.entity.page.GenericPageParams;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+* 描述: 预报_水位-库容
+* author: cxw
+* date: 2024-07-30 10:02:24
+*/
+@Schema(description="预报_水位-库容")
+@Data
+@TableName("public.forecast_h_v")
+public class ForecastHV extends GenericPageParams implements Serializable {
+
+ public final static String thisTableName = "ForecastHV";
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * h
+ */
+ @TableField(value="h")
+ @Schema(description="h")
+ private BigDecimal h;
+
+ /**
+ * v
+ */
+ @TableField(value="v")
+ @Schema(description="v")
+ private BigDecimal v;
+
+}
diff --git a/src/main/java/com/gunshi/project/xyt/model/ForecastK.java b/src/main/java/com/gunshi/project/xyt/model/ForecastK.java
new file mode 100644
index 0000000..6897a9f
--- /dev/null
+++ b/src/main/java/com/gunshi/project/xyt/model/ForecastK.java
@@ -0,0 +1,62 @@
+package com.gunshi.project.xyt.model;
+
+
+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.fasterxml.jackson.annotation.JsonFormat;
+import com.gunshi.core.dateformat.DateFormatString;
+import com.gunshi.project.xyt.entity.page.GenericPageParams;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+* 描述: 前期影响雨量折减系数表
+* author: cxw
+* date: 2024-07-30 10:02:24
+*/
+@Schema(description="前期影响雨量折减系数表")
+@Data
+@TableName("public.forecast_k")
+public class ForecastK extends GenericPageParams implements Serializable {
+
+ public final static String thisTableName = "ForecastK";
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 月份
+ */
+ @TableId(value="month", type= IdType.NONE)
+ @Schema(description="月份")
+ private Integer month;
+
+ /**
+ * k值
+ */
+ @TableField(value="k_value")
+ @Schema(description="k值")
+ private BigDecimal kValue;
+
+ /**
+ * 创建时间
+ */
+ @TableField(value="chtm")
+ @Schema(description="创建时间")
+ @JsonFormat(pattern = DateFormatString.YYYY_MM_DD_HH_MM_SS, timezone = "GMT+8")
+ private Date chtm;
+
+ /**
+ * 修改时间
+ */
+ @TableField(value="update_time")
+ @Schema(description="修改时间")
+ @JsonFormat(pattern = DateFormatString.YYYY_MM_DD_HH_MM_SS, timezone = "GMT+8")
+ private Date updateTime;
+
+}
diff --git a/src/main/java/com/gunshi/project/xyt/model/ForecastPPaR.java b/src/main/java/com/gunshi/project/xyt/model/ForecastPPaR.java
new file mode 100644
index 0000000..ea666e6
--- /dev/null
+++ b/src/main/java/com/gunshi/project/xyt/model/ForecastPPaR.java
@@ -0,0 +1,55 @@
+package com.gunshi.project.xyt.model;
+
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.gunshi.project.xyt.entity.page.GenericPageParams;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+* 描述: 预报_降雨径流关系表
+* author: cxw
+* date: 2024-07-30 10:02:24
+*/
+@Schema(description="预报_降雨径流关系表")
+@Data
+@TableName("public.forecast_p_pa_r")
+public class ForecastPPaR extends GenericPageParams implements Serializable {
+
+ public final static String thisTableName = "ForecastPPaR";
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * r
+ */
+ @TableField(value="r")
+ @Schema(description="r")
+ private BigDecimal r;
+
+ /**
+ * psum
+ */
+ @TableField(value="psum")
+ @Schema(description="psum")
+ private BigDecimal psum;
+
+ /**
+ * rsum
+ */
+ @TableField(value="rsum")
+ @Schema(description="rsum")
+ private BigDecimal rsum;
+
+ /**
+ * pa
+ */
+ @TableField(value="pa")
+ @Schema(description="pa")
+ private BigDecimal pa;
+
+}
diff --git a/src/main/java/com/gunshi/project/xyt/model/ForecastPlan.java b/src/main/java/com/gunshi/project/xyt/model/ForecastPlan.java
new file mode 100644
index 0000000..4677839
--- /dev/null
+++ b/src/main/java/com/gunshi/project/xyt/model/ForecastPlan.java
@@ -0,0 +1,130 @@
+package com.gunshi.project.xyt.model;
+
+
+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.fasterxml.jackson.annotation.JsonFormat;
+import com.gunshi.core.dateformat.DateFormatString;
+import com.gunshi.project.xyt.entity.page.GenericPageParams;
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.Size;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+* 描述: 预测方案管理表
+* author: cxw
+* date: 2024-07-30 10:02:24
+*/
+@Schema(description="预测方案管理表")
+@Data
+@TableName("public.forecast_plan")
+public class ForecastPlan extends GenericPageParams implements Serializable {
+
+ public final static String thisTableName = "ForecastPlan";
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @TableId(value="id", type= IdType.AUTO)
+ @Schema(description="主键")
+ private Integer id;
+
+ /**
+ * 预报方案名称
+ */
+ @TableField(value="name")
+ @Schema(description="预报方案名称")
+ @Size(max = 255,message = "预报方案名称最大长度要小于 255")
+ private String name;
+
+ /**
+ * 类型(1:自动 2:人工)
+ */
+ @TableField(value="type")
+ @Schema(description="类型(1:自动 2:人工)")
+ @Size(max = 1,message = "类型(1:自动 2:人工)最大长度要小于 1")
+ private String type;
+
+ /**
+ * 预报时间
+ */
+ @TableField(value="forecast_tm")
+ @Schema(description="预报时间")
+ @JsonFormat(pattern = DateFormatString.YYYY_MM_DD_HH_MM_SS, timezone = "GMT+8")
+ private Date forecastTm;
+
+ /**
+ * 开始时间
+ */
+ @TableField(value="start_tm")
+ @Schema(description="开始时间")
+ @JsonFormat(pattern = DateFormatString.YYYY_MM_DD_HH_MM_SS, timezone = "GMT+8")
+ private Date startTm;
+
+ /**
+ * 结束时间
+ */
+ @TableField(value="end_tm")
+ @Schema(description="结束时间")
+ @JsonFormat(pattern = DateFormatString.YYYY_MM_DD_HH_MM_SS, timezone = "GMT+8")
+ private Date endTm;
+
+ /**
+ * 操作人id
+ */
+ @TableField(value="user_id")
+ @Schema(description="操作人id")
+ private Integer userId;
+
+ /**
+ * 预见期(小时)
+ */
+ @TableField(value="forecast_period")
+ @Schema(description="预见期(小时)")
+ private Integer forecastPeriod;
+
+ /**
+ * 预热期(天)
+ */
+ @TableField(value="forecast_warm")
+ @Schema(description="预热期(天)")
+ private Integer forecastWarm;
+
+ /**
+ * 方案制作时间
+ */
+ @TableField(value="chtm")
+ @Schema(description="方案制作时间")
+ @JsonFormat(pattern = DateFormatString.YYYY_MM_DD_HH_MM_SS, timezone = "GMT+8")
+ private Date chtm;
+
+ /**
+ * 修改时间
+ */
+ @TableField(value="update_tm")
+ @Schema(description="修改时间")
+ @JsonFormat(pattern = DateFormatString.YYYY_MM_DD_HH_MM_SS, timezone = "GMT+8")
+ private Date updateTm;
+
+ /**
+ * 任务状态(0:正常 1:暂停 2:删除)
+ */
+ @TableField(value="status")
+ @Schema(description="任务状态(0:正常 1:暂停 2:删除)")
+ @Size(max = 1,message = "任务状态(0:正常 1:暂停 2:删除)最大长度要小于 1")
+ private String status;
+
+ /**
+ * 任务时间间隔(分钟)
+ */
+ @TableField(value="time_interval")
+ @Schema(description="任务时间间隔(分钟)")
+ private String timeInterval;
+}
diff --git a/src/main/java/com/gunshi/project/xyt/model/ForecastResults.java b/src/main/java/com/gunshi/project/xyt/model/ForecastResults.java
new file mode 100644
index 0000000..9a27cbf
--- /dev/null
+++ b/src/main/java/com/gunshi/project/xyt/model/ForecastResults.java
@@ -0,0 +1,98 @@
+package com.gunshi.project.xyt.model;
+
+
+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.fasterxml.jackson.annotation.JsonFormat;
+import com.gunshi.core.dateformat.DateFormatString;
+import com.gunshi.project.xyt.entity.page.GenericPageParams;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+* 描述: 预测结果表
+* author: cxw
+* date: 2024-07-30 10:02:24
+*/
+@Schema(description="预测结果表")
+@Data
+@TableName("public.forecast_results")
+public class ForecastResults extends GenericPageParams implements Serializable {
+
+ public final static String thisTableName = "ForecastResults";
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @TableId(value="id", type= IdType.AUTO)
+ @Schema(description="主键")
+ private Integer id;
+
+ /**
+ * 时间
+ */
+ @TableField(value="tm")
+ @Schema(description="时间")
+ @JsonFormat(pattern = DateFormatString.YYYY_MM_DD_HH_MM_SS, timezone = "GMT+8")
+ private Date tm;
+
+ /**
+ * 入库流量
+ */
+ @TableField(value="rk_q_value")
+ @Schema(description="入库流量")
+ private BigDecimal rkQValue;
+
+ /**
+ * 出库流量
+ */
+ @TableField(value="ck_q_value")
+ @Schema(description="出库流量")
+ private BigDecimal ckQValue;
+
+ /**
+ * 水库水位
+ */
+ @TableField(value="sw_h_value")
+ @Schema(description="水库水位")
+ private BigDecimal swHValue;
+
+ /**
+ * 入库时间
+ */
+ @TableField(value="chtm")
+ @Schema(description="入库时间")
+ @JsonFormat(pattern = DateFormatString.YYYY_MM_DD_HH_MM_SS, timezone = "GMT+8")
+ private Date chtm;
+
+ /**
+ * 修改时间
+ */
+ @TableField(value="update_tm")
+ @Schema(description="修改时间")
+ @JsonFormat(pattern = DateFormatString.YYYY_MM_DD_HH_MM_SS, timezone = "GMT+8")
+ private Date updateTm;
+
+ /**
+ * 预测方案id
+ */
+ @TableField(value="plan_id")
+ @Schema(description="预测方案id")
+ private Integer planId;
+
+ /**
+ * 数据生成时间戳
+ */
+ @TableField(value="create_timestamp")
+ @Schema(description="数据生成时间戳")
+ private Integer createTimestamp;
+
+}
diff --git a/src/main/java/com/gunshi/project/xyt/model/ForecastU.java b/src/main/java/com/gunshi/project/xyt/model/ForecastU.java
new file mode 100644
index 0000000..eb10cc3
--- /dev/null
+++ b/src/main/java/com/gunshi/project/xyt/model/ForecastU.java
@@ -0,0 +1,62 @@
+package com.gunshi.project.xyt.model;
+
+
+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.fasterxml.jackson.annotation.JsonFormat;
+import com.gunshi.core.dateformat.DateFormatString;
+import com.gunshi.project.xyt.entity.page.GenericPageParams;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+* 描述: 时段单位线表
+* author: cxw
+* date: 2024-07-30 10:02:24
+*/
+@Schema(description="时段单位线表")
+@Data
+@TableName("public.forecast_u")
+public class ForecastU extends GenericPageParams implements Serializable {
+
+ public final static String thisTableName = "ForecastU";
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @TableId(value="id", type= IdType.AUTO)
+ @Schema(description="主键")
+ private Integer id;
+
+ /**
+ * u值
+ */
+ @TableField(value="u_value")
+ @Schema(description="u值")
+ private BigDecimal uValue;
+
+ /**
+ * 创建时间
+ */
+ @TableField(value="chtm")
+ @Schema(description="创建时间")
+ @JsonFormat(pattern = DateFormatString.YYYY_MM_DD_HH_MM_SS, timezone = "GMT+8")
+ private Date chtm;
+
+ /**
+ * 修改时间
+ */
+ @TableField(value="update_time")
+ @Schema(description="修改时间")
+ @JsonFormat(pattern = DateFormatString.YYYY_MM_DD_HH_MM_SS, timezone = "GMT+8")
+ private Date updateTime;
+
+}
diff --git a/src/main/java/com/gunshi/project/xyt/model/ForecastUseparam.java b/src/main/java/com/gunshi/project/xyt/model/ForecastUseparam.java
new file mode 100644
index 0000000..f9f3302
--- /dev/null
+++ b/src/main/java/com/gunshi/project/xyt/model/ForecastUseparam.java
@@ -0,0 +1,110 @@
+package com.gunshi.project.xyt.model;
+
+
+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.fasterxml.jackson.annotation.JsonFormat;
+import com.gunshi.core.dateformat.DateFormatString;
+import com.gunshi.project.xyt.entity.page.GenericPageParams;
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import jakarta.validation.constraints.Size;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+* 描述: 预报_通用参数管理
+* author: cxw
+* date: 2024-07-30 10:02:24
+*/
+@Schema(description="预报_通用参数管理")
+@Data
+@TableName("public.forecast_useparam")
+public class ForecastUseparam extends GenericPageParams implements Serializable {
+
+ public final static String thisTableName = "ForecastUseparam";
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @TableId(value="id", type= IdType.AUTO)
+ @Schema(description="主键")
+ private Long id;
+
+ /**
+ * 参数名称
+ */
+ @TableField(value="param_name")
+ @Schema(description="参数名称")
+ @Size(max = 255,message = "参数名称最大长度要小于 255")
+ @NotBlank(message = "参数名称不能为空")
+ @NotNull(message = "参数名称不能为空")
+ private String paramName;
+
+ /**
+ * 参数名
+ */
+ @TableField(value="param_code")
+ @Schema(description="参数名")
+ @Size(max = 255,message = "参数名最大长度要小于 255")
+// @NotBlank(message = "参数名不能为空")
+// @NotNull(message = "参数名不能为空")
+ private String paramCode;
+
+ /**
+ * 参数值
+ */
+ @TableField(value="param_value")
+ @Schema(description="参数值")
+ @Size(max = 255,message = "参数值最大长度要小于 255")
+ @NotBlank(message = "参数值不能为空")
+ @NotNull(message = "参数值不能为空")
+ private String paramValue;
+
+ /**
+ * 参数单位
+ */
+ @TableField(value="param_unit")
+ @Schema(description="参数单位")
+ @Size(max = 255,message = "参数单位最大长度要小于 255")
+ private String paramUnit;
+
+ /**
+ * 参数排序
+ */
+ @TableField(value="param_sort")
+ @Schema(description="参数排序")
+ private Integer paramSort;
+
+ /**
+ * 参数描述
+ */
+ @TableField(value="param_remarks")
+ @Schema(description="参数描述")
+ @Size(max = 255,message = "参数描述最大长度要小于 255")
+ private String paramRemarks;
+
+ /**
+ * 创建时间
+ */
+ @TableField(value="chtm")
+ @Schema(description="创建时间")
+ @JsonFormat(pattern = DateFormatString.YYYY_MM_DD_HH_MM_SS, timezone = "GMT+8")
+ private Date chtm;
+
+ /**
+ * 修改时间
+ */
+ @TableField(value="update_time")
+ @Schema(description="修改时间")
+ @JsonFormat(pattern = DateFormatString.YYYY_MM_DD_HH_MM_SS, timezone = "GMT+8")
+ private Date updateTime;
+
+}
diff --git a/src/main/java/com/gunshi/project/xyt/schedule/SchedulerConfig.java b/src/main/java/com/gunshi/project/xyt/schedule/SchedulerConfig.java
new file mode 100644
index 0000000..0d2ab1d
--- /dev/null
+++ b/src/main/java/com/gunshi/project/xyt/schedule/SchedulerConfig.java
@@ -0,0 +1,22 @@
+package com.gunshi.project.xyt.schedule;
+
+
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.SchedulingConfigurer;
+import org.springframework.scheduling.config.ScheduledTaskRegistrar;
+
+/**
+ * @author cxw
+ * @description quartz配置
+ * @classname SchedulerConfig.java
+ * @create 2024-07-30, 星期二, 9:41:34
+ */
+@Configuration
+public class SchedulerConfig implements SchedulingConfigurer {
+
+ @Override
+ public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
+ // 注意:这里配置的是Spring的@Scheduled任务,而不是Quartz的Scheduler
+ // 对于Quartz,你通常不需要在这里做任何配置,除非你有特殊需求
+ }
+}
diff --git a/src/main/java/com/gunshi/project/xyt/schedule/TaskGroupHandler.java b/src/main/java/com/gunshi/project/xyt/schedule/TaskGroupHandler.java
new file mode 100644
index 0000000..95368b9
--- /dev/null
+++ b/src/main/java/com/gunshi/project/xyt/schedule/TaskGroupHandler.java
@@ -0,0 +1,123 @@
+package com.gunshi.project.xyt.schedule;
+
+import com.gunshi.project.xyt.model.ForecastPlan;
+import jakarta.annotation.Resource;
+import lombok.extern.slf4j.Slf4j;
+import org.quartz.CronScheduleBuilder;
+import org.quartz.CronTrigger;
+import org.quartz.JobBuilder;
+import org.quartz.JobDataMap;
+import org.quartz.JobDetail;
+import org.quartz.JobKey;
+import org.quartz.Scheduler;
+import org.quartz.SchedulerException;
+import org.quartz.TriggerBuilder;
+import org.quartz.TriggerKey;
+import org.springframework.context.annotation.Profile;
+import org.springframework.stereotype.Component;
+import org.springframework.web.bind.annotation.GetMapping;
+
+
+/**
+ * @author cxw
+ * @description 定时任务动态操作
+ * @classname TaskGroupHandler.java
+ * @create 2024-07-30, 星期二, 9:42:04
+ */
+@Component
+@Slf4j
+@Profile("prod")
+public class TaskGroupHandler {
+
+ @Resource
+ private Scheduler scheduler;
+
+ /**
+ * 新增定时任务
+ * @param jobId
+ */
+ public void addCronJob(String jobId, ForecastPlan forecastPlan) {
+ try {
+ TriggerKey triggerKey = TriggerKey.triggerKey(jobId, "TaskGroup");
+
+ //构建job信息
+ JobDetail job = JobBuilder.newJob(TaskGroupJob.class).withIdentity(jobId, "TaskGroup")
+ .withDescription("任务组编排").build();
+ JobDataMap jobDataMap = job.getJobDataMap();
+ jobDataMap.put("jobId", jobId);
+ jobDataMap.put("forecastPlan", forecastPlan);
+ //CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule("cron的表达式");
+ String cronExpression = "0 0/" + forecastPlan.getTimeInterval() + " * * * ?";
+ CronTrigger trigger = TriggerBuilder.newTrigger()
+ .withIdentity(triggerKey)
+ .startNow()
+ .withSchedule(CronScheduleBuilder.cronSchedule(cronExpression).withMisfireHandlingInstructionFireAndProceed())
+ .build();
+
+ //SimpleScheduleBuilder.simpleSchedule().withRepeatCount(0).withIntervalInSeconds(20)//每隔多少秒执行一次; withRepeatCount 设置重复的次数
+ //.startNow().withSchedule(cronScheduleBuilder)
+ //交由Scheduler安排触发
+ scheduler.scheduleJob(job, trigger);
+ if(!scheduler.isStarted()){
+ scheduler.start();
+ }
+ log.info("添加定时任务成功, startJob:{}", jobId);
+ } catch (SchedulerException e) {
+ log.error("添加定时任务异常, jobId:{}", jobId, e);
+ throw new RuntimeException(e);
+ }
+ }
+
+ /**
+ * 删除任务
+ * @param jobId
+ * @return
+ */
+ public void removeCronJob(String jobId) {
+ try {
+ // TriggerKey 定义了trigger的名称和组别 ,通过任务名和任务组名获取TriggerKey
+ TriggerKey triggerKey = TriggerKey.triggerKey(jobId,"TaskGroup");
+ // 停止触发器
+ scheduler.resumeTrigger(triggerKey);
+ // 移除触发器
+ scheduler.unscheduleJob(triggerKey);
+ // 移除任务
+ scheduler.deleteJob(JobKey.jobKey(jobId,"TaskGroup"));
+ log.info("删除定时任务成功, jobId:{}", jobId);
+ } catch (SchedulerException e) {
+ log.error("删除定时任务异常, jobId:{}", jobId, e);
+ }
+ }
+
+ /**
+ * 暂停定时任务
+ * @param jobId
+ */
+ public void pauseJob(String jobId) {
+ try {
+ JobKey jobKey = JobKey.jobKey(jobId,"TaskGroup");
+ // 暂停任务
+ scheduler.pauseJob(jobKey);
+ log.info("暂停定时任务成功, jobId:{}", jobId);
+ } catch (SchedulerException e) {
+ log.error("暂停定时任务异常, jobId:{}", jobId, e);
+ }
+ }
+
+ /**
+ * 继续定时任务
+ * @param jobId
+ */
+ @GetMapping("/resumeJob")
+ public void resumeJob(String jobId) {
+ try {
+ // 通过任务名和任务组名获取jobKey
+ JobKey jobKey = JobKey.jobKey(jobId,"TaskGroup");
+ // 继续任务
+ scheduler.resumeJob(jobKey);
+ log.info("继续定时任务成功, jobId:{}", jobId);
+ } catch (SchedulerException e) {
+ log.error("继续定时任务异常, jobId:{}", jobId, e);
+ }
+ }
+}
diff --git a/src/main/java/com/gunshi/project/xyt/schedule/TaskGroupJob.java b/src/main/java/com/gunshi/project/xyt/schedule/TaskGroupJob.java
new file mode 100644
index 0000000..36395e9
--- /dev/null
+++ b/src/main/java/com/gunshi/project/xyt/schedule/TaskGroupJob.java
@@ -0,0 +1,44 @@
+package com.gunshi.project.xyt.schedule;
+
+import com.gunshi.model.vo.FloodAlgorithemVo;
+import com.gunshi.project.xyt.model.ForecastPlan;
+import com.gunshi.project.xyt.service.ForecastResultsService;
+import lombok.extern.slf4j.Slf4j;
+import org.quartz.Job;
+import org.quartz.JobDataMap;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Profile;
+import org.springframework.stereotype.Component;
+
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.List;
+
+/**
+ * @author cxw
+ * @description 实现具体逻辑
+ * @classname TaskGroupJob.java
+ * @create 2024-07-30, 星期二, 9:43:17
+ */
+@Component
+@Slf4j
+@Profile("prod")
+public class TaskGroupJob implements Job {
+
+ private static DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+
+ @Autowired
+ private ForecastResultsService forecastResultsService;
+
+ @Override
+ public void execute(JobExecutionContext context) throws JobExecutionException {
+ JobDataMap jdMap = context.getJobDetail().getJobDataMap();
+ String jobId = (String) jdMap.get("jobId");
+ ForecastPlan forecastPlan = (ForecastPlan) jdMap.get("forecastPlan");
+ log.info("{}----TaskGroupJob-计划执行开始===>jobId:{}", dtf.format(LocalDateTime.now()), jobId);
+ List floodAlgorithemVos = forecastResultsService.floodForecast(forecastPlan);
+ log.info("{}----TaskGroupJob-计划执行结束===>jobId:{}", dtf.format(LocalDateTime.now()), jobId);
+ }
+}
diff --git a/src/main/java/com/gunshi/project/xyt/schedule/TaskGroupJobRunner.java b/src/main/java/com/gunshi/project/xyt/schedule/TaskGroupJobRunner.java
new file mode 100644
index 0000000..f6e8a51
--- /dev/null
+++ b/src/main/java/com/gunshi/project/xyt/schedule/TaskGroupJobRunner.java
@@ -0,0 +1,48 @@
+package com.gunshi.project.xyt.schedule;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.gunshi.project.xyt.model.ForecastPlan;
+import com.gunshi.project.xyt.service.ForecastPlanService;
+import jakarta.annotation.Resource;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.CommandLineRunner;
+import org.springframework.context.annotation.Profile;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+/**
+ * @author cxw
+ * @description 任务预热,预先加载数据库已经配置好的任务
+ * @classname TaskGroupJobRunner.java
+ * @create 2024-07-30, 星期二, 9:42:39
+ */
+@Component
+@Slf4j
+@Profile("prod")
+public class TaskGroupJobRunner implements CommandLineRunner {
+
+ @Resource
+ private TaskGroupHandler taskGroupHandler;
+
+ @Autowired
+ private ForecastPlanService forecastPlanService;
+
+ @Override
+ public void run(String... args) {
+ // 初始加载数据库里状态为自动、正常的定时任务
+ List planList = forecastPlanService.list(new QueryWrapper().eq("type", "1").eq("status", "0"));
+ if (CollectionUtils.isNotEmpty(planList)) {
+ Map jobMap = planList.stream()
+ .collect(Collectors.toMap(ForecastPlan::getId, Function.identity(), (key1, key2)->key2));
+ for (Map.Entry entry : jobMap.entrySet()) {
+ taskGroupHandler.addCronJob(String.valueOf(entry.getKey()), entry.getValue());
+ }
+ }
+ }
+}
diff --git a/src/main/java/com/gunshi/project/xyt/service/ForecastHQService.java b/src/main/java/com/gunshi/project/xyt/service/ForecastHQService.java
new file mode 100644
index 0000000..ecf1698
--- /dev/null
+++ b/src/main/java/com/gunshi/project/xyt/service/ForecastHQService.java
@@ -0,0 +1,23 @@
+package com.gunshi.project.xyt.service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gunshi.project.xyt.mapper.ForecastHQMapper;
+import com.gunshi.project.xyt.model.ForecastHQ;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * 描述: 预报_水位-泄流量表
+ * author: cxw
+ * date: 2024-07-30 10:02:24
+ */
+@Service
+@Slf4j
+@Transactional(rollbackFor = Exception.class)
+public class ForecastHQService extends ServiceImpl
+{
+
+}
+
+
diff --git a/src/main/java/com/gunshi/project/xyt/service/ForecastHVService.java b/src/main/java/com/gunshi/project/xyt/service/ForecastHVService.java
new file mode 100644
index 0000000..63d88f9
--- /dev/null
+++ b/src/main/java/com/gunshi/project/xyt/service/ForecastHVService.java
@@ -0,0 +1,23 @@
+package com.gunshi.project.xyt.service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gunshi.project.xyt.mapper.ForecastHVMapper;
+import com.gunshi.project.xyt.model.ForecastHV;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * 描述: 预报_水位-库容
+ * author: cxw
+ * date: 2024-07-30 10:02:24
+ */
+@Service
+@Slf4j
+@Transactional(rollbackFor = Exception.class)
+public class ForecastHVService extends ServiceImpl
+{
+
+}
+
+
diff --git a/src/main/java/com/gunshi/project/xyt/service/ForecastKService.java b/src/main/java/com/gunshi/project/xyt/service/ForecastKService.java
new file mode 100644
index 0000000..e168374
--- /dev/null
+++ b/src/main/java/com/gunshi/project/xyt/service/ForecastKService.java
@@ -0,0 +1,23 @@
+package com.gunshi.project.xyt.service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gunshi.project.xyt.mapper.ForecastKMapper;
+import com.gunshi.project.xyt.model.ForecastK;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * 描述: 前期影响雨量折减系数表
+ * author: cxw
+ * date: 2024-07-30 10:02:24
+ */
+@Service
+@Slf4j
+@Transactional(rollbackFor = Exception.class)
+public class ForecastKService extends ServiceImpl
+{
+
+}
+
+
diff --git a/src/main/java/com/gunshi/project/xyt/service/ForecastPPaRService.java b/src/main/java/com/gunshi/project/xyt/service/ForecastPPaRService.java
new file mode 100644
index 0000000..34d7d95
--- /dev/null
+++ b/src/main/java/com/gunshi/project/xyt/service/ForecastPPaRService.java
@@ -0,0 +1,23 @@
+package com.gunshi.project.xyt.service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gunshi.project.xyt.mapper.ForecastPPaRMapper;
+import com.gunshi.project.xyt.model.ForecastPPaR;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * 描述: 预报_降雨径流关系表
+ * author: cxw
+ * date: 2024-07-30 10:02:24
+ */
+@Service
+@Slf4j
+@Transactional(rollbackFor = Exception.class)
+public class ForecastPPaRService extends ServiceImpl
+{
+
+}
+
+
diff --git a/src/main/java/com/gunshi/project/xyt/service/ForecastPlanService.java b/src/main/java/com/gunshi/project/xyt/service/ForecastPlanService.java
new file mode 100644
index 0000000..9ec0b6c
--- /dev/null
+++ b/src/main/java/com/gunshi/project/xyt/service/ForecastPlanService.java
@@ -0,0 +1,23 @@
+package com.gunshi.project.xyt.service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gunshi.project.xyt.mapper.ForecastPlanMapper;
+import com.gunshi.project.xyt.model.ForecastPlan;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * 描述: 预测方案管理表
+ * author: cxw
+ * date: 2024-07-30 10:02:24
+ */
+@Service
+@Slf4j
+@Transactional(rollbackFor = Exception.class)
+public class ForecastPlanService extends ServiceImpl
+{
+
+}
+
+
diff --git a/src/main/java/com/gunshi/project/xyt/service/ForecastResultsService.java b/src/main/java/com/gunshi/project/xyt/service/ForecastResultsService.java
new file mode 100644
index 0000000..b3d087b
--- /dev/null
+++ b/src/main/java/com/gunshi/project/xyt/service/ForecastResultsService.java
@@ -0,0 +1,225 @@
+package com.gunshi.project.xyt.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gunshi.model.vo.FloodAlgorithemVo;
+import com.gunshi.project.xyt.entity.vo.ForeRainTimeVo;
+import com.gunshi.project.xyt.entity.vo.ForeRainVo;
+import com.gunshi.project.xyt.grb.RainGrib2Layer;
+import com.gunshi.project.xyt.mapper.ForecastResultsMapper;
+import com.gunshi.project.xyt.model.ForecastK;
+import com.gunshi.project.xyt.model.ForecastPlan;
+import com.gunshi.project.xyt.model.ForecastResults;
+import com.gunshi.project.xyt.model.ForecastU;
+import com.gunshi.project.xyt.model.ForecastUseparam;
+import com.gunshi.project.xyt.model.StPptnR;
+import com.gunshi.project.xyt.model.StRsvrR;
+import com.gunshi.project.xyt.model.StStbprpB;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * 描述: 预测结果表
+ * author: cxw
+ * date: 2024-07-30 10:02:24
+ */
+@Service
+@Slf4j
+@Transactional(rollbackFor = Exception.class)
+public class ForecastResultsService extends ServiceImpl
+{
+
+ private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ private static SimpleDateFormat eightSdf = new SimpleDateFormat("yyyy-MM-dd 08");
+ private static SimpleDateFormat sixteenSdf = new SimpleDateFormat("yyyy-MM-dd 16");
+
+ @Autowired
+ private ForecastUseparamService forecastUseparamService;
+
+ @Autowired
+ private ForecastUService forecastUService;
+
+ @Autowired
+ private ForecastKService forecastKService;
+
+ @Autowired
+ private StPptnRService stPptnRService;
+
+ @Autowired
+ private StRsvrRService stRsvrRService;
+
+ @Autowired
+ private ForecastService forecastService;
+
+ @Autowired
+ private StStbprpBService stStbprpBService;
+
+
+ /**
+ * @description: 洪水预测
+ * @param forecastPlan
+ * @return: java.util.List
+ * @auther: cxw
+ * @date: 2024-07-30, 周二, 14:40:45
+ */
+ public List floodForecast(ForecastPlan forecastPlan) {
+ List voList = new ArrayList<>();
+ Date now = new Date();
+ String dateStr = sdf.format(forecastPlan.getForecastTm());
+ Date startTm = forecastPlan.getStartTm();
+ Date endTm = forecastPlan.getEndTm();
+ // 获取配置参数
+ List paramList = forecastUseparamService.list();
+ List uList = forecastUService.list();
+ List kList = forecastKService.list();
+ if (CollectionUtils.isNotEmpty(paramList) && CollectionUtils.isNotEmpty(uList) && CollectionUtils.isNotEmpty(kList)) {
+ // 每小时的单位径流量,单位m³/s
+ double[] u = uList.stream().mapToDouble(forecastU -> forecastU.getUValue().doubleValue()).toArray();
+ // 蒸发率
+ Map kMap = kList.stream().collect(Collectors.toMap(ForecastK::getMonth, ForecastK::getKValue));
+ double k = kMap.get(Integer.valueOf(dateStr.substring(5, 7))).doubleValue();
+ // 其它配置参数
+ Map paramMap = paramList.stream().collect(Collectors.toMap(ForecastUseparam::getParamCode,
+ ForecastUseparam::getParamValue));
+ if (!paramMap.get("Im").isEmpty() && !paramMap.get("dt").isEmpty()) {
+ double Wm = Double.parseDouble(paramMap.get("Im"));// 土壤含水量最大值(最大初损值)Im
+ double dt = Double.parseDouble(paramMap.get("dt"));
+ double PaT0 = 0.0;// 昨天的Pa值(一场降雨的初始值可以设为0)
+ double pt = 0.0;// 昨天的降雨值
+ double H1 = 0.0;// 初始水库水位,可以根据H1->V1,H1->q1得到初始的水库库容和下泄流量
+ double PaT1 = 0.0;// 根据昨天的降雨值求今天早上的土壤含水量,这个每天早上8点,根据昨天的降雨值要重新计算。
+ try {
+ // 获取预测时间前的最后水库水位
+ StRsvrR rsvrR = stRsvrRService.getOne(new QueryWrapper().eq("stcd", "716153201").le("tm", forecastPlan.getForecastTm()).orderBy(true, false,
+ "tm").last("limit 1"));
+ if (ObjectUtils.isNotEmpty(rsvrR)) {
+ H1 = Double.parseDouble(rsvrR.getRz());
+ } else {
+ return voList;
+ }
+ // 根据预测时间查询降雨序列值
+ List pResultList = new ArrayList<>();
+ List pptnRAllList = new ArrayList<>();
+ List pptnRExistedList = new ArrayList<>();
+ List pptnRFutureList = new ArrayList<>();
+ QueryWrapper qwExisted = new QueryWrapper<>();
+ // 如果结束时间在当前时间之前,降雨序列从历史降雨表获取
+ if (endTm.compareTo(now) <= 0) {
+ qwExisted = new QueryWrapper().eq("stcd", "716153201").ge("tm", startTm).le("tm", endTm).orderBy(true, true, "tm");
+ } else {
+ qwExisted = new QueryWrapper().eq("stcd", "716153201").ge("tm", startTm).le("tm", now).orderBy(true, true, "tm");
+ pptnRFutureList = getForecastDrpData(now, rsvrR.getStcd());
+ }
+ pptnRExistedList = stPptnRService.list(qwExisted);
+ pptnRAllList.addAll(pptnRExistedList);
+ pptnRAllList.addAll(pptnRFutureList);
+ // 根据降雨数据,按照△t的颗粒度,均分
+ if (CollectionUtils.isNotEmpty(pptnRAllList)) {
+ for (int i = 0; i < pptnRAllList.size(); i++) {
+ StPptnR stPptnR = pptnRAllList.get(i);
+ String drp = stPptnR.getDrp();
+ pResultList.add(drp);
+ if (i + 1 == pptnRAllList.size()) {
+ break;
+ } else {
+ StPptnR stPptnRNext = pptnRAllList.get(i + 1);
+ // 两条数据的小时差
+ double diffHours = dateHourDifference(stPptnR.getTm(), stPptnRNext.getTm());
+ int floorNum = (int) Math.floor(diffHours / dt);
+ BigDecimal meanDifference =
+ new BigDecimal(stPptnRNext.getDrp()).subtract(new BigDecimal(drp)).divide(new BigDecimal(floorNum),
+ BigDecimal.ROUND_HALF_UP, 2);
+ for (int j = 1; j < floorNum; j++) {
+ BigDecimal add = new BigDecimal(drp).add(meanDifference.multiply(new BigDecimal(j))).setScale(2, BigDecimal.ROUND_HALF_UP);
+ pResultList.add(add.toString());
+ }
+ }
+ }
+ }
+ System.out.println(pResultList);
+ double[] PList = pResultList.stream().mapToDouble(Double::parseDouble).toArray();
+ // 预测执行
+// voList = RrainfallForecast.getData(dateStr, k, PaT0, Wm, pt, H1, dt, PaT1, PList, u);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+ }
+ return voList;
+ }
+
+ /**
+ * 计算时间的小时差值
+ */
+ private static double dateHourDifference(Date beforeDate, Date afterDate) {
+ long time1 = beforeDate.getTime(); // 获取第一个时间的毫秒时间戳
+ long time2 = afterDate.getTime(); // 获取第二个时间的毫秒时间戳
+ // 计算两个时间戳的差值
+ long difference = time2 - time1;
+ // 将差值转换为小时
+ double hours = difference / (60 * 60 * 1000);
+ return hours;
+ }
+
+ /**
+ * 根据时间获取气象降雨预报
+ */
+ private List getForecastDrpData(Date now, String stcd) {
+ List pptnRFutureList = new ArrayList<>();
+ StStbprpB stStbprpB = stStbprpBService.getOne(new QueryWrapper().eq("stcd", stcd));
+ String tm = "";// 时间格式应为:YYYYMMDDHH其中HH只能为08或20,例如2023062908
+ if (isBeforeEightAM(now)) {
+ tm = eightSdf.format(now);
+ } else {
+ tm = sixteenSdf.format(now);
+ }
+ tm = tm.trim().replace("-", "");
+ List gribList = forecastService.getGribData(tm, false);
+ //24小时每个网格的总量
+ List total = gribList.stream().filter(o -> o.getTmRange().getInterval() == 24).collect(Collectors.toList());
+ //24小时每个网格的逐小时雨量
+ List detail = gribList.stream().filter(o -> o.getTmRange().getInterval() == 1).collect(Collectors.toList());
+ ForeRainVo vo = new ForeRainVo();
+ vo.setStcd(stcd);
+ vo.setLgtd(stStbprpB.getLgtd());
+ vo.setLttd(stStbprpB.getLttd());
+ List data = forecastService.getData(vo, total, detail);
+ if (CollectionUtils.isNotEmpty(data)) {
+ for (ForeRainTimeVo foreRainTimeVo : data) {
+ // 只取当前时间之后的数据
+ if(foreRainTimeVo.getTm().compareTo(now) > 0){
+ StPptnR stPptnR = new StPptnR();
+ stPptnR.setTm(foreRainTimeVo.getTm());
+ stPptnR.setDrp(foreRainTimeVo.getDrp().toString());
+ pptnRFutureList.add(stPptnR);
+ }
+ }
+ }
+ return pptnRFutureList;
+ }
+
+ /**
+ * 判断date是否在早八点后还是前(true:在8:00前)
+ */
+ public static boolean isBeforeEightAM(Date date) {
+ Calendar calendar = Calendar.getInstance();
+ calendar.set(Calendar.HOUR_OF_DAY, 8);
+ calendar.set(Calendar.MINUTE, 0);
+ calendar.set(Calendar.SECOND, 0);
+ calendar.set(Calendar.MILLISECOND, 0);
+ return date.before(calendar.getTime());
+ }
+}
diff --git a/src/main/java/com/gunshi/project/xyt/service/ForecastService.java b/src/main/java/com/gunshi/project/xyt/service/ForecastService.java
index f4a8211..5b1c3ee 100644
--- a/src/main/java/com/gunshi/project/xyt/service/ForecastService.java
+++ b/src/main/java/com/gunshi/project/xyt/service/ForecastService.java
@@ -103,7 +103,7 @@ public class ForecastService {
* @param tm
* @return
*/
- private List getGribData(String tm,Boolean isOnlyQueryTotal){
+ public List getGribData(String tm,Boolean isOnlyQueryTotal){
List list = new ArrayList<>();
String grbLatestUrl = shqxjsCloudowrCnPath + grbgetName + "?tm=" + tm;
HttpClient httpClient = HttpClientBuilder.create().build();
@@ -205,7 +205,7 @@ public class ForecastService {
return list.stream().sorted(Comparator.comparing(ForeRainVo::getH24).reversed()).collect(Collectors.toList());
}
- private List getData(ForeRainVo vo, List total,List detail) {
+ public List getData(ForeRainVo vo, List total,List detail) {
List result = new ArrayList<>();
RainGrib2Layer layer = total.get(0);
BigDecimal dh = layer.getDh();
diff --git a/src/main/java/com/gunshi/project/xyt/service/ForecastUService.java b/src/main/java/com/gunshi/project/xyt/service/ForecastUService.java
new file mode 100644
index 0000000..50a9e7e
--- /dev/null
+++ b/src/main/java/com/gunshi/project/xyt/service/ForecastUService.java
@@ -0,0 +1,23 @@
+package com.gunshi.project.xyt.service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gunshi.project.xyt.mapper.ForecastUMapper;
+import com.gunshi.project.xyt.model.ForecastU;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * 描述: 时段单位线表
+ * author: cxw
+ * date: 2024-07-30 10:02:24
+ */
+@Service
+@Slf4j
+@Transactional(rollbackFor = Exception.class)
+public class ForecastUService extends ServiceImpl
+{
+
+}
+
+
diff --git a/src/main/java/com/gunshi/project/xyt/service/ForecastUseparamService.java b/src/main/java/com/gunshi/project/xyt/service/ForecastUseparamService.java
new file mode 100644
index 0000000..22a3b6e
--- /dev/null
+++ b/src/main/java/com/gunshi/project/xyt/service/ForecastUseparamService.java
@@ -0,0 +1,23 @@
+package com.gunshi.project.xyt.service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gunshi.project.xyt.mapper.ForecastUseparamMapper;
+import com.gunshi.project.xyt.model.ForecastUseparam;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * 描述: 预报_通用参数管理
+ * author: cxw
+ * date: 2024-07-30 10:02:24
+ */
+@Service
+@Slf4j
+@Transactional(rollbackFor = Exception.class)
+public class ForecastUseparamService extends ServiceImpl
+{
+
+}
+
+
diff --git a/src/main/resources/mapper/ForecastHQMapper.xml b/src/main/resources/mapper/ForecastHQMapper.xml
new file mode 100644
index 0000000..f3405be
--- /dev/null
+++ b/src/main/resources/mapper/ForecastHQMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/src/main/resources/mapper/ForecastHVMapper.xml b/src/main/resources/mapper/ForecastHVMapper.xml
new file mode 100644
index 0000000..5f96778
--- /dev/null
+++ b/src/main/resources/mapper/ForecastHVMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/src/main/resources/mapper/ForecastKMapper.xml b/src/main/resources/mapper/ForecastKMapper.xml
new file mode 100644
index 0000000..34e94e5
--- /dev/null
+++ b/src/main/resources/mapper/ForecastKMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/src/main/resources/mapper/ForecastPPaRMapper.xml b/src/main/resources/mapper/ForecastPPaRMapper.xml
new file mode 100644
index 0000000..e42dc6c
--- /dev/null
+++ b/src/main/resources/mapper/ForecastPPaRMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/src/main/resources/mapper/ForecastPlanMapper.xml b/src/main/resources/mapper/ForecastPlanMapper.xml
new file mode 100644
index 0000000..c7f1d23
--- /dev/null
+++ b/src/main/resources/mapper/ForecastPlanMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/src/main/resources/mapper/ForecastResultsMapper.xml b/src/main/resources/mapper/ForecastResultsMapper.xml
new file mode 100644
index 0000000..c222d42
--- /dev/null
+++ b/src/main/resources/mapper/ForecastResultsMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/src/main/resources/mapper/ForecastUMapper.xml b/src/main/resources/mapper/ForecastUMapper.xml
new file mode 100644
index 0000000..5745bd1
--- /dev/null
+++ b/src/main/resources/mapper/ForecastUMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/src/main/resources/mapper/ForecastUseparamMapper.xml b/src/main/resources/mapper/ForecastUseparamMapper.xml
new file mode 100644
index 0000000..3603887
--- /dev/null
+++ b/src/main/resources/mapper/ForecastUseparamMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+