feat: 电站放流统计

This commit is contained in:
tangwei 2026-07-29 14:01:33 +08:00
parent 3eb9fe4dbd
commit 64c97585a2
3 changed files with 130 additions and 0 deletions

View File

@ -85,6 +85,12 @@ public class FbStationController {
return ResponseResult.successData(fbStationService.getAggregateData(dataSourceRequest)); return ResponseResult.successData(fbStationService.getAggregateData(dataSourceRequest));
} }
@PostMapping("/station/eng/GetKendoListCust")
@Operation(summary = "电站放流统计")
public ResponseResult getEngKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
return ResponseResult.successData(fbStationService.getEngKendoListCust(dataSourceRequest));
}
@PostMapping("/msfbrdm/fbFlData/GetKendoListCust") @PostMapping("/msfbrdm/fbFlData/GetKendoListCust")
@Operation(summary = "增殖站增殖情况(app)") @Operation(summary = "增殖站增殖情况(app)")
public ResponseResult getFbFlData(@RequestBody DataSourceRequest dataSourceRequest) { public ResponseResult getFbFlData(@RequestBody DataSourceRequest dataSourceRequest) {

View File

@ -73,4 +73,9 @@ public interface FbStationService {
* 电站放流统计-返回有数据的年份 * 电站放流统计-返回有数据的年份
*/ */
DataSourceResult<FbEngFishVo> getAggregateData(DataSourceRequest dataSourceRequest); DataSourceResult<FbEngFishVo> getAggregateData(DataSourceRequest dataSourceRequest);
/**
* 电站放流统计列表
*/
DataSourceResult<FbEngFishVo> getEngKendoListCust(DataSourceRequest dataSourceRequest);
} }

View File

@ -4907,6 +4907,125 @@ public class FbStationServiceImpl implements FbStationService {
return sql.toString(); return sql.toString();
} }
@Override
public DataSourceResult<FbEngFishVo> getEngKendoListCust(DataSourceRequest dataSourceRequest) {
DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest();
String startTime = loadOptions == null ? null : QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "startTime");
String endTime = loadOptions == null ? null : QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "endTime");
List<String> stcdList = resolveStcdList(dataSourceRequest, loadOptions);
Map<String, Object> paramMap = new HashMap<>();
String sql = buildEngKendoListCustSql(startTime, endTime, stcdList, paramMap);
List<FbEngFishVo> list = microservicDynamicSQLMapper.pageAllListWithResultType(
null, sql, paramMap, FbEngFishVo.class
);
DataSourceResult<FbEngFishVo> result = new DataSourceResult<>();
result.setData(list.stream()
.filter(it -> StrUtil.isNotBlank(it.getStcd()))
.collect(Collectors.toList()));
result.setTotal(list.size());
return result;
}
/**
* 构建电站放流统计列表 SQL
* <p>
* UNION 合并计划放流和实际放流数据确保同时有两类数据的电站不遗漏
* 上半部分以计划表为主 LEFT JOIN 实际表下半部分以实际表为主 LEFT JOIN 计划表
* </p>
*/
private String buildEngKendoListCustSql(String startTime, String endTime,
List<String> stcdList, Map<String, Object> paramMap) {
String planTable = "SD_ENGFRPLAN_B";
String planDetTable = "SD_ENGFRPLANDET_B";
String actualTable = "SD_ENGFR_R";
String actualDetTable = "SD_RPIMNFISH_R";
String viewTable = "V_MS_STBPRP_T";
StringBuilder sql = new StringBuilder();
sql.append("SELECT s.STCD, t.STNM AS ennm, s.fcntjh, s.fcntjc ");
sql.append("FROM ( ");
// 上半部分计划表为主 LEFT JOIN 实际表
sql.append("SELECT jh.STCD, jh.fcntjh, jc.fcntjc FROM ( ");
sql.append("SELECT a.STCD, SUM(NVL(b.FCNT, 0)) AS fcntjh ");
sql.append("FROM ").append(planTable).append(" a ");
sql.append("LEFT JOIN ").append(planDetTable).append(" b ON a.ID = b.RPJH_ID ");
sql.append("WHERE NVL(a.IS_DELETED, 0) = 0 ");
if (StrUtil.isNotBlank(startTime)) {
paramMap.put("planStartTime1", DateUtil.parse(startTime));
sql.append("AND a.PLANSD >= #{map.planStartTime1} ");
}
if (StrUtil.isNotBlank(endTime)) {
paramMap.put("planEndTime1", DateUtil.parse(endTime));
sql.append("AND a.PLANED <= #{map.planEndTime1} ");
}
sql.append("GROUP BY a.STCD ");
sql.append(") jh ");
sql.append("LEFT JOIN ( ");
sql.append("SELECT a.STCD, SUM(NVL(b.FCNT, 0)) AS fcntjc ");
sql.append("FROM ").append(actualTable).append(" a ");
sql.append("LEFT JOIN ").append(actualDetTable).append(" b ON a.ID = b.RPIMN_ID AND NVL(b.IS_DELETED, 0) = 0 ");
sql.append("WHERE NVL(a.IS_DELETED, 0) = 0 ");
// sql.append("AND (a.TASK_STATUS = 'Approved' OR a.TASK_STATUS IS NULL) ");
if (StrUtil.isNotBlank(startTime)) {
paramMap.put("actStartTime1", DateUtil.parse(startTime));
sql.append("AND a.TM >= #{map.actStartTime1} ");
}
if (StrUtil.isNotBlank(endTime)) {
paramMap.put("actEndTime1", DateUtil.parse(endTime));
sql.append("AND a.TM <= #{map.actEndTime1} ");
}
sql.append("GROUP BY a.STCD ");
sql.append(") jc ON jh.STCD = jc.STCD ");
sql.append("UNION ");
// 下半部分实际表为主 LEFT JOIN 计划表
sql.append("SELECT jc.STCD, jh.fcntjh, jc.fcntjc FROM ( ");
sql.append("SELECT a.STCD, SUM(NVL(b.FCNT, 0)) AS fcntjc ");
sql.append("FROM ").append(actualTable).append(" a ");
sql.append("LEFT JOIN ").append(actualDetTable).append(" b ON a.ID = b.RPIMN_ID AND NVL(b.IS_DELETED, 0) = 0 ");
sql.append("WHERE NVL(a.IS_DELETED, 0) = 0 ");
// sql.append("AND (a.TASK_STATUS = 'Approved' OR a.TASK_STATUS IS NULL) ");
if (StrUtil.isNotBlank(startTime)) {
paramMap.put("actStartTime2", DateUtil.parse(startTime));
sql.append("AND a.TM >= #{map.actStartTime2} ");
}
if (StrUtil.isNotBlank(endTime)) {
paramMap.put("actEndTime2", DateUtil.parse(endTime));
sql.append("AND a.TM <= #{map.actEndTime2} ");
}
sql.append("GROUP BY a.STCD ");
sql.append(") jc ");
sql.append("LEFT JOIN ( ");
sql.append("SELECT a.STCD, SUM(NVL(b.FCNT, 0)) AS fcntjh ");
sql.append("FROM ").append(planTable).append(" a ");
sql.append("LEFT JOIN ").append(planDetTable).append(" b ON a.ID = b.RPJH_ID ");
sql.append("WHERE NVL(a.IS_DELETED, 0) = 0 ");
if (StrUtil.isNotBlank(startTime)) {
paramMap.put("planStartTime2", DateUtil.parse(startTime));
sql.append("AND a.PLANSD >= #{map.planStartTime2} ");
}
if (StrUtil.isNotBlank(endTime)) {
paramMap.put("planEndTime2", DateUtil.parse(endTime));
sql.append("AND a.PLANED <= #{map.planEndTime2} ");
}
sql.append("GROUP BY a.STCD ");
sql.append(") jh ON jc.STCD = jh.STCD ");
sql.append(") s ");
sql.append("LEFT JOIN ").append(viewTable).append(" t ON s.STCD = t.STCD ");
sql.append("WHERE 1 = 1 ");
appendInCondition(sql, paramMap, "s.STCD", stcdList, "engStcd");
sql.append("ORDER BY t.SITESTEPSORT ");
return sql.toString();
}
private static class FbPointCountVo { private static class FbPointCountVo {
private String stcd; private String stcd;
private Long fcnt; private Long fcnt;