diff --git a/backend/src/main/java/com/yfd/platform/qgc_eng/eq/controller/EngEqDataController.java b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/controller/EngEqDataController.java index 90a161ad..644a77a7 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_eng/eq/controller/EngEqDataController.java +++ b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/controller/EngEqDataController.java @@ -2,8 +2,10 @@ package com.yfd.platform.qgc_eng.eq.controller; import com.yfd.platform.common.DataSourceLoadOptionsBase; import com.yfd.platform.common.DataSourceRequest; +import com.yfd.platform.common.DataSourceResult; import com.yfd.platform.config.ResponseResult; import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqIntervalVo; +import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqMsstbprptVo; import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqRuleVo; import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqVmsstbprptVo; import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqRateCountVo; @@ -40,6 +42,13 @@ public class EngEqDataController { return ResponseResult.successData(engEqDataService.getIntervalKendoListCust(dataSourceRequest)); } + @PostMapping("/msstbprpt/GetKendoList") + @Operation(summary = "电站基础信息查询") + public ResponseResult getMsstbprptList(@RequestBody DataSourceRequest dataSourceRequest) { + DataSourceResult result = engEqDataService.getMsstbprptList(dataSourceRequest); + return ResponseResult.successData(result); + } + @PostMapping("/interval/qgc/hour/GetKendoListCust") @Operation(summary = "生态流量达标率小时统计(二级页面)") public ResponseResult getQgcHourKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) { diff --git a/backend/src/main/java/com/yfd/platform/qgc_eng/eq/entity/vo/EngEqMsstbprptVo.java b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/entity/vo/EngEqMsstbprptVo.java new file mode 100644 index 00000000..8bfe763f --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/entity/vo/EngEqMsstbprptVo.java @@ -0,0 +1,72 @@ +package com.yfd.platform.qgc_eng.eq.entity.vo; + +import com.yfd.platform.qgc_base.domain.SdEngInfoBH; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode(callSuper = true) +@Schema(description = "电站基础信息查询") +public class EngEqMsstbprptVo extends SdEngInfoBH { + + @Schema(description = "主键ID") + private String id; + + @Schema(description = "站名") + private String stnm; + + @Schema(description = "电站高程") + private Double dtmel; + + @Schema(description = "站类主键") + private String sttp; + + @Schema(description = "站类编码") + private String sttpCode; + + @Schema(description = "站类名称") + private String sttpName; + + @Schema(description = "站类全路径") + private String sttpFullPath; + + @Schema(description = "站类层级") + private Integer sttpTreeLevel; + + @Schema(description = "建设状态分类编码") + private String bldsttCcode; + + @Schema(description = "建设状态分类名称") + private String bldsttCcodeName; + + @Schema(description = "基地名称") + private String baseName; + + @Schema(description = "基地流域名称") + private String hbrvcdName; + + @Schema(description = "流域名称") + private String rvcdName; + + @Schema(description = "行政区名称") + private String addvcdName; + + @Schema(description = "国家名称") + private String countryName; + + @Schema(description = "公司名称") + private String hynm; + + @Schema(description = "集团名称") + private String topHynm; + + @Schema(description = "数据接入中文") + private String dtinName; + + @Schema(description = "建设状态名称") + private String bldsttName; + + @Schema(description = "图片附件") + private String url; +} diff --git a/backend/src/main/java/com/yfd/platform/qgc_eng/eq/service/EngEqDataService.java b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/service/EngEqDataService.java index d2c7e261..03d06e3a 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_eng/eq/service/EngEqDataService.java +++ b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/service/EngEqDataService.java @@ -5,6 +5,7 @@ import com.yfd.platform.common.DataSourceResult; import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqDayIntervalVo; import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqHourIntervalVo; import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqIntervalVo; +import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqMsstbprptVo; import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqRuleVo; import com.yfd.platform.qgc_eng.eq.entity.vo.EngQecAlongVo; import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqRateCountVo; @@ -19,6 +20,8 @@ public interface EngEqDataService { DataSourceResult getIntervalKendoListCust(DataSourceRequest dataSourceRequest); + DataSourceResult getMsstbprptList(DataSourceRequest dataSourceRequest); + DataSourceResult getQgcHourKendoListCust(DataSourceRequest dataSourceRequest); DataSourceResult getQgcDayKendoListCust(DataSourceRequest dataSourceRequest); diff --git a/backend/src/main/java/com/yfd/platform/qgc_eng/eq/service/impl/EngEqDataServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/service/impl/EngEqDataServiceImpl.java index c647d75e..2a71ed11 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_eng/eq/service/impl/EngEqDataServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/service/impl/EngEqDataServiceImpl.java @@ -16,6 +16,7 @@ import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqDayIntervalVo; import com.yfd.platform.qgc_eng.eq.entity.vo.EngFidVo; import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqHourIntervalVo; import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqIntervalVo; +import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqMsstbprptVo; import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqRuleVo; import com.yfd.platform.qgc_eng.eq.entity.vo.EngQecAlongVo; import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqRateCountVo; @@ -68,6 +69,232 @@ public class EngEqDataServiceImpl implements EngEqDataService { return queryIntervalGroupList(dataSourceRequest, loadOptions); } + @Override + public DataSourceResult getMsstbprptList(DataSourceRequest dataSourceRequest) { + DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest(); + if (CollUtil.isEmpty(dataSourceRequest == null ? null : dataSourceRequest.getGroup())) { + return queryMsstbprptDetailList(dataSourceRequest, loadOptions); + } + return queryMsstbprptGroupList(dataSourceRequest, loadOptions); + } + + private DataSourceResult queryMsstbprptDetailList(DataSourceRequest dataSourceRequest, + DataSourceLoadOptionsBase loadOptions) { + StringBuilder sql = new StringBuilder(); + sql.append("SELECT ") + .append(buildMsstbprptDetailSelectSql(dataSourceRequest == null ? null : dataSourceRequest.getSelect())) + .append(" FROM (") + .append(buildMsstbprptViewSql()) + .append(") t WHERE 1 = 1 "); + + Map paramMap = new HashMap<>(); + String filterSql = buildMsstbprptFilterCondition(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), paramMap, new int[]{0}); + if (StrUtil.isNotBlank(filterSql)) { + sql.append(" AND ").append(filterSql).append(" "); + } + sql.append(buildMsstbprptDetailOrderBySql(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, EngEqMsstbprptVo.class); + DataSourceResult result = new DataSourceResult<>(); + result.setData(list); + result.setTotal(page != null ? page.getTotal() : list.size()); + result.setAggregates(new HashMap<>()); + return result; + } + + private DataSourceResult queryMsstbprptGroupList(DataSourceRequest dataSourceRequest, + DataSourceLoadOptionsBase loadOptions) { + List groups = dataSourceRequest.getGroup(); + GroupingInfo[] groupInfos = loadOptions == null ? new GroupingInfo[0] : loadOptions.getGroup(); + List selectItems = new ArrayList<>(); + for (DataSourceRequest.GroupDescriptor descriptor : groups) { + if (descriptor == null || StrUtil.isBlank(descriptor.getField())) { + continue; + } + String column = mapMsstbprptColumn(descriptor.getField()); + if (StrUtil.isBlank(column)) { + continue; + } + selectItems.add(column + " AS " + descriptor.getField().toUpperCase()); + selectItems.add("COUNT(*) AS COUNT_" + descriptor.getField().toUpperCase()); + if (CollUtil.isNotEmpty(descriptor.getAggregates())) { + for (DataSourceRequest.AggregateDescriptor aggregate : descriptor.getAggregates()) { + String aggregateColumn = mapMsstbprptColumn(aggregate.getField()); + if (StrUtil.isBlank(aggregateColumn) || StrUtil.isBlank(aggregate.getAggregate())) { + continue; + } + selectItems.add(buildAggregateSql(aggregate.getAggregate(), aggregateColumn, aggregate.getField())); + } + } + } + if (selectItems.isEmpty()) { + selectItems.add("t.STCD AS STCD"); + selectItems.add("COUNT(*) AS COUNT_STCD"); + } + + StringBuilder sql = new StringBuilder(); + sql.append("SELECT ") + .append(String.join(", ", selectItems)) + .append(" FROM (") + .append(buildMsstbprptViewSql()) + .append(") t WHERE 1 = 1 "); + + Map paramMap = new HashMap<>(); + String filterSql = buildMsstbprptFilterCondition(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), paramMap, new int[]{0}); + if (StrUtil.isNotBlank(filterSql)) { + sql.append(" AND ").append(filterSql).append(" "); + } + + List groupByColumns = new ArrayList<>(); + for (DataSourceRequest.GroupDescriptor descriptor : groups) { + if (descriptor == null || StrUtil.isBlank(descriptor.getField())) { + continue; + } + String column = mapMsstbprptColumn(descriptor.getField()); + if (StrUtil.isNotBlank(column)) { + groupByColumns.add(column); + } + } + if (!groupByColumns.isEmpty()) { + sql.append(" GROUP BY ").append(String.join(", ", groupByColumns)).append(" "); + } + sql.append(buildMsstbprptGroupOrderBySql(groups)); + + List> rows = microservicDynamicSQLMapper.pageAllList(null, sql.toString(), paramMap); + DataSourceResult result = new DataSourceResult<>(); + if (Boolean.TRUE.equals(dataSourceRequest.getGroupResultFlat())) { + result.setData((List) (List) new GroupHelper().faltGroup(rows, Arrays.asList(groupInfos))); + } else { + result.setData((List) (List) new GroupHelper().group(rows, Arrays.asList(groupInfos))); + } + result.setTotal((long) rows.size()); + result.setAggregates(new HashMap<>()); + return result; + } + + private String buildMsstbprptViewSql() { + return "SELECT " + + "eng.STCD AS id, " + + "eng.STCD AS stcd, " + + "eng.ENNM AS stnm, " + + "eng.ENNM AS ennm, " + + "'ENG' AS sttpCode, " + + "'电站' AS sttpName, " + + "eng.LGTD AS lgtd, " + + "eng.LTTD AS lttd, " + + "eng.ELEV AS elev, " + + "eng.ELEV AS dtmel, " + + "eng.STLC AS stlc, " + + "eng.BASE_ID AS baseId, " + + "hb.BASENAME AS baseName, " + + "eng.HBRVCD AS hbrvcd, " + + "hbrv.HBRVNM AS hbrvcdName, " + + "eng.RVCD AS rvcd, " + + "rv.RVNM AS rvcdName, " + + "eng.ADDVCD AS addvcd, " + + "addv.ADDVNM AS addvcdName, " + + "eng.COUNTRY AS country, " + + "country.COUNTRY_NAME AS countryName, " + + "eng.HYCD AS hycd, " + + "CAST(NULL AS VARCHAR2(200)) AS hynm, " + + "eng.TOP_HYCD AS topHycd, " + + "CAST(NULL AS VARCHAR2(200)) AS topHynm, " + + "eng.USFL AS usfl, " + + "eng.DTIN AS dtin, " + + "CASE NVL(eng.DTIN, 0) WHEN 1 THEN '是' WHEN 0 THEN '否' ELSE NULL END AS dtinName, " + + "eng.DTIN_TM AS dtinTm, " + + "eng.INTRODUCE AS introduce, " + + "eng.LOGO AS logo, " + + "eng.INFFILE AS inffile, " + + "eng.INFFILE AS url, " + + "eng.BLDSTT AS bldstt, " + + "CASE eng.BLDSTT_CODE WHEN 0 THEN '0' WHEN 1 THEN '1' WHEN 2 THEN '2' ELSE NULL END AS bldsttCcode, " + + "eng.BLDSTT_CODE AS bldsttCode, " + + "CASE eng.BLDSTT_CODE WHEN 0 THEN '未建/规划' WHEN 1 THEN '在建' WHEN 2 THEN '已建' ELSE NULL END AS bldsttCcodeName, " + + "eng.ORDER_INDEX AS orderIndex, " + + "eng.PRSC AS prsc, " + + "eng.ENGTP AS engtp, " + + "eng.SCRSC AS scrsc, " + + "eng.PRGR AS prgr, " + + "eng.TM AS tm " + + "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 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 SD_ADDVCD_DIC addv ON addv.ADDVCD = eng.ADDVCD " + + "LEFT JOIN SD_COUNTRY_B country ON country.COUNTRY_ID = eng.COUNTRY AND NVL(country.ENABLED, 1) = 1 " + + "WHERE NVL(eng.IS_DELETED, 0) = 0"; + } + + private String buildMsstbprptDetailSelectSql(List selectFields) { + Map columns = msstbprptFieldColumns(); + List selected = new ArrayList<>(); + if (CollUtil.isEmpty(selectFields)) { + selected.addAll(columns.values()); + } else { + for (String field : selectFields) { + String column = columns.get(field); + if (StrUtil.isNotBlank(column)) { + selected.add(column); + } + } + if (selected.isEmpty()) { + selected.addAll(columns.values()); + } + } + return String.join(", ", selected); + } + + private Map msstbprptFieldColumns() { + Map columns = new LinkedHashMap<>(); + columns.put("id", "t.id AS id"); + columns.put("stcd", "t.stcd AS stcd"); + columns.put("stnm", "t.stnm AS stnm"); + columns.put("ennm", "t.ennm AS ennm"); + columns.put("sttpCode", "t.sttpCode AS sttpCode"); + columns.put("sttpName", "t.sttpName AS sttpName"); + columns.put("lgtd", "t.lgtd AS lgtd"); + columns.put("lttd", "t.lttd AS lttd"); + columns.put("elev", "t.elev AS elev"); + columns.put("dtmel", "t.dtmel AS dtmel"); + columns.put("stlc", "t.stlc AS stlc"); + columns.put("baseId", "t.baseId AS baseId"); + columns.put("baseName", "t.baseName AS baseName"); + columns.put("hbrvcd", "t.hbrvcd AS hbrvcd"); + columns.put("hbrvcdName", "t.hbrvcdName AS hbrvcdName"); + columns.put("rvcd", "t.rvcd AS rvcd"); + columns.put("rvcdName", "t.rvcdName AS rvcdName"); + columns.put("addvcd", "t.addvcd AS addvcd"); + columns.put("addvcdName", "t.addvcdName AS addvcdName"); + columns.put("country", "t.country AS country"); + columns.put("countryName", "t.countryName AS countryName"); + columns.put("hycd", "t.hycd AS hycd"); + columns.put("hynm", "t.hynm AS hynm"); + columns.put("topHycd", "t.topHycd AS topHycd"); + columns.put("topHynm", "t.topHynm AS topHynm"); + columns.put("usfl", "t.usfl AS usfl"); + columns.put("dtin", "t.dtin AS dtin"); + columns.put("dtinName", "t.dtinName AS dtinName"); + columns.put("dtinTm", "t.dtinTm AS dtinTm"); + columns.put("introduce", "t.introduce AS introduce"); + columns.put("logo", "t.logo AS logo"); + columns.put("inffile", "t.inffile AS inffile"); + columns.put("url", "t.url AS url"); + columns.put("bldstt", "t.bldstt AS bldstt"); + columns.put("bldsttCcode", "t.bldsttCcode AS bldsttCcode"); + columns.put("bldsttCode", "t.bldsttCode AS bldsttCode"); + columns.put("bldsttCcodeName", "t.bldsttCcodeName AS bldsttCcodeName"); + columns.put("orderIndex", "t.orderIndex AS orderIndex"); + columns.put("prsc", "t.prsc AS prsc"); + columns.put("engtp", "t.engtp AS engtp"); + columns.put("scrsc", "t.scrsc AS scrsc"); + columns.put("prgr", "t.prgr AS prgr"); + columns.put("tm", "t.tm AS tm"); + return columns; + } + @Override public DataSourceResult getQgcHourKendoListCust(DataSourceRequest dataSourceRequest) { DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest(); @@ -1931,6 +2158,74 @@ public class EngEqDataServiceImpl implements EngEqDataService { return columns; } + private String buildMsstbprptFilterCondition(DataSourceRequest.FilterDescriptor filter, + Map paramMap, + int[] indexHolder) { + if (filter == null) { + return ""; + } + if (StrUtil.isNotBlank(filter.getField())) { + String column = mapMsstbprptColumn(filter.getField()); + if (StrUtil.isBlank(column)) { + return ""; + } + return buildGenericCondition(column, filter, paramMap, indexHolder, isEqDateField(filter.getField())); + } + if (CollUtil.isEmpty(filter.getFilters())) { + return ""; + } + List conditions = new ArrayList<>(); + for (DataSourceRequest.FilterDescriptor child : filter.getFilters()) { + String childSql = buildMsstbprptFilterCondition(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 buildMsstbprptDetailOrderBySql(List sortList) { + List orders = new ArrayList<>(); + if (CollUtil.isNotEmpty(sortList)) { + for (DataSourceRequest.SortDescriptor sort : sortList) { + if (sort == null || StrUtil.isBlank(sort.getField())) { + continue; + } + String column = mapMsstbprptColumn(sort.getField()); + if (StrUtil.isBlank(column)) { + continue; + } + orders.add(column + ("desc".equalsIgnoreCase(sort.getDir()) ? " DESC" : " ASC")); + } + } + if (orders.isEmpty()) { + orders.add("NVL(t.orderIndex, 999999) ASC"); + orders.add("t.stnm ASC"); + } + return " ORDER BY " + String.join(", ", orders); + } + + private String buildMsstbprptGroupOrderBySql(List groups) { + List orders = new ArrayList<>(); + if (CollUtil.isNotEmpty(groups)) { + for (DataSourceRequest.GroupDescriptor descriptor : groups) { + if (descriptor == null || StrUtil.isBlank(descriptor.getField())) { + continue; + } + String column = mapMsstbprptColumn(descriptor.getField()); + if (StrUtil.isBlank(column)) { + continue; + } + orders.add(column + ("desc".equalsIgnoreCase(descriptor.getDir()) ? " DESC" : " ASC")); + } + } + return orders.isEmpty() ? "" : " ORDER BY " + String.join(", ", orders); + } + private String buildVmsstbprptFilterCondition(DataSourceRequest.FilterDescriptor filter, Map paramMap, int[] indexHolder) { @@ -3410,6 +3705,58 @@ public class EngEqDataServiceImpl implements EngEqDataService { }; } + private String mapMsstbprptColumn(String field) { + if (StrUtil.isBlank(field)) { + return null; + } + return switch (field) { + case "id" -> "t.id"; + case "stcd" -> "t.stcd"; + case "stnm" -> "t.stnm"; + case "ennm" -> "t.ennm"; + case "sttpCode" -> "t.sttpCode"; + case "sttpName" -> "t.sttpName"; + case "lgtd" -> "t.lgtd"; + case "lttd" -> "t.lttd"; + case "elev" -> "t.elev"; + case "dtmel" -> "t.dtmel"; + case "stlc" -> "t.stlc"; + case "baseId" -> "t.baseId"; + case "baseName" -> "t.baseName"; + case "hbrvcd" -> "t.hbrvcd"; + case "hbrvcdName" -> "t.hbrvcdName"; + case "rvcd" -> "t.rvcd"; + case "rvcdName" -> "t.rvcdName"; + case "addvcd" -> "t.addvcd"; + case "addvcdName" -> "t.addvcdName"; + case "country" -> "t.country"; + case "countryName" -> "t.countryName"; + case "hycd" -> "t.hycd"; + case "hynm" -> "t.hynm"; + case "topHycd" -> "t.topHycd"; + case "topHynm" -> "t.topHynm"; + case "usfl" -> "t.usfl"; + case "dtin" -> "t.dtin"; + case "dtinName" -> "t.dtinName"; + case "dtinTm" -> "t.dtinTm"; + case "introduce" -> "t.introduce"; + case "logo" -> "t.logo"; + case "inffile" -> "t.inffile"; + case "url" -> "t.url"; + case "bldstt" -> "t.bldstt"; + case "bldsttCcode" -> "t.bldsttCcode"; + case "bldsttCode" -> "t.bldsttCode"; + case "bldsttCcodeName" -> "t.bldsttCcodeName"; + case "orderIndex" -> "NVL(t.orderIndex, 999999)"; + case "prsc" -> "t.prsc"; + case "engtp" -> "t.engtp"; + case "scrsc" -> "t.scrsc"; + case "prgr" -> "t.prgr"; + case "tm" -> "t.tm"; + default -> null; + }; + } + private String mapWbsbColumn(String field) { if (StrUtil.isBlank(field)) { return null; diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/fh/service/impl/FhHabitatServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_env/fh/service/impl/FhHabitatServiceImpl.java index d258e690..8b5c1608 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/fh/service/impl/FhHabitatServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/fh/service/impl/FhHabitatServiceImpl.java @@ -496,7 +496,7 @@ public class FhHabitatServiceImpl implements FhHabitatService { " t.QXDBHFS AS qxdbhfs, " + " t.STSTDT AS ststdt, " + " t.ESSTDT AS esstdt, " + - " t.MWAY AS mway, " + + "CASE NVL(t.MWAY, 0) WHEN 1 THEN '人工' WHEN 2 THEN '自动' ELSE '未知' END AS mway , "+ " t.DTIN AS dtin, " + " t.VLSR AS vlsr, " + " t.DTIN_TYPE AS dtinType, " +