diff --git a/backend/src/main/java/com/yfd/platform/config/RedisConfig.java b/backend/src/main/java/com/yfd/platform/config/RedisConfig.java index e5f1f5f9..1b2e0783 100644 --- a/backend/src/main/java/com/yfd/platform/config/RedisConfig.java +++ b/backend/src/main/java/com/yfd/platform/config/RedisConfig.java @@ -8,6 +8,7 @@ import com.fasterxml.jackson.annotation.PropertyAccessor; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import com.yfd.platform.utils.SecurityUtils; import org.springframework.cache.CacheManager; import org.springframework.cache.annotation.EnableCaching; import org.springframework.cache.interceptor.KeyGenerator; @@ -114,4 +115,9 @@ public class RedisConfig { public KeyGenerator cacheKeyGenerator() { return (target, method, params) -> target.getClass().getName() + "." + method.getName() + ":" + DigestUtil.md5Hex(JSONUtil.toJsonStr(params)); } + + @Bean("cacheKeyByUserGenerator") + public KeyGenerator cacheKeyByUserGenerator() { + return (target, method, params) -> SecurityUtils.getUserId()+"."+target.getClass().getName() + "." + method.getName() + ":" + DigestUtil.md5Hex(JSONUtil.toJsonStr(params)); + } } \ No newline at end of file diff --git a/backend/src/main/java/com/yfd/platform/qgc_base/domain/vo/EngPointVo.java b/backend/src/main/java/com/yfd/platform/qgc_base/domain/vo/EngPointVo.java index ad4444c9..6f5a5843 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_base/domain/vo/EngPointVo.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/domain/vo/EngPointVo.java @@ -59,6 +59,10 @@ public class EngPointVo { @Schema(description = "所属行政区名称") private String addvcdName; + @Schema(description = "基地名称") + private String baseName; + + @Schema(description = "站点类型") private String sttp; diff --git a/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdEngInfoBHServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdEngInfoBHServiceImpl.java index d37e12a3..7e34245e 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdEngInfoBHServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdEngInfoBHServiceImpl.java @@ -1081,7 +1081,7 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl getEngPointKendoListCust(DataSourceRequest dataSourceRequest) { DataSourceResult result = new DataSourceResult<>(); result.setAggregates(new HashMap<>()); @@ -2857,6 +2862,7 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl result = new DataSourceResult<>(); Map pointParamMap = new HashMap<>(); StringBuilder pointSql = new StringBuilder(buildAlarmPointBaseSql()); -// DataScopeApplyResult scopeApplyResult = dataScopeFilterService.appendCurrentUserStationScope(pointSql, pointParamMap, "eng.STCD"); + DataScopeApplyResult scopeApplyResult = dataScopeFilterService.appendCurrentUserStationScope(pointSql, pointParamMap, "eng.STCD"); + if (scopeApplyResult.isEmptyResult()) { + result.setData(new ArrayList<>()); + result.setTotal(0L); + return result; + } List points= microservicDynamicSQLMapper.getAllListWithResultType( pointSql.toString(), pointParamMap, @@ -3004,7 +3015,7 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl> expressionRows = microservicDynamicSQLMapper.getAllList(buildAlarmPointLegendSql(), new HashMap<>()); List resultList = mergeAlarmPointData(points, qecCountMap, wqCountMap, expressionRows, yyyy); - DataSourceResult result = new DataSourceResult<>(); + result.setData(resultList); result.setTotal(resultList.size()); result.setAggregates(new HashMap<>()); @@ -3045,19 +3056,19 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl 'other' " + // " AND NOT EXISTS ( " + @@ -618,13 +618,13 @@ public class FhHabitatServiceImpl implements FhHabitatService { " AND along.CODE = 'common' " + " AND NVL(along.IS_DELETED, 0) = 0 " + " LEFT JOIN ( " + - " SELECT det.SORT, a.RVCD, det.STCD " + + " SELECT det.SORT,a.BASEID, a.RVCD, det.STCD " + " FROM MS_ALONGDET_B det " + " INNER JOIN MS_ALONG_B a ON a.ID = det.ALONG_ID " + " WHERE NVL(det.IS_DELETED, 0) = 0 " + " AND NVL(a.IS_DELETED, 0) = 0 " + " AND a.CODE = 'common' " + - " ) rstAlong ON rstAlong.RVCD = eng.HBRVCD AND rstAlong.STCD = childBase.RSTCD "; + " ) rstAlong ON rstAlong.BASEID = eng.BASE_ID AND rstAlong.STCD = childBase.RSTCD "; return "SELECT childBase.STCD, " + " childBase.STNM, " + " childBase.FHSTCD, " + diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/fp/service/impl/FpBuildServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_env/fp/service/impl/FpBuildServiceImpl.java index 3491ebed..de386059 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/fp/service/impl/FpBuildServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/fp/service/impl/FpBuildServiceImpl.java @@ -255,11 +255,11 @@ public class FpBuildServiceImpl implements FpBuildService { "eng.BASE_ID AS baseId, " + "fp.STTP AS sttp, " + "CASE " + - "WHEN fp.STTP = 'FP_1' THEN 'GY_1' " + - "WHEN fp.STTP = 'FP_2' THEN 'GY_2' " + - "WHEN fp.STTP = 'FP_3' THEN 'GY_3' " + - "WHEN fp.STTP = 'FP_4' THEN 'GY_4' " + - "ELSE 'GY_5' END AS anchoPointState, " + + "WHEN fp.STTP = 'FP_1' THEN 'gy_1' " + + "WHEN fp.STTP = 'FP_2' THEN 'gy_2' " + + "WHEN fp.STTP = 'FP_3' THEN 'gy_3' " + + "WHEN fp.STTP = 'FP_4' THEN 'gy_4' " + + "ELSE 'gy_5' END AS anchoPointState, " + "fp.MWAY AS mway, " + "fp.DTIN AS dtin, " + "state.STD_SSTATE AS stdSstate, " + @@ -1304,15 +1304,15 @@ public class FpBuildServiceImpl implements FpBuildService { for (FpAnchoPointVo vo : resultList) { String sttp = vo.getSttp(); if ("FP_1".equals(sttp)) { - vo.setAnchoPointState("GY_1_BUILT"); + vo.setAnchoPointState("gy_1_built"); } else if ("FP_2".equals(sttp)) { - vo.setAnchoPointState("GY_2_BUILT"); + vo.setAnchoPointState("gy_2_built"); } else if ("FP_3".equals(sttp)) { - vo.setAnchoPointState("GY_3_BUILT"); + vo.setAnchoPointState("gy_3_built"); } else if ("FP_4".equals(sttp)) { - vo.setAnchoPointState("GY_4_BUILT"); + vo.setAnchoPointState("gy_4_built"); } else { - vo.setAnchoPointState("GY_5_BUILT"); + vo.setAnchoPointState("gy_5_built"); } } diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/fpr/service/impl/FprMonitorServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_env/fpr/service/impl/FprMonitorServiceImpl.java index 339cc4b3..d6cde63c 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/fpr/service/impl/FprMonitorServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/fpr/service/impl/FprMonitorServiceImpl.java @@ -173,7 +173,7 @@ public class FprMonitorServiceImpl implements FprMonitorService { .append("hb.BASENAME AS baseName, ") .append("aim.STTP AS sttp, ") .append("sttp.STTP_NAME AS sttpName, ") - .append("'' AS anchoPointState, ") + .append("'fprd' AS anchoPointState, ") .append("aim.MWAY AS mway, ") .append("aim.DTIN AS dtin, ") // .append("aim.STDSSTATE AS stdSstate, ") @@ -446,25 +446,25 @@ public class FprMonitorServiceImpl implements FprMonitorService { "LEFT JOIN SD_STTP_B sttp ON sttp.STTP_CODE = src.STTP " + " AND NVL(sttp.IS_DELETED, 0) = 0 " + " AND NVL(sttp.ENABLE, 1) = 1 " + - "LEFT JOIN MS_ALONG_B alongBase ON alongBase.RVCD = src.HBRVCD " + + "LEFT JOIN MS_ALONG_B alongBase ON alongBase.BASEID = src.BASE_ID " + " AND alongBase.CODE = 'common' " + " AND NVL(alongBase.IS_DELETED, 0) = 0 " + "LEFT JOIN ( " + - " SELECT det.STCD, det.SORT, along.RVCD " + + " SELECT det.STCD, det.SORT,along.BASEID, along.RVCD " + " FROM MS_ALONGDET_B det " + " INNER JOIN MS_ALONG_B along ON det.ALONG_ID = along.ID " + " WHERE NVL(det.IS_DELETED, 0) = 0 " + " AND NVL(along.IS_DELETED, 0) = 0 " + " AND along.CODE = 'common' " + - ") engSort ON engSort.RVCD = src.HBRVCD AND engSort.STCD = src.RSTCD " + + ") engSort ON engSort.BASEID = src.BASE_ID AND engSort.STCD = src.RSTCD " + "LEFT JOIN ( " + - " SELECT det.STCD, det.SORT, along.RVCD " + + " SELECT det.STCD, det.SORT,along.BASEID, along.RVCD " + " FROM MS_ALONGDET_B det " + " INNER JOIN MS_ALONG_B along ON det.ALONG_ID = along.ID " + " WHERE NVL(det.IS_DELETED, 0) = 0 " + " AND NVL(along.IS_DELETED, 0) = 0 " + " AND along.CODE = 'common' " + - ") siteSort ON siteSort.RVCD = src.HBRVCD AND siteSort.STCD = src.STCD " + + ") siteSort ON siteSort.BASEID = src.BASE_ID AND siteSort.STCD = src.STCD " + "WHERE NVL(src.IS_DELETED, 0) = 0 "; } diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/overview/controller/OverviewController.java b/backend/src/main/java/com/yfd/platform/qgc_env/overview/controller/OverviewController.java index a3ed0a61..810efdd4 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/overview/controller/OverviewController.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/overview/controller/OverviewController.java @@ -32,4 +32,10 @@ public class OverviewController { public ResponseResult getOpedList(@RequestBody DataSourceRequest dataSourceRequest) { return ResponseResult.successData(overviewService.getOpedList(dataSourceRequest)); } + + @PostMapping("/vmsstbprpt/GetKendoList") + @Operation(summary = "沿程对象视图(V_MS_STBPRP_T)条件过滤数据列表") + public ResponseResult getVmsstbprptList(@RequestBody DataSourceRequest dataSourceRequest) { + return ResponseResult.successData(overviewService.getVmsstbprptList(dataSourceRequest)); + } } diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/overview/entity/vo/OverviewVmsstbprptVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/overview/entity/vo/OverviewVmsstbprptVo.java new file mode 100644 index 00000000..401a950b --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_env/overview/entity/vo/OverviewVmsstbprptVo.java @@ -0,0 +1,70 @@ +package com.yfd.platform.qgc_env.overview.entity.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + +@Data +@Schema(description = "沿程对象视图(V_MS_STBPRP_T)查询结果") +public class OverviewVmsstbprptVo implements Serializable { + + private static final long serialVersionUID = 1L; + + private String stcd; + private String stnm; + private String ennm; + private String sttp; + private String sttpCode; + private String sttpName; + private String sttpFullPath; + private Integer sttpTreeLevel; + private String rstcd; + private String baseId; + private String baseName; + private String hbrvcd; + private String hbrvcdName; + private String rvcd; + private String rvcdName; + private String addvcd; + private String addvnm; + private String hycd; + private String hynm; + private String topHycd; + private String topHynm; + private BigDecimal lgtd; + private BigDecimal lttd; + private String stlc; + private Integer usfl; + private Integer dtin; + private Date dtinTm; + private Integer bldsttCode; + private String introduce; + private String logo; + private String inffile; + private BigDecimal inv; + private Integer invinmn; + private Date stdsdt; + private Date pststdt; + private Date pesstdt; + private Date swdt; + private Date jcdt; + private Date wddt; + private Integer orderIndex; + private String remark; + private String vlsr; + private String stindx; + private String coenvwState; + private String dvtpName; + private Date vlsrTm; + private String recordUser; + private Date recordTime; + private String modifyUser; + private Date modifyTime; + private Integer isDeleted; + private String deleteUser; + private Date deleteTime; + private String dataSource; +} diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/overview/service/OverviewService.java b/backend/src/main/java/com/yfd/platform/qgc_env/overview/service/OverviewService.java index 481e665f..c8eed15e 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/overview/service/OverviewService.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/overview/service/OverviewService.java @@ -4,10 +4,13 @@ import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.common.DataSourceResult; import com.yfd.platform.qgc_env.overview.entity.vo.OverviewMsstbprptVo; import com.yfd.platform.qgc_env.overview.entity.vo.OverviewOpedVo; +import com.yfd.platform.qgc_env.overview.entity.vo.OverviewVmsstbprptVo; public interface OverviewService { DataSourceResult getMsstbprptList(DataSourceRequest dataSourceRequest); DataSourceResult getOpedList(DataSourceRequest dataSourceRequest); + + DataSourceResult getVmsstbprptList(DataSourceRequest dataSourceRequest); } diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/overview/service/impl/OverviewServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_env/overview/service/impl/OverviewServiceImpl.java index 79ec09ab..37bc6524 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/overview/service/impl/OverviewServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/overview/service/impl/OverviewServiceImpl.java @@ -9,8 +9,11 @@ import com.yfd.platform.common.DataSourceResult; import com.yfd.platform.common.GroupHelper; import com.yfd.platform.common.GroupingInfo; import com.yfd.platform.common.MicroservicDynamicSQLMapper; +import com.yfd.platform.qgc_base.domain.vo.DataScopeApplyResult; +import com.yfd.platform.qgc_base.service.IDataScopeFilterService; import com.yfd.platform.qgc_env.overview.entity.vo.OverviewMsstbprptVo; import com.yfd.platform.qgc_env.overview.entity.vo.OverviewOpedVo; +import com.yfd.platform.qgc_env.overview.entity.vo.OverviewVmsstbprptVo; import com.yfd.platform.qgc_env.overview.service.OverviewService; import com.yfd.platform.utils.QgcQueryWrapperUtil; import jakarta.annotation.Resource; @@ -31,6 +34,9 @@ public class OverviewServiceImpl implements OverviewService { @Resource private MicroservicDynamicSQLMapper microservicDynamicSQLMapper; + @Resource + private IDataScopeFilterService dataScopeFilterService; + @Override public DataSourceResult getMsstbprptList(DataSourceRequest dataSourceRequest) { DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest(); @@ -109,6 +115,47 @@ public class OverviewServiceImpl implements OverviewService { return result; } + @Override + public DataSourceResult getVmsstbprptList(DataSourceRequest dataSourceRequest) { + DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest(); + List selectFields = resolveVmsstbprptSelectFields(dataSourceRequest == null ? null : dataSourceRequest.getSelect()); +// "CASE eng.DVTP WHEN '1' THEN '堤坝式' WHEN '2' THEN '引水式' WHEN '3' THEN '混合式' ELSE '未知' END AS dvtpName,"+ + StringBuilder sql = new StringBuilder(); + sql.append("SELECT ") + .append(buildVmsstbprptSelectSql(selectFields)) + .append(" FROM V_MS_STBPRP_T t WHERE 1 = 1 "); + + Map paramMap = new HashMap<>(); + String filterSql = buildVmsstbprptFilterCondition(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), paramMap, new int[]{0}); + if (StrUtil.isNotBlank(filterSql)) { + sql.append(" AND ").append(filterSql); + } + + // 数据权限过滤:基于当前用户有权限的电站编码过滤 +// DataScopeApplyResult scopeResult = dataScopeFilterService.appendCurrentUserStationScope(sql, paramMap, "t.STCD"); +// if (scopeResult.isEmptyResult()) { +// DataSourceResult result = new DataSourceResult<>(); +// result.setData(new ArrayList<>()); +// result.setTotal(0L); +// result.setAggregates(new HashMap<>()); +// return result; +// } + + sql.append(buildVmsstbprptOrderBySql(dataSourceRequest == null ? null : dataSourceRequest.getSort())); + + Page page = loadOptions == null ? null + : QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake()); + List list = microservicDynamicSQLMapper.pageAllListWithResultType( + page, sql.toString(), paramMap, OverviewVmsstbprptVo.class + ); + + DataSourceResult result = new DataSourceResult<>(); + result.setData(list); + result.setTotal(page == null ? list.size() : page.getTotal()); + result.setAggregates(new HashMap<>()); + return result; + } + private DataSourceResult queryOpedSummaryList(DataSourceRequest dataSourceRequest, DataSourceLoadOptionsBase loadOptions, Map paramMap) { @@ -1340,4 +1387,290 @@ public class OverviewServiceImpl implements OverviewService { } values.add(value); } + + // ======================== V_MS_STBPRP_T helper methods ======================== + + private List resolveVmsstbprptSelectFields(List select) { + List fields = CollUtil.isEmpty(select) + ? new ArrayList<>(buildVmsstbprptSelectMap().keySet()) + : new ArrayList<>(select); + LinkedHashSet uniqueFields = new LinkedHashSet<>(); + for (String field : fields) { + if (StrUtil.isNotBlank(field)) { + uniqueFields.add(field.trim()); + } + } + if (uniqueFields.isEmpty()) { + uniqueFields.add("stcd"); + } + return new ArrayList<>(uniqueFields); + } + + private String buildVmsstbprptSelectSql(List selectFields) { + Map columnMap = buildVmsstbprptSelectMap(); + List selectParts = new ArrayList<>(); + for (String field : selectFields) { + String column = columnMap.get(field); + if (StrUtil.isNotBlank(column)) { + selectParts.add(column); + if(field.equals("sttpCode")){ + selectParts.add("t.STTP_NAME sttpName"); + } + } else { + selectParts.add("NULL AS \"" + field + "\""); + } + } + if (selectParts.isEmpty()) { + selectParts.add("t.STCD AS \"stcd\""); + } + return String.join(", ", selectParts); + } + + private Map buildVmsstbprptSelectMap() { + Map columnMap = new LinkedHashMap<>(); + columnMap.put("stcd", "t.STCD AS \"stcd\""); + columnMap.put("stnm", "t.STNM AS \"stnm\""); + columnMap.put("ennm", "t.ENNM AS \"ennm\""); + columnMap.put("sttp", "t.STTP AS \"sttp\""); + columnMap.put("sttpCode", "t.STTP_CODE AS \"sttpCode\""); + columnMap.put("sttpName", "t.STTP_NAME AS \"sttpName\""); + columnMap.put("sttpFullPath", "t.STTP_FULL_PATH AS \"sttpFullPath\""); + columnMap.put("sttpTreeLevel", "t.STTP_TREE_LEVEL AS \"sttpTreeLevel\""); + columnMap.put("rstcd", "t.RSTCD AS \"rstcd\""); + columnMap.put("baseId", "t.BASE_ID AS \"baseId\""); + columnMap.put("baseName", "t.BASE_NAME AS \"baseName\""); + columnMap.put("hbrvcd", "t.HBRVCD AS \"hbrvcd\""); + columnMap.put("hbrvcdName", "t.HBRVCD_NAME AS \"hbrvcdName\""); + columnMap.put("rvcd", "t.RVCD AS \"rvcd\""); + columnMap.put("rvcdName", "t.RVCD_NAME AS \"rvcdName\""); + columnMap.put("addvcd", "t.ADDVCD AS \"addvcd\""); + columnMap.put("addvnm", "t.ADDVNM AS \"addvnm\""); + columnMap.put("hycd", "t.HYCD AS \"hycd\""); + columnMap.put("hynm", "t.HYNM AS \"hynm\""); + columnMap.put("topHycd", "t.TOP_HYCD AS \"topHycd\""); + columnMap.put("topHynm", "t.TOP_HYNM AS \"topHynm\""); + columnMap.put("lgtd", "t.LGTD AS \"lgtd\""); + columnMap.put("lttd", "t.LTTD AS \"lttd\""); + columnMap.put("stlc", "t.STLC AS \"stlc\""); + columnMap.put("usfl", "t.USFL AS \"usfl\""); + columnMap.put("dtin", "t.DTIN AS \"dtin\""); + columnMap.put("dtinTm", "t.DTIN_TM AS \"dtinTm\""); + columnMap.put("bldsttCode", "t.BLDSTT_CODE AS \"bldsttCode\""); + columnMap.put("introduce", "t.INTRODUCE AS \"introduce\""); + columnMap.put("logo", "t.LOGO AS \"logo\""); + columnMap.put("inffile", "t.INFFILE AS \"inffile\""); + columnMap.put("inv", "t.INV AS \"inv\""); + columnMap.put("invinmn", "t.INVINMN AS \"invinmn\""); + columnMap.put("stdsdt", "t.STDSDT AS \"stdsdt\""); + columnMap.put("pststdt", "t.PSTSTDT AS \"pststdt\""); + columnMap.put("pesstdt", "t.PESSTDT AS \"pesstdt\""); + columnMap.put("swdt", "t.SWDT AS \"swdt\""); + columnMap.put("jcdt", "t.JCDT AS \"jcdt\""); + columnMap.put("wddt", "t.WDDT AS \"wddt\""); + columnMap.put("orderIndex", "t.ORDER_INDEX AS \"orderIndex\""); + columnMap.put("remark", "t.REMARK AS \"remark\""); + columnMap.put("stindx", "t.STINDX AS \"stindx\""); + columnMap.put("coenvwState", "t.COENVW_STATE AS \"coenvwState\""); + columnMap.put("dvtp", "CASE t.DVTP WHEN '1' THEN '堤坝式' WHEN '2' THEN '引水式' WHEN '3' THEN '混合式' ELSE '未知' END AS \"dvtpName\" "); + columnMap.put("vlsr", "t.VLSR AS \"vlsr\""); + columnMap.put("vlsrTm", "t.VLSR_TM AS \"vlsrTm\""); + columnMap.put("recordUser", "t.RECORD_USER AS \"recordUser\""); + columnMap.put("recordTime", "t.RECORD_TIME AS \"recordTime\""); + columnMap.put("modifyUser", "t.MODIFY_USER AS \"modifyUser\""); + columnMap.put("modifyTime", "t.MODIFY_TIME AS \"modifyTime\""); + columnMap.put("isDeleted", "t.IS_DELETED AS \"isDeleted\""); + columnMap.put("deleteUser", "t.DELETE_USER AS \"deleteUser\""); + columnMap.put("deleteTime", "t.DELETE_TIME AS \"deleteTime\""); + columnMap.put("dataSource", "t.DATA_SOURCE AS \"dataSource\""); + return columnMap; + } + + private String buildVmsstbprptFilterCondition(DataSourceRequest.FilterDescriptor filter, + Map paramMap, + int[] indexHolder) { + if (filter == null) { + return ""; + } + if (StrUtil.isNotBlank(filter.getField())) { + return buildVmsstbprptLeafCondition(filter, paramMap, indexHolder); + } + if (CollUtil.isEmpty(filter.getFilters())) { + return ""; + } + List conditions = new ArrayList<>(); + for (DataSourceRequest.FilterDescriptor child : filter.getFilters()) { + String childSql = buildVmsstbprptFilterCondition(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 buildVmsstbprptLeafCondition(DataSourceRequest.FilterDescriptor filter, + Map paramMap, + int[] indexHolder) { + String field = filter.getField(); + if (StrUtil.isBlank(field)) { + return ""; + } + String operator = StrUtil.blankToDefault(filter.getOperator(), "eq").toLowerCase(); + String column = mapVmsstbprptColumn(field); + if (StrUtil.isBlank(column)) { + return ""; + } + if ("isnull".equals(operator)) { + return column + " IS NULL"; + } + if ("isnotnull".equals(operator)) { + return column + " IS NOT NULL"; + } + if ("isempty".equals(operator)) { + return "(" + column + " IS NULL OR " + column + " = '')"; + } + if ("isnotempty".equals(operator)) { + return "(" + column + " IS NOT NULL AND " + column + " <> '')"; + } + if ("in".equals(operator) || "ni".equals(operator)) { + List values = normalizeValues(filter.getValue()); + if (values.isEmpty()) { + return ""; + } + List placeholders = new ArrayList<>(); + for (Object item : values) { + String key = "vmsp" + indexHolder[0]++; + paramMap.put(key, item); + placeholders.add("#{map." + key + "}"); + } + if (placeholders.isEmpty()) { + return ""; + } + return column + ("ni".equals(operator) ? " NOT IN (" : " IN (") + String.join(", ", placeholders) + ")"; + } + Object value = filter.getValue(); + if (value == null) { + return ""; + } + String key = "vmsp" + indexHolder[0]++; + paramMap.put(key, value); + return switch (operator) { + case "eq" -> column + " = #{map." + key + "}"; + case "neq" -> column + " <> #{map." + key + "}"; + case "contains" -> { + paramMap.put(key, "%" + value + "%"); + yield column + " LIKE #{map." + key + "}"; + } + case "doesnotcontain" -> { + paramMap.put(key, "%" + value + "%"); + yield column + " NOT LIKE #{map." + key + "}"; + } + case "startswith" -> { + paramMap.put(key, value + "%"); + yield column + " LIKE #{map." + key + "}"; + } + case "endswith" -> { + paramMap.put(key, "%" + value); + yield column + " LIKE #{map." + key + "}"; + } + case "gt" -> column + " > #{map." + key + "}"; + case "gte" -> column + " >= #{map." + key + "}"; + case "lt" -> column + " < #{map." + key + "}"; + case "lte" -> column + " <= #{map." + key + "}"; + default -> ""; + }; + } + + private String mapVmsstbprptColumn(String field) { + if (StrUtil.isBlank(field)) { + return null; + } + return switch (field) { + case "stcd" -> "t.STCD"; + case "stnm" -> "t.STNM"; + case "ennm" -> "t.ENNM"; + case "sttp" -> "t.STTP"; + case "sttpCode" -> "t.STTP_CODE"; + case "sttpName" -> "t.STTP_NAME"; + case "sttpFullPath" -> "t.STTP_FULL_PATH"; + case "sttpTreeLevel" -> "t.STTP_TREE_LEVEL"; + case "rstcd" -> "t.RSTCD"; + case "baseId" -> "t.BASE_ID"; + case "baseName" -> "t.BASE_NAME"; + case "hbrvcd" -> "t.HBRVCD"; + case "hbrvcdName" -> "t.HBRVCD_NAME"; + case "rvcd" -> "t.RVCD"; + case "rvcdName" -> "t.RVCD_NAME"; + case "addvcd" -> "t.ADDVCD"; + case "addvnm" -> "t.ADDVNM"; + case "hycd" -> "t.HYCD"; + case "hynm" -> "t.HYNM"; + case "topHycd" -> "t.TOP_HYCD"; + case "topHynm" -> "t.TOP_HYNM"; + case "lgtd" -> "t.LGTD"; + case "lttd" -> "t.LTTD"; + case "stlc" -> "t.STLC"; + case "usfl" -> "t.USFL"; + case "dtin" -> "t.DTIN"; + case "DTIN" -> "t.DTIN"; + case "dtinType" -> "t.DTIN_TYPE"; + case "mway" -> "t.MWAY"; + case "dtinTm" -> "t.DTIN_TM"; + case "bldsttCcode" -> "t.BLDSTT_CODE"; + case "introduce" -> "t.INTRODUCE"; + case "runState" -> "t.RUN_STATE"; + case "logo" -> "t.LOGO"; + case "inffile" -> "t.INFFILE"; + case "inv" -> "t.INV"; + case "invinmn" -> "t.INVINMN"; + case "stdsdt" -> "t.STDSDT"; + case "pststdt" -> "t.PSTSTDT"; + case "pesstdt" -> "t.PESSTDT"; + case "swdt" -> "t.SWDT"; + case "jcdt" -> "t.JCDT"; + case "baseStepSort" -> "t.BASESTEPSORT"; + case "rvcdStepSort" -> "t.RVCDSTEPSORT"; + case "rstcdStepSort" -> "t.RSTCDSTEPSORT"; + case "siteStepSort" -> "t.SITESTEPSORT"; + case "wddt" -> "t.WDDT"; + case "orderIndex" -> "t.ORDER_INDEX"; + case "remark" -> "t.REMARK"; + case "vlsr" -> "t.VLSR"; + case "vlsrTm" -> "t.VLSR_TM"; + case "recordUser" -> "t.RECORD_USER"; + case "recordTime" -> "t.RECORD_TIME"; + case "modifyUser" -> "t.MODIFY_USER"; + case "modifyTime" -> "t.MODIFY_TIME"; + case "isDeleted" -> "t.IS_DELETED"; + case "deleteUser" -> "t.DELETE_USER"; + case "deleteTime" -> "t.DELETE_TIME"; + case "dataSource" -> "t.DATA_SOURCE"; + default -> null; + }; + } + + private String buildVmsstbprptOrderBySql(List sortList) { + if (CollUtil.isEmpty(sortList)) { + return " ORDER BY t.ORDER_INDEX ASC NULLS LAST, t.STNM ASC"; + } + List orderItems = new ArrayList<>(); + for (DataSourceRequest.SortDescriptor sort : sortList) { + if (sort == null || StrUtil.isBlank(sort.getField())) { + continue; + } + String column = mapVmsstbprptColumn(sort.getField()); + if (StrUtil.isBlank(column)) { + continue; + } + String dir = "desc".equalsIgnoreCase(sort.getDir()) || "des".equalsIgnoreCase(sort.getDir()) ? "DESC" : "ASC"; + orderItems.add(column + " " + dir + " NULLS LAST"); + } + if (orderItems.isEmpty()) { + return " ORDER BY t.ORDER_INDEX ASC NULLS LAST, t.STNM ASC"; + } + return " ORDER BY " + String.join(", ", orderItems); + } } diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/vap/service/impl/VpConstructionServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_env/vap/service/impl/VpConstructionServiceImpl.java index 91295b17..9a0ea040 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/vap/service/impl/VpConstructionServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/vap/service/impl/VpConstructionServiceImpl.java @@ -1980,15 +1980,24 @@ public class VpConstructionServiceImpl implements VpConstructionService { List resultList = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), paramMap, FhvapBuiltPointVo.class); for (FhvapBuiltPointVo vo : resultList) { - String sttp = vo.getSttp(); - if ("VP".equals(sttp)) { - vo.setAnchoPointState("GY_1_BUILT"); - } else if ("VA".equals(sttp)) { - vo.setAnchoPointState("GY_2_BUILT"); - } else if ("FH".equals(sttp)) { - vo.setAnchoPointState("GY_3_BUILT"); - } else { - vo.setAnchoPointState("GY_4_BUILT"); +// String sttp = vo.getSttp(); +// if ("VP".equals(sttp)) { +// vo.setAnchoPointState("gy_1_built"); +// } else if ("VA".equals(sttp)) { +// vo.setAnchoPointState("gy_2_built"); +// } else if ("FH".equals(sttp)) { +// vo.setAnchoPointState("gy_3_built"); +// } else { +// vo.setAnchoPointState("gy_4_built"); +// } + // 设置在建栖息地/珍稀植物园/动物救助站 + if ("1".equals(vo.getBldsttCcode())) { + if ("FP".equals(vo.getSttp())) { + vo.setAnchoPointState("VP_built"); + } + if ("VA".equals(vo.getSttp())) { + vo.setAnchoPointState("VA_built"); + } } } diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/vd/service/impl/VdMonitorServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_env/vd/service/impl/VdMonitorServiceImpl.java index b403fe41..e9955d81 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/vd/service/impl/VdMonitorServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/vd/service/impl/VdMonitorServiceImpl.java @@ -9,6 +9,8 @@ import com.yfd.platform.common.DataSourceResult; import com.yfd.platform.common.GroupHelper; import com.yfd.platform.common.GroupingInfo; import com.yfd.platform.common.MicroservicDynamicSQLMapper; +import com.yfd.platform.qgc_base.domain.vo.DataScopeApplyResult; +import com.yfd.platform.qgc_base.service.IDataScopeFilterService; import com.yfd.platform.qgc_env.vd.entity.vo.VdAiPointVo; import com.yfd.platform.qgc_env.vd.entity.vo.VdPointVo; import com.yfd.platform.qgc_env.vd.entity.vo.VdRunDataVo; @@ -18,6 +20,7 @@ import com.yfd.platform.qgc_env.vd.entity.vo.VdVmsstbprptVo; import com.yfd.platform.qgc_env.vd.service.VdMonitorService; import com.yfd.platform.utils.QgcQueryWrapperUtil; import jakarta.annotation.Resource; +import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import java.util.ArrayList; @@ -33,6 +36,9 @@ public class VdMonitorServiceImpl implements VdMonitorService { @Resource private MicroservicDynamicSQLMapper microservicDynamicSQLMapper; + @Resource + private IDataScopeFilterService dataScopeFilterService; + @Override public DataSourceResult getVmsstbprptList(DataSourceRequest dataSourceRequest) { @@ -222,6 +228,7 @@ public class VdMonitorServiceImpl implements VdMonitorService { } @Override + @Cacheable(cacheNames = "vdCache#3600", keyGenerator = "cacheKeyByUserGenerator") public DataSourceResult getVdPointKendoListCust(DataSourceRequest dataSourceRequest) { DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest(); if (CollUtil.isNotEmpty(dataSourceRequest == null ? null : dataSourceRequest.getGroup())) { @@ -525,10 +532,15 @@ public class VdMonitorServiceImpl implements VdMonitorService { sql.append(" AND ").append(filterSql).append(" "); } sql.append(buildVdPointOrderBySql(dataSourceRequest == null ? null : dataSourceRequest.getSort())); - + DataSourceResult result = new DataSourceResult<>(); + DataScopeApplyResult scopeApplyResult = dataScopeFilterService.appendCurrentUserStationScope(sql, paramMap, "t.RSTCD"); + if (scopeApplyResult.isEmptyResult()) { + result.setData(new ArrayList<>()); + result.setTotal(0L); + return result; + } List list = microservicDynamicSQLMapper.pageAllListWithResultType( page, sql.toString(), paramMap, VdPointVo.class); - DataSourceResult result = new DataSourceResult<>(); result.setData(list); result.setTotal(page != null ? page.getTotal() : list.size()); result.setAggregates(new HashMap<>()); @@ -822,10 +834,10 @@ public class VdMonitorServiceImpl implements VdMonitorService { " AND NVL(hbrv.IS_DELETED, 0) = 0 AND NVL(hbrv.ENABLED, 1) = 1 " + "LEFT JOIN SD_STTP_B vdSttp ON vdSttp.STTP_CODE = src.STTP " + " AND NVL(vdSttp.IS_DELETED, 0) = 0 AND NVL(vdSttp.ENABLE, 1) = 1 " + - "LEFT JOIN (SELECT det.SORT, cfg.RVCD, det.STCD FROM MS_ALONGDET_B det " + + "LEFT JOIN (SELECT det.SORT,cfg.BASEID, cfg.RVCD, det.STCD FROM MS_ALONGDET_B det " + "INNER JOIN MS_ALONG_B cfg ON det.ALONG_ID = cfg.ID " + "WHERE NVL(det.IS_DELETED, 0) = 0 AND NVL(cfg.IS_DELETED, 0) = 0 AND cfg.CODE = 'common') siteSort " + - "ON siteSort.RVCD = NVL(eng.HBRVCD, src.HBRVCD) AND siteSort.STCD = src.STCD " + + "ON siteSort.BASEID = src.BASE_ID AND siteSort.STCD = src.STCD " + "WHERE src.STTP LIKE 'VD%' " + "AND src.AI_EXT_CODE IS NOT NULL " + "AND src.LGTD IS NOT NULL " + diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/warn/service/impl/WarnDataServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_env/warn/service/impl/WarnDataServiceImpl.java index 1ec35350..e95e6602 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/warn/service/impl/WarnDataServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/warn/service/impl/WarnDataServiceImpl.java @@ -1,5 +1,6 @@ package com.yfd.platform.qgc_env.warn.service.impl; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; @@ -28,10 +29,13 @@ import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Arrays; +import java.util.Comparator; import java.util.Date; import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.Objects; @Service public class WarnDataServiceImpl implements WarnDataService { @@ -264,6 +268,7 @@ public class WarnDataServiceImpl implements WarnDataService { @Cacheable(cacheNames = "warn#3600", keyGenerator = "cacheKeyGenerator") public DataSourceResult getAlarmPointKendoListCust(DataSourceRequest dataSourceRequest) { DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest(); + GroupingInfo[] groupInfos = loadOptions == null ? null : loadOptions.getGroup(); String startTimeText = loadOptions == null ? null : QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "startTime"); String endTimeText = loadOptions == null ? null : QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "endTime"); @@ -295,10 +300,23 @@ public class WarnDataServiceImpl implements WarnDataService { List> expressionRows = microservicDynamicSQLMapper.getAllList(buildAlarmPointLegendSql(), new HashMap<>()); List resultList = mergeAlarmPointData(points, qecCountMap, wqCountMap, expressionRows, yyyy); + List filteredList = applyAlarmPointFilter( + resultList, + dataSourceRequest == null ? null : dataSourceRequest.getFilter() + ); + applyAlarmPointSort(filteredList, dataSourceRequest == null ? null : dataSourceRequest.getSort()); + + if (CollUtil.isNotEmpty(dataSourceRequest == null ? null : dataSourceRequest.getGroup())) { + List> rows = buildAlarmPointGroupRows(filteredList); + return QgcQueryWrapperUtil.buildGroupResult(dataSourceRequest, rows); + } + + Page page = loadOptions == null ? null : QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake()); + List pageList = applyAlarmPointPage(filteredList, loadOptions); DataSourceResult result = new DataSourceResult<>(); - result.setData(resultList); - result.setTotal(resultList.size()); + result.setData(pageList); + result.setTotal(page != null ? (long) filteredList.size() : (long) filteredList.size()); result.setAggregates(new HashMap<>()); return result; } @@ -451,9 +469,9 @@ public class WarnDataServiceImpl implements WarnDataService { sql.append("INNER JOIN SD_AIMONITOR_B_H b ON a.STCD = b.STCD AND NVL(b.IS_DELETED, 0) = 0 AND b.STTP LIKE 'AI_%' "); sql.append("LEFT JOIN SD_ENGINFO_B_H eng ON b.RSTCD = eng.STCD AND NVL(eng.IS_DELETED, 0) = 0 "); sql.append("LEFT JOIN SD_HYDROBASE hb ON b.BASE_ID = hb.BASEID AND NVL(hb.IS_DELETED, 0) = 0 "); - sql.append("LEFT JOIN MS_ALONG_B along ON b.HBRVCD = along.RVCD AND along.CODE = 'common' AND NVL(along.IS_DELETED, 0) = 0 "); - sql.append("LEFT JOIN (SELECT det.SORT, cfg.RVCD, det.STCD FROM MS_ALONGDET_B det INNER JOIN MS_ALONG_B cfg ON det.ALONG_ID = cfg.ID WHERE NVL(det.IS_DELETED, 0) = 0 AND NVL(cfg.IS_DELETED, 0) = 0 AND cfg.CODE = 'common') rstSort ON rstSort.RVCD = b.HBRVCD AND rstSort.STCD = b.RSTCD "); - sql.append("LEFT JOIN (SELECT det.SORT, cfg.RVCD, det.STCD FROM MS_ALONGDET_B det INNER JOIN MS_ALONG_B cfg ON det.ALONG_ID = cfg.ID WHERE NVL(det.IS_DELETED, 0) = 0 AND NVL(cfg.IS_DELETED, 0) = 0 AND cfg.CODE = 'common') siteSort ON siteSort.RVCD = b.HBRVCD AND siteSort.STCD = b.STCD "); + sql.append("LEFT JOIN MS_ALONG_B along ON b.BASEID = along.BASE_ID AND along.CODE = 'common' AND NVL(along.IS_DELETED, 0) = 0 "); + sql.append("LEFT JOIN (SELECT det.SORT,cfg.BASEID, cfg.RVCD, det.STCD FROM MS_ALONGDET_B det INNER JOIN MS_ALONG_B cfg ON det.ALONG_ID = cfg.ID WHERE NVL(det.IS_DELETED, 0) = 0 AND NVL(cfg.IS_DELETED, 0) = 0 AND cfg.CODE = 'common') rstSort ON rstSort.BASEID = b.BASE_ID AND rstSort.STCD = b.RSTCD "); + sql.append("LEFT JOIN (SELECT det.SORT,cfg.BASEID, cfg.RVCD, det.STCD FROM MS_ALONGDET_B det INNER JOIN MS_ALONG_B cfg ON det.ALONG_ID = cfg.ID WHERE NVL(det.IS_DELETED, 0) = 0 AND NVL(cfg.IS_DELETED, 0) = 0 AND cfg.CODE = 'common') siteSort ON siteSort.BASEID = b.BASE_ID AND siteSort.STCD = b.STCD "); sql.append("WHERE NVL(a.IS_DELETED, 0) = 0 "); sql.append("AND a.FID NOT LIKE '%ORA-%' AND a.FID NOT LIKE '%Out%' "); @@ -522,9 +540,9 @@ public class WarnDataServiceImpl implements WarnDataService { sql.append("INNER JOIN SD_AIMONITOR_B_H b ON a.STCD = b.STCD AND NVL(b.IS_DELETED, 0) = 0 AND b.STTP LIKE 'AI_%' "); sql.append("LEFT JOIN SD_ENGINFO_B_H eng ON b.RSTCD = eng.STCD AND NVL(eng.IS_DELETED, 0) = 0 "); sql.append("LEFT JOIN SD_HYDROBASE hb ON b.BASE_ID = hb.BASEID AND NVL(hb.IS_DELETED, 0) = 0 "); - sql.append("LEFT JOIN MS_ALONG_B along ON b.HBRVCD = along.RVCD AND along.CODE = 'common' AND NVL(along.IS_DELETED, 0) = 0 "); - sql.append("LEFT JOIN (SELECT det.SORT, cfg.RVCD, det.STCD FROM MS_ALONGDET_B det INNER JOIN MS_ALONG_B cfg ON det.ALONG_ID = cfg.ID WHERE NVL(det.IS_DELETED, 0) = 0 AND NVL(cfg.IS_DELETED, 0) = 0 AND cfg.CODE = 'common') rstSort ON rstSort.RVCD = b.HBRVCD AND rstSort.STCD = b.RSTCD "); - sql.append("LEFT JOIN (SELECT det.SORT, cfg.RVCD, det.STCD FROM MS_ALONGDET_B det INNER JOIN MS_ALONG_B cfg ON det.ALONG_ID = cfg.ID WHERE NVL(det.IS_DELETED, 0) = 0 AND NVL(cfg.IS_DELETED, 0) = 0 AND cfg.CODE = 'common') siteSort ON siteSort.RVCD = b.HBRVCD AND siteSort.STCD = b.STCD "); + sql.append("LEFT JOIN MS_ALONG_B along ON b.BASE_ID = along.BASEID AND along.CODE = 'common' AND NVL(along.IS_DELETED, 0) = 0 "); + sql.append("LEFT JOIN (SELECT det.SORT,cfg.BASEID, cfg.RVCD, det.STCD FROM MS_ALONGDET_B det INNER JOIN MS_ALONG_B cfg ON det.ALONG_ID = cfg.ID WHERE NVL(det.IS_DELETED, 0) = 0 AND NVL(cfg.IS_DELETED, 0) = 0 AND cfg.CODE = 'common') rstSort ON rstSort.BASEID = b.BASE_ID AND rstSort.STCD = b.RSTCD "); + sql.append("LEFT JOIN (SELECT det.SORT,cfg.BASEID, cfg.RVCD, det.STCD FROM MS_ALONGDET_B det INNER JOIN MS_ALONG_B cfg ON det.ALONG_ID = cfg.ID WHERE NVL(det.IS_DELETED, 0) = 0 AND NVL(cfg.IS_DELETED, 0) = 0 AND cfg.CODE = 'common') siteSort ON siteSort.BASEID = b.BASE_ID AND siteSort.STCD = b.STCD "); sql.append("WHERE a.IS_DELETED = 0 "); // sql.append("AND (a.TASK_STATUS IS NULL OR a.TASK_STATUS = 'Approved') "); sql.append("AND a.FID NOT LIKE '%ORA-%' AND a.FID NOT LIKE '%Out%' "); @@ -1136,19 +1154,19 @@ public class WarnDataServiceImpl implements WarnDataService { "NVL(siteSort.SORT, 999999) AS siteStepSort " + "FROM SD_ENGINFO_B_H eng " + "LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = eng.BASE_ID AND NVL(hb.IS_DELETED, 0) = 0 " + - "LEFT JOIN MS_ALONG_B along ON along.RVCD = eng.HBRVCD AND along.CODE = 'common' AND NVL(along.IS_DELETED, 0) = 0 " + + "LEFT JOIN MS_ALONG_B along ON along.BASEID = eng.BASE_ID AND along.CODE = 'common' AND NVL(along.IS_DELETED, 0) = 0 " + "LEFT JOIN ( " + - " SELECT det.SORT, cfg.RVCD, det.STCD " + + " SELECT det.SORT,cfg.BASEID, cfg.RVCD, det.STCD " + " FROM MS_ALONGDET_B det " + " INNER JOIN MS_ALONG_B cfg ON det.ALONG_ID = cfg.ID " + " WHERE NVL(det.IS_DELETED, 0) = 0 AND NVL(cfg.IS_DELETED, 0) = 0 AND cfg.CODE = 'common' " + - ") rstSort ON rstSort.RVCD = eng.HBRVCD AND rstSort.STCD = eng.STCD " + + ") rstSort ON rstSort.BASEID = eng.BASE_ID AND rstSort.STCD = eng.STCD " + "LEFT JOIN ( " + - " SELECT det.SORT, cfg.RVCD, det.STCD " + + " SELECT det.SORT,cfg.BASEID, cfg.RVCD, det.STCD " + " FROM MS_ALONGDET_B det " + " INNER JOIN MS_ALONG_B cfg ON det.ALONG_ID = cfg.ID " + " WHERE NVL(det.IS_DELETED, 0) = 0 AND NVL(cfg.IS_DELETED, 0) = 0 AND cfg.CODE = 'common' " + - ") siteSort ON siteSort.RVCD = eng.HBRVCD AND siteSort.STCD = eng.STCD " + + ") siteSort ON siteSort.BASEID = eng.BASE_ID AND siteSort.STCD = eng.STCD " + "WHERE NVL(eng.IS_DELETED, 0) = 0 " + "AND NVL(eng.USFL, 0) = 1 " + "AND eng.LGTD IS NOT NULL " + @@ -1383,12 +1401,13 @@ public class WarnDataServiceImpl implements WarnDataService { if (point == null || !isAlarmPointVisible(point.getAnchoPointState())) { continue; } - point.setAnchoPointState(normalizeAlarmPointState(point.getAnchoPointState()) + "_ALARM"); + point.setAnchoPointState(normalizeAlarmPointState(point.getAnchoPointState())); point.setStqCount(qecCountMap.getOrDefault(point.getStcd(), 0)); point.setWqCount(wqCountMap.getOrDefault(point.getStcd(), 0)); point.setZCount(0); point.setWtCount(0); point.setYyyy(yyyy); + point.setSttpMap(point.getSttpMap() + "_ALARM"); point.setSttpCode("ENG"); int total = point.getStqCount() + point.getWqCount(); applyAlarmPointRange(point, total, expressionRows); @@ -1397,6 +1416,291 @@ public class WarnDataServiceImpl implements WarnDataService { return result; } + private List applyAlarmPointFilter(List source, DataSourceRequest.FilterDescriptor filter) { + if (CollUtil.isEmpty(source) || filter == null) { + return source; + } + List result = new ArrayList<>(); + for (AlarmPointVo item : source) { + if (matchesAlarmPointFilter(item, filter)) { + result.add(item); + } + } + return result; + } + + private boolean matchesAlarmPointFilter(AlarmPointVo item, DataSourceRequest.FilterDescriptor filter) { + if (item == null || filter == null) { + return true; + } + if (CollUtil.isNotEmpty(filter.getFilters())) { + String logic = StrUtil.blankToDefault(filter.getLogic(), "and"); + if ("or".equalsIgnoreCase(logic)) { + for (DataSourceRequest.FilterDescriptor child : filter.getFilters()) { + if (matchesAlarmPointFilter(item, child)) { + return true; + } + } + return false; + } + for (DataSourceRequest.FilterDescriptor child : filter.getFilters()) { + if (!matchesAlarmPointFilter(item, child)) { + return false; + } + } + return true; + } + if (StrUtil.isBlank(filter.getField()) || StrUtil.isBlank(filter.getOperator())) { + return true; + } + if (isAlarmPointMetaField(filter.getField())) { + return true; + } + Object actualValue = getAlarmPointFieldValue(item, filter.getField()); + return compareAlarmPointField(actualValue, filter.getValue(), filter.getOperator(), filter.isIgnoreCase()); + } + + private boolean isAlarmPointMetaField(String field) { + return "startTime".equals(field) || "endTime".equals(field); + } + + private boolean compareAlarmPointField(Object actualValue, Object expectedValue, String operator, boolean ignoreCase) { + if ("isblank".equalsIgnoreCase(operator)) { + return actualValue == null || StrUtil.isBlank(String.valueOf(actualValue)); + } + if ("isnotblank".equalsIgnoreCase(operator)) { + return actualValue != null && StrUtil.isNotBlank(String.valueOf(actualValue)); + } + if (actualValue == null) { + return expectedValue == null && ("eq".equalsIgnoreCase(operator) || "=".equals(operator)); + } + + String actualText = String.valueOf(actualValue); + String expectedText = expectedValue == null ? null : String.valueOf(expectedValue); + String left = ignoreCase && actualText != null ? actualText.toLowerCase() : actualText; + String right = ignoreCase && expectedText != null ? expectedText.toLowerCase() : expectedText; + + switch (operator.toLowerCase()) { + case "eq": + case "=": + return Objects.equals(normalizeAlarmPointCompareValue(actualValue), normalizeAlarmPointCompareValue(expectedValue)) + || Objects.equals(left, right); + case "neq": + case "<>": + return !Objects.equals(normalizeAlarmPointCompareValue(actualValue), normalizeAlarmPointCompareValue(expectedValue)) + && !Objects.equals(left, right); + case "contains": + return right != null && left != null && left.contains(right); + case "doesnotcontain": + return right == null || left == null || !left.contains(right); + case "startswith": + return right != null && left != null && left.startsWith(right); + case "endswith": + return right != null && left != null && left.endsWith(right); + case "gt": + return compareAlarmPointComparable(actualValue, expectedValue) > 0; + case "gte": + case "ge": + return compareAlarmPointComparable(actualValue, expectedValue) >= 0; + case "lt": + return compareAlarmPointComparable(actualValue, expectedValue) < 0; + case "lte": + case "le": + return compareAlarmPointComparable(actualValue, expectedValue) <= 0; + default: + return true; + } + } + + private Object normalizeAlarmPointCompareValue(Object value) { + if (value == null) { + return null; + } + if (value instanceof Number) { + return new BigDecimal(value.toString()); + } + if (value instanceof Date) { + return ((Date) value).getTime(); + } + String text = String.valueOf(value).trim(); + if (StrUtil.isBlank(text)) { + return text; + } + if (StrUtil.isNumeric(text)) { + return new BigDecimal(text); + } + return text; + } + + private int compareAlarmPointComparable(Object actualValue, Object expectedValue) { + Object left = normalizeAlarmPointCompareValue(actualValue); + Object right = normalizeAlarmPointCompareValue(expectedValue); + if (left == null && right == null) { + return 0; + } + if (left == null) { + return -1; + } + if (right == null) { + return 1; + } + if (left instanceof BigDecimal && right instanceof BigDecimal) { + return ((BigDecimal) left).compareTo((BigDecimal) right); + } + if (left instanceof Long && right instanceof Long) { + return Long.compare((Long) left, (Long) right); + } + return String.valueOf(left).compareTo(String.valueOf(right)); + } + + private void applyAlarmPointSort(List list, List sorts) { + if (CollUtil.isEmpty(list) || CollUtil.isEmpty(sorts)) { + return; + } + Comparator comparator = null; + for (DataSourceRequest.SortDescriptor sort : sorts) { + if (sort == null || StrUtil.isBlank(sort.getField()) || Boolean.FALSE.equals(sort.getNeedSortFlag())) { + continue; + } + Comparator current = (left, right) -> compareAlarmPointSortValue( + buildAlarmPointSortValue(getAlarmPointFieldValue(left, sort.getField())), + buildAlarmPointSortValue(getAlarmPointFieldValue(right, sort.getField())) + ); + if ("desc".equalsIgnoreCase(sort.getDir()) || "des".equalsIgnoreCase(sort.getDir())) { + current = current.reversed(); + } + comparator = comparator == null ? current : comparator.thenComparing(current); + } + if (comparator != null) { + list.sort(comparator); + } + } + + private Comparable buildAlarmPointSortValue(Object value) { + if (value == null) { + return null; + } + if (value instanceof BigDecimal) { + return (BigDecimal) value; + } + if (value instanceof Integer) { + return (Integer) value; + } + if (value instanceof Long) { + return (Long) value; + } + if (value instanceof Date) { + return ((Date) value).getTime(); + } + return String.valueOf(value); + } + + private int compareAlarmPointSortValue(Comparable left, Comparable right) { + if (left == null && right == null) { + return 0; + } + if (left == null) { + return 1; + } + if (right == null) { + return -1; + } + return String.valueOf(left).compareTo(String.valueOf(right)); + } + + private List applyAlarmPointPage(List source, DataSourceLoadOptionsBase loadOptions) { + if (CollUtil.isEmpty(source) || loadOptions == null || loadOptions.getTake() == null || loadOptions.getTake() <= 0) { + return source; + } + int skip = loadOptions.getSkip() == null ? 0 : Math.max(loadOptions.getSkip(), 0); + if (skip >= source.size()) { + return new ArrayList<>(); + } + int endIndex = Math.min(skip + loadOptions.getTake(), source.size()); + return new ArrayList<>(source.subList(skip, endIndex)); + } + + private List> buildAlarmPointGroupRows(List source) { + List> rows = new ArrayList<>(); + if (CollUtil.isEmpty(source)) { + return rows; + } + for (AlarmPointVo item : source) { + rows.add(new LinkedHashMap<>(BeanUtil.beanToMap(item))); + } + return rows; + } + + private Object getAlarmPointFieldValue(AlarmPointVo item, String field) { + if (item == null || StrUtil.isBlank(field)) { + return null; + } + switch (field) { + case "sttp": + return item.getSttp(); + case "stcd": + return item.getStcd(); + case "lgtd": + return item.getLgtd(); + case "lttd": + return item.getLttd(); + case "dtmel": + return item.getDtmel(); + case "anchoPointState": + return item.getAnchoPointState(); + case "sttpMap": + return item.getSttpMap(); + case "titleName": + return item.getTitleName(); + case "distance": + return item.getDistance(); + case "rvcd": + return item.getRvcd(); + case "addvcd": + return item.getAddvcd(); + case "baseId": + return item.getBaseId(); + case "rstcds": + return item.getRstcds(); + case "sttpCode": + return item.getSttpCode(); + case "ennm": + return item.getEnnm(); + case "rvnm": + return item.getRvnm(); + case "endInstalledType": + return item.getEndInstalledType(); + case "stqCount": + return item.getStqCount(); + case "wqCount": + return item.getWqCount(); + case "zCount": + return item.getZCount(); + case "wtCount": + return item.getWtCount(); + case "yyyy": + return item.getYyyy(); + case "range": + return item.getRange(); + case "ttpwr": + return item.getTtpwr(); + case "baseName": + return item.getBaseName(); + case "rstcd": + return item.getRstcd(); + case "rvcdStepSort": + return item.getRvcdStepSort(); + case "rstcdStepSort": + return item.getRstcdStepSort(); + case "siteStepSort": + return item.getSiteStepSort(); + case "logo": + return item.getLogo(); + default: + return null; + } + } + private boolean isAlarmPointVisible(String state) { return "large_eng_built".equals(state) || "mid_eng_built".equals(state) diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/wq/service/impl/EnvWqDataServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_env/wq/service/impl/EnvWqDataServiceImpl.java index e45490d4..7c606e32 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/wq/service/impl/EnvWqDataServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wq/service/impl/EnvWqDataServiceImpl.java @@ -1342,17 +1342,17 @@ public class EnvWqDataServiceImpl implements EnvWqDataService { "LEFT JOIN SD_RVCD_DIC rv ON rv.RVCD = eng.RVCD " + "LEFT JOIN SD_ADDVCD_DIC addv ON addv.ADDVCD = eng.ADDVCD " + "LEFT JOIN SD_FHBT_B_H fh ON fh.STCD = wq.FHSTCD AND NVL(fh.IS_DELETED, 0) = 0 " + - "LEFT JOIN MS_ALONG_B rvAlong ON rvAlong.RVCD = eng.HBRVCD AND rvAlong.CODE = 'common' AND NVL(rvAlong.IS_DELETED, 0) = 0 " + - "LEFT JOIN (SELECT det.SORT, along.RVCD, det.STCD " + + "LEFT JOIN MS_ALONG_B rvAlong ON rvAlong.BASEID = wq.BASE_ID AND rvAlong.CODE = 'common' AND NVL(rvAlong.IS_DELETED, 0) = 0 " + + "LEFT JOIN (SELECT det.SORT,along.BASEID, along.RVCD, det.STCD " + " FROM MS_ALONGDET_B det " + " INNER JOIN MS_ALONG_B along ON det.ALONG_ID = along.ID " + " WHERE NVL(det.IS_DELETED, 0) = 0 AND NVL(along.IS_DELETED, 0) = 0 AND along.CODE = 'common') rstAlong " + - " ON rstAlong.RVCD = eng.HBRVCD AND rstAlong.STCD = wq.RSTCD " + - "LEFT JOIN (SELECT det.SORT, along.RVCD, det.STCD " + + " ON rstAlong.BASEID = wq.BASE_ID AND rstAlong.STCD = wq.RSTCD " + + "LEFT JOIN (SELECT det.SORT,along.BASEID, along.RVCD, det.STCD " + " FROM MS_ALONGDET_B det " + " INNER JOIN MS_ALONG_B along ON det.ALONG_ID = along.ID " + " WHERE NVL(det.IS_DELETED, 0) = 0 AND NVL(along.IS_DELETED, 0) = 0 AND along.CODE = 'common') siteAlong " + - " ON siteAlong.RVCD = eng.HBRVCD AND siteAlong.STCD = wq.STCD " + + " ON siteAlong.BASEID = wq.BASE_ID AND siteAlong.STCD = wq.STCD " + "WHERE wq.STTP IN ('WQ', 'WQFB') AND NVL(wq.IS_DELETED, 0) = 0"; } @@ -1824,17 +1824,17 @@ public class EnvWqDataServiceImpl implements EnvWqDataService { "LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = wq.BASE_ID AND NVL(hb.IS_DELETED, 0) = 0 " + "LEFT JOIN SD_RVCD_DIC rv ON rv.RVCD = eng.RVCD " + "LEFT JOIN SD_ADDVCD_DIC addv ON addv.ADDVCD = eng.ADDVCD " + - "LEFT JOIN MS_ALONG_B rvAlong ON rvAlong.RVCD = eng.HBRVCD AND rvAlong.CODE = 'common' AND NVL(rvAlong.IS_DELETED, 0) = 0 " + - "LEFT JOIN (SELECT det.SORT, along.RVCD, det.STCD " + + "LEFT JOIN MS_ALONG_B rvAlong ON rvAlong.BASEID = wq.BASE_ID AND rvAlong.CODE = 'common' AND NVL(rvAlong.IS_DELETED, 0) = 0 " + + "LEFT JOIN (SELECT det.SORT,cfg.BASEID, along.RVCD, det.STCD " + " FROM MS_ALONGDET_B det " + " INNER JOIN MS_ALONG_B along ON det.ALONG_ID = along.ID " + " WHERE NVL(det.IS_DELETED, 0) = 0 AND NVL(along.IS_DELETED, 0) = 0 AND along.CODE = 'common') rstAlong " + - " ON rstAlong.RVCD = eng.HBRVCD AND rstAlong.STCD = wq.RSTCD " + - "LEFT JOIN (SELECT det.SORT, along.RVCD, det.STCD " + + " ON rstAlong.BASEID = wq.BASE_ID AND rstAlong.STCD = wq.RSTCD " + + "LEFT JOIN (SELECT det.SORT,cfg.BASEID, along.RVCD, det.STCD " + " FROM MS_ALONGDET_B det " + " INNER JOIN MS_ALONG_B along ON det.ALONG_ID = along.ID " + " WHERE NVL(det.IS_DELETED, 0) = 0 AND NVL(along.IS_DELETED, 0) = 0 AND along.CODE = 'common') siteAlong " + - " ON siteAlong.RVCD = eng.HBRVCD AND siteAlong.STCD = wq.STCD " + + " ON siteAlong.BASEID = wq.BASE_ID AND siteAlong.STCD = wq.STCD " + "WHERE wq.STTP = 'WQ' AND NVL(wq.IS_DELETED, 0) = 0"; } @@ -2264,17 +2264,17 @@ public class EnvWqDataServiceImpl implements EnvWqDataService { "LEFT JOIN SD_HBRV_DIC hbrv ON hbrv.HBRVCD = eng.HBRVCD AND hbrv.BASEID = wq.BASE_ID AND NVL(hbrv.IS_DELETED, 0) = 0 AND NVL(hbrv.ENABLED, 1) = 1 " + "LEFT JOIN SD_RVCD_DIC rv ON rv.RVCD = eng.RVCD " + "LEFT JOIN SD_ADDVCD_DIC addv ON addv.ADDVCD = eng.ADDVCD " + - "LEFT JOIN MS_ALONG_B rvAlong ON rvAlong.RVCD = eng.HBRVCD AND rvAlong.CODE = 'common' AND NVL(rvAlong.IS_DELETED, 0) = 0 " + - "LEFT JOIN (SELECT det.SORT, along.RVCD, det.STCD " + + "LEFT JOIN MS_ALONG_B rvAlong ON rvAlong.BASEID = wq.BASE_ID AND rvAlong.CODE = 'common' AND NVL(rvAlong.IS_DELETED, 0) = 0 " + + "LEFT JOIN (SELECT det.SORT,along.BASEID, along.RVCD, det.STCD " + " FROM MS_ALONGDET_B det " + " INNER JOIN MS_ALONG_B along ON det.ALONG_ID = along.ID " + " WHERE NVL(det.IS_DELETED, 0) = 0 AND NVL(along.IS_DELETED, 0) = 0 AND along.CODE = 'common') rstAlong " + - " ON rstAlong.RVCD = eng.HBRVCD AND rstAlong.STCD = wq.RSTCD " + - "LEFT JOIN (SELECT det.SORT, along.RVCD, det.STCD " + + " ON rstAlong.RVCD = wq.BASE_ID AND rstAlong.STCD = wq.RSTCD " + + "LEFT JOIN (SELECT det.SORT,along.BASEID, along.RVCD, det.STCD " + " FROM MS_ALONGDET_B det " + " INNER JOIN MS_ALONG_B along ON det.ALONG_ID = along.ID " + " WHERE NVL(det.IS_DELETED, 0) = 0 AND NVL(along.IS_DELETED, 0) = 0 AND along.CODE = 'common') siteAlong " + - " ON siteAlong.RVCD = eng.HBRVCD AND siteAlong.STCD = wq.STCD " + + " ON siteAlong.BASEID = wq.BASE_ID AND siteAlong.STCD = wq.STCD " + "WHERE wq.STTP = 'WQ' AND NVL(wq.IS_DELETED, 0) = 0"; } @@ -3308,6 +3308,7 @@ public class EnvWqDataServiceImpl implements EnvWqDataService { String countField = row.containsKey("COUNT_STCD") ? "COUNT_STCD" : "COUNT_" + upperField; String aggregateKey = "COUNT_STCD".equals(countField) ? "count_stcd" : "count_" + groupField; Object countValue = row.get(countField); + Map item = new LinkedHashMap<>(); if (countValue == null) { countValue = row.get("count_stcd"); } @@ -3321,7 +3322,7 @@ public class EnvWqDataServiceImpl implements EnvWqDataService { count = Long.parseLong(String.valueOf(countValue)); } - Map item = new LinkedHashMap<>(); + item.put("key", key); item.put("keyName", null); item.put("keyExt", new HashMap<>()); @@ -3330,7 +3331,7 @@ public class EnvWqDataServiceImpl implements EnvWqDataService { detail.put(upperField, key); detail.put(countField, count); item.put("items", List.of(detail)); - item.put("count", 0); + item.put("count", count); item.put("summary", new Object[0]); Map aggregates = new LinkedHashMap<>(); @@ -4557,7 +4558,7 @@ public class EnvWqDataServiceImpl implements EnvWqDataService { } @Override -// @Cacheable(cacheNames = "weCache#3600", keyGenerator = "cacheKeyGenerator") + @Cacheable(cacheNames = "wqCache#3600", keyGenerator = "cacheKeyByUserGenerator") public DataSourceResult getAnchorPointKendoListCust(DataSourceRequest dataSourceRequest) { DataSourceResult dataSourceResult = new DataSourceResult<>(); dataSourceResult.setAggregates(new HashMap<>()); @@ -4616,19 +4617,19 @@ public class EnvWqDataServiceImpl implements EnvWqDataService { .append("LEFT JOIN SD_HBRV_DIC hbrv ON hbrv.HBRVCD = eng.HBRVCD AND NVL(hbrv.IS_DELETED, 0) = 0 ") .append("LEFT JOIN SD_RVCD_DIC rvcd ON rvcd.RVCD = eng.RVCD AND NVL(rvcd.IS_DELETED, 0) = 0 ") .append("LEFT JOIN SD_ADDVCD_DIC addvcd ON addvcd.ADDVCD = eng.ADDVCD ") - .append("LEFT JOIN MS_ALONG_B along ON along.RVCD = eng.HBRVCD AND along.CODE = 'common' AND NVL(along.IS_DELETED, 0) = 0 ") + .append("LEFT JOIN MS_ALONG_B along ON along.BASEID = t.BASE_ID AND along.CODE = 'common' AND NVL(along.IS_DELETED, 0) = 0 ") .append("LEFT JOIN ( ") - .append(" SELECT det.SORT, cfg.RVCD, det.STCD ") + .append(" SELECT det.SORT,cfg.BASEID, cfg.RVCD, det.STCD ") .append(" FROM MS_ALONGDET_B det ") .append(" INNER JOIN MS_ALONG_B cfg ON det.ALONG_ID = cfg.ID ") .append(" WHERE NVL(det.IS_DELETED, 0) = 0 AND NVL(cfg.IS_DELETED, 0) = 0 AND cfg.CODE = 'common' ") - .append(") rstSort ON rstSort.RVCD = eng.HBRVCD AND rstSort.STCD = t.RSTCD ") + .append(") rstSort ON rstSort.BASEID = t.BASE_ID AND rstSort.STCD = t.RSTCD ") .append("LEFT JOIN ( ") - .append(" SELECT det.SORT, cfg.RVCD, det.STCD ") + .append(" SELECT det.SORT,cfg.BASEID, cfg.RVCD, det.STCD ") .append(" FROM MS_ALONGDET_B det ") .append(" INNER JOIN MS_ALONG_B cfg ON det.ALONG_ID = cfg.ID ") .append(" WHERE NVL(det.IS_DELETED, 0) = 0 AND NVL(cfg.IS_DELETED, 0) = 0 AND cfg.CODE = 'common' ") - .append(") siteSort ON siteSort.RVCD = eng.HBRVCD AND siteSort.STCD = t.STCD ") + .append(") siteSort ON siteSort.BASEID = t.BASE_ID AND siteSort.STCD = t.STCD ") .append("WHERE NVL(t.IS_DELETED, 0) = 0 ") .append("AND NVL(t.USFL, 1) = 1 "); diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/SdWtBaseInfoVO.java b/backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/SdWtBaseInfoVO.java index f88daf2f..18561f8f 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/SdWtBaseInfoVO.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/SdWtBaseInfoVO.java @@ -95,6 +95,9 @@ public class SdWtBaseInfoVO implements Serializable { @Schema(description = "基地流域编码") private String hbrvcd; + @Schema(description = "基地流域名称") + private String hbrvcdName; + @Schema(description = "经度") private Double lgtd; diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/wt/mapper/AlongListMapper.java b/backend/src/main/java/com/yfd/platform/qgc_env/wt/mapper/AlongListMapper.java index 0fd45a09..2be4b3e0 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/wt/mapper/AlongListMapper.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wt/mapper/AlongListMapper.java @@ -62,7 +62,7 @@ public interface AlongListMapper extends BaseMapper { " and MAB.RVCD=#{rvcd} " + " " + " " + - " and MAB.RVCD in (select HBRVCD from SD_HBRV_DIC where IS_DELETED=0 and ENABLED=1 and BASEID=#{baseId}) " + + " and MAB.BASEID in (select BASEID from SD_HYDROBASE where IS_DELETED=0 and ENABLED=1 and BASEID=#{baseId}) " + " " + " union all " + " select " + @@ -93,7 +93,7 @@ public interface AlongListMapper extends BaseMapper { " and MAB.RVCD=#{rvcd} " + " " + " " + - " and MAB.RVCD in (select HBRVCD from SD_HBRV_DIC where IS_DELETED=0 and ENABLED=1 and BASEID=#{baseId}) " + + " and MAB.BASEID in (select BASEID from SD_HYDROBASE where IS_DELETED=0 and ENABLED=1 and BASEID=#{baseId}) " + " " + ") T order by rvcdSort asc, sort asc" + "") @@ -117,7 +117,7 @@ public interface AlongListMapper extends BaseMapper { "and MAB.RVCD=#{rvcd} " + "" + "" + - "and MAB.RVCD in (select HBRVCD from SD_HBRV_DIC where IS_DELETED=0 and ENABLED=1 and BASEID=#{baseId}) " + + "and MAB.BASEID in (select BASEID from SD_HYDROBASE where IS_DELETED=0 and ENABLED=1 and BASEID=#{baseId}) " + "" + "order by MAB.ORDER_INDEX asc, SAD.SORT asc, SWR.TM desc" + ") where ROWNUM=1" + diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/wt/service/impl/SdWtMonitorServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_env/wt/service/impl/SdWtMonitorServiceImpl.java index 1e3d7581..c2c3f8fe 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/wt/service/impl/SdWtMonitorServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wt/service/impl/SdWtMonitorServiceImpl.java @@ -34,6 +34,7 @@ import com.yfd.platform.utils.RedisCacheUtil; import com.yfd.platform.utils.SecurityUtils; import jakarta.annotation.Resource; import lombok.Data; +import org.springframework.cache.annotation.Cacheable; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -712,6 +713,7 @@ public class SdWtMonitorServiceImpl implements SdWtMonitorService { .append("dw.ORDER_INDEX AS siteStepSort, ") .append("dw.STNM AS stnm, ") .append("eng.ENNM AS ennm, ") + .append("eng.REACHCD_NAME AS hbrvcdName, ") .append("dw.JCDT AS jcdt, ") .append("NULL AS stindx, ") .append("CASE WHEN NVL(dw.DTIN, 0) = 1 THEN 1 ELSE 0 END AS coenvwState, ") @@ -734,6 +736,7 @@ public class SdWtMonitorServiceImpl implements SdWtMonitorService { .append("eng.HBRVCD AS hbrvcd ") .append("FROM SD_DW_B_H dw ") .append("LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = dw.RSTCD AND NVL(eng.IS_DELETED, 0) = 0 ") +// .append("LEFT JOIN SD_RVCD_DIC srd ON eng.REACHCD = srd.RSTCD AND NVL(eng.IS_DELETED, 0) = 0 ") .append("LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = eng.BASE_ID AND NVL(hb.IS_DELETED, 0) = 0 ") .append("LEFT JOIN SD_HBRV_DIC hbrv ON hbrv.HBRVCD = eng.HBRVCD AND hbrv.BASEID = eng.BASE_ID AND NVL(hbrv.IS_DELETED, 0) = 0 ") .append("LEFT JOIN SD_STTP_B sttp ON sttp.STTP_CODE = dw.STTP AND NVL(sttp.IS_DELETED, 0) = 0 ") @@ -790,8 +793,20 @@ public class SdWtMonitorServiceImpl implements SdWtMonitorService { sql.append("AND wt.STTP = #{map.sttpCode} "); } if (queryDwDirectly && StrUtil.isNotBlank(sttpCode)) { - paramMap.put("sttpCode", sttpCode); - sql.append("AND dw.STTP = #{map.sttpCode} "); + List sttpCodes = StrUtil.split(sttpCode, ","); + if(sttpCodes.size() > 1){ + // 正确拼接,每个值加单引号并用逗号连接 + String joined = sttpCodes.stream() + .map(s -> "'" + s.replace("'", "''") + "'") // 转义单引号 + .collect(Collectors.joining(",")); + sql.append("AND dw.STTP NOT IN (").append(joined).append(") "); + } + if(sttpCodes.size() == 1){ + paramMap.put("sttpCode", sttpCode); + sql.append("AND dw.STTP = #{map.sttpCode} "); + } +// paramMap.put("sttpCode", sttpCode); +// sql.append("AND dw.STTP = #{map.sttpCode} "); } if (queryDwDirectly && StrUtil.isNotBlank(bldsttCcode)) { @@ -1291,21 +1306,21 @@ public class SdWtMonitorServiceImpl implements SdWtMonitorService { .append("LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = wt.RSTCD ") .append("LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = eng.BASE_ID AND NVL(hb.IS_DELETED, 0) = 0 ") .append("LEFT JOIN (") - .append(" SELECT det.STCD, det.SORT, along.RVCD ") + .append(" SELECT det.STCD, det.SORT,along.BASEID, along.RVCD ") .append(" FROM MS_ALONGDET_B det ") .append(" INNER JOIN MS_ALONG_B along ON along.ID = det.ALONG_ID ") .append(" WHERE NVL(det.IS_DELETED, 0) = 0 ") .append(" AND NVL(along.IS_DELETED, 0) = 0 ") .append(" AND along.CODE = 'common'") - .append(") rstSort ON rstSort.STCD = wt.RSTCD AND rstSort.RVCD = eng.HBRVCD ") + .append(") rstSort ON rstSort.STCD = wt.RSTCD AND rstSort.BASEID = wt.BASE_ID ") .append("LEFT JOIN (") - .append(" SELECT det.STCD, det.SORT, along.RVCD ") + .append(" SELECT det.STCD, det.SORT,along.BASEID, along.RVCD ") .append(" FROM MS_ALONGDET_B det ") .append(" INNER JOIN MS_ALONG_B along ON along.ID = det.ALONG_ID ") .append(" WHERE NVL(det.IS_DELETED, 0) = 0 ") .append(" AND NVL(along.IS_DELETED, 0) = 0 ") .append(" AND along.CODE = 'common'") - .append(") siteSort ON siteSort.STCD = wt.STCD AND siteSort.RVCD = eng.HBRVCD ") + .append(") siteSort ON siteSort.STCD = wt.STCD AND siteSort.BASEID = wt.BASE_ID ") .append("WHERE NVL(wt.IS_DELETED, 0) = 0 ") .append(" AND wt.STTP = 'WTVT' ") .append(" AND NVL(wt.USFL, 0) = 1 ") @@ -1366,21 +1381,21 @@ public class SdWtMonitorServiceImpl implements SdWtMonitorService { .append("LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = wt.RSTCD ") .append("LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = eng.BASE_ID AND NVL(hb.IS_DELETED, 0) = 0 ") .append("LEFT JOIN (") - .append(" SELECT det.STCD, det.SORT, along.RVCD ") + .append(" SELECT det.STCD, det.SORT,along.BASEID, along.RVCD ") .append(" FROM MS_ALONGDET_B det ") .append(" INNER JOIN MS_ALONG_B along ON along.ID = det.ALONG_ID ") .append(" WHERE NVL(det.IS_DELETED, 0) = 0 ") .append(" AND NVL(along.IS_DELETED, 0) = 0 ") .append(" AND along.CODE = 'common'") - .append(") rstSort ON rstSort.STCD = wt.RSTCD AND rstSort.RVCD = eng.HBRVCD ") + .append(") rstSort ON rstSort.STCD = wt.RSTCD AND rstSort.BASEID = wt.BASE_ID ") .append("LEFT JOIN (") - .append(" SELECT det.STCD, det.SORT, along.RVCD ") + .append(" SELECT det.STCD, det.SORT,along.BASEID, along.RVCD ") .append(" FROM MS_ALONGDET_B det ") .append(" INNER JOIN MS_ALONG_B along ON along.ID = det.ALONG_ID ") .append(" WHERE NVL(det.IS_DELETED, 0) = 0 ") .append(" AND NVL(along.IS_DELETED, 0) = 0 ") .append(" AND along.CODE = 'common'") - .append(") siteSort ON siteSort.STCD = wt.STCD AND siteSort.RVCD = eng.HBRVCD ") + .append(") siteSort ON siteSort.STCD = wt.STCD AND siteSort.BASEID = wt.BASE_ID ") .append("WHERE NVL(wt.IS_DELETED, 0) = 0 ") .append(" AND wt.STTP = 'WTVT' ") .append(" AND NVL(wt.USFL, 0) = 1 ") @@ -2846,6 +2861,7 @@ public class SdWtMonitorServiceImpl implements SdWtMonitorService { } @Override + @Cacheable(cacheNames = "dwCache#3600", keyGenerator = "cacheKeyByUserGenerator") public DataSourceResult getFacilityPointKendoListCust(DataSourceRequest dataSourceRequest) { DataSourceResult dataSourceResult = new DataSourceResult<>(); dataSourceResult.setAggregates(new HashMap<>()); @@ -2888,7 +2904,7 @@ public class SdWtMonitorServiceImpl implements SdWtMonitorService { .append("LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = t.RSTCD AND NVL(eng.IS_DELETED, 0) = 0 ") .append("LEFT JOIN SD_STTP_B sttp ON sttp.STTP_CODE = t.STTP AND NVL(sttp.IS_DELETED, 0) = 0 ") .append("WHERE NVL(t.IS_DELETED, 0) = 0 ") - .append("AND NVL(t.USFL, 1) = 1 ") +// .append("AND NVL(t.USFL, 1) = 1 ") .append("AND t.LGTD IS NOT NULL ") .append("AND t.LTTD IS NOT NULL "); @@ -2943,6 +2959,7 @@ public class SdWtMonitorServiceImpl implements SdWtMonitorService { } @Override +// @Cacheable(cacheNames = "wtCache#3600", keyGenerator = "cacheKeyByUserGenerator") public DataSourceResult getEngTempPointListKendoListCust(DataSourceRequest dataSourceRequest) { DataSourceResult dataSourceResult = new DataSourceResult<>(); dataSourceResult.setAggregates(new HashMap<>()); @@ -3016,6 +3033,13 @@ public class SdWtMonitorServiceImpl implements SdWtMonitorService { // paramMap.put("dtinType", dtinType); // } + DataScopeApplyResult scopeApplyResult = dataScopeFilterService.appendCurrentUserStationScope(sql, paramMap, "t.RSTCD"); + if (scopeApplyResult.isEmptyResult()) { + dataSourceResult.setData(new ArrayList<>()); + dataSourceResult.setTotal(0L); + return dataSourceResult; + } + List sort = dataSourceRequest.getSort(); if (sort != null && !sort.isEmpty()) { sql.append(" ORDER BY "); diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/wte/entity/vo/WeVmsstbprptVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/wte/entity/vo/WeVmsstbprptVo.java index e65e99cf..ac598f1f 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/wte/entity/vo/WeVmsstbprptVo.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wte/entity/vo/WeVmsstbprptVo.java @@ -36,6 +36,15 @@ public class WeVmsstbprptVo { @Schema(description = "河流编码") private String rvcd; + @Schema(description = "站址/位置") + private String stlc; + + @Schema(description = "地形裁剪范围") + private String box; + + @Schema(description = "基地编码") + private String baseName; + @Schema(description = "排序") private Integer orderIndex; diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/wte/service/impl/WeFishServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_env/wte/service/impl/WeFishServiceImpl.java index 45316df3..b6da77f2 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/wte/service/impl/WeFishServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wte/service/impl/WeFishServiceImpl.java @@ -1113,16 +1113,16 @@ public class WeFishServiceImpl implements WeFishService { .append(" WHERE NVL(IS_DELETED, 0) = 0 AND STATUS = 1 ") .append(" GROUP BY STCD ") .append(") latest ON latest.STCD = section.STCD ") - .append("LEFT JOIN MS_ALONG_B along ON along.RVCD = section.HBRVCD ") + .append("LEFT JOIN MS_ALONG_B along ON along.BASEID = section.BASE_ID ") .append(" AND along.CODE = 'common' AND NVL(along.IS_DELETED, 0) = 0 ") .append("LEFT JOIN ( ") - .append(" SELECT det.SORT, cfg.RVCD, det.STCD ") + .append(" SELECT det.SORT,cfg.BASEID, cfg.RVCD, det.STCD ") .append(" FROM MS_ALONGDET_B det ") .append(" INNER JOIN MS_ALONG_B cfg ON det.ALONG_ID = cfg.ID ") .append(" WHERE NVL(det.IS_DELETED, 0) = 0 ") .append(" AND NVL(cfg.IS_DELETED, 0) = 0 ") .append(" AND cfg.CODE = 'common' ") - .append(") siteSort ON siteSort.RVCD = section.HBRVCD AND siteSort.STCD = section.STCD ") + .append(") siteSort ON siteSort.BASEID = section.BASE_ID AND siteSort.STCD = section.STCD ") .append("WHERE NVL(section.USFL, 1) = 1 "); String filterSql = buildWePointFilterCondition(dataSourceRequest.getFilter(), paramMap, new int[]{0}); @@ -1923,7 +1923,7 @@ public class WeFishServiceImpl implements WeFishService { List rstcdList, Map paramMap) { StringBuilder sql = new StringBuilder(); - sql.append("SELECT t.HBRVCD AS hbrvcd, t.YR AS yr ") + sql.append("SELECT t.BASE_ID AS hbrvcd, t.YR AS yr ") .append("FROM (") .append("SELECT section.HBRVCD, section.RSTCD, section.BASE_ID, TO_CHAR(we.TM, 'yyyy') AS yr ") .append("FROM SD_WE_B_H section ") @@ -2753,7 +2753,16 @@ public class WeFishServiceImpl implements WeFishService { "b.NAME AS name, " + "b.NAME_EN AS nameEn, " + "b.PROTECTLVL AS protectlvl, " + - "b.PROTECTLVL AS protectlvlName, " + + "CASE b.PROTECTLVL\n" + + " WHEN '1' THEN '国家一级'\n" + + " WHEN '2' THEN '国家二级'\n" + + " WHEN '3' THEN '国家三级'\n" + + " WHEN '4' THEN '省重点'\n" + + " WHEN '5' THEN '市一级'\n" + + " WHEN '6' THEN '市二级'\n" + + " WHEN '7' THEN '无'\n" + + " ELSE b.PROTECTLVL\n" + + "END AS protectlvlName, " + "b.LOGO AS logo, " + "b.INTRODUCE AS introduce " + "FROM MS_SPECANIMALS_B a " + @@ -3286,11 +3295,14 @@ public class WeFishServiceImpl implements WeFishService { return "SELECT " + "ai.STCD AS id, " + "ai.STTP AS sttpCode, " + + "ai.STLC AS stlc, " + "ai.STCD AS stcd, " + "ai.STNM AS stnm, " + + "ai.BOX AS box, " + "ai.RSTCD AS rstcd, " + "eng.ENNM AS ennm, " + "ai.BASE_ID AS baseId, " + + "hb.BASENAME AS baseName, " + "ai.HBRVCD AS hbrvcd, " + "ai.RVCD AS rvcd, " + "ai.ORDER_INDEX AS orderIndex, " + @@ -3298,6 +3310,7 @@ public class WeFishServiceImpl implements WeFishService { "ai.LTTD AS lttd " + "FROM SD_AIMONITOR_B_H ai " + "LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = ai.RSTCD AND NVL(eng.IS_DELETED, 0) = 0 " + + "LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = ai.BASE_ID AND NVL(hb.IS_DELETED, 0) = 0 " + "WHERE NVL(ai.IS_DELETED, 0) = 0"; } @@ -3350,6 +3363,9 @@ public class WeFishServiceImpl implements WeFishService { selected.add("t.sttpCode AS sttpCode"); selected.add("t.stnm AS stnm"); selected.add("t.stcd AS stcd"); + selected.add("t.stlc AS stlc"); + selected.add("t.box AS box"); + selected.add("t.baseName AS baseName"); } else { for (String field : selectFields) { String column = columns.get(field); diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/zq/service/impl/ZqMonitorServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_env/zq/service/impl/ZqMonitorServiceImpl.java index 85743199..972a77e1 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/zq/service/impl/ZqMonitorServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/zq/service/impl/ZqMonitorServiceImpl.java @@ -714,19 +714,19 @@ public class ZqMonitorServiceImpl implements ZqMonitorService { "LEFT JOIN SD_HBRV_DIC hbrv ON hbrv.HBRVCD = eng.HBRVCD AND hbrv.BASEID = eng.BASE_ID " + " AND NVL(hbrv.IS_DELETED, 0) = 0 AND NVL(hbrv.ENABLED, 1) = 1 " + "LEFT JOIN SD_RVCD_DIC rv ON rv.RVCD = eng.RVCD " + - "LEFT JOIN MS_ALONG_B along ON along.RVCD = eng.HBRVCD AND along.CODE = 'common' AND NVL(along.IS_DELETED, 0) = 0 " + + "LEFT JOIN MS_ALONG_B along ON along.BASEID = rb.BASE_ID AND along.CODE = 'common' AND NVL(along.IS_DELETED, 0) = 0 " + "LEFT JOIN ( " + - " SELECT det.SORT, cfg.RVCD, det.STCD " + + " SELECT det.SORT,cfg.BASEID, cfg.RVCD, det.STCD " + " FROM MS_ALONGDET_B det " + " INNER JOIN MS_ALONG_B cfg ON det.ALONG_ID = cfg.ID " + " WHERE NVL(det.IS_DELETED, 0) = 0 AND NVL(cfg.IS_DELETED, 0) = 0 AND cfg.CODE = 'common' " + - ") rstSort ON rstSort.RVCD = eng.HBRVCD AND rstSort.STCD = rb.RSTCD " + + ") rstSort ON rstSort.BASEID = rb.BASE_ID AND rstSort.STCD = rb.RSTCD " + "LEFT JOIN ( " + - " SELECT det.SORT, cfg.RVCD, det.STCD " + + " SELECT det.SORT,cfg.BASEID, cfg.RVCD, det.STCD " + " FROM MS_ALONGDET_B det " + " INNER JOIN MS_ALONG_B cfg ON det.ALONG_ID = cfg.ID " + " WHERE NVL(det.IS_DELETED, 0) = 0 AND NVL(cfg.IS_DELETED, 0) = 0 AND cfg.CODE = 'common' " + - ") siteSort ON siteSort.RVCD = eng.HBRVCD AND siteSort.STCD = rb.STCD " + + ") siteSort ON siteSort.BASEID = rb.BASE_ID AND siteSort.STCD = rb.STCD " + "LEFT JOIN SD_VDINFO_B vdb ON vdb.CSTCD = rr.STCD AND NVL(vdb.USFL, 1) = 1 " + "LEFT JOIN SD_VDINFO_R vdr ON vdr.STCD = vdb.STCD AND vdr.TM = rr.TM AND NVL(vdr.IS_DELETED, 0) = 0 " + "WHERE NVL(rr.IS_DELETED, 0) = 0 " + @@ -761,19 +761,19 @@ public class ZqMonitorServiceImpl implements ZqMonitorService { "INNER JOIN SD_RIVER_B_H rb ON rb.STCD = day.STCD AND rb.STTP = 'ZQ' AND NVL(rb.IS_DELETED, 0) = 0 " + "LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = rb.RSTCD AND NVL(eng.IS_DELETED, 0) = 0 " + "LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = eng.BASE_ID AND NVL(hb.IS_DELETED, 0) = 0 " + - "LEFT JOIN MS_ALONG_B along ON along.RVCD = eng.HBRVCD AND along.CODE = 'common' AND NVL(along.IS_DELETED, 0) = 0 " + + "LEFT JOIN MS_ALONG_B along ON along.BASEID = rb.BASE_ID AND along.CODE = 'common' AND NVL(along.IS_DELETED, 0) = 0 " + "LEFT JOIN ( " + - " SELECT det.SORT, cfg.RVCD, det.STCD " + + " SELECT det.SORT,cfg.BASEID, cfg.RVCD, det.STCD " + " FROM MS_ALONGDET_B det " + " INNER JOIN MS_ALONG_B cfg ON det.ALONG_ID = cfg.ID " + " WHERE NVL(det.IS_DELETED, 0) = 0 AND NVL(cfg.IS_DELETED, 0) = 0 AND cfg.CODE = 'common' " + - ") rstSort ON rstSort.RVCD = eng.HBRVCD AND rstSort.STCD = rb.RSTCD " + + ") rstSort ON rstSort.BASEID = rb.BASE_ID AND rstSort.STCD = rb.RSTCD " + "LEFT JOIN ( " + - " SELECT det.SORT, cfg.RVCD, det.STCD " + + " SELECT det.SORT,cfg.BASEID, cfg.RVCD, det.STCD " + " FROM MS_ALONGDET_B det " + " INNER JOIN MS_ALONG_B cfg ON det.ALONG_ID = cfg.ID " + " WHERE NVL(det.IS_DELETED, 0) = 0 AND NVL(cfg.IS_DELETED, 0) = 0 AND cfg.CODE = 'common' " + - ") siteSort ON siteSort.RVCD = eng.HBRVCD AND siteSort.STCD = rb.STCD " + + ") siteSort ON siteSort.BASEID = rb.BASE_ID AND siteSort.STCD = rb.STCD " + "WHERE NVL(day.IS_DELETED, 0) = 0 "; } @@ -808,19 +808,19 @@ public class ZqMonitorServiceImpl implements ZqMonitorService { "INNER JOIN SD_RIVER_B_H rb ON rb.STCD = drtp.STCD AND rb.STTP = 'ZQ' AND NVL(rb.IS_DELETED, 0) = 0 " + "LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = rb.RSTCD AND NVL(eng.IS_DELETED, 0) = 0 " + "LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = eng.BASE_ID AND NVL(hb.IS_DELETED, 0) = 0 " + - "LEFT JOIN MS_ALONG_B along ON along.RVCD = eng.HBRVCD AND along.CODE = 'common' AND NVL(along.IS_DELETED, 0) = 0 " + + "LEFT JOIN MS_ALONG_B along ON along.BASEID = rb.BASE_ID AND along.CODE = 'common' AND NVL(along.IS_DELETED, 0) = 0 " + "LEFT JOIN ( " + - " SELECT det.SORT, cfg.RVCD, det.STCD " + + " SELECT det.SORT,cfg.BASEID, cfg.RVCD, det.STCD " + " FROM MS_ALONGDET_B det " + " INNER JOIN MS_ALONG_B cfg ON det.ALONG_ID = cfg.ID " + " WHERE NVL(det.IS_DELETED, 0) = 0 AND NVL(cfg.IS_DELETED, 0) = 0 AND cfg.CODE = 'common' " + - ") rstSort ON rstSort.RVCD = eng.HBRVCD AND rstSort.STCD = rb.RSTCD " + + ") rstSort ON rstSort.BASEID = rb.BASE_ID AND rstSort.STCD = rb.RSTCD " + "LEFT JOIN ( " + - " SELECT det.SORT, cfg.RVCD, det.STCD " + + " SELECT det.SORT,cfg.BASEID, cfg.RVCD, det.STCD " + " FROM MS_ALONGDET_B det " + " INNER JOIN MS_ALONG_B cfg ON det.ALONG_ID = cfg.ID " + " WHERE NVL(det.IS_DELETED, 0) = 0 AND NVL(cfg.IS_DELETED, 0) = 0 AND cfg.CODE = 'common' " + - ") siteSort ON siteSort.RVCD = eng.HBRVCD AND siteSort.STCD = rb.STCD " + + ") siteSort ON siteSort.BASEID = rb.BASE_ID AND siteSort.STCD = rb.STCD " + "WHERE NVL(drtp.IS_DELETED, 0) = 0 "; } @@ -2419,11 +2419,11 @@ public class ZqMonitorServiceImpl implements ZqMonitorService { "LEFT JOIN SD_RVCD_DIC rv ON rv.RVCD = eng.RVCD\n" + "LEFT JOIN SD_RIVER_B_H fh ON fh.STCD = rb.FHSTCD AND NVL(fh.IS_DELETED, 0) = 0\n" + "LEFT JOIN (\n" + - " SELECT det.SORT, cfg.RVCD, det.STCD\n" + + " SELECT det.SORT,cfg.BASEID, cfg.RVCD, det.STCD\n" + " FROM MS_ALONGDET_B det\n" + " INNER JOIN MS_ALONG_B cfg ON det.ALONG_ID = cfg.ID\n" + " WHERE NVL(det.IS_DELETED, 0) = 0 AND NVL(cfg.IS_DELETED, 0) = 0 AND cfg.CODE = 'common'\n" + - ") siteSort ON siteSort.RVCD = eng.HBRVCD AND siteSort.STCD = rb.STCD\n" + + ") siteSort ON siteSort.BASEID = rb.BASE_ID AND siteSort.STCD = rb.STCD\n" + "WHERE NVL(rb.IS_DELETED, 0) = 0 AND rb.STTP = 'ZQ' AND rb.LGTD IS NOT NULL AND rb.LTTD IS NOT NULL "); Map paramMap = new HashMap<>(); diff --git a/backend/src/main/java/com/yfd/platform/qgc_sys/mapLayer/controller/MapLegendController.java b/backend/src/main/java/com/yfd/platform/qgc_sys/mapLayer/controller/MapLegendController.java index 9c2b5010..cd6945ae 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_sys/mapLayer/controller/MapLegendController.java +++ b/backend/src/main/java/com/yfd/platform/qgc_sys/mapLayer/controller/MapLegendController.java @@ -62,6 +62,7 @@ public class MapLegendController { Page page = DataSourceRequestUtil.getPage(dataSourceRequest); Page resultPage; wrapper.eq("IS_DELETED", 0); + wrapper.orderByDesc("ORDER_INDEX"); if (page != null) { resultPage = mapLegendService.page(page, wrapper); } else { diff --git a/backend/src/main/java/com/yfd/platform/qgc_sys/mapLayer/mapper/MsMaplegendBMapper.java b/backend/src/main/java/com/yfd/platform/qgc_sys/mapLayer/mapper/MsMaplegendBMapper.java index d6df58bc..49dd7cf4 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_sys/mapLayer/mapper/MsMaplegendBMapper.java +++ b/backend/src/main/java/com/yfd/platform/qgc_sys/mapLayer/mapper/MsMaplegendBMapper.java @@ -3,6 +3,8 @@ package com.yfd.platform.qgc_sys.mapLayer.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.yfd.platform.qgc_sys.mapLayer.domain.MsMaplegendB; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Update; /** * 地图图例表 Mapper 接口 @@ -11,4 +13,10 @@ import org.apache.ibatis.annotations.Mapper; */ @Mapper public interface MsMaplegendBMapper extends BaseMapper { + + /** + * 修改图例名称,解决Oracle/m³变成m3的问题 + */ + @Update("UPDATE MS_MAPLEGEND_B SET NAME = #{name} WHERE ID = #{id}") + void updateModelName(@Param("id") String id, @Param("name") String name); } \ No newline at end of file diff --git a/backend/src/main/java/com/yfd/platform/qgc_sys/mapLayer/service/impl/MapLegendServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_sys/mapLayer/service/impl/MapLegendServiceImpl.java index 29b8e0f9..aecb081b 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_sys/mapLayer/service/impl/MapLegendServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_sys/mapLayer/service/impl/MapLegendServiceImpl.java @@ -13,9 +13,11 @@ import com.yfd.platform.qgc_sys.mapLayer.mapper.MsMapmoduleBMapper; import com.yfd.platform.qgc_sys.mapLayer.service.IMapLegendService; import com.yfd.platform.utils.SecurityUtils; import jakarta.annotation.Resource; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import java.util.Comparator; +import java.util.Date; import java.util.List; import java.util.stream.Collectors; @@ -31,6 +33,12 @@ public class MapLegendServiceImpl extends ServiceImpl ids) { if (CollectionUtil.isEmpty(ids)) { @@ -101,13 +109,20 @@ public class MapLegendServiceImpl extends ServiceImpl updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(MsMapmoduleB::getModuleId, mapmoduleB.getModuleId()); + updateWrapper.eq(MsMapmoduleB::getSystemId, mapmoduleB.getSystemId()); + updateWrapper.eq(MsMapmoduleB::getResType, "layer"); + updateWrapper.eq(MsMapmoduleB::getResId, layer.getId()); + updateWrapper.eq(MsMapmoduleB::getIsDeleted, 0).set(MsMapmoduleB::getChecked, mapmoduleB.getChecked()); + mapmoduleBService.update(updateWrapper); + } } }