fix: 增加动物锚点接口

This commit is contained in:
tangwei 2026-09-02 17:03:44 +08:00
parent f3a4999201
commit d04eed8188
4 changed files with 170 additions and 0 deletions

View File

@ -150,6 +150,12 @@ public class WeFishController {
return ResponseResult.successData(weFishService.getQgcWeFishPoint(dataSourceRequest)); return ResponseResult.successData(weFishService.getQgcWeFishPoint(dataSourceRequest));
} }
@PostMapping("/we/animalPoint/qgc/GetKendoListCust")
@Operation(summary = "野生动物分布锚点")
public ResponseResult getQgcWeAnimalPoint(@RequestBody DataSourceRequest dataSourceRequest) {
return ResponseResult.successData(weFishService.getQgcWeAnimalPoint(dataSourceRequest));
}
@PostMapping("/we/point/qgc/GetKendoListCust") @PostMapping("/we/point/qgc/GetKendoListCust")
@Operation(summary = "环保部-水生生态调查-地图锚点") @Operation(summary = "环保部-水生生态调查-地图锚点")
public ResponseResult getQgcWePoint(@RequestBody DataSourceRequest dataSourceRequest) { public ResponseResult getQgcWePoint(@RequestBody DataSourceRequest dataSourceRequest) {

View File

@ -0,0 +1,71 @@
package com.yfd.platform.qgc_env.wte.entity.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
/**
* 野生动物监测-动物分布锚点
*/
@Data
@Schema(description = "动物分布锚点")
public class WeAnimalPointQgcVo {
@Schema(description = "站点编码")
private String stcd;
@Schema(description = "站点名称")
private String stnm;
@Schema(description = "弹框站点名称")
private String titleName;
@Schema(description = "经度")
private BigDecimal lgtd;
@Schema(description = "纬度")
private BigDecimal lttd;
@Schema(description = "高程单位m")
private BigDecimal dtmel;
@Schema(description = "关联电站编码")
private String rstcd;
@Schema(description = "电站名称")
private String ennm;
@Schema(description = "站点类型")
private String sttp;
@Schema(description = "锚点类型")
private String sttpMap;
@Schema(description = "设施类型")
private String sttpCode;
@Schema(description = "流域编码")
private String rvcd;
@Schema(description = "行政编码")
private String addvcd;
@Schema(description = "基地流域编码")
private String hbrvcd;
@Schema(description = "基地编码")
private String baseId;
@Schema(description = "描点状态")
private String anchoPointState;
@Schema(description = "检测动物名称列表(按逗号分隔)")
private String animals;
@Schema(description = "最新监测时间")
private String tm;
@Schema(description = "地图避让")
private Integer distance;
}

View File

@ -55,6 +55,8 @@ public interface WeFishService {
DataSourceResult<WePointQgcVo> getQgcWePoint(DataSourceRequest dataSourceRequest); DataSourceResult<WePointQgcVo> getQgcWePoint(DataSourceRequest dataSourceRequest);
DataSourceResult<WeAnimalPointQgcVo> getQgcWeAnimalPoint(DataSourceRequest dataSourceRequest);
DataSourceResult<WeTeSpecialAnimalVo> getTeSpecialAnimalList(DataSourceRequest dataSourceRequest); DataSourceResult<WeTeSpecialAnimalVo> getTeSpecialAnimalList(DataSourceRequest dataSourceRequest);
List<WeDefaultDataVo> getWeDefaultData(String stcd); List<WeDefaultDataVo> getWeDefaultData(String stcd);

View File

@ -1175,6 +1175,97 @@ public class WeFishServiceImpl implements WeFishService {
return result; return result;
} }
@Override
public DataSourceResult<WeAnimalPointQgcVo> getQgcWeAnimalPoint(DataSourceRequest dataSourceRequest) {
DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest();
String baseId = resolveWeFishStringFilterValue(dataSourceRequest, loadOptions, "baseId");
String stcd = resolveWeFishStringFilterValue(dataSourceRequest, loadOptions, "stcd");
String startTime = resolveWeFishStringFilterValue(dataSourceRequest, loadOptions, "startTime");
String endTime = resolveWeFishStringFilterValue(dataSourceRequest, loadOptions, "endTime");
Date start = null;
Date end = null;
if (StrUtil.isNotBlank(startTime) && StrUtil.isNotBlank(endTime)) {
start = parseDateTimeSafely(startTime);
end = parseDateTimeSafely(endTime);
}
boolean hasTime = start != null && end != null;
Map<String, Object> paramMap = new HashMap<>();
StringBuilder sql = new StringBuilder();
sql.append("SELECT ")
.append("ai.STCD AS stcd, ")
.append("ai.STNM AS stnm, ")
.append("ai.STNM AS titleName, ")
.append("ai.LGTD AS lgtd, ")
.append("ai.LTTD AS lttd, ")
.append("ai.ELEV AS dtmel, ")
.append("ai.RSTCD AS rstcd, ")
.append("eng.ENNM AS ennm, ")
.append("'wva' AS sttp, ")
.append("'WVA' AS sttpMap, ")
.append("'WVA' AS sttpCode, ")
.append("ai.RVCD AS rvcd, ")
.append("ai.ADDVCD AS addvcd, ")
.append("ai.HBRVCD AS hbrvcd, ")
.append("ai.BASE_ID AS baseId, ")
.append("'wva' AS anchoPointState, ")
.append("agg.animals AS animals, ")
.append("TO_CHAR(agg.latestTm, 'yyyy-mm-dd hh24:mi:ss') AS tm ")
.append("FROM SD_AIMONITOR_B_H ai ")
.append("LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = ai.RSTCD AND NVL(eng.IS_DELETED, 0) = 0 ")
.append("LEFT JOIN ( ")
.append(" SELECT t.stcd, ")
.append(" LISTAGG(t.anm, ',') WITHIN GROUP (ORDER BY t.anm) AS animals, ")
.append(" MAX(t.tm) AS latestTm ")
.append(" FROM ( ")
.append(" SELECT w.STCD AS stcd, a.NAME AS anm, MAX(w.TM) AS tm ")
.append(" FROM SD_WVA_R w ")
.append(" INNER JOIN SD_ANIMALDICTORY_B a ON a.ID = w.ANIMAL_ID ")
.append(" WHERE NVL(w.IS_DELETED, 0) = 0 ")
.append(" AND NVL(a.IS_DELETED, 0) = 0 ")
.append(" AND NVL(a.ENABLE, 1) = 1 ");
if (hasTime) {
paramMap.put("weAnimalPointStartTime", start);
paramMap.put("weAnimalPointEndTime", end);
sql.append(" AND w.TM BETWEEN #{map.weAnimalPointStartTime} AND #{map.weAnimalPointEndTime} ");
}
sql.append(" GROUP BY w.STCD, a.NAME ")
.append(" ) t ")
.append(" GROUP BY t.stcd ")
.append(") agg ON agg.stcd = ai.STCD ")
.append("WHERE NVL(ai.IS_DELETED, 0) = 0 ")
.append(" AND ai.STTP = 'WVA' ")
.append(" AND ai.LGTD IS NOT NULL ");
if (StrUtil.isNotBlank(baseId)) {
paramMap.put("weAnimalPointBaseId", baseId);
sql.append("AND ai.BASE_ID = #{map.weAnimalPointBaseId} ");
}
if (StrUtil.isNotBlank(stcd)) {
paramMap.put("weAnimalPointStcd", stcd);
sql.append("AND ai.STCD = #{map.weAnimalPointStcd} ");
}
List<WeAnimalPointQgcVo> list = microservicDynamicSQLMapper.getAllListWithResultType(
sql.toString(),
paramMap,
WeAnimalPointQgcVo.class
);
SiteAvoidanceUtils.calcSiteMapLev(list,
WeAnimalPointQgcVo::getStcd,
vo -> vo.getLgtd() != null ? vo.getLgtd() : null,
vo -> vo.getLttd() != null ? vo.getLttd() : null,
WeAnimalPointQgcVo::getAnchoPointState,
WeAnimalPointQgcVo::setDistance);
DataSourceResult<WeAnimalPointQgcVo> result = new DataSourceResult<>();
result.setData(list);
result.setTotal((long) list.size());
result.setAggregates(new HashMap<>());
return result;
}
private Map<String, List<WePointFishStatVo>> queryWePointFishMap(List<String> stcdList, private Map<String, List<WePointFishStatVo>> queryWePointFishMap(List<String> stcdList,
String stcd, String stcd,
String startTime, String startTime,