diff --git a/pom.xml b/pom.xml
index 65162e7..2554b40 100644
--- a/pom.xml
+++ b/pom.xml
@@ -66,7 +66,14 @@
3.1.1
-
+
+ com.alibaba
+ fastjson
+ 1.2.79
+
+
+
+
diff --git a/src/main/java/com/gunshi/project/xyt/entity/SkSyncData.java b/src/main/java/com/gunshi/project/xyt/entity/SkSyncData.java
new file mode 100644
index 0000000..8bcbf0a
--- /dev/null
+++ b/src/main/java/com/gunshi/project/xyt/entity/SkSyncData.java
@@ -0,0 +1,18 @@
+package com.gunshi.project.xyt.entity;
+
+
+import com.gunshi.project.xyt.model.StPptnRD;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author Sun Lejun
+ * @version 1.0
+ * @date 2024/2/23
+ */
+
+@Data
+public class SkSyncData {
+ List stPptnRD;
+}
diff --git a/src/main/java/com/gunshi/project/xyt/entity/SkSyncResp.java b/src/main/java/com/gunshi/project/xyt/entity/SkSyncResp.java
new file mode 100644
index 0000000..1cf61f2
--- /dev/null
+++ b/src/main/java/com/gunshi/project/xyt/entity/SkSyncResp.java
@@ -0,0 +1,13 @@
+package com.gunshi.project.xyt.entity;
+
+import lombok.Data;
+
+/**
+ * @author Sun Lejun
+ * @version 1.0
+ * @date 2024/2/26
+ */
+@Data
+public class SkSyncResp {
+ SkSyncData data;
+}
diff --git a/src/main/java/com/gunshi/project/xyt/entity/SyncDataReq.java b/src/main/java/com/gunshi/project/xyt/entity/SyncDataReq.java
new file mode 100644
index 0000000..76c097b
--- /dev/null
+++ b/src/main/java/com/gunshi/project/xyt/entity/SyncDataReq.java
@@ -0,0 +1,33 @@
+package com.gunshi.project.xyt.entity;
+
+import java.util.Date;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+import lombok.Data;
+
+/**
+ * @author Sun Lejun
+ * @version 1.0
+ * @date 2024/2/20
+ */
+
+@Data
+public class SyncDataReq {
+ /**
+ * 抽取的行政区划编码 6位
+ */
+ private String adcd;
+ /**
+ * 抽取的开始时间 格式 yyyy-MM-dd
+ */
+ private String startDate;
+ /**
+ * 抽取的结束时间 格式 yyyy-MM-dd
+ */
+ private String endDate;
+ /**
+ * 抽取的类型 QX SW SK SH
+ */
+ private String type;
+}
diff --git a/src/main/java/com/gunshi/project/xyt/mapper/StImgRMapper.java b/src/main/java/com/gunshi/project/xyt/mapper/StImgRMapper.java
index f0d5650..2357f5e 100644
--- a/src/main/java/com/gunshi/project/xyt/mapper/StImgRMapper.java
+++ b/src/main/java/com/gunshi/project/xyt/mapper/StImgRMapper.java
@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.gunshi.project.xyt.model.StImgR;
import org.apache.ibatis.annotations.Mapper;
+import java.util.List;
+
/**
* 描述: 图像历史表
* author: xusan
@@ -12,4 +14,5 @@ import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface StImgRMapper extends BaseMapper {
-}
\ No newline at end of file
+ List getStcdLastImgData();
+}
diff --git a/src/main/java/com/gunshi/project/xyt/mapper/StPptnRDMapper.java b/src/main/java/com/gunshi/project/xyt/mapper/StPptnRDMapper.java
index 6565f6a..20d48a0 100644
--- a/src/main/java/com/gunshi/project/xyt/mapper/StPptnRDMapper.java
+++ b/src/main/java/com/gunshi/project/xyt/mapper/StPptnRDMapper.java
@@ -4,12 +4,15 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.gunshi.project.xyt.model.StPptnRD;
import org.apache.ibatis.annotations.Mapper;
+import java.util.List;
+
/**
- * 描述:
+ * 描述:
* author: xusan
* date: 2024-07-08 15:44:08
*/
@Mapper
public interface StPptnRDMapper extends BaseMapper {
-}
\ No newline at end of file
+ List getStcdLastPptnDayData();
+}
diff --git a/src/main/java/com/gunshi/project/xyt/mapper/StPptnRMapper.java b/src/main/java/com/gunshi/project/xyt/mapper/StPptnRMapper.java
index 08aedd6..e6e4363 100644
--- a/src/main/java/com/gunshi/project/xyt/mapper/StPptnRMapper.java
+++ b/src/main/java/com/gunshi/project/xyt/mapper/StPptnRMapper.java
@@ -8,6 +8,7 @@ import org.apache.ibatis.annotations.Select;
import java.math.BigDecimal;
import java.util.Date;
+import java.util.List;
/**
* 描述: 降水量表
@@ -27,4 +28,6 @@ public interface StPptnRMapper extends BaseMapper {
""")
BigDecimal queryStPptnTimeQuantumByStcdAndTime(@Param("stcd") String stcd, @Param("startTime") Date startTime, @Param("endTime") Date endTime);
-}
\ No newline at end of file
+
+ List getStcdLastPptnData();
+}
diff --git a/src/main/java/com/gunshi/project/xyt/mapper/StRsvrRMapper.java b/src/main/java/com/gunshi/project/xyt/mapper/StRsvrRMapper.java
index 06b1669..d5905e4 100644
--- a/src/main/java/com/gunshi/project/xyt/mapper/StRsvrRMapper.java
+++ b/src/main/java/com/gunshi/project/xyt/mapper/StRsvrRMapper.java
@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.gunshi.project.xyt.model.StRsvrR;
import org.apache.ibatis.annotations.Mapper;
+import java.util.List;
+
/**
* 描述: 水库历史水位表
* author: xusan
@@ -12,4 +14,5 @@ import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface StRsvrRMapper extends BaseMapper {
-}
\ No newline at end of file
+ List getStcdLastRsvrData();
+}
diff --git a/src/main/java/com/gunshi/project/xyt/model/StImgR.java b/src/main/java/com/gunshi/project/xyt/model/StImgR.java
index 937be12..45e8805 100644
--- a/src/main/java/com/gunshi/project/xyt/model/StImgR.java
+++ b/src/main/java/com/gunshi/project/xyt/model/StImgR.java
@@ -3,6 +3,7 @@ package com.gunshi.project.xyt.model;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.github.jeffreyning.mybatisplus.anno.MppMultiId;
import com.gunshi.core.dateformat.DateFormatString;
import io.swagger.v3.oas.annotations.media.Schema;
@@ -17,6 +18,7 @@ import java.util.Date;
@Schema
@Data
@TableName(value = "st_img_r")
+@JsonIgnoreProperties(ignoreUnknown = true)
public class StImgR implements Serializable {
@TableField(value = "stcd")
@MppMultiId
@@ -74,4 +76,12 @@ public class StImgR implements Serializable {
public static final String COL_SOURCE = "source";
public static final String COL_MTMCD = "mtmcd";
-}
\ No newline at end of file
+
+
+
+ @TableField(exist = false)
+ private Date stm;// 同步的数据的开始时间
+
+ @TableField(exist = false)
+ private Date etm;// 同步的数据的结束时间
+}
diff --git a/src/main/java/com/gunshi/project/xyt/model/StImgRReal.java b/src/main/java/com/gunshi/project/xyt/model/StImgRReal.java
index c99a14a..5333fdf 100644
--- a/src/main/java/com/gunshi/project/xyt/model/StImgRReal.java
+++ b/src/main/java/com/gunshi/project/xyt/model/StImgRReal.java
@@ -1,30 +1,34 @@
package com.gunshi.project.xyt.model;
+import java.io.Serializable;
+import java.util.Date;
+
+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.github.jeffreyning.mybatisplus.anno.MppMultiId;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+
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;
-
@Schema
@Data
@TableName(value = "st_img_r_real")
+@JsonIgnoreProperties(ignoreUnknown = true)
public class StImgRReal implements Serializable {
- @TableField(value = "stcd")
- @MppMultiId
+
+
+ @TableField(value="stcd")
@Schema(description="测站编码")
@Size(max = 20,message = "测站编码最大长度要小于 20")
@NotBlank(message = "测站编码不能为空")
private String stcd;
@TableField(value = "tm")
- @MppMultiId
@Schema(description="")
@NotNull(message = "不能为null")
private Date tm;
@@ -40,7 +44,7 @@ public class StImgRReal implements Serializable {
@NotBlank(message = "不能为空")
private String imgPath;
- @TableField(value = "chid")
+ @TableId(value="chid", type = IdType.NONE)
@Schema(description="")
@Size(max = 10,message = "最大长度要小于 10")
@NotBlank(message = "不能为空")
@@ -64,4 +68,4 @@ public class StImgRReal implements Serializable {
public static final String COL_CHID = "chid";
public static final String COL_SOURCE = "source";
-}
\ No newline at end of file
+}
diff --git a/src/main/java/com/gunshi/project/xyt/model/StPptnR.java b/src/main/java/com/gunshi/project/xyt/model/StPptnR.java
index ebf7a8d..3606396 100644
--- a/src/main/java/com/gunshi/project/xyt/model/StPptnR.java
+++ b/src/main/java/com/gunshi/project/xyt/model/StPptnR.java
@@ -1,21 +1,23 @@
package com.gunshi.project.xyt.model;
+import java.io.Serializable;
+import java.util.Date;
+
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.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.gunshi.core.dateformat.DateFormatString;
+
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: xusan
@@ -24,6 +26,7 @@ import java.util.Date;
@Schema(description="降水量表")
@Data
@TableName("public.st_pptn_r")
+@JsonIgnoreProperties(ignoreUnknown = true)
public class StPptnR implements Serializable {
@@ -92,4 +95,10 @@ public class StPptnR implements Serializable {
@JsonFormat(pattern = DateFormatString.YYYY_MM_DD_HH_MM_SS, timezone = "GMT+8")
private Date chtm;
-}
\ No newline at end of file
+
+ @TableField(exist = false)
+ private Date stm;// 同步的数据的开始时间
+
+ @TableField(exist = false)
+ private Date etm;// 同步的数据的结束时间
+}
diff --git a/src/main/java/com/gunshi/project/xyt/model/StPptnRD.java b/src/main/java/com/gunshi/project/xyt/model/StPptnRD.java
index 66bf7c2..288f813 100644
--- a/src/main/java/com/gunshi/project/xyt/model/StPptnRD.java
+++ b/src/main/java/com/gunshi/project/xyt/model/StPptnRD.java
@@ -6,6 +6,7 @@ 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.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.gunshi.core.dateformat.DateFormatString;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
@@ -18,13 +19,14 @@ import java.math.BigDecimal;
import java.util.Date;
/**
-* 描述:
+* 描述:
* author: xusan
* date: 2024-07-08 17:34:26
*/
@Schema(description="")
@Data
@TableName("public.st_pptn_r_d")
+@JsonIgnoreProperties(ignoreUnknown = true)
public class StPptnRD implements Serializable {
@@ -65,4 +67,9 @@ public class StPptnRD implements Serializable {
@NotNull(message = "year不能为空")
private Integer year;
-}
\ No newline at end of file
+ @TableField(exist = false)
+ private Date stm;// 同步的数据的开始时间
+
+ @TableField(exist = false)
+ private String addvcd;
+}
diff --git a/src/main/java/com/gunshi/project/xyt/model/StPptnRReal.java b/src/main/java/com/gunshi/project/xyt/model/StPptnRReal.java
index c05c05e..7d84fba 100644
--- a/src/main/java/com/gunshi/project/xyt/model/StPptnRReal.java
+++ b/src/main/java/com/gunshi/project/xyt/model/StPptnRReal.java
@@ -6,6 +6,7 @@ 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.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.gunshi.core.dateformat.DateFormatString;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
@@ -24,6 +25,7 @@ import java.util.Date;
@Schema(description="降水量历史表")
@Data
@TableName("public.st_pptn_r_real")
+@JsonIgnoreProperties(ignoreUnknown = true)
public class StPptnRReal implements Serializable {
@@ -161,4 +163,4 @@ public class StPptnRReal implements Serializable {
@Size(max = 10,message = "cluster最大长度要小于 10")
private String cluster;
-}
\ No newline at end of file
+}
diff --git a/src/main/java/com/gunshi/project/xyt/model/StRsvrR.java b/src/main/java/com/gunshi/project/xyt/model/StRsvrR.java
index ad2d433..54f66eb 100644
--- a/src/main/java/com/gunshi/project/xyt/model/StRsvrR.java
+++ b/src/main/java/com/gunshi/project/xyt/model/StRsvrR.java
@@ -6,6 +6,7 @@ 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.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.gunshi.core.dateformat.DateFormatString;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
@@ -24,6 +25,7 @@ import java.util.Date;
@Schema(description="水库历史水位表")
@Data
@TableName("public.st_rsvr_r")
+@JsonIgnoreProperties(ignoreUnknown = true)
public class StRsvrR implements Serializable {
@@ -149,4 +151,11 @@ public class StRsvrR implements Serializable {
// @Size(max = 0,message = "source_int最大长度要小于 0")
private Integer sourceInt;
-}
\ No newline at end of file
+
+ @TableField(exist = false)
+ private Date stm;// 同步的数据的开始时间
+
+ @TableField(exist = false)
+ private Date etm;// 同步的数据的结束时间
+
+}
diff --git a/src/main/java/com/gunshi/project/xyt/model/StRsvrRReal.java b/src/main/java/com/gunshi/project/xyt/model/StRsvrRReal.java
index 09dae38..e9d2a8a 100644
--- a/src/main/java/com/gunshi/project/xyt/model/StRsvrRReal.java
+++ b/src/main/java/com/gunshi/project/xyt/model/StRsvrRReal.java
@@ -6,6 +6,7 @@ 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.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.gunshi.core.dateformat.DateFormatString;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
@@ -23,6 +24,7 @@ import java.util.Date;
@Schema(description="水库水位实时数据表")
@Data
@TableName("public.st_rsvr_r_real")
+@JsonIgnoreProperties(ignoreUnknown = true)
public class StRsvrRReal implements Serializable {
@@ -145,4 +147,4 @@ public class StRsvrRReal implements Serializable {
// @Size(max = 0,message = "status最大长度要小于 0")
private Integer status;
-}
\ No newline at end of file
+}
diff --git a/src/main/java/com/gunshi/project/xyt/service/StImgRService.java b/src/main/java/com/gunshi/project/xyt/service/StImgRService.java
index 9e3156f..072d210 100644
--- a/src/main/java/com/gunshi/project/xyt/service/StImgRService.java
+++ b/src/main/java/com/gunshi/project/xyt/service/StImgRService.java
@@ -1,13 +1,15 @@
package com.gunshi.project.xyt.service;
+import java.util.List;
+
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.gunshi.project.xyt.mapper.StImgRMapper;
import com.gunshi.project.xyt.model.StImgR;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-import java.util.Date;
+import lombok.extern.slf4j.Slf4j;
/**
* 描述: 图像历史表
@@ -20,6 +22,9 @@ import java.util.Date;
public class StImgRService extends ServiceImpl
{
+ public List getStcdLastImgData() {
+ return baseMapper.getStcdLastImgData();
+ }
}
diff --git a/src/main/java/com/gunshi/project/xyt/service/StPptnRDService.java b/src/main/java/com/gunshi/project/xyt/service/StPptnRDService.java
index 172c34b..2ee8336 100644
--- a/src/main/java/com/gunshi/project/xyt/service/StPptnRDService.java
+++ b/src/main/java/com/gunshi/project/xyt/service/StPptnRDService.java
@@ -7,8 +7,10 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
+import java.util.List;
+
/**
- * 描述:
+ * 描述:
* author: xusan
* date: 2024-07-08 17:30:38
*/
@@ -18,6 +20,9 @@ import org.springframework.transaction.annotation.Transactional;
public class StPptnRDService extends ServiceImpl
{
+ public List getStcdLastPptnDayData() {
+ return baseMapper.getStcdLastPptnDayData();
+ }
}
diff --git a/src/main/java/com/gunshi/project/xyt/service/StPptnRService.java b/src/main/java/com/gunshi/project/xyt/service/StPptnRService.java
index 4121cbd..96aac42 100644
--- a/src/main/java/com/gunshi/project/xyt/service/StPptnRService.java
+++ b/src/main/java/com/gunshi/project/xyt/service/StPptnRService.java
@@ -1,13 +1,15 @@
package com.gunshi.project.xyt.service;
+import java.util.List;
+
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.gunshi.project.xyt.mapper.StPptnRMapper;
import com.gunshi.project.xyt.model.StPptnR;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-import java.util.Date;
+import lombok.extern.slf4j.Slf4j;
/**
* 描述: 降水量表
@@ -20,6 +22,9 @@ import java.util.Date;
public class StPptnRService extends ServiceImpl
{
+ public List getStcdLastPptnData() {
+ return baseMapper.getStcdLastPptnData();
+ }
}
diff --git a/src/main/java/com/gunshi/project/xyt/service/StRsvrRService.java b/src/main/java/com/gunshi/project/xyt/service/StRsvrRService.java
index b1d6a48..a6c5ab8 100644
--- a/src/main/java/com/gunshi/project/xyt/service/StRsvrRService.java
+++ b/src/main/java/com/gunshi/project/xyt/service/StRsvrRService.java
@@ -1,13 +1,15 @@
package com.gunshi.project.xyt.service;
+import java.util.List;
+
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.gunshi.project.xyt.mapper.StRsvrRMapper;
import com.gunshi.project.xyt.model.StRsvrR;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-import java.util.Date;
+import lombok.extern.slf4j.Slf4j;
/**
* 描述: 水库历史水位表
@@ -20,6 +22,9 @@ import java.util.Date;
public class StRsvrRService extends ServiceImpl
{
+ public List getStcdLastRsvrData() {
+ return baseMapper.getStcdLastRsvrData();
+ }
}
diff --git a/src/main/java/com/gunshi/project/xyt/timetask/DataTask.java b/src/main/java/com/gunshi/project/xyt/timetask/DataTask.java
new file mode 100644
index 0000000..1cc524d
--- /dev/null
+++ b/src/main/java/com/gunshi/project/xyt/timetask/DataTask.java
@@ -0,0 +1,477 @@
+package com.gunshi.project.xyt.timetask;
+
+import java.io.IOException;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.gunshi.project.xyt.entity.SkSyncData;
+import com.gunshi.project.xyt.entity.SkSyncResp;
+import com.gunshi.project.xyt.entity.SyncDataReq;
+import com.gunshi.project.xyt.model.StImgR;
+import com.gunshi.project.xyt.model.StImgRReal;
+import com.gunshi.project.xyt.model.StPptnR;
+import com.gunshi.project.xyt.model.StPptnRD;
+import com.gunshi.project.xyt.model.StPptnRReal;
+import com.gunshi.project.xyt.model.StRsvrR;
+import com.gunshi.project.xyt.model.StRsvrRReal;
+import com.gunshi.project.xyt.model.StStbprpB;
+import com.gunshi.project.xyt.service.StImgRRealService;
+import com.gunshi.project.xyt.service.StImgRService;
+import com.gunshi.project.xyt.service.StPptnRDService;
+import com.gunshi.project.xyt.service.StPptnRRealService;
+import com.gunshi.project.xyt.service.StPptnRService;
+import com.gunshi.project.xyt.service.StRsvrRRealService;
+import com.gunshi.project.xyt.service.StRsvrRService;
+import com.gunshi.project.xyt.service.StStbprpBService;
+import com.gunshi.project.xyt.util.OkHttpUtil;
+
+import lombok.extern.slf4j.Slf4j;
+import okhttp3.FormBody;
+import okhttp3.MediaType;
+import okhttp3.OkHttpClient;
+import okhttp3.Request;
+import okhttp3.RequestBody;
+import okhttp3.Response;
+import ru.olegcherednik.jackson_utils.JacksonUtils;
+
+/**
+ * @author cxw
+ * @description: 数据定时任务
+ * @classname DataTask.java
+ * @create 2024-07-11, 星期四, 14:19:22
+ */
+@EnableScheduling//开启定时任务
+@Component
+@Slf4j
+public class DataTask {
+ private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ private static SimpleDateFormat sdfD = new SimpleDateFormat("yyyy-MM-dd");
+ private static SimpleDateFormat sdfH = new SimpleDateFormat("yyyy-MM-dd HH");
+
+ @Value("${owrsvrPath}")
+ private String owrsvrPath;// 获取水雨情、图像接口 http://owrsvr.cloudowr.cn/
+
+ @Value("${apiPath}")
+ private String apiPath;// 获取雨情按天接口
+
+ public static String hbskpprealstsRoute = "pubapi/hbsk/pprealsts";// 站点实时雨情
+
+ public static String hbskpphisRoute = "pubapi/hbsk/pphis";// 站点历史雨情
+
+ public static String hbskzzrealstsRoute = "pubapi/hbsk/zzrealsts";// 站点实时水情
+
+ public static String hbskzzhisRoute = "pubapi/hbsk/zzhis";// 站点历史水情
+
+ public static String hbskpicrealstsRoute = "pubapi/hbsk/picrealsts";// 站点实时图像
+
+ public static String hbskpichisRoute = "pubapi/hbsk/pichis";// 站点历史图像
+
+
+ // 水库站点
+ @Autowired
+ private StStbprpBService stStbprpBService;
+
+ // 实时雨情
+ @Autowired
+ private StPptnRRealService stPptnRRealService;
+
+ // 历史雨情
+ @Autowired
+ private StPptnRService stPptnRService;
+
+ // 按天雨情
+ @Autowired
+ private StPptnRDService stPptnRDService;
+
+ // 实时水情
+ @Autowired
+ private StRsvrRRealService stRsvrRRealService;
+
+ // 历史水情
+ @Autowired
+ private StRsvrRService stRsvrRService;
+
+ // 实时图像
+ @Autowired
+ private StImgRRealService stImgRRealService;
+
+ // 历史图像
+ @Autowired
+ private StImgRService stImgRService;
+
+
+ /**
+ * @description: 定时获取水库雨情数据(实时)
+ * @param
+ * @return: void
+ * @auther: cxw
+ * @date: 2024-07-11, 周四, 14:21:35
+ */
+ @Async
+ @Scheduled(fixedRate = 5, timeUnit = TimeUnit.MINUTES)
+ public void getSkYqRealData() {
+ Date now = new Date();
+ System.out.println("雨情实时定时任务,执行时间:" + sdf.format(now));
+ // 获取水库站点编码
+ String sts = "[" + stStbprpBService.list(new QueryWrapper().eq("source", "SK")).stream().map(StStbprpB::getStcd).collect(Collectors.joining(",")) + "]";
+ OkHttpClient client = OkHttpUtil.build();
+ try {
+ Response resp = client.newCall(new Request.Builder().url(owrsvrPath + hbskpprealstsRoute)
+ .post(new FormBody.Builder().add("sts", sts).build())
+ .build()).execute();
+ String respStr = resp.body().string();
+ ObjectMapper om = new ObjectMapper();
+ Map map = om.readValue(respStr, Map.class);
+ List list = (List)map.get("data");
+ for (Map map1 : list) {
+ StPptnRReal stPptnRReal = new ObjectMapper().convertValue(map1, StPptnRReal.class);
+ if(ObjectUtils.isEmpty(stPptnRReal.getChtm())){
+ stPptnRReal.setChtm(new Date());
+ }
+ UpdateWrapper updateWrapper = new UpdateWrapper<>();
+ updateWrapper.eq("stcd", stPptnRReal.getStcd());
+ stPptnRRealService.saveOrUpdate(stPptnRReal, updateWrapper);
+ }
+ }
+ catch (IOException e)
+ {
+ log.error("雨情实时定时任务错误:", e.getMessage());
+ }
+ }
+
+ /**
+ * @description: 定时获取水库雨情数据(历史)
+ * @param
+ * @return: void
+ * @auther: cxw
+ * @date: 2024-07-11, 周四, 14:21:35
+ */
+ @Async
+ @Scheduled(fixedRate = 5, timeUnit = TimeUnit.MINUTES)
+ public void getSkYqHisData() {
+ Date now = new Date();
+ System.out.println("雨情历史定时任务,执行时间:" + sdf.format(now));
+ // 获取水库站点编码历史雨情表中站点最新数据时间
+ List stcdLast = stPptnRService.getStcdLastPptnData();
+ OkHttpClient client = OkHttpUtil.build();
+ try {
+ for(StPptnR stPptnR : stcdLast){
+ Date stm = stPptnR.getStm();
+ Calendar calendar = Calendar.getInstance();
+ // 默认40天前(接口最多40天),存在则加1秒(接口是大于等于开始时间)
+ if(ObjectUtils.isEmpty(stm)){
+ calendar.add(Calendar.DATE, -40);
+ } else {
+ calendar.add(Calendar.SECOND, 1);
+ }
+ stm = calendar.getTime();
+ Response resp = client.newCall(new Request.Builder().url(owrsvrPath + hbskpphisRoute)
+ .post(new FormBody.Builder().add("stcd", stPptnR.getStcd())
+ .add("stm", sdfH.format(stm))
+ .add("etm", sdfH.format(now))
+ .build())
+ .build()).execute();
+ String respStr = resp.body().string();
+ ObjectMapper om = new ObjectMapper();
+ Map map = om.readValue(respStr, Map.class);
+ if("400".equals(map.get("code").toString())){
+ continue;
+ }
+ List list = (List)map.get("data");
+ if(CollectionUtils.isNotEmpty(list)){
+ List rlist = JSONObject.parseArray(JSONObject.toJSONString(list)).toJavaList(StPptnR.class);
+ stPptnRService.saveBatch(rlist);
+ }
+ }
+ }
+ catch (IOException e)
+ {
+ log.error("雨情历史定时任务错误:", e.getMessage());
+ }
+ }
+
+ /**
+ * @description: 定时获取水库雨情数据(按天)
+ * @param
+ * @return: void
+ * @auther: cxw
+ * @date: 2024-07-11, 周四, 14:21:35
+ */
+ @Async
+ @Scheduled(fixedRate = 5, timeUnit = TimeUnit.MINUTES)
+ public void getSkYqDayData() {
+ Date now = new Date();
+ System.out.println("雨情按天定时任务,执行时间:" + sdf.format(now));
+ // 获取水库站点编码按天雨情表中站点最新数据时间
+ List stcdLast = stPptnRDService.getStcdLastPptnDayData();
+ OkHttpClient client = OkHttpUtil.build();
+ try {
+ for(StPptnRD stPptnRD : stcdLast){
+ String stcd = stPptnRD.getStcd();
+ Date stm = stPptnRD.getStm();
+ Calendar calendar = Calendar.getInstance();
+ // 默认两周前的时间(接口只提供addvcd的条件,数据量较大),如果存在,需要加一天(接口是大于等于开始时间)
+ if(ObjectUtils.isEmpty(stm)){
+ calendar.add(Calendar.DATE, -14);
+ } else {
+ calendar.add(Calendar.DATE, 1);
+ }
+ stm = calendar.getTime();
+ MediaType mediaType = MediaType.parse("application/json");
+ SyncDataReq syncDataReq = new SyncDataReq();
+ syncDataReq.setAdcd(stPptnRD.getAddvcd());
+ syncDataReq.setType("SK");
+ syncDataReq.setStartDate(sdfD.format(stm));
+ syncDataReq.setEndDate(sdfD.format(now));
+ RequestBody body = RequestBody.create(JacksonUtils.writeValue(syncDataReq), mediaType);
+ Response resp = client.newCall(new Request.Builder().url(apiPath)
+ .post(body)
+ .build()).execute();
+ String respStr = resp.body().string();
+ ObjectMapper objectMapper = new ObjectMapper();
+ objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+ SkSyncResp resq = objectMapper.readValue(respStr, SkSyncResp.class);
+ SkSyncData data = resq.getData();
+ List stPptnRDList = data.getStPptnRD();
+ if(CollectionUtils.isNotEmpty(stPptnRDList)) {
+ Iterator iterator = stPptnRDList.iterator();
+ while (iterator.hasNext()) {
+ StPptnRD stPptnRD1 = iterator.next();
+ if (!stcd.equals(stPptnRD1.getStcd())) {
+ iterator.remove();
+ continue;
+ }
+ stPptnRD1.setYear(Integer.valueOf(sdfD.format(stPptnRD1.getTm()).substring(0, 4)));
+ }
+ stPptnRDService.saveBatch(stPptnRDList);
+ }
+ }
+ }
+ catch (IOException e)
+ {
+ log.error("雨情按天定时任务错误:", e.getMessage());
+ }
+ }
+
+
+ /**
+ * @description: 定时获取水库水情数据(实时)
+ * @param
+ * @return: void
+ * @auther: cxw
+ * @date: 2024-07-11, 周四, 14:21:35
+ */
+ @Async
+ @Scheduled(fixedRate = 5, timeUnit = TimeUnit.MINUTES)
+ public void getSkSqRealData() {
+ Date now = new Date();
+ System.out.println("水情实时定时任务,执行时间:" + sdf.format(now));
+ // 获取水库站点编码
+ String sts = "[" + stStbprpBService.list(new QueryWrapper().eq("source", "SK")).stream().map(StStbprpB::getStcd).collect(Collectors.joining(",")) + "]";
+ OkHttpClient client = OkHttpUtil.build();
+ try {
+ Response resp = client.newCall(new Request.Builder().url(owrsvrPath + hbskzzrealstsRoute)
+ .post(new FormBody.Builder().add("sts", sts).build())
+ .build()).execute();
+ String respStr = resp.body().string();
+ ObjectMapper om = new ObjectMapper();
+ Map map = om.readValue(respStr, Map.class);
+ List list = (List)map.get("data");
+ for (Map map1 : list) {
+ StRsvrRReal stRsvrRReal = new ObjectMapper().convertValue(map1, StRsvrRReal.class);
+ if(ObjectUtils.isEmpty(stRsvrRReal.getChtm())){
+ stRsvrRReal.setChtm(new Date());
+ }
+ UpdateWrapper updateWrapper = new UpdateWrapper<>();
+ updateWrapper.eq("stcd", stRsvrRReal.getStcd());
+ stRsvrRRealService.saveOrUpdate(stRsvrRReal, updateWrapper);
+ }
+ }
+ catch (IOException e)
+ {
+ log.error("水情实时定时任务错误:", e.getMessage());
+ }
+ }
+
+ /**
+ * @description: 定时获取水库水情数据(历史)
+ * @param
+ * @return: void
+ * @auther: cxw
+ * @date: 2024-07-11, 周四, 14:21:35
+ */
+ @Async
+ @Scheduled(fixedRate = 5, timeUnit = TimeUnit.MINUTES)
+ public void getSkSqHisData() {
+ Date now = new Date();
+ System.out.println("水情历史定时任务,执行时间:" + sdf.format(now));
+ // 获取水库站点编码历史水情表中站点最新数据时间
+ List stcdLast = stRsvrRService.getStcdLastRsvrData();
+ OkHttpClient client = OkHttpUtil.build();
+ try {
+ for(StRsvrR stRsvrR : stcdLast){
+ Date stm = stRsvrR.getStm();
+ Calendar calendar = Calendar.getInstance();
+ // 默认40天前(接口最多40天),存在则加1秒(接口是大于等于开始时间)
+ if(ObjectUtils.isEmpty(stm)){
+ calendar.add(Calendar.DATE, -40);
+ } else {
+ calendar.add(Calendar.SECOND, 1);
+ }
+ stm = calendar.getTime();
+ Response resp = client.newCall(new Request.Builder().url(owrsvrPath + hbskzzhisRoute)
+ .post(new FormBody.Builder().add("stcd", stRsvrR.getStcd())
+ .add("stm", sdfH.format(stm))
+ .add("etm", sdfH.format(now))
+ .build())
+ .build()).execute();
+ String respStr = resp.body().string();
+ ObjectMapper om = new ObjectMapper();
+ Map map = om.readValue(respStr, Map.class);
+ if("400".equals(map.get("code").toString())){
+ continue;
+ }
+ List list = (List)map.get("data");
+ if(CollectionUtils.isNotEmpty(list)){
+ List rlist = JSONObject.parseArray(JSONObject.toJSONString(list)).toJavaList(StRsvrR.class);
+ stRsvrRService.saveBatch(rlist);
+ }
+ }
+ }
+ catch (IOException e)
+ {
+ log.error("水情历史定时任务错误:", e.getMessage());
+ }
+ }
+
+ /**
+ * @description: 定时获取水库图像数据(实时)
+ * @param
+ * @return: void
+ * @auther: cxw
+ * @date: 2024-07-22, 周一, 13:54:08
+ */
+ @Async
+ @Scheduled(fixedRate = 5, timeUnit = TimeUnit.MINUTES)
+ public void getSkImgRealData() {
+ Date now = new Date();
+ System.out.println("图像实时图像定时任务,执行时间:" + sdf.format(now));
+ // 获取水库站点编码
+ String sts = "[" + stStbprpBService.list(new QueryWrapper().eq("source", "SK")).stream().map(StStbprpB::getStcd).collect(Collectors.joining(",")) + "]";
+ OkHttpClient client = OkHttpUtil.build();
+ try {
+ Response resp = client.newCall(new Request.Builder().url(owrsvrPath + hbskpicrealstsRoute)
+ .post(new FormBody.Builder().add("sts", sts).build())
+ .build()).execute();
+ String respStr = resp.body().string();
+ ObjectMapper om = new ObjectMapper();
+ Map map = om.readValue(respStr, Map.class);
+ List list = (List)map.get("data");
+ for (Map map1 : list) {
+ StImgRReal stImgRReal = new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false).setDateFormat(sdf).convertValue(map1, StImgRReal.class);
+ if(ObjectUtils.isEmpty(stImgRReal.getChtm())){
+ stImgRReal.setChtm(new Date());
+ }
+ if(ObjectUtils.isEmpty(stImgRReal.getChid())){
+ stImgRReal.setChid(map1.get("machineid").toString());
+ }
+ if(ObjectUtils.isEmpty(stImgRReal.getImgPath())){
+ stImgRReal.setImgPath(map1.get("url").toString());
+ }
+ UpdateWrapper updateWrapper = new UpdateWrapper<>();
+ updateWrapper.eq("stcd", stImgRReal.getStcd()).eq("chid", stImgRReal.getChid());
+ stImgRRealService.saveOrUpdate(stImgRReal, updateWrapper);
+ }
+ }
+ catch (IOException e)
+ {
+ log.error("图像实时定时任务错误:", e.getMessage());
+ }
+ }
+
+ /**
+ * @description: 定时获取水库图像数据(历史)
+ * @param
+ * @return: void
+ * @auther: cxw
+ * @date: 2024-07-22, 周一, 13:55:45
+ */
+ @Async
+ @Scheduled(fixedRate = 5, timeUnit = TimeUnit.MINUTES)
+ public void getSkImgHisData() {
+ Date now = new Date();
+ System.out.println("图像历史定时任务,执行时间:" + sdf.format(now));
+ // 获取水库站点编码历史图像表中站点最新数据时间
+ List stcdLast = stImgRService.getStcdLastImgData();
+ OkHttpClient client = OkHttpUtil.build();
+ try {
+ for (StImgR stImgR : stcdLast) {
+ Date stm = stImgR.getStm();
+ Calendar calendar = Calendar.getInstance();
+ // 默认40天前(接口最多40天),存在则加1秒(接口是大于等于开始时间)
+ if(ObjectUtils.isEmpty(stm)){
+ calendar.add(Calendar.DATE, -40);
+ } else {
+ calendar.add(Calendar.SECOND, 1);
+ }
+ stm = calendar.getTime();
+ Response resp = client.newCall(new Request.Builder().url(owrsvrPath + hbskpichisRoute)
+ .post(new FormBody.Builder().add("stcd", stImgR.getStcd())
+ .add("stm", sdfH.format(stm))
+ .add("etm", sdfH.format(now))
+ .build())
+ .build()).execute();
+ String respStr = resp.body().string();
+ ObjectMapper om = new ObjectMapper();
+ Map map = om.readValue(respStr, Map.class);
+ if ("400".equals(map.get("code").toString())) {
+ continue;
+ }
+ List list = (List)map.get("data");
+ if (CollectionUtils.isNotEmpty(list)) {
+ List rlist = list.stream().map(map1 -> {
+ StImgR stImgRNew = new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false).setDateFormat(sdf).convertValue(map1, StImgR.class);
+ // 手动设置对应属性
+ if(ObjectUtils.isEmpty(stImgRNew.getChtm())){
+ stImgRNew.setChtm(new Date());
+ }
+ if(ObjectUtils.isEmpty(stImgRNew.getChid())){
+ stImgRNew.setChid(map1.get("machineid").toString());
+ }
+ if(ObjectUtils.isEmpty(stImgRNew.getImgPath())){
+ stImgRNew.setImgPath(map1.get("url").toString());
+ }
+ return stImgRNew;
+ }).collect(Collectors.toList());
+ stImgRService.saveBatch(rlist);
+ }
+ }
+ }
+ catch (IOException e)
+ {
+ log.error("图像历史定时任务错误:", e.getMessage());
+ }
+ }
+
+}
diff --git a/src/main/java/com/gunshi/project/xyt/timetask/ScheduledPool.java b/src/main/java/com/gunshi/project/xyt/timetask/ScheduledPool.java
new file mode 100644
index 0000000..c4cd81b
--- /dev/null
+++ b/src/main/java/com/gunshi/project/xyt/timetask/ScheduledPool.java
@@ -0,0 +1,23 @@
+package com.gunshi.project.xyt.timetask;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.TaskScheduler;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
+
+/**
+ * @author cxw
+ * @description: 定时任务池
+ * @classname ScheduledPool.java
+ * @create 2024-07-22, 星期一, 10:43:54
+ */
+@Configuration
+public class ScheduledPool {
+ @Bean
+ public TaskScheduler taskScheduler() {
+ ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
+ // 设置定时任务线程数量
+ taskScheduler.setPoolSize(20);
+ return taskScheduler;
+ }
+}
diff --git a/src/main/java/com/gunshi/project/xyt/util/OkHttpUtil.java b/src/main/java/com/gunshi/project/xyt/util/OkHttpUtil.java
new file mode 100644
index 0000000..8c71ebd
--- /dev/null
+++ b/src/main/java/com/gunshi/project/xyt/util/OkHttpUtil.java
@@ -0,0 +1,30 @@
+package com.gunshi.project.xyt.util;
+
+import com.google.common.base.Suppliers;
+import okhttp3.OkHttpClient;
+
+import java.util.concurrent.TimeUnit;
+import java.util.function.Supplier;
+
+public class OkHttpUtil {
+ private OkHttpUtil(){
+
+ }
+ private static final Supplier OK_HTTP_CLIENT_FACTORY = Suppliers.memoize(OkHttpClient::new);
+
+ public static OkHttpClient build(){
+ return OK_HTTP_CLIENT_FACTORY.get().newBuilder().retryOnConnectionFailure(true)
+ .connectTimeout(10, TimeUnit.SECONDS)
+ .callTimeout(240, TimeUnit.SECONDS)
+ .readTimeout(240, TimeUnit.SECONDS)
+ .build();
+ }
+
+ public static OkHttpClient build(int timeout, int callTimeout){
+ return OK_HTTP_CLIENT_FACTORY.get().newBuilder().retryOnConnectionFailure(true)
+ .connectTimeout(timeout, TimeUnit.SECONDS)
+ .callTimeout(callTimeout, TimeUnit.SECONDS)
+ .readTimeout(callTimeout, TimeUnit.SECONDS)
+ .build();
+ }
+}
diff --git a/src/main/resources/config-common.yml b/src/main/resources/config-common.yml
index 2d4653a..1ffae0f 100644
--- a/src/main/resources/config-common.yml
+++ b/src/main/resources/config-common.yml
@@ -27,4 +27,9 @@ gunshi:
privateBucket: test.by-lyf.tmp
shqxjsCloudowrCnPath: http://shqxjs.cloudowr.cn/service/
+
+owrsvrPath: http://owrsvr.cloudowr.cn/
+
+apiPath: http://223.75.53.141:8000/shzh/monitdata/datasync/getData
+
shqxjsWarnPath: http://223.75.53.141:8000/shzh/met/zyqxfw/api/warning/getGroupWarning
diff --git a/src/main/resources/mapper/StImgRMapper.xml b/src/main/resources/mapper/StImgRMapper.xml
index 529c1ba..539f1d3 100644
--- a/src/main/resources/mapper/StImgRMapper.xml
+++ b/src/main/resources/mapper/StImgRMapper.xml
@@ -2,4 +2,13 @@
+
diff --git a/src/main/resources/mapper/StPptnRDMapper.xml b/src/main/resources/mapper/StPptnRDMapper.xml
index 440fbb3..9762d32 100644
--- a/src/main/resources/mapper/StPptnRDMapper.xml
+++ b/src/main/resources/mapper/StPptnRDMapper.xml
@@ -2,4 +2,14 @@
+
diff --git a/src/main/resources/mapper/StPptnRMapper.xml b/src/main/resources/mapper/StPptnRMapper.xml
index 94f1934..74e0e50 100644
--- a/src/main/resources/mapper/StPptnRMapper.xml
+++ b/src/main/resources/mapper/StPptnRMapper.xml
@@ -2,4 +2,13 @@
+
diff --git a/src/main/resources/mapper/StRsvrRMapper.xml b/src/main/resources/mapper/StRsvrRMapper.xml
index 24b36d1..effefe5 100644
--- a/src/main/resources/mapper/StRsvrRMapper.xml
+++ b/src/main/resources/mapper/StRsvrRMapper.xml
@@ -2,4 +2,13 @@
+