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
| New file |
| | |
| | | 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); |
| | | } |
| | | } |
| | |
| | | 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); |
| | | } |
| | |
| | | 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; |
| | |
| | | |
| | | private final ICollectClient collectClient; |
| | | |
| | | // private final IPwdClient pwdClient; |
| | | private final IPwdClient pwdClient; |
| | | |
| | | @Override |
| | | @SneakyThrows |
| | |
| | | |
| | | 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), |
| | |
| | | /** |
| | | * nacos dev 地址 |
| | | */ |
| | | String NACOS_DEV_ADDR = "127.0.0.1:8848"; |
| | | String NACOS_DEV_ADDR = "127.0.0.1:8849"; |
| | | |
| | | /** |
| | | * nacos prod 地址 |
| | |
| | | |
| | | String NACOS_USERNAME = "nacos"; |
| | | |
| | | String NACOS_PASSWORD = "nacos"; |
| | | String NACOS_PASSWORD = "1qaz!QAZ"; |
| | | |
| | | /** |
| | | * nacos test 地址 |
| | |
| | | * |
| | | * @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 |
| | |
| | | // ,@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; |
| | | } |
| | |
| | | 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; |
| | | |
| | | /** |
| | | * 流程远程调用失败处理类 |
| | |
| | | } |
| | | |
| | | |
| | | // public R uploadQietu(HashMap<String,String> qietuHashMap,String resGuid) { |
| | | // return R.fail("远程调用失败"); |
| | | // } |
| | | |
| | | |
| | | @Override |
| | | public String uploadFile(String fileName, MultipartFile multipartFile) { |
| | | return null; |
| | | } |
| | | } |
| New file |
| | |
| | | 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); |
| | | } |
| | | } |
| | |
| | | */ |
| | | 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; |
| | |
| | | */ |
| | | 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); |
| | |
| | | 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; |
| | |
| | | |
| | | 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; |
| | | } |
| | | } |
| | |
| | | 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> |
| | |
| | | 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 |
| | |
| | | private String basGuids; |
| | | |
| | | private String resGuids; |
| | | |
| | | //测站名称 |
| | | private String cdNm; |
| | | } |
| New file |
| | |
| | | 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; |
| | | |
| | | } |
| | |
| | | |
| | | String FINISH_TASK = API_PREFIX + "finishTask"; |
| | | |
| | | String INIT_ALGORITHM = API_PREFIX + "initAlgorithm"; |
| | | |
| | | /** |
| | | * 获取arima预测结果 |
| | | * @param type |
| | |
| | | |
| | | @GetMapping(FINISH_TASK) |
| | | Boolean finishTask(@RequestParam("taskId") String taskId); |
| | | |
| | | @PostMapping(INIT_ALGORITHM) |
| | | void initAlgorithm(@RequestBody List<String> resList); |
| | | } |
| | |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public void initAlgorithm(List<String> resList) { |
| | | |
| | | } |
| | | |
| | | |
| | | } |
| | |
| | | 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")){ |
| New file |
| | |
| | | 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; |
| | | } |
| | |
| | | |
| | | private String res_reg_code; |
| | | private String cd;// 测站编码 |
| | | private String cd_nm;//测站名称 |
| | | |
| | | private String tm; |
| | | private String res_cd; // 水库编码 |
| New file |
| | |
| | | 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; |
| | | |
| | | |
| | | } |
| New file |
| | |
| | | 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; |
| | | |
| | | |
| | | } |
| New file |
| | |
| | | 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; |
| | | |
| | | } |
| New file |
| | |
| | | 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; |
| | | |
| | | } |
| New file |
| | |
| | | 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; |
| | | |
| | | } |
| New file |
| | |
| | | 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); |
| | | } |
| New file |
| | |
| | | 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; |
| | | } |
| | | } |
| New file |
| | |
| | | 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; |
| | | } |
| New file |
| | |
| | | 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; |
| | | } |
| New file |
| | |
| | | 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; |
| | | } |
| | | } |
| | |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public void sendOperateCZ(String phones, String rate) { |
| | | |
| | | } |
| | | } |
| | |
| | | |
| | | String API_PREFIX = "/client"; |
| | | String SEND_OPERATE = API_PREFIX + "/sendOperate"; |
| | | String SEND_OPERATE_CZ = API_PREFIX + "/sendOperateCZ"; |
| | | |
| | | /** |
| | | * 当有异常数据时,发送预警短信 |
| | |
| | | @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); |
| | | |
| | | } |
| | |
| | | <!--自定义分页列表查询--> |
| | | <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, |
| | |
| | | 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},'%') |
| | |
| | | #{item} |
| | | </foreach> |
| | | </if> |
| | | order by field(sar1.alarm_level,'红色预警','橙色预警','黄色预警','蓝色预警') |
| | | </select> |
| | | |
| | | <select id="getVODetail" resultType="cn.gistack.alerts.alarmRule.vo.AlarmRecordVO"> |
| | |
| | | <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> |
| | |
| | | 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"); |
| | |
| | | } |
| | | // 获取告警人员信息 |
| | | // 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); |
| | |
| | | String format = ""; |
| | | // 内容处理 |
| | | format = addAlarmContent(jsonArray, i, split, format); |
| | | // format = addAlarmContentV2(jsonData,split,format); |
| | | // 加入集合 |
| | | list.add(format); |
| | | } |
| | |
| | | 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; |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | /** |
| | | * 保存告警记录信息 |
| | | * |
| | |
| | | } |
| | | |
| | | jsonObject.put("type", type); |
| | | jsonObject.put("monitor",jsonObject.getString("diff_val")); |
| | | jsonObject.put("monitorData",jsonObject.getString("diff_val")); |
| | | array.add(jsonObject); |
| | | } |
| | | return array; |
| | |
| | | |
| | | 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; |
| | |
| | | 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 |
| | |
| | | private final IHstPredictService hstPredictService; |
| | | private final IAlarmGetService alarmGetService; |
| | | private final PatrolTaskClient patrolTaskClient; |
| | | private final IZtApiService ztApiService; |
| | | |
| | | |
| | | @Override |
| | |
| | | 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); |
| | | } |
| | |
| | | |
| | | 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); |
| | | // } |
| | | |
| | | } |
| | | }); |
| | | }); |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | 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> { |
| | | |
| | | |
| | | |
| | | } |
| | |
| | | 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 |
| | |
| | | * @param alarmGetPo |
| | | */ |
| | | AlarmGet alarmGetData(AlarmGetPo alarmGetPo); |
| | | |
| | | List<NkyBindDetailResult> getBindDetail(String resCd, String cd, String s); |
| | | |
| | | boolean bindEnable(JSONObject params); |
| | | |
| | | boolean bindParam(JSONObject bindParamParams); |
| | | } |
| New file |
| | |
| | | package cn.gistack.nky.service; |
| | | |
| | | import cn.gistack.nky.entity.RequestRecord; |
| | | import com.baomidou.mybatisplus.extension.service.IService; |
| | | |
| | | public interface IRequestRecordService extends IService<RequestRecord> { |
| | | } |
| | |
| | | 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; |
| | |
| | | List<DataResPo> getResSl(); |
| | | |
| | | List<DataResChildrenPo> getSl(); |
| | | |
| | | List<ResDamMonitorResult> getResDamMonitor(); |
| | | |
| | | List<BaseCd> getBaseCd(String code, String sy); |
| | | } |
| | |
| | | |
| | | 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); |
| | | } |
| | |
| | | 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; |
| | |
| | | @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/"; |
| | |
| | | //判定异常 |
| | | 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); |
| | | } |
| | | |
| | |
| | | @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); |
| | | } |
| | | |
| | |
| | | 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; |
| | | } |
| | | } |
| | | |
| | | /** |
| | |
| | | JSONObject jsonObject = JSONObject.parseObject(resultStr); |
| | | return jsonObject; |
| | | } |
| | | |
| | | |
| | | |
| | | } |
| New file |
| | |
| | | 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 { |
| | | } |
| | |
| | | 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; |
| | |
| | | */ |
| | | 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 |
| | |
| | | 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 |
| | |
| | | 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) { |
| | |
| | | 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) { |
| | |
| | | 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; |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | 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))); |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | 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); |
| | | } |
| | | } |
| New file |
| | |
| | | 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); |
| | | } |
| New file |
| | |
| | | <?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 >= #{vo.startTime} |
| | | </if> |
| | | <if test="vo.endTime != null and vo.endTime !='' "> |
| | | AND create_time <= #{vo.endTime} |
| | | </if> |
| | | order by create_time desc |
| | | </select> |
| | | </mapper> |
| New file |
| | |
| | | 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); |
| | | } |
| New file |
| | |
| | | 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)); |
| | | } |
| | | } |
| | |
| | | /** |
| | | * 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"; |
| | | |
| | | |
| | | /** |
| | |
| | | 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"; |
| New file |
| | |
| | | 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"); |
| | | }}; |
| | | } |
| | |
| | | HkConstant.previewURLs, |
| | | hk.getCameraIndexCode(), |
| | | ProtocolConstant.WS, |
| | | null==hk.getTransmode()?1:hk.getTransmode(), |
| | | expand, |
| | | null==hk.getStreamType()?1:hk.getStreamType()); |
| | | if (null!=result) { |
| | |
| | | HkConstant.previewURLs, |
| | | hk.getCameraIndexCode(), |
| | | hk.getProtocol(), |
| | | null==hk.getTransmode()?1:hk.getTransmode(), |
| | | expand, |
| | | null==hk.getStreamType()?1:hk.getStreamType()); |
| | | if (null!=result) { |
| | |
| | | HkConstant.previewURLs, |
| | | hk.getCameraIndexCode(), |
| | | ProtocolConstant.HLS, |
| | | null==hk.getTransmode()?1:hk.getTransmode(), |
| | | expand, |
| | | null==hk.getStreamType()?1:hk.getStreamType()); |
| | | if (null!=result) { |
| | |
| | | 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(); |
| | |
| | | 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(); |
| | | |
| | | /** |
| | |
| | | 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.*; |
| | | |
| | |
| | | @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); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 海康视频事件订阅 |
| | |
| | | */ |
| | | @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); |
| | |
| | | */ |
| | | @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); |
| | | // 查询海康设备列表并返回 |
| | |
| | | */ |
| | | @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); |
| | | // 查询海康设备列表并返回 |
| | |
| | | */ |
| | | @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"); |
| New file |
| | |
| | | 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; |
| | | } |
| New file |
| | |
| | | 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); |
| | | } |
| New file |
| | |
| | | <?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') >= #{hkEvent.startTime} |
| | | </if> |
| | | <if test="hkEvent.endTime !=null and hkEvent.endTime !=''"> |
| | | AND DATE_FORMAT(she.send_time,'%Y-%m-%d') <= #{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> |
| New file |
| | |
| | | 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; |
| | | } |
| | | } |
| New file |
| | |
| | | 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); |
| | | } |
| New file |
| | |
| | | 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)); |
| | | } |
| | | } |
| | |
| | | // 秘钥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地址 |
| | |
| | | * @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) { |
| | | /** |
| | | * 组装请求参数 |
| | | */ |
| | |
| | | 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); |
| | | } |
| | |
| | | * 组装请求参数 |
| | | */ |
| | | 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()); |
| | |
| | | * @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(); |
| | | /** |
| | | * 组装请求参数 |
| | | */ |
| | |
| | | private Integer type; |
| | | |
| | | /** |
| | | * 事件类型 区域入侵:131588,徘徊侦测:131590 视频丢失:131329 折线警戒面:131611 |
| | | * 事件类型 视频丢失:131329,视频遮挡:131330,移动侦测:131331,越界侦测:131585,区域入侵:131588,徘徊侦测:131590,人员聚集:131593 |
| | | */ |
| | | private String eventTypes; |
| | | |
| New file |
| | |
| | | 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; |
| | | } |
| New file |
| | |
| | | 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); |
| | | } |
| | | |
| | | } |
| New file |
| | |
| | | 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; |
| | | |
| | | |
| | | } |
| | |
| | | */ |
| | | @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:审核通过) |
| New file |
| | |
| | | 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("生成文件时发生错误。"); |
| | | } |
| | | } |
| | | } |
| | |
| | | <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, |
| | |
| | | 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" |
| | |
| | | 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 |
| New file |
| | |
| | | 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); |
| | | } |
| New file |
| | |
| | | <?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> |
| | |
| | | <if test="vo.endTime!=null and vo.endTime!=''"> |
| | | and tb."check_date" <= #{vo.endTime} |
| | | </if> |
| | | |
| | | order by city_code,county_code asc |
| | | </select> |
| | | |
| | | <resultMap id="dto" type="cn.gistack.sm.sjztmd.dto.TbProjectDTO"> |
| New file |
| | |
| | | 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); |
| | | } |
| New file |
| | |
| | | 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); |
| | | } |
| | | } |
| | |
| | | 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; |
| New file |
| | |
| | | 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; |
| | | } |
| | |
| | | |
| | | 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.*; |
| | |
| | | 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; |
| | |
| | | |
| | | 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); |
| New file |
| | |
| | | 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; |
| | | } |
| | | |
| | | } |
| | |
| | | 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; |
| | |
| | | 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()); |
| | |
| | | Double diffRz = Math.abs(szInfo.getDiff_rz()); |
| | | String resNm = szInfo.getStcd(); |
| | | String upOrDown = ""; |
| | | if (diffRz>=0){ |
| | | if (szInfo.getDiff_rz()>=0){ |
| | | upOrDown = "上涨"; |
| | | }else { |
| | | upOrDown = "下降"; |
| | |
| | | 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 |
| | |
| | | |
| | | @Autowired |
| | | private IAttResFlseLimService attResFlseLimService; |
| | | |
| | | @Autowired |
| | | private RestTemplate restTemplate; |
| | | |
| | | @Override |
| | | public void sendOperate(String tableName, String phones) { |
| | |
| | | |
| | | } |
| | | |
| | | @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(","); |
| | |
| | | } |
| | | } |
| | | |
| | | 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); |
| | | } |
| | | } |
| | | |
| | | } |
| | |
| | | <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> |
| | |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import java.util.concurrent.ExecutorService; |
| | | import java.util.concurrent.Executors; |
| | | |
| | | /** |
| | | * 告警定时任务执行器 |
| | | * @author zhongrj |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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; |
| New file |
| | |
| | | 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; |
| | | } |
| | | } |
| | |
| | | |
| | | 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; |
| | | |
| | | /** |
| | | * 南科院预测数据定时器 |
| | |
| | | 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; |
| | | } |
| | | |
| | | |
| | | |
| | | } |
| | |
| | | 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; |
| | | } |
| | | |
| | | } |
| | |
| | | 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; |
| | | } |