feat: 全过程AI识别动植物保护
This commit is contained in:
parent
99dbc6502f
commit
5f6038db51
@ -64,14 +64,14 @@ public class SwaggerConfig {
|
||||
@Bean
|
||||
public GroupedOpenApi groupEnvWTApi() {
|
||||
return GroupedOpenApi.builder()
|
||||
.group("3.1 全过程-生态环保数据服务-水温监测")
|
||||
.group("3.1 全过程-生态环保数据服务-水温监测(wt)")
|
||||
.packagesToScan("com.yfd.platform.qgc_env.wt.controller")
|
||||
.build();
|
||||
}
|
||||
@Bean
|
||||
public GroupedOpenApi groupEnvWQApi() {
|
||||
return GroupedOpenApi.builder()
|
||||
.group("3.2 全过程-生态环保数据服务-水质监测")
|
||||
.group("3.2 全过程-生态环保数据服务-水质监测(wq)")
|
||||
.packagesToScan("com.yfd.platform.qgc_env.wq.controller")
|
||||
.build();
|
||||
}
|
||||
@ -79,7 +79,7 @@ public class SwaggerConfig {
|
||||
@Bean
|
||||
public GroupedOpenApi groupEnvFPApi() {
|
||||
return GroupedOpenApi.builder()
|
||||
.group("3.3 全过程-生态环保数据服务-过鱼设施")
|
||||
.group("3.3 全过程-生态环保数据服务-过鱼设施(fp)")
|
||||
.packagesToScan("com.yfd.platform.qgc_env.fp.controller")
|
||||
.build();
|
||||
}
|
||||
@ -87,7 +87,7 @@ public class SwaggerConfig {
|
||||
@Bean
|
||||
public GroupedOpenApi groupEnvVDApi() {
|
||||
return GroupedOpenApi.builder()
|
||||
.group("3.3.1 全过程-生态环保数据服务-过鱼设施-过鱼监测(VD视频模块)")
|
||||
.group("3.3.1 全过程-生态环保数据服务-过鱼设施-过鱼监测(vd视频模块)")
|
||||
.packagesToScan("com.yfd.platform.qgc_env.vd.controller")
|
||||
.build();
|
||||
}
|
||||
@ -97,7 +97,7 @@ public class SwaggerConfig {
|
||||
@Bean
|
||||
public GroupedOpenApi groupEnvFHApi() {
|
||||
return GroupedOpenApi.builder()
|
||||
.group("3.4 全过程-生态环保数据服务-栖息地")
|
||||
.group("3.4 全过程-生态环保数据服务-栖息地(fh)")
|
||||
.packagesToScan("com.yfd.platform.qgc_env.fh.controller")
|
||||
.build();
|
||||
}
|
||||
@ -105,7 +105,7 @@ public class SwaggerConfig {
|
||||
@Bean
|
||||
public GroupedOpenApi groupEnvZQApi() {
|
||||
return GroupedOpenApi.builder()
|
||||
.group("3.4.1 全过程-生态环保数据服务-栖息地-水文模块")
|
||||
.group("3.4.1 全过程-生态环保数据服务-栖息地-水文模块(zq)")
|
||||
.packagesToScan("com.yfd.platform.qgc_env.zq.controller")
|
||||
.build();
|
||||
}
|
||||
@ -114,7 +114,7 @@ public class SwaggerConfig {
|
||||
@Bean
|
||||
public GroupedOpenApi groupEnvVapApi() {
|
||||
return GroupedOpenApi.builder()
|
||||
.group("3.5 全过程-生态环保数据服务-珍稀动植物")
|
||||
.group("3.5 全过程-生态环保数据服务-珍稀动植物(vap)")
|
||||
.packagesToScan("com.yfd.platform.qgc_env.vap.controller")
|
||||
.build();
|
||||
}
|
||||
@ -122,7 +122,7 @@ public class SwaggerConfig {
|
||||
@Bean
|
||||
public GroupedOpenApi groupEnvFprApi() {
|
||||
return GroupedOpenApi.builder()
|
||||
.group("3.6 全过程-生态环保数据服务-鱼类调查")
|
||||
.group("3.6 全过程-生态环保数据服务-鱼类调查(fpr)")
|
||||
.packagesToScan("com.yfd.platform.qgc_env.fpr.controller")
|
||||
.build();
|
||||
}
|
||||
@ -130,7 +130,7 @@ public class SwaggerConfig {
|
||||
@Bean
|
||||
public GroupedOpenApi groupEnvFbApi() {
|
||||
return GroupedOpenApi.builder()
|
||||
.group("3.7 全过程-生态环保数据服务-增殖放流")
|
||||
.group("3.7 全过程-生态环保数据服务-增殖放流(fb)")
|
||||
.packagesToScan("com.yfd.platform.qgc_env.fb.controller")
|
||||
.build();
|
||||
}
|
||||
@ -138,7 +138,7 @@ public class SwaggerConfig {
|
||||
@Bean
|
||||
public GroupedOpenApi groupEnvWarnApi() {
|
||||
return GroupedOpenApi.builder()
|
||||
.group("3.8 全过程-生态环保数据服务-智能告警")
|
||||
.group("3.8 全过程-生态环保数据服务-智能告警(warn)")
|
||||
.packagesToScan("com.yfd.platform.qgc_env.warn.controller")
|
||||
.build();
|
||||
}
|
||||
@ -160,7 +160,7 @@ public class SwaggerConfig {
|
||||
@Bean
|
||||
public GroupedOpenApi groupEngEqApi() {
|
||||
return GroupedOpenApi.builder()
|
||||
.group("4.1. 全过程-常规水电数据服务-生态流量")
|
||||
.group("4.1. 全过程-常规水电数据服务-生态流量(eq)")
|
||||
.packagesToScan("com.yfd.platform.qgc_eng.eq.controller")
|
||||
.build();
|
||||
}
|
||||
|
||||
@ -33,6 +33,12 @@ public class WarnDataController {
|
||||
return ResponseResult.successData(warnDataService.getAiDmRunCount(dataSourceRequest));
|
||||
}
|
||||
|
||||
@PostMapping("/ai/com/qgcProtect/GetKendoListCust")
|
||||
@Operation(summary = "全过程AI识别动植物保护")
|
||||
public ResponseResult getAiProtectCount(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||
return ResponseResult.successData(warnDataService.getAiProtectCount(dataSourceRequest));
|
||||
}
|
||||
|
||||
@PostMapping("/ai/com/GetKendoListCust")
|
||||
@Operation(summary = "AI常规业务列表")
|
||||
public ResponseResult getAiComKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||
|
||||
@ -0,0 +1,30 @@
|
||||
package com.yfd.platform.qgc_env.warn.entity.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
@Schema(description = "全过程AI识别动植物保护")
|
||||
public class AiProtectVo {
|
||||
|
||||
@Schema(description = "运鱼船进出港次数")
|
||||
private Integer fpYycCnt;
|
||||
|
||||
@Schema(description = "赶鱼栅运行次数")
|
||||
private Integer fpGysCnt;
|
||||
|
||||
@Schema(description = "升鱼机运行次数")
|
||||
private Integer fpSyjCnt;
|
||||
|
||||
@Schema(description = "AGV小车次数")
|
||||
private Integer fpAgvCnt;
|
||||
|
||||
@Schema(description = "运鱼车运行次数")
|
||||
private Integer fpYychCnt;
|
||||
|
||||
@Schema(description = "鱼道放流次数")
|
||||
private Integer fpYdhCnt;
|
||||
|
||||
@Schema(description = "植物园养护次数")
|
||||
private Integer vpYhCnt;
|
||||
}
|
||||
@ -2,6 +2,7 @@ package com.yfd.platform.qgc_env.warn.service;
|
||||
|
||||
import com.yfd.platform.common.DataSourceRequest;
|
||||
import com.yfd.platform.common.DataSourceResult;
|
||||
import com.yfd.platform.qgc_env.warn.entity.vo.AiProtectVo;
|
||||
import com.yfd.platform.qgc_env.warn.entity.vo.AiDmRunVo;
|
||||
import com.yfd.platform.qgc_env.warn.entity.vo.AiComListVo;
|
||||
import com.yfd.platform.qgc_env.warn.entity.vo.EngWarnCountVo;
|
||||
@ -12,5 +13,7 @@ public interface WarnDataService {
|
||||
|
||||
AiDmRunVo getAiDmRunCount(DataSourceRequest dataSourceRequest);
|
||||
|
||||
AiProtectVo getAiProtectCount(DataSourceRequest dataSourceRequest);
|
||||
|
||||
DataSourceResult<AiComListVo> getAiComKendoListCust(DataSourceRequest dataSourceRequest);
|
||||
}
|
||||
|
||||
@ -12,6 +12,7 @@ import com.yfd.platform.common.GroupingInfo;
|
||||
import com.yfd.platform.common.MicroservicDynamicSQLMapper;
|
||||
import com.yfd.platform.qgc_env.warn.entity.vo.AiComListVo;
|
||||
import com.yfd.platform.qgc_env.warn.entity.vo.AiDmRunVo;
|
||||
import com.yfd.platform.qgc_env.warn.entity.vo.AiProtectVo;
|
||||
import com.yfd.platform.qgc_env.warn.entity.vo.EngWarnCountVo;
|
||||
import com.yfd.platform.qgc_env.warn.service.WarnDataService;
|
||||
import com.yfd.platform.utils.QgcQueryWrapperUtil;
|
||||
@ -95,6 +96,46 @@ public class WarnDataServiceImpl implements WarnDataService {
|
||||
return vo;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AiProtectVo getAiProtectCount(DataSourceRequest dataSourceRequest) {
|
||||
DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest();
|
||||
String baseId = loadOptions == null ? null : QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "baseId");
|
||||
String startTime = loadOptions == null ? null : QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "startTime");
|
||||
String endTime = loadOptions == null ? null : QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "endTime");
|
||||
String rstcd = loadOptions == null ? null : QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "rstcd");
|
||||
String stnm = loadOptions == null ? null : QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "stnm");
|
||||
|
||||
Map<String, Object> paramMap = new HashMap<>();
|
||||
String sql = buildAiProtectSql(baseId, parseAiTime(startTime), parseAiTime(endTime), parseAiCodes(rstcd), stnm, paramMap);
|
||||
Map<String, Object> row = microservicDynamicSQLMapper.getOneBySql(sql, paramMap);
|
||||
AiProtectVo vo = buildAiProtectVo(row);
|
||||
if (vo == null) {
|
||||
vo = new AiProtectVo();
|
||||
}
|
||||
if (vo.getFpYycCnt() == null) {
|
||||
vo.setFpYycCnt(0);
|
||||
}
|
||||
if (vo.getFpGysCnt() == null) {
|
||||
vo.setFpGysCnt(0);
|
||||
}
|
||||
if (vo.getFpSyjCnt() == null) {
|
||||
vo.setFpSyjCnt(0);
|
||||
}
|
||||
if (vo.getFpAgvCnt() == null) {
|
||||
vo.setFpAgvCnt(0);
|
||||
}
|
||||
if (vo.getFpYychCnt() == null) {
|
||||
vo.setFpYychCnt(0);
|
||||
}
|
||||
if (vo.getFpYdhCnt() == null) {
|
||||
vo.setFpYdhCnt(0);
|
||||
}
|
||||
if (vo.getVpYhCnt() == null) {
|
||||
vo.setVpYhCnt(0);
|
||||
}
|
||||
return vo;
|
||||
}
|
||||
|
||||
@Override
|
||||
public DataSourceResult<AiComListVo> getAiComKendoListCust(DataSourceRequest dataSourceRequest) {
|
||||
DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest();
|
||||
@ -170,6 +211,21 @@ public class WarnDataServiceImpl implements WarnDataService {
|
||||
return vo;
|
||||
}
|
||||
|
||||
private AiProtectVo buildAiProtectVo(Map<String, Object> row) {
|
||||
if (row == null || row.isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
AiProtectVo vo = new AiProtectVo();
|
||||
vo.setFpYycCnt(toIntegerValue(firstPresentValue(row, "FPYYCCNT", "fpYycCnt")));
|
||||
vo.setFpGysCnt(toIntegerValue(firstPresentValue(row, "FPGYSCNT", "fpGysCnt")));
|
||||
vo.setFpSyjCnt(toIntegerValue(firstPresentValue(row, "FPSYJCNT", "fpSyjCnt")));
|
||||
vo.setFpAgvCnt(toIntegerValue(firstPresentValue(row, "FPAGVCNT", "fpAgvCnt")));
|
||||
vo.setFpYychCnt(toIntegerValue(firstPresentValue(row, "FPYYCHCNT", "fpYychCnt")));
|
||||
vo.setFpYdhCnt(toIntegerValue(firstPresentValue(row, "FPYDHCNT", "fpYdhCnt")));
|
||||
vo.setVpYhCnt(toIntegerValue(firstPresentValue(row, "VPYHCNT", "vpYhCnt")));
|
||||
return vo;
|
||||
}
|
||||
|
||||
private String buildEngWarnCountSql(String filterSql) {
|
||||
String normalizedWarnStateExpr = "CASE " +
|
||||
"WHEN t.WARN_STATE = '0' OR t.WARN_STATE IS NULL OR t.WARN_STATE = '' THEN '00' " +
|
||||
@ -250,6 +306,112 @@ public class WarnDataServiceImpl implements WarnDataService {
|
||||
return sql.toString();
|
||||
}
|
||||
|
||||
private String buildAiProtectSql(String baseId,
|
||||
Date startTime,
|
||||
Date endTime,
|
||||
List<String> rstcdList,
|
||||
String stnm,
|
||||
Map<String, Object> paramMap) {
|
||||
StringBuilder sql = new StringBuilder();
|
||||
sql.append("SELECT ")
|
||||
.append("aiStat.fpYycCnt AS fpYycCnt, ")
|
||||
.append("aiStat.fpGysCnt AS fpGysCnt, ")
|
||||
.append("aiStat.fpSyjCnt AS fpSyjCnt, ")
|
||||
.append("aiStat.fpAgvCnt AS fpAgvCnt, ")
|
||||
.append("aiStat.fpYychCnt AS fpYychCnt, ")
|
||||
.append("aiStat.fpYdhCnt AS fpYdhCnt, ")
|
||||
.append("vpStat.vpYhCnt AS vpYhCnt ")
|
||||
.append("FROM (")
|
||||
.append("SELECT ")
|
||||
.append("NVL(SUM(CASE WHEN rec.TYPE = 'AI_5003' THEN 1 ELSE 0 END), 0) AS fpYycCnt, ")
|
||||
.append("NVL(SUM(CASE WHEN rec.TYPE = 'AI_5006' THEN 1 ELSE 0 END), 0) AS fpGysCnt, ")
|
||||
.append("NVL(SUM(CASE WHEN rec.TYPE = 'AI_5007' THEN 1 ELSE 0 END), 0) AS fpSyjCnt, ")
|
||||
.append("NVL(SUM(CASE WHEN rec.TYPE = 'AI_5008' THEN 1 ELSE 0 END), 0) AS fpAgvCnt, ")
|
||||
.append("NVL(SUM(CASE WHEN rec.TYPE = 'AI_5002' THEN 1 ELSE 0 END), 0) AS fpYychCnt, ")
|
||||
.append("NVL(SUM(CASE WHEN rec.TYPE = 'AI_5012' THEN 1 ELSE 0 END), 0) AS fpYdhCnt ")
|
||||
.append("FROM SD_AIMONITOR_B_H ai ")
|
||||
.append("INNER JOIN SD_AICOM_R rec ON ai.STCD = rec.STCD ")
|
||||
.append("LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = ai.RSTCD AND NVL(eng.IS_DELETED, 0) = 0 ")
|
||||
.append("WHERE NVL(ai.IS_DELETED, 0) = 0 ")
|
||||
.append("AND NVL(rec.IS_DELETED, 0) = 0 ")
|
||||
.append("AND ai.STTP LIKE 'AI_%' ")
|
||||
.append("AND rec.TYPE IN ('AI_5003', 'AI_5006', 'AI_5007', 'AI_5008', 'AI_5002', 'AI_5012') ");
|
||||
appendAiProtectCommonFilterSql(sql, baseId, startTime, endTime, rstcdList, stnm, paramMap);
|
||||
sql.append(") aiStat, (")
|
||||
.append("SELECT COUNT(1) AS vpYhCnt ")
|
||||
.append("FROM SD_AIMONITOR_B_H vpAi ")
|
||||
.append("INNER JOIN SD_AIVPWATER_R vpRec ON vpAi.STCD = vpRec.STCD ")
|
||||
.append("WHERE NVL(vpAi.IS_DELETED, 0) = 0 ")
|
||||
.append("AND NVL(vpRec.IS_DELETED, 0) = 0 ")
|
||||
.append("AND vpAi.STTP = 'AI_VP_WATER' ");
|
||||
appendAiProtectVpFilterSql(sql, baseId, startTime, endTime, rstcdList, paramMap);
|
||||
sql.append(") vpStat");
|
||||
return sql.toString();
|
||||
}
|
||||
|
||||
private void appendAiProtectCommonFilterSql(StringBuilder sql,
|
||||
String baseId,
|
||||
Date startTime,
|
||||
Date endTime,
|
||||
List<String> rstcdList,
|
||||
String stnm,
|
||||
Map<String, Object> paramMap) {
|
||||
if (StrUtil.isNotBlank(baseId)) {
|
||||
paramMap.put("aiProtectBaseId", baseId.trim());
|
||||
sql.append("AND ai.BASE_ID = #{map.aiProtectBaseId} ");
|
||||
}
|
||||
if (startTime != null) {
|
||||
paramMap.put("aiProtectStartTime", startTime);
|
||||
sql.append("AND rec.TM >= #{map.aiProtectStartTime} ");
|
||||
}
|
||||
if (endTime != null) {
|
||||
paramMap.put("aiProtectEndTime", endTime);
|
||||
sql.append("AND rec.TM <= #{map.aiProtectEndTime} ");
|
||||
}
|
||||
if (CollUtil.isNotEmpty(rstcdList)) {
|
||||
List<String> placeholders = new ArrayList<>();
|
||||
for (int i = 0; i < rstcdList.size(); i++) {
|
||||
String key = "aiProtectRstcd" + i;
|
||||
paramMap.put(key, rstcdList.get(i));
|
||||
placeholders.add("#{map." + key + "}");
|
||||
}
|
||||
sql.append("AND ai.RSTCD IN (").append(String.join(", ", placeholders)).append(") ");
|
||||
}
|
||||
if (StrUtil.isNotBlank(stnm)) {
|
||||
paramMap.put("aiProtectEnnm", "%" + stnm.trim() + "%");
|
||||
sql.append("AND eng.ENNM LIKE #{map.aiProtectEnnm} ");
|
||||
}
|
||||
}
|
||||
|
||||
private void appendAiProtectVpFilterSql(StringBuilder sql,
|
||||
String baseId,
|
||||
Date startTime,
|
||||
Date endTime,
|
||||
List<String> rstcdList,
|
||||
Map<String, Object> paramMap) {
|
||||
if (StrUtil.isNotBlank(baseId)) {
|
||||
paramMap.put("aiProtectVpBaseId", baseId.trim());
|
||||
sql.append("AND vpAi.BASE_ID = #{map.aiProtectVpBaseId} ");
|
||||
}
|
||||
if (startTime != null) {
|
||||
paramMap.put("aiProtectVpStartTime", startTime);
|
||||
sql.append("AND vpRec.TM >= #{map.aiProtectVpStartTime} ");
|
||||
}
|
||||
if (endTime != null) {
|
||||
paramMap.put("aiProtectVpEndTime", endTime);
|
||||
sql.append("AND vpRec.TM <= #{map.aiProtectVpEndTime} ");
|
||||
}
|
||||
if (CollUtil.isNotEmpty(rstcdList)) {
|
||||
List<String> placeholders = new ArrayList<>();
|
||||
for (int i = 0; i < rstcdList.size(); i++) {
|
||||
String key = "aiProtectVpRstcd" + i;
|
||||
paramMap.put(key, rstcdList.get(i));
|
||||
placeholders.add("#{map." + key + "}");
|
||||
}
|
||||
sql.append("AND vpAi.RSTCD IN (").append(String.join(", ", placeholders)).append(") ");
|
||||
}
|
||||
}
|
||||
|
||||
private String buildAiComGroupSql(String detailSql, GroupingInfo[] groupInfos) {
|
||||
if (groupInfos == null || groupInfos.length == 0) {
|
||||
return detailSql;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user