skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/entity/DamAlarmRecord.java
New file @@ -0,0 +1,77 @@ package cn.gistack.nky.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; import 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-07-25 */ @Data @TableName( value = "NKY_DAM_ALARM_RECORD") @ApiModel(value = "DamAlarmRecord对象", description = "DamAlarmRecord对象") public class DamAlarmRecord implements Serializable { private static final long serialVersionUID = 1L; @TableId(value = "id", type = IdType.ASSIGN_ID) @ApiModelProperty(value = "主键") private String id; /** * 测点编号 */ @ApiModelProperty(value = "测点编号") private String pointId; /** * 水库编号 */ @ApiModelProperty(value = "水库编号") private String resGuid; /** * 测点安全评估等级 */ @ApiModelProperty(value = "测点安全评估等级") private Integer pointWarnLevel; /** * 测点告警信息 */ @ApiModelProperty(value = "测点告警信息") private String pointWarnInfo; /** * 测点值 */ @ApiModelProperty(value = "测点值") private String pointValue; /** * 采集时间 */ @ApiModelProperty(value = "采集时间") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date collecTime; /** * 创建时间 */ @ApiModelProperty(value = "创建时间") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date createTime; } skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/entity/DamAlarmRecordDetail.java
New file @@ -0,0 +1,72 @@ package cn.gistack.nky.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler; import com.fasterxml.jackson.annotation.JsonFormat; 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-07-25 */ @Data @TableName( value = "NKY_DAM_ALARM_RECORD_DETAIL",autoResultMap = true) @ApiModel(value = "DamAlarmRecordDetail对象", description = "DamAlarmRecordDetail对象") public class DamAlarmRecordDetail implements Serializable { private static final long serialVersionUID = 1L; @TableId(value = "id", type = IdType.ASSIGN_ID) @ApiModelProperty(value = "主键") private String id; /** * 大坝告警记录ID */ @ApiModelProperty(value = "大坝告警记录ID") private String DamAlarmRecordId; /** * 算法名称 */ @ApiModelProperty(value = "算法名称") private String algorithmName; /** * 算法告警等级 */ @ApiModelProperty(value = "算法告警等级") private Integer algorithmWarnLevel; /** * 算法告警信息 */ @ApiModelProperty(value = "算法告警信息") private String algorithmWarnInfo; /** * 算法告警依据 */ @ApiModelProperty(value = "算法告警依据") @TableField(value = "ALGORITHM_WARN_EXPLAIN",typeHandler = FastjsonTypeHandler.class) private String algorithmWarnExplain; /** * 创建时间 */ @ApiModelProperty(value = "创建时间") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date createTime; } skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/enums/DamEnum.java
New file @@ -0,0 +1,95 @@ package cn.gistack.nky.enums; import lombok.AllArgsConstructor; import lombok.Getter; /** * 大坝安全监测类型 南科院 枚举类 * * @author zhongrj * @apiNote 该枚举类对应南科院的资源编码,可根据业务需求自行拓展 */ @Getter @AllArgsConstructor public enum DamEnum { /** * 渗压 */ SY("1","seepage","/services/1234567890ABCDEFGHIJKLMN/realtime/op/sy/api"), /** * 渗流 */ SL("2","lsy" ,"/services/1234567890ABCDEFGHIJKLMN/realtime/op/sl/api"), /** * x 位移 */ X("3","deform_x","/services/1234567890ABCDEFGHIJKLMN/"), /** * y 位移 */ Y("4","deform_y","/services/1234567890ABCDEFGHIJKLMN/"), /** * z 位移 */ Z("5","deform_z","/services/1234567890ABCDEFGHIJKLMN/"), ; /** * 类型名称 */ final String key; /** * 类型编号 */ final String name; /** * API URL */ final String apiUrl; /** * 匹配枚举值 * * @param name 名称 * @return BladeUserEnum */ public static DamEnum ofName(String name) { if (name == null) { return null; } DamEnum[] values = DamEnum.values(); for (DamEnum damEnum : values) { if (damEnum.name.equals(name)) { return damEnum; } } return null; } /** * 匹配枚举值 * * @param type 类型 * @return BladeUserEnum */ public static DamEnum ofType(String type) { if (type == null) { return null; } DamEnum[] values = DamEnum.values(); for (DamEnum damEnum : values) { if (damEnum.key.equals(type)) { return damEnum; } } return null; } } skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/fegin/INkyClient.java
@@ -46,6 +46,9 @@ String INIT_ALGORITHM = API_PREFIX + "initAlgorithm"; // 实时测点输入 String POINT_VALUE_INLET = API_PREFIX + "pointValueInlet"; /** * 获取arima预测结果 * @param type @@ -106,4 +109,11 @@ @PostMapping(INIT_ALGORITHM) void initAlgorithm(@RequestBody List<String> resList); /** * 实时测点测值输入 * @param type 1:渗压,2:渗流,3:X位移,4:Y位移,5:Z位移 */ @GetMapping(POINT_VALUE_INLET) void pointValueInlet(@RequestParam("type") String type); } skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/fegin/INkyClientFallback.java
@@ -74,5 +74,8 @@ } @Override public void pointValueInlet(String type) { } } skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/requestpojo/RealStationReqPo.java
New file @@ -0,0 +1,12 @@ package cn.gistack.nky.requestpojo; import lombok.Data; /** * 实时测点请求对象参数 */ @Data public class RealStationReqPo { } skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/requestpojo/waterLevelInfoReqPo.java
New file @@ -0,0 +1,11 @@ package cn.gistack.nky.requestpojo; import lombok.Data; /** * 水位信息 */ @Data public class waterLevelInfoReqPo { } skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/resultpojo/DamAlarmRecordReqPo.java
New file @@ -0,0 +1,13 @@ package cn.gistack.nky.resultpojo; import cn.gistack.nky.vo.DamAlarmRecordVO; import lombok.Data; import java.util.ArrayList; import java.util.List; @Data public class DamAlarmRecordReqPo { private List<DamAlarmRecordVO> data = new ArrayList<>(); } skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/vo/DamAlarmRecordDetailVO.java
New file @@ -0,0 +1,9 @@ package cn.gistack.nky.vo; import cn.gistack.nky.entity.DamAlarmRecordDetail; import lombok.Data; @Data public class DamAlarmRecordDetailVO extends DamAlarmRecordDetail { } skjcmanager/skjcmanager-service-api/skjcmanager-nky-api/src/main/java/cn/gistack/nky/vo/DamAlarmRecordVO.java
New file @@ -0,0 +1,37 @@ package cn.gistack.nky.vo; import cn.gistack.nky.entity.DamAlarmRecord; import cn.gistack.nky.entity.DamAlarmRecordDetail; import lombok.Data; import java.util.ArrayList; import java.util.List; @Data public class DamAlarmRecordVO extends DamAlarmRecord { /** * 详情对象 */ private List<DamAlarmRecordDetail> damAlarmRecordDetail = new ArrayList<>(); /** * 类型 */ private Integer type; /** * 水库名称 */ private String resName; /** * 开始时间 */ private String startTime; /** * 结束时间 */ private String endTime; } skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/constant/ZtApiDataColumnConstant.java
@@ -487,7 +487,7 @@ */ public static List<String> videoOffline = new ArrayList<String>() {{ add("res_nm"); add("county_nm,town_nm,res_nm"); add("video_name"); }}; skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/NoticeStrategyImpl.java
@@ -197,15 +197,15 @@ /** * 策略6: 水位初次超汛限告警(当前测试发送站内信) * 策略6: 水位初次超汛限告警 * * @param arg1 * @param arg2 * @return */ public String waterFirstOverHandle(String arg1, String arg2) { String adCode = "421303000000"; // String adCode = null; // String adCode = "421303000000"; String adCode = null; // 查询当前策略对应的告警规则信息 AlarmRule alarmRule = alarmRuleService.getOne(new QueryWrapper<AlarmRule>().eq("rule_name", arg1)); // 调用中台服务接口查询数据 @@ -242,7 +242,7 @@ // 查询当前策略对应的告警规则信息 AlarmRule alarmRule = alarmRuleService.getOne(new QueryWrapper<AlarmRule>().eq("rule_name", arg1)); // 调用中台服务接口查询数据 JSONArray ztData = noticeHandle.getZtData("", ZtApiUrlConstant.res_over_z_small_over_api); JSONArray ztData = noticeHandle.getZtData("?diff_value=0", ZtApiUrlConstant.res_over_z_small_over_api); // 获取告警规则详情,判断告警类型(短信,电话,站内信) if (null != alarmRule) { // 查询告警详情信息 @@ -524,7 +524,7 @@ // 查询当前策略对应的告警规则信息 AlarmRule alarmRule = alarmRuleService.getOne(new QueryWrapper<AlarmRule>().eq("rule_name", arg1)); // 调用中台服务接口查询数据 JSONArray ztData = noticeHandle.getZtData("", ZtApiUrlConstant.alarm_rain_dy_api); JSONArray ztData = noticeHandle.getZtData("?is_over_z=1", ZtApiUrlConstant.alarm_rain_dy_api); // 获取告警规则详情,判断告警类型(短信,电话,站内信) if (null != alarmRule) { // 查询告警详情信息 @@ -555,7 +555,7 @@ // 查询当前策略对应的告警规则信息 AlarmRule alarmRule = alarmRuleService.getOne(new QueryWrapper<AlarmRule>().eq("rule_name", arg1)); // 调用中台服务接口查询数据 JSONArray ztData = noticeHandle.getZtData("", ZtApiUrlConstant.alarm_rain_by_api); JSONArray ztData = noticeHandle.getZtData("?is_over_z=1", ZtApiUrlConstant.alarm_rain_by_api); // 获取告警规则详情,判断告警类型(短信,电话,站内信) if (null != alarmRule) { // 查询告警详情信息 skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/sms/service/impl/SmsServiceImpl.java
@@ -980,7 +980,11 @@ return null; } /** * 视频数据接收不到 * @param smsRequestTemplate * @return */ @Override public Map<String, Object> sendSignMsgMergeCdVideo(SmsRequestTemplate smsRequestTemplate) { @@ -1031,7 +1035,7 @@ // 如果一人对应水库数量超过30个,则分批发送 List<List<Temp>> lists = Lists.partition(new ArrayList<>(infoList), 30); List<List<Temp>> lists = Lists.partition(new ArrayList<>(infoList), 15); for (List<Temp> list : lists) { List<AlarmRecordDetailVO> alarmRecordDetailList = new ArrayList<>(); // 遍历 skjcmanager/skjcmanager-service/skjcmanager-nky/pom.xml
@@ -31,10 +31,10 @@ <version>3.0.1.RELEASE</version> </dependency> <!--rabit消息队列--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> <!-- <dependency>--> <!-- <groupId>org.springframework.boot</groupId>--> <!-- <artifactId>spring-boot-starter-amqp</artifactId>--> <!-- </dependency>--> <dependency> <groupId>cn.gistack</groupId> <artifactId>skjcmanager-sm-api</artifactId> skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/constant/OpenApiConstant.java
New file @@ -0,0 +1,32 @@ package cn.gistack.nky.constant; /** * 南科院预警算法平台api 常量配置信息 */ public class OpenApiConstant { /** * 基础url */ public static final String BASE_URL = "http://42.194.236.87:9607"; /** * 水库信息注册接口 */ public static final String DAM_REGISTER_URL = BASE_URL + "/openApi/damRegister"; /** * 测点信息注册接口 */ public static final String POINT_REGISTER_URL = BASE_URL + "openApi/pointRegister"; /** * 实时测点测值输入接口 */ public static final String POINT_VALUE_INLET_URL = BASE_URL + "/openApi/pointValueInlet"; /** * serial_no 计数key */ public static final String serial_no_key = "nky:serial_no:"; } skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/constant/ZtConfigConstant.java
New file @@ -0,0 +1,29 @@ package cn.gistack.nky.constant; /** * 中台接口请求信息常量 * @author zhongrj * @since 2023-04-21 */ public class ZtConfigConstant { /** * 请求头 key */ public static final String header_key = "apiKey"; /** * 请求头 value */ public static final String header_value = "F1DBECD719108635189480CF60E6553ADB3109616426BD537F25A430DFC613B491A025C4A51E77FD08C6E5B7CBE05917A461286E7B6D69F1AB1B14F946149D2065B0C675F8FEDF4B9B05C1496881BC5A"; /** * 请求头url 前缀(prod) */ public static final String url_prefix = "http://10.42.6.192"; /** * 水位数据缺失 */ public static final String realtime_op_sy_api = url_prefix + "/services/1234567890ABCDEFGHIJKLMN/realtime/op/sy/api"; } skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/controller/DamAlarmRecordController.java
New file @@ -0,0 +1,99 @@ package cn.gistack.nky.controller; import cn.gistack.nky.entity.DamAlarmRecord; import cn.gistack.nky.service.DamAlarmRecordService; import cn.gistack.nky.vo.DamAlarmRecordVO; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; 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.util.Arrays; /** * 大坝告警记录控制层 * @author zhongrj * @date 2024-07-25 */ @RestController @AllArgsConstructor @RequestMapping("/damAlarmRecord/damAlarmRecord") public class DamAlarmRecordController{ private final DamAlarmRecordService damAlarmRecordService; /** * 分页列表查询 * * @param damAlarmRecord * @return */ @ApiOperation(value="告警记录-分页列表查询", notes="告警记录-分页列表查询") @GetMapping(value = "/list") public R queryPageList(DamAlarmRecord damAlarmRecord, Query query) { IPage<DamAlarmRecord> pageList = damAlarmRecordService.page(Condition.getPage(query), Condition.getQueryWrapper(damAlarmRecord)); return R.data(pageList); } /** * 自定义分页列表查询 * @param query * @param damAlarmRecord * @return */ @ApiOperation(value="告警记录-自定义分页列表查询", notes="告警记录-自定义分页列表查询") @GetMapping(value = "/page") public R selectAlarmPage(DamAlarmRecordVO damAlarmRecord, Query query) { return R.data(damAlarmRecordService.selectDamAlarmRecordPage(Condition.getPage(query),damAlarmRecord)); } /** * 添加 * * @param damAlarmRecord * @return */ @ApiOperation(value="告警记录-添加", notes="告警记录-添加") @PostMapping(value = "/add") public R add(@RequestBody DamAlarmRecord damAlarmRecord) { return R.data(damAlarmRecordService.save(damAlarmRecord)); } /** * 编辑 * * @param damAlarmRecord * @return */ @ApiOperation(value="告警记录-编辑", notes="告警记录-编辑") @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST}) public R edit(@RequestBody DamAlarmRecord damAlarmRecord) { return R.data(damAlarmRecordService.updateById(damAlarmRecord)); } /** * 通过id删除 * @param id * @return */ @ApiOperation(value="告警记录-通过id删除", notes="告警记录-通过id删除") @DeleteMapping(value = "/delete") public R delete(@RequestParam(name="id",required=true) String id) { return R.data(damAlarmRecordService.removeById(id)); } /** * 批量删除 * * @param ids * @return */ @ApiOperation(value="告警记录-批量删除", notes="告警记录-批量删除") @DeleteMapping(value = "/deleteBatch") public R deleteBatch(@RequestParam(name="ids",required=true) String ids) { return R.data(this.damAlarmRecordService.removeByIds(Arrays.asList(ids.split(",")))); } } skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/controller/DamAlarmRecordDetailController.java
New file @@ -0,0 +1,100 @@ package cn.gistack.nky.controller; import cn.gistack.nky.entity.DamAlarmRecordDetail; import cn.gistack.nky.service.DamAlarmRecordDetailService; import cn.gistack.nky.vo.DamAlarmRecordDetailVO; import com.baomidou.mybatisplus.core.metadata.IPage; import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; 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.util.Arrays; /** * 大坝告警记录详情控制层 * @author zhongrj * @date 2024-07-25 */ @RestController @AllArgsConstructor @RequestMapping("/damAlarmRecordDetail/damAlarmRecordDetail") public class DamAlarmRecordDetailController { private final DamAlarmRecordDetailService damAlarmRecordDetailService; /** * 分页列表查询 * * @param damAlarmRecordDetail * @return */ @ApiOperation(value="告警记录-分页列表查询", notes="告警记录-分页列表查询") @GetMapping(value = "/list") public R queryPageList(DamAlarmRecordDetail damAlarmRecordDetail, Query query) { IPage<DamAlarmRecordDetail> pageList = damAlarmRecordDetailService.page(Condition.getPage(query), Condition.getQueryWrapper(damAlarmRecordDetail)); return R.data(pageList); } /** * 自定义分页列表查询 * @param query * @param damAlarmRecordDetail * @return */ @ApiOperation(value="告警记录-自定义分页列表查询", notes="告警记录-自定义分页列表查询") @GetMapping(value = "/page") public R selectAlarmPage(DamAlarmRecordDetailVO damAlarmRecordDetail, Query query) { return R.data(damAlarmRecordDetailService.selectDamAlarmRecordDetailPage(Condition.getPage(query),damAlarmRecordDetail)); } /** * 添加 * * @param damAlarmRecordDetail * @return */ @ApiOperation(value="告警记录-添加", notes="告警记录-添加") @PostMapping(value = "/add") public R add(@RequestBody DamAlarmRecordDetail damAlarmRecordDetail) { return R.data(damAlarmRecordDetailService.save(damAlarmRecordDetail)); } /** * 编辑 * * @param damAlarmRecordDetail * @return */ @ApiOperation(value="告警记录-编辑", notes="告警记录-编辑") @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST}) public R edit(@RequestBody DamAlarmRecordDetail damAlarmRecordDetail) { return R.data(damAlarmRecordDetailService.updateById(damAlarmRecordDetail)); } /** * 通过id删除 * @param id * @return */ @ApiOperation(value="告警记录-通过id删除", notes="告警记录-通过id删除") @DeleteMapping(value = "/delete") public R delete(@RequestParam(name="id",required=true) String id) { return R.data(damAlarmRecordDetailService.removeById(id)); } /** * 批量删除 * * @param ids * @return */ @ApiOperation(value="告警记录-批量删除", notes="告警记录-批量删除") @DeleteMapping(value = "/deleteBatch") public R deleteBatch(@RequestParam(name="ids",required=true) String ids) { return R.data(this.damAlarmRecordDetailService.removeByIds(Arrays.asList(ids.split(",")))); } } skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/controller/OpenApiController.java
New file @@ -0,0 +1,53 @@ package cn.gistack.nky.controller; import cn.gistack.nky.service.DamAlarmRecordDetailService; import cn.gistack.nky.service.DamAlarmRecordService; import cn.gistack.nky.service.IOpenApiService; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springblade.core.tool.api.R; import org.springframework.web.bind.annotation.*; import java.util.List; /** * 南科院水库预警算法api调用 * @author zhongrj * @date 2024-07-25 */ @Slf4j @RestController @AllArgsConstructor @RequestMapping("/openApi/openApi") public class OpenApiController { private IOpenApiService openApiService; /** * 水库及测点信息注册-调用南科院接口 * @param resGuidList 水库编号集合 * @return */ @PostMapping("/waterAndPointRegister") public R waterAndPointRegister(@RequestBody List<String> resGuidList){ return R.status(openApiService.waterAndPointRegister(resGuidList)); } /** * 实时测点测值输入-调用南科院接口 * @return */ @GetMapping("/realStationInput") public void realStationInput(){ openApiService.realStationInput("1"); } /** * 预警回调 * @param data * @return */ @PostMapping("/alarmCallBack") public R alarmCallBack(@RequestBody String data){ return R.status(openApiService.alarmCallBack(data)); } } skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/feign/NkyClientImpl.java
@@ -22,6 +22,7 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import springfox.documentation.annotations.ApiIgnore; @@ -42,6 +43,7 @@ private final IAlarmGetService alarmGetService; private final PatrolTaskClient patrolTaskClient; private final IZtApiService ztApiService; private final IOpenApiService openApiService; @Override @@ -227,4 +229,13 @@ }); } /** * 实时测点测值输入 * @param type 1:渗压,2:渗流,3:X位移,4:Y位移,5:Z位移 */ @GetMapping(POINT_VALUE_INLET) public void pointValueInlet(String type){ openApiService.realStationInput(type); } } skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/mapper/DamAlarmRecordDetailMapper.java
New file @@ -0,0 +1,26 @@ package cn.gistack.nky.mapper; import cn.gistack.nky.entity.DamAlarmRecordDetail; import cn.gistack.nky.vo.DamAlarmRecordDetailVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import org.apache.ibatis.annotations.Param; import java.util.List; /** * 大坝告警记录mapper映射层 * @author zhongrj * @date 2024-07-25 */ public interface DamAlarmRecordDetailMapper extends BaseMapper<DamAlarmRecordDetail> { /** * 自定义分页列表查询 * @param page * @param damAlarmRecordDetail * @return */ List<DamAlarmRecordDetailVO> selectDamAlarmRecordDetailPage(IPage<DamAlarmRecordDetailVO> page, @Param("damAlarmRecordDetail") DamAlarmRecordDetailVO damAlarmRecordDetail); } skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/mapper/DamAlarmRecordDetailMapper.xml
New file @@ -0,0 +1,12 @@ <?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.nky.mapper.DamAlarmRecordDetailMapper"> <!--自定义分页列表查询--> <select id="selectDamAlarmRecordDetailPage" resultType="cn.gistack.nky.vo.DamAlarmRecordDetailVO"> select sar.* from YWXT.nky_dam_alarm_record_detail sar </select> </mapper> skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/mapper/DamAlarmRecordMapper.java
New file @@ -0,0 +1,26 @@ package cn.gistack.nky.mapper; import cn.gistack.nky.entity.DamAlarmRecord; import cn.gistack.nky.vo.DamAlarmRecordVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import org.apache.ibatis.annotations.Param; import java.util.List; /** * 大坝告警记录mapper映射层 * @author zhongrj * @date 2024-07-25 */ public interface DamAlarmRecordMapper extends BaseMapper<DamAlarmRecord> { /** * 自定义分页列表查询 * @param page * @param damAlarmRecord * @return */ List<DamAlarmRecordVO> selectDamAlarmRecordPage(IPage<DamAlarmRecordVO> page, @Param("damAlarmRecord") DamAlarmRecordVO damAlarmRecord); } skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/mapper/DamAlarmRecordMapper.xml
New file @@ -0,0 +1,47 @@ <?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.nky.mapper.DamAlarmRecordMapper"> <!--自定义分页列表查询--> <select id="selectDamAlarmRecordPage" resultType="cn.gistack.nky.vo.DamAlarmRecordVO"> select sar.*, a."name" as reservoirName,a."res_reg_code" as resRegCode,a."eng_scal" as engScal, 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 from YWXT.nky_dam_alarm_record sar left join SJZT_MD."att_res_base" a on a."guid" = sar.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" LEFT JOIN SJZT_MD."rel_res_bas_loc" rrbl ON rrbl."res_guid" = sar.res_guid 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="damAlarmRecord.type == '渗压监测'"> LEFT JOIN SJZT_MD."att_cd_base" acb on acb."cd" = sar.point_id and acb."cd_type" = 'sy' and acb."res_cd" = sar.res_guid </if> <if test="damAlarmRecord.type == '渗流监测'"> LEFT JOIN SJZT_MD."att_cd_base" acb on acb."cd" = sar.point_id and acb."cd_type" = 'sl' and acb."res_cd" = sar.res_guid </if> <if test="damAlarmRecord.type == '变形监测'"> LEFT JOIN SJZT_MD."att_wy_cd_base" acb on acb."cd" = sar.point_id and acb."cd_type" = 'wy' and acb."res_cd" = sar.res_guid </if> where sar.is_deleted = 0 <if test="damAlarmRecord.resName!=null and damAlarmRecord.resName!=''"> and a."name" like concat('%',#{damAlarmRecord.resName},'%') </if> <if test="damAlarmRecord.startTime!=null and damAlarmRecord.startTime!=''"> and sar.create_time >= #{damAlarmRecord.startTime} </if> <if test="damAlarmRecord.endTime!=null and damAlarmRecord.endTime!=''"> and sar.create_time <= #{damAlarmRecord.endTime} </if> </select> </mapper> skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/mapper/OpenApiMapper.java
New file @@ -0,0 +1,18 @@ package cn.gistack.nky.mapper; import com.baomidou.dynamic.datasource.annotation.DS; import org.apache.ibatis.annotations.Param; import java.util.List; import java.util.Map; public interface OpenApiMapper{ /** * 查询水库信息 * @param resGuidList * @return */ @DS("zt") List<Map<String, String>> getResInfo(@Param("list") List<String> resGuidList); } skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/mapper/OpenApiMapper.xml
New file @@ -0,0 +1,46 @@ <?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.nky.mapper.OpenApiMapper"> <!--查询水库信息--> <select id="getResInfo" resultType="java.util.Map"> select RES_CODE, RES_NAME, ifnull(ADDVNM2,'') ADDVNM2, ifnull(ADDVNM3,'') ADDVNM3, ifnull(DAM_TOP_ELEVATION,'') DAM_TOP_ELEVATION from ( select a."guid" as RES_CODE, a."name" as RES_NAME, case when b."ad_grad" = 3 THEN b."ad_name" when c."ad_grad" = 3 THEN C."ad_name" END AS ADDVNM3, 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 ADDVNM2, CONCAT('', arwb."dam_top_elevation") as DAM_TOP_ELEVATION from SJZT_MD."att_res_base" a left join SJZT_MD."att_res_water_block" arwb ON a."guid" = arwb."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> <choose> <when test="list.size()>0 and list!=null"> a."guid" in <foreach collection="list" item="resGuid" open="(" close=")" separator=","> #{resGuid} </foreach> </when> <otherwise> a."guid" in ('') </otherwise> </choose> </where> ) </select> </mapper> skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/rabbitmq/MyRabbitReceiver.java
@@ -1,36 +1,36 @@ package cn.gistack.nky.rabbitmq; import cn.gistack.nky.entity.AlarmGet; import cn.gistack.nky.service.IAlarmGetService; import com.alibaba.fastjson.JSONObject; import lombok.AllArgsConstructor; import org.springblade.core.tool.utils.DateUtil; import org.springframework.amqp.core.Message; import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.stereotype.Component; import java.text.SimpleDateFormat; /** * @PROJECT_NAME: skjcmanager * @DESCRIPTION: 接收南科院消息队列 * @USER: aix * @DATE: 2023/8/3 15:54 */ @Component @AllArgsConstructor public class MyRabbitReceiver { private final IAlarmGetService alarmGetService; @RabbitListener(queues = "alarm") public void processMessage(Message message) { System.out.println("收到消息"+new String(message.getBody())); AlarmGet alarmGet = JSONObject.parseObject(new String(message.getBody()), AlarmGet.class); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String format = sdf.format(DateUtil.now()); alarmGet.setCreateTime(format); alarmGetService.save(alarmGet); } } //package cn.gistack.nky.rabbitmq; // //import cn.gistack.nky.entity.AlarmGet; //import cn.gistack.nky.service.IAlarmGetService; //import com.alibaba.fastjson.JSONObject; //import lombok.AllArgsConstructor; //import org.springblade.core.tool.utils.DateUtil; //import org.springframework.amqp.core.Message; //import org.springframework.amqp.rabbit.annotation.RabbitListener; //import org.springframework.stereotype.Component; // //import java.text.SimpleDateFormat; // ///** // * @PROJECT_NAME: skjcmanager // * @DESCRIPTION: 接收南科院消息队列 // * @USER: aix // * @DATE: 2023/8/3 15:54 // */ //@Component //@AllArgsConstructor //public class MyRabbitReceiver { // private final IAlarmGetService alarmGetService; // // @RabbitListener(queues = "alarm") // public void processMessage(Message message) { // System.out.println("收到消息"+new String(message.getBody())); // AlarmGet alarmGet = JSONObject.parseObject(new String(message.getBody()), AlarmGet.class); // // SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // String format = sdf.format(DateUtil.now()); // alarmGet.setCreateTime(format); // alarmGetService.save(alarmGet); // } // //} skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/service/DamAlarmRecordDetailService.java
New file @@ -0,0 +1,22 @@ package cn.gistack.nky.service; import cn.gistack.nky.entity.DamAlarmRecordDetail; import cn.gistack.nky.vo.DamAlarmRecordDetailVO; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; /** * 大坝告警记录详情服务层 * @author zhongrj * @date 2024-07-25 */ public interface DamAlarmRecordDetailService extends IService<DamAlarmRecordDetail> { /** * 自定义分页列表查询 * @param page * @param damAlarmRecordDetail * @return */ IPage<DamAlarmRecordDetailVO> selectDamAlarmRecordDetailPage(IPage<DamAlarmRecordDetailVO> page, DamAlarmRecordDetailVO damAlarmRecordDetail); } skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/service/DamAlarmRecordService.java
New file @@ -0,0 +1,22 @@ package cn.gistack.nky.service; import cn.gistack.nky.entity.DamAlarmRecord; import cn.gistack.nky.vo.DamAlarmRecordVO; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; /** * 大坝告警记录服务层 * @author zhongrj * @date 2024-07-25 */ public interface DamAlarmRecordService extends IService<DamAlarmRecord> { /** * 自定义分页列表查询 * @param page * @param damDamAlarmRecord * @return */ IPage<DamAlarmRecordVO> selectDamAlarmRecordPage(IPage<DamAlarmRecordVO> page, DamAlarmRecordVO damDamAlarmRecord); } skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/service/IOpenApiService.java
New file @@ -0,0 +1,32 @@ package cn.gistack.nky.service; import java.util.List; /** * 南科院水库预警算法api调用服务接口 * @author zhongrj * @date 2024-07-25 */ public interface IOpenApiService { /** * 水库及测点信息注册-调用南科院接口 * @param resGuidList 水库编号集合 * @return */ boolean waterAndPointRegister(List<String> resGuidList); /** * 实时测点测值输入-调用南科院接口 * @param type * @return */ void realStationInput(String type); /** * 预警回调 * @param data * @return */ boolean alarmCallBack(String data); } skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/service/impl/DamAlarmRecordDetailServiceImpl.java
New file @@ -0,0 +1,31 @@ package cn.gistack.nky.service.impl; import cn.gistack.nky.entity.DamAlarmRecordDetail; import cn.gistack.nky.mapper.DamAlarmRecordDetailMapper; import cn.gistack.nky.service.DamAlarmRecordDetailService; import cn.gistack.nky.vo.DamAlarmRecordDetailVO; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; /** * 大坝告警记录详情服务实现层 * @author zhongrj * @date 2024-07-25 */ @Service public class DamAlarmRecordDetailServiceImpl extends ServiceImpl<DamAlarmRecordDetailMapper, DamAlarmRecordDetail> implements DamAlarmRecordDetailService { /** * 自定义分页列表查询 * @param page * @param damAlarmRecordDetail * @return */ @Override public IPage<DamAlarmRecordDetailVO> selectDamAlarmRecordDetailPage(IPage<DamAlarmRecordDetailVO> page, DamAlarmRecordDetailVO damAlarmRecordDetail) { return page.setRecords(baseMapper.selectDamAlarmRecordDetailPage(page,damAlarmRecordDetail)); } } skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/service/impl/DamAlarmRecordServiceImpl.java
New file @@ -0,0 +1,31 @@ package cn.gistack.nky.service.impl; import cn.gistack.nky.entity.DamAlarmRecord; import cn.gistack.nky.mapper.DamAlarmRecordMapper; import cn.gistack.nky.service.DamAlarmRecordService; import cn.gistack.nky.vo.DamAlarmRecordVO; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; /** * 大坝告警记录服务实现层 * @author zhongrj * @date 2024-07-25 */ @Service public class DamAlarmRecordServiceImpl extends ServiceImpl<DamAlarmRecordMapper, DamAlarmRecord> implements DamAlarmRecordService { /** * 自定义分页列表查询 * @param page * @param alarmRecord * @return */ @Override public IPage<DamAlarmRecordVO> selectDamAlarmRecordPage(IPage<DamAlarmRecordVO> page, DamAlarmRecordVO alarmRecord) { return page.setRecords(baseMapper.selectDamAlarmRecordPage(page,alarmRecord)); } } skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/java/cn/gistack/nky/service/impl/OpenApiServiceImpl.java
New file @@ -0,0 +1,295 @@ package cn.gistack.nky.service.impl; import cn.gistack.nky.constant.OpenApiConstant; import cn.gistack.nky.constant.ZtConfigConstant; import cn.gistack.nky.entity.DamAlarmRecord; import cn.gistack.nky.entity.DamAlarmRecordDetail; import cn.gistack.nky.enums.DamEnum; import cn.gistack.nky.mapper.OpenApiMapper; import cn.gistack.nky.service.DamAlarmRecordDetailService; import cn.gistack.nky.service.DamAlarmRecordService; import cn.gistack.nky.service.IOpenApiService; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.fasterxml.jackson.databind.ObjectMapper; import lombok.extern.slf4j.Slf4j; import org.springblade.core.redis.cache.BladeRedis; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.*; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.MultiValueMap; import org.springframework.web.client.RestTemplate; import java.text.SimpleDateFormat; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.*; /** * 南科院水库预警算法api调用服务接口 * @author zhongrj * @date 2024-07-25 */ @Service @Slf4j public class OpenApiServiceImpl implements IOpenApiService { @Autowired private OpenApiMapper openApiMapper; @Autowired private RestTemplate restTemplate; @Autowired private DamAlarmRecordService damAlarmRecordService; @Autowired private DamAlarmRecordDetailService damAlarmRecordDetailService; @Autowired private BladeRedis bladeRedis; /** * 水库及测点信息注册-调用南科院接口 * @param resGuidList 水库编号集合 * @return */ @Override public boolean waterAndPointRegister(List<String> resGuidList) { boolean damResFlag = false; boolean pointResFlag = false; // 查询水库信息 List<Map<String,String>> resInfoList = openApiMapper.getResInfo(resGuidList); // 查询水库测点信息 // List<Map<String,String>> resPointInfo = openApiMapper.getResPointInfo(resGuidList); // 发送水库注册请求 String response = sendPostJsonRequest(OpenApiConstant.DAM_REGISTER_URL,resInfoList); // 输出响应 System.out.println(response); JSONObject jsonObject = JSON.parseObject(response); Integer status = jsonObject.getInteger("status"); damResFlag = status==200?true:false; // 查询 return damResFlag && pointResFlag; } /** * 发送post 请求 * @param url * @param object * @return */ private String sendPostJsonRequest(String url,Object object) { // 转换为JSON ObjectMapper objectMapper = new ObjectMapper(); String json = ""; try { json = objectMapper.writeValueAsString(object); } catch (Exception e) { e.printStackTrace(); } // 设置HTTP头信息 HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); // 创建HttpEntity HttpEntity<String> entity = new HttpEntity<>(json, headers); // 发送POST请求 return restTemplate.postForObject(url, entity, String.class); } /** * 实时测点测值输入-调用南科院接口 * @param type 1:渗压,2:渗流,3:X位移,4:Y位移,5:Z位移 * @return */ @Override public void realStationInput(String type) { boolean flag = false; // 获取当前时间及前一个小时 // 获取当前时间 LocalDateTime now = LocalDateTime.now(); // 减去一个小时 LocalDateTime oneHourAgo = now.minusHours(1); // 格式化时间 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"); String oneHour = oneHourAgo.format(formatter) + ":00"; String nowHour = now.format(formatter) + ":00"; // 调用中台接口获取实时测点数据 JSONArray ztData = getZtData("", ZtConfigConstant.url_prefix + DamEnum.ofType(type).getApiUrl() + "?tm_list=" + "'" + oneHour + "'," + "'" + nowHour + "'"); // 解析数据 for (int i = 0; i < ztData.size(); i++) { JSONObject jsonObject = ztData.getJSONObject(i); Map<String,Object> map = new HashMap<>(); map.put("batchId",UUID.randomUUID()); map.put("serialNo",getSerialNo()); // 水库信息设置 waterInfoSet(jsonObject, map); // 测点信息设置 pointValueInfoSet(jsonObject,map, DamEnum.ofType(type).getName()); // 发送请求 // String response = sendPostJsonRequest(OpenApiConstant.POINT_VALUE_INLET_URL, map); // JSONObject parseObject = JSON.parseObject(response); // Integer status = parseObject.getInteger("status"); // flag = status==200?true:false; log.info("测点输入结果:" + flag); } } /** * 水库信息设置 * @param jsonObject * @param map */ private void waterInfoSet(JSONObject jsonObject, Map<String, Object> map) { List<Map<String,Object>> waterLevelInfoList = new ArrayList<>(); Map<String, Object> waterLevelInfoMap = new HashMap<>(); waterLevelInfoMap.put("damCode",jsonObject.getString("res_cd")); waterLevelInfoMap.put("waterLevel",jsonObject.getString("res_cd")); waterLevelInfoMap.put("waterLevelTime",jsonObject.getString("res_cd")); waterLevelInfoMap.put("rainCondition",jsonObject.getString("res_cd")); waterLevelInfoMap.put("rainConditionTime",jsonObject.getString("res_cd")); waterLevelInfoList.add(waterLevelInfoMap); map.put("waterLevelInfo",waterLevelInfoList); } /** * 测点信息设置 * @param map */ private void pointValueInfoSet(JSONObject jsonObject,Map<String, Object> map,String type) { List<Map<String,Object>> pointValueInfoList = new ArrayList<>(); JSONArray childArray = jsonObject.getJSONArray("child"); //遍历处理 for (int i = 0; i < childArray.size(); i++) { JSONObject childArrayJSONObject = childArray.getJSONObject(i); String pointCodeTemp = jsonObject.getString("res_cd") + "_" + childArrayJSONObject.getString("cd") + "_" + type; Map<String, Object> pointValueInfoMap = new HashMap<>(); pointValueInfoMap.put("damCode",jsonObject.getString("res_cd")); pointValueInfoMap.put("pointCode",pointCodeTemp); pointValueInfoMap.put("type",type); pointValueInfoMap.put("value",childArrayJSONObject.getString("sy_val")); pointValueInfoMap.put("time",childArrayJSONObject.getString("tm")); pointValueInfoList.add(pointValueInfoMap); } map.put("pointValueInfo",pointValueInfoList); } /** * 获取序列号 * @return */ private Integer getSerialNo() { //设置默认从1开始 Integer serialNo = 1; //先从redis中获取,拼接当天日期 String format = new SimpleDateFormat("yyyyMMdd").format(new Date()); Integer redisSerialNo = bladeRedis.get(OpenApiConstant.serial_no_key + format); //如果为空则按默认的来 if (null==redisSerialNo){ // 先设置到 redis 序号+1 bladeRedis.setEx(OpenApiConstant.serial_no_key + format,serialNo+1,9*60*60L); // 返回 return serialNo; } serialNo = redisSerialNo; //更新 序号+1 ,8小时执行一次任务,设置9个小时为过期时间 bladeRedis.setEx(OpenApiConstant.serial_no_key + format,serialNo+1,9*60*60L); //返回 return serialNo; } /** * 调用中台接口查询数据 * * @param params * @param url * @return */ public JSONArray getZtData(String params, String 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); JSONObject jsonObject = JSON.parseObject(responseEntity.getBody()); // 返回 return JSONArray.parseArray(jsonObject.get("data").toString()); } catch (Exception e) { e.printStackTrace(); } return null; } /** * 预警回调 * @param data * @return */ @Override @Transactional(rollbackFor = Exception.class) public boolean alarmCallBack(String data) { boolean flag = false; // 解析数据 JSONObject jsonObject = JSON.parseObject(data); JSONArray dataJsonArray = jsonObject.getJSONArray("data"); for (int i = 0; i < dataJsonArray.size(); i++) { DamAlarmRecord damAlarmRecord = new DamAlarmRecord(); JSONObject alarmRecordJSONObject = dataJsonArray.getJSONObject(i); damAlarmRecord.setPointId(alarmRecordJSONObject.getString("pointId")); damAlarmRecord.setResGuid(alarmRecordJSONObject.getString("RS_CODE")); damAlarmRecord.setCollecTime(alarmRecordJSONObject.getDate("collecTime")); damAlarmRecord.setPointValue(alarmRecordJSONObject.getString("ponitValue")); JSONObject generalInfo = alarmRecordJSONObject.getJSONObject("generalInfo"); damAlarmRecord.setPointWarnLevel(generalInfo.getInteger("pointWarnLevel")); damAlarmRecord.setPointWarnInfo(generalInfo.getString("pointWarnInfo")); damAlarmRecord.setCreateTime(new Date()); // 保存 flag = damAlarmRecordService.save(damAlarmRecord); if (flag){ flag = saveDamAlarmRecordDetail(alarmRecordJSONObject.getJSONArray("detailInfo"),damAlarmRecord); } } return flag; } /** * 详情 * @param detailInfo * @param damAlarmRecord */ @Transactional(rollbackFor = Exception.class) public boolean saveDamAlarmRecordDetail(JSONArray detailInfo,DamAlarmRecord damAlarmRecord) { boolean flag = false; List<DamAlarmRecordDetail> list = new ArrayList<>(); for (int i = 0; i < detailInfo.size(); i++) { DamAlarmRecordDetail damAlarmRecordDetail = new DamAlarmRecordDetail(); JSONObject jsonObject = detailInfo.getJSONObject(i); damAlarmRecordDetail.setDamAlarmRecordId(damAlarmRecord.getId()); damAlarmRecordDetail.setAlgorithmName(jsonObject.getString("algorithmName")); damAlarmRecordDetail.setAlgorithmWarnLevel(jsonObject.getInteger("algorithmWarnLevel")); damAlarmRecordDetail.setAlgorithmWarnInfo(jsonObject.getString("algorithmWarnInfo")); damAlarmRecordDetail.setAlgorithmWarnExplain(jsonObject.getString("algorithmWarnExplain")); damAlarmRecordDetail.setCreateTime(new Date()); // 加入集合 list.add(damAlarmRecordDetail); } // 保存 if (list.size()>0) { flag = damAlarmRecordDetailService.saveBatch(list); }else { flag = true; } return flag; } } skjcmanager/skjcmanager-service/skjcmanager-nky/src/main/resources/application-dev.yml
@@ -11,12 +11,12 @@ #多数据源配置 spring: rabbitmq: host: 10.42.7.146 port: 5672 username: algo password: P6#yzdd7 virtual-host: / # rabbitmq: # host: 10.42.7.146 # port: 5672 # username: algo # password: P6#yzdd7 # virtual-host: / #排除DruidDataSourceAutoConfigure autoconfigure: exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/reportFlood/mapper/ReportFloodRecordMapper.xml
@@ -56,7 +56,7 @@ <select id="selectReportFloodRecordPages" resultMap="vo"> SELECT R.*, SELECT R.*,arfl."tb_flse_lim_stag" tbFlseLimStag,r.main_z - arfl."tb_flse_lim_stag" mainBe,r.person_rz - arfl."tb_flse_lim_stag" personBe, arb."name" reservoirName , arb."res_reg_code" as resRegCode, @@ -88,6 +88,7 @@ LEFT JOIN SJZT_MD."att_ad_base" county ON town."p_ad_code" = county."guid" LEFT JOIN SJZT_MD."att_ad_base" city ON county."p_ad_code" = city."guid" LEFT JOIN SJZT_MD."att_ad_base" province ON province."guid" = city."p_ad_code" left join sjzt_md."att_res_flse_lim" arfl on arfl."res_guid" = arb."guid" and arfl."is_use" = 1 WHERE r.is_deleted = 0 <if test=" reportFloodRecord.adCode!= null and reportFloodRecord.adCode !='' "> @@ -103,13 +104,22 @@ AND r.reservoir_id = #{reportFloodRecord.reservoirId} </if> <if test="reportFloodRecord.startTime !=null and reportFloodRecord.startTime !=''"> AND DATE_FORMAT(r.create_time,'%Y-%m-%d') >= #{reportFloodRecord.startTime} AND r.report_time >= #{reportFloodRecord.startTime} </if> <if test="reportFloodRecord.endTime !=null and reportFloodRecord.endTime !=''"> AND DATE_FORMAT(r.create_time,'%Y-%m-%d') <= #{reportFloodRecord.endTime} AND r.report_time <= #{reportFloodRecord.endTime} </if> <if test="reportFloodRecord.createUser !=null and reportFloodRecord.createUser !=''"> AND r.create_user = #{reportFloodRecord.createUser} </if> <if test="reportFloodRecord.isOver !=null and reportFloodRecord.isOver !=''"> AND r.is_over = #{reportFloodRecord.isOver} </if> <if test="reportFloodRecord.isStatus !=null and reportFloodRecord.isStatus !=''"> AND r.status = #{reportFloodRecord.isStatus} </if> <if test="reportFloodRecord.gateStatus !=null and reportFloodRecord.gateStatus !=''"> AND r.gate_status = #{reportFloodRecord.gateStatus} </if> <if test="reportFloodRecord.resRegCode != null and reportFloodRecord.resRegCode != ''"> @@ -123,7 +133,7 @@ </if> ORDER BY CREATE_TIME DESC --ORDER BY CREATE_TIME DESC </select> <select id="customizeGetDetail" resultMap="vo"> skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/reportFlood/vo/ReportFloodRecordVO.java
@@ -36,4 +36,9 @@ private String lon; private String lat; private String isStatus;//是否异常 private Double tbFlseLimStag;//汛限水位 private Double mainBe;//主站比汛限 private Double personBe;//人工报讯比汛限水位 } skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/mapper/SgGxStepMapper.xml
@@ -3,7 +3,7 @@ <mapper namespace="cn.gistack.sm.sg.mapper.SgGxStepMapper"> <select id="selectByGxInfoId" resultType="cn.gistack.sm.sg.DO.SgGxStepDO"> select * from YWXT.SG_GX_STEP step where step.GX_INFO_ID = #{gxInfoId} order by step.GX_STEP_NUM ASC select * from YWXT.SG_GX_STEP step where step.GX_INFO_ID = #{gxInfoId} order by step.GX_STEP_NUM desc </select> <select id="queryPageList" resultType="cn.gistack.sm.sg.DO.SgGxStepDO"> select step.*,GX.GX_TYPE from YWXT.SG_GX_STEP step left join YWXT.SG_GX GX ON step.GX_INFO_ID = GX.ID where 1=1 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sg/service/impl/SgGxStepServiceImpl.java
@@ -19,8 +19,10 @@ import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; /** * <p> @@ -57,16 +59,19 @@ } @Override public void delete(String id) { SgGxStepDO sgGxStepDO = sgGxStepMapper.selectById(id); if (!new LambdaQueryChainWrapper<>(sgGxRoleMapper).eq(SgGxRoleDO::getGxStepId,id).list().isEmpty()){ throw new ServiceException(sgGxStepDO.getGxStepName()+ "已绑定角色,无法删除"); public void delete(String ids) { List<String> idList = Stream.of(ids.split(",")).sorted(Comparator.reverseOrder()) .collect(Collectors.toList()); for (String id : idList) { SgGxStepDO sgGxStepDO = sgGxStepMapper.selectById(id); if (!new LambdaQueryChainWrapper<>(sgGxRoleMapper).eq(SgGxRoleDO::getGxStepId,id).list().isEmpty()){ throw new ServiceException(sgGxStepDO.getGxStepName()+ "已绑定角色,无法删除"); } List<SgGxStepDO> list= sgGxStepMapper.selectByGxInfoId(sgGxStepDO.getGxInfoId()); if (!sgGxStepDO.getGxStepNum().equals(list.get(0).getGxStepNum())){ throw new ServiceException("请按顺序删除工序步骤"); } this.removeById(id); } List<SgGxStepDO> list= sgGxStepMapper.selectByGxInfoId(sgGxStepDO.getGxInfoId()); if (!sgGxStepDO.getGxStepNum().equals(list.get(0).getGxStepNum())){ throw new ServiceException("请按顺序删除工序步骤"); } this.removeById(id); } @Override skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/dto/TbProjectIsfillDTO.java
@@ -14,11 +14,11 @@ private int isFil; @DateTimeFormat(pattern = "yyyy-MM-dd") @JsonFormat(pattern = "yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date stratTime; @DateTimeFormat(pattern = "yyyy-MM-dd") @JsonFormat(pattern = "yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date endTime; } skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/TbProjectMapper.xml
@@ -147,6 +147,11 @@ ifNull(midNum,0) midNum, ifNull(smallOneNum,0) smallOneNum, ifNull(smallTwoNum,0) smallTwoNum, ifNull(resNumAll,0) resNumAll, ifNull(bigNumAll,0) bigNumAll, ifNull(midNumAll,0) midNumAll, ifNull(smallOneNumAll,0) smallOneNumAll, ifNull(smallTwoNumAll,0) smallTwoNumAll, dykeLength, levelOneLength, levelTwoLength, @@ -170,12 +175,30 @@ ) arb ON ((arb.townCode = aab."guid")or(arb.countyCode = aab."guid") or (arb.cityCode = aab."guid") or (arb.provinceCode = aab."guid") ) right join sjzt_md."tb_res_general_investigation_state" trgis on trgis."res_guid" = arb."code" <!--统计待审核和已审核的--> and (trgis."check_state" = 1 or trgis."check_state" = 2) and (trgis."check_state" = 2) <if test="params.tbYear != null and params.tbYear != ''"> and trgis."tb_year" = #{params.tbYear} </if> group by aab."guid",aab."ad_name" )res on res."guid" = aab."guid" <!-- 所有水库 --> left join ( SELECT aab."guid", aab."ad_name", SUM(CASE WHEN arb."code" is not null then 1 else 0 end) as resNumAll , SUM(CASE WHEN (arb."eng_scal" = '大(1)型' or arb."eng_scal" = '大(2)型') then 1 else 0 end) as bigNumAll , SUM(CASE WHEN (arb."eng_scal" = '中型') then 1 else 0 end) as midNumAll , SUM(CASE WHEN (arb."eng_scal" = '小(1)型') then 1 else 0 end) as smallOneNumAll , SUM(CASE WHEN (arb."eng_scal" = '小(2)型') then 1 else 0 end) as smallTwoNumAll FROM YWXT."att_ad_base" aab LEFT JOIN ( <include refid="selectResByRegion"/> ) arb ON ((arb.townCode = aab."guid")or(arb.countyCode = aab."guid") or (arb.cityCode = aab."guid") or (arb.provinceCode = aab."guid") ) group by aab."guid",aab."ad_name" )res2 on res2."guid" = aab."guid" left join ( SELECT aab."guid", skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/statisticsVO/StatisticsTableProject.java
@@ -33,6 +33,16 @@ private int smallTwoNum; private int resNumAll; private int bigNumAll; private int midNumAll; private int smallOneNumAll; private int smallTwoNumAll; private double dykeLength; private double levelOneLength; skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/vo/TbProjectIsfillVO.java
@@ -11,11 +11,11 @@ private int isFil; @DateTimeFormat(pattern = "yyyy-MM-dd") @JsonFormat(pattern = "yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date stratTime; @DateTimeFormat(pattern = "yyyy-MM-dd") @JsonFormat(pattern = "yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date endTime; } skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/word/controller/DownTemplateController.java
@@ -91,7 +91,7 @@ @GetMapping("/download/overFloodInfo") public ResponseEntity overFloodInfo(String isShow) throws Exception { String time = new SimpleDateFormat("yyyy日MM月dd日HH时").format(new Date()); String time = new SimpleDateFormat("yyyy年MM月dd日HH时").format(new Date()); String fileName = time + "报汛文件.docx"; String fileNameURL = URLEncoder.encode(fileName, "UTF-8"); //获取总览、大中库、明细数据 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/resources/word/doc/overFloodTemplate.docxBinary files differ
skjcmanager/skjcmanager-service/skjcmanager-xxljob/src/main/java/cn/gistack/job/executor/jobhandler/NkyXxlJob.java
@@ -15,6 +15,8 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** * 南科院预测数据定时器 @@ -241,6 +243,28 @@ return ReturnT.SUCCESS; } /** * 南科院 实时测点测值输入 * @param param * @return */ @XxlJob("pointValueInletHandler") public ReturnT<String> pointValueInletHandler(String param) { XxlJobLogger.log("实时测点测值输入开始"); // 创建外呼任务 ExecutorService executorService = Executors.newSingleThreadExecutor(); executorService.submit(() -> { // 这里是你的异步任务逻辑 nkyClient.pointValueInlet(SY); nkyClient.pointValueInlet(SL); nkyClient.pointValueInlet(X); nkyClient.pointValueInlet(Y); nkyClient.pointValueInlet(Z); }); XxlJobLogger.log("实时测点测值输入结束"); return ReturnT.SUCCESS; } }