From 659d3e60c6fe5e5bcd8c4cbb3dd8077e29f13a38 Mon Sep 17 00:00:00 2001
From: ke <893754509@qq.com>
Date: Mon, 13 May 2024 18:54:27 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/jtdev' into jtdev

---
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/controller/HkController.java                                 |    5 
 skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sjztmd/feign/ISjztMdClient.java                         |   19 
 skjcmanager/skjcmanager-service-api/skjcmanager-alerts-api/src/main/java/cn/gistack/alerts/alarmRule/vo/AlarmRecordVO.java                 |    3 
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/resources/word/doc/overFloodTemplate.docx                                          |    0 
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/mapper/HkEventMapper.java                                    |   20 
 skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/service/impl/RequestRecordServiceImpl.java                    |   11 
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/dayReportFlood/mapper/DayReportFloodMapper.xml                  |   21 
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/util/WordUtil.java                                  |    3 
 skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/dayReportFlood/entity/DayReportFlood.java               |   40 
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/controller/AttWmstBaseController.java                    |   43 
 skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/resultpojo/NkyBindDetailResult.java                   |   21 
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/controller/DownTemplateController.java              |    9 
 skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/resultpojo/DataResChildrenPo.java                     |    1 
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/controller/HkEventController.java                            |   90 +
 skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/resultpojo/ResDamMonitorResult.java                   |   24 
 skjcmanager/skjcmanager-auth/src/main/java/cn/gistack/auth/service/BladeUserDetailsServiceImpl.java                                        |   36 
 skjcmanager/skjcmanager-service/skjcmanager-xxljob/src/main/java/cn/gistack/job/executor/jobhandler/AlarmDayXxlJob.java                    |  121 ++
 skjcmanager/skjcmanager-service/skjcmanager-xxljob/src/main/java/cn/gistack/job/executor/jobhandler/UserXxlJob.java                        |    4 
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/vo/EventVO.java                                              |    2 
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/vo/OverWord.java                                    |    2 
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/service/impl/HkEventServiceImpl.java                         |   29 
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/AttResBaseMapper.xml                              |    5 
 skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/fegin/INkyClientFallback.java                         |    5 
 skjcmanager/skjcmanager-ops/skjcmanager-resource/src/main/java/cn/gistack/resource/mapper/TextualResearchAttachMapper.xml                  |    1 
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/util/MyDateUtils.java                                    |    4 
 skjcmanager/skjcmanager-common/src/main/java/cn/gistack/common/constant/LauncherConstant.java                                              |    4 
 skjcmanager/skjcmanager-service/skjcmanager-xxljob/src/main/java/cn/gistack/job/executor/jobhandler/SendSmsXxlJob.java                     |   11 
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/dayReportFlood/service/impl/DayReportFloodServiceImpl.java      |   17 
 skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sjztmd/feign/ISjztMdClientFallback.java                 |   23 
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/vo/AttWmstBaseVO.java                                    |   14 
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/dayReportFlood/controller/DayReportFloodController.java         |   77 +
 skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/resultpojo/ZtResultPo2.java                           |   22 
 skjcmanager/skjcmanager-auth/src/main/java/cn/gistack/auth/granter/AccountPhoneTokenGranter.java                                           |   74 +
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/constant/HkConstant.java                                     |   22 
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/AttWmstBaseMapper.xml                             |   33 
 skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/service/IZtApiService.java                                    |    8 
 skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/service/impl/NkyServiceImpl.java                              |   92 +
 skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/service/INkyService.java                                      |   10 
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/feign/SjztMdClientImpl.java                              |   96 ++
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/AttWmstBaseMapper.java                            |   18 
 skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/mapper/RequestRecordMapper.java                               |   15 
 skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/resultpojo/ZtResult.java                              |   16 
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/constant/HkEventConstant.java                                |   70 +
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/entity/HkEvent.java                                          |  124 ++
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/vo/HkEventVO.java                                            |   59 +
 skjcmanager/skjcmanager-ops-api/skjcmanager-resource-api/src/main/java/cn/gistack/resource/feign/IOssClientFallback.java                   |   30 
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/service/AsyncHkEventService.java                             |   82 +
 skjcmanager/skjcmanager-service/skjcmanager-xxljob/pom.xml                                                                                 |    5 
 skjcmanager/skjcmanager-auth/src/main/java/cn/gistack/auth/granter/BladeTokenGranter.java                                                  |    3 
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/mapper/HkEventMapper.xml                                     |   52 +
 skjcmanager/skjcmanager-ops/skjcmanager-resource/src/main/java/cn/gistack/resource/feign/OssClient.java                                    |   15 
 skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/dayReportFlood/feign/IDayReportFloodClient.java         |   20 
 skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/NoticeStrategyImpl.java             |    2 
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/service/IAttWmstBaseService.java                         |   11 
 skjcmanager/skjcmanager-ops-api/skjcmanager-resource-api/src/main/java/cn/gistack/resource/vo/MyMultipartFile.java                         |   65 +
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/feign/DataAbnormalWarnClient.java                           |  148 +++
 skjcmanager/skjcmanager-ops/skjcmanager-resource/src/main/java/cn/gistack/resource/builder/oss/OssBuilder.java                             |    6 
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/util/BriefReportUtil.java                           |   78 +
 skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/entity/RequestRecord.java                             |   40 
 skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sms/feign/DataAbnormalWarnClientFallback.java           |    4 
 skjcmanager/skjcmanager-service/skjcmanager-xxljob/src/main/java/cn/gistack/job/executor/jobhandler/DayReportFloodJob.java                 |   85 +
 skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sms/feign/IDataAbnormalWarnClient.java                  |    4 
 skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/service/impl/AlarmGetServiceImpl.java                         |    2 
 skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/dayReportFlood/feign/IDayReportFloodClientFallback.java |   24 
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/entity/TbAttResPowerStation.java                         |    4 
 skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/service/IRequestRecordService.java                            |    7 
 skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/requestpojo/BDDataPo.java                             |    2 
 skjcmanager/skjcmanager-ops/skjcmanager-resource/src/main/resources/application.yml                                                        |    4 
 skjcmanager/skjcmanager-service/skjcmanager-xxljob/src/main/java/cn/gistack/job/executor/jobhandler/NkyXxlJob.java                         |   31 
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/AttResManagePersonMapper.xml                      |    2 
 skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/NoticeHandle.java                   |  101 ++
 skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/service/impl/ZtApiServiceImpl.java                            |  122 ++
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/TbProjectMapper.xml                               |    2 
 skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/dayReportFlood/vo/DayReportFloodVO.java                 |   14 
 skjcmanager/skjcmanager-ops-api/skjcmanager-resource-api/src/main/java/cn/gistack/resource/feign/IOssClient.java                           |   15 
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/dayReportFlood/feign/DayReportFloodClientImpl.java              |   36 
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/service/HkEventService.java                                  |   23 
 skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/alarmRule/mapper/AlarmRecordMapper.xml                  |   25 
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/dayReportFlood/mapper/DayReportFloodMapper.java                 |   13 
 skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/fegin/INkyClient.java                                 |    5 
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/entity/AttWmstBase.java                                  |   93 ++
 skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/resultpojo/BaseCd.java                                |   12 
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/service/impl/AttWmstBaseServiceImpl.java                 |   22 
 skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/feign/NkyClientImpl.java                                      |   93 +
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/dayReportFlood/service/IDayReportFloodService.java              |   17 
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/util/GetCameraUtils.java                                     |   24 
 86 files changed, 2,563 insertions(+), 104 deletions(-)

diff --git a/skjcmanager/skjcmanager-auth/src/main/java/cn/gistack/auth/granter/AccountPhoneTokenGranter.java b/skjcmanager/skjcmanager-auth/src/main/java/cn/gistack/auth/granter/AccountPhoneTokenGranter.java
new file mode 100644
index 0000000..4571346
--- /dev/null
+++ b/skjcmanager/skjcmanager-auth/src/main/java/cn/gistack/auth/granter/AccountPhoneTokenGranter.java
@@ -0,0 +1,74 @@
+package cn.gistack.auth.granter;
+
+import cn.gistack.auth.utils.TokenUtil;
+import cn.gistack.common.cache.CacheNames;
+import org.springblade.core.redis.cache.BladeRedis;
+import org.springblade.core.tool.utils.StringUtil;
+import org.springframework.security.authentication.*;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.oauth2.common.exceptions.InvalidGrantException;
+import org.springframework.security.oauth2.common.exceptions.UserDeniedAuthorizationException;
+import org.springframework.security.oauth2.provider.*;
+import org.springframework.security.oauth2.provider.token.AbstractTokenGranter;
+import org.springframework.security.oauth2.provider.token.AuthorizationServerTokenServices;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+/**
+ * 验证码TokenGranter
+ *
+ * @author Chill
+ */
+public class AccountPhoneTokenGranter extends AbstractTokenGranter {
+
+	private static final String GRANT_TYPE = "accountPhone";
+
+	private final AuthenticationManager authenticationManager;
+
+	private BladeRedis bladeRedis;
+
+	public AccountPhoneTokenGranter(AuthenticationManager authenticationManager,
+                                    AuthorizationServerTokenServices tokenServices, ClientDetailsService clientDetailsService, OAuth2RequestFactory requestFactory, BladeRedis bladeRedis) {
+		this(authenticationManager, tokenServices, clientDetailsService, requestFactory, GRANT_TYPE);
+		this.bladeRedis = bladeRedis;
+	}
+
+	protected AccountPhoneTokenGranter(AuthenticationManager authenticationManager, AuthorizationServerTokenServices tokenServices,
+                                       ClientDetailsService clientDetailsService, OAuth2RequestFactory requestFactory, String grantType) {
+		super(tokenServices, clientDetailsService, requestFactory, grantType);
+		this.authenticationManager = authenticationManager;
+	}
+
+	@Override
+	protected OAuth2Authentication getOAuth2Authentication(ClientDetails client, TokenRequest tokenRequest) {
+		Map<String, String> parameters = new LinkedHashMap<String, String>(tokenRequest.getRequestParameters());
+		String phone = parameters.get("username");
+		String password = parameters.get("password");
+		String code = parameters.get("code");
+		// 获取验证码
+		String redisCode = bladeRedis.get(CacheNames.PHONE_KEY + phone);
+		// 判断验证码
+		if (code == null || !StringUtil.equalsIgnoreCase(redisCode, code)) {
+			throw new UserDeniedAuthorizationException(TokenUtil.CAPTCHA_NOT_CORRECT);
+		}
+		// 通过手机号查询用户
+		Authentication userAuth = new UsernamePasswordAuthenticationToken(phone, "CUSTOM_LOGIN_SMS");
+		((AbstractAuthenticationToken) userAuth).setDetails(parameters);
+		try {
+			userAuth = authenticationManager.authenticate(userAuth);
+		}
+		catch (AccountStatusException | BadCredentialsException ase) {
+			//covers expired, locked, disabled cases (mentioned in section 5.2, draft 31)
+			throw new InvalidGrantException(ase.getMessage());
+		}
+		// If the username/password are wrong the spec says we should send 400/invalid grant
+
+		if (userAuth == null || !userAuth.isAuthenticated()) {
+			throw new InvalidGrantException("Could not authenticate user: " + phone);
+		}
+
+		OAuth2Request storedOAuth2Request = getRequestFactory().createOAuth2Request(client, tokenRequest);
+		return new OAuth2Authentication(storedOAuth2Request, userAuth);
+	}
+}
diff --git a/skjcmanager/skjcmanager-auth/src/main/java/cn/gistack/auth/granter/BladeTokenGranter.java b/skjcmanager/skjcmanager-auth/src/main/java/cn/gistack/auth/granter/BladeTokenGranter.java
index a56bce6..6680894 100644
--- a/skjcmanager/skjcmanager-auth/src/main/java/cn/gistack/auth/granter/BladeTokenGranter.java
+++ b/skjcmanager/skjcmanager-auth/src/main/java/cn/gistack/auth/granter/BladeTokenGranter.java
@@ -51,7 +51,8 @@
 		granters.add(new SocialTokenGranter(endpoints.getTokenServices(), endpoints.getClientDetailsService(), endpoints.getOAuth2RequestFactory(), userClient, socialProperties));
 		//单点登录授权模式
 		granters.add(new OAuthTokenGranter(authenticationManager, endpoints.getTokenServices(), endpoints.getClientDetailsService(), endpoints.getOAuth2RequestFactory(), bladeRedis));
-
+		//账户验证码模式
+		granters.add(new AccountPhoneTokenGranter(authenticationManager, endpoints.getTokenServices(), endpoints.getClientDetailsService(), endpoints.getOAuth2RequestFactory(), bladeRedis ));
 		// 组合tokenGranter集合
 		return new CompositeTokenGranter(granters);
 	}
diff --git a/skjcmanager/skjcmanager-auth/src/main/java/cn/gistack/auth/service/BladeUserDetailsServiceImpl.java b/skjcmanager/skjcmanager-auth/src/main/java/cn/gistack/auth/service/BladeUserDetailsServiceImpl.java
index 145f6b0..093e705 100644
--- a/skjcmanager/skjcmanager-auth/src/main/java/cn/gistack/auth/service/BladeUserDetailsServiceImpl.java
+++ b/skjcmanager/skjcmanager-auth/src/main/java/cn/gistack/auth/service/BladeUserDetailsServiceImpl.java
@@ -20,7 +20,7 @@
 import cn.gistack.common.utils.Base64Utils;
 import cn.gistack.pwd.dto.CBCResultDTO;
 import cn.gistack.pwd.dto.ResultDTO;
-//import cn.gistack.pwd.fegin.IPwdClient;
+import cn.gistack.pwd.fegin.IPwdClient;
 import cn.gistack.sm.collect.feign.ICollectClient;
 import cn.gistack.sm.collect.feign.ICollectClientFallback;
 import cn.gistack.sm.sjztmd.entity.AttResManagePerson;
@@ -78,7 +78,7 @@
 
 	private final ICollectClient collectClient;
 
-//	private final IPwdClient pwdClient;
+	private final IPwdClient pwdClient;
 
 	@Override
 	@SneakyThrows
@@ -205,24 +205,24 @@
 
 			User loginUserInfo = userInfo.getUser();
 
-			//获取解密后的Base64字符串
-//			R<ResultDTO> encryptRes = pwdClient.getDecrypt(loginUserInfo.getSm4iv(), loginUserInfo.getKeyindexs(),loginUserInfo.getEncdata());
-//
-//			if (encryptRes.getCode() != 200){
-//				throw new UserDeniedAuthorizationException("获取密钥失败");
-//			}
+//			获取解密后的Base64字符串
+			R<ResultDTO> encryptRes = pwdClient.getDecrypt(loginUserInfo.getSm4iv(), loginUserInfo.getKeyindexs(),loginUserInfo.getEncdata());
+
+			if (encryptRes.getCode() != 200){
+				throw new UserDeniedAuthorizationException("获取密钥失败");
+			}
 
 			//解码Base64
-//			String JSONstr = Base64Utils.getBase64Decode(encryptRes.getData().getData());
-//
-//			pwdClient.verify(loginUserInfo.getMaced(),loginUserInfo.getSm4iv(),loginUserInfo.getKeyindexs(),JSONstr,loginUserInfo.getId().toString(),"blade_user");
-//
-//			UserSUPO userSUPO = JSONObject.parseObject(JSONstr, UserSUPO.class);
-//
-//			//若登录用户的电话、角色、部门与原加密数据不符,登录失败
-//			if (!(loginUserInfo.getPhone().equals(userSUPO.getPhone())  && loginUserInfo.getRoleId().equals(userSUPO.getRoleId())  && loginUserInfo.getDeptId().equals(userSUPO.getDeptId())) ){
-//				throw new UserDeniedAuthorizationException("用户信息异常,请联系管理员");
-//			}
+			String JSONstr = Base64Utils.getBase64Decode(encryptRes.getData().getData());
+
+			pwdClient.verify(loginUserInfo.getMaced(),loginUserInfo.getSm4iv(),loginUserInfo.getKeyindexs(),JSONstr,loginUserInfo.getId().toString(),"blade_user");
+
+			UserSUPO userSUPO = JSONObject.parseObject(JSONstr, UserSUPO.class);
+
+			//若登录用户的电话、角色、部门与原加密数据不符,登录失败
+			if (!(loginUserInfo.getPhone().equals(userSUPO.getPhone())  && loginUserInfo.getRoleId().equals(userSUPO.getRoleId())  && loginUserInfo.getDeptId().equals(userSUPO.getDeptId())) ){
+				throw new UserDeniedAuthorizationException("用户信息异常,请联系管理员");
+			}
 
 			return new BladeUserDetails(user.getId(),
 				user.getTenantId(), StringPool.EMPTY, user.getName(), user.getRealName(), user.getDeptId(), user.getPostId(), user.getRoleId(), Func.join(userInfo.getRoles()), Func.toStr(user.getAvatar(), TokenUtil.DEFAULT_AVATAR),
diff --git a/skjcmanager/skjcmanager-common/src/main/java/cn/gistack/common/constant/LauncherConstant.java b/skjcmanager/skjcmanager-common/src/main/java/cn/gistack/common/constant/LauncherConstant.java
index 154fbff..32e1499 100644
--- a/skjcmanager/skjcmanager-common/src/main/java/cn/gistack/common/constant/LauncherConstant.java
+++ b/skjcmanager/skjcmanager-common/src/main/java/cn/gistack/common/constant/LauncherConstant.java
@@ -40,7 +40,7 @@
 	/**
 	 * nacos dev 地址
 	 */
-	String NACOS_DEV_ADDR = "127.0.0.1:8848";
+	String NACOS_DEV_ADDR = "127.0.0.1:8849";
 
 	/**
 	 * nacos prod 地址
@@ -50,7 +50,7 @@
 
 	String NACOS_USERNAME = "nacos";
 
-	String NACOS_PASSWORD = "nacos";
+	String NACOS_PASSWORD = "1qaz!QAZ";
 
 	/**
 	 * nacos test 地址
diff --git a/skjcmanager/skjcmanager-ops-api/skjcmanager-resource-api/src/main/java/cn/gistack/resource/feign/IOssClient.java b/skjcmanager/skjcmanager-ops-api/skjcmanager-resource-api/src/main/java/cn/gistack/resource/feign/IOssClient.java
index e80c191..27babd7 100644
--- a/skjcmanager/skjcmanager-ops-api/skjcmanager-resource-api/src/main/java/cn/gistack/resource/feign/IOssClient.java
+++ b/skjcmanager/skjcmanager-ops-api/skjcmanager-resource-api/src/main/java/cn/gistack/resource/feign/IOssClient.java
@@ -18,6 +18,16 @@
  *
  * @author kelu
  */
+import feign.Body;
+import feign.Headers;
+import org.springblade.core.launch.constant.AppConstant;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.InputStream;
+
 @FeignClient(
 	value = AppConstant.APPLICATION_RESOURCE_NAME,
 	fallback = IOssClientFallback.class
@@ -35,4 +45,9 @@
 //		,@RequestParam("resGuid")String resGuid
 //		) throws IOException;
 
+
+	String UPLOAD_FILE = API_PREFIX + "uploadFile";
+
+	@PostMapping(value = UPLOAD_FILE,consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
+	String uploadFile(@RequestParam("fileName") String fileName, @RequestPart("file") MultipartFile file) throws Exception;
 }
diff --git a/skjcmanager/skjcmanager-ops-api/skjcmanager-resource-api/src/main/java/cn/gistack/resource/feign/IOssClientFallback.java b/skjcmanager/skjcmanager-ops-api/skjcmanager-resource-api/src/main/java/cn/gistack/resource/feign/IOssClientFallback.java
index 207e0bd..c9abe08 100644
--- a/skjcmanager/skjcmanager-ops-api/skjcmanager-resource-api/src/main/java/cn/gistack/resource/feign/IOssClientFallback.java
+++ b/skjcmanager/skjcmanager-ops-api/skjcmanager-resource-api/src/main/java/cn/gistack/resource/feign/IOssClientFallback.java
@@ -7,6 +7,29 @@
 import java.io.IOException;
 import java.util.HashMap;
 import java.util.List;
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package cn.gistack.resource.feign;
+
+import org.springblade.core.tool.api.R;
+import org.springframework.stereotype.Component;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.InputStream;
 
 /**
  * 流程远程调用失败处理类
@@ -21,9 +44,10 @@
 	}
 
 
-//	public R uploadQietu(HashMap<String,String> qietuHashMap,String resGuid) {
-//		return R.fail("远程调用失败");
-//	}
 
 
+	@Override
+	public String uploadFile(String fileName,  MultipartFile multipartFile) {
+		return null;
+	}
 }
diff --git a/skjcmanager/skjcmanager-ops-api/skjcmanager-resource-api/src/main/java/cn/gistack/resource/vo/MyMultipartFile.java b/skjcmanager/skjcmanager-ops-api/skjcmanager-resource-api/src/main/java/cn/gistack/resource/vo/MyMultipartFile.java
new file mode 100644
index 0000000..f69abb0
--- /dev/null
+++ b/skjcmanager/skjcmanager-ops-api/skjcmanager-resource-api/src/main/java/cn/gistack/resource/vo/MyMultipartFile.java
@@ -0,0 +1,65 @@
+package cn.gistack.resource.vo;
+
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.*;
+
+public class MyMultipartFile implements MultipartFile {
+
+	private String contentType;
+
+	private String originalFilename;
+
+	private String name;
+
+	private byte[] bytes;
+
+	public MyMultipartFile(){}
+
+	public MyMultipartFile(String name, String originalFilename, String contentType, byte[] bytes){
+		this.bytes = bytes;
+		this.name = name;
+		this.originalFilename = originalFilename;
+		this.contentType = contentType;
+	}
+	@Override
+	public String getName() {
+		return this.name;
+	}
+
+	@Override
+	public String getOriginalFilename() {
+		return this.originalFilename;
+	}
+
+	@Override
+	public String getContentType() {
+		return this.contentType;
+	}
+
+	@Override
+	public boolean isEmpty() {
+		return this.bytes == null || this.bytes.length == 0;
+	}
+
+	@Override
+	public long getSize() {
+		return this.bytes.length;
+	}
+
+	@Override
+	public byte[] getBytes() throws IOException {
+		return this.bytes;
+	}
+
+	@Override
+	public InputStream getInputStream() throws IOException {
+		return new ByteArrayInputStream(this.bytes);
+	}
+
+	@Override
+	@SuppressWarnings("resource")
+	public void transferTo(File dest) throws IOException, IllegalStateException {
+		new FileOutputStream(dest).write(bytes);
+	}
+}
diff --git a/skjcmanager/skjcmanager-ops/skjcmanager-resource/src/main/java/cn/gistack/resource/builder/oss/OssBuilder.java b/skjcmanager/skjcmanager-ops/skjcmanager-resource/src/main/java/cn/gistack/resource/builder/oss/OssBuilder.java
index aca369e..bf6473a 100644
--- a/skjcmanager/skjcmanager-ops/skjcmanager-resource/src/main/java/cn/gistack/resource/builder/oss/OssBuilder.java
+++ b/skjcmanager/skjcmanager-ops/skjcmanager-resource/src/main/java/cn/gistack/resource/builder/oss/OssBuilder.java
@@ -16,6 +16,7 @@
  */
 package cn.gistack.resource.builder.oss;
 
+import cn.gistack.common.constant.CommonConstant;
 import cn.gistack.resource.rule.MyOssRule;
 import cn.gistack.resource.rule.PanoramaOSSRule;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -101,6 +102,11 @@
 	 */
 	public OssTemplate template(String code) {
 		String tenantId = AuthUtil.getTenantId();
+
+		if (StringUtil.isBlank(tenantId)){
+			tenantId = "000000";
+		}
+
 		Oss oss = getOss(tenantId, code);
 		Oss ossCached = ossPool.get(tenantId);
 		OssTemplate template = templatePool.get(tenantId);
diff --git a/skjcmanager/skjcmanager-ops/skjcmanager-resource/src/main/java/cn/gistack/resource/feign/OssClient.java b/skjcmanager/skjcmanager-ops/skjcmanager-resource/src/main/java/cn/gistack/resource/feign/OssClient.java
index dc4c96d..5deb967 100644
--- a/skjcmanager/skjcmanager-ops/skjcmanager-resource/src/main/java/cn/gistack/resource/feign/OssClient.java
+++ b/skjcmanager/skjcmanager-ops/skjcmanager-resource/src/main/java/cn/gistack/resource/feign/OssClient.java
@@ -11,6 +11,7 @@
 import org.springblade.core.tool.api.R;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
 
 import java.io.File;
 import java.io.FileInputStream;
@@ -79,4 +80,18 @@
 
 		return R.data(result);
 	}
+
+	@PostMapping(value = UPLOAD_FILE)
+	public String uploadFile(String fileName,  MultipartFile file) throws Exception{
+
+//		InputStream inputStream = new ByteArrayInputStream(bytes);
+
+		BladeFile bladeFile = ossBuilder.template().putFile(fileName, file.getInputStream());
+
+		String link = bladeFile.getLink();
+		if (link.indexOf("http://10.42.6.251:8082") != -1) {
+			link= link.replace("http://10.42.6.251:8082", "https://sk.hubeishuiyi.cn/gminio");
+		}
+		return link;
+	}
 }
diff --git a/skjcmanager/skjcmanager-ops/skjcmanager-resource/src/main/java/cn/gistack/resource/mapper/TextualResearchAttachMapper.xml b/skjcmanager/skjcmanager-ops/skjcmanager-resource/src/main/java/cn/gistack/resource/mapper/TextualResearchAttachMapper.xml
index 4aba7c2..69a0a83 100644
--- a/skjcmanager/skjcmanager-ops/skjcmanager-resource/src/main/java/cn/gistack/resource/mapper/TextualResearchAttachMapper.xml
+++ b/skjcmanager/skjcmanager-ops/skjcmanager-resource/src/main/java/cn/gistack/resource/mapper/TextualResearchAttachMapper.xml
@@ -113,7 +113,6 @@
                  LEFT JOIN SJZT_MD."att_ad_base" city ON city."ad_code" = county."p_ad_code"
                  LEFT JOIN YWXT.SM_TEXTUAL_RESEARCH_ATTACH STRA ON STRA.RES_GUID = arb."guid" and stra.type = 1
         where stra.type != 1 or stra.type is null
-
     </select>
 
 </mapper>
diff --git a/skjcmanager/skjcmanager-ops/skjcmanager-resource/src/main/resources/application.yml b/skjcmanager/skjcmanager-ops/skjcmanager-resource/src/main/resources/application.yml
index 1bf3617..c161bb1 100644
--- a/skjcmanager/skjcmanager-ops/skjcmanager-resource/src/main/resources/application.yml
+++ b/skjcmanager/skjcmanager-ops/skjcmanager-resource/src/main/resources/application.yml
@@ -6,8 +6,8 @@
 oss:
   enabled: true
   name: minio
-  tenant-mode: true
-  endpoint: http://10.10.2.251:8082
+  tenant-mode: false
+  endpoint: http://10.42.6.251:8082
   access-key: minioadmin
   secret-key: Gistack@2023_hb
   bucket-name: test
diff --git a/skjcmanager/skjcmanager-service-api/skjcmanager-alerts-api/src/main/java/cn/gistack/alerts/alarmRule/vo/AlarmRecordVO.java b/skjcmanager/skjcmanager-service-api/skjcmanager-alerts-api/src/main/java/cn/gistack/alerts/alarmRule/vo/AlarmRecordVO.java
index 3fc3fe3..b58231e 100644
--- a/skjcmanager/skjcmanager-service-api/skjcmanager-alerts-api/src/main/java/cn/gistack/alerts/alarmRule/vo/AlarmRecordVO.java
+++ b/skjcmanager/skjcmanager-service-api/skjcmanager-alerts-api/src/main/java/cn/gistack/alerts/alarmRule/vo/AlarmRecordVO.java
@@ -95,4 +95,7 @@
 	private String basGuids;
 
 	private String resGuids;
+
+	//测站名称
+	private String cdNm;
 }
diff --git a/skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/entity/RequestRecord.java b/skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/entity/RequestRecord.java
new file mode 100644
index 0000000..19d38ff
--- /dev/null
+++ b/skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/entity/RequestRecord.java
@@ -0,0 +1,40 @@
+package cn.gistack.nky.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+/**
+ * 南科院请求记录表
+ */
+@Data
+@TableName( value = "NKY_REQUEST_RECORD",autoResultMap = true)
+public class RequestRecord {
+
+	@TableId(value = "id", type = IdType.ASSIGN_ID)
+	private String id;
+
+	private String resGuid;
+
+	private String pointId;
+
+	private String requestUrl;
+
+	private String sendParams;
+
+	private String result;
+
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+
+	private String type;
+
+	private String errorDesc;
+
+}
diff --git a/skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/fegin/INkyClient.java b/skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/fegin/INkyClient.java
index 216ef02..7c66f27 100644
--- a/skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/fegin/INkyClient.java
+++ b/skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/fegin/INkyClient.java
@@ -44,6 +44,8 @@
 
 	String FINISH_TASK = API_PREFIX + "finishTask";
 
+	String INIT_ALGORITHM = API_PREFIX + "initAlgorithm";
+
 	/**
 	 * 获取arima预测结果
 	 * @param type
@@ -101,4 +103,7 @@
 
 	@GetMapping(FINISH_TASK)
 	Boolean finishTask(@RequestParam("taskId") String taskId);
+
+	@PostMapping(INIT_ALGORITHM)
+	void initAlgorithm(@RequestBody List<String> resList);
 }
diff --git a/skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/fegin/INkyClientFallback.java b/skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/fegin/INkyClientFallback.java
index 54b8233..2c30a51 100644
--- a/skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/fegin/INkyClientFallback.java
+++ b/skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/fegin/INkyClientFallback.java
@@ -69,5 +69,10 @@
 		return null;
 	}
 
+	@Override
+	public void initAlgorithm(List<String> resList) {
+
+	}
+
 
 }
diff --git a/skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/requestpojo/BDDataPo.java b/skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/requestpojo/BDDataPo.java
index b31f2c6..f8b39d2 100644
--- a/skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/requestpojo/BDDataPo.java
+++ b/skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/requestpojo/BDDataPo.java
@@ -62,7 +62,7 @@
 	public BDDataPo(DataResChildrenPo po,String type){
 		this.damId = po.getRes_cd();
 		this.pointId = po.getCd();
-		this.pointName = "测点"+po.getCd();
+		this.pointName = po.getCd_nm();
 		this.type = type;
 
 		if (type.equals( "1")){
diff --git a/skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/resultpojo/BaseCd.java b/skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/resultpojo/BaseCd.java
new file mode 100644
index 0000000..c100395
--- /dev/null
+++ b/skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/resultpojo/BaseCd.java
@@ -0,0 +1,12 @@
+package cn.gistack.nky.resultpojo;
+
+import lombok.Data;
+
+@Data
+public class BaseCd {
+	private String cd;
+	private String cd_nm;
+	private String ch;
+	private String res_cd;
+	private String cd_type;
+}
diff --git a/skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/resultpojo/DataResChildrenPo.java b/skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/resultpojo/DataResChildrenPo.java
index eb2e1d3..427d77d 100644
--- a/skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/resultpojo/DataResChildrenPo.java
+++ b/skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/resultpojo/DataResChildrenPo.java
@@ -13,6 +13,7 @@
 
 	private String res_reg_code;
 	private String cd;// 测站编码
+	private String cd_nm;//测站名称
 
 	private String tm;
 	private String res_cd; // 水库编码
diff --git a/skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/resultpojo/NkyBindDetailResult.java b/skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/resultpojo/NkyBindDetailResult.java
new file mode 100644
index 0000000..113ede6
--- /dev/null
+++ b/skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/resultpojo/NkyBindDetailResult.java
@@ -0,0 +1,21 @@
+package cn.gistack.nky.resultpojo;
+
+import lombok.Data;
+
+@Data
+public class NkyBindDetailResult {
+	private String damId;
+	private String pointId;
+	private String type;
+	private String algorithmCategory;
+	private String status;
+	private String forward;
+	private String reverse;
+	private String alarmType;
+	private String reserve1;
+	private String monitoringFrequency;
+	private String canchaNumber;
+	private String firstWater;
+
+
+}
diff --git a/skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/resultpojo/ResDamMonitorResult.java b/skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/resultpojo/ResDamMonitorResult.java
new file mode 100644
index 0000000..923b199
--- /dev/null
+++ b/skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/resultpojo/ResDamMonitorResult.java
@@ -0,0 +1,24 @@
+package cn.gistack.nky.resultpojo;
+
+import lombok.Data;
+
+@Data
+public class ResDamMonitorResult {
+
+	private String code;
+	private String name;
+
+	private String town_ad_code;
+	private String town_ad_name;
+	private String county_ad_code;
+	private String county_ad_name;
+	private String city_ad_code;
+	private String city_ad_name;
+	private String province_ad_code;
+	private String province_ad_name;
+	private String is_sy;
+	private String is_sl;
+	private String is_wy;
+
+
+}
diff --git a/skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/resultpojo/ZtResult.java b/skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/resultpojo/ZtResult.java
new file mode 100644
index 0000000..cb37731
--- /dev/null
+++ b/skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/resultpojo/ZtResult.java
@@ -0,0 +1,16 @@
+package cn.gistack.nky.resultpojo;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class ZtResult {
+
+	private int pageNo;
+	private int pageSize;
+	private int totalCount;
+	private List<ResDamMonitorResult> resultList;
+
+}
diff --git a/skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/resultpojo/ZtResultPo2.java b/skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/resultpojo/ZtResultPo2.java
new file mode 100644
index 0000000..8d23fb4
--- /dev/null
+++ b/skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/resultpojo/ZtResultPo2.java
@@ -0,0 +1,22 @@
+package cn.gistack.nky.resultpojo;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @PROJECT_NAME: skjcmanager
+ * @DESCRIPTION: 中台返回resultpojo
+ * @USER: aix
+ * @DATE: 2023/7/28 17:21
+ */
+@Data
+public class ZtResultPo2 {
+
+	private List<BaseCd> data;
+
+	private Integer code;
+
+	private String msg;
+
+}
diff --git a/skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/dayReportFlood/entity/DayReportFlood.java b/skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/dayReportFlood/entity/DayReportFlood.java
new file mode 100644
index 0000000..1dcc5f1
--- /dev/null
+++ b/skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/dayReportFlood/entity/DayReportFlood.java
@@ -0,0 +1,40 @@
+package cn.gistack.sm.dayReportFlood.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.core.mp.base.BaseEntity;
+
+/**
+ * @PROJECT_NAME: skjcmanager
+ * @DESCRIPTION: 每日报汛记录
+ * @USER: guoshilong
+ * @DATE: 2023/6/2 9:38
+ */
+@Data
+@TableName( value = "sm_day_report_flood")
+@EqualsAndHashCode(callSuper = true)
+public class DayReportFlood extends BaseEntity {
+	private static final long serialVersionUID = 1L;
+
+
+	/**
+	 * 标题
+	 */
+	private String title;
+
+	/**
+	 * 内容
+	 */
+	private String content;
+
+	//来源
+	private String source;
+
+	//附件地址
+	private String urls;
+
+}
diff --git a/skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/dayReportFlood/feign/IDayReportFloodClient.java b/skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/dayReportFlood/feign/IDayReportFloodClient.java
new file mode 100644
index 0000000..f0cf5ae
--- /dev/null
+++ b/skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/dayReportFlood/feign/IDayReportFloodClient.java
@@ -0,0 +1,20 @@
+package cn.gistack.sm.dayReportFlood.feign;
+
+import cn.gistack.sm.dayReportFlood.entity.DayReportFlood;
+import cn.gistack.sm.message.feign.IMessageClientFallback;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+@FeignClient(
+	value = "blade-sm",
+	fallback = IDayReportFloodClientFallback.class
+)
+public interface IDayReportFloodClient {
+	String API_PREFIX = "/client";
+
+	String SAVE_DAY_REPORT_FLOOD = API_PREFIX + "saveDayReportFlood";
+
+	@PostMapping(SAVE_DAY_REPORT_FLOOD)
+	boolean save(@RequestBody DayReportFlood saveEntity);
+}
diff --git a/skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/dayReportFlood/feign/IDayReportFloodClientFallback.java b/skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/dayReportFlood/feign/IDayReportFloodClientFallback.java
new file mode 100644
index 0000000..ace444a
--- /dev/null
+++ b/skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/dayReportFlood/feign/IDayReportFloodClientFallback.java
@@ -0,0 +1,24 @@
+package cn.gistack.sm.dayReportFlood.feign;
+
+
+import cn.gistack.sm.dayReportFlood.entity.DayReportFlood;
+import cn.gistack.sm.message.entity.MessageRecord;
+import cn.gistack.sm.message.feign.IMessageClient;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * Feign失败配置
+ * @author zhongrj
+ * @date 2023-07-07
+ */
+@Component
+public class IDayReportFloodClientFallback implements IDayReportFloodClient {
+
+
+	@Override
+	public boolean save(DayReportFlood saveEntity) {
+		return false;
+	}
+}
diff --git a/skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/dayReportFlood/vo/DayReportFloodVO.java b/skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/dayReportFlood/vo/DayReportFloodVO.java
new file mode 100644
index 0000000..8bae16e
--- /dev/null
+++ b/skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/dayReportFlood/vo/DayReportFloodVO.java
@@ -0,0 +1,14 @@
+package cn.gistack.sm.dayReportFlood.vo;
+
+import cn.gistack.sm.dayReportFlood.entity.DayReportFlood;
+import lombok.Data;
+
+@Data
+public class DayReportFloodVO extends DayReportFlood {
+
+	private String startTime;
+
+	private String endTime;
+
+	private String createUserName;
+}
diff --git a/skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sjztmd/feign/ISjztMdClient.java b/skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sjztmd/feign/ISjztMdClient.java
new file mode 100644
index 0000000..256dc07
--- /dev/null
+++ b/skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sjztmd/feign/ISjztMdClient.java
@@ -0,0 +1,19 @@
+package cn.gistack.sm.sjztmd.feign;
+
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.core.io.InputStreamResource;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+@FeignClient(
+	value = "blade-sm",
+	fallback = ISjztMdClientFallback.class
+)
+public interface ISjztMdClient {
+	String API_PREFIX = "/client";
+
+	String GENERATE_DAY_REPORT_FLOOD = API_PREFIX + "generateDayReportFlood";
+
+	@GetMapping(GENERATE_DAY_REPORT_FLOOD)
+	String generateDayReportFlood(@RequestParam("isShow") String isShow) throws Exception;
+}
diff --git a/skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sjztmd/feign/ISjztMdClientFallback.java b/skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sjztmd/feign/ISjztMdClientFallback.java
new file mode 100644
index 0000000..e019830
--- /dev/null
+++ b/skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sjztmd/feign/ISjztMdClientFallback.java
@@ -0,0 +1,23 @@
+package cn.gistack.sm.sjztmd.feign;
+
+import org.springframework.core.io.InputStreamResource;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * @ClassName Feign失败配置
+ * @Description TODO
+ * @Author aix
+ * @Date 2023/4/23 19:40
+ * @Version 1.0
+ */
+@Component
+public class ISjztMdClientFallback implements ISjztMdClient{
+
+
+	@Override
+	public String generateDayReportFlood(String isShow) {
+		return null;
+	}
+}
diff --git a/skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sms/feign/DataAbnormalWarnClientFallback.java b/skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sms/feign/DataAbnormalWarnClientFallback.java
index 28b2dc0..5aaae8a 100644
--- a/skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sms/feign/DataAbnormalWarnClientFallback.java
+++ b/skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sms/feign/DataAbnormalWarnClientFallback.java
@@ -16,4 +16,8 @@
 
 	}
 
+	@Override
+	public void sendOperateCZ(String phones, String rate) {
+
+	}
 }
diff --git a/skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sms/feign/IDataAbnormalWarnClient.java b/skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sms/feign/IDataAbnormalWarnClient.java
index 3a35309..d13dff4 100644
--- a/skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sms/feign/IDataAbnormalWarnClient.java
+++ b/skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sms/feign/IDataAbnormalWarnClient.java
@@ -18,6 +18,7 @@
 
 	String API_PREFIX = "/client";
 	String SEND_OPERATE = API_PREFIX + "/sendOperate";
+	String SEND_OPERATE_CZ = API_PREFIX + "/sendOperateCZ";
 
 	/**
 	 * 当有异常数据时,发送预警短信
@@ -25,4 +26,7 @@
 	@GetMapping(SEND_OPERATE)
 	void sendOperate(@RequestParam("tableName")String tableName, @RequestParam("phones")String phones);
 
+	@GetMapping(SEND_OPERATE_CZ)
+	void sendOperateCZ(@RequestParam("phones")String phones, @RequestParam("rate")String rate);
+
 }
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/alarmRule/mapper/AlarmRecordMapper.xml b/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/alarmRule/mapper/AlarmRecordMapper.xml
index aa3b63f..c52965f 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/alarmRule/mapper/AlarmRecordMapper.xml
+++ b/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/alarmRule/mapper/AlarmRecordMapper.xml
@@ -5,6 +5,9 @@
     <!--自定义分页列表查询-->
     <select id="selectAlarmRecordPage" resultType="cn.gistack.alerts.alarmRule.vo.AlarmRecordVO">
         select
+        <if test="alarmRecord.type == '渗压监测' or alarmRecord.type =='渗流监测' or alarmRecord.type == '变形监测' ">
+            acb."cd_nm" as cdNm,
+        </if>
         sar.*,
         sar1.type,sar1.alarm_rule_type as alarmRuleType,sar1.create_alarm_type as createAlarmType,sar1.rule_name as ruleName,a."label" as labels,
         a."name" as reservoirName,a."res_reg_code" as resRegCode,a."eng_scal" as engScal,
@@ -28,6 +31,15 @@
         LEFT JOIN SJZT_MD."att_bas_base" abb ON abb."code" = rrbl."bas_guid"
         LEFT JOIN SJZT_MD."att_bas_base" pabb ON abb."p_code" = pabb."code"
 
+        <if test="alarmRecord.type == '渗压监测'">
+            LEFT JOIN SJZT_MD."att_cd_base" acb on acb."cd" = sar.alarm_survey_station_code and acb."cd_type" = 'sy' and sar.alarm_survey_station_code !='-1'  and acb."res_cd" = sar.reservoir_number
+        </if>
+        <if test="alarmRecord.type == '渗流监测'">
+            LEFT JOIN SJZT_MD."att_cd_base" acb on acb."cd" = sar.alarm_survey_station_code and acb."cd_type" = 'sl' and sar.alarm_survey_station_code !='-1'  and acb."res_cd" = sar.reservoir_number
+        </if>
+        <if test="alarmRecord.type == '变形监测'">
+            LEFT JOIN SJZT_MD."att_wy_cd_base" acb on acb."cd" = sar.alarm_survey_station_code and acb."cd_type" = 'wy' and sar.alarm_survey_station_code !='-1'  and acb."res_cd" = sar.reservoir_number
+        </if>
         where sar.is_deleted = 0
         <if test="alarmRecord.reservoirName!=null and alarmRecord.reservoirName!=''">
             and a."name" like concat('%',#{alarmRecord.reservoirName},'%')
@@ -88,6 +100,7 @@
                 #{item}
             </foreach>
         </if>
+        order by field(sar1.alarm_level,'红色预警','橙色预警','黄色预警','蓝色预警')
     </select>
 
     <select id="getVODetail" resultType="cn.gistack.alerts.alarmRule.vo.AlarmRecordVO">
@@ -338,6 +351,18 @@
           <if test="alarmRecord.type != null and alarmRecord.type !=''">
               and rule.type = #{alarmRecord.type}
           </if>
+        <if test="alarmRecord.reservoirName!=null and alarmRecord.reservoirName!=''">
+            and arb."name" like concat('%',#{alarmRecord.reservoirName},'%')
+        </if>
+        <if test="alarmRecord.alarmRuleType!=null and alarmRecord.alarmRuleType!=''">
+            and rule.alarm_rule_type = #{alarmRecord.alarmRuleType}
+        </if>
+        <if test="alarmRecord.createAlarmType!=null and alarmRecord.createAlarmType!=''">
+            and rule.create_alarm_type = #{alarmRecord.createAlarmType}
+        </if>
+        <if test="alarmRecord.ruleName!=null and alarmRecord.ruleName!=''">
+            and rule.rule_name = #{alarmRecord.ruleName}
+        </if>
           <if test="alarmRecord.adCode != null and alarmRecord.adCode !=''">
               and arb."interior_ad_guid" like concat('%',#{alarmRecord.adCode},'%')
           </if>
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/NoticeHandle.java b/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/NoticeHandle.java
index 7d10397..398788f 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/NoticeHandle.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/NoticeHandle.java
@@ -188,14 +188,27 @@
 		String county_nm = jsonObject.getString("county_nm");
 		String city_nm = jsonObject.getString("city_nm");
 		log.info("当前为第{}个水库,行政区划:{}-{}-{},水库编码:{},水库名称:{}", i + 1, city_nm, county_nm, town_nm, res_cd, res_nm);
+		// 取出测站编码
+//		String stcd = jsonArray.getJSONObject(i).getString("stcd");
+//		if (StringUtil.isBlank(stcd)) {
+//			stcd = jsonArray.getJSONObject(i).getString("cd");
+//		}
+//		//如果stcd是空的就设置为-1
+//		if (StringUtil.isBlank(stcd)){
+//			stcd = "-1";
+//		}
+
 		String tempStr = uuid + res_cd;
 		// 去重水库操作,如果有重复的水库则不操作
 		if (!set.contains(tempStr)) {
 			set.add(tempStr);
-			// 取出测站编码
 			String stcd = jsonArray.getJSONObject(i).getString("stcd");
 			if (StringUtil.isBlank(stcd)) {
 				stcd = jsonArray.getJSONObject(i).getString("cd");
+			}
+			//如果stcd是空的就设置为-1
+			if (StringUtil.isBlank(stcd)){
+				stcd = "-1";
 			}
 			// 判断时间是否存在
 			String tm = jsonArray.getJSONObject(i).getString("tm");
@@ -222,12 +235,14 @@
 			}
 			// 获取告警人员信息
 //			getAlarmPersonList(jsonArray, columnsList, alarmRuleDetail,flag, personLists, lists, i, res_cd, day, hour, minute, stcd);
-			getAlarmPersonListV2(jsonArray, columnsList, alarmRuleDetail, roles, flag, personLists, lists, i, res_cd, day, hour, minute, stcd);
+			JSONObject jsonData = jsonArray.getJSONObject(i);
+			//这里把jsonObject传过去
+			getAlarmPersonListV2(jsonArray, columnsList, alarmRuleDetail, roles, flag, personLists, lists, i, res_cd, day, hour, minute, stcd,jsonData);
 		}
 
 	}
 
-	private void getAlarmPersonListV2(JSONArray jsonArray, List<String> columnsList, AlarmRuleDetail alarmRuleDetail, List<String> roles, Boolean flag, List<PersonVO> personLists, List<List<String>> lists, int i, String res_cd, String day, String hour, String minute, String stcd) {
+	private void getAlarmPersonListV2(JSONArray jsonArray, List<String> columnsList, AlarmRuleDetail alarmRuleDetail, List<String> roles, Boolean flag, List<PersonVO> personLists, List<List<String>> lists, int i, String res_cd, String day, String hour, String minute, String stcd,JSONObject jsonData) {
 		// 查询告警人员信息
 //		List<PersonVO> personVOList = getPersonListByResGuid(res_cd, alarmRuleDetail.getAlarmPerson());
 		List<PersonVO> personVOList = getPersonListByResGuidV2(res_cd, roles);
@@ -260,6 +275,7 @@
 					String format = "";
 					// 内容处理
 					format = addAlarmContent(jsonArray, i, split, format);
+//					format = addAlarmContentV2(jsonData,split,format);
 					// 加入集合
 					list.add(format);
 				}
@@ -485,6 +501,85 @@
 		return format;
 	}
 
+
+
+	/**
+	 * 告警内容拼接处理
+	 *
+	 * @param split     key 值
+	 * @param format    值结果
+	 * @return
+	 */
+	private String addAlarmContentV2(JSONObject jsonObject, String[] split, String format) {
+		for (String s : split) {
+			// 超汛限水位
+			if (s.equals("over_z")) {
+				String is_danger_res = "is_danger_res";
+				if (null != jsonObject.getString(is_danger_res) && jsonObject.getString(is_danger_res).equals("true")) {
+					format = format + "控制运用水位" + jsonObject.getString(s);
+				} else if (null != jsonObject.getString(is_danger_res) && jsonObject.getString(is_danger_res).equals("false")) {
+					format = format + "汛限水位" + jsonObject.getString(s);
+				} else {
+					format = format + jsonObject.getString(s);
+				}
+			} else if (s.equals("rz")) {
+				// 水位
+				String rz = "rz";
+				if (null == jsonObject.getString(rz)) {
+					format = format + "无数据";
+				} else {
+					format = format + jsonObject.getString(s) + "米";
+				}
+			} else if (s.equals("alarm_val")) {
+				// 小时雨量
+				String alarm_type = "alarm_type";
+				if (null != jsonObject.getString(alarm_type) && !jsonObject.getString(alarm_type).equals("")) {
+					format = format + jsonObject.getString(alarm_type) + "小时坝前点雨量" + jsonObject.getString(s);
+				} else {
+					format = format + jsonObject.getString(s);
+				}
+			} else if (s.equals("diff_dam")) {
+				String over_chec_fl_stag = "over_chec_fl_stag";
+				// 如果是超校核的需要判断超值
+				if (null != jsonObject.getString(over_chec_fl_stag) && !jsonObject.getString(over_chec_fl_stag).equals("")) {
+					// 校核,是否漫过坝顶(正数代表未漫过坝顶,负数则反之)
+					String diff_dam = jsonObject.getString(s);
+					double parseDouble = Double.parseDouble(diff_dam);
+					if (parseDouble > 0) {
+						format = format + "距离大坝坝顶仅" + jsonObject.getString(s);
+					} else {
+						format = format + "已漫过坝顶" + (-parseDouble);
+					}
+				} else {
+					format = format + jsonObject.getString(s);
+				}
+			} else if (s.equals("ms_flag")) {
+				// 水位
+				String ms_flag = "ms_flag";
+				if (null != jsonObject.getString(ms_flag) && jsonObject.getString(ms_flag).equals("sy")) {
+					format = format + "渗压";
+				} else if (null != jsonObject.getString(ms_flag) && jsonObject.getString(ms_flag).equals("sl")) {
+					format = format + "渗流";
+				} else if (null != jsonObject.getString(ms_flag) && jsonObject.getString(ms_flag).equals("by")) {
+					format = format + "白蚁";
+				} else if (null != jsonObject.getString(ms_flag) && jsonObject.getString(ms_flag).equals("bx")) {
+					format = format + "变形";
+				} else {
+					format = format + jsonObject.getString(s);
+				}
+			} else {
+				format = format + jsonObject.getString(s);
+			}
+		}
+		// 返回
+		return format;
+	}
+
+
+
+
+
+
 	/**
 	 * 保存告警记录信息
 	 *
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/NoticeStrategyImpl.java b/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/NoticeStrategyImpl.java
index 3e6e06a..1dad048 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/NoticeStrategyImpl.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/NoticeStrategyImpl.java
@@ -1614,7 +1614,7 @@
 			}
 
 			jsonObject.put("type", type);
-			jsonObject.put("monitor",jsonObject.getString("diff_val"));
+			jsonObject.put("monitorData",jsonObject.getString("diff_val"));
 			array.add(jsonObject);
 		}
 		return array;
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/feign/NkyClientImpl.java b/skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/feign/NkyClientImpl.java
index 92bec2c..888a06b 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/feign/NkyClientImpl.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/feign/NkyClientImpl.java
@@ -2,13 +2,14 @@
 
 import cn.gistack.nky.entity.AlarmGet;
 import cn.gistack.nky.fegin.INkyClient;
-import cn.gistack.nky.service.IAlarmGetService;
-import cn.gistack.nky.service.IArimaPredictService;
-import cn.gistack.nky.service.IHstPredictService;
-import cn.gistack.nky.service.INkyService;
+import cn.gistack.nky.resultpojo.BaseCd;
+import cn.gistack.nky.resultpojo.NkyBindDetailResult;
+import cn.gistack.nky.resultpojo.ResDamMonitorResult;
+import cn.gistack.nky.service.*;
 import cn.gistack.nky.vo.AlarmGetVO;
 import cn.gistack.nky.vo.PageVO;
 import cn.gistack.sm.patrol.feign.PatrolTaskClient;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import lombok.AllArgsConstructor;
@@ -24,7 +25,9 @@
 import org.springframework.web.bind.annotation.RestController;
 import springfox.documentation.annotations.ApiIgnore;
 
+import java.util.Arrays;
 import java.util.List;
+import java.util.stream.Collectors;
 
 @NonDS
 @ApiIgnore
@@ -38,6 +41,7 @@
 	private final IHstPredictService hstPredictService;
 	private final IAlarmGetService alarmGetService;
 	private final PatrolTaskClient patrolTaskClient;
+	private final IZtApiService ztApiService;
 
 
 	@Override
@@ -117,23 +121,23 @@
 		String taskType = "1641037874390999041";
 
 		//杨树堰水库大坝预警巡查
-		String title = StringUtil.format("{}大坝预警巡查",byId.getReservoirName());
+		String title = StringUtil.format("{}大坝预警巡查", byId.getReservoirName());
 
 		//杨树堰水库在2023-11-29 17:41:19时监测到位移GN1测点,测点值为2.37,预警等级为三级
 
 		String resNm = byId.getReservoirName();
-		String tm = DateUtil.format(byId.getTime(),"MM月dd日HH时mm分");
+		String tm = DateUtil.format(byId.getTime(), "MM月dd日HH时mm分");
 		String typeName = byId.getTypeName();
 		String cdNm = byId.getCdName();
 		String value = byId.getValue();
-		String level =String.valueOf( byId.getLevel());
+		String level = String.valueOf(byId.getLevel());
 
-		String content=StringUtil.format("{}在{}时监测到{}{}测点值为{},预警等级为{}级",
-			resNm,tm,typeName,cdNm,value,level);
+		String content = StringUtil.format("{}在{}时监测到{}{}测点值为{},预警等级为{}级",
+			resNm, tm, typeName, cdNm, value, level);
 		String resCd = byId.getDamId();
 
 		//创建巡查任务
-		String taskId = patrolTaskClient.createTask(processDefinitionId,taskType,title,content,resCd);
+		String taskId = patrolTaskClient.createTask(processDefinitionId, taskType, title, content, resCd);
 		alarmGet.setTaskId(taskId);
 		return alarmGetService.updateById(alarmGet);
 	}
@@ -150,12 +154,77 @@
 
 		AlarmGet alarmGet = alarmGetService.getOne(new QueryWrapper<AlarmGet>().eq("TASK_ID", taskId));
 
-		if (alarmGet != null){
+		if (alarmGet != null) {
 			//设置预警为已处理
 			alarmGet.setStatus("1");
 			Boolean aBoolean = updateStatus(alarmGet);
-			return  aBoolean;
+			return aBoolean;
 		}
 		return false;
 	}
+
+	@Override
+	@PostMapping(INIT_ALGORITHM)
+	public void initAlgorithm(List<String> resList) {
+		List<ResDamMonitorResult> resDamMonitorResultList = ztApiService.getResDamMonitor();
+		//获取水库之后,根据标识是否有监测站请求测点
+		resDamMonitorResultList.forEach(resDamMonitorResult -> {
+			String resGuid = resDamMonitorResult.getCode();
+			if (resDamMonitorResult.getIs_sy().equals("1")){
+				activeAlgorithm(resGuid,"sy","1");
+			}
+			if (resDamMonitorResult.getIs_sl().equals("1")){
+				activeAlgorithm(resGuid,"sl","2");
+			}
+			if (resDamMonitorResult.getIs_wy().equals("1")){
+				activeAlgorithm(resGuid,"wy","3,4,5");
+			}
+		});
+	}
+
+	private void activeAlgorithm(String resGuid,String type,String nkyType){
+		String taskCategory = "2107";
+		List<BaseCd> cdList = ztApiService.getBaseCd(resGuid,type);
+		List<String> nkyTypeList = Arrays.asList(nkyType.split(","));
+
+
+		cdList.forEach(baseCd -> {
+			String pointId = baseCd.getCd();
+
+			nkyTypeList.forEach(nkyTypeFlag->{
+
+				//请求测点之后,循环测点,判断算法绑定情况
+				List<NkyBindDetailResult> nkyBindDetailResultList = nkyService.getBindDetail(baseCd.getRes_cd(),baseCd.getCd(),nkyTypeFlag);
+				//过滤出   多元线性回归预测模型异常判定  algorithmCategory: 2107
+				List<NkyBindDetailResult> filterCollect = nkyBindDetailResultList.stream().filter(nkyBindDetailResult -> nkyBindDetailResult.getAlgorithmCategory().equals(taskCategory)).collect(Collectors.toList());
+
+				if (filterCollect.size() == 0){
+					//如果是空的,说明没有启用该算法;先启用该算法
+//					JSONObject bindEnableParams = new JSONObject();
+//
+//					bindEnableParams.put("status",1);
+//					bindEnableParams.put("taskCategory",taskCategory);
+//					bindEnableParams.put("damId",resGuid);
+//					bindEnableParams.put("pointId",pointId);
+//					bindEnableParams.put("type",nkyTypeFlag);
+//					boolean bindEnableRes = nkyService.bindEnable(bindEnableParams);
+//					//成功启用,设置值
+//					if (bindEnableRes){
+//
+//						JSONObject bindParamParams = new JSONObject();
+//
+//						bindParamParams.put("damId",resGuid);
+//						bindParamParams.put("pointId",pointId);
+//						bindParamParams.put("type",nkyTypeFlag);
+//						bindParamParams.put("algorithmCategory",taskCategory);
+//						bindParamParams.put("reserve1","4,3.3,2.7,2");
+//
+//						boolean bindParamRes = nkyService.bindParam(bindParamParams);
+//					}
+
+				}
+			});
+		});
+	}
+
 }
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/mapper/RequestRecordMapper.java b/skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/mapper/RequestRecordMapper.java
new file mode 100644
index 0000000..c43607e
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/mapper/RequestRecordMapper.java
@@ -0,0 +1,15 @@
+package cn.gistack.nky.mapper;
+
+import cn.gistack.nky.entity.HstPredict;
+import cn.gistack.nky.entity.RequestRecord;
+import cn.gistack.nky.vo.HstPredictVO;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface RequestRecordMapper extends BaseMapper<RequestRecord> {
+
+
+
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/service/INkyService.java b/skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/service/INkyService.java
index 09ae2ad..e9bf05e 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/service/INkyService.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/service/INkyService.java
@@ -4,6 +4,10 @@
 import cn.gistack.nky.entity.ArimaPredict;
 import cn.gistack.nky.entity.HstPredict;
 import cn.gistack.nky.requestpojo.*;
+import cn.gistack.nky.resultpojo.NkyBindDetailResult;
+import com.alibaba.fastjson.JSONObject;
+
+import java.util.List;
 
 /**
  * @PROJECT_NAME: skjcmanager
@@ -50,4 +54,10 @@
 	 * @param alarmGetPo
 	 */
 	AlarmGet alarmGetData(AlarmGetPo alarmGetPo);
+
+    List<NkyBindDetailResult> getBindDetail(String resCd, String cd, String s);
+
+	boolean bindEnable(JSONObject params);
+
+	boolean bindParam(JSONObject bindParamParams);
 }
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/service/IRequestRecordService.java b/skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/service/IRequestRecordService.java
new file mode 100644
index 0000000..8e5aad3
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/service/IRequestRecordService.java
@@ -0,0 +1,7 @@
+package cn.gistack.nky.service;
+
+import cn.gistack.nky.entity.RequestRecord;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+public interface IRequestRecordService extends IService<RequestRecord> {
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/service/IZtApiService.java b/skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/service/IZtApiService.java
index a0e57c2..5eed9f2 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/service/IZtApiService.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/service/IZtApiService.java
@@ -1,9 +1,7 @@
 package cn.gistack.nky.service;
 
 
-import cn.gistack.nky.resultpojo.DataBigResultPojo;
-import cn.gistack.nky.resultpojo.DataResChildrenPo;
-import cn.gistack.nky.resultpojo.DataResPo;
+import cn.gistack.nky.resultpojo.*;
 import com.alibaba.fastjson.JSONObject;
 
 import java.util.List;
@@ -47,4 +45,8 @@
 	List<DataResPo> getResSl();
 
 	List<DataResChildrenPo> getSl();
+
+    List<ResDamMonitorResult> getResDamMonitor();
+
+	List<BaseCd> getBaseCd(String code, String sy);
 }
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/service/impl/AlarmGetServiceImpl.java b/skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/service/impl/AlarmGetServiceImpl.java
index e63d0a0..ea8fad4 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/service/impl/AlarmGetServiceImpl.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/service/impl/AlarmGetServiceImpl.java
@@ -30,7 +30,7 @@
 
 		List<DataResPo> cdList = getResCdList(type);
 		cdList.forEach(dataResPo -> {
-			if (dataResPo.getChildren() != null){
+			if (dataResPo.getChildren() != null && dataResPo.getChildren().size()>0){
 				BatchDataPo batchDataPo = new BatchDataPo(dataResPo, type);
 				nkyService.batchData(batchDataPo);
 			}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/service/impl/NkyServiceImpl.java b/skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/service/impl/NkyServiceImpl.java
index 9cd1baf..b1b9aa2 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/service/impl/NkyServiceImpl.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/service/impl/NkyServiceImpl.java
@@ -4,13 +4,17 @@
 import cn.gistack.nky.entity.AlarmGet;
 import cn.gistack.nky.entity.ArimaPredict;
 import cn.gistack.nky.entity.HstPredict;
+import cn.gistack.nky.entity.RequestRecord;
 import cn.gistack.nky.requestpojo.*;
+import cn.gistack.nky.resultpojo.NkyBindDetailResult;
 import cn.gistack.nky.service.INkyService;
+import cn.gistack.nky.service.IRequestRecordService;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.springblade.core.tool.utils.DateUtil;
 import org.springframework.http.*;
 import org.springframework.stereotype.Service;
 import org.springframework.web.client.RestTemplate;
@@ -28,7 +32,7 @@
 @AllArgsConstructor
 @Slf4j
 public class NkyServiceImpl implements INkyService {
-
+	private final IRequestRecordService requestRecordService;
 
 	private static final String API_PREFIX = "http://10.42.7.146:9503/";
 	private static final String LOCAL_API_PREFIX = "https://sk.hubeishuiyi.cn/warnIp/";
@@ -47,15 +51,47 @@
 	//判定异常
 	private static final String ALARM_GET = "alarm/get";
 
+	private static final String BIND_DETAIL = "bind/detail";
+	private static final String BIND_ENABLE = "bind/enable";
+	private static final String BIND_PARAM = "bind/param";
+
 	@Override
 	public Boolean arimaPredict(ArimaPredictReqPo po) {
 		JSONObject jsonObject = requestNkyApi(ARIMA_PREDICT, JSON.toJSONString(po));
+		RequestRecord requestRecord = new RequestRecord();
+
+		try {
+			requestRecord.setRequestUrl(ARIMA_PREDICT);
+			requestRecord.setResGuid(po.getDamId());
+			requestRecord.setPointId(po.getPointId());
+			requestRecord.setSendParams(JSON.toJSONString(po));
+			requestRecord.setResult(JSON.toJSONString(jsonObject));
+			requestRecord.setCreateTime(DateUtil.now());
+			requestRecord.setType(po.getType());
+		}catch (Exception e){
+			requestRecord.setErrorDesc(e.toString());
+		}
+		requestRecordService.save(requestRecord);
 		return jsonObject.get("status").equals(200);
 	}
 
 	@Override
 	public Boolean hstPredict(HstPredictReqPo po) {
 		JSONObject jsonObject = requestNkyApi(HST_PREDICT, JSON.toJSONString(po));
+		RequestRecord requestRecord = new RequestRecord();
+
+		try {
+			requestRecord.setRequestUrl(HST_PREDICT);
+			requestRecord.setResGuid(po.getDamId());
+			requestRecord.setPointId(po.getPointId());
+			requestRecord.setSendParams(JSON.toJSONString(po));
+			requestRecord.setResult(JSON.toJSONString(jsonObject));
+			requestRecord.setCreateTime(DateUtil.now());
+			requestRecord.setType(po.getType());
+		}catch (Exception e){
+			requestRecord.setErrorDesc(e.toString());
+		}
+		requestRecordService.save(requestRecord);
 		return jsonObject.get("status").equals(200);
 	}
 
@@ -92,6 +128,21 @@
 	@Override
 	public Boolean batchData(BatchDataPo po) {
 		JSONObject jsonObject = requestNkyApi(ORIGIN_BATCHDATA, JSON.toJSONString(po));
+		RequestRecord requestRecord = new RequestRecord();
+		try {
+			requestRecord.setRequestUrl(ORIGIN_BATCHDATA);
+			if (po.getDatas().size()>0){
+				requestRecord.setResGuid(po.getDatas().get(0).getDamId());
+				requestRecord.setType(po.getDatas().get(0).getType());
+			}
+			requestRecord.setSendParams(JSON.toJSONString(po));
+			requestRecord.setResult(JSON.toJSONString(jsonObject));
+			requestRecord.setCreateTime(DateUtil.now());
+		}catch (Exception e){
+			e.printStackTrace();
+			requestRecord.setErrorDesc(e.toString());
+		}
+		requestRecordService.save(requestRecord);
 		return jsonObject.get("status").equals(200);
 	}
 
@@ -100,6 +151,43 @@
 		JSONObject jsonObject = requestNkyApi(ALARM_GET,JSON.toJSONString(alarmGetPo));
 		AlarmGet alarmGet = jsonObject.toJavaObject(AlarmGet.class);
 		return alarmGet;
+	}
+
+	@Override
+	public List<NkyBindDetailResult> getBindDetail(String resCd, String cd, String type) {
+
+		JSONObject params = new JSONObject();
+		params.put("damId",resCd);
+		params.put("pointId",cd);
+		params.put("type",type);
+
+		JSONObject result = requestNkyApi(BIND_DETAIL, JSON.toJSONString(params));
+
+		JSONArray dataList = result.getJSONArray("data");
+		List<NkyBindDetailResult> nkyBindDetailResultList = dataList.toJavaList(NkyBindDetailResult.class);
+		return nkyBindDetailResultList;
+	}
+
+	@Override
+	public boolean bindEnable(JSONObject params) {
+		JSONObject jsonObject = requestNkyApi(BIND_ENABLE, JSON.toJSONString(params));
+
+		if (jsonObject.get("status").equals("200")) {
+			return true;
+		}else {
+			return false;
+		}
+	}
+
+	@Override
+	public boolean bindParam(JSONObject bindParamParams) {
+		JSONObject jsonObject = requestNkyApi(BIND_PARAM, JSON.toJSONString(bindParamParams));
+
+		if (jsonObject.get("status").equals("200")) {
+			return true;
+		}else {
+			return false;
+		}
 	}
 
 	/**
@@ -137,7 +225,5 @@
 		JSONObject jsonObject = JSONObject.parseObject(resultStr);
 		return jsonObject;
 	}
-
-
 
 }
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/service/impl/RequestRecordServiceImpl.java b/skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/service/impl/RequestRecordServiceImpl.java
new file mode 100644
index 0000000..c3ae9ad
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/service/impl/RequestRecordServiceImpl.java
@@ -0,0 +1,11 @@
+package cn.gistack.nky.service.impl;
+
+import cn.gistack.nky.entity.RequestRecord;
+import cn.gistack.nky.mapper.RequestRecordMapper;
+import cn.gistack.nky.service.IRequestRecordService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+@Service
+public class RequestRecordServiceImpl extends ServiceImpl<RequestRecordMapper, RequestRecord> implements IRequestRecordService {
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/service/impl/ZtApiServiceImpl.java b/skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/service/impl/ZtApiServiceImpl.java
index 7b866fe..e6491f5 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/service/impl/ZtApiServiceImpl.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/service/impl/ZtApiServiceImpl.java
@@ -1,14 +1,12 @@
 package cn.gistack.nky.service.impl;
 
 import cn.gistack.common.utils.SpringContextUtil;
-import cn.gistack.nky.resultpojo.DataBigResultPojo;
-import cn.gistack.nky.resultpojo.DataResChildrenPo;
-import cn.gistack.nky.resultpojo.DataResPo;
-import cn.gistack.nky.resultpojo.ZtResultPo;
+import cn.gistack.nky.resultpojo.*;
 import cn.gistack.nky.service.IZtApiService;
 import com.alibaba.fastjson.JSONObject;
 import lombok.extern.slf4j.Slf4j;
 import org.springblade.core.tool.utils.ObjectUtil;
+import org.springblade.core.tool.utils.StringUtil;
 import org.springframework.http.HttpEntity;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.HttpMethod;
@@ -54,11 +52,29 @@
 	 */
 	private static final String SL_API ="/services/1234567890ABCDEFGHIJKLMN/monitor/sl/api?res_nm=&cd=&city_cd=&county_cd=&pageNo=1&pageSize=9999";
 
+	private static final String RES_DAM_MONITOR ="/services/1234567890ABCDEFGHIJKLMN/res_dam_monitor/api?province_cd=420000000000&res_nm=";
+	private static final String BASE_CD ="/services/1234567890ABCDEFGHIJKLMN/base/cd/api";
 
+
+	int getSyCount = 0;
 	@Override
 	public List<DataResChildrenPo> getSy() {
+		getSyCount = getSyCount +1;
 		Map<String, Object> params = new LinkedHashMap<>();
-		return getData(LASTEST_OSMOTIC_PRESSURE, "get", params);
+		try {
+			log.info("第{}次请求",getSyCount);
+			List<DataResChildrenPo> get = getData(LASTEST_OSMOTIC_PRESSURE, "get", params);
+			getSyCount = 0;
+			return get;
+		}catch (Exception e){
+			e.printStackTrace();
+			if (getSyCount<=5){
+				return this.getSy();
+			}else {
+				List<DataResChildrenPo> list = new ArrayList<>();
+				return list;
+			}
+		}
 	}
 
 	@Override
@@ -67,10 +83,25 @@
 		return getData(WY_API, "get", params);
 	}
 
+	int getResSyCount = 0;
 	@Override
 	public List<DataResPo> getResSy() {
+		getResSyCount = getResSyCount +1;
 		Map<String, Object> params = new LinkedHashMap<>();
-		return getResData(LASTEST_OSMOTIC_PRESSURE, "get", params);
+		try {
+			log.info("第{}次请求",getResSyCount);
+			List<DataResPo> get = getResData(LASTEST_OSMOTIC_PRESSURE, "get", params);
+			getResSyCount = 0;
+			return get;
+		}catch (Exception e){
+			e.printStackTrace();
+			if (getResSyCount<=5){
+				return this.getResSy();
+			}else {
+				List<DataResPo> list = new ArrayList<>();
+				return list;
+			}
+		}
 	}
 
 	@Override
@@ -89,6 +120,46 @@
 	public List<DataResChildrenPo> getSl() {
 		Map<String, Object> params = new LinkedHashMap<>();
 		return getData(SL_API, "get", params);
+	}
+
+	@Override
+	public List<ResDamMonitorResult> getResDamMonitor() {
+		Map<String, Object> params = new LinkedHashMap<>();
+		return getResDamMonitorResult(RES_DAM_MONITOR, "get", params);
+	}
+
+	@Override
+	public List<BaseCd> getBaseCd(String resGuid, String type) {
+		Map<String, Object> params = new LinkedHashMap<>();
+		String url = BASE_CD + StringUtil.format("?res_cd={}&type={}",resGuid,type);
+		// 获取环境
+		String activeProfile = SpringContextUtil.getActiveProfile();
+		if (activeProfile.equals("dev")) {
+			url = LOCAL+ url ;
+		}
+		if (activeProfile.equals("prod")) {
+			url = ONLINE+ url ;
+		}
+		if (activeProfile.equals("test")) {
+			url = ONLINE + url;
+		}
+
+		HttpMethod method;
+			method = HttpMethod.GET;
+		// 声明一个header变量
+		HttpHeaders headers = new HttpHeaders();
+		// 设置apikey
+		headers.set("apikey",API_KEY);
+
+		HttpEntity<String> httpEntity = new HttpEntity(null, headers);
+		log.info("中台请求地址:{}", url);
+		RestTemplate template = new RestTemplate();
+		ResponseEntity<ZtResultPo2> ztResultPojoResponseEntity = template.exchange(url, method,httpEntity, ZtResultPo2.class,params);
+		List<BaseCd> returnResult = new ArrayList<>();
+		if (ztResultPojoResponseEntity.getStatusCodeValue() == 200) {
+			returnResult = ztResultPojoResponseEntity.getBody().getData();
+		}
+		return returnResult;
 	}
 
 	private List<DataResChildrenPo> getData(String url, String type, Map<String, Object> params) {
@@ -163,7 +234,7 @@
 		headers.set("apikey",API_KEY);
 
 		HttpEntity<String> httpEntity = new HttpEntity(null, headers);
-
+		log.info("中台请求地址:{}", url);
 		RestTemplate template = new RestTemplate();
 		ResponseEntity<ZtResultPo> ztResultPojoResponseEntity = template.exchange(url, method,httpEntity, ZtResultPo.class,params);
 		if (ztResultPojoResponseEntity.getStatusCodeValue() == 200) {
@@ -173,4 +244,41 @@
 		return null;
 	}
 
+	private List<ResDamMonitorResult> getResDamMonitorResult(String url, String type, Map<String, Object> params){
+
+		// 获取环境
+		String activeProfile = SpringContextUtil.getActiveProfile();
+		if (activeProfile.equals("dev")) {
+			url = LOCAL+ url ;
+		}
+		if (activeProfile.equals("prod")) {
+			url = ONLINE+ url ;
+		}
+		if (activeProfile.equals("test")) {
+			url = ONLINE + url;
+		}
+
+
+		HttpMethod method;
+		if (type.toLowerCase().equals("get".toLowerCase())) {
+			method = HttpMethod.GET;
+		} else {
+			method = HttpMethod.POST;
+		}
+		// 声明一个header变量
+		HttpHeaders headers = new HttpHeaders();
+		// 设置apikey
+		headers.set("apikey",API_KEY);
+
+		HttpEntity<String> httpEntity = new HttpEntity(null, headers);
+		log.info("中台请求地址:{}", url);
+		RestTemplate template = new RestTemplate();
+		ResponseEntity<ZtResult> ztResultPojoResponseEntity = template.exchange(url, method,httpEntity, ZtResult.class,params);
+		if (ztResultPojoResponseEntity.getStatusCodeValue() == 200) {
+			List<ResDamMonitorResult> resDamMonitorResultList = ztResultPojoResponseEntity.getBody().getResultList();
+			return resDamMonitorResultList;
+		}
+		return null;
+	}
+
 }
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/dayReportFlood/controller/DayReportFloodController.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/dayReportFlood/controller/DayReportFloodController.java
new file mode 100644
index 0000000..586514d
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/dayReportFlood/controller/DayReportFloodController.java
@@ -0,0 +1,77 @@
+package cn.gistack.sm.dayReportFlood.controller;
+
+import cn.gistack.sm.dayReportFlood.entity.DayReportFlood;
+import cn.gistack.sm.dayReportFlood.service.IDayReportFloodService;
+import cn.gistack.sm.dayReportFlood.vo.DayReportFloodVO;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiParam;
+import lombok.AllArgsConstructor;
+import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * @PROJECT_NAME: skjcmanager
+ * @DESCRIPTION: 报汛记录
+ * @USER: guoshilong
+ * @DATE: 2023/6/2 9:38
+ * */
+@RestController
+@RequestMapping("dayReportFlood")
+@AllArgsConstructor
+@Api(value = "报汛记录", tags = "报汛记录")
+public class DayReportFloodController extends BladeController {
+
+	private final IDayReportFloodService dayReportFloodService;
+
+	@GetMapping("/page")
+	public R<IPage<DayReportFloodVO>> pageList(DayReportFloodVO dayReportFloodVO, Query query) {
+		IPage<DayReportFloodVO> page = dayReportFloodService.selectPage(Condition.getPage(query),dayReportFloodVO);
+		return R.data(page);
+	}
+
+	/**
+	 * 详情
+	 */
+	@GetMapping("/detail")
+	public R<DayReportFlood> detail(@RequestParam(name="id",required=true) String id) {
+		return R.data(dayReportFloodService.getById(id));
+	}
+
+	/**
+	 * 新增
+	 */
+	@PostMapping("/save")
+	public R save(@RequestBody DayReportFlood dayReportFlood) {
+		return R.data(dayReportFloodService.save(dayReportFlood));
+	}
+
+	/**
+	 * 修改
+	 */
+	@PostMapping("/update")
+	public R update(@RequestBody DayReportFlood dayReportFlood) {
+		return R.data(dayReportFloodService.updateById(dayReportFlood));
+	}
+
+	/**
+	 * 新增或修改
+	 */
+	@PostMapping("/submit")
+	public R submit(@RequestBody DayReportFlood dayReportFlood) {
+		return R.data(dayReportFloodService.saveOrUpdate(dayReportFlood));
+	}
+
+	/**
+	 * 删除
+	 */
+	@PostMapping("/remove")
+	public R remove(@ApiParam(value = "主键集合") @RequestParam String ids) {
+		return R.data(dayReportFloodService.removeBatchByIds(Func.toLongList(ids)));
+	}
+
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/dayReportFlood/feign/DayReportFloodClientImpl.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/dayReportFlood/feign/DayReportFloodClientImpl.java
new file mode 100644
index 0000000..d287c03
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/dayReportFlood/feign/DayReportFloodClientImpl.java
@@ -0,0 +1,36 @@
+package cn.gistack.sm.dayReportFlood.feign;
+
+import cn.gistack.sm.dayReportFlood.entity.DayReportFlood;
+import cn.gistack.sm.dayReportFlood.service.IDayReportFloodService;
+import cn.gistack.sm.sjztmd.feign.ISjztMdClient;
+import cn.gistack.sm.sjztmd.util.MyDateUtils;
+import cn.gistack.sm.sjztmd.word.service.ISjztmdService;
+import cn.gistack.sm.sjztmd.word.util.WordUtil;
+import cn.gistack.sm.sjztmd.word.vo.DzkInfo;
+import cn.gistack.sm.sjztmd.word.vo.OverDetail;
+import cn.gistack.sm.sjztmd.word.vo.SzInfo;
+import cn.gistack.sm.sjztmd.word.vo.TotalInfo;
+import lombok.AllArgsConstructor;
+import org.springblade.core.tenant.annotation.NonDS;
+import org.springframework.core.io.InputStreamResource;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+import springfox.documentation.annotations.ApiIgnore;
+
+import java.io.ByteArrayInputStream;
+import java.util.HashMap;
+import java.util.List;
+
+@NonDS
+@ApiIgnore
+@RestController
+@AllArgsConstructor
+public class DayReportFloodClientImpl implements IDayReportFloodClient {
+
+	private final IDayReportFloodService dayReportFloodService;
+
+	@Override
+	public boolean save(DayReportFlood saveEntity) {
+		return dayReportFloodService.save(saveEntity);
+	}
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/dayReportFlood/mapper/DayReportFloodMapper.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/dayReportFlood/mapper/DayReportFloodMapper.java
new file mode 100644
index 0000000..bc52332
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/dayReportFlood/mapper/DayReportFloodMapper.java
@@ -0,0 +1,13 @@
+package cn.gistack.sm.dayReportFlood.mapper;
+
+import cn.gistack.sm.dayReportFlood.entity.DayReportFlood;
+import cn.gistack.sm.dayReportFlood.vo.DayReportFloodVO;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface DayReportFloodMapper extends BaseMapper<DayReportFlood> {
+	List<DayReportFloodVO> selectMyPage(IPage<DayReportFloodVO> page, @Param("vo") DayReportFloodVO dayReportFloodVO);
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/dayReportFlood/mapper/DayReportFloodMapper.xml b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/dayReportFlood/mapper/DayReportFloodMapper.xml
new file mode 100644
index 0000000..cf2f421
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/dayReportFlood/mapper/DayReportFloodMapper.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.gistack.sm.dayReportFlood.mapper.DayReportFloodMapper">
+
+
+    <select id="selectMyPage" resultType="cn.gistack.sm.dayReportFlood.vo.DayReportFloodVO">
+        SELECT * FROM
+        SM_DAY_REPORT_FLOOD
+        WHERE IS_DELETED = 0
+        <if test="vo.title != null and vo.title !=''">
+            AND title LIKE CONCAT('%',#{vo.title},'%')
+        </if>
+        <if test="vo.startTime != null and vo.startTime != ''">
+            AND create_time &gt;= #{vo.startTime}
+        </if>
+        <if test="vo.endTime != null and vo.endTime !='' ">
+            AND create_time &lt;= #{vo.endTime}
+        </if>
+        order by create_time desc
+    </select>
+</mapper>
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/dayReportFlood/service/IDayReportFloodService.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/dayReportFlood/service/IDayReportFloodService.java
new file mode 100644
index 0000000..66cd21a
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/dayReportFlood/service/IDayReportFloodService.java
@@ -0,0 +1,17 @@
+package cn.gistack.sm.dayReportFlood.service;
+
+import cn.gistack.sm.dayReportFlood.entity.DayReportFlood;
+import cn.gistack.sm.dayReportFlood.vo.DayReportFloodVO;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.core.mp.base.BaseService;
+
+/**
+ * @PROJECT_NAME: skjcmanager
+ * @DESCRIPTION:
+ * @USER: guoshilong
+ * @DATE: 2023/6/2 9:38
+ */
+public interface IDayReportFloodService extends BaseService<DayReportFlood> {
+
+	IPage<DayReportFloodVO> selectPage(IPage<DayReportFloodVO> page, DayReportFloodVO dayReportFloodVO);
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/dayReportFlood/service/impl/DayReportFloodServiceImpl.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/dayReportFlood/service/impl/DayReportFloodServiceImpl.java
new file mode 100644
index 0000000..e4910c2
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/dayReportFlood/service/impl/DayReportFloodServiceImpl.java
@@ -0,0 +1,17 @@
+package cn.gistack.sm.dayReportFlood.service.impl;
+
+import cn.gistack.sm.dayReportFlood.entity.DayReportFlood;
+import cn.gistack.sm.dayReportFlood.mapper.DayReportFloodMapper;
+import cn.gistack.sm.dayReportFlood.service.IDayReportFloodService;
+import cn.gistack.sm.dayReportFlood.vo.DayReportFloodVO;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springframework.stereotype.Service;
+
+@Service
+public class DayReportFloodServiceImpl extends BaseServiceImpl<DayReportFloodMapper, DayReportFlood> implements IDayReportFloodService {
+	@Override
+	public IPage<DayReportFloodVO> selectPage(IPage<DayReportFloodVO> page, DayReportFloodVO dayReportFloodVO) {
+		return page.setRecords(baseMapper.selectMyPage(page,dayReportFloodVO));
+	}
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/constant/HkConstant.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/constant/HkConstant.java
index 83b2efe..b8baf08 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/constant/HkConstant.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/constant/HkConstant.java
@@ -10,12 +10,15 @@
 	/**
 	 * post
 	 */
-	public static final String HOST = "36.134.79.80:1443";
+//	public static final String HOST = "36.134.79.80:1443";
+	public static final String HOST = "v.hubeishuiyi.cn:1443";
+
 
 	/**
 	 * newPost
 	 */
-	public static final String NEW_HOST = "223.76.234.232:1443";
+//	public static final String NEW_HOST = "223.76.234.232:1443";
+	public static final String NEW_HOST = "v.hubeishuiyi.cn:1443";
 
 
 	/**
@@ -34,6 +37,21 @@
 	public static final String AppSecret = "1eyDaLIxOU4XBC8P7Jyr";
 
 	/**
+	 * EventAppKey 算法
+	 */
+	public static final String EventAppKey = "26514872";
+
+	/**
+	 * EventAppSecret 算法
+	 */
+	public static final String EventAppSecret = "7t767HTMOjWu1k2ui3Ho";
+
+	/**
+	 * Event_NEW_HOST 算法
+	 */
+	public static final String Event_NEW_HOST = "10.42.7.244:443";
+
+	/**
 	 * 分页获取监控点资源 url
 	 */
 	public static final String cameras = "/api/resource/v1/cameras";
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/constant/HkEventConstant.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/constant/HkEventConstant.java
new file mode 100644
index 0000000..0a69f26
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/constant/HkEventConstant.java
@@ -0,0 +1,70 @@
+package cn.gistack.sm.hk.constant;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class HkEventConstant {
+
+
+	/**
+	 * 事情事件编号
+	 * 视频丢失 131329
+	 * 视频遮挡 131330
+	 * 移动侦测 131331
+	 * 越界侦测 131585
+	 * 区域入侵 131588
+	 * 徘徊侦测 131590
+	 * 人员聚集 131593
+	 */
+	public static List<String> videoList = new ArrayList<>()
+	{{
+		add("131329");
+		add("131330");
+		add("131331");
+		add("131585");
+		add("131588");
+		add("131590");
+		add("131593");
+	}};
+
+	/**
+	 * 算法事件编号
+	 * 旷野垃圾堆检测 72057594155375360
+	 * 水面漂浮物检测 72057594155372032
+	 * 钓鱼检测 72057594155375872
+	 * 水体颜色识别 72057594155377920
+	 * 水岸洗衣识别 72057594155387392
+	 * 游泳检测 72057594155376384
+	 * 水体泡沫识别 72057594155484938
+	 * 违法建设变化检测 72057594155479818
+	 */
+	public static List<String> artVideoList = new ArrayList<>()
+	{{
+		add("72057594155375360");
+		add("72057594155372032");
+		add("72057594155375872");
+		add("72057594155377920");
+		add("72057594155387392");
+		add("72057594155376384");
+		add("72057594155484938");
+		add("72057594155479818");
+	}};
+
+
+
+	/**
+	 *
+	 */
+	public static Map<String,String> videoMap = new HashMap()
+	{{
+		put("131329","");
+		put("131330","");
+		put("131331","");
+		put("131585","linedetection");
+		put("131588","fielddetection");
+		put("131590","loitering");
+		put("131593","group");
+	}};
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/controller/HkController.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/controller/HkController.java
index 8d4b5d0..cafa836 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/controller/HkController.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/controller/HkController.java
@@ -72,6 +72,7 @@
 			HkConstant.previewURLs,
 			hk.getCameraIndexCode(),
 			ProtocolConstant.WS,
+			null==hk.getTransmode()?1:hk.getTransmode(),
 			expand,
 			null==hk.getStreamType()?1:hk.getStreamType());
 		if (null!=result) {
@@ -101,6 +102,7 @@
 			HkConstant.previewURLs,
 			hk.getCameraIndexCode(),
 			hk.getProtocol(),
+			null==hk.getTransmode()?1:hk.getTransmode(),
 			expand,
 			null==hk.getStreamType()?1:hk.getStreamType());
 		if (null!=result) {
@@ -130,6 +132,7 @@
 			HkConstant.previewURLs,
 			hk.getCameraIndexCode(),
 			ProtocolConstant.HLS,
+			null==hk.getTransmode()?1:hk.getTransmode(),
 			expand,
 			null==hk.getStreamType()?1:hk.getStreamType());
 		if (null!=result) {
@@ -240,6 +243,7 @@
 		jsonBody.put("cameraIndexCode", hk.getCameraIndexCode());
 		jsonBody.put("protocol", hk.getProtocol());
 		jsonBody.put("recordLocation", "1");
+		jsonBody.put("transmode", null==hk.getTransmode()?1:hk.getTransmode());
 		jsonBody.put("beginTime", hk.getBeginTime());
 		jsonBody.put("endTime", hk.getEndTime());
 		String body = jsonBody.toJSONString();
@@ -266,6 +270,7 @@
 		jsonBody.put("cameraIndexCode", hk.getCameraIndexCode());
 		jsonBody.put("streamType",null==hk.getStreamType()?1:hk.getStreamType());
 		jsonBody.put("protocol", hk.getProtocol());
+		jsonBody.put("transmode", null==hk.getTransmode()?1:hk.getTransmode());
 		String body = jsonBody.toJSONString();
 
 		/**
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/controller/HkEventController.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/controller/HkEventController.java
index 969ee48..3063c3b 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/controller/HkEventController.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/controller/HkEventController.java
@@ -1,24 +1,26 @@
 package cn.gistack.sm.hk.controller;
 
+
 import cn.gistack.sm.hk.constant.HkConstant;
-import cn.gistack.sm.hk.constant.ProtocolConstant;
-import cn.gistack.sm.hk.service.HkService;
+import cn.gistack.sm.hk.entity.HkEvent;
+import cn.gistack.sm.hk.service.AsyncHkEventService;
+import cn.gistack.sm.hk.service.HkEventService;
 import cn.gistack.sm.hk.vo.EventVO;
-import cn.gistack.sm.hk.vo.HkVO;
+import cn.gistack.sm.hk.vo.HkEventVO;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.serializer.SerializerFeature;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.tool.api.R;
 import org.springframework.web.bind.annotation.*;
-
 import java.text.SimpleDateFormat;
 import java.util.Date;
-import java.util.Map;
 
 import static cn.gistack.sm.hk.util.GetCameraUtils.*;
 
@@ -34,7 +36,71 @@
 @AllArgsConstructor
 public class HkEventController {
 
-	private final HkService hkService;
+	private final HkEventService hkEventService;
+	private final AsyncHkEventService asyncHkEventService;
+
+	/**
+	 * 分页列表查询
+	 *
+	 * @param hkEvent
+	 * @return
+	 */
+	@ApiOperation(value="告警记录-分页列表查询", notes="告警记录-分页列表查询")
+	@GetMapping(value = "/list")
+	public R queryPageList(HkEvent hkEvent, Query query) {
+		IPage<HkEvent> pageList = hkEventService.page(Condition.getPage(query), Condition.getQueryWrapper(hkEvent));
+		return R.data(pageList);
+	}
+
+	/**
+	 * 自定义分页列表查询
+	 * @param query
+	 * @param hkEvent
+	 * @return
+	 */
+	@ApiOperation(value="告警记录-自定义分页列表查询", notes="告警记录-自定义分页列表查询")
+	@GetMapping(value = "/page")
+	public R selectAlarmPage(HkEventVO hkEvent, Query query) {
+		return R.data(hkEventService.selectHkEventPage(Condition.getPage(query),hkEvent));
+	}
+
+	/**
+	 * 添加
+	 *
+	 * @param hkEvent
+	 * @return
+	 */
+	@ApiOperation(value="告警记录-添加", notes="告警记录-添加")
+	@PostMapping(value = "/add")
+	public R add(@RequestBody HkEvent hkEvent) {
+		return R.data(hkEventService.save(hkEvent));
+	}
+
+	/**
+	 * 编辑
+	 *
+	 * @param hkEvent
+	 * @return
+	 */
+	@ApiOperation(value="告警记录-编辑", notes="告警记录-编辑")
+	@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
+	public R edit(@RequestBody HkEvent hkEvent) {
+		return R.data(hkEventService.updateById(hkEvent));
+	}
+
+	/**
+	 * 通过id查询
+	 *
+	 * @param id
+	 * @return
+	 */
+	@ApiOperation(value="告警记录-通过id查询", notes="告警记录-通过id查询")
+	@GetMapping(value = "/queryById")
+	public R queryById(@RequestParam(name="id",required=true) String id) {
+		HkEvent hkEvent = hkEventService.getById(id);
+		return R.data(hkEvent);
+	}
+
 
 	/**
 	 * 海康视频事件订阅
@@ -43,7 +109,9 @@
 	 */
 	@GetMapping(value = "/eventSubscriptionByEventTypes")
 	public R eventSubscriptionByEventTypes(EventVO eventVO) {
+		eventVO.setType(null==eventVO.getType()?1:eventVO.getType());
 		String result = addEventSubscriptionByEventTypes(eventVO, HkConstant.eventSubscriptionByEventTypesURLs);
+//		log.info("事件订阅返回信息:" + result);
 		JSONObject jsonObject1 = JSONObject.parseObject(result);
 		// 查询海康设备列表并返回
 		return R.data(jsonObject1);
@@ -56,6 +124,7 @@
 	 */
 	@GetMapping(value = "/eventUnSubscriptionByEventTypes")
 	public R eventUnSubscriptionByEventTypes(EventVO eventVO) {
+		eventVO.setType(null==eventVO.getType()?1:eventVO.getType());
 		String result = removeEventSubscriptionByEventTypes(eventVO, HkConstant.eventUnSubscriptionByEventTypesURLs);
 		JSONObject jsonObject1 = JSONObject.parseObject(result);
 		// 查询海康设备列表并返回
@@ -69,6 +138,7 @@
 	 */
 	@GetMapping(value = "/eventSubscriptionView")
 	public R eventSubscriptionView(EventVO eventVO) {
+		eventVO.setType(null==eventVO.getType()?1:eventVO.getType());
 		String result = getEventSubscriptionView(eventVO, HkConstant.eventSubscriptionViewURLs);
 		JSONObject jsonObject1 = JSONObject.parseObject(result);
 		// 查询海康设备列表并返回
@@ -82,14 +152,14 @@
 	 */
 	@PostMapping(value = "/eventRcv")
 	public String eventRcv(@RequestBody String data) {
-		Date date = new Date();
-		SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 		//格式化输出json
 		JSONObject jsonObject = JSON.parseObject(data);
 		String prettyData = JSON.toJSONString(jsonObject, SerializerFeature.PrettyFormat,
 			SerializerFeature.WriteMapNullValue);
-		System.out.println(simpleDateFormat.format(date) + "收到数据:" + System.lineSeparator() + prettyData);
-
+//		log.info("收到事件:" + jsonObject);
+		// 异步保存数据
+		asyncHkEventService.saveHkEventInfo(prettyData);
+		// 立即返回
 		JSONObject jsonBody = new JSONObject();
 		jsonBody.put("code", "200");
 		jsonBody.put("msg", "ok");
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/entity/HkEvent.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/entity/HkEvent.java
new file mode 100644
index 0000000..bf6872c
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/entity/HkEvent.java
@@ -0,0 +1,124 @@
+package cn.gistack.sm.hk.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 海康视频事件
+ *
+ * @author zhongrj
+ * @date 2024-04-24
+ */
+@Data
+@TableName(value = "sm_hk_event")
+@ApiModel(value = "sm_hk_event对象", description = "考核方案")
+public class HkEvent implements Serializable {
+
+	/**
+	 * 主键id
+	 */
+	@JsonSerialize(using = ToStringSerializer.class)
+	@TableId(value = "id", type = IdType.ASSIGN_ID)
+	private Long id;
+
+	/**
+	 * 事件唯一标识
+	 */
+	@ApiModelProperty(value = "事件唯一标识")
+	private String eventId;
+
+	/**
+	 * 事件源编号,物理设备是资源编号
+	 */
+	@ApiModelProperty(value = "事件源编号,物理设备是资源编号")
+	private String srcIndex;
+
+	/**
+	 * 事件源类型
+	 */
+	@ApiModelProperty(value = "事件源类型")
+	private String srcType;
+	/**
+	 * 事件源名称
+	 */
+	@ApiModelProperty(value = "事件源名称")
+	private String srcName;
+
+	/**
+	 * 事件类型
+	 */
+	@ApiModelProperty(value = "事件类型")
+	private Long eventType;
+	/**
+	 * 事件状态
+	 * 0-瞬时
+	 * 1-开始
+	 * 2-停止
+	 * 4-事件联动结果更新
+	 * 5-事件图片异步上传
+	 */
+	@ApiModelProperty(value = "事件状态")
+	private Integer status;
+
+	/**
+	 * 事件等级:
+	 * 0-未配置
+	 * 1-低
+	 * 2-中
+	 * 3-高
+	 * 注意,此处事件等级是指在事件联动中配置的等级,需要配置了事件联动,才返回这个字段
+	 */
+	@ApiModelProperty(value = "事件等级")
+	private Integer eventLvl;
+
+	/**
+	 * 脉冲超时时间
+	 */
+	@ApiModelProperty(value = "脉冲超时时间")
+	private Long timeout;
+
+	/**
+	 * 事件发生时间(设备时间)
+	 */
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@ApiModelProperty(value = "事件发生时间(设备时间)")
+	private Date happenTime;
+
+	/**
+	 * 事件发生的事件源父设备编码
+	 */
+	@ApiModelProperty(value = "事件发生的事件源父设备编码")
+	private String srcParentIndex;
+
+	/**
+	 * 事件从接收者(程序处理后)发出的时间
+	 */
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@ApiModelProperty(value = "事件从接收者(程序处理后)发出的时间")
+	private Date sendTime;
+
+	/**
+	 * 创建时间
+	 */
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@ApiModelProperty(value = "创建时间")
+	@TableField(value = "create_time",fill = FieldFill.INSERT)
+	private Date createTime;
+
+	/**
+	 * 图片url
+	 */
+	@ApiModelProperty(value = "图片url")
+	private String imageUrl;
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/mapper/HkEventMapper.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/mapper/HkEventMapper.java
new file mode 100644
index 0000000..26ef039
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/mapper/HkEventMapper.java
@@ -0,0 +1,20 @@
+package cn.gistack.sm.hk.mapper;
+
+import cn.gistack.sm.hk.entity.HkEvent;
+import cn.gistack.sm.hk.vo.HkEventVO;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface HkEventMapper extends BaseMapper<HkEvent> {
+
+	/**
+	 * 自定义分页列表查询
+	 * @param page
+	 * @param hkEvent
+	 * @return
+	 */
+	List<HkEventVO> selectHkEventPage(@Param("page") IPage<HkEventVO> page,@Param("hkEvent")  HkEventVO hkEvent);
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/mapper/HkEventMapper.xml b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/mapper/HkEventMapper.xml
new file mode 100644
index 0000000..2bdb70d
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/mapper/HkEventMapper.xml
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.gistack.sm.hk.mapper.HkEventMapper">
+
+    <!--自定义分页列表查询-->
+    <select id="selectHkEventPage" resultType="cn.gistack.sm.hk.vo.HkEventVO">
+        select
+        she.*,
+        awb."res_guid" as resGuid,
+        a."name" as resName,
+        case when b."ad_grad" = 4 THEN b."ad_name"
+        ELSE NULL END AS townName,
+        case when b."ad_grad" = 3 THEN b."ad_name"
+        when c."ad_grad" = 3 THEN C."ad_name"
+        END AS countyName,
+        case when b."ad_grad" = 2 THEN b."ad_name"
+        when c."ad_grad" = 2 THEN c."ad_name"
+        ELSE d."ad_name" END AS cityName,
+        bdb.dict_value as eventTypeName
+        from YWXT.sm_hk_event she
+        left join YWXT.blade_dict_biz bdb on bdb.dict_key = she.event_type and bdb.is_deleted = 0 and code = 'EVENT_TYPE'
+        left join SJZT_MD."att_wmst_base" awb on awb."video_guid" = she.src_index
+        left join SJZT_MD."att_res_base" a on a."guid" = awb."res_guid"
+        left join SJZT_MD."att_ad_base" b on b."guid" = a."interior_ad_guid"
+        LEFT JOIN SJZT_MD."att_ad_base" c ON b."p_ad_code" = c."guid"
+        LEFT JOIN SJZT_MD."att_ad_base" d ON c."p_ad_code" = d."guid"
+        where 1 =1
+        <if test="hkEvent.srcName!=null and hkEvent.srcName!=''">
+            and she.src_name like concat('%',#{hkEvent.srcName},'%')
+        </if>
+        <if test="hkEvent.eventTypeName!=null and hkEvent.eventTypeName!=''">
+            and bdb.dict_value like concat('%',#{hkEvent.eventTypeName},'%')
+        </if>
+        <if test="hkEvent.status!=null">
+            and she.status = #{hkEvent.status}
+        </if>
+        <if test="hkEvent.eventType!=null">
+            and she.event_type = #{hkEvent.eventType}
+        </if>
+        <if test="hkEvent.startTime !=null and hkEvent.startTime !=''">
+            AND DATE_FORMAT(she.send_time,'%Y-%m-%d') &gt;= #{hkEvent.startTime}
+        </if>
+        <if test="hkEvent.endTime !=null and hkEvent.endTime !=''">
+            AND DATE_FORMAT(she.send_time,'%Y-%m-%d') &lt;= #{hkEvent.endTime}
+        </if>
+        <if test="hkEvent.adCode != null and hkEvent.adCode !='' and hkEvent.adCode !='420000000000'">
+            AND (b."ad_code" = #{hkEvent.adCode} or c."ad_code" =#{hkEvent.adCode} or d."ad_code" = #{hkEvent.adCode})
+        </if>
+        order by she.id desc
+    </select>
+
+</mapper>
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/service/AsyncHkEventService.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/service/AsyncHkEventService.java
new file mode 100644
index 0000000..aca63c4
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/service/AsyncHkEventService.java
@@ -0,0 +1,82 @@
+package cn.gistack.sm.hk.service;
+
+import cn.gistack.sm.hk.constant.HkEventConstant;
+import cn.gistack.sm.hk.entity.HkEvent;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.logging.log4j.util.Strings;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+
+@Component
+@Slf4j
+public class AsyncHkEventService {
+
+	@Autowired
+	private HkEventService hkEventService;
+
+	/**
+	 * 异步加载海康视频事件
+	 * @param jsonData
+	 */
+	@Async
+	public void saveHkEventInfo(String jsonData){
+		JSONObject jsonObject = JSONObject.parseObject(jsonData);
+		String params = jsonObject.get("params").toString();
+		JSONObject parseObject = JSONObject.parseObject(params);
+		JSONArray eventsArray = parseObject.getJSONArray("events");
+		Date sendTime = parseObject.getDate("sendTime");
+		for (int i = 0; i < eventsArray.size(); i++) {
+			HkEvent hkEvent = new HkEvent();
+			hkEvent.setEventId(eventsArray.getJSONObject(i).getString("eventId"));
+			hkEvent.setEventType(eventsArray.getJSONObject(i).getLong("eventType"));
+			hkEvent.setSrcIndex(eventsArray.getJSONObject(i).getString("srcIndex"));
+			hkEvent.setSrcName(eventsArray.getJSONObject(i).getString("srcName"));
+			hkEvent.setSrcType(eventsArray.getJSONObject(i).getString("srcType"));
+			hkEvent.setSrcParentIndex(eventsArray.getJSONObject(i).getString("srcParentIndex"));
+			hkEvent.setTimeout(eventsArray.getJSONObject(i).getLong("timeout"));
+			hkEvent.setHappenTime(eventsArray.getJSONObject(i).getDate("happenTime"));
+			hkEvent.setStatus(eventsArray.getJSONObject(i).getInteger("status"));
+			hkEvent.setEventLvl(eventsArray.getJSONObject(i).getInteger("eventLvl"));
+			hkEvent.setCreateTime(new Date());
+			hkEvent.setSendTime(sendTime);
+			hkEvent.setImageUrl(setImageUrl(eventsArray,i));
+			// 保存
+			hkEventService.save(hkEvent);
+		}
+	}
+
+	/**
+	 * 设置图片路径
+	 * @param eventsArray
+	 * @param i
+	 * @return
+	 */
+	private String setImageUrl(JSONArray eventsArray, int i) {
+		String eventType = eventsArray.getJSONObject(i).getLong("eventType").toString();
+		// 如果是非算法事件处理
+		if (HkEventConstant.videoList.contains(eventType)){
+			String columns = HkEventConstant.videoMap.get(eventType);
+			if (!Strings.isBlank(columns)){
+				String data = eventsArray.getJSONObject(i).getString("data");
+				JSONObject parseObject = JSONObject.parseObject(data);
+				JSONArray columnsJSONArray = parseObject.getJSONArray(columns);
+				if (null!= columnsJSONArray && columnsJSONArray.size()>0) {
+//					log.info("img:" + columnsJSONArray.getJSONObject(0).getString("imageUrl"));
+					return columnsJSONArray.getJSONObject(0).getString("imageUrl");
+				}
+			}
+			return null;
+		}
+		// 算法事件处理
+		if (HkEventConstant.artVideoList.contains(eventType)){
+//			log.info("img:" + eventsArray.getJSONObject(i).getString("refrencePicUrl"));
+			return eventsArray.getJSONObject(i).getString("refrencePicUrl");
+		}
+		return null;
+	}
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/service/HkEventService.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/service/HkEventService.java
new file mode 100644
index 0000000..809b69f
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/service/HkEventService.java
@@ -0,0 +1,23 @@
+package cn.gistack.sm.hk.service;
+
+
+import cn.gistack.sm.hk.entity.HkEvent;
+import cn.gistack.sm.hk.vo.HkEventVO;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * 海康事件服务接口层
+ * @author zhongrj
+ * @date 2024-04-24
+ */
+public interface HkEventService extends IService<HkEvent> {
+
+	/**
+	 * 自定义分页列表查询
+	 * @param page
+	 * @param hkEvent
+	 * @return
+	 */
+	IPage<HkEventVO> selectHkEventPage(IPage<HkEventVO> page, HkEventVO hkEvent);
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/service/impl/HkEventServiceImpl.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/service/impl/HkEventServiceImpl.java
new file mode 100644
index 0000000..ada980b
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/service/impl/HkEventServiceImpl.java
@@ -0,0 +1,29 @@
+package cn.gistack.sm.hk.service.impl;
+
+import cn.gistack.sm.hk.entity.HkEvent;
+import cn.gistack.sm.hk.mapper.HkEventMapper;
+import cn.gistack.sm.hk.service.HkEventService;
+import cn.gistack.sm.hk.vo.HkEventVO;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * 海康事件服务接口实现层
+ * @author zhongrj
+ * @date 2024-04-24
+ */
+@Service
+public class HkEventServiceImpl extends ServiceImpl<HkEventMapper, HkEvent> implements HkEventService {
+
+	/**
+	 * 自定义分页列表查询
+	 * @param page
+	 * @param hkEvent
+	 * @return
+	 */
+	@Override
+	public IPage<HkEventVO> selectHkEventPage(IPage<HkEventVO> page, HkEventVO hkEvent) {
+		return page.setRecords(baseMapper.selectHkEventPage(page,hkEvent));
+	}
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/util/GetCameraUtils.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/util/GetCameraUtils.java
index f0208dd..d2d286a 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/util/GetCameraUtils.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/util/GetCameraUtils.java
@@ -41,6 +41,15 @@
 		// 秘钥appSecret
 		ArtemisConfig.appSecret = HkConstant.AppSecret;
 
+		if (type==3) {
+			// 秘钥appKey
+			ArtemisConfig.appKey = HkConstant.EventAppKey;
+			// 秘钥appSecret
+			ArtemisConfig.appSecret = HkConstant.EventAppSecret;
+			// host
+			ArtemisConfig.host = HkConstant.Event_NEW_HOST;
+		}
+
 
 		/**
 		 * STEP3:设置接口的URI地址
@@ -75,10 +84,17 @@
 	 * @param url 视频预览url
 	 * @param cameraIndexCode 监控点唯一标识
 	 * @param protocol
+	 * @param transmode
 	 * @param expand
 	 * @return
 	 */
-	public static String GetCameraPreviewURL(Integer type,String url, String cameraIndexCode, String protocol,String expand,Integer streamType) {
+	public static String GetCameraPreviewURL(Integer type,
+											 String url,
+											 String cameraIndexCode,
+											 String protocol,
+											 Integer transmode,
+											 String expand,
+											 Integer streamType) {
 		/**
 		 * 组装请求参数
 		 */
@@ -86,7 +102,7 @@
 		jsonBody.put("cameraIndexCode", cameraIndexCode);
 		jsonBody.put("streamType",streamType);
 		jsonBody.put("protocol", protocol);
-		jsonBody.put("transmode", 1);
+		jsonBody.put("transmode", transmode);
 		if (null!= expand && !expand.equals("")) {
 			jsonBody.put("expand", expand);
 		}
@@ -295,7 +311,7 @@
 		 * 组装请求参数
 		 */
 		JSONObject jsonBody = new JSONObject();
-		jsonBody.put("eventTypes", Arrays.stream(eventVO.getEventTypes().split(",")).mapToInt(Integer::parseInt).toArray());
+		jsonBody.put("eventTypes", Arrays.stream(eventVO.getEventTypes().split(",")).mapToLong(Long::parseLong).toArray());
 		jsonBody.put("eventDest", eventVO.getEventDest());
 		if (null!=eventVO.getSubType()){
 			jsonBody.put("subType", eventVO.getSubType());
@@ -319,7 +335,7 @@
 	 * @return
 	 */
 	public static String removeEventSubscriptionByEventTypes(EventVO eventVO, String url) {
-		int[] eventTypes =  Arrays.stream(eventVO.getEventTypes().split(",")).mapToInt(Integer::parseInt).toArray();
+		long[] eventTypes =  Arrays.stream(eventVO.getEventTypes().split(",")).mapToLong(Long::parseLong).toArray();
 		/**
 		 * 组装请求参数
 		 */
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/vo/EventVO.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/vo/EventVO.java
index 1170b61..bd445fd 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/vo/EventVO.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/vo/EventVO.java
@@ -13,7 +13,7 @@
 	private Integer type;
 
 	/**
-	 * 事件类型  区域入侵:131588,徘徊侦测:131590  视频丢失:131329  折线警戒面:131611
+	 * 事件类型  视频丢失:131329,视频遮挡:131330,移动侦测:131331,越界侦测:131585,区域入侵:131588,徘徊侦测:131590,人员聚集:131593
 	 */
 	private String eventTypes;
 
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/vo/HkEventVO.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/vo/HkEventVO.java
new file mode 100644
index 0000000..f938767
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/vo/HkEventVO.java
@@ -0,0 +1,59 @@
+package cn.gistack.sm.hk.vo;
+
+import cn.gistack.sm.hk.entity.HkEvent;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class HkEventVO extends HkEvent implements Serializable {
+
+	/**
+	 * 事件类型名称
+	 */
+	private String eventTypeName;
+
+	/**
+	 * 开始时间
+	 */
+	private String startTime;
+
+	/**
+	 * 结束时间
+	 */
+	private String endTime;
+	/**
+	 * 水库编号
+	 */
+	private String resGuid;
+
+	/**
+	 * 水库名称
+	 */
+	private String resName;
+
+	/**
+	 * 是否导出
+	 */
+	private Integer isExport;
+
+	/**
+	 * 市州名称
+	 */
+	private String cityName;
+
+	/**
+	 * 区县
+	 */
+	private String countyName;
+
+	/**
+	 * 乡镇
+	 */
+	private String townName;
+
+	/**
+	 * 区域编号
+	 */
+	private String adCode;
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/controller/AttWmstBaseController.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/controller/AttWmstBaseController.java
new file mode 100644
index 0000000..4a53ab7
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/controller/AttWmstBaseController.java
@@ -0,0 +1,43 @@
+package cn.gistack.sm.sjztmd.controller;
+
+import cn.gistack.sm.sjztmd.entity.AttWmstBase;
+import cn.gistack.sm.sjztmd.service.IAttWmstBaseService;
+import cn.gistack.sm.sjztmd.vo.AttWmstBaseVO;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import io.swagger.annotations.Api;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.StringUtil;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+
+@Slf4j
+@Api(tags = "视频")
+@RestController
+@RequestMapping("/sjztmd/attWmstBase")
+@AllArgsConstructor
+public class AttWmstBaseController {
+	private final IAttWmstBaseService attWmstBaseService;
+
+	@GetMapping("/getPage")
+	public R getPage(Query query , AttWmstBaseVO attWmstBaseVO){
+		IPage<AttWmstBaseVO> page = attWmstBaseService.getPage(Condition.getPage(query),attWmstBaseVO);
+		return R.data(page);
+	}
+
+	@PostMapping("/update")
+	public R update(AttWmstBase attWmstBase){
+		if (StringUtil.isBlank(attWmstBase.getGuid())) {
+			R.fail("参数不能为空!");
+		}
+		boolean res = attWmstBaseService.customizeUpdate(attWmstBase);
+		return R.data(res);
+	}
+
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/entity/AttWmstBase.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/entity/AttWmstBase.java
new file mode 100644
index 0000000..c3328ba
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/entity/AttWmstBase.java
@@ -0,0 +1,93 @@
+package cn.gistack.sm.sjztmd.entity;
+
+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.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+/**
+ * 视频(中台表)
+ */
+@Data
+@TableName("\"att_wmst_base\"")
+public class AttWmstBase {
+
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 主键
+	 */
+//	@JsonSerialize(using = ToStringSerializer.class)
+	@ApiModelProperty(value = "主键")
+	@TableField("\"guid\"")
+//	@TableId("\"guid\"")
+	private String guid;
+
+	/**
+	 * 水库id
+	 */
+	@ApiModelProperty(value = "水库id")
+	@TableField("\"res_guid\"")
+	private String resGuid;
+
+	/**
+	 * 视频id
+	 */
+	@ApiModelProperty(value = "视频id")
+	@TableField("\"video_guid\"")
+	private String videoGuid;
+
+	/**
+	 * 视频点名称
+	 */
+	@ApiModelProperty(value = "视频点名称")
+	@TableField("\"video_name\"")
+	private String videoName;
+
+	/**
+	 * 在线状态(0离线,1在线)
+	 */
+	@ApiModelProperty(value = "在线状态(0离线,1在线)")
+	@TableField("\"online\"")
+	private Integer online;
+
+	/**
+	 * 在线状态(1海康老平台,2海康楚天云平台)
+	 */
+	@ApiModelProperty(value = "来源")
+	@TableField("\"sys_resource\"")
+	private Integer sysResource;
+
+	/**
+	 * 建站时间
+	 */
+	@ApiModelProperty(value = "建站时间")
+	@TableField("\"comp_time\"")
+	private String compTime;
+
+
+	/**
+	 * 厂商
+	 */
+	@ApiModelProperty(value = "厂商")
+	@TableField("\"factory\"")
+	private String factory;
+
+
+	/**
+	 * 采集时间
+	 */
+	@ApiModelProperty(value = "采集时间")
+	@TableField("\"collect_time\"")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private String collectTime;
+
+
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/entity/TbAttResPowerStation.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/entity/TbAttResPowerStation.java
index 33c7abb..323d901 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/entity/TbAttResPowerStation.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/entity/TbAttResPowerStation.java
@@ -65,14 +65,14 @@
 	 */
 	@ApiModelProperty(value = "装机容量")
 	@TableField(value = "\"installed_capacity\"",fill = FieldFill.UPDATE)
-	private Integer installedCapacity;
+	private double installedCapacity;
 
 	/**
 	 * 平均年利用小时
 	 */
 	@ApiModelProperty(value = "平均年利用小时")
 	@TableField(value = "\"year_avg_hour\"",fill = FieldFill.UPDATE)
-	private Integer yearAvgHour;
+	private double yearAvgHour;
 
 	/**
 	 * 填报状态(0:填写中,1:审核中,2:审核通过)
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/feign/SjztMdClientImpl.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/feign/SjztMdClientImpl.java
new file mode 100644
index 0000000..b11bd6c
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/feign/SjztMdClientImpl.java
@@ -0,0 +1,96 @@
+package cn.gistack.sm.sjztmd.feign;
+
+import cn.gistack.resource.feign.IOssClient;
+import cn.gistack.resource.vo.MyMultipartFile;
+import cn.gistack.sm.sjztmd.entity.AttResBase;
+import cn.gistack.sm.sjztmd.feign.IAttResBaseClient;
+import cn.gistack.sm.sjztmd.feign.ISjztMdClient;
+import cn.gistack.sm.sjztmd.service.IAttResBaseService;
+import cn.gistack.sm.sjztmd.util.MyDateUtils;
+import cn.gistack.sm.sjztmd.word.service.ISjztmdService;
+import cn.gistack.sm.sjztmd.word.util.WordUtil;
+import cn.gistack.sm.sjztmd.word.vo.DzkInfo;
+import cn.gistack.sm.sjztmd.word.vo.OverDetail;
+import cn.gistack.sm.sjztmd.word.vo.SzInfo;
+import cn.gistack.sm.sjztmd.word.vo.TotalInfo;
+import lombok.AllArgsConstructor;
+import org.springblade.core.tenant.annotation.NonDS;
+import org.springframework.core.io.InputStreamResource;
+import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+import springfox.documentation.annotations.ApiIgnore;
+
+import java.io.ByteArrayInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.net.URLEncoder;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@NonDS
+@ApiIgnore
+@RestController
+@AllArgsConstructor
+public class SjztMdClientImpl implements ISjztMdClient {
+
+	private final ISjztmdService sjztmdService;
+	private final IOssClient ossClient;
+
+	@Override
+	@GetMapping(GENERATE_DAY_REPORT_FLOOD)
+	public String generateDayReportFlood(String isShow) throws Exception{
+
+
+
+		//获取总览、大中库、明细数据
+		List<TotalInfo> totalList = sjztmdService.getTotalInfo(isShow);
+		List<DzkInfo> dzkList = sjztmdService.getDzkInfo(isShow);
+		List<OverDetail> overDetailList = sjztmdService.getOverDetailInfo(isShow);
+		List<SzInfo> szInfoList = sjztmdService.getSzInfo(isShow);
+
+		HashMap<String,String> over10Params = new HashMap<>();
+		//small_start_stag=0&small_end_stag=2&mid_start_stag=0&mid_end_stag=2&big_start_stag=0&big_end_stag=2
+		over10Params.put("small_start_stag", "0.1");
+		over10Params.put("mid_start_stag", "0.1");
+		over10Params.put("big_start_stag", "0.1");
+
+		HashMap<String,String> normalParams = new HashMap<>();
+		//small_start_stag=0&small_end_stag=2&mid_start_stag=0&mid_end_stag=2&big_start_stag=0&big_end_stag=2
+		normalParams.put("small_start_stag", "0");
+		normalParams.put("mid_start_stag", "0");
+		normalParams.put("big_start_stag", "0");
+
+		List<TotalInfo> totalOverList = sjztmdService.getTotalOverInfo(isShow,normalParams);
+		List<TotalInfo> totalOver10List = sjztmdService.getTotalOverInfo(isShow,over10Params);
+		byte[] data =  null;
+		if (MyDateUtils.isTodayInFloodSeason()){
+			data = WordUtil.GetOverInfo(totalList,dzkList,overDetailList,szInfoList);
+		}else {
+			data= WordUtil.GetNotInSeasonOverInfo(totalList,dzkList,overDetailList,szInfoList,totalOverList,totalOver10List);
+
+		}
+		// 创建响应实体并设置响应头,将输出流作为响应体返回给客户端
+//		InputStreamResource resource = new InputStreamResource(new ByteArrayInputStream(data));
+		String time = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
+		String fileName = time + "全省水库防汛情况.docx";
+		MultipartFile file = new MyMultipartFile("file",fileName, "text/plain", data);
+		String path = ossClient.uploadFile(fileName, file);
+		return path;
+	}
+
+	private void createFile(String filePath,byte[] bytes){
+		// 将byte[]写入文件
+		try (FileOutputStream fos = new FileOutputStream(filePath)) {
+			fos.write(bytes);
+			System.out.println("文件已成功生成!");
+		} catch (IOException e) {
+			e.printStackTrace();
+			System.out.println("生成文件时发生错误。");
+		}
+	}
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/AttResBaseMapper.xml b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/AttResBaseMapper.xml
index 32896ae..ec5b391 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/AttResBaseMapper.xml
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/AttResBaseMapper.xml
@@ -179,9 +179,7 @@
     <select id="getAttResBaseUserPage" resultType="cn.gistack.sm.sjztmd.dto.AttResBaseUserDTO">
         select
         arb."guid", arb."name", arb."res_loc" as place, arb."res_reg_code" as resRegCode, arb."eng_scal" as engScal,arb."center_long" as lon,arb."center_lat" as lat,
-        REGEXP_SUBSTR (arb."res_loc",'[^-]+',1,2) as cityName,
-        REGEXP_SUBSTR (arb."res_loc",'[^-]+',1,3) as countyName,
-        REGEXP_SUBSTR (arb."res_loc",'[^-]+',1,4) as townName,
+        dri."city_nm" cityName,dri."county_nm" countyName,dri."town_nm" townName,
         aab."ad_name" as adName,
         trmp1."user_unit" areaUnitName,trmp1."user_name" areaUsername,trmp1."user_phone" areaPhone,trmp1."position"
         areaPosition,trmp1."guid" areaUserGuid,
@@ -198,6 +196,7 @@
         trmp5."user_unit" patrolUnitName,trmp5."user_name" patrolUsername,trmp5."user_phone"
         patrolPhone,trmp5."position" patrolPosition,trmp5."guid" patrolUserGuid
         from SJZT_MD."att_res_base" arb
+        left join "SJZT_DW"."dim_res_info_a" dri on arb."guid" = dri."guid"
         left join "SJZT_MD"."att_ad_base" aab on aab."guid" = arb."interior_ad_guid"
         left join "SJZT_MD"."att_ad_base" aa on aab."p_ad_code" = aa."ad_code"
         left join "SJZT_MD"."att_ad_base" ab on aa."p_ad_code" = ab."ad_code"
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/AttResManagePersonMapper.xml b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/AttResManagePersonMapper.xml
index f660ee6..dc8b2c3 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/AttResManagePersonMapper.xml
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/AttResManagePersonMapper.xml
@@ -102,7 +102,7 @@
                         from "SJZT_MD"."att_res_manage_person" tmp
                         where tmp."user_phone" = a."user_phone")) as role_id
         from (select *
-              from (select distinct a."user_name", a."user_phone", concat(b."ad_guid", '000000') as "ad_code"
+              from (select distinct a."user_name", a."user_phone", b."interior_ad_guid" as "ad_code"
                     from "SJZT_MD"."att_res_manage_person" a
                              left join "SJZT_MD"."att_res_base" b on a."res_guid" = b."guid"
                     where "user_phone" is not null
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/AttWmstBaseMapper.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/AttWmstBaseMapper.java
new file mode 100644
index 0000000..ba1d23c
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/AttWmstBaseMapper.java
@@ -0,0 +1,18 @@
+package cn.gistack.sm.sjztmd.mapper;
+
+import cn.gistack.sm.sjztmd.entity.AttWmstBase;
+import cn.gistack.sm.sjztmd.entity.YwTermitesTask;
+import cn.gistack.sm.sjztmd.vo.AttWmstBaseVO;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+
+public interface AttWmstBaseMapper extends BaseMapper<AttWmstBase> {
+
+	List<AttWmstBaseVO> getPage(IPage<AttWmstBaseVO> page, AttWmstBaseVO attWmstBaseVO);
+
+	boolean customizeUpdate(@Param("attWmstBase") AttWmstBase attWmstBase);
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/AttWmstBaseMapper.xml b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/AttWmstBaseMapper.xml
new file mode 100644
index 0000000..7f5a515
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/AttWmstBaseMapper.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.gistack.sm.sjztmd.mapper.AttWmstBaseMapper">
+
+
+    <update id="customizeUpdate">
+        UPDATE SJZT_MD."att_wmst_base"
+        SET "online" = #{attWmstBase.online},"res_guid" = #{attWmstBase.resGuid}
+        where "guid" = #{attWmstBase.guid}
+    </update>
+    <select id="getPage" resultType="cn.gistack.sm.sjztmd.vo.AttWmstBaseVO">
+        select awb.*,arb."name" as resName,ad."ad_name" as towns_name,ad2."ad_name" as county_name,ad3."ad_name" as city_name from sjzt_md."att_wmst_base" awb
+        left join sjzt_md."att_res_base" arb on arb."guid" = awb."res_guid"
+        left join sjzt_md."att_ad_base" ad on ad."ad_code" = arb."interior_ad_guid"
+        left join sjzt_md."att_ad_base" ad2 on ad2."ad_code" = ad."p_ad_code"
+        left join sjzt_md."att_ad_base" ad3 on ad3."ad_code" = ad2."p_ad_code"
+        <where>
+            <if test="attWmstBaseVO.adCode != null and attWmstBaseVO.adCode !=''">
+                and concat(ad."ad_code",ad2."ad_code",ad3."ad_code") like concat('%',#{attWmstBaseVO.adCode},'%')
+            </if>
+            <if test="attWmstBaseVO.online != null and attWmstBaseVO.online !=''">
+                and awb."online" = #{attWmstBaseVO.online}
+            </if>
+            <if test="attWmstBaseVO.sysResource != null and attWmstBaseVO.sysResource !=''">
+                and awb."sys_resource" = #{attWmstBaseVO.sysResource}
+            </if>
+            <if test="attWmstBaseVO.resName != null and attWmstBaseVO.resName !=''">
+                and arb."name" like concat('%',#{attWmstBaseVO.resName},'%')
+            </if>
+        </where>
+
+    </select>
+</mapper>
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/TbProjectMapper.xml b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/TbProjectMapper.xml
index 2e66200..164b3ff 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/TbProjectMapper.xml
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/TbProjectMapper.xml
@@ -67,7 +67,7 @@
         <if test="vo.endTime!=null and vo.endTime!=''">
             and tb."check_date" &lt;= #{vo.endTime}
         </if>
-
+        order by city_code,county_code asc
     </select>
 
     <resultMap id="dto" type="cn.gistack.sm.sjztmd.dto.TbProjectDTO">
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/service/IAttWmstBaseService.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/service/IAttWmstBaseService.java
new file mode 100644
index 0000000..7e84a8f
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/service/IAttWmstBaseService.java
@@ -0,0 +1,11 @@
+package cn.gistack.sm.sjztmd.service;
+
+import cn.gistack.sm.sjztmd.entity.AttWmstBase;
+import cn.gistack.sm.sjztmd.vo.AttWmstBaseVO;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+
+public interface IAttWmstBaseService {
+	IPage<AttWmstBaseVO> getPage(IPage<AttWmstBaseVO> page, AttWmstBaseVO videoClassVO);
+
+	boolean customizeUpdate(AttWmstBase attWmstBase);
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/service/impl/AttWmstBaseServiceImpl.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/service/impl/AttWmstBaseServiceImpl.java
new file mode 100644
index 0000000..1612e47
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/service/impl/AttWmstBaseServiceImpl.java
@@ -0,0 +1,22 @@
+package cn.gistack.sm.sjztmd.service.impl;
+
+import cn.gistack.sm.sjztmd.entity.AttWmstBase;
+import cn.gistack.sm.sjztmd.mapper.AttWmstBaseMapper;
+import cn.gistack.sm.sjztmd.service.IAttWmstBaseService;
+import cn.gistack.sm.sjztmd.vo.AttWmstBaseVO;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+@Service
+public class AttWmstBaseServiceImpl extends ServiceImpl<AttWmstBaseMapper,AttWmstBase> implements IAttWmstBaseService {
+	@Override
+	public IPage<AttWmstBaseVO> getPage(IPage<AttWmstBaseVO> page, AttWmstBaseVO attWmstBaseVO) {
+		return page.setRecords(baseMapper.getPage(page,attWmstBaseVO));
+	}
+
+	@Override
+	public boolean customizeUpdate(AttWmstBase attWmstBase) {
+		return baseMapper.customizeUpdate(attWmstBase);
+	}
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/util/MyDateUtils.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/util/MyDateUtils.java
index 2907625..801fa47 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/util/MyDateUtils.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/util/MyDateUtils.java
@@ -24,8 +24,8 @@
 		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
 
 		try {
-			Date startDate = sdf.parse(StringUtil.format("{}-05-01",nowYear));
-			Date endDate = sdf.parse(StringUtil.format("{}-11-01",nowYear));
+			Date startDate = sdf.parse(StringUtil.format("{}-04-15",nowYear));
+			Date endDate = sdf.parse(StringUtil.format("{}-10-15",nowYear));
 
 			inSeason = today.after(startDate)&&today.before(endDate);
 			return inSeason;
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/vo/AttWmstBaseVO.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/vo/AttWmstBaseVO.java
new file mode 100644
index 0000000..dbcfdef
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/vo/AttWmstBaseVO.java
@@ -0,0 +1,14 @@
+package cn.gistack.sm.sjztmd.vo;
+
+import cn.gistack.sm.sjztmd.entity.AttWmstBase;
+import lombok.Data;
+
+@Data
+public class AttWmstBaseVO extends AttWmstBase {
+	private String resName;
+
+	private String adCode;
+	private String townsName;
+	private String countyName;
+	private String cityName;
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/controller/DownTemplateController.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/controller/DownTemplateController.java
index e848c52..190fc43 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/controller/DownTemplateController.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/controller/DownTemplateController.java
@@ -4,6 +4,7 @@
 
 import cn.gistack.sm.sjztmd.util.MyDateUtils;
 import cn.gistack.sm.sjztmd.word.service.ISjztmdService;
+import cn.gistack.sm.sjztmd.word.util.BriefReportUtil;
 import cn.gistack.sm.sjztmd.word.util.ExcelUtil;
 import cn.gistack.sm.sjztmd.word.util.WordUtil;
 import cn.gistack.sm.sjztmd.word.vo.*;
@@ -11,6 +12,7 @@
 import io.swagger.annotations.Api;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.springblade.core.tool.api.R;
 import org.springframework.core.io.InputStreamResource;
 import org.springframework.http.MediaType;
 import org.springframework.http.ResponseEntity;
@@ -43,6 +45,13 @@
 
 	private final ISjztmdService sjztmdService;
 
+	@GetMapping(value = "/getBriefReport")
+	public R getBriefReport() {
+		//获取总览、大中库、明细数据
+		List<TotalInfo> totalList = sjztmdService.getTotalInfo("");
+		return R.data(BriefReportUtil.formatTotalInfo(totalList));
+	}
+
 	@GetMapping("/download/{resGuid}")
 	public ResponseEntity genera(HttpServletResponse response, @PathVariable String resGuid) throws Exception {
 		HashMap<String,Object> obj = sjztmdService.getTbWordVO(resGuid);
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/util/BriefReportUtil.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/util/BriefReportUtil.java
new file mode 100644
index 0000000..8d08f52
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/util/BriefReportUtil.java
@@ -0,0 +1,78 @@
+package cn.gistack.sm.sjztmd.word.util;
+
+import cn.gistack.sm.sjztmd.word.vo.TotalInfo;
+import org.springblade.core.tool.utils.StringUtil;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @PROJECT_NAME: skjcmanager
+ * @DESCRIPTION: 报讯简报
+ * @USER: aix
+ * @DATE: 2024/5/10 10:54
+ */
+public class BriefReportUtil {
+
+	public static String formatTotalInfo(List<TotalInfo> totalList) {
+		int total = 0;
+		int big = 0;
+		int mid = 0;
+		int small = 0;
+		int dangerCountTotal = 0;
+		int overDangerCountTotal = 0;
+		List<String> smallList = new ArrayList<>();
+
+
+		for (int i = 0; i < totalList.size(); i++) {
+			TotalInfo totalInfo = totalList.get(i);
+			total += totalInfo.getCount_all();
+			big += totalInfo.getBig_all();
+			mid += totalInfo.getMid_all();
+			small += totalInfo.getSmall_all();
+			dangerCountTotal += totalInfo.getDanger_count_all();
+			overDangerCountTotal += totalInfo.getOver_danger_count_all();
+
+			if (totalInfo.getSmall_all() == 0) {
+				continue;
+			}
+
+			String smallRegionCout = StringUtil.format("{}{}座", totalInfo.getP_ad_name(), totalInfo.getSmall_all());
+			smallList.add(smallRegionCout);
+		}
+
+		String tm = new SimpleDateFormat("MM月dd日H时").format(new Date());
+		String hour = new SimpleDateFormat("H时").format(new Date());
+
+		if (total <= 0) {
+			return "暂无简报";
+		}
+
+		String resultStr = "今日{},全省共有{}座水库超汛限水位,其中{},均在平稳消落。全省水库持续安全运行。";
+		String dxskStr = "大型水库{}座";
+		String zxskStr = "中型水库{}座";
+		String xxskStr = "小型水库{}座";
+
+		String qzStr = "";
+
+		if (big > 0) {
+			dxskStr = StringUtil.format(dxskStr, big);
+			qzStr += StringUtil.isBlank(qzStr) ? dxskStr : "、" + dxskStr;
+		}
+		if (mid > 0) {
+			zxskStr = StringUtil.format(zxskStr, mid);
+			qzStr += StringUtil.isBlank(qzStr) ? zxskStr : "、" + zxskStr;
+		}
+		if (small > 0) {
+			xxskStr = StringUtil.format(xxskStr, small);
+			qzStr += StringUtil.isBlank(qzStr) ? xxskStr : "、" + xxskStr;
+		}
+
+		resultStr = StringUtil.format(resultStr, hour, total, qzStr);
+
+		return resultStr;
+	}
+
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/util/WordUtil.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/util/WordUtil.java
index c209699..04ab44a 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/util/WordUtil.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/util/WordUtil.java
@@ -4,6 +4,7 @@
 import cn.gistack.sm.sjztmd.word.vo.*;
 import com.deepoove.poi.XWPFTemplate;
 import com.deepoove.poi.data.NumbericRenderData;
+import org.springblade.core.tool.utils.StringUtil;
 
 import java.io.*;
 import java.util.ArrayList;
@@ -124,6 +125,8 @@
 		params.put("时间", overWord.getTm());
 		params.put("全省水库超汛限", overWord.getTotalInfo());
 		params.put("小型水库详情", overWord.getOverSmallInfo());
+		String dxStr = StringUtil.isNotBlank(overWord.getOverBigInfo()) ? "超汛限的水库的大型水库有:" : "";
+		params.put("超汛限的水库的大型水库有", dxStr);
 		params.put("大型水库详情", overWord.getOverBigInfo());
 		params.put("中型水库详情", overWord.getOverMidInfo());
 		params.put("省直水库详情", overWord.getProvinceInfo());
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/vo/OverWord.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/vo/OverWord.java
index 4224db9..a22c8cc 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/vo/OverWord.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/vo/OverWord.java
@@ -208,7 +208,7 @@
 		Double diffRz = Math.abs(szInfo.getDiff_rz());
 		String resNm = szInfo.getStcd();
 		String upOrDown = "";
-		if (diffRz>=0){
+		if (szInfo.getDiff_rz()>=0){
 			upOrDown = "上涨";
 		}else {
 			upOrDown = "下降";
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/feign/DataAbnormalWarnClient.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/feign/DataAbnormalWarnClient.java
index 88e2b72..7b7bf13 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/feign/DataAbnormalWarnClient.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/feign/DataAbnormalWarnClient.java
@@ -1,16 +1,33 @@
 package cn.gistack.sm.sms.feign;
 
 import cn.com.flaginfo.sdk.cmc.api.sms.send.SMSSendRequest;
+import cn.gistack.common.utils.SpringContextUtil;
 import cn.gistack.sm.sjztmd.entity.AttStBase;
 import cn.gistack.sm.sjztmd.service.*;
+import cn.gistack.sm.sjztods.constant.ZtApiUrlConstant;
+import cn.gistack.sm.sjztods.constant.ZtConfigConstant;
 import cn.gistack.sm.sms.util.SmsUtils;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.parser.Feature;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springblade.core.tenant.annotation.NonDS;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.ResponseEntity;
+import org.springframework.util.MultiValueMap;
 import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.client.RestTemplate;
 import springfox.documentation.annotations.ApiIgnore;
+
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.time.temporal.ChronoUnit;
 
 /**
  * @PROJECT_NAME: skjcmanager
@@ -38,6 +55,9 @@
 
 	@Autowired
 	private IAttResFlseLimService attResFlseLimService;
+
+	@Autowired
+	private RestTemplate restTemplate;
 
 	@Override
 	public void sendOperate(String tableName, String phones) {
@@ -68,6 +88,123 @@
 
 	}
 
+	@Override
+	public void sendOperateCZ(String phones, String rate) {
+
+		String url = "/services/1234567890ABCDEFGHIJKLMN/source_data_ssync_staus";
+
+		// 获取当前时间
+		LocalDateTime now = LocalDateTime.now();
+
+		// 减去一个小时
+		LocalDateTime oneHourAgo = now.minusHours(1);
+
+		// 调整为整点时间
+		LocalDateTime oneHourAgoRoundedDown = oneHourAgo.truncatedTo(ChronoUnit.HOURS);
+
+		// 获取整点时间的结束时间(该小时的最后一分钟)
+		LocalDateTime oneHourAgoRoundedDownEnd = oneHourAgoRoundedDown.plusHours(1).minusSeconds(1);
+
+		DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+		String startTime = formatter.format(oneHourAgoRoundedDown);
+		String endTime = formatter.format(oneHourAgoRoundedDownEnd);
+
+		String param = "?start_dt=" + startTime + "&end_dt=" + endTime + "&over_rate=" + rate;
+//		String param = "?start_dt=2024-04-30 10:00:00&end_dt=2024-04-30 10:59:59&over_rate=20";
+
+		JSONObject jsonObject = getZtData(param, url);
+		int code = jsonObject.getInteger("code");
+		if (code == 200) {
+			JSONArray jsonArray = jsonObject.getJSONObject("data").getJSONArray("data");
+			String str = "";
+
+			for (int i = 0; i < jsonArray.size(); i++) {
+				JSONObject data = jsonArray.getJSONObject(i);
+				String flag = data.getString("flag");
+				String title = data.getString("title");
+				String tm = data.getString("tm");
+				String rateB = data.getString("rate");
+
+				if ("".equals(str)) {
+					str += tm + flag + title + "数据比昨日少" + rateB;
+				} else {
+					str += ";" + tm + flag + title + "数据比昨日少" + rateB;
+				}
+			}
+
+			if (!str.equals("")) {
+				sendMsgByCZ(phones, str);
+			}
+//			else {
+//				jsonObject = getZtData(param, url);
+//				code = jsonObject.getInteger("code");
+//
+//				if (code == 200) {
+//					jsonArray = jsonObject.getJSONObject("data").getJSONArray("data");
+//					str = "";
+//
+//					for (int i = 0; i < jsonArray.size(); i++) {
+//						JSONObject data = jsonArray.getJSONObject(i);
+//						String flag = data.getString("flag");
+//						String title = data.getString("title");
+//						String tm = data.getString("tm");
+//						String rate = data.getString("rate");
+//
+//						str += tm + flag + title + "当前比例为:" + rate + ";";
+//					}
+//
+//					if (!str.equals("")) {
+//						sendMsgByCZ(phones, str);
+//					}
+//				}
+//			}
+
+
+		}
+	}
+
+
+	/**
+	 * 调用中台接口查询数据
+	 *
+	 * @param params
+	 * @param url
+	 * @return
+	 */
+	public JSONObject getZtData(String params, String url) {
+		// 获取环境
+		String activeProfile = SpringContextUtil.getActiveProfile();
+		if (activeProfile.equals("dev")){
+			url = ZtApiUrlConstant.url_prefix_dev + url;
+		}
+		if (activeProfile.equals("prod")){
+			url = ZtApiUrlConstant.url_prefix_prod + url;
+		}
+		if (activeProfile.equals("test")){
+			url = ZtApiUrlConstant.url_prefix_test + url;
+		}
+		//设置请求头
+		HttpHeaders headers = new HttpHeaders();
+		headers.add(ZtConfigConstant.header_key, ZtConfigConstant.header_value);
+		//封装请求头
+		HttpEntity<MultiValueMap<String, Object>> formEntity = new HttpEntity<MultiValueMap<String, Object>>(headers);
+		try {
+			//有请求头,有参数请求
+			ResponseEntity<String> responseEntity =
+				restTemplate.exchange(url + params,
+					HttpMethod.GET,
+					formEntity,
+					String.class);
+			// Feature.IgnoreNotMatch 保留null值的属性
+			JSONObject jsonObject = JSON.parseObject(responseEntity.getBody(), Feature.IgnoreNotMatch);
+			// 返回
+			return jsonObject;
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+
 	private void sendMsg(String tableName, String phones) {
 		SMSSendRequest request = new SMSSendRequest();
 		String [] phoness = phones.split(",");
@@ -79,4 +216,15 @@
 		}
 	}
 
+	private void sendMsgByCZ(String phones, String str) {
+		SMSSendRequest request = new SMSSendRequest();
+		String [] phoness = phones.split(",");
+		for (String n: phoness) {
+			request.setUserNumber(n);
+			request.setTemplateId("2431012277510");
+			request.setMessageContent("紧急通知:数据表异常,请立即检查数据源并填充缺失的数据!"+str);
+			SmsUtils.sendMsg(request);
+		}
+	}
+
 }
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/resources/word/doc/overFloodTemplate.docx b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/resources/word/doc/overFloodTemplate.docx
index efe3ffe..4df7fb7 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/resources/word/doc/overFloodTemplate.docx
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/resources/word/doc/overFloodTemplate.docx
Binary files differ
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-xxljob/pom.xml b/skjcmanager/skjcmanager-service/skjcmanager-xxljob/pom.xml
index eb64a2f..39d2311 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-xxljob/pom.xml
+++ b/skjcmanager/skjcmanager-service/skjcmanager-xxljob/pom.xml
@@ -63,6 +63,11 @@
             <artifactId>skjcmanager-user-api</artifactId>
             <version>3.0.1.RELEASE</version>
         </dependency>
+        <dependency>
+            <groupId>cn.gistack</groupId>
+            <artifactId>skjcmanager-resource-api</artifactId>
+            <version>3.0.1.RELEASE</version>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-xxljob/src/main/java/cn/gistack/job/executor/jobhandler/AlarmDayXxlJob.java b/skjcmanager/skjcmanager-service/skjcmanager-xxljob/src/main/java/cn/gistack/job/executor/jobhandler/AlarmDayXxlJob.java
index ef8f4ea..0a9ef42 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-xxljob/src/main/java/cn/gistack/job/executor/jobhandler/AlarmDayXxlJob.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-xxljob/src/main/java/cn/gistack/job/executor/jobhandler/AlarmDayXxlJob.java
@@ -7,6 +7,9 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
 /**
  * 告警定时任务执行器
  * @author zhongrj
@@ -29,7 +32,12 @@
 	public ReturnT<String> damSafetySyHandle(String param){
 		XxlJobLogger.log("开始执行任务...");
 		// 创建外呼任务
-		noticeClient.createAlarmNoticeTaskJobHandler("测压管水位大于校核洪水位","day","damSafetySyHandle");
+		ExecutorService executorService = Executors.newSingleThreadExecutor();
+		executorService.submit(() -> {
+			// 这里是你的异步任务逻辑
+			noticeClient.createAlarmNoticeTaskJobHandler("测压管水位大于校核洪水位","day","damSafetySyHandle");
+		});
+
 		XxlJobLogger.log("结束自动创建任务...");
 		// 返回
 		return ReturnT.SUCCESS;
@@ -45,7 +53,11 @@
 	public ReturnT<String> damSafetySyNoneHandle(String param){
 		XxlJobLogger.log("开始执行任务...");
 		// 创建外呼任务
-		noticeClient.createAlarmNoticeTaskJobHandler("渗压监测数据缺失","day","damSafetySyNoneHandle");
+		ExecutorService executorService = Executors.newSingleThreadExecutor();
+		executorService.submit(() -> {
+			// 这里是你的异步任务逻辑
+			noticeClient.createAlarmNoticeTaskJobHandler("渗压监测数据缺失","day","damSafetySyNoneHandle");
+		});
 		XxlJobLogger.log("结束自动创建任务...");
 		// 返回
 		return ReturnT.SUCCESS;
@@ -61,7 +73,12 @@
 	public ReturnT<String> damSafetySlNoneHandle(String param){
 		XxlJobLogger.log("开始执行任务...");
 		// 创建外呼任务
-		noticeClient.createAlarmNoticeTaskJobHandler("渗流监测数据缺失","day","damSafetySlNoneHandle");
+		ExecutorService executorService = Executors.newSingleThreadExecutor();
+		executorService.submit(() -> {
+			// 这里是你的异步任务逻辑
+			noticeClient.createAlarmNoticeTaskJobHandler("渗流监测数据缺失","day","damSafetySlNoneHandle");
+		});
+
 		XxlJobLogger.log("结束自动创建任务...");
 		// 返回
 		return ReturnT.SUCCESS;
@@ -77,7 +94,12 @@
 	public ReturnT<String> damSafetyWyNoneHandle(String param){
 		XxlJobLogger.log("开始执行任务...");
 		// 创建外呼任务
-		noticeClient.createAlarmNoticeTaskJobHandler("变形监测数据缺失","day","damSafetyWyNoneHandle");
+		ExecutorService executorService = Executors.newSingleThreadExecutor();
+		executorService.submit(() -> {
+			// 这里是你的异步任务逻辑
+			noticeClient.createAlarmNoticeTaskJobHandler("变形监测数据缺失","day","damSafetyWyNoneHandle");
+		});
+
 		XxlJobLogger.log("结束自动创建任务...");
 		// 返回
 		return ReturnT.SUCCESS;
@@ -94,7 +116,12 @@
 	public ReturnT<String> damSafetySyDataMissingHandle(String param){
 		XxlJobLogger.log("开始执行任务...");
 		// 创建外呼任务
-		noticeClient.createAlarmNoticeTaskJobHandler("渗压资料缺失","day","damSafetySyDataMissingHandle");
+		ExecutorService executorService = Executors.newSingleThreadExecutor();
+		executorService.submit(() -> {
+			// 这里是你的异步任务逻辑
+			noticeClient.createAlarmNoticeTaskJobHandler("渗压资料缺失","day","damSafetySyDataMissingHandle");
+		});
+
 		XxlJobLogger.log("结束自动创建任务...");
 		// 返回
 		return ReturnT.SUCCESS;
@@ -110,7 +137,12 @@
 	public ReturnT<String> damSafetyBxDataMissingHandle(String param){
 		XxlJobLogger.log("开始执行任务...");
 		// 创建外呼任务
-		noticeClient.createAlarmNoticeTaskJobHandler("变形资料缺失","day","damSafetyBxDataMissingHandle");
+		ExecutorService executorService = Executors.newSingleThreadExecutor();
+		executorService.submit(() -> {
+			// 这里是你的异步任务逻辑
+			noticeClient.createAlarmNoticeTaskJobHandler("变形资料缺失","day","damSafetyBxDataMissingHandle");
+		});
+
 		XxlJobLogger.log("结束自动创建任务...");
 		// 返回
 		return ReturnT.SUCCESS;
@@ -127,7 +159,12 @@
 	public ReturnT<String> damSafetySyLessThenPipeHandle(String param){
 		XxlJobLogger.log("开始执行任务...");
 		// 创建外呼任务
-		noticeClient.createAlarmNoticeTaskJobHandler("水位低于管底高程","day","damSafetySyLessThenPipeHandle");
+		ExecutorService executorService = Executors.newSingleThreadExecutor();
+		executorService.submit(() -> {
+			// 这里是你的异步任务逻辑
+			noticeClient.createAlarmNoticeTaskJobHandler("水位低于管底高程","day","damSafetySyLessThenPipeHandle");
+		});
+
 		XxlJobLogger.log("结束自动创建任务...");
 		// 返回
 		return ReturnT.SUCCESS;
@@ -143,7 +180,12 @@
 	public ReturnT<String> damSafetySyHigherThenNozzleHandle(String param){
 		XxlJobLogger.log("开始执行任务...");
 		// 创建外呼任务
-		noticeClient.createAlarmNoticeTaskJobHandler("水位大于管口高程","day","damSafetySyHigherThenNozzleHandle");
+		ExecutorService executorService = Executors.newSingleThreadExecutor();
+		executorService.submit(() -> {
+			// 这里是你的异步任务逻辑
+			noticeClient.createAlarmNoticeTaskJobHandler("水位大于管口高程","day","damSafetySyHigherThenNozzleHandle");
+		});
+
 		XxlJobLogger.log("结束自动创建任务...");
 		// 返回
 		return ReturnT.SUCCESS;
@@ -159,7 +201,12 @@
 	public ReturnT<String> damSafetySyHigherThenBdElevationHandle(String param){
 		XxlJobLogger.log("开始执行任务...");
 		// 创建外呼任务
-		noticeClient.createAlarmNoticeTaskJobHandler("水位大于坝顶高程","day","damSafetySyHigherThenBdElevationHandle");
+		ExecutorService executorService = Executors.newSingleThreadExecutor();
+		executorService.submit(() -> {
+			// 这里是你的异步任务逻辑
+			noticeClient.createAlarmNoticeTaskJobHandler("水位大于坝顶高程","day","damSafetySyHigherThenBdElevationHandle");
+		});
+
 		XxlJobLogger.log("结束自动创建任务...");
 		// 返回
 		return ReturnT.SUCCESS;
@@ -175,7 +222,12 @@
 	public ReturnT<String> damSafetySyHigherThenWaterLevelHandle(String param){
 		XxlJobLogger.log("开始执行任务...");
 		// 创建外呼任务
-		noticeClient.createAlarmNoticeTaskJobHandler("水位大于库水位","day","damSafetySyHigherThenWaterLevelHandle");
+		ExecutorService executorService = Executors.newSingleThreadExecutor();
+		executorService.submit(() -> {
+			// 这里是你的异步任务逻辑
+			noticeClient.createAlarmNoticeTaskJobHandler("水位大于库水位","day","damSafetySyHigherThenWaterLevelHandle");
+		});
+
 		XxlJobLogger.log("结束自动创建任务...");
 		// 返回
 		return ReturnT.SUCCESS;
@@ -192,7 +244,12 @@
 	public ReturnT<String> damSafetySyYellowChangeHandle(String param){
 		XxlJobLogger.log("开始执行任务...");
 		// 创建外呼任务
-		noticeClient.createAlarmNoticeTaskJobHandler("水位变幅黄色告警","day","damSafetySyYellowChangeHandle");
+		ExecutorService executorService = Executors.newSingleThreadExecutor();
+		executorService.submit(() -> {
+			// 这里是你的异步任务逻辑
+			noticeClient.createAlarmNoticeTaskJobHandler("水位变幅黄色告警","day","damSafetySyYellowChangeHandle");
+		});
+
 		XxlJobLogger.log("结束自动创建任务...");
 		// 返回
 		return ReturnT.SUCCESS;
@@ -208,7 +265,12 @@
 	public ReturnT<String> damSafetySyOrangeChangeHandle(String param){
 		XxlJobLogger.log("开始执行任务...");
 		// 创建外呼任务
-		noticeClient.createAlarmNoticeTaskJobHandler("水位变幅橙色告警","day","damSafetySyOrangeChangeHandle");
+		ExecutorService executorService = Executors.newSingleThreadExecutor();
+		executorService.submit(() -> {
+			// 这里是你的异步任务逻辑
+			noticeClient.createAlarmNoticeTaskJobHandler("水位变幅橙色告警","day","damSafetySyOrangeChangeHandle");
+		});
+
 		XxlJobLogger.log("结束自动创建任务...");
 		// 返回
 		return ReturnT.SUCCESS;
@@ -224,7 +286,12 @@
 	public ReturnT<String> damSafetyWyOver2Less5Handle(String param){
 		XxlJobLogger.log("开始执行任务...");
 		// 创建外呼任务
-		noticeClient.createAlarmNoticeTaskJobHandler("变形值大于2cm小于5cm","day","damSafetyWyOver2Less5Handle");
+		ExecutorService executorService = Executors.newSingleThreadExecutor();
+		executorService.submit(() -> {
+			// 这里是你的异步任务逻辑
+			noticeClient.createAlarmNoticeTaskJobHandler("变形值大于2cm小于5cm","day","damSafetyWyOver2Less5Handle");
+		});
+
 		XxlJobLogger.log("结束自动创建任务...");
 		// 返回
 		return ReturnT.SUCCESS;
@@ -241,7 +308,12 @@
 	public ReturnT<String> damSafetyWyOver5Less10Handle(String param){
 		XxlJobLogger.log("开始执行任务...");
 		// 创建外呼任务
-		noticeClient.createAlarmNoticeTaskJobHandler("变形值大于5cm小于10cm","day","damSafetyWyOver5Less10Handle");
+		ExecutorService executorService = Executors.newSingleThreadExecutor();
+		executorService.submit(() -> {
+			// 这里是你的异步任务逻辑
+			noticeClient.createAlarmNoticeTaskJobHandler("变形值大于5cm小于10cm","day","damSafetyWyOver5Less10Handle");
+		});
+
 		XxlJobLogger.log("结束自动创建任务...");
 		// 返回
 		return ReturnT.SUCCESS;
@@ -257,7 +329,12 @@
 	public ReturnT<String> damSafetySlOver5Less8Handle(String param){
 		XxlJobLogger.log("开始执行任务...");
 		// 创建外呼任务
-		noticeClient.createAlarmNoticeTaskJobHandler("渗流量一日大于5L小于8L连续3日增加","day","damSafetySlOver5Less8Handle");
+		ExecutorService executorService = Executors.newSingleThreadExecutor();
+		executorService.submit(() -> {
+			// 这里是你的异步任务逻辑
+			noticeClient.createAlarmNoticeTaskJobHandler("渗流量一日大于5L小于8L连续3日增加","day","damSafetySlOver5Less8Handle");
+		});
+
 		XxlJobLogger.log("结束自动创建任务...");
 		// 返回
 		return ReturnT.SUCCESS;
@@ -273,7 +350,12 @@
 	public ReturnT<String> damSafetySlOver8Less10Handle(String param){
 		XxlJobLogger.log("开始执行任务...");
 		// 创建外呼任务
-		noticeClient.createAlarmNoticeTaskJobHandler("渗流量一日大于8L小于10L连续3日增加","day","damSafetySlOver8Less10Handle");
+		ExecutorService executorService = Executors.newSingleThreadExecutor();
+		executorService.submit(() -> {
+			// 这里是你的异步任务逻辑
+			noticeClient.createAlarmNoticeTaskJobHandler("渗流量一日大于8L小于10L连续3日增加","day","damSafetySlOver8Less10Handle");
+		});
+
 		XxlJobLogger.log("结束自动创建任务...");
 		// 返回
 		return ReturnT.SUCCESS;
@@ -289,7 +371,12 @@
 	public ReturnT<String> videoOfflineHandle(String param){
 		XxlJobLogger.log("开始执行任务...");
 		// 创建外呼任务
-		noticeClient.createAlarmNoticeTaskJobHandler("视频信息接收不到","day","videoOfflineHandle");
+		ExecutorService executorService = Executors.newSingleThreadExecutor();
+		executorService.submit(() -> {
+			// 这里是你的异步任务逻辑
+			noticeClient.createAlarmNoticeTaskJobHandler("视频信息接收不到","day","videoOfflineHandle");
+		});
+
 		XxlJobLogger.log("结束自动创建任务...");
 		// 返回
 		return ReturnT.SUCCESS;
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-xxljob/src/main/java/cn/gistack/job/executor/jobhandler/DayReportFloodJob.java b/skjcmanager/skjcmanager-service/skjcmanager-xxljob/src/main/java/cn/gistack/job/executor/jobhandler/DayReportFloodJob.java
new file mode 100644
index 0000000..5e5bc75
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-xxljob/src/main/java/cn/gistack/job/executor/jobhandler/DayReportFloodJob.java
@@ -0,0 +1,85 @@
+package cn.gistack.job.executor.jobhandler;
+
+import cn.gistack.resource.feign.IOssClient;
+import cn.gistack.sm.dayReportFlood.entity.DayReportFlood;
+import cn.gistack.sm.dayReportFlood.feign.IDayReportFloodClient;
+import cn.gistack.sm.sjztmd.feign.ISjztMdClient;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.xxl.job.core.biz.model.ReturnT;
+import com.xxl.job.core.handler.annotation.XxlJob;
+import com.xxl.job.core.log.XxlJobLogger;
+import org.springblade.core.tool.utils.DateUtil;
+import org.springblade.core.tool.utils.StringUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.io.InputStreamResource;
+import org.springframework.stereotype.Component;
+
+import java.io.InputStream;
+import java.net.URLEncoder;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+/**
+ * 每日报汛定时器
+ */
+@Component
+public class DayReportFloodJob {
+	@Autowired
+	private ISjztMdClient sjztMdClient;
+
+	@Autowired
+	private IOssClient ossClient;
+
+	@Autowired
+	private IDayReportFloodClient dayReportFloodClient;
+
+	/**
+	 * 南科院Arima请求预测
+	 *
+	 * @param param
+	 * @return
+	 * @throws Exception
+	 */
+	@XxlJob("generateDayReportFloodHandle")
+	public ReturnT<String> predictNkyDataJobHandler(String param) {
+		XxlJobLogger.log("任务开始");
+		XxlJobLogger.log("定时器执行时间:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(DateUtil.now()));
+		XxlJobLogger.log("参数:" + param);
+		JSONObject jsonParam = JSON.parseObject(param);
+		String isShow = "";
+		if (jsonParam != null) {
+			isShow = jsonParam.getString("isShow");
+		} else {
+			isShow = "";
+		}
+
+
+		try {
+			//获取流
+			String filePath= sjztMdClient.generateDayReportFlood(isShow);
+			String time = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
+
+			XxlJobLogger.log("地址:" + filePath);
+			//保存进库中
+			DayReportFlood saveEntity = new DayReportFlood();
+			saveEntity.setTitle(time + "全省水库防汛情况");
+			saveEntity.setContent(time + "全省水库防汛情况");
+			saveEntity.setSource("系统生成");
+			saveEntity.setUrls(filePath);
+
+			boolean save = dayReportFloodClient.save(saveEntity);
+			if (save) {
+				XxlJobLogger.log("保存成功");
+			} else {
+				XxlJobLogger.log("保存失败");
+			}
+
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		XxlJobLogger.log("定时器执行结束时间:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(DateUtil.now()));
+		XxlJobLogger.log("结束任务...");
+		return ReturnT.SUCCESS;
+	}
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-xxljob/src/main/java/cn/gistack/job/executor/jobhandler/NkyXxlJob.java b/skjcmanager/skjcmanager-service/skjcmanager-xxljob/src/main/java/cn/gistack/job/executor/jobhandler/NkyXxlJob.java
index 8a96fb2..9ae441a 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-xxljob/src/main/java/cn/gistack/job/executor/jobhandler/NkyXxlJob.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-xxljob/src/main/java/cn/gistack/job/executor/jobhandler/NkyXxlJob.java
@@ -2,12 +2,19 @@
 
 import cn.gistack.job.executor.thread.MyThread;
 import cn.gistack.nky.fegin.INkyClient;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.xxl.job.core.biz.model.ReturnT;
 import com.xxl.job.core.handler.annotation.XxlJob;
 import com.xxl.job.core.log.XxlJobLogger;
 import lombok.AllArgsConstructor;
 import org.springblade.core.tool.utils.DateUtil;
 import org.springframework.stereotype.Component;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
 
 /**
  * 南科院预测数据定时器
@@ -212,4 +219,28 @@
 		return ReturnT.SUCCESS;
 	}
 
+
+
+
+	@XxlJob("initAlgorithmHandler")
+	public ReturnT<String> initAlgorithmHandler(String param) {
+		XxlJobLogger.log("定时器执行时间:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(DateUtil.now()));
+
+		JSONObject jsonParam = JSON.parseObject(param);
+		List<String> resList = new ArrayList<>();
+		if (jsonParam != null){
+			String resGuids = jsonParam.getString("resGuids");
+			resList = Arrays.asList(resGuids.split(","));
+		}
+
+		nkyClient.initAlgorithm(resList);
+
+
+		XxlJobLogger.log("定时器执行结束时间:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(DateUtil.now()));
+
+		return ReturnT.SUCCESS;
+	}
+
+
+
 }
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-xxljob/src/main/java/cn/gistack/job/executor/jobhandler/SendSmsXxlJob.java b/skjcmanager/skjcmanager-service/skjcmanager-xxljob/src/main/java/cn/gistack/job/executor/jobhandler/SendSmsXxlJob.java
index 0e955fc..a5806ba 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-xxljob/src/main/java/cn/gistack/job/executor/jobhandler/SendSmsXxlJob.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-xxljob/src/main/java/cn/gistack/job/executor/jobhandler/SendSmsXxlJob.java
@@ -64,4 +64,15 @@
 		return ReturnT.SUCCESS;
 	}
 
+	@XxlJob("sendOperateCZ")
+	public ReturnT<String> sendOperateCZ(String param) {
+		XxlJobLogger.log("开始执行任务...");
+		JSONObject jsonParam = JSON.parseObject(param);
+		String phones = jsonParam.getString("phones");
+		String rate = jsonParam.getString("rate");
+		dataAbnormalWarnClient.sendOperateCZ(phones, rate);
+		XxlJobLogger.log("结束执行任务...");
+		return ReturnT.SUCCESS;
+	}
+
 }
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-xxljob/src/main/java/cn/gistack/job/executor/jobhandler/UserXxlJob.java b/skjcmanager/skjcmanager-service/skjcmanager-xxljob/src/main/java/cn/gistack/job/executor/jobhandler/UserXxlJob.java
index f280f0f..7589e14 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-xxljob/src/main/java/cn/gistack/job/executor/jobhandler/UserXxlJob.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-xxljob/src/main/java/cn/gistack/job/executor/jobhandler/UserXxlJob.java
@@ -32,8 +32,8 @@
 		XxlJobLogger.log("开始用户同步任务...");
 		int retAddInt = attResManagePersonClient.syncharonization_add_user();
 		XxlJobLogger.log("新增用户:<span style='color:red'>" + retAddInt + "</span>");
-		int retupInt = attResManagePersonClient.syncharonization_update_user();
-		XxlJobLogger.log("修改用户:<span style='color:red'>" + retupInt + "</span>");
+//		int retupInt = attResManagePersonClient.syncharonization_update_user();
+//		XxlJobLogger.log("修改用户:<span style='color:red'>" + retupInt + "</span>");
 		XxlJobLogger.log("结束用户同步任务...");
 		return ReturnT.SUCCESS;
 	}

--
Gitblit v1.9.3