feat: 电站放流统计
This commit is contained in:
parent
3eb9fe4dbd
commit
64c97585a2
@ -85,6 +85,12 @@ public class FbStationController {
|
||||
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")
|
||||
@Operation(summary = "增殖站增殖情况(app)")
|
||||
public ResponseResult getFbFlData(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||
|
||||
@ -73,4 +73,9 @@ public interface FbStationService {
|
||||
* 电站放流统计-返回有数据的年份
|
||||
*/
|
||||
DataSourceResult<FbEngFishVo> getAggregateData(DataSourceRequest dataSourceRequest);
|
||||
|
||||
/**
|
||||
* 电站放流统计列表
|
||||
*/
|
||||
DataSourceResult<FbEngFishVo> getEngKendoListCust(DataSourceRequest dataSourceRequest);
|
||||
}
|
||||
|
||||
@ -4907,6 +4907,125 @@ public class FbStationServiceImpl implements FbStationService {
|
||||
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 String stcd;
|
||||
private Long fcnt;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user