ke
2024-05-13 659d3e60c6fe5e5bcd8c4cbb3dd8077e29f13a38
Merge remote-tracking branch 'origin/jtdev' into jtdev

# Conflicts:
# skjcmanager/skjcmanager-ops-api/skjcmanager-resource-api/src/main/java/cn/gistack/resource/feign/IOssClient.java
# skjcmanager/skjcmanager-ops-api/skjcmanager-resource-api/src/main/java/cn/gistack/resource/feign/IOssClientFallback.java
# skjcmanager/skjcmanager-ops/skjcmanager-resource/src/main/java/cn/gistack/resource/feign/OssClient.java
45 files modified
41 files added
2667 ■■■■■ changed files
skjcmanager/skjcmanager-auth/src/main/java/cn/gistack/auth/granter/AccountPhoneTokenGranter.java 74 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-auth/src/main/java/cn/gistack/auth/granter/BladeTokenGranter.java 3 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-auth/src/main/java/cn/gistack/auth/service/BladeUserDetailsServiceImpl.java 36 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-common/src/main/java/cn/gistack/common/constant/LauncherConstant.java 4 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-ops-api/skjcmanager-resource-api/src/main/java/cn/gistack/resource/feign/IOssClient.java 15 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-ops-api/skjcmanager-resource-api/src/main/java/cn/gistack/resource/feign/IOssClientFallback.java 30 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-ops-api/skjcmanager-resource-api/src/main/java/cn/gistack/resource/vo/MyMultipartFile.java 65 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-ops/skjcmanager-resource/src/main/java/cn/gistack/resource/builder/oss/OssBuilder.java 6 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-ops/skjcmanager-resource/src/main/java/cn/gistack/resource/feign/OssClient.java 15 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-ops/skjcmanager-resource/src/main/java/cn/gistack/resource/mapper/TextualResearchAttachMapper.xml 1 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-ops/skjcmanager-resource/src/main/resources/application.yml 4 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-alerts-api/src/main/java/cn/gistack/alerts/alarmRule/vo/AlarmRecordVO.java 3 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/entity/RequestRecord.java 40 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/fegin/INkyClient.java 5 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/fegin/INkyClientFallback.java 5 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/requestpojo/BDDataPo.java 2 ●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/resultpojo/BaseCd.java 12 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/resultpojo/DataResChildrenPo.java 1 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/resultpojo/NkyBindDetailResult.java 21 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/resultpojo/ResDamMonitorResult.java 24 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/resultpojo/ZtResult.java 16 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/resultpojo/ZtResultPo2.java 22 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/dayReportFlood/entity/DayReportFlood.java 40 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/dayReportFlood/feign/IDayReportFloodClient.java 20 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/dayReportFlood/feign/IDayReportFloodClientFallback.java 24 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/dayReportFlood/vo/DayReportFloodVO.java 14 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sjztmd/feign/ISjztMdClient.java 19 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sjztmd/feign/ISjztMdClientFallback.java 23 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sms/feign/DataAbnormalWarnClientFallback.java 4 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sms/feign/IDataAbnormalWarnClient.java 4 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/alarmRule/mapper/AlarmRecordMapper.xml 25 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/NoticeHandle.java 101 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/NoticeStrategyImpl.java 2 ●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/feign/NkyClientImpl.java 93 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/mapper/RequestRecordMapper.java 15 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/service/INkyService.java 10 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/service/IRequestRecordService.java 7 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/service/IZtApiService.java 8 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/service/impl/AlarmGetServiceImpl.java 2 ●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/service/impl/NkyServiceImpl.java 92 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/service/impl/RequestRecordServiceImpl.java 11 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/service/impl/ZtApiServiceImpl.java 122 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/dayReportFlood/controller/DayReportFloodController.java 77 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/dayReportFlood/feign/DayReportFloodClientImpl.java 36 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/dayReportFlood/mapper/DayReportFloodMapper.java 13 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/dayReportFlood/mapper/DayReportFloodMapper.xml 21 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/dayReportFlood/service/IDayReportFloodService.java 17 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/dayReportFlood/service/impl/DayReportFloodServiceImpl.java 17 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/constant/HkConstant.java 22 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/constant/HkEventConstant.java 70 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/controller/HkController.java 5 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/controller/HkEventController.java 90 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/entity/HkEvent.java 124 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/mapper/HkEventMapper.java 20 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/mapper/HkEventMapper.xml 52 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/service/AsyncHkEventService.java 82 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/service/HkEventService.java 23 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/service/impl/HkEventServiceImpl.java 29 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/util/GetCameraUtils.java 24 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/vo/EventVO.java 2 ●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/vo/HkEventVO.java 59 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/controller/AttWmstBaseController.java 43 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/entity/AttWmstBase.java 93 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/entity/TbAttResPowerStation.java 4 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/feign/SjztMdClientImpl.java 96 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/AttResBaseMapper.xml 5 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/AttResManagePersonMapper.xml 2 ●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/AttWmstBaseMapper.java 18 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/AttWmstBaseMapper.xml 33 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/TbProjectMapper.xml 2 ●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/service/IAttWmstBaseService.java 11 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/service/impl/AttWmstBaseServiceImpl.java 22 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/util/MyDateUtils.java 4 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/vo/AttWmstBaseVO.java 14 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/controller/DownTemplateController.java 9 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/util/BriefReportUtil.java 78 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/util/WordUtil.java 3 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/vo/OverWord.java 2 ●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/feign/DataAbnormalWarnClient.java 148 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/resources/word/doc/overFloodTemplate.docx patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-xxljob/pom.xml 5 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-xxljob/src/main/java/cn/gistack/job/executor/jobhandler/AlarmDayXxlJob.java 121 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-xxljob/src/main/java/cn/gistack/job/executor/jobhandler/DayReportFloodJob.java 85 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-xxljob/src/main/java/cn/gistack/job/executor/jobhandler/NkyXxlJob.java 31 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-xxljob/src/main/java/cn/gistack/job/executor/jobhandler/SendSmsXxlJob.java 11 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-xxljob/src/main/java/cn/gistack/job/executor/jobhandler/UserXxlJob.java 4 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-auth/src/main/java/cn/gistack/auth/granter/AccountPhoneTokenGranter.java
New file
@@ -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);
    }
}
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);
    }
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),
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 地址
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;
}
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;
    }
}
skjcmanager/skjcmanager-ops-api/skjcmanager-resource-api/src/main/java/cn/gistack/resource/vo/MyMultipartFile.java
New file
@@ -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);
    }
}
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);
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;
    }
}
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>
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
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;
}
skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/entity/RequestRecord.java
New file
@@ -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;
}
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);
}
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) {
    }
}
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")){
skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/resultpojo/BaseCd.java
New file
@@ -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;
}
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; // 水库编码
skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/resultpojo/NkyBindDetailResult.java
New file
@@ -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;
}
skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/resultpojo/ResDamMonitorResult.java
New file
@@ -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;
}
skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/resultpojo/ZtResult.java
New file
@@ -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;
}
skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/resultpojo/ZtResultPo2.java
New file
@@ -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;
}
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/dayReportFlood/entity/DayReportFlood.java
New file
@@ -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;
}
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/dayReportFlood/feign/IDayReportFloodClient.java
New file
@@ -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);
}
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/dayReportFlood/feign/IDayReportFloodClientFallback.java
New file
@@ -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;
    }
}
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/dayReportFlood/vo/DayReportFloodVO.java
New file
@@ -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;
}
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sjztmd/feign/ISjztMdClient.java
New file
@@ -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;
}
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/sjztmd/feign/ISjztMdClientFallback.java
New file
@@ -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;
    }
}
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) {
    }
}
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);
}
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>
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;
    }
    /**
     * 保存告警记录信息
     *
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;
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);
//                    }
                }
            });
        });
    }
}
skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/mapper/RequestRecordMapper.java
New file
@@ -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> {
}
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);
}
skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/service/IRequestRecordService.java
New file
@@ -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> {
}
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);
}
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);
            }
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;
    }
}
skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/service/impl/RequestRecordServiceImpl.java
New file
@@ -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 {
}
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;
    }
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/dayReportFlood/controller/DayReportFloodController.java
New file
@@ -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)));
    }
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/dayReportFlood/feign/DayReportFloodClientImpl.java
New file
@@ -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);
    }
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/dayReportFlood/mapper/DayReportFloodMapper.java
New file
@@ -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);
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/dayReportFlood/mapper/DayReportFloodMapper.xml
New file
@@ -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>
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/dayReportFlood/service/IDayReportFloodService.java
New file
@@ -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);
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/dayReportFlood/service/impl/DayReportFloodServiceImpl.java
New file
@@ -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));
    }
}
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";
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/constant/HkEventConstant.java
New file
@@ -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");
    }};
}
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();
        /**
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");
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/entity/HkEvent.java
New file
@@ -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;
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/mapper/HkEventMapper.java
New file
@@ -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);
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/mapper/HkEventMapper.xml
New file
@@ -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>
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/service/AsyncHkEventService.java
New file
@@ -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;
    }
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/service/HkEventService.java
New file
@@ -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);
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/service/impl/HkEventServiceImpl.java
New file
@@ -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));
    }
}
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();
        /**
         * 组装请求参数
         */
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;
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/vo/HkEventVO.java
New file
@@ -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;
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/controller/AttWmstBaseController.java
New file
@@ -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);
    }
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/entity/AttWmstBase.java
New file
@@ -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;
}
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:审核通过)
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/feign/SjztMdClientImpl.java
New file
@@ -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("生成文件时发生错误。");
        }
    }
}
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"
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
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/AttWmstBaseMapper.java
New file
@@ -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);
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/AttWmstBaseMapper.xml
New file
@@ -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>
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">
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/service/IAttWmstBaseService.java
New file
@@ -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);
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/service/impl/AttWmstBaseServiceImpl.java
New file
@@ -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);
    }
}
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;
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/vo/AttWmstBaseVO.java
New file
@@ -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;
}
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);
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/util/BriefReportUtil.java
New file
@@ -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;
    }
}
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());
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 = "下降";
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);
        }
    }
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/resources/word/doc/overFloodTemplate.docx
Binary files differ
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>
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;
skjcmanager/skjcmanager-service/skjcmanager-xxljob/src/main/java/cn/gistack/job/executor/jobhandler/DayReportFloodJob.java
New file
@@ -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;
    }
}
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;
    }
}
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;
    }
}
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;
    }