feat: 增殖站概况二级页面

This commit is contained in:
tangwei 2026-06-15 17:41:49 +08:00
parent 229a987dfa
commit 95e6a5271b
3 changed files with 151 additions and 0 deletions

View File

@ -26,4 +26,10 @@ public class FbStationController {
public ResponseResult getQgcOverviewSecond(@RequestBody DataSourceRequest dataSourceRequest) {
return ResponseResult.successData(fbStationService.getQgcOverviewSecond(dataSourceRequest));
}
@PostMapping("/overview/getOverviewSecond")
@Operation(summary = "增殖站概况二级页面")
public ResponseResult getOverviewSecond(@RequestBody DataSourceRequest dataSourceRequest) {
return ResponseResult.successData(fbStationService.getOverviewSecond(dataSourceRequest));
}
}

View File

@ -6,5 +6,7 @@ import com.yfd.platform.qgc_env.fb.entity.vo.FbStationOverviewSecondVo;
public interface FbStationService {
DataSourceResult<FbStationOverviewSecondVo> getOverviewSecond(DataSourceRequest dataSourceRequest);
DataSourceResult<FbStationOverviewSecondVo> getQgcOverviewSecond(DataSourceRequest dataSourceRequest);
}

View File

@ -25,6 +25,27 @@ public class FbStationServiceImpl implements FbStationService {
@Resource
private MicroservicDynamicSQLMapper microservicDynamicSQLMapper;
@Override
public DataSourceResult<FbStationOverviewSecondVo> getOverviewSecond(DataSourceRequest dataSourceRequest) {
DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest();
String year = loadOptions == null ? null : QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "year");
String baseId = loadOptions == null ? null : QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "baseId");
String stnm = loadOptions == null ? null : QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "stnm");
List<String> stcdList = resolveStcdList(dataSourceRequest, loadOptions);
Map<String, Object> paramMap = new HashMap<>();
String sql = buildOverviewSecondSql(year, baseId, stnm, stcdList, paramMap);
List<FbStationOverviewSecondVo> list = microservicDynamicSQLMapper.pageAllListWithResultType(
null, sql, paramMap, FbStationOverviewSecondVo.class
);
DataSourceResult<FbStationOverviewSecondVo> result = new DataSourceResult<>();
result.setData(list);
result.setTotal(list.size());
result.setAggregates(new HashMap<>());
return result;
}
@Override
public DataSourceResult<FbStationOverviewSecondVo> getQgcOverviewSecond(DataSourceRequest dataSourceRequest) {
DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest();
@ -47,6 +68,45 @@ public class FbStationServiceImpl implements FbStationService {
return result;
}
private String buildOverviewSecondSql(String year,
String baseId,
String stnm,
List<String> stcdList,
Map<String, Object> paramMap) {
StringBuilder sql = new StringBuilder();
sql.append("SELECT fb.STCD AS stcd, ")
.append("fb.STNM AS stnm, ")
.append("eng.ENNM AS ennm, ")
.append("fb.INV AS totalInv, ")
.append("t.YEAR AS year, ")
.append("MAX(t.planFtp) AS planFtp, ")
.append("SUM(t.fcntjh) AS fcntjh, ")
.append("MAX(t.realftp) AS realftp, ")
.append("SUM(t.realfcnt) AS realfcnt, ")
.append("TO_CHAR(SUM(t.realfcnt)) AS realfcntStr ")
.append("FROM SD_FBRD_B_H fb ")
.append("LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = fb.RSTCD ")
.append(" AND NVL(eng.IS_DELETED, 0) = 0 ")
.append("LEFT JOIN (")
.append(buildOverviewPlanUnionActualSql(year, stcdList, paramMap))
.append(") t ON fb.STCD = t.rstcd ")
.append("WHERE 1 = 1 ");
if (StrUtil.isNotBlank(stnm)) {
paramMap.put("overviewStnm", "%" + stnm.trim() + "%");
sql.append("AND fb.STNM LIKE #{map.overviewStnm} ");
}
if (StrUtil.isNotBlank(baseId)) {
paramMap.put("overviewBaseId", baseId.trim());
sql.append("AND fb.BASE_ID = #{map.overviewBaseId} ");
}
appendLikeAnyCondition(sql, paramMap, "NVL(fb.RENGCD, fb.RSTCD)", stcdList, "overviewStationFilter");
sql.append("GROUP BY fb.STCD, fb.STNM, eng.ENNM, t.YEAR, fb.INV ")
.append("ORDER BY fb.STCD ASC");
return sql.toString();
}
private String buildQgcOverviewSecondSql(String year,
String baseId,
String hbrvcd,
@ -94,6 +154,78 @@ public class FbStationServiceImpl implements FbStationService {
return buildPlanSql(year, stcdList, paramMap) + " UNION ALL " + buildActualSql(year, stcdList, paramMap);
}
private String buildOverviewPlanUnionActualSql(String year, List<String> stcdList, Map<String, Object> paramMap) {
return buildOverviewPlanSql(year, stcdList, paramMap) + " UNION ALL "
+ buildOverviewActualSql(year, stcdList, paramMap);
}
private String buildOverviewPlanSql(String year, List<String> stcdList, Map<String, Object> paramMap) {
String fishNameExpr = buildFishViewNameExpr("det.FTP");
StringBuilder sql = new StringBuilder();
sql.append("SELECT planFish.RSTCD AS rstcd, ")
.append("LISTAGG(planFish.NAME, ', ') WITHIN GROUP (ORDER BY planFish.NAME) AS planFtp, ")
.append("SUM(planFish.FCNT) AS fcntjh, ")
.append("CAST(NULL AS VARCHAR2(4000)) AS realftp, ")
.append("CAST(NULL AS NUMBER(18, 2)) AS realfcnt, ")
.append("TO_CHAR(planFish.PLANSD, 'YYYY') AS year ")
.append("FROM ( ")
.append(" SELECT plan.RSTCD AS RSTCD, plan.PLANSD AS PLANSD, ")
.append(" ").append(fishNameExpr).append(" AS NAME, ")
.append(" SUM(det.FCNT) AS FCNT ")
.append(" FROM SD_ENGFRPLAN_B plan ")
.append(" LEFT JOIN SD_ENGFRPLANDET_B det ON plan.ID = det.RPJH_ID ")
.append(" INNER JOIN SD_FBRD_B_H fbPlan ON fbPlan.STCD = plan.RSTCD ")
.append(buildFishViewJoinSql("det.FTP", "fbPlan.HBRVCD"))
.append(" WHERE NVL(plan.IS_DELETED, 0) = 0 ")
.append(" AND NVL(det.IS_DELETED, 0) = 0 ")
.append(" AND det.FTP IS NOT NULL ");
if (StrUtil.isNotBlank(year)) {
paramMap.put("overviewPlanYear", year.trim());
sql.append("AND TO_CHAR(plan.PLANSD, 'YYYY') = #{map.overviewPlanYear} ");
}
appendInCondition(sql, paramMap, "plan.STCD", stcdList, "overviewPlanStcd");
sql.append(" GROUP BY plan.RSTCD, plan.PLANSD, ").append(fishNameExpr).append(" ")
.append(") planFish ")
.append("GROUP BY planFish.RSTCD, TO_CHAR(planFish.PLANSD, 'YYYY') ");
return sql.toString();
}
private String buildOverviewActualSql(String year, List<String> stcdList, Map<String, Object> paramMap) {
String fishNameExpr = buildFishViewNameExpr("det.FTP");
StringBuilder sql = new StringBuilder();
sql.append("SELECT actualFish.RSTCD AS rstcd, ")
.append("CAST(NULL AS VARCHAR2(4000)) AS planFtp, ")
.append("CAST(NULL AS NUMBER(18, 2)) AS fcntjh, ")
.append("LISTAGG(actualFish.NAME, ', ') WITHIN GROUP (ORDER BY actualFish.NAME) AS realftp, ")
.append("SUM(actualFish.FCNT) AS realfcnt, ")
.append("actualFish.YR AS year ")
.append("FROM ( ")
.append(" SELECT run.RSTCD AS RSTCD, ")
.append(" TO_CHAR(run.TM, 'YYYY') AS YR, ")
.append(" ").append(fishNameExpr).append(" AS NAME, ")
.append(" SUM(det.FCNT) AS FCNT ")
.append(" FROM SD_ENGFR_R run ")
.append(" LEFT JOIN SD_RPIMNFISH_R det ON run.ID = det.RPIMN_ID ")
.append(" AND NVL(det.IS_DELETED, 0) = 0 ")
.append(" AND det.FTP IS NOT NULL ")
.append(" INNER JOIN SD_FBRD_B_H fbRun ON fbRun.STCD = run.RSTCD ")
.append(buildFishViewJoinSql("det.FTP", "fbRun.HBRVCD"))
.append(" WHERE NVL(run.IS_DELETED, 0) = 0 ");
if (StrUtil.isNotBlank(year)) {
paramMap.put("overviewActualYear", year.trim());
sql.append("AND TO_CHAR(run.TM, 'YYYY') = #{map.overviewActualYear} ");
}
appendInCondition(sql, paramMap, "run.STCD", stcdList, "overviewActualStcd");
sql.append(" GROUP BY run.RSTCD, TO_CHAR(run.TM, 'YYYY'), ").append(fishNameExpr).append(" ")
.append(") actualFish ")
.append("GROUP BY actualFish.RSTCD, actualFish.YR ");
return sql.toString();
}
private String buildPlanSql(String year, List<String> stcdList, Map<String, Object> paramMap) {
String fishNameExpr = buildFishNameExpr("det.FTP");
StringBuilder sql = new StringBuilder();
@ -185,6 +317,17 @@ public class FbStationServiceImpl implements FbStationService {
return "COALESCE(fishRv.NAME, relRv.FISH_NAME, fishZy.NAME, relZy.FISH_NAME, fishDirect.NAME, " + fishFieldExpr + ")";
}
private String buildFishViewJoinSql(String fishFieldExpr, String hbrvcdFieldExpr) {
return " LEFT JOIN V_SD_FISHDICTORY_B fishViewRv ON fishViewRv.FISH_ID = " + fishFieldExpr +
" AND fishViewRv.RVCD = " + hbrvcdFieldExpr +
" LEFT JOIN V_SD_FISHDICTORY_B fishViewZy ON fishViewZy.FISH_ID = " + fishFieldExpr +
" AND fishViewZy.RVCD = 'ZY' ";
}
private String buildFishViewNameExpr(String fishFieldExpr) {
return "COALESCE(fishViewRv.NAME, fishViewZy.NAME, " + fishFieldExpr + ")";
}
private void appendInCondition(StringBuilder sql,
Map<String, Object> paramMap,
String column,