feat: (全过程)增殖站二级页面: 增殖放流情况
This commit is contained in:
parent
da213852f6
commit
2c37ad6cb3
@ -26,4 +26,10 @@ public class FbMsfbrdmController {
|
|||||||
public ResponseResult getFbFlData(@RequestBody DataSourceRequest dataSourceRequest) {
|
public ResponseResult getFbFlData(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||||
return ResponseResult.successData(fbStationService.getFbFlDataKendoListCust(dataSourceRequest));
|
return ResponseResult.successData(fbStationService.getFbFlDataKendoListCust(dataSourceRequest));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PostMapping("/qgc/GetKendoListCust")
|
||||||
|
@Operation(summary = "(全过程)增殖站二级页面: 增殖放流情况")
|
||||||
|
public ResponseResult getQgcKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||||
|
return ResponseResult.successData(fbStationService.getQgcMsfbrdmKendoListCust(dataSourceRequest));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,47 @@
|
|||||||
|
package com.yfd.platform.qgc_env.fb.entity.vo;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class FbMsfbrdmQgcVo {
|
||||||
|
|
||||||
|
private String stcd;
|
||||||
|
|
||||||
|
private String stnm;
|
||||||
|
|
||||||
|
private String baseId;
|
||||||
|
|
||||||
|
private String baseName;
|
||||||
|
|
||||||
|
private String rstcd;
|
||||||
|
|
||||||
|
private String ennm;
|
||||||
|
|
||||||
|
private Integer bldstt;
|
||||||
|
|
||||||
|
private Integer hydrodtin;
|
||||||
|
|
||||||
|
private Integer runState;
|
||||||
|
|
||||||
|
private String runStateName;
|
||||||
|
|
||||||
|
private String ftp;
|
||||||
|
|
||||||
|
private String ftpName;
|
||||||
|
|
||||||
|
private Long fcntjh;
|
||||||
|
|
||||||
|
private Long fcntjc;
|
||||||
|
|
||||||
|
private String flyr;
|
||||||
|
|
||||||
|
private String fsz;
|
||||||
|
|
||||||
|
private String fwet;
|
||||||
|
|
||||||
|
private String fid;
|
||||||
|
|
||||||
|
private List<FbReleaseDirectionVo> directionVoList;
|
||||||
|
}
|
||||||
@ -0,0 +1,21 @@
|
|||||||
|
package com.yfd.platform.qgc_env.fb.entity.vo;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.experimental.Accessors;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@Accessors(chain = true)
|
||||||
|
public class FbReleaseDirectionVo {
|
||||||
|
|
||||||
|
private String flstcd;
|
||||||
|
|
||||||
|
private String flstnm;
|
||||||
|
|
||||||
|
private Long flfnct;
|
||||||
|
|
||||||
|
private String flyr;
|
||||||
|
|
||||||
|
private String ftp;
|
||||||
|
|
||||||
|
private String stcd;
|
||||||
|
}
|
||||||
@ -6,6 +6,7 @@ import com.yfd.platform.qgc_env.fb.entity.vo.FbBsmfRQgcVo;
|
|||||||
import com.yfd.platform.qgc_env.fb.entity.vo.FbBsmfRFishTableVo;
|
import com.yfd.platform.qgc_env.fb.entity.vo.FbBsmfRFishTableVo;
|
||||||
import com.yfd.platform.qgc_env.fb.entity.vo.FbFlDataVo;
|
import com.yfd.platform.qgc_env.fb.entity.vo.FbFlDataVo;
|
||||||
import com.yfd.platform.qgc_env.fb.entity.vo.FbRelatedYrVo;
|
import com.yfd.platform.qgc_env.fb.entity.vo.FbRelatedYrVo;
|
||||||
|
import com.yfd.platform.qgc_env.fb.entity.vo.FbMsfbrdmQgcVo;
|
||||||
import com.yfd.platform.qgc_env.fb.entity.vo.FbResearchVo;
|
import com.yfd.platform.qgc_env.fb.entity.vo.FbResearchVo;
|
||||||
import com.yfd.platform.qgc_env.fb.entity.vo.FbStInfoResultVo;
|
import com.yfd.platform.qgc_env.fb.entity.vo.FbStInfoResultVo;
|
||||||
import com.yfd.platform.qgc_env.fb.entity.vo.FbStationStaticsDataVo;
|
import com.yfd.platform.qgc_env.fb.entity.vo.FbStationStaticsDataVo;
|
||||||
@ -22,6 +23,8 @@ public interface FbStationService {
|
|||||||
|
|
||||||
DataSourceResult<FbFlDataVo> getFbFlDataKendoListCust(DataSourceRequest dataSourceRequest);
|
DataSourceResult<FbFlDataVo> getFbFlDataKendoListCust(DataSourceRequest dataSourceRequest);
|
||||||
|
|
||||||
|
DataSourceResult<FbMsfbrdmQgcVo> getQgcMsfbrdmKendoListCust(DataSourceRequest dataSourceRequest);
|
||||||
|
|
||||||
DataSourceResult<FbBsmfRQgcVo> getQgcBsmfRKendoListCust(DataSourceRequest dataSourceRequest);
|
DataSourceResult<FbBsmfRQgcVo> getQgcBsmfRKendoListCust(DataSourceRequest dataSourceRequest);
|
||||||
|
|
||||||
DataSourceResult<FbBsmfRFishTableVo> getBsmfRFishKendoListCust(DataSourceRequest dataSourceRequest);
|
DataSourceResult<FbBsmfRFishTableVo> getBsmfRFishKendoListCust(DataSourceRequest dataSourceRequest);
|
||||||
|
|||||||
@ -17,7 +17,9 @@ import com.yfd.platform.qgc_env.fb.entity.vo.FbBsmfRFishSummaryVo;
|
|||||||
import com.yfd.platform.qgc_env.fb.entity.vo.FbBsmfRFishTableVo;
|
import com.yfd.platform.qgc_env.fb.entity.vo.FbBsmfRFishTableVo;
|
||||||
import com.yfd.platform.qgc_env.fb.entity.vo.FbFtpStatisticsVo;
|
import com.yfd.platform.qgc_env.fb.entity.vo.FbFtpStatisticsVo;
|
||||||
import com.yfd.platform.qgc_env.fb.entity.vo.FbFlDataVo;
|
import com.yfd.platform.qgc_env.fb.entity.vo.FbFlDataVo;
|
||||||
|
import com.yfd.platform.qgc_env.fb.entity.vo.FbMsfbrdmQgcVo;
|
||||||
import com.yfd.platform.qgc_env.fb.entity.vo.FbRelatedYrVo;
|
import com.yfd.platform.qgc_env.fb.entity.vo.FbRelatedYrVo;
|
||||||
|
import com.yfd.platform.qgc_env.fb.entity.vo.FbReleaseDirectionVo;
|
||||||
import com.yfd.platform.qgc_env.fb.entity.vo.FbResearchVo;
|
import com.yfd.platform.qgc_env.fb.entity.vo.FbResearchVo;
|
||||||
import com.yfd.platform.qgc_env.fb.entity.vo.FbStBaseInfoVo;
|
import com.yfd.platform.qgc_env.fb.entity.vo.FbStBaseInfoVo;
|
||||||
import com.yfd.platform.qgc_env.fb.entity.vo.FbStInfoResultVo;
|
import com.yfd.platform.qgc_env.fb.entity.vo.FbStInfoResultVo;
|
||||||
@ -81,6 +83,16 @@ public class FbStationServiceImpl implements FbStationService {
|
|||||||
return queryFbFlDataDetailList(dataSourceRequest, loadOptions);
|
return queryFbFlDataDetailList(dataSourceRequest, loadOptions);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public DataSourceResult<FbMsfbrdmQgcVo> getQgcMsfbrdmKendoListCust(DataSourceRequest dataSourceRequest) {
|
||||||
|
DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest();
|
||||||
|
GroupingInfo[] groups = loadOptions == null ? null : loadOptions.getGroup();
|
||||||
|
if (groups != null && groups.length > 0) {
|
||||||
|
return queryQgcMsfbrdmGroupList(dataSourceRequest, loadOptions, groups);
|
||||||
|
}
|
||||||
|
return queryQgcMsfbrdmDetailList(dataSourceRequest, loadOptions);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public DataSourceResult<FbBsmfRQgcVo> getQgcBsmfRKendoListCust(DataSourceRequest dataSourceRequest) {
|
public DataSourceResult<FbBsmfRQgcVo> getQgcBsmfRKendoListCust(DataSourceRequest dataSourceRequest) {
|
||||||
DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest();
|
DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest();
|
||||||
@ -732,6 +744,505 @@ public class FbStationServiceImpl implements FbStationService {
|
|||||||
return sql.toString();
|
return sql.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private DataSourceResult<FbMsfbrdmQgcVo> queryQgcMsfbrdmDetailList(DataSourceRequest dataSourceRequest,
|
||||||
|
DataSourceLoadOptionsBase loadOptions) {
|
||||||
|
Map<String, Object> paramMap = new HashMap<>();
|
||||||
|
String startTime = loadOptions == null ? null : QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "startTime");
|
||||||
|
String endTime = loadOptions == null ? null : QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "endTime");
|
||||||
|
StringBuilder sql = new StringBuilder();
|
||||||
|
sql.append("SELECT ")
|
||||||
|
.append(buildQgcMsfbrdmDetailSelectSql(dataSourceRequest == null ? null : dataSourceRequest.getSelect()))
|
||||||
|
.append(" FROM (")
|
||||||
|
.append(buildQgcMsfbrdmCoreSql(parseDateTimeSafely(startTime), parseDateTimeSafely(endTime), paramMap))
|
||||||
|
.append(") t WHERE 1 = 1 ");
|
||||||
|
|
||||||
|
String filterSql = buildQgcMsfbrdmFilterCondition(
|
||||||
|
dataSourceRequest == null ? null : dataSourceRequest.getFilter(),
|
||||||
|
paramMap,
|
||||||
|
new int[]{0}
|
||||||
|
);
|
||||||
|
if (StrUtil.isNotBlank(filterSql)) {
|
||||||
|
sql.append(" AND ").append(filterSql).append(" ");
|
||||||
|
}
|
||||||
|
sql.append(buildQgcMsfbrdmOrderBySql(dataSourceRequest == null ? null : dataSourceRequest.getSort()));
|
||||||
|
|
||||||
|
Page<?> page = loadOptions == null ? null : QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake());
|
||||||
|
List<FbMsfbrdmQgcVo> list = microservicDynamicSQLMapper.pageAllListWithResultType(
|
||||||
|
page, sql.toString(), paramMap, FbMsfbrdmQgcVo.class
|
||||||
|
);
|
||||||
|
enrichQgcMsfbrdmDirections(list, parseDateTimeSafely(startTime), parseDateTimeSafely(endTime));
|
||||||
|
deduplicateQgcMsfbrdmFids(list);
|
||||||
|
DataSourceResult<FbMsfbrdmQgcVo> result = new DataSourceResult<>();
|
||||||
|
result.setData(list);
|
||||||
|
result.setTotal(page != null ? page.getTotal() : list.size());
|
||||||
|
result.setAggregates(new HashMap<>());
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings({"rawtypes", "unchecked"})
|
||||||
|
private DataSourceResult<FbMsfbrdmQgcVo> queryQgcMsfbrdmGroupList(DataSourceRequest dataSourceRequest,
|
||||||
|
DataSourceLoadOptionsBase loadOptions,
|
||||||
|
GroupingInfo[] groupInfos) {
|
||||||
|
Map<String, Object> paramMap = new HashMap<>();
|
||||||
|
String startTime = loadOptions == null ? null : QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "startTime");
|
||||||
|
String endTime = loadOptions == null ? null : QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "endTime");
|
||||||
|
StringBuilder sql = new StringBuilder();
|
||||||
|
sql.append("SELECT * FROM (")
|
||||||
|
.append(buildQgcMsfbrdmCoreSql(parseDateTimeSafely(startTime), parseDateTimeSafely(endTime), paramMap))
|
||||||
|
.append(") t WHERE 1 = 1 ");
|
||||||
|
|
||||||
|
String filterSql = buildQgcMsfbrdmFilterCondition(
|
||||||
|
dataSourceRequest == null ? null : dataSourceRequest.getFilter(),
|
||||||
|
paramMap,
|
||||||
|
new int[]{0}
|
||||||
|
);
|
||||||
|
if (StrUtil.isNotBlank(filterSql)) {
|
||||||
|
sql.append(" AND ").append(filterSql).append(" ");
|
||||||
|
}
|
||||||
|
|
||||||
|
String groupSql = buildQgcMsfbrdmGroupSql(sql.toString(), dataSourceRequest == null ? null : dataSourceRequest.getGroup());
|
||||||
|
List<Map<String, Object>> rows = microservicDynamicSQLMapper.pageAllList(null, groupSql, paramMap);
|
||||||
|
DataSourceResult<FbMsfbrdmQgcVo> result = new DataSourceResult<>();
|
||||||
|
if (Boolean.TRUE.equals(dataSourceRequest.getGroupResultFlat())) {
|
||||||
|
result.setData((List<FbMsfbrdmQgcVo>) (List<?>) new GroupHelper().faltGroup(rows, Arrays.asList(groupInfos)));
|
||||||
|
} else {
|
||||||
|
List<Group> grouped = new GroupHelper().group(rows, Arrays.asList(groupInfos));
|
||||||
|
populateQgcMsfbrdmGroupKeyNames(grouped);
|
||||||
|
result.setData((List<FbMsfbrdmQgcVo>) (List<?>) grouped);
|
||||||
|
}
|
||||||
|
result.setTotal(0L);
|
||||||
|
result.setAggregates(new HashMap<>());
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String buildQgcMsfbrdmCoreSql(Date startTime, Date endTime, Map<String, Object> paramMap) {
|
||||||
|
Integer year = startTime == null ? null : Integer.parseInt(DateUtil.format(startTime, "yyyy"));
|
||||||
|
String ftpCodeExpr = "COALESCE(TO_CHAR(NVL(relRv.ZY_FISH_ID, relRv.FISH_ID)), " +
|
||||||
|
"TO_CHAR(NVL(relZy.ZY_FISH_ID, relZy.FISH_ID)), TO_CHAR(stat.FTP))";
|
||||||
|
String ftpNameExpr = buildFishNameExpr("stat.FTP");
|
||||||
|
StringBuilder sql = new StringBuilder();
|
||||||
|
sql.append("SELECT fb.STCD AS stcd, ")
|
||||||
|
.append("fb.STNM AS stnm, ")
|
||||||
|
.append("fb.RSTCD AS rstcd, ")
|
||||||
|
.append("eng.ENNM AS ennm, ")
|
||||||
|
.append("fb.BASE_ID AS baseId, ")
|
||||||
|
.append("hb.BASENAME AS baseName, ")
|
||||||
|
.append("TO_CHAR(mt.YR) AS flyr, ")
|
||||||
|
.append(ftpCodeExpr).append(" AS ftp, ")
|
||||||
|
.append(ftpNameExpr).append(" AS ftpName, ")
|
||||||
|
.append("stat.FCNTJH AS fcntjh, ")
|
||||||
|
.append("stat.FCNTJC AS fcntjc, ")
|
||||||
|
.append("stat.FSZ AS fsz, ")
|
||||||
|
.append("stat.FWET AS fwet, ")
|
||||||
|
.append("fb.DTIN AS hydrodtin, ")
|
||||||
|
.append("fb.BLDSTT_CODE AS bldstt, ")
|
||||||
|
.append("mt.STD_SSTATE AS runState, ")
|
||||||
|
.append("CASE mt.STD_SSTATE ")
|
||||||
|
.append(" WHEN 0 THEN '数据未接入' ")
|
||||||
|
.append(" WHEN 1 THEN '正常运行' ")
|
||||||
|
.append(" WHEN 2 THEN '未正常报送数据' ")
|
||||||
|
.append(" WHEN 3 THEN '未正常运行' ")
|
||||||
|
.append(" ELSE NULL END AS runStateName, ")
|
||||||
|
.append("stat.FID AS fid ")
|
||||||
|
.append("FROM MS_STSTATE_T mt ")
|
||||||
|
.append("INNER JOIN SD_FBRD_B_H fb ON fb.STCD = mt.STCD ")
|
||||||
|
.append(" AND NVL(fb.IS_DELETED, 0) = 0 ")
|
||||||
|
.append("LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = fb.RSTCD ")
|
||||||
|
.append(" AND NVL(eng.IS_DELETED, 0) = 0 ")
|
||||||
|
.append("LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = fb.BASE_ID ")
|
||||||
|
.append(" AND NVL(hb.IS_DELETED, 0) = 0 ")
|
||||||
|
.append(" AND NVL(hb.ENABLED, 1) = 1 ")
|
||||||
|
.append("LEFT JOIN (")
|
||||||
|
.append(" SELECT COALESCE(planAgg.STCD, actualAgg.STCD) AS STCD, ")
|
||||||
|
.append(" COALESCE(planAgg.FTP, actualAgg.FTP) AS FTP, ")
|
||||||
|
.append(" COALESCE(planAgg.FLYR, actualAgg.FLYR) AS FLYR, ")
|
||||||
|
.append(" planAgg.FCNTJH AS FCNTJH, ")
|
||||||
|
.append(" actualAgg.FCNTJC AS FCNTJC, ")
|
||||||
|
.append(" actualAgg.FID AS FID, ")
|
||||||
|
.append(" actualAgg.FSZ AS FSZ, ")
|
||||||
|
.append(" actualAgg.FWET AS FWET ")
|
||||||
|
.append(" FROM (")
|
||||||
|
.append(" SELECT plan.RSTCD AS STCD, ")
|
||||||
|
.append(" planDet.FTP AS FTP, ")
|
||||||
|
.append(" TO_NUMBER(TO_CHAR(plan.PLANSD, 'YYYY')) AS FLYR, ")
|
||||||
|
.append(" SUM(planDet.FCNT) AS FCNTJH ")
|
||||||
|
.append(" FROM SD_ENGFRPLAN_B plan ")
|
||||||
|
.append(" INNER JOIN SD_ENGFRPLANDET_B planDet ON plan.ID = planDet.RPJH_ID ")
|
||||||
|
.append(" AND NVL(planDet.IS_DELETED, 0) = 0 ")
|
||||||
|
.append(" AND planDet.FTP IS NOT NULL ")
|
||||||
|
.append(" WHERE NVL(plan.IS_DELETED, 0) = 0 ");
|
||||||
|
if (startTime != null) {
|
||||||
|
paramMap.put("qgcMsfbrdmPlanStart", startTime);
|
||||||
|
sql.append(" AND plan.PLANSD >= #{map.qgcMsfbrdmPlanStart} ");
|
||||||
|
}
|
||||||
|
if (endTime != null) {
|
||||||
|
paramMap.put("qgcMsfbrdmPlanEnd", endTime);
|
||||||
|
sql.append(" AND plan.PLANED <= #{map.qgcMsfbrdmPlanEnd} ");
|
||||||
|
}
|
||||||
|
sql.append(" GROUP BY plan.RSTCD, planDet.FTP, TO_NUMBER(TO_CHAR(plan.PLANSD, 'YYYY')) ")
|
||||||
|
.append(" ) planAgg ")
|
||||||
|
.append(" FULL OUTER JOIN (")
|
||||||
|
.append(" SELECT run.RSTCD AS STCD, ")
|
||||||
|
.append(" actualDet.FTP AS FTP, ")
|
||||||
|
.append(" TO_NUMBER(TO_CHAR(run.TM, 'YYYY')) AS FLYR, ")
|
||||||
|
.append(" SUM(actualDet.FCNT) AS FCNTJC, ")
|
||||||
|
.append(" LISTAGG(run.FPRFID || ',' || run.FLRFID || ',' || run.BRRFID || ',' || run.BRFFID, ',') ")
|
||||||
|
.append(" WITHIN GROUP (ORDER BY run.ID) AS FID, ")
|
||||||
|
.append(" MAX(actualDet.FSZ) AS FSZ, ")
|
||||||
|
.append(" MAX(actualDet.FWET) AS FWET ")
|
||||||
|
.append(" FROM SD_ENGFR_R run ")
|
||||||
|
.append(" INNER JOIN SD_RPIMNFISH_R actualDet ON run.ID = actualDet.RPIMN_ID ")
|
||||||
|
.append(" AND NVL(actualDet.IS_DELETED, 0) = 0 ")
|
||||||
|
.append(" AND actualDet.FTP IS NOT NULL ")
|
||||||
|
.append(" WHERE NVL(run.IS_DELETED, 0) = 0 ");
|
||||||
|
if (startTime != null) {
|
||||||
|
paramMap.put("qgcMsfbrdmRunStart", startTime);
|
||||||
|
sql.append(" AND run.TM >= #{map.qgcMsfbrdmRunStart} ");
|
||||||
|
}
|
||||||
|
if (endTime != null) {
|
||||||
|
paramMap.put("qgcMsfbrdmRunEnd", endTime);
|
||||||
|
sql.append(" AND run.TM <= #{map.qgcMsfbrdmRunEnd} ");
|
||||||
|
}
|
||||||
|
sql.append(" GROUP BY run.RSTCD, actualDet.FTP, TO_NUMBER(TO_CHAR(run.TM, 'YYYY')) ")
|
||||||
|
.append(" ) actualAgg ")
|
||||||
|
.append(" ON planAgg.STCD = actualAgg.STCD ")
|
||||||
|
.append(" AND NVL(planAgg.FTP, '~') = NVL(actualAgg.FTP, '~') ")
|
||||||
|
.append(" AND NVL(planAgg.FLYR, -1) = NVL(actualAgg.FLYR, -1) ")
|
||||||
|
.append(") stat ON stat.STCD = mt.STCD AND stat.FLYR = mt.YR ")
|
||||||
|
.append(buildFishJoinSql("stat.FTP", "fb.HBRVCD"))
|
||||||
|
.append("WHERE NVL(mt.IS_DELETED, 0) = 0 ")
|
||||||
|
.append(" AND mt.STTP_CODE = 'FB' ");
|
||||||
|
if (year != null) {
|
||||||
|
paramMap.put("qgcMsfbrdmYear", year);
|
||||||
|
sql.append(" AND mt.YR = #{map.qgcMsfbrdmYear} ");
|
||||||
|
}
|
||||||
|
return sql.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void enrichQgcMsfbrdmDirections(List<FbMsfbrdmQgcVo> list, Date startTime, Date endTime) {
|
||||||
|
if (CollUtil.isEmpty(list)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Map<String, Object> paramMap = new HashMap<>();
|
||||||
|
StringBuilder sql = new StringBuilder();
|
||||||
|
sql.append("SELECT run.STCD AS flstcd, ")
|
||||||
|
.append(" eng.ENNM AS flstnm, ")
|
||||||
|
.append(" SUM(det.FCNT) AS flfnct, ")
|
||||||
|
.append(" TO_CHAR(run.TM, 'YYYY') AS flyr, ")
|
||||||
|
.append(" COALESCE(TO_CHAR(NVL(relRv.ZY_FISH_ID, relRv.FISH_ID)), ")
|
||||||
|
.append(" TO_CHAR(NVL(relZy.ZY_FISH_ID, relZy.FISH_ID)), TO_CHAR(det.FTP)) AS ftp, ")
|
||||||
|
.append(" run.RSTCD AS stcd ")
|
||||||
|
.append("FROM SD_ENGFR_R run ")
|
||||||
|
.append("INNER JOIN SD_RPIMNFISH_R det ON det.RPIMN_ID = run.ID ")
|
||||||
|
.append(" AND NVL(det.IS_DELETED, 0) = 0 ")
|
||||||
|
.append("LEFT JOIN SD_FBRD_B_H fb ON fb.STCD = run.RSTCD ")
|
||||||
|
.append(" AND NVL(fb.IS_DELETED, 0) = 0 ")
|
||||||
|
.append("LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = run.STCD ")
|
||||||
|
.append(" AND NVL(eng.IS_DELETED, 0) = 0 ")
|
||||||
|
.append(buildFishJoinSql("det.FTP", "fb.HBRVCD"))
|
||||||
|
.append("WHERE NVL(run.IS_DELETED, 0) = 0 ");
|
||||||
|
if (startTime != null) {
|
||||||
|
paramMap.put("qgcMsfbrdmDirStart", startTime);
|
||||||
|
sql.append(" AND run.TM >= #{map.qgcMsfbrdmDirStart} ");
|
||||||
|
}
|
||||||
|
if (endTime != null) {
|
||||||
|
paramMap.put("qgcMsfbrdmDirEnd", endTime);
|
||||||
|
sql.append(" AND run.TM <= #{map.qgcMsfbrdmDirEnd} ");
|
||||||
|
}
|
||||||
|
sql.append("GROUP BY run.STCD, eng.ENNM, TO_CHAR(run.TM, 'YYYY'), ")
|
||||||
|
.append(" COALESCE(TO_CHAR(NVL(relRv.ZY_FISH_ID, relRv.FISH_ID)), ")
|
||||||
|
.append(" TO_CHAR(NVL(relZy.ZY_FISH_ID, relZy.FISH_ID)), TO_CHAR(det.FTP)), ")
|
||||||
|
.append(" run.RSTCD ");
|
||||||
|
|
||||||
|
List<FbReleaseDirectionVo> directions = microservicDynamicSQLMapper.pageAllListWithResultType(
|
||||||
|
null, sql.toString(), paramMap, FbReleaseDirectionVo.class
|
||||||
|
);
|
||||||
|
if (CollUtil.isEmpty(directions)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Map<String, List<FbReleaseDirectionVo>> directionMap = directions.stream()
|
||||||
|
.collect(Collectors.groupingBy(
|
||||||
|
item -> StrUtil.blankToDefault(item.getStcd(), "") + "|" +
|
||||||
|
StrUtil.blankToDefault(item.getFtp(), "") + "|" +
|
||||||
|
StrUtil.blankToDefault(item.getFlyr(), ""),
|
||||||
|
LinkedHashMap::new,
|
||||||
|
Collectors.toList()
|
||||||
|
));
|
||||||
|
for (FbMsfbrdmQgcVo item : list) {
|
||||||
|
String key = StrUtil.blankToDefault(item.getStcd(), "") + "|" +
|
||||||
|
StrUtil.blankToDefault(item.getFtp(), "") + "|" +
|
||||||
|
StrUtil.blankToDefault(item.getFlyr(), "");
|
||||||
|
item.setDirectionVoList(directionMap.getOrDefault(key, Collections.emptyList()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void deduplicateQgcMsfbrdmFids(List<FbMsfbrdmQgcVo> list) {
|
||||||
|
if (CollUtil.isEmpty(list)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for (FbMsfbrdmQgcVo item : list) {
|
||||||
|
if (item == null || StrUtil.isBlank(item.getFid())) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
Set<String> fidSet = Arrays.stream(item.getFid().split(","))
|
||||||
|
.map(StrUtil::trim)
|
||||||
|
.filter(StrUtil::isNotBlank)
|
||||||
|
.collect(Collectors.toCollection(LinkedHashSet::new));
|
||||||
|
item.setFid(fidSet.isEmpty() ? null : String.join(",", fidSet));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private String buildQgcMsfbrdmDetailSelectSql(List<String> select) {
|
||||||
|
List<String> fields = CollUtil.isEmpty(select)
|
||||||
|
? List.of("stcd", "stnm", "baseId", "baseName", "rstcd", "ennm", "bldstt",
|
||||||
|
"hydrodtin", "runState", "runStateName", "ftp", "ftpName", "fcntjh", "fcntjc",
|
||||||
|
"flyr", "fsz", "fwet", "fid")
|
||||||
|
: select;
|
||||||
|
List<String> selectParts = new ArrayList<>();
|
||||||
|
for (String field : fields) {
|
||||||
|
String column = mapQgcMsfbrdmColumn(field);
|
||||||
|
if (StrUtil.isNotBlank(column)) {
|
||||||
|
selectParts.add(column + " AS " + field);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (selectParts.isEmpty()) {
|
||||||
|
selectParts.add("t.stcd AS stcd");
|
||||||
|
}
|
||||||
|
return String.join(", ", selectParts);
|
||||||
|
}
|
||||||
|
|
||||||
|
private String buildQgcMsfbrdmFilterCondition(DataSourceRequest.FilterDescriptor filter,
|
||||||
|
Map<String, Object> paramMap,
|
||||||
|
int[] indexHolder) {
|
||||||
|
if (filter == null) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
if (StrUtil.isNotBlank(filter.getField())) {
|
||||||
|
return buildQgcMsfbrdmLeafCondition(filter, paramMap, indexHolder);
|
||||||
|
}
|
||||||
|
if (CollUtil.isEmpty(filter.getFilters())) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
List<String> conditions = new ArrayList<>();
|
||||||
|
for (DataSourceRequest.FilterDescriptor child : filter.getFilters()) {
|
||||||
|
String childSql = buildQgcMsfbrdmFilterCondition(child, paramMap, indexHolder);
|
||||||
|
if (StrUtil.isNotBlank(childSql)) {
|
||||||
|
conditions.add("(" + childSql + ")");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (conditions.isEmpty()) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
String logic = "or".equalsIgnoreCase(filter.getLogic()) ? " OR " : " AND ";
|
||||||
|
return String.join(logic, conditions);
|
||||||
|
}
|
||||||
|
|
||||||
|
private String buildQgcMsfbrdmLeafCondition(DataSourceRequest.FilterDescriptor filter,
|
||||||
|
Map<String, Object> paramMap,
|
||||||
|
int[] indexHolder) {
|
||||||
|
String column = mapQgcMsfbrdmColumn(filter.getField());
|
||||||
|
if (StrUtil.isBlank(column)) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
String operator = StrUtil.blankToDefault(filter.getOperator(), "eq").toLowerCase();
|
||||||
|
Object value = filter.getValue();
|
||||||
|
if ("isnull".equals(operator)) {
|
||||||
|
return column + " IS NULL";
|
||||||
|
}
|
||||||
|
if ("isnotnull".equals(operator)) {
|
||||||
|
return column + " IS NOT NULL";
|
||||||
|
}
|
||||||
|
if ("in".equals(operator)) {
|
||||||
|
List<Object> values = normalizeQgcBsmfRValues(value);
|
||||||
|
if (values.isEmpty()) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
List<String> placeholders = new ArrayList<>();
|
||||||
|
for (Object item : values) {
|
||||||
|
String key = "qgcMsfbrdmP" + indexHolder[0]++;
|
||||||
|
paramMap.put(key, normalizeQgcMsfbrdmValue(filter.getField(), item));
|
||||||
|
placeholders.add("#{map." + key + "}");
|
||||||
|
}
|
||||||
|
return column + " IN (" + String.join(", ", placeholders) + ")";
|
||||||
|
}
|
||||||
|
if (value == null) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
String key = "qgcMsfbrdmP" + indexHolder[0]++;
|
||||||
|
Object normalizedValue = normalizeQgcMsfbrdmValue(filter.getField(), value);
|
||||||
|
return switch (operator) {
|
||||||
|
case "eq" -> {
|
||||||
|
paramMap.put(key, normalizedValue);
|
||||||
|
yield column + " = #{map." + key + "}";
|
||||||
|
}
|
||||||
|
case "neq" -> {
|
||||||
|
paramMap.put(key, normalizedValue);
|
||||||
|
yield column + " <> #{map." + key + "}";
|
||||||
|
}
|
||||||
|
case "gt" -> {
|
||||||
|
paramMap.put(key, normalizedValue);
|
||||||
|
yield column + " > #{map." + key + "}";
|
||||||
|
}
|
||||||
|
case "gte" -> {
|
||||||
|
paramMap.put(key, normalizedValue);
|
||||||
|
yield column + " >= #{map." + key + "}";
|
||||||
|
}
|
||||||
|
case "lt" -> {
|
||||||
|
paramMap.put(key, normalizedValue);
|
||||||
|
yield column + " < #{map." + key + "}";
|
||||||
|
}
|
||||||
|
case "lte" -> {
|
||||||
|
paramMap.put(key, normalizedValue);
|
||||||
|
yield column + " <= #{map." + key + "}";
|
||||||
|
}
|
||||||
|
case "contains" -> {
|
||||||
|
paramMap.put(key, "%" + normalizedValue + "%");
|
||||||
|
yield column + " LIKE #{map." + key + "}";
|
||||||
|
}
|
||||||
|
case "doesnotcontain" -> {
|
||||||
|
paramMap.put(key, "%" + normalizedValue + "%");
|
||||||
|
yield column + " NOT LIKE #{map." + key + "}";
|
||||||
|
}
|
||||||
|
case "startswith" -> {
|
||||||
|
paramMap.put(key, normalizedValue + "%");
|
||||||
|
yield column + " LIKE #{map." + key + "}";
|
||||||
|
}
|
||||||
|
case "endswith" -> {
|
||||||
|
paramMap.put(key, "%" + normalizedValue);
|
||||||
|
yield column + " LIKE #{map." + key + "}";
|
||||||
|
}
|
||||||
|
default -> "";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
private String buildQgcMsfbrdmOrderBySql(List<DataSourceRequest.SortDescriptor> sortDescriptors) {
|
||||||
|
if (CollUtil.isEmpty(sortDescriptors)) {
|
||||||
|
return " ORDER BY t.flyr DESC, t.stnm ASC, t.ftpName ASC";
|
||||||
|
}
|
||||||
|
List<String> parts = new ArrayList<>();
|
||||||
|
for (DataSourceRequest.SortDescriptor descriptor : sortDescriptors) {
|
||||||
|
String column = mapQgcMsfbrdmColumn(descriptor.getField());
|
||||||
|
if (StrUtil.isBlank(column)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
String direction = "desc".equalsIgnoreCase(descriptor.getDir()) ? "DESC" : "ASC";
|
||||||
|
parts.add(column + " " + direction);
|
||||||
|
}
|
||||||
|
if (parts.isEmpty()) {
|
||||||
|
return " ORDER BY t.flyr DESC, t.stnm ASC, t.ftpName ASC";
|
||||||
|
}
|
||||||
|
return " ORDER BY " + String.join(", ", parts);
|
||||||
|
}
|
||||||
|
|
||||||
|
private String buildQgcMsfbrdmGroupSql(String baseSql, List<DataSourceRequest.GroupDescriptor> groups) {
|
||||||
|
if (CollUtil.isEmpty(groups)) {
|
||||||
|
return baseSql;
|
||||||
|
}
|
||||||
|
List<DataSourceRequest.GroupDescriptor> validGroups = groups.stream()
|
||||||
|
.filter(group -> StrUtil.isNotBlank(mapQgcMsfbrdmColumn(group.getField())))
|
||||||
|
.toList();
|
||||||
|
if (validGroups.isEmpty()) {
|
||||||
|
return baseSql;
|
||||||
|
}
|
||||||
|
List<String> fields = validGroups.stream().map(DataSourceRequest.GroupDescriptor::getField).toList();
|
||||||
|
StringBuilder sql = new StringBuilder("SELECT ");
|
||||||
|
for (int i = 0; i < fields.size(); i++) {
|
||||||
|
if (i > 0) {
|
||||||
|
sql.append(", ");
|
||||||
|
}
|
||||||
|
sql.append(fields.get(i));
|
||||||
|
}
|
||||||
|
for (String field : fields) {
|
||||||
|
sql.append(", COUNT(*) AS count_").append(field);
|
||||||
|
}
|
||||||
|
sql.append(" FROM (").append(baseSql).append(") t GROUP BY ");
|
||||||
|
for (int i = 0; i < fields.size(); i++) {
|
||||||
|
if (i > 0) {
|
||||||
|
sql.append(", ");
|
||||||
|
}
|
||||||
|
sql.append(fields.get(i));
|
||||||
|
}
|
||||||
|
List<String> orderByParts = new ArrayList<>();
|
||||||
|
for (DataSourceRequest.GroupDescriptor descriptor : validGroups) {
|
||||||
|
if (Boolean.FALSE.equals(descriptor.getNeedSortFlag())) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
String direction = "desc".equalsIgnoreCase(descriptor.getDir()) ? "DESC" : "ASC";
|
||||||
|
orderByParts.add(descriptor.getField() + " " + direction);
|
||||||
|
}
|
||||||
|
if (!orderByParts.isEmpty()) {
|
||||||
|
sql.append(" ORDER BY ").append(String.join(", ", orderByParts));
|
||||||
|
}
|
||||||
|
return sql.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
private String mapQgcMsfbrdmColumn(String field) {
|
||||||
|
return switch (field) {
|
||||||
|
case "stcd" -> "t.stcd";
|
||||||
|
case "stnm" -> "t.stnm";
|
||||||
|
case "baseId" -> "t.baseId";
|
||||||
|
case "baseName" -> "t.baseName";
|
||||||
|
case "rstcd" -> "t.rstcd";
|
||||||
|
case "ennm" -> "t.ennm";
|
||||||
|
case "bldstt" -> "t.bldstt";
|
||||||
|
case "hydrodtin" -> "t.hydrodtin";
|
||||||
|
case "runState" -> "t.runState";
|
||||||
|
case "runStateName" -> "t.runStateName";
|
||||||
|
case "ftp" -> "t.ftp";
|
||||||
|
case "ftpName" -> "t.ftpName";
|
||||||
|
case "fcntjh" -> "t.fcntjh";
|
||||||
|
case "fcntjc" -> "t.fcntjc";
|
||||||
|
case "flyr" -> "t.flyr";
|
||||||
|
case "fsz" -> "t.fsz";
|
||||||
|
case "fwet" -> "t.fwet";
|
||||||
|
case "fid" -> "t.fid";
|
||||||
|
default -> "";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
private Object normalizeQgcMsfbrdmValue(String field, Object value) {
|
||||||
|
if (value == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return switch (field) {
|
||||||
|
case "fcntjh", "fcntjc", "bldstt", "hydrodtin", "runState" -> Integer.valueOf(String.valueOf(value));
|
||||||
|
case "flyr" -> String.valueOf(value);
|
||||||
|
default -> value;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
private void populateQgcMsfbrdmGroupKeyNames(List<Group> groups) {
|
||||||
|
if (CollUtil.isEmpty(groups)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for (Group group : groups) {
|
||||||
|
if (group == null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if ("runState".equals(group.getField()) || "runStateName".equals(group.getField())) {
|
||||||
|
group.setKeyName(resolveQgcMsfbrdmRunStateName(group.getKey()));
|
||||||
|
}
|
||||||
|
if (CollUtil.isNotEmpty(group.getItems()) && group.getItems().get(0) instanceof Group) {
|
||||||
|
populateQgcMsfbrdmGroupKeyNames((List<Group>) group.getItems());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private String resolveQgcMsfbrdmRunStateName(Object value) {
|
||||||
|
if (value == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
String text = String.valueOf(value);
|
||||||
|
return switch (text) {
|
||||||
|
case "0" -> "数据未接入";
|
||||||
|
case "1" -> "正常运行";
|
||||||
|
case "2" -> "未正常报送数据";
|
||||||
|
case "3" -> "未正常运行";
|
||||||
|
default -> text;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
private DataSourceResult<FbBsmfRQgcVo> queryQgcBsmfRDetailList(DataSourceRequest dataSourceRequest,
|
private DataSourceResult<FbBsmfRQgcVo> queryQgcBsmfRDetailList(DataSourceRequest dataSourceRequest,
|
||||||
DataSourceLoadOptionsBase loadOptions) {
|
DataSourceLoadOptionsBase loadOptions) {
|
||||||
Map<String, Object> paramMap = new HashMap<>();
|
Map<String, Object> paramMap = new HashMap<>();
|
||||||
|
|||||||
@ -136,15 +136,15 @@ public class FpBuildServiceImpl implements FpBuildService {
|
|||||||
String sql = "SELECT DISTINCT " +
|
String sql = "SELECT DISTINCT " +
|
||||||
" fish.ID AS id, " +
|
" fish.ID AS id, " +
|
||||||
" fish.NAME AS name " +
|
" fish.NAME AS name " +
|
||||||
"FROM SD_FPSS_B_H fp " +
|
"FROM SD_FBRD_B_H fb " +
|
||||||
"INNER JOIN SD_ENGINFO_B_H eng ON eng.STCD = fp.RSTCD " +
|
// "INNER JOIN SD_ENGINFO_B_H eng ON eng.STCD = fb.RSTCD " +
|
||||||
" AND NVL(eng.IS_DELETED, 0) = 0 " +
|
// " AND NVL(eng.IS_DELETED, 0) = 0 " +
|
||||||
"INNER JOIN SD_FISHDICTORY_RLTN_B rel ON rel.RVCD = eng.HBRVCD " +
|
"INNER JOIN SD_FISHDICTORY_RLTN_B rel ON rel.BASE_ID = fb.BASE_ID " +
|
||||||
" AND NVL(rel.IS_DELETED, 0) = 0 " +
|
" AND NVL(rel.IS_DELETED, 0) = 0 " +
|
||||||
"INNER JOIN SD_FISHDICTORY_B fish ON fish.ID = NVL(rel.ZY_FISH_ID, rel.FISH_ID) " +
|
"INNER JOIN SD_FISHDICTORY_B fish ON fish.ID = NVL(rel.ZY_FISH_ID, rel.FISH_ID) " +
|
||||||
" AND NVL(fish.IS_DELETED, 0) = 0 " +
|
" AND NVL(fish.IS_DELETED, 0) = 0 " +
|
||||||
" AND NVL(fish.ENABLE, 1) = 1 " +
|
" AND NVL(fish.ENABLE, 1) = 1 " +
|
||||||
"WHERE fp.STCD = #{map.stcd} " +
|
"WHERE fb.STCD = #{map.stcd} " +
|
||||||
"ORDER BY fish.NAME";
|
"ORDER BY fish.NAME";
|
||||||
|
|
||||||
List<FpFishDicVo> list = microservicDynamicSQLMapper.getAllListWithResultType(
|
List<FpFishDicVo> list = microservicDynamicSQLMapper.getAllListWithResultType(
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user