Compare commits
No commits in common. "main" and "wxk-main" have entirely different histories.
@ -92,10 +92,7 @@ public class GroupHelper {
|
|||||||
|
|
||||||
for(Map<String, Object> item : data) {
|
for(Map<String, Object> item : data) {
|
||||||
Object groupKey = this.getKey(item, groupInfo);
|
Object groupKey = this.getKey(item, groupInfo);
|
||||||
if (groupKey == null) {
|
Object groupIndexKey = groupKey != null ? groupKey : null;
|
||||||
continue;
|
|
||||||
}
|
|
||||||
Object groupIndexKey = groupKey;
|
|
||||||
Object tempCount = item.get("count_" + groupInfo.getSelector());
|
Object tempCount = item.get("count_" + groupInfo.getSelector());
|
||||||
if (tempCount == null) {
|
if (tempCount == null) {
|
||||||
tempCount = item.get("COUNT_" + groupInfo.getSelector().toUpperCase());
|
tempCount = item.get("COUNT_" + groupInfo.getSelector().toUpperCase());
|
||||||
|
|||||||
@ -31,8 +31,7 @@ public class MyMetaObjectHandler implements MetaObjectHandler {
|
|||||||
this.strictInsertFill(metaObject, "updatedAt", Date.class, now);
|
this.strictInsertFill(metaObject, "updatedAt", Date.class, now);
|
||||||
// 更新时间
|
// 更新时间
|
||||||
this.strictInsertFill(metaObject, "modifyTime", Date.class, now);
|
this.strictInsertFill(metaObject, "modifyTime", Date.class, now);
|
||||||
// 更新时间
|
|
||||||
this.strictInsertFill(metaObject, "recordTime", Date.class, now);
|
|
||||||
try {
|
try {
|
||||||
String userId = SecurityUtils.getUserId();
|
String userId = SecurityUtils.getUserId();
|
||||||
// 创建人
|
// 创建人
|
||||||
|
|||||||
@ -28,9 +28,7 @@ public class MybitsPlusConfig {
|
|||||||
public MybatisPlusInterceptor mybatisPlusInterceptor() {
|
public MybatisPlusInterceptor mybatisPlusInterceptor() {
|
||||||
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
|
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
|
||||||
// 添加分页拦截器,指定数据库类型为 Oracle
|
// 添加分页拦截器,指定数据库类型为 Oracle
|
||||||
// interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.ORACLE));
|
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.ORACLE));
|
||||||
// 添加分页拦截器,指定数据库类型为 Oracle
|
|
||||||
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.DM));
|
|
||||||
return interceptor;
|
return interceptor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -65,7 +65,6 @@ public class SecurityConfig {
|
|||||||
.requestMatchers("/eq/**").permitAll()
|
.requestMatchers("/eq/**").permitAll()
|
||||||
.requestMatchers("/env/**").permitAll()
|
.requestMatchers("/env/**").permitAll()
|
||||||
.requestMatchers("/warn/**").permitAll()
|
.requestMatchers("/warn/**").permitAll()
|
||||||
.requestMatchers("/threedroamb/**").permitAll()
|
|
||||||
.requestMatchers("/overview/**").permitAll()
|
.requestMatchers("/overview/**").permitAll()
|
||||||
.requestMatchers("/wt/**").permitAll()
|
.requestMatchers("/wt/**").permitAll()
|
||||||
.requestMatchers("/fb/**").permitAll()
|
.requestMatchers("/fb/**").permitAll()
|
||||||
|
|||||||
@ -249,15 +249,6 @@ public class SwaggerConfig {
|
|||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
|
||||||
public GroupedOpenApi groupThreedRoamApi() {
|
|
||||||
return GroupedOpenApi.builder()
|
|
||||||
.group("5.3 三维漫游")
|
|
||||||
.packagesToScan("com.yfd.platform.qgc_sys.threedRoam.controller")
|
|
||||||
.build();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
public GroupedOpenApi groupLygkApi() {
|
public GroupedOpenApi groupLygkApi() {
|
||||||
return GroupedOpenApi.builder()
|
return GroupedOpenApi.builder()
|
||||||
|
|||||||
@ -13,8 +13,6 @@ public class EngRsvrcscdBVo {
|
|||||||
|
|
||||||
private String rvcdName;
|
private String rvcdName;
|
||||||
|
|
||||||
private String bldsttCcode;
|
|
||||||
|
|
||||||
private String stcd;
|
private String stcd;
|
||||||
|
|
||||||
private String ennm;
|
private String ennm;
|
||||||
|
|||||||
@ -170,7 +170,7 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl<SdEngInfoBHMapper, SdEng
|
|||||||
wrapper.eq(StringUtils.hasText(baseId), SdEngInfoBH::getBaseId, baseId)
|
wrapper.eq(StringUtils.hasText(baseId), SdEngInfoBH::getBaseId, baseId)
|
||||||
.eq(StringUtils.hasText(hbrvcd), SdEngInfoBH::getHbrvcd, hbrvcd)
|
.eq(StringUtils.hasText(hbrvcd), SdEngInfoBH::getHbrvcd, hbrvcd)
|
||||||
.eq(StrUtil.isNotBlank(reachcd), SdEngInfoBH::getReachcd, reachcd)
|
.eq(StrUtil.isNotBlank(reachcd), SdEngInfoBH::getReachcd, reachcd)
|
||||||
.eq(StrUtil.isNotBlank(rvcd), SdEngInfoBH::getReachcd, rvcd)
|
.eq(StrUtil.isNotBlank(rvcd), SdEngInfoBH::getRvcd, rvcd)
|
||||||
.in(rvcds != null && !rvcds.isEmpty(), SdEngInfoBH::getReachcd, rvcds)
|
.in(rvcds != null && !rvcds.isEmpty(), SdEngInfoBH::getReachcd, rvcds)
|
||||||
.in(hbrvcds != null && !hbrvcds.isEmpty(), SdEngInfoBH::getHbrvcd, hbrvcds)
|
.in(hbrvcds != null && !hbrvcds.isEmpty(), SdEngInfoBH::getHbrvcd, hbrvcds)
|
||||||
.like(StringUtils.hasText(ennm), SdEngInfoBH::getEnnm, ennm)
|
.like(StringUtils.hasText(ennm), SdEngInfoBH::getEnnm, ennm)
|
||||||
@ -1237,9 +1237,9 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl<SdEngInfoBHMapper, SdEng
|
|||||||
"eng.AVQ10 AS avq10, " +
|
"eng.AVQ10 AS avq10, " +
|
||||||
"eng.AVQ11 AS avq11, " +
|
"eng.AVQ11 AS avq11, " +
|
||||||
"eng.AVQ12 AS avq12, " +
|
"eng.AVQ12 AS avq12, " +
|
||||||
"rbh.OBMXQ AS obmxq, " +
|
"CAST(NULL AS NUMBER) AS obmxq, " +
|
||||||
"rbh.OBMNQ AS obmnq, " +
|
"CAST(NULL AS NUMBER) AS obmnq, " +
|
||||||
"rbh.HMXQ AS hmxq, " +
|
"CAST(NULL AS NUMBER) AS hmxq, " +
|
||||||
"eng.DSNFQFRQ AS dsnfqfrq, " +
|
"eng.DSNFQFRQ AS dsnfqfrq, " +
|
||||||
"eng.DSRCIN AS dsrcin, " +
|
"eng.DSRCIN AS dsrcin, " +
|
||||||
"eng.CKFQFQR AS ckfqfqr, " +
|
"eng.CKFQFQR AS ckfqfqr, " +
|
||||||
@ -1249,21 +1249,21 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl<SdEngInfoBHMapper, SdEng
|
|||||||
"eng.CKW3 AS ckw3, " +
|
"eng.CKW3 AS ckw3, " +
|
||||||
"eng.AVSD AS avsd, " +
|
"eng.AVSD AS avsd, " +
|
||||||
"eng.AVS AS avs, " +
|
"eng.AVS AS avs, " +
|
||||||
"rbh.OBMXS AS obmxs, " +
|
"CAST(NULL AS NUMBER) AS obmxs, " +
|
||||||
"rbh.CKFLZ AS ckflz, " +
|
"CAST(NULL AS NUMBER) AS ckflz, " +
|
||||||
"rbh.DSFLZ AS dsflz, " +
|
"CAST(NULL AS NUMBER) AS dsflz, " +
|
||||||
"rbh.NORMZ AS normz, " +
|
"CAST(NULL AS NUMBER) AS normz, " +
|
||||||
"rbh.UZFC AS uzfc, " +
|
"CAST(NULL AS NUMBER) AS uzfc, " +
|
||||||
"eng.FSLTDZ AS fsltdz, " +
|
"eng.FSLTDZ AS fsltdz, " +
|
||||||
"eng.YDOWNZ AS ydownz, " +
|
"eng.YDOWNZ AS ydownz, " +
|
||||||
"rbh.DDZ AS ddz, " +
|
"CAST(NULL AS NUMBER) AS ddz, " +
|
||||||
"eng.NRZAR AS nrzar, " +
|
"eng.NRZAR AS nrzar, " +
|
||||||
"eng.BCKLEN AS bcklen, " +
|
"eng.BCKLEN AS bcklen, " +
|
||||||
"rbh.TTCP AS ttcp, " +
|
"rbh.TTCP AS ttcp, " +
|
||||||
"rbh.NMZCP AS nmzcp, " +
|
"CAST(NULL AS NUMBER) AS nmzcp, " +
|
||||||
"b.VAL AS fldcpStr, " +
|
"CAST(NULL AS VARCHAR2(255)) AS fldcpStr, " +
|
||||||
"rbh.ACTCP AS actcp, " +
|
"CAST(NULL AS NUMBER) AS actcp, " +
|
||||||
"rbh.DDCP AS ddcp, " +
|
"CAST(NULL AS NUMBER) AS ddcp, " +
|
||||||
"eng.CPSC AS cpsc, " +
|
"eng.CPSC AS cpsc, " +
|
||||||
"eng.PRSC AS prsc, " +
|
"eng.PRSC AS prsc, " +
|
||||||
"eng.RGCP AS rgcp, " +
|
"eng.RGCP AS rgcp, " +
|
||||||
@ -1279,26 +1279,26 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl<SdEngInfoBHMapper, SdEng
|
|||||||
" WHEN '9' THEN '其他' " +
|
" WHEN '9' THEN '其他' " +
|
||||||
" ELSE NULL END AS rgcpName, " +
|
" ELSE NULL END AS rgcpName, " +
|
||||||
"eng.DSMXQ AS dsflzmxq, " +
|
"eng.DSMXQ AS dsflzmxq, " +
|
||||||
"rbh.DSFLZXYZ AS dsflzxyz, " +
|
"CAST(NULL AS NUMBER) AS dsflzxyz, " +
|
||||||
"eng.CHMXQ AS ckflzmxq, " +
|
"eng.CHMXQ AS ckflzmxq, " +
|
||||||
"rbh.CKFLZXYZ AS ckflzxyz, " +
|
"CAST(NULL AS NUMBER) AS ckflzxyz, " +
|
||||||
"rbh.KSQADJQ AS ksqadjq, " +
|
"CAST(NULL AS NUMBER) AS ksqadjq, " +
|
||||||
"rbh.KSQXYZ AS ksqxyz, " +
|
"CAST(NULL AS NUMBER) AS ksqxyz, " +
|
||||||
"eng.GEMAXRQ AS gemaxrq, " +
|
"eng.GEMAXRQ AS gemaxrq, " +
|
||||||
"rbh.MXGEQXYZ AS mxgeqxyz, " +
|
"CAST(NULL AS NUMBER) AS mxgeqxyz, " +
|
||||||
"eng.YRGEB AS ttpwr, " +
|
"eng.YRGEB AS ttpwr, " +
|
||||||
"pwr.GNCNT AS gncnt, " +
|
"CAST(NULL AS NUMBER) AS gncnt, " +
|
||||||
"eng.GNTP AS gntp, " +
|
"eng.GNTP AS gntp, " +
|
||||||
"pwr.GRNTPWR AS grntpwr, " +
|
"CAST(NULL AS NUMBER) AS grntpwr, " +
|
||||||
"pwr.YRGE AS yrge, " +
|
"pwr.YRGE AS yrge, " +
|
||||||
"pwr.USHR AS ushr, " +
|
"CAST(NULL AS NUMBER) AS ushr, " +
|
||||||
"pwr.K AS k, " +
|
"CAST(NULL AS NUMBER) AS k, " +
|
||||||
"eng.DMTP AS dmtp, " +
|
"eng.DMTP AS dmtp, " +
|
||||||
"eng.DMCREL AS dmcrel, " +
|
"eng.DMCREL AS dmcrel, " +
|
||||||
"eng.MXDMHG AS mxdmhg, " +
|
"eng.MXDMHG AS mxdmhg, " +
|
||||||
"eng.DMLEN AS dmlen, " +
|
"eng.DMLEN AS dmlen, " +
|
||||||
"pwr.SGYGE AS sgyge, " +
|
"CAST(NULL AS NUMBER) AS sgyge, " +
|
||||||
"UNYGE AS unyge, " +
|
"CAST(NULL AS NUMBER) AS unyge, " +
|
||||||
"eng.GAP AS gap, " +
|
"eng.GAP AS gap, " +
|
||||||
"eng.DVTP AS dvtp, " +
|
"eng.DVTP AS dvtp, " +
|
||||||
"CASE eng.DVTP " +
|
"CASE eng.DVTP " +
|
||||||
@ -1327,33 +1327,6 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl<SdEngInfoBHMapper, SdEng
|
|||||||
"LEFT JOIN SD_HYCD_DIC topHy ON topHy.HYCD = eng.TOP_HYCD AND NVL(topHy.IS_DELETED, 0) = 0 AND NVL(topHy.ENABLED, 1) = 1 " +
|
"LEFT JOIN SD_HYCD_DIC topHy ON topHy.HYCD = eng.TOP_HYCD AND NVL(topHy.IS_DELETED, 0) = 0 AND NVL(topHy.ENABLED, 1) = 1 " +
|
||||||
"LEFT JOIN SD_PWR_B_H pwr ON pwr.STCD = eng.STCD AND NVL(pwr.IS_DELETED, 0) = 0 " +
|
"LEFT JOIN SD_PWR_B_H pwr ON pwr.STCD = eng.STCD AND NVL(pwr.IS_DELETED, 0) = 0 " +
|
||||||
"LEFT JOIN SD_RSVRFCCH_B_H rbh ON rbh.STCD = eng.STCD " +
|
"LEFT JOIN SD_RSVRFCCH_B_H rbh ON rbh.STCD = eng.STCD " +
|
||||||
"LEFT JOIN ( SELECT STCD\n" +
|
|
||||||
" , MAX(CASE WHEN RN = 1 THEN TM END) AS TM\n" +
|
|
||||||
" , MAX(CASE WHEN RN = 1 THEN VAL END) AS VAL\n" +
|
|
||||||
" , MAX(VLSR) AS VLSR\n" +
|
|
||||||
" , MAX(VLSR_TM) AS VLSR_TM\n" +
|
|
||||||
" , LISTAGG('起始时间' || TO_CHAR(TM, 'YYYY-MM-DD') || '(' || VAL || ')' ||\n" +
|
|
||||||
" CASE WHEN VLSR IS NOT NULL THEN '来源' || VLSR ELSE '' END ||\n" +
|
|
||||||
" CASE WHEN VLSR_TM IS NOT NULL THEN ',来源时间' || TO_CHAR(VLSR_TM, 'YYYY-MM-DD') ELSE '' END,\n" +
|
|
||||||
" CHR(10)) WITHIN GROUP (ORDER BY TM DESC) AS ALL_VAL\n" +
|
|
||||||
" FROM ( SELECT STCD\n" +
|
|
||||||
" , TM\n" +
|
|
||||||
" , MAX(VLSR) AS VLSR\n" +
|
|
||||||
" , MAX(VLSR_TM) AS VLSR_TM\n" +
|
|
||||||
" , LISTAGG(\n" +
|
|
||||||
" SUBSTR(BGMD, 0, 2) || '月' || SUBSTR(BGMD, 3, 2) || '日' || '~' || SUBSTR(EDMD, 0, 2) || '月' ||\n" +
|
|
||||||
" SUBSTR(EDMD, 3, 2) || '日' || '限值为' ||\n" +
|
|
||||||
" (CASE WHEN FLDCPMN IS NOT NULL THEN (DECODE(SUBSTR(FLDCPMN, 1, 1), '.', '0' || FLDCPMN, FLDCPMN) ||\n" +
|
|
||||||
" '~' || DECODE(SUBSTR(FLDCP, 1, 1), '.', '0' || FLDCP, FLDCP))\n" +
|
|
||||||
" ELSE TO_CHAR(FLDCP) END), ',') WITHIN GROUP (ORDER BY BGMD) AS VAL\n" +
|
|
||||||
" , ROW_NUMBER() OVER (PARTITION BY STCD ORDER BY TM DESC) RN\n" +
|
|
||||||
" FROM SD_RSVRFSR_B\n" +
|
|
||||||
" WHERE BGMD IS NOT NULL\n" +
|
|
||||||
" AND EDMD IS NOT NULL\n" +
|
|
||||||
" AND FLDCPMN IS NOT NULL\n" +
|
|
||||||
" AND FLDCPMN > 0\n" +
|
|
||||||
" GROUP BY STCD, TM ) temp\n" +
|
|
||||||
" GROUP BY STCD) b ON b.STCD = eng.STCD " +
|
|
||||||
"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 MS_ALONG_B along ON along.BASEID = eng.BASE_ID AND along.CODE = 'common' AND NVL(along.IS_DELETED, 0) = 0 " +
|
||||||
"LEFT JOIN ( " +
|
"LEFT JOIN ( " +
|
||||||
" SELECT det.SORT,cfg.BASEID, cfg.RVCD, det.STCD " +
|
" SELECT det.SORT,cfg.BASEID, cfg.RVCD, det.STCD " +
|
||||||
@ -3519,11 +3492,10 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl<SdEngInfoBHMapper, SdEng
|
|||||||
|
|
||||||
sql.append("SELECT ")
|
sql.append("SELECT ")
|
||||||
.append("r.ID AS id, ")
|
.append("r.ID AS id, ")
|
||||||
.append("eng.BASE_ID AS rvcd, ")
|
.append("r.RVCD AS rvcd, ")
|
||||||
.append("eng.BASE_NAME AS rvcdName, ")
|
.append("rv.RVNM AS rvcdName, ")
|
||||||
.append("r.STCD AS stcd, ")
|
.append("r.STCD AS stcd, ")
|
||||||
.append("eng.BLDSTT_CODE AS bldsttCcode, ")
|
.append("r.ENNM AS ennm, ")
|
||||||
.append("eng.ENNM AS ennm, ")
|
|
||||||
.append("r.SRCDIS AS srcdis, ")
|
.append("r.SRCDIS AS srcdis, ")
|
||||||
.append("r.DMHG AS dmhg, ")
|
.append("r.DMHG AS dmhg, ")
|
||||||
.append("r.NORMZ AS normz, ")
|
.append("r.NORMZ AS normz, ")
|
||||||
@ -3562,13 +3534,13 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl<SdEngInfoBHMapper, SdEng
|
|||||||
Map<String, Object> paramMap = new HashMap<>();
|
Map<String, Object> paramMap = new HashMap<>();
|
||||||
StringBuilder sql = new StringBuilder();
|
StringBuilder sql = new StringBuilder();
|
||||||
sql.append("SELECT DISTINCT ")
|
sql.append("SELECT DISTINCT ")
|
||||||
.append("dic.BASEID AS wbsCode, ")
|
.append("dic.HBRVCD AS wbsCode, ")
|
||||||
.append("dic.BASENAME AS wbsName, ")
|
.append("dic.HBRVNM AS wbsName, ")
|
||||||
.append("dic.BASEID AS objId, ")
|
.append("dic.BASEID AS objId, ")
|
||||||
.append("NVL(dic.BASEID, 'ZZZZZZZZ') AS baseOrder, ")
|
.append("NVL(dic.BASEID, 'ZZZZZZZZ') AS baseOrder, ")
|
||||||
.append("NVL(dic.ORDER_INDEX, 999999) AS orderIndex ")
|
.append("NVL(dic.ORDER_INDEX, 999999) AS orderIndex ")
|
||||||
.append("FROM SD_HYDROBASE dic ")
|
.append("FROM SD_HBRV_DIC dic ")
|
||||||
.append("INNER JOIN SD_RSVRCSCD_B r ON r.BASE_ID = dic.BASEID AND NVL(r.IS_DELETED, 0) = 0 ")
|
.append("INNER JOIN SD_RSVRCSCD_B r ON r.RVCD = dic.HBRVCD AND NVL(r.IS_DELETED, 0) = 0 ")
|
||||||
.append("WHERE NVL(dic.IS_DELETED, 0) = 0 ")
|
.append("WHERE NVL(dic.IS_DELETED, 0) = 0 ")
|
||||||
.append("AND NVL(dic.ENABLED, 1) = 1 ");
|
.append("AND NVL(dic.ENABLED, 1) = 1 ");
|
||||||
|
|
||||||
@ -3713,8 +3685,7 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl<SdEngInfoBHMapper, SdEng
|
|||||||
}
|
}
|
||||||
return switch (field) {
|
return switch (field) {
|
||||||
case "id" -> "r.ID";
|
case "id" -> "r.ID";
|
||||||
case "rvcd" -> "eng.BASE_ID";
|
case "rvcd" -> "r.RVCD";
|
||||||
case "baseId" -> "eng.BASE_ID";
|
|
||||||
case "rvcdName" -> "rv.RVNM";
|
case "rvcdName" -> "rv.RVNM";
|
||||||
case "stcd" -> "r.STCD";
|
case "stcd" -> "r.STCD";
|
||||||
case "ennm" -> "r.ENNM";
|
case "ennm" -> "r.ENNM";
|
||||||
|
|||||||
@ -89,17 +89,10 @@ public class FishDraftDataController {
|
|||||||
return t;
|
return t;
|
||||||
});
|
});
|
||||||
|
|
||||||
// @PostMapping("/page")
|
|
||||||
// @Operation(summary = "分页查询过鱼数据(关联电站和设施)")
|
|
||||||
// public ResponseResult queryPageList(@RequestBody DataSourceRequest dataSourceRequest) {
|
|
||||||
// Page<FishDraftDataVO> result = fishDraftDataService.queryPageList(dataSourceRequest);
|
|
||||||
// return ResponseResult.successData(result);
|
|
||||||
// }
|
|
||||||
|
|
||||||
@PostMapping("/page")
|
@PostMapping("/page")
|
||||||
@Operation(summary = "分页查询过鱼数据(关联电站和设施,APPROVED状态时根据当前用户电站权限过滤)")
|
@Operation(summary = "分页查询过鱼数据(关联电站和设施)")
|
||||||
public ResponseResult queryPageListWithScope(@RequestBody DataSourceRequest dataSourceRequest) {
|
public ResponseResult queryPageList(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||||
Page<FishDraftDataVO> result = fishDraftDataService.queryPageListWithScope(dataSourceRequest);
|
Page<FishDraftDataVO> result = fishDraftDataService.queryPageList(dataSourceRequest);
|
||||||
return ResponseResult.successData(result);
|
return ResponseResult.successData(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -8,7 +8,6 @@ import org.apache.ibatis.annotations.Param;
|
|||||||
import org.apache.ibatis.annotations.Select;
|
import org.apache.ibatis.annotations.Select;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
@ -34,24 +33,6 @@ public interface FishDraftDataMapper extends BaseMapper<FishDraftData> {
|
|||||||
@Param("hbrvcd") String hbrvcd,
|
@Param("hbrvcd") String hbrvcd,
|
||||||
@Param("approvalId") String approvalId);
|
@Param("approvalId") String approvalId);
|
||||||
|
|
||||||
/**
|
|
||||||
* 关联查询过鱼数据(分页,含电站权限过滤)
|
|
||||||
*/
|
|
||||||
Page<FishDraftDataVO> selectJoinPageWithStationScope(Page<FishDraftDataVO> page,
|
|
||||||
@Param("stcd") String stcd,
|
|
||||||
@Param("rstcd") String rstcd,
|
|
||||||
@Param("baseId") String baseId,
|
|
||||||
@Param("rvcd") String rvcd,
|
|
||||||
@Param("direction") String direction,
|
|
||||||
@Param("status") String status,
|
|
||||||
@Param("ftp") String ftp,
|
|
||||||
@Param("startTime") String startTime,
|
|
||||||
@Param("endTime") String endTime,
|
|
||||||
@Param("userId") String userId,
|
|
||||||
@Param("hbrvcd") String hbrvcd,
|
|
||||||
@Param("approvalId") String approvalId,
|
|
||||||
@Param("stationCodes") Set<String> stationCodes);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 关联查询过鱼数据(不分页)
|
* 关联查询过鱼数据(不分页)
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -20,12 +20,6 @@ public interface IFishDraftDataService extends IService<FishDraftData> {
|
|||||||
*/
|
*/
|
||||||
Page<FishDraftDataVO> queryPageList(DataSourceRequest dataSourceRequest);
|
Page<FishDraftDataVO> queryPageList(DataSourceRequest dataSourceRequest);
|
||||||
|
|
||||||
/**
|
|
||||||
* 分页查询草稿数据(关联电站和设施表,含电站权限过滤)
|
|
||||||
* 当 status = APPROVED 时,根据当前用户有权限的电站编码过滤数据
|
|
||||||
*/
|
|
||||||
Page<FishDraftDataVO> queryPageListWithScope(DataSourceRequest dataSourceRequest);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询草稿数据列表(关联电站和设施表,不分页)
|
* 查询草稿数据列表(关联电站和设施表,不分页)
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -8,7 +8,6 @@ import com.yfd.platform.common.DataSourceLoadOptionsBase;
|
|||||||
import com.yfd.platform.common.DataSourceRequest;
|
import com.yfd.platform.common.DataSourceRequest;
|
||||||
import com.yfd.platform.qgc_base.domain.SdRvcdDic;
|
import com.yfd.platform.qgc_base.domain.SdRvcdDic;
|
||||||
import com.yfd.platform.qgc_base.mapper.SdRvcdDicMapper;
|
import com.yfd.platform.qgc_base.mapper.SdRvcdDicMapper;
|
||||||
import com.yfd.platform.qgc_base.service.ICurrentUserDataScopeService;
|
|
||||||
import com.yfd.platform.qgc_data.domain.ApprovalMain;
|
import com.yfd.platform.qgc_data.domain.ApprovalMain;
|
||||||
import com.yfd.platform.qgc_data.domain.FishDraftData;
|
import com.yfd.platform.qgc_data.domain.FishDraftData;
|
||||||
import com.yfd.platform.qgc_data.domain.SysUserDataScope;
|
import com.yfd.platform.qgc_data.domain.SysUserDataScope;
|
||||||
@ -90,9 +89,6 @@ public class FishDraftDataServiceImpl extends ServiceImpl<FishDraftDataMapper, F
|
|||||||
@Resource
|
@Resource
|
||||||
private ISdFpssRService sdFpssRService;
|
private ISdFpssRService sdFpssRService;
|
||||||
|
|
||||||
@Resource
|
|
||||||
private ICurrentUserDataScopeService currentUserDataScopeService;
|
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private PlatformTransactionManager transactionManager;
|
private PlatformTransactionManager transactionManager;
|
||||||
|
|
||||||
@ -112,68 +108,19 @@ public class FishDraftDataServiceImpl extends ServiceImpl<FishDraftDataMapper, F
|
|||||||
String direction = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "direction");
|
String direction = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "direction");
|
||||||
String status = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "status");
|
String status = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "status");
|
||||||
String STRDT = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "strdt");
|
String STRDT = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "strdt");
|
||||||
String startTime = null;
|
String startTime=null;
|
||||||
String endTime = null;
|
String endTime=null;
|
||||||
// String userId = (SecurityUtils.hasPermission("sjtb:edit-review") || "admin".equals(SecurityUtils.getCurrentUsername())) ?null:SecurityUtils.getUserId();
|
// String userId = (SecurityUtils.hasPermission("sjtb:edit-review") || "admin".equals(SecurityUtils.getCurrentUsername())) ?null:SecurityUtils.getUserId();
|
||||||
String userId = SecurityUtils.getUserId();
|
String userId = SecurityUtils.getUserId();
|
||||||
if (StrUtil.isNotBlank(approvalId)) {
|
if(StrUtil.isNotBlank(approvalId)){
|
||||||
userId = null;
|
userId=null;
|
||||||
}
|
}
|
||||||
// 如果 startTime 和 endTime 为空,尝试从 TM 字段解析
|
// 如果 startTime 和 endTime 为空,尝试从 TM 字段解析
|
||||||
if (StrUtil.isNotBlank(STRDT) && STRDT.split(",").length == 2) {
|
if (StrUtil.isNotBlank(STRDT)&& STRDT.split( ",").length==2) {
|
||||||
startTime = STRDT.split(",")[0];
|
startTime=STRDT.split(",")[0];
|
||||||
endTime = STRDT.split(",")[1];
|
endTime=STRDT.split(",")[1];
|
||||||
}
|
}
|
||||||
Page<FishDraftDataVO> resultPage = fishDraftDataMapper.selectJoinPage(page, stcd, rstcd, baseId, rvcd, direction, status, ftp, startTime, endTime, userId, hbrvcd, approvalId);
|
Page<FishDraftDataVO> resultPage = fishDraftDataMapper.selectJoinPage(page, stcd, rstcd, baseId, rvcd, direction, status, ftp, startTime, endTime,userId,hbrvcd,approvalId);
|
||||||
fillUserNames(resultPage.getRecords());
|
|
||||||
return resultPage;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Page<FishDraftDataVO> queryPageListWithScope(DataSourceRequest dataSourceRequest) {
|
|
||||||
Page<FishDraftDataVO> page = KendoUtil.getPage(dataSourceRequest);
|
|
||||||
page.setSize(dataSourceRequest.getTake());
|
|
||||||
page.setCurrent(dataSourceRequest.getSkip());
|
|
||||||
DataSourceLoadOptionsBase loadOptions = dataSourceRequest.toDevRequest();
|
|
||||||
String stcd = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "stcd");
|
|
||||||
String approvalId = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "approvalId");
|
|
||||||
String rstcd = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "rstcd");
|
|
||||||
String hbrvcd = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "hbrvcd");
|
|
||||||
String rvcd = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "rvcd");
|
|
||||||
String baseId = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "baseId");
|
|
||||||
String ftp = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "ftp");
|
|
||||||
String direction = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "direction");
|
|
||||||
String status = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "status");
|
|
||||||
String STRDT = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "strdt");
|
|
||||||
String startTime = null;
|
|
||||||
String endTime = null;
|
|
||||||
String userId = SecurityUtils.getUserId();
|
|
||||||
if (StrUtil.isNotBlank(approvalId)) {
|
|
||||||
userId = null;
|
|
||||||
}
|
|
||||||
if (StrUtil.isNotBlank(STRDT) && STRDT.split(",").length == 2) {
|
|
||||||
startTime = STRDT.split(",")[0];
|
|
||||||
endTime = STRDT.split(",")[1];
|
|
||||||
}
|
|
||||||
|
|
||||||
// 当 status = APPROVED 时,加上当前用户的电站权限过滤
|
|
||||||
Set<String> stationCodes = null;
|
|
||||||
if ("APPROVED".equals(status)) {
|
|
||||||
userId=null;
|
|
||||||
if (!currentUserDataScopeService.getCurrentUserDataScope().isManagedAdmin()) {
|
|
||||||
stationCodes = currentUserDataScopeService.getCurrentUserDataScope().getStationCodes();
|
|
||||||
// 如果用户没有电站权限且不是管理员,返回空结果
|
|
||||||
if (stationCodes == null || stationCodes.isEmpty()) {
|
|
||||||
page.setRecords(Collections.emptyList());
|
|
||||||
page.setTotal(0);
|
|
||||||
return page;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Page<FishDraftDataVO> resultPage = fishDraftDataMapper.selectJoinPageWithStationScope(
|
|
||||||
page, stcd, rstcd, baseId, rvcd, direction, status, ftp,
|
|
||||||
startTime, endTime, userId, hbrvcd, approvalId, stationCodes);
|
|
||||||
fillUserNames(resultPage.getRecords());
|
fillUserNames(resultPage.getRecords());
|
||||||
return resultPage;
|
return resultPage;
|
||||||
}
|
}
|
||||||
@ -315,7 +262,7 @@ public class FishDraftDataServiceImpl extends ServiceImpl<FishDraftDataMapper, F
|
|||||||
@Override
|
@Override
|
||||||
public boolean batchRemoveDraft(List<String> ids) {
|
public boolean batchRemoveDraft(List<String> ids) {
|
||||||
long count = countByIdsAndLockFlag(ids, 1);
|
long count = countByIdsAndLockFlag(ids, 1);
|
||||||
if (count > 0) {
|
if(count > 0){
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
String userId = SecurityUtils.getUserId();
|
String userId = SecurityUtils.getUserId();
|
||||||
@ -445,7 +392,7 @@ public class FishDraftDataServiceImpl extends ServiceImpl<FishDraftDataMapper, F
|
|||||||
// hbrvnmSet.add(hbrv.getRvnm());
|
// hbrvnmSet.add(hbrv.getRvnm());
|
||||||
// }
|
// }
|
||||||
|
|
||||||
List<SdEngInfoBH> stationList = engInfoBHMapper.selectByRvcd(null, orgId);
|
List<SdEngInfoBH> stationList = engInfoBHMapper.selectByRvcd(null,orgId);
|
||||||
if (stationList != null) {
|
if (stationList != null) {
|
||||||
for (SdEngInfoBH station : stationList) {
|
for (SdEngInfoBH station : stationList) {
|
||||||
if (station.getStcd() != null) {
|
if (station.getStcd() != null) {
|
||||||
@ -454,7 +401,7 @@ public class FishDraftDataServiceImpl extends ServiceImpl<FishDraftDataMapper, F
|
|||||||
if (station.getEnnm() != null) {
|
if (station.getEnnm() != null) {
|
||||||
ennmSet.add(station.getEnnm());
|
ennmSet.add(station.getEnnm());
|
||||||
}
|
}
|
||||||
if (station.getReachcdName() != null) {
|
if(station.getReachcdName() != null){
|
||||||
hbrvnmSet.add(station.getReachcdName());
|
hbrvnmSet.add(station.getReachcdName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -472,7 +419,7 @@ public class FishDraftDataServiceImpl extends ServiceImpl<FishDraftDataMapper, F
|
|||||||
if (station.getEnnm() != null) {
|
if (station.getEnnm() != null) {
|
||||||
ennmSet.add(station.getEnnm());
|
ennmSet.add(station.getEnnm());
|
||||||
}
|
}
|
||||||
if (station.getReachcdName() != null) {
|
if(station.getReachcdName() != null){
|
||||||
hbrvnmSet.add(station.getReachcdName());
|
hbrvnmSet.add(station.getReachcdName());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -15,7 +15,6 @@ public class FprZyFishDicVo {
|
|||||||
private String rvcdName;
|
private String rvcdName;
|
||||||
private String name;
|
private String name;
|
||||||
private Integer type;
|
private Integer type;
|
||||||
private String typeName;
|
|
||||||
private String family;
|
private String family;
|
||||||
private String genus;
|
private String genus;
|
||||||
private String species;
|
private String species;
|
||||||
|
|||||||
@ -800,7 +800,6 @@ public class FprMonitorServiceImpl implements FprMonitorService {
|
|||||||
"rv.RVNM AS rvcdName, " +
|
"rv.RVNM AS rvcdName, " +
|
||||||
"src.NAME AS name, " +
|
"src.NAME AS name, " +
|
||||||
"src.TYPE AS type, " +
|
"src.TYPE AS type, " +
|
||||||
"CASE WHEN src.TYPE = 1 THEN '淡水' WHEN src.TYPE = 2 THEN '海水' ELSE '未知' END AS typeName,"+
|
|
||||||
"src.FAMILY AS family, " +
|
"src.FAMILY AS family, " +
|
||||||
"src.GENUS AS genus, " +
|
"src.GENUS AS genus, " +
|
||||||
"src.SPECIES AS species, " +
|
"src.SPECIES AS species, " +
|
||||||
@ -849,7 +848,6 @@ public class FprMonitorServiceImpl implements FprMonitorService {
|
|||||||
"NVL(relAgg.rvcdName, '') AS rvcdName, " +
|
"NVL(relAgg.rvcdName, '') AS rvcdName, " +
|
||||||
"src.NAME AS name, " +
|
"src.NAME AS name, " +
|
||||||
"src.TYPE AS type, " +
|
"src.TYPE AS type, " +
|
||||||
"CASE WHEN src.TYPE = 1 THEN '淡水' WHEN src.TYPE = 2 THEN '海水' ELSE '未知' END AS typeName,"+
|
|
||||||
"src.FAMILY AS family, " +
|
"src.FAMILY AS family, " +
|
||||||
"src.GENUS AS genus, " +
|
"src.GENUS AS genus, " +
|
||||||
"src.SPECIES AS species, " +
|
"src.SPECIES AS species, " +
|
||||||
|
|||||||
@ -44,11 +44,6 @@ public class OverviewVmsstbprptVo implements Serializable {
|
|||||||
private String introduce;
|
private String introduce;
|
||||||
private String logo;
|
private String logo;
|
||||||
private String inffile;
|
private String inffile;
|
||||||
private String boundary;
|
|
||||||
private String location;
|
|
||||||
private BigDecimal height;
|
|
||||||
private String url;
|
|
||||||
private String accuracy;
|
|
||||||
private BigDecimal inv;
|
private BigDecimal inv;
|
||||||
private Integer invinmn;
|
private Integer invinmn;
|
||||||
private Date stdsdt;
|
private Date stdsdt;
|
||||||
|
|||||||
@ -1459,11 +1459,6 @@ public class OverviewServiceImpl implements OverviewService {
|
|||||||
columnMap.put("introduce", "t.INTRODUCE AS \"introduce\"");
|
columnMap.put("introduce", "t.INTRODUCE AS \"introduce\"");
|
||||||
columnMap.put("logo", "t.LOGO AS \"logo\"");
|
columnMap.put("logo", "t.LOGO AS \"logo\"");
|
||||||
columnMap.put("inffile", "t.INFFILE AS \"inffile\"");
|
columnMap.put("inffile", "t.INFFILE AS \"inffile\"");
|
||||||
columnMap.put("url", "t.URL AS \"url\"");
|
|
||||||
columnMap.put("boundary", "t.BOUNDARY AS \"boundary\"");
|
|
||||||
columnMap.put("height", "t.HEIGHT AS \"height\"");
|
|
||||||
columnMap.put("location", "t.LOCATION AS \"location\"");
|
|
||||||
columnMap.put("accuracy", "t.ACCURACY AS \"accuracy\"");
|
|
||||||
columnMap.put("inv", "t.INV AS \"inv\"");
|
columnMap.put("inv", "t.INV AS \"inv\"");
|
||||||
columnMap.put("invinmn", "t.INVINMN AS \"invinmn\"");
|
columnMap.put("invinmn", "t.INVINMN AS \"invinmn\"");
|
||||||
columnMap.put("stdsdt", "t.STDSDT AS \"stdsdt\"");
|
columnMap.put("stdsdt", "t.STDSDT AS \"stdsdt\"");
|
||||||
|
|||||||
@ -1825,12 +1825,12 @@ public class EnvWqDataServiceImpl implements EnvWqDataService {
|
|||||||
"LEFT JOIN SD_RVCD_DIC rv ON rv.RVCD = eng.RVCD " +
|
"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_ADDVCD_DIC addv ON addv.ADDVCD = eng.ADDVCD " +
|
||||||
"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 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 " +
|
"LEFT JOIN (SELECT det.SORT,cfg.BASEID, along.RVCD, det.STCD " +
|
||||||
" FROM MS_ALONGDET_B det " +
|
" FROM MS_ALONGDET_B det " +
|
||||||
" INNER JOIN MS_ALONG_B along ON det.ALONG_ID = along.ID " +
|
" 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 " +
|
" WHERE NVL(det.IS_DELETED, 0) = 0 AND NVL(along.IS_DELETED, 0) = 0 AND along.CODE = 'common') rstAlong " +
|
||||||
" ON rstAlong.BASEID = wq.BASE_ID AND rstAlong.STCD = wq.RSTCD " +
|
" ON rstAlong.BASEID = wq.BASE_ID AND rstAlong.STCD = wq.RSTCD " +
|
||||||
"LEFT JOIN (SELECT det.SORT,along.BASEID, along.RVCD, det.STCD " +
|
"LEFT JOIN (SELECT det.SORT,cfg.BASEID, along.RVCD, det.STCD " +
|
||||||
" FROM MS_ALONGDET_B det " +
|
" FROM MS_ALONGDET_B det " +
|
||||||
" INNER JOIN MS_ALONG_B along ON det.ALONG_ID = along.ID " +
|
" 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 " +
|
" WHERE NVL(det.IS_DELETED, 0) = 0 AND NVL(along.IS_DELETED, 0) = 0 AND along.CODE = 'common') siteAlong " +
|
||||||
|
|||||||
@ -2959,7 +2959,7 @@ public class SdWtMonitorServiceImpl implements SdWtMonitorService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Cacheable(cacheNames = "wtCache#3600", keyGenerator = "cacheKeyByUserGenerator")
|
// @Cacheable(cacheNames = "wtCache#3600", keyGenerator = "cacheKeyByUserGenerator")
|
||||||
public DataSourceResult<WaterTempMapVO> getEngTempPointListKendoListCust(DataSourceRequest dataSourceRequest) {
|
public DataSourceResult<WaterTempMapVO> getEngTempPointListKendoListCust(DataSourceRequest dataSourceRequest) {
|
||||||
DataSourceResult<WaterTempMapVO> dataSourceResult = new DataSourceResult<>();
|
DataSourceResult<WaterTempMapVO> dataSourceResult = new DataSourceResult<>();
|
||||||
dataSourceResult.setAggregates(new HashMap<>());
|
dataSourceResult.setAggregates(new HashMap<>());
|
||||||
|
|||||||
@ -437,7 +437,7 @@ public class WeFishServiceImpl implements WeFishService {
|
|||||||
"SUM(CASE WHEN we.DCPC = #{map.dcpc2} THEN NVL(fish.FCNT, 0) ELSE 0 END) AS fcnt2 " +
|
"SUM(CASE WHEN we.DCPC = #{map.dcpc2} THEN NVL(fish.FCNT, 0) ELSE 0 END) AS fcnt2 " +
|
||||||
"FROM SD_WE_R we " +
|
"FROM SD_WE_R we " +
|
||||||
"INNER JOIN SD_WEFISH_R fish ON we.ID = fish.WER_ID AND NVL(fish.IS_DELETED, 0) = 0 " +
|
"INNER JOIN SD_WEFISH_R fish ON we.ID = fish.WER_ID AND NVL(fish.IS_DELETED, 0) = 0 " +
|
||||||
"INNER JOIN SD_WE_B_H sec ON sec.STCD = we.STCD AND NVL(sec.USFL, 0) = 1 " +
|
"INNER JOIN SD_WE_B_H section ON section.STCD = we.STCD AND NVL(section.USFL, 0) = 1 " +
|
||||||
"INNER JOIN SD_FISHDICTORY_B dict ON dict.ID = fish.FTP AND NVL(dict.IS_DELETED, 0) = 0 " +
|
"INNER JOIN SD_FISHDICTORY_B dict ON dict.ID = fish.FTP AND NVL(dict.IS_DELETED, 0) = 0 " +
|
||||||
"WHERE NVL(we.IS_DELETED, 0) = 0 " +
|
"WHERE NVL(we.IS_DELETED, 0) = 0 " +
|
||||||
"AND NVL(we.STATUS, 1) = 1 " +
|
"AND NVL(we.STATUS, 1) = 1 " +
|
||||||
@ -514,49 +514,49 @@ public class WeFishServiceImpl implements WeFishService {
|
|||||||
.append("CASE WHEN fishAgg.yr = #{map.endYear} THEN fishAgg.fcnt END AS endFtpCnt, ")
|
.append("CASE WHEN fishAgg.yr = #{map.endYear} THEN fishAgg.fcnt END AS endFtpCnt, ")
|
||||||
.append("CASE WHEN fishAgg.yr = #{map.endYear} THEN totalAgg.fcnt END AS endCnt ")
|
.append("CASE WHEN fishAgg.yr = #{map.endYear} THEN totalAgg.fcnt END AS endCnt ")
|
||||||
.append("FROM (")
|
.append("FROM (")
|
||||||
.append("SELECT fish.FTP AS ftp, sec.HBRVCD AS hbrvcd, SUM(NVL(fish.FCNT, 0)) AS fcnt, TO_CHAR(we.TM, 'YYYY') AS yr ")
|
.append("SELECT fish.FTP AS ftp, section.HBRVCD AS hbrvcd, SUM(NVL(fish.FCNT, 0)) AS fcnt, TO_CHAR(we.TM, 'YYYY') AS yr ")
|
||||||
.append("FROM SD_WE_R we ")
|
.append("FROM SD_WE_R we ")
|
||||||
.append("INNER JOIN SD_WEFISH_R fish ON we.ID = fish.WER_ID ")
|
.append("INNER JOIN SD_WEFISH_R fish ON we.ID = fish.WER_ID ")
|
||||||
.append(" AND NVL(fish.IS_DELETED, 0) = 0 ")
|
.append(" AND NVL(fish.IS_DELETED, 0) = 0 ")
|
||||||
.append("INNER JOIN SD_WE_B_H sec ON sec.STCD = we.STCD ")
|
.append("INNER JOIN SD_WE_B_H section ON section.STCD = we.STCD ")
|
||||||
.append("INNER JOIN V_SD_FISHDICTORY_B dictFilter ON dictFilter.FISH_ID = fish.FTP ")
|
.append("INNER JOIN V_SD_FISHDICTORY_B dictFilter ON dictFilter.FISH_ID = fish.FTP ")
|
||||||
.append(" AND (sec.HBRVCD = dictFilter.RVCD OR dictFilter.RVCD = 'ZY') ")
|
.append(" AND (section.HBRVCD = dictFilter.RVCD OR dictFilter.RVCD = 'ZY') ")
|
||||||
.append("WHERE NVL(we.STATUS, 1) = 1 ")
|
.append("WHERE NVL(we.STATUS, 1) = 1 ")
|
||||||
.append("AND NVL(we.IS_DELETED, 0) = 0 ")
|
.append("AND NVL(we.IS_DELETED, 0) = 0 ")
|
||||||
.append("AND TO_CHAR(we.TM, 'YYYY') IN (#{map.startYear}, #{map.endYear}) ");
|
.append("AND TO_CHAR(we.TM, 'YYYY') IN (#{map.startYear}, #{map.endYear}) ");
|
||||||
if (StrUtil.isNotBlank(baseId)) {
|
if (StrUtil.isNotBlank(baseId)) {
|
||||||
paramMap.put("fishPageBaseId", baseId);
|
paramMap.put("fishPageBaseId", baseId);
|
||||||
sql.append("AND sec.BASE_ID = #{map.fishPageBaseId} ");
|
sql.append("AND section.BASE_ID = #{map.fishPageBaseId} ");
|
||||||
}
|
}
|
||||||
if (StrUtil.isNotBlank(hbrvcd)) {
|
if (StrUtil.isNotBlank(hbrvcd)) {
|
||||||
paramMap.put("fishPageHbrvcd", hbrvcd);
|
paramMap.put("fishPageHbrvcd", hbrvcd);
|
||||||
sql.append("AND sec.HBRVCD = #{map.fishPageHbrvcd} ");
|
sql.append("AND section.HBRVCD = #{map.fishPageHbrvcd} ");
|
||||||
}
|
}
|
||||||
if (StrUtil.isNotBlank(rstcd)) {
|
if (StrUtil.isNotBlank(rstcd)) {
|
||||||
paramMap.put("fishPageRstcd", rstcd);
|
paramMap.put("fishPageRstcd", rstcd);
|
||||||
sql.append("AND sec.RSTCD = #{map.fishPageRstcd} ");
|
sql.append("AND section.RSTCD = #{map.fishPageRstcd} ");
|
||||||
}
|
}
|
||||||
sql.append("GROUP BY fish.FTP, sec.HBRVCD, TO_CHAR(we.TM, 'YYYY') ")
|
sql.append("GROUP BY fish.FTP, section.HBRVCD, TO_CHAR(we.TM, 'YYYY') ")
|
||||||
.append(") fishAgg ")
|
.append(") fishAgg ")
|
||||||
.append("LEFT JOIN (")
|
.append("LEFT JOIN (")
|
||||||
.append("SELECT SUM(NVL(fish.FCNT, 0)) AS fcnt, TO_CHAR(we.TM, 'YYYY') AS yr ")
|
.append("SELECT SUM(NVL(fish.FCNT, 0)) AS fcnt, TO_CHAR(we.TM, 'YYYY') AS yr ")
|
||||||
.append("FROM SD_WE_R we ")
|
.append("FROM SD_WE_R we ")
|
||||||
.append("INNER JOIN SD_WEFISH_R fish ON we.ID = fish.WER_ID ")
|
.append("INNER JOIN SD_WEFISH_R fish ON we.ID = fish.WER_ID ")
|
||||||
.append(" AND NVL(fish.IS_DELETED, 0) = 0 ")
|
.append(" AND NVL(fish.IS_DELETED, 0) = 0 ")
|
||||||
.append("INNER JOIN SD_WE_B_H sec ON sec.STCD = we.STCD ")
|
.append("INNER JOIN SD_WE_B_H section ON section.STCD = we.STCD ")
|
||||||
.append("INNER JOIN V_SD_FISHDICTORY_B dictFilter ON dictFilter.FISH_ID = fish.FTP ")
|
.append("INNER JOIN V_SD_FISHDICTORY_B dictFilter ON dictFilter.FISH_ID = fish.FTP ")
|
||||||
.append(" AND (sec.HBRVCD = dictFilter.RVCD OR dictFilter.RVCD = 'ZY') ")
|
.append(" AND (section.HBRVCD = dictFilter.RVCD OR dictFilter.RVCD = 'ZY') ")
|
||||||
.append("WHERE NVL(we.STATUS, 1) = 1 ")
|
.append("WHERE NVL(we.STATUS, 1) = 1 ")
|
||||||
.append("AND NVL(we.IS_DELETED, 0) = 0 ")
|
.append("AND NVL(we.IS_DELETED, 0) = 0 ")
|
||||||
.append("AND TO_CHAR(we.TM, 'YYYY') IN (#{map.startYear}, #{map.endYear}) ");
|
.append("AND TO_CHAR(we.TM, 'YYYY') IN (#{map.startYear}, #{map.endYear}) ");
|
||||||
if (StrUtil.isNotBlank(baseId)) {
|
if (StrUtil.isNotBlank(baseId)) {
|
||||||
sql.append("AND sec.BASE_ID = #{map.fishPageBaseId} ");
|
sql.append("AND section.BASE_ID = #{map.fishPageBaseId} ");
|
||||||
}
|
}
|
||||||
if (StrUtil.isNotBlank(hbrvcd)) {
|
if (StrUtil.isNotBlank(hbrvcd)) {
|
||||||
sql.append("AND sec.HBRVCD = #{map.fishPageHbrvcd} ");
|
sql.append("AND section.HBRVCD = #{map.fishPageHbrvcd} ");
|
||||||
}
|
}
|
||||||
if (StrUtil.isNotBlank(rstcd)) {
|
if (StrUtil.isNotBlank(rstcd)) {
|
||||||
sql.append("AND sec.RSTCD = #{map.fishPageRstcd} ");
|
sql.append("AND section.RSTCD = #{map.fishPageRstcd} ");
|
||||||
}
|
}
|
||||||
sql.append("GROUP BY TO_CHAR(we.TM, 'YYYY') ")
|
sql.append("GROUP BY TO_CHAR(we.TM, 'YYYY') ")
|
||||||
.append(") totalAgg ON totalAgg.yr = fishAgg.yr ")
|
.append(") totalAgg ON totalAgg.yr = fishAgg.yr ")
|
||||||
@ -1087,33 +1087,33 @@ public class WeFishServiceImpl implements WeFishService {
|
|||||||
Map<String, Object> paramMap = new HashMap<>();
|
Map<String, Object> paramMap = new HashMap<>();
|
||||||
StringBuilder sql = new StringBuilder();
|
StringBuilder sql = new StringBuilder();
|
||||||
sql.append("SELECT ")
|
sql.append("SELECT ")
|
||||||
.append("sec.STCD AS stcd, ")
|
.append("section.STCD AS stcd, ")
|
||||||
.append("sec.STNM AS stnm, ")
|
.append("section.STNM AS stnm, ")
|
||||||
.append("sec.LGTD AS lgtd, ")
|
.append("section.LGTD AS lgtd, ")
|
||||||
.append("sec.LTTD AS lttd, ")
|
.append("section.LTTD AS lttd, ")
|
||||||
.append("sec.ELEV AS dtmel, ")
|
.append("section.ELEV AS dtmel, ")
|
||||||
.append("sec.RSTCD AS rstcds, ")
|
.append("section.RSTCD AS rstcds, ")
|
||||||
.append("eng.ENNM AS ennm, ")
|
.append("eng.ENNM AS ennm, ")
|
||||||
.append("TO_CHAR(latest.TM, 'yyyy-mm-dd hh24:mi:ss') AS tm, ")
|
.append("TO_CHAR(latest.TM, 'yyyy-mm-dd hh24:mi:ss') AS tm, ")
|
||||||
.append("'WE' AS anchoPointState, ")
|
.append("'WE' AS anchoPointState, ")
|
||||||
.append("'WE' AS sttpMap, ")
|
.append("'WE' AS sttpMap, ")
|
||||||
.append("'WE' AS sttp, ")
|
.append("'WE' AS sttp, ")
|
||||||
.append("'WE' AS sttpCode, ")
|
.append("'WE' AS sttpCode, ")
|
||||||
.append("sec.STNM AS titleName, ")
|
.append("section.STNM AS titleName, ")
|
||||||
.append("sec.RVCD AS rvcd, ")
|
.append("section.RVCD AS rvcd, ")
|
||||||
.append("sec.ADDVCD AS addvcd, ")
|
.append("section.ADDVCD AS addvcd, ")
|
||||||
.append("sec.BASE_ID AS baseId, ")
|
.append("section.BASE_ID AS baseId, ")
|
||||||
.append("sec.RSTCD AS rstcd, ")
|
.append("section.RSTCD AS rstcd, ")
|
||||||
.append("siteSort.SORT AS siteStepSort ")
|
.append("siteSort.SORT AS siteStepSort ")
|
||||||
.append("FROM SD_WE_B_H sec ")
|
.append("FROM SD_WE_B_H section ")
|
||||||
.append("LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = sec.RSTCD AND NVL(eng.IS_DELETED, 0) = 0 ")
|
.append("LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = section.RSTCD AND NVL(eng.IS_DELETED, 0) = 0 ")
|
||||||
.append("LEFT JOIN ( ")
|
.append("LEFT JOIN ( ")
|
||||||
.append(" SELECT STCD, MAX(TM) AS TM ")
|
.append(" SELECT STCD, MAX(TM) AS TM ")
|
||||||
.append(" FROM SD_WE_R ")
|
.append(" FROM SD_WE_R ")
|
||||||
.append(" WHERE NVL(IS_DELETED, 0) = 0 AND STATUS = 1 ")
|
.append(" WHERE NVL(IS_DELETED, 0) = 0 AND STATUS = 1 ")
|
||||||
.append(" GROUP BY STCD ")
|
.append(" GROUP BY STCD ")
|
||||||
.append(") latest ON latest.STCD = sec.STCD ")
|
.append(") latest ON latest.STCD = section.STCD ")
|
||||||
.append("LEFT JOIN MS_ALONG_B along ON along.BASEID = sec.BASE_ID ")
|
.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(" AND along.CODE = 'common' AND NVL(along.IS_DELETED, 0) = 0 ")
|
||||||
.append("LEFT JOIN ( ")
|
.append("LEFT JOIN ( ")
|
||||||
.append(" SELECT det.SORT,cfg.BASEID, cfg.RVCD, det.STCD ")
|
.append(" SELECT det.SORT,cfg.BASEID, cfg.RVCD, det.STCD ")
|
||||||
@ -1122,8 +1122,8 @@ public class WeFishServiceImpl implements WeFishService {
|
|||||||
.append(" WHERE NVL(det.IS_DELETED, 0) = 0 ")
|
.append(" WHERE NVL(det.IS_DELETED, 0) = 0 ")
|
||||||
.append(" AND NVL(cfg.IS_DELETED, 0) = 0 ")
|
.append(" AND NVL(cfg.IS_DELETED, 0) = 0 ")
|
||||||
.append(" AND cfg.CODE = 'common' ")
|
.append(" AND cfg.CODE = 'common' ")
|
||||||
.append(") siteSort ON siteSort.BASEID = sec.BASE_ID AND siteSort.STCD = sec.STCD ")
|
.append(") siteSort ON siteSort.BASEID = section.BASE_ID AND siteSort.STCD = section.STCD ")
|
||||||
.append("WHERE NVL(sec.USFL, 1) = 1 ");
|
.append("WHERE NVL(section.USFL, 1) = 1 ");
|
||||||
|
|
||||||
String filterSql = buildWePointFilterCondition(dataSourceRequest.getFilter(), paramMap, new int[]{0});
|
String filterSql = buildWePointFilterCondition(dataSourceRequest.getFilter(), paramMap, new int[]{0});
|
||||||
if (StrUtil.isNotBlank(filterSql)) {
|
if (StrUtil.isNotBlank(filterSql)) {
|
||||||
@ -1186,8 +1186,8 @@ public class WeFishServiceImpl implements WeFishService {
|
|||||||
.append("FROM SD_WE_R we ")
|
.append("FROM SD_WE_R we ")
|
||||||
.append("INNER JOIN SD_WEFISH_R fish ON fish.WER_ID = we.ID ")
|
.append("INNER JOIN SD_WEFISH_R fish ON fish.WER_ID = we.ID ")
|
||||||
.append(" AND NVL(fish.IS_DELETED, 0) = 0 ")
|
.append(" AND NVL(fish.IS_DELETED, 0) = 0 ")
|
||||||
.append("INNER JOIN SD_WE_B_H sec ON sec.STCD = we.STCD ")
|
.append("INNER JOIN SD_WE_B_H section ON section.STCD = we.STCD ")
|
||||||
.append(" AND NVL(sec.USFL, 1) = 1 ")
|
.append(" AND NVL(section.USFL, 1) = 1 ")
|
||||||
.append("INNER JOIN ( ")
|
.append("INNER JOIN ( ")
|
||||||
.append(" SELECT STCD, MAX(TM) AS TM ")
|
.append(" SELECT STCD, MAX(TM) AS TM ")
|
||||||
.append(" FROM SD_WE_R ")
|
.append(" FROM SD_WE_R ")
|
||||||
@ -1201,7 +1201,7 @@ public class WeFishServiceImpl implements WeFishService {
|
|||||||
.append(" WHERE NVL(rel.IS_DELETED, 0) = 0 ")
|
.append(" WHERE NVL(rel.IS_DELETED, 0) = 0 ")
|
||||||
.append(" AND NVL(dic.IS_DELETED, 0) = 0 ")
|
.append(" AND NVL(dic.IS_DELETED, 0) = 0 ")
|
||||||
.append(" AND (rel.FISH_ID <> rel.ZY_FISH_ID OR rel.RVCD = 'ZY') ")
|
.append(" AND (rel.FISH_ID <> rel.ZY_FISH_ID OR rel.RVCD = 'ZY') ")
|
||||||
.append(") dict ON fish.FTP = dict.FISH_ID AND (sec.HBRVCD = dict.RVCD OR dict.RVCD = 'ZY') ")
|
.append(") dict ON fish.FTP = dict.FISH_ID AND (section.HBRVCD = dict.RVCD OR dict.RVCD = 'ZY') ")
|
||||||
.append("WHERE fish.FCNT IS NOT NULL ")
|
.append("WHERE fish.FCNT IS NOT NULL ")
|
||||||
.append("AND NVL(we.IS_DELETED, 0) = 0 ")
|
.append("AND NVL(we.IS_DELETED, 0) = 0 ")
|
||||||
.append("AND NVL(we.STATUS, 1) = 1 ");
|
.append("AND NVL(we.STATUS, 1) = 1 ");
|
||||||
@ -1925,16 +1925,16 @@ public class WeFishServiceImpl implements WeFishService {
|
|||||||
StringBuilder sql = new StringBuilder();
|
StringBuilder sql = new StringBuilder();
|
||||||
sql.append("SELECT t.BASE_ID AS hbrvcd, t.YR AS yr ")
|
sql.append("SELECT t.BASE_ID AS hbrvcd, t.YR AS yr ")
|
||||||
.append("FROM (")
|
.append("FROM (")
|
||||||
.append("SELECT sec.HBRVCD, sec.RSTCD, sec.BASE_ID, TO_CHAR(we.TM, 'yyyy') AS yr ")
|
.append("SELECT section.HBRVCD, section.RSTCD, section.BASE_ID, TO_CHAR(we.TM, 'yyyy') AS yr ")
|
||||||
.append("FROM SD_WE_B_H sec ")
|
.append("FROM SD_WE_B_H section ")
|
||||||
.append("INNER JOIN SD_WE_R we ON sec.STCD = we.STCD ")
|
.append("INNER JOIN SD_WE_R we ON section.STCD = we.STCD ")
|
||||||
.append(" AND NVL(we.IS_DELETED, 0) = 0 ")
|
.append(" AND NVL(we.IS_DELETED, 0) = 0 ")
|
||||||
.append(" AND NVL(we.STATUS, 1) = 1 ")
|
.append(" AND NVL(we.STATUS, 1) = 1 ")
|
||||||
.append("INNER JOIN SD_WEFISH_R fish ON we.ID = fish.WER_ID ")
|
.append("INNER JOIN SD_WEFISH_R fish ON we.ID = fish.WER_ID ")
|
||||||
.append(" AND NVL(fish.IS_DELETED, 0) = 0 ")
|
.append(" AND NVL(fish.IS_DELETED, 0) = 0 ")
|
||||||
.append("LEFT JOIN V_SD_FISHDICTORY_B dict ON fish.FTP = dict.FISH_ID ")
|
.append("LEFT JOIN V_SD_FISHDICTORY_B dict ON fish.FTP = dict.FISH_ID ")
|
||||||
.append(" AND (sec.HBRVCD = dict.RVCD OR dict.RVCD = 'ZY') ")
|
.append(" AND (section.HBRVCD = dict.RVCD OR dict.RVCD = 'ZY') ")
|
||||||
.append("WHERE NVL(sec.USFL, 0) = 1 ")
|
.append("WHERE NVL(section.USFL, 0) = 1 ")
|
||||||
.append("AND CASE ")
|
.append("AND CASE ")
|
||||||
.append("WHEN dict.SPEC_ORIGIN = 2 THEN 1 ")
|
.append("WHEN dict.SPEC_ORIGIN = 2 THEN 1 ")
|
||||||
.append("WHEN dict.SPEC_ORIGIN = 1 AND NVL(dict.PTYPE, -1) <> 6 THEN 2 ")
|
.append("WHEN dict.SPEC_ORIGIN = 1 AND NVL(dict.PTYPE, -1) <> 6 THEN 2 ")
|
||||||
@ -1943,11 +1943,11 @@ public class WeFishServiceImpl implements WeFishService {
|
|||||||
|
|
||||||
if (StrUtil.isNotBlank(baseId)) {
|
if (StrUtil.isNotBlank(baseId)) {
|
||||||
paramMap.put("weYearBaseId", baseId);
|
paramMap.put("weYearBaseId", baseId);
|
||||||
sql.append("AND sec.BASE_ID = #{map.weYearBaseId} ");
|
sql.append("AND section.BASE_ID = #{map.weYearBaseId} ");
|
||||||
}
|
}
|
||||||
if (StrUtil.isNotBlank(hbrvcd)) {
|
if (StrUtil.isNotBlank(hbrvcd)) {
|
||||||
paramMap.put("weYearHbrvcd", hbrvcd);
|
paramMap.put("weYearHbrvcd", hbrvcd);
|
||||||
sql.append("AND sec.HBRVCD = #{map.weYearHbrvcd} ");
|
sql.append("AND section.HBRVCD = #{map.weYearHbrvcd} ");
|
||||||
}
|
}
|
||||||
if (StrUtil.isNotBlank(yr)) {
|
if (StrUtil.isNotBlank(yr)) {
|
||||||
paramMap.put("weYearYr", yr);
|
paramMap.put("weYearYr", yr);
|
||||||
@ -1965,11 +1965,11 @@ public class WeFishServiceImpl implements WeFishService {
|
|||||||
placeholders.add("#{map." + key + "}");
|
placeholders.add("#{map." + key + "}");
|
||||||
}
|
}
|
||||||
if (CollUtil.isNotEmpty(placeholders)) {
|
if (CollUtil.isNotEmpty(placeholders)) {
|
||||||
sql.append("AND sec.RSTCD IN (").append(String.join(", ", placeholders)).append(") ");
|
sql.append("AND section.RSTCD IN (").append(String.join(", ", placeholders)).append(") ");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sql.append("GROUP BY sec.BASE_ID, sec.HBRVCD, sec.RSTCD, TO_CHAR(we.TM, 'yyyy')")
|
sql.append("GROUP BY section.BASE_ID, section.HBRVCD, section.RSTCD, TO_CHAR(we.TM, 'yyyy')")
|
||||||
.append(") t ")
|
.append(") t ")
|
||||||
.append("INNER JOIN (")
|
.append("INNER JOIN (")
|
||||||
.append("SELECT det.STCD, det.SORT, cfg.RVCD ")
|
.append("SELECT det.STCD, det.SORT, cfg.RVCD ")
|
||||||
@ -1993,7 +1993,7 @@ public class WeFishServiceImpl implements WeFishService {
|
|||||||
StringBuilder sql = new StringBuilder();
|
StringBuilder sql = new StringBuilder();
|
||||||
sql.append("SELECT t.STCD AS stcd, t.STNM AS stnm, t.NUM AS num, t.TY AS ty, t2.SORT AS sort ")
|
sql.append("SELECT t.STCD AS stcd, t.STNM AS stnm, t.NUM AS num, t.TY AS ty, t2.SORT AS sort ")
|
||||||
.append("FROM (")
|
.append("FROM (")
|
||||||
.append("SELECT sec.RSTCD AS STCD, ")
|
.append("SELECT section.RSTCD AS STCD, ")
|
||||||
.append("eng.ENNM AS STNM, ")
|
.append("eng.ENNM AS STNM, ")
|
||||||
.append("COUNT(DISTINCT fish.FTP) AS NUM, ")
|
.append("COUNT(DISTINCT fish.FTP) AS NUM, ")
|
||||||
.append("CASE ")
|
.append("CASE ")
|
||||||
@ -2001,26 +2001,26 @@ public class WeFishServiceImpl implements WeFishService {
|
|||||||
.append("WHEN dict.SPEC_ORIGIN = 1 AND NVL(dict.PTYPE, -1) <> 6 THEN '2' ")
|
.append("WHEN dict.SPEC_ORIGIN = 1 AND NVL(dict.PTYPE, -1) <> 6 THEN '2' ")
|
||||||
.append("WHEN dict.SPEC_ORIGIN = 1 AND dict.PTYPE = 6 THEN '3' ")
|
.append("WHEN dict.SPEC_ORIGIN = 1 AND dict.PTYPE = 6 THEN '3' ")
|
||||||
.append("END AS TY ")
|
.append("END AS TY ")
|
||||||
.append("FROM SD_WE_B_H sec ")
|
.append("FROM SD_WE_B_H section ")
|
||||||
.append("INNER JOIN SD_WE_R we ON sec.STCD = we.STCD ")
|
.append("INNER JOIN SD_WE_R we ON section.STCD = we.STCD ")
|
||||||
.append(" AND NVL(we.IS_DELETED, 0) = 0 ")
|
.append(" AND NVL(we.IS_DELETED, 0) = 0 ")
|
||||||
// .append(" AND NVL(we.STATUS, 1) = 1 ")
|
// .append(" AND NVL(we.STATUS, 1) = 1 ")
|
||||||
.append("INNER JOIN SD_WEFISH_R fish ON we.ID = fish.WER_ID ")
|
.append("INNER JOIN SD_WEFISH_R fish ON we.ID = fish.WER_ID ")
|
||||||
.append(" AND NVL(fish.IS_DELETED, 0) = 0 ")
|
.append(" AND NVL(fish.IS_DELETED, 0) = 0 ")
|
||||||
.append("LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = sec.RSTCD ")
|
.append("LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = section.RSTCD ")
|
||||||
.append(" AND NVL(eng.IS_DELETED, 0) = 0 ")
|
.append(" AND NVL(eng.IS_DELETED, 0) = 0 ")
|
||||||
.append("LEFT JOIN V_SD_FISHDICTORY_B dict ON fish.FTP = dict.FISH_ID ")
|
.append("LEFT JOIN V_SD_FISHDICTORY_B dict ON fish.FTP = dict.FISH_ID ")
|
||||||
.append(" AND (sec.HBRVCD = dict.RVCD OR dict.RVCD = 'ZY') ")
|
.append(" AND (section.HBRVCD = dict.RVCD OR dict.RVCD = 'ZY') ")
|
||||||
.append("WHERE 1 = 1 ");
|
.append("WHERE 1 = 1 ");
|
||||||
// .append("WHERE NVL(sec.USFL, 0) = 1 ");
|
// .append("WHERE NVL(section.USFL, 0) = 1 ");
|
||||||
|
|
||||||
if (StrUtil.isNotBlank(baseId)) {
|
if (StrUtil.isNotBlank(baseId)) {
|
||||||
paramMap.put("weFishStatBaseId", baseId);
|
paramMap.put("weFishStatBaseId", baseId);
|
||||||
sql.append("AND sec.BASE_ID = #{map.weFishStatBaseId} ");
|
sql.append("AND section.BASE_ID = #{map.weFishStatBaseId} ");
|
||||||
}
|
}
|
||||||
if (StrUtil.isNotBlank(hbrvcd)) {
|
if (StrUtil.isNotBlank(hbrvcd)) {
|
||||||
paramMap.put("weFishStatHbrvcd", hbrvcd);
|
paramMap.put("weFishStatHbrvcd", hbrvcd);
|
||||||
sql.append("AND sec.HBRVCD = #{map.weFishStatHbrvcd} ");
|
sql.append("AND section.HBRVCD = #{map.weFishStatHbrvcd} ");
|
||||||
}
|
}
|
||||||
if (StrUtil.isNotBlank(yr)) {
|
if (StrUtil.isNotBlank(yr)) {
|
||||||
paramMap.put("weFishStatYr", yr);
|
paramMap.put("weFishStatYr", yr);
|
||||||
@ -2038,7 +2038,7 @@ public class WeFishServiceImpl implements WeFishService {
|
|||||||
placeholders.add("#{map." + key + "}");
|
placeholders.add("#{map." + key + "}");
|
||||||
}
|
}
|
||||||
if (CollUtil.isNotEmpty(placeholders)) {
|
if (CollUtil.isNotEmpty(placeholders)) {
|
||||||
sql.append("AND sec.RSTCD IN (").append(String.join(", ", placeholders)).append(") ");
|
sql.append("AND section.RSTCD IN (").append(String.join(", ", placeholders)).append(") ");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2047,7 +2047,7 @@ public class WeFishServiceImpl implements WeFishService {
|
|||||||
.append("WHEN dict.SPEC_ORIGIN = 1 AND NVL(dict.PTYPE, -1) <> 6 THEN 2 ")
|
.append("WHEN dict.SPEC_ORIGIN = 1 AND NVL(dict.PTYPE, -1) <> 6 THEN 2 ")
|
||||||
.append("WHEN dict.SPEC_ORIGIN = 1 AND dict.PTYPE = 6 THEN 3 ")
|
.append("WHEN dict.SPEC_ORIGIN = 1 AND dict.PTYPE = 6 THEN 3 ")
|
||||||
.append("END IS NOT NULL ")
|
.append("END IS NOT NULL ")
|
||||||
.append("GROUP BY sec.RSTCD, eng.ENNM, CASE ")
|
.append("GROUP BY section.RSTCD, eng.ENNM, CASE ")
|
||||||
.append("WHEN dict.SPEC_ORIGIN = 2 THEN '1' ")
|
.append("WHEN dict.SPEC_ORIGIN = 2 THEN '1' ")
|
||||||
.append("WHEN dict.SPEC_ORIGIN = 1 AND NVL(dict.PTYPE, -1) <> 6 THEN '2' ")
|
.append("WHEN dict.SPEC_ORIGIN = 1 AND NVL(dict.PTYPE, -1) <> 6 THEN '2' ")
|
||||||
.append("WHEN dict.SPEC_ORIGIN = 1 AND dict.PTYPE = 6 THEN '3' ")
|
.append("WHEN dict.SPEC_ORIGIN = 1 AND dict.PTYPE = 6 THEN '3' ")
|
||||||
@ -2074,7 +2074,7 @@ public class WeFishServiceImpl implements WeFishService {
|
|||||||
StringBuilder sql = new StringBuilder();
|
StringBuilder sql = new StringBuilder();
|
||||||
sql.append("SELECT t.STCD AS stcd, t.STNM AS stnm, t.NUM AS num, t.TY AS ty, t2.SORT AS sort ")
|
sql.append("SELECT t.STCD AS stcd, t.STNM AS stnm, t.NUM AS num, t.TY AS ty, t2.SORT AS sort ")
|
||||||
.append("FROM (")
|
.append("FROM (")
|
||||||
.append("SELECT sec.RSTCD AS STCD, ")
|
.append("SELECT section.RSTCD AS STCD, ")
|
||||||
.append("eng.ENNM AS STNM, ")
|
.append("eng.ENNM AS STNM, ")
|
||||||
.append("COUNT(DISTINCT fish.FTP) AS NUM, ")
|
.append("COUNT(DISTINCT fish.FTP) AS NUM, ")
|
||||||
.append("CASE ")
|
.append("CASE ")
|
||||||
@ -2083,29 +2083,29 @@ public class WeFishServiceImpl implements WeFishService {
|
|||||||
.append("WHEN dict.SPEC_ORIGIN = 1 AND dict.PTYPE = 6 THEN '3' ")
|
.append("WHEN dict.SPEC_ORIGIN = 1 AND dict.PTYPE = 6 THEN '3' ")
|
||||||
.append("END AS TY, ")
|
.append("END AS TY, ")
|
||||||
.append("TO_CHAR(we.TM, 'yyyy') AS YR ")
|
.append("TO_CHAR(we.TM, 'yyyy') AS YR ")
|
||||||
.append("FROM SD_WE_B_H sec ")
|
.append("FROM SD_WE_B_H section ")
|
||||||
.append("INNER JOIN SD_WE_R we ON sec.STCD = we.STCD ")
|
.append("INNER JOIN SD_WE_R we ON section.STCD = we.STCD ")
|
||||||
.append(" AND NVL(we.IS_DELETED, 0) = 0 ")
|
.append(" AND NVL(we.IS_DELETED, 0) = 0 ")
|
||||||
.append(" AND NVL(we.STATUS, 1) = 1 ")
|
.append(" AND NVL(we.STATUS, 1) = 1 ")
|
||||||
.append("INNER JOIN SD_WEFISH_R fish ON we.ID = fish.WER_ID ")
|
.append("INNER JOIN SD_WEFISH_R fish ON we.ID = fish.WER_ID ")
|
||||||
.append(" AND NVL(fish.IS_DELETED, 0) = 0 ")
|
.append(" AND NVL(fish.IS_DELETED, 0) = 0 ")
|
||||||
.append("LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = sec.RSTCD ")
|
.append("LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = section.RSTCD ")
|
||||||
.append(" AND NVL(eng.IS_DELETED, 0) = 0 ")
|
.append(" AND NVL(eng.IS_DELETED, 0) = 0 ")
|
||||||
.append("LEFT JOIN SD_FISHDICTORY_B dict ON fish.FTP = dict.ID ")
|
.append("LEFT JOIN SD_FISHDICTORY_B dict ON fish.FTP = dict.ID ")
|
||||||
.append(" AND NVL(dict.IS_DELETED, 0) = 0 ")
|
.append(" AND NVL(dict.IS_DELETED, 0) = 0 ")
|
||||||
.append("WHERE NVL(sec.USFL, 0) = 1 ");
|
.append("WHERE NVL(section.USFL, 0) = 1 ");
|
||||||
|
|
||||||
if (StrUtil.isNotBlank(baseId)) {
|
if (StrUtil.isNotBlank(baseId)) {
|
||||||
paramMap.put("weFishStatBaseId", baseId);
|
paramMap.put("weFishStatBaseId", baseId);
|
||||||
sql.append("AND sec.BASE_ID = #{map.weFishStatBaseId} ");
|
sql.append("AND section.BASE_ID = #{map.weFishStatBaseId} ");
|
||||||
}
|
}
|
||||||
if (StrUtil.isNotBlank(hbrvcd)) {
|
if (StrUtil.isNotBlank(hbrvcd)) {
|
||||||
paramMap.put("weFishStatHbrvcd", hbrvcd);
|
paramMap.put("weFishStatHbrvcd", hbrvcd);
|
||||||
sql.append("AND sec.HBRVCD = #{map.weFishStatHbrvcd} ");
|
sql.append("AND section.HBRVCD = #{map.weFishStatHbrvcd} ");
|
||||||
}
|
}
|
||||||
sql.append("AND sec.RSTCD IS NOT NULL ")
|
sql.append("AND section.RSTCD IS NOT NULL ")
|
||||||
.append("AND dict.SPEC_ORIGIN IS NOT NULL ")
|
.append("AND dict.SPEC_ORIGIN IS NOT NULL ")
|
||||||
.append("GROUP BY sec.RSTCD, eng.ENNM, ")
|
.append("GROUP BY section.RSTCD, eng.ENNM, ")
|
||||||
.append("CASE ")
|
.append("CASE ")
|
||||||
.append("WHEN dict.SPEC_ORIGIN = 2 THEN '1' ")
|
.append("WHEN dict.SPEC_ORIGIN = 2 THEN '1' ")
|
||||||
.append("WHEN dict.SPEC_ORIGIN = 1 AND NVL(dict.PTYPE, -1) <> 6 THEN '2' ")
|
.append("WHEN dict.SPEC_ORIGIN = 1 AND NVL(dict.PTYPE, -1) <> 6 THEN '2' ")
|
||||||
@ -2189,36 +2189,36 @@ public class WeFishServiceImpl implements WeFishService {
|
|||||||
Map<String, Object> paramMap) {
|
Map<String, Object> paramMap) {
|
||||||
StringBuilder sql = new StringBuilder();
|
StringBuilder sql = new StringBuilder();
|
||||||
sql.append("SELECT ")
|
sql.append("SELECT ")
|
||||||
.append("sec.RSTCD AS rstcd, ")
|
.append("section.RSTCD AS rstcd, ")
|
||||||
.append("eng.ENNM AS rstcdName, ")
|
.append("eng.ENNM AS rstcdName, ")
|
||||||
.append("TO_CHAR(WM_CONCAT(DISTINCT sec.STCD)) AS stcd, ")
|
.append("TO_CHAR(WM_CONCAT(DISTINCT section.STCD)) AS stcd, ")
|
||||||
.append("TO_CHAR(WM_CONCAT(DISTINCT sec.STNM)) AS stnm, ")
|
.append("TO_CHAR(WM_CONCAT(DISTINCT section.STNM)) AS stnm, ")
|
||||||
.append("TO_CHAR(WM_CONCAT(DISTINCT dict.ZY_FISH_ID)) AS id ")
|
.append("TO_CHAR(WM_CONCAT(DISTINCT dict.ZY_FISH_ID)) AS id ")
|
||||||
.append("FROM SD_WE_B_H sec ")
|
.append("FROM SD_WE_B_H section ")
|
||||||
.append("INNER JOIN SD_WE_R we ON sec.STCD = we.STCD ")
|
.append("INNER JOIN SD_WE_R we ON section.STCD = we.STCD ")
|
||||||
.append(" AND NVL(we.IS_DELETED, 0) = 0 ")
|
.append(" AND NVL(we.IS_DELETED, 0) = 0 ")
|
||||||
.append(" AND NVL(we.STATUS, 1) = 1 ")
|
.append(" AND NVL(we.STATUS, 1) = 1 ")
|
||||||
.append("INNER JOIN SD_WEFISH_R fish ON we.ID = fish.WER_ID ")
|
.append("INNER JOIN SD_WEFISH_R fish ON we.ID = fish.WER_ID ")
|
||||||
.append(" AND NVL(fish.IS_DELETED, 0) = 0 ")
|
.append(" AND NVL(fish.IS_DELETED, 0) = 0 ")
|
||||||
.append("LEFT JOIN SD_ENGINFO_B_H eng ON sec.RSTCD = eng.STCD ")
|
.append("LEFT JOIN SD_ENGINFO_B_H eng ON section.RSTCD = eng.STCD ")
|
||||||
.append(" AND NVL(eng.IS_DELETED, 0) = 0 ")
|
.append(" AND NVL(eng.IS_DELETED, 0) = 0 ")
|
||||||
.append("LEFT JOIN V_SD_FISHDICTORY_B dict ON fish.FTP = dict.FISH_ID ")
|
.append("LEFT JOIN V_SD_FISHDICTORY_B dict ON fish.FTP = dict.FISH_ID ")
|
||||||
.append(" AND (sec.HBRVCD = dict.RVCD OR dict.RVCD = 'ZY') ")
|
.append(" AND (section.HBRVCD = dict.RVCD OR dict.RVCD = 'ZY') ")
|
||||||
.append("WHERE NVL(sec.USFL, 0) = 1 ")
|
.append("WHERE NVL(section.USFL, 0) = 1 ")
|
||||||
.append("AND sec.RSTCD IS NOT NULL ")
|
.append("AND section.RSTCD IS NOT NULL ")
|
||||||
.append("AND dict.ZY_FISH_ID IS NOT NULL ");
|
.append("AND dict.ZY_FISH_ID IS NOT NULL ");
|
||||||
|
|
||||||
if (StrUtil.isNotBlank(baseId)) {
|
if (StrUtil.isNotBlank(baseId)) {
|
||||||
paramMap.put("qgcWeFishDetailBaseId", baseId);
|
paramMap.put("qgcWeFishDetailBaseId", baseId);
|
||||||
sql.append("AND sec.BASE_ID = #{map.qgcWeFishDetailBaseId} ");
|
sql.append("AND section.BASE_ID = #{map.qgcWeFishDetailBaseId} ");
|
||||||
}
|
}
|
||||||
if (StrUtil.isNotBlank(rstcd)) {
|
if (StrUtil.isNotBlank(rstcd)) {
|
||||||
paramMap.put("qgcWeFishDetailRstcd", rstcd);
|
paramMap.put("qgcWeFishDetailRstcd", rstcd);
|
||||||
sql.append("AND sec.RSTCD = #{map.qgcWeFishDetailRstcd} ");
|
sql.append("AND section.RSTCD = #{map.qgcWeFishDetailRstcd} ");
|
||||||
}
|
}
|
||||||
if (StrUtil.isNotBlank(rvcd)) {
|
if (StrUtil.isNotBlank(rvcd)) {
|
||||||
paramMap.put("qgcWeFishDetailRvcd", rvcd);
|
paramMap.put("qgcWeFishDetailRvcd", rvcd);
|
||||||
sql.append("AND sec.HBRVCD = #{map.qgcWeFishDetailRvcd} ");
|
sql.append("AND section.HBRVCD = #{map.qgcWeFishDetailRvcd} ");
|
||||||
}
|
}
|
||||||
if (StrUtil.isNotBlank(yr)) {
|
if (StrUtil.isNotBlank(yr)) {
|
||||||
paramMap.put("qgcWeFishDetailYr", yr);
|
paramMap.put("qgcWeFishDetailYr", yr);
|
||||||
@ -2233,7 +2233,7 @@ public class WeFishServiceImpl implements WeFishService {
|
|||||||
.append("END = #{map.qgcWeFishDetailTy} ");
|
.append("END = #{map.qgcWeFishDetailTy} ");
|
||||||
}
|
}
|
||||||
|
|
||||||
sql.append("GROUP BY sec.RSTCD, eng.ENNM ")
|
sql.append("GROUP BY section.RSTCD, eng.ENNM ")
|
||||||
.append("ORDER BY eng.ENNM ASC NULLS LAST");
|
.append("ORDER BY eng.ENNM ASC NULLS LAST");
|
||||||
return sql.toString();
|
return sql.toString();
|
||||||
}
|
}
|
||||||
@ -2246,36 +2246,36 @@ public class WeFishServiceImpl implements WeFishService {
|
|||||||
Map<String, Object> paramMap) {
|
Map<String, Object> paramMap) {
|
||||||
StringBuilder sql = new StringBuilder();
|
StringBuilder sql = new StringBuilder();
|
||||||
sql.append("SELECT ")
|
sql.append("SELECT ")
|
||||||
.append("sec.RSTCD AS rstcd, ")
|
.append("section.RSTCD AS rstcd, ")
|
||||||
.append("eng.ENNM AS rstcdName, ")
|
.append("eng.ENNM AS rstcdName, ")
|
||||||
.append("TO_CHAR(WM_CONCAT(DISTINCT sec.STCD)) AS stcd, ")
|
.append("TO_CHAR(WM_CONCAT(DISTINCT section.STCD)) AS stcd, ")
|
||||||
.append("TO_CHAR(WM_CONCAT(DISTINCT sec.STNM)) AS stnm, ")
|
.append("TO_CHAR(WM_CONCAT(DISTINCT section.STNM)) AS stnm, ")
|
||||||
.append("TO_CHAR(WM_CONCAT(DISTINCT dict.NAME)) AS name ")
|
.append("TO_CHAR(WM_CONCAT(DISTINCT dict.NAME)) AS name ")
|
||||||
.append("FROM SD_WE_B_H sec ")
|
.append("FROM SD_WE_B_H section ")
|
||||||
.append("INNER JOIN SD_WE_R we ON sec.STCD = we.STCD ")
|
.append("INNER JOIN SD_WE_R we ON section.STCD = we.STCD ")
|
||||||
.append(" AND NVL(we.IS_DELETED, 0) = 0 ")
|
.append(" AND NVL(we.IS_DELETED, 0) = 0 ")
|
||||||
.append(" AND NVL(we.STATUS, 1) = 1 ")
|
.append(" AND NVL(we.STATUS, 1) = 1 ")
|
||||||
.append("INNER JOIN SD_WEFISH_R fish ON we.ID = fish.WER_ID ")
|
.append("INNER JOIN SD_WEFISH_R fish ON we.ID = fish.WER_ID ")
|
||||||
.append(" AND NVL(fish.IS_DELETED, 0) = 0 ")
|
.append(" AND NVL(fish.IS_DELETED, 0) = 0 ")
|
||||||
.append("LEFT JOIN SD_ENGINFO_B_H eng ON sec.RSTCD = eng.STCD ")
|
.append("LEFT JOIN SD_ENGINFO_B_H eng ON section.RSTCD = eng.STCD ")
|
||||||
.append(" AND NVL(eng.IS_DELETED, 0) = 0 ")
|
.append(" AND NVL(eng.IS_DELETED, 0) = 0 ")
|
||||||
.append("LEFT JOIN SD_FISHDICTORY_B dict ON fish.FTP = dict.ID ")
|
.append("LEFT JOIN SD_FISHDICTORY_B dict ON fish.FTP = dict.ID ")
|
||||||
.append(" AND NVL(dict.IS_DELETED, 0) = 0 ")
|
.append(" AND NVL(dict.IS_DELETED, 0) = 0 ")
|
||||||
.append("WHERE NVL(sec.USFL, 0) = 1 ")
|
.append("WHERE NVL(section.USFL, 0) = 1 ")
|
||||||
.append("AND sec.RSTCD IS NOT NULL ")
|
.append("AND section.RSTCD IS NOT NULL ")
|
||||||
.append("AND dict.NAME IS NOT NULL ");
|
.append("AND dict.NAME IS NOT NULL ");
|
||||||
|
|
||||||
if (StrUtil.isNotBlank(baseId)) {
|
if (StrUtil.isNotBlank(baseId)) {
|
||||||
paramMap.put("weFishDetailBaseId", baseId);
|
paramMap.put("weFishDetailBaseId", baseId);
|
||||||
sql.append("AND sec.BASE_ID = #{map.weFishDetailBaseId} ");
|
sql.append("AND section.BASE_ID = #{map.weFishDetailBaseId} ");
|
||||||
}
|
}
|
||||||
if (StrUtil.isNotBlank(rstcd)) {
|
if (StrUtil.isNotBlank(rstcd)) {
|
||||||
paramMap.put("weFishDetailRstcd", rstcd);
|
paramMap.put("weFishDetailRstcd", rstcd);
|
||||||
sql.append("AND sec.RSTCD = #{map.weFishDetailRstcd} ");
|
sql.append("AND section.RSTCD = #{map.weFishDetailRstcd} ");
|
||||||
}
|
}
|
||||||
if (StrUtil.isNotBlank(rvcd)) {
|
if (StrUtil.isNotBlank(rvcd)) {
|
||||||
paramMap.put("weFishDetailRvcd", rvcd);
|
paramMap.put("weFishDetailRvcd", rvcd);
|
||||||
sql.append("AND sec.HBRVCD = #{map.weFishDetailRvcd} ");
|
sql.append("AND section.HBRVCD = #{map.weFishDetailRvcd} ");
|
||||||
}
|
}
|
||||||
if (StrUtil.isNotBlank(yr)) {
|
if (StrUtil.isNotBlank(yr)) {
|
||||||
paramMap.put("weFishDetailYr", yr);
|
paramMap.put("weFishDetailYr", yr);
|
||||||
@ -2290,7 +2290,7 @@ public class WeFishServiceImpl implements WeFishService {
|
|||||||
.append("END = #{map.weFishDetailTy} ");
|
.append("END = #{map.weFishDetailTy} ");
|
||||||
}
|
}
|
||||||
|
|
||||||
sql.append("GROUP BY sec.RSTCD, eng.ENNM ")
|
sql.append("GROUP BY section.RSTCD, eng.ENNM ")
|
||||||
.append("ORDER BY eng.ENNM ASC NULLS LAST");
|
.append("ORDER BY eng.ENNM ASC NULLS LAST");
|
||||||
return sql.toString();
|
return sql.toString();
|
||||||
}
|
}
|
||||||
@ -2303,36 +2303,36 @@ public class WeFishServiceImpl implements WeFishService {
|
|||||||
Map<String, Object> paramMap) {
|
Map<String, Object> paramMap) {
|
||||||
StringBuilder sql = new StringBuilder();
|
StringBuilder sql = new StringBuilder();
|
||||||
sql.append("SELECT ")
|
sql.append("SELECT ")
|
||||||
.append("sec.RSTCD AS rstcd, ")
|
.append("section.RSTCD AS rstcd, ")
|
||||||
.append("eng.ENNM AS rstcdName, ")
|
.append("eng.ENNM AS rstcdName, ")
|
||||||
.append("sec.STCD AS stcd, ")
|
.append("section.STCD AS stcd, ")
|
||||||
.append("sec.STNM AS stnm, ")
|
.append("section.STNM AS stnm, ")
|
||||||
.append("dict.ZY_FISH_ID AS id ")
|
.append("dict.ZY_FISH_ID AS id ")
|
||||||
.append("FROM SD_WE_B_H sec ")
|
.append("FROM SD_WE_B_H section ")
|
||||||
.append("INNER JOIN SD_WE_R we ON sec.STCD = we.STCD ")
|
.append("INNER JOIN SD_WE_R we ON section.STCD = we.STCD ")
|
||||||
.append(" AND NVL(we.IS_DELETED, 0) = 0 ")
|
.append(" AND NVL(we.IS_DELETED, 0) = 0 ")
|
||||||
.append(" AND NVL(we.STATUS, 1) = 1 ")
|
.append(" AND NVL(we.STATUS, 1) = 1 ")
|
||||||
.append("INNER JOIN SD_WEFISH_R fish ON we.ID = fish.WER_ID ")
|
.append("INNER JOIN SD_WEFISH_R fish ON we.ID = fish.WER_ID ")
|
||||||
.append(" AND NVL(fish.IS_DELETED, 0) = 0 ")
|
.append(" AND NVL(fish.IS_DELETED, 0) = 0 ")
|
||||||
.append("LEFT JOIN SD_ENGINFO_B_H eng ON sec.RSTCD = eng.STCD ")
|
.append("LEFT JOIN SD_ENGINFO_B_H eng ON section.RSTCD = eng.STCD ")
|
||||||
.append(" AND NVL(eng.IS_DELETED, 0) = 0 ")
|
.append(" AND NVL(eng.IS_DELETED, 0) = 0 ")
|
||||||
.append("LEFT JOIN V_SD_FISHDICTORY_B dict ON fish.FTP = dict.FISH_ID ")
|
.append("LEFT JOIN V_SD_FISHDICTORY_B dict ON fish.FTP = dict.FISH_ID ")
|
||||||
.append(" AND (sec.HBRVCD = dict.RVCD OR dict.RVCD = 'ZY') ")
|
.append(" AND (section.HBRVCD = dict.RVCD OR dict.RVCD = 'ZY') ")
|
||||||
.append("WHERE NVL(sec.USFL, 0) = 1 ")
|
.append("WHERE NVL(section.USFL, 0) = 1 ")
|
||||||
.append("AND sec.RSTCD IS NOT NULL ")
|
.append("AND section.RSTCD IS NOT NULL ")
|
||||||
.append("AND dict.ZY_FISH_ID IS NOT NULL ");
|
.append("AND dict.ZY_FISH_ID IS NOT NULL ");
|
||||||
|
|
||||||
if (StrUtil.isNotBlank(baseId)) {
|
if (StrUtil.isNotBlank(baseId)) {
|
||||||
paramMap.put("hbbQgcWeFishDetailBaseId", baseId);
|
paramMap.put("hbbQgcWeFishDetailBaseId", baseId);
|
||||||
sql.append("AND sec.BASE_ID = #{map.hbbQgcWeFishDetailBaseId} ");
|
sql.append("AND section.BASE_ID = #{map.hbbQgcWeFishDetailBaseId} ");
|
||||||
}
|
}
|
||||||
if (StrUtil.isNotBlank(rstcd)) {
|
if (StrUtil.isNotBlank(rstcd)) {
|
||||||
paramMap.put("hbbQgcWeFishDetailRstcd", rstcd);
|
paramMap.put("hbbQgcWeFishDetailRstcd", rstcd);
|
||||||
sql.append("AND sec.RSTCD = #{map.hbbQgcWeFishDetailRstcd} ");
|
sql.append("AND section.RSTCD = #{map.hbbQgcWeFishDetailRstcd} ");
|
||||||
}
|
}
|
||||||
if (StrUtil.isNotBlank(rvcd)) {
|
if (StrUtil.isNotBlank(rvcd)) {
|
||||||
paramMap.put("hbbQgcWeFishDetailRvcd", rvcd);
|
paramMap.put("hbbQgcWeFishDetailRvcd", rvcd);
|
||||||
sql.append("AND sec.HBRVCD = #{map.hbbQgcWeFishDetailRvcd} ");
|
sql.append("AND section.HBRVCD = #{map.hbbQgcWeFishDetailRvcd} ");
|
||||||
}
|
}
|
||||||
if (StrUtil.isNotBlank(yr)) {
|
if (StrUtil.isNotBlank(yr)) {
|
||||||
paramMap.put("hbbQgcWeFishDetailYr", yr);
|
paramMap.put("hbbQgcWeFishDetailYr", yr);
|
||||||
@ -2347,8 +2347,8 @@ public class WeFishServiceImpl implements WeFishService {
|
|||||||
.append("END = #{map.hbbQgcWeFishDetailTy} ");
|
.append("END = #{map.hbbQgcWeFishDetailTy} ");
|
||||||
}
|
}
|
||||||
|
|
||||||
sql.append("GROUP BY sec.RSTCD, eng.ENNM, sec.STCD, sec.STNM,dict.ZY_FISH_ID ")
|
sql.append("GROUP BY section.RSTCD, eng.ENNM, section.STCD, section.STNM,dict.ZY_FISH_ID ")
|
||||||
.append("ORDER BY eng.ENNM ASC NULLS LAST, sec.STNM ASC NULLS LAST");
|
.append("ORDER BY eng.ENNM ASC NULLS LAST, section.STNM ASC NULLS LAST");
|
||||||
return sql.toString();
|
return sql.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2364,27 +2364,27 @@ public class WeFishServiceImpl implements WeFishService {
|
|||||||
.append("WHEN dict.SPEC_ORIGIN = 1 AND NVL(dict.PTYPE, -1) <> 6 THEN '2' ")
|
.append("WHEN dict.SPEC_ORIGIN = 1 AND NVL(dict.PTYPE, -1) <> 6 THEN '2' ")
|
||||||
.append("WHEN dict.SPEC_ORIGIN = 1 AND dict.PTYPE = 6 THEN '3' ")
|
.append("WHEN dict.SPEC_ORIGIN = 1 AND dict.PTYPE = 6 THEN '3' ")
|
||||||
.append("END AS ty ")
|
.append("END AS ty ")
|
||||||
.append("FROM SD_WE_B_H sec ")
|
.append("FROM SD_WE_B_H section ")
|
||||||
.append("INNER JOIN SD_WE_R we ON sec.STCD = we.STCD ")
|
.append("INNER JOIN SD_WE_R we ON section.STCD = we.STCD ")
|
||||||
.append(" AND NVL(we.IS_DELETED, 0) = 0 ")
|
.append(" AND NVL(we.IS_DELETED, 0) = 0 ")
|
||||||
.append(" AND NVL(we.STATUS, 1) = 1 ")
|
.append(" AND NVL(we.STATUS, 1) = 1 ")
|
||||||
.append("INNER JOIN SD_WEFISH_R fish ON we.ID = fish.WER_ID ")
|
.append("INNER JOIN SD_WEFISH_R fish ON we.ID = fish.WER_ID ")
|
||||||
.append(" AND NVL(fish.IS_DELETED, 0) = 0 ")
|
.append(" AND NVL(fish.IS_DELETED, 0) = 0 ")
|
||||||
.append("LEFT JOIN SD_FISHDICTORY_B dict ON fish.FTP = dict.ID ")
|
.append("LEFT JOIN SD_FISHDICTORY_B dict ON fish.FTP = dict.ID ")
|
||||||
.append(" AND NVL(dict.IS_DELETED, 0) = 0 ")
|
.append(" AND NVL(dict.IS_DELETED, 0) = 0 ")
|
||||||
.append("WHERE NVL(sec.USFL, 0) = 1 ");
|
.append("WHERE NVL(section.USFL, 0) = 1 ");
|
||||||
|
|
||||||
if (StrUtil.isNotBlank(baseId)) {
|
if (StrUtil.isNotBlank(baseId)) {
|
||||||
paramMap.put("weFishStatTabBaseId", baseId);
|
paramMap.put("weFishStatTabBaseId", baseId);
|
||||||
sql.append("AND sec.BASE_ID = #{map.weFishStatTabBaseId} ");
|
sql.append("AND section.BASE_ID = #{map.weFishStatTabBaseId} ");
|
||||||
}
|
}
|
||||||
if (StrUtil.isNotBlank(rvcd)) {
|
if (StrUtil.isNotBlank(rvcd)) {
|
||||||
paramMap.put("weFishStatTabRvcd", rvcd);
|
paramMap.put("weFishStatTabRvcd", rvcd);
|
||||||
sql.append("AND sec.HBRVCD = #{map.weFishStatTabRvcd} ");
|
sql.append("AND section.HBRVCD = #{map.weFishStatTabRvcd} ");
|
||||||
}
|
}
|
||||||
if (StrUtil.isNotBlank(rstcd)) {
|
if (StrUtil.isNotBlank(rstcd)) {
|
||||||
paramMap.put("weFishStatTabRstcd", rstcd);
|
paramMap.put("weFishStatTabRstcd", rstcd);
|
||||||
sql.append("AND sec.RSTCD = #{map.weFishStatTabRstcd} ");
|
sql.append("AND section.RSTCD = #{map.weFishStatTabRstcd} ");
|
||||||
}
|
}
|
||||||
if (StrUtil.isNotBlank(yr)) {
|
if (StrUtil.isNotBlank(yr)) {
|
||||||
paramMap.put("weFishStatTabYr", yr);
|
paramMap.put("weFishStatTabYr", yr);
|
||||||
@ -2547,7 +2547,7 @@ public class WeFishServiceImpl implements WeFishService {
|
|||||||
"eng.RVCD_NAME AS rvcdName, " +
|
"eng.RVCD_NAME AS rvcdName, " +
|
||||||
"eng.HBRVCD AS hbrvcd, " +
|
"eng.HBRVCD AS hbrvcd, " +
|
||||||
"eng.HBRVCD_NAME AS hbrvcdName, " +
|
"eng.HBRVCD_NAME AS hbrvcdName, " +
|
||||||
"sec.RSTCD AS rstcd, " +
|
"section.RSTCD AS rstcd, " +
|
||||||
"eng.ENNM AS ennm, " +
|
"eng.ENNM AS ennm, " +
|
||||||
"eng.BASE_ID AS baseId, " +
|
"eng.BASE_ID AS baseId, " +
|
||||||
"eng.BASE_NAME AS baseName, " +
|
"eng.BASE_NAME AS baseName, " +
|
||||||
@ -2557,9 +2557,9 @@ public class WeFishServiceImpl implements WeFishService {
|
|||||||
"FROM SD_WE_R we " +
|
"FROM SD_WE_R we " +
|
||||||
"INNER JOIN SD_WEFISH_R fish ON we.ID = fish.WER_ID " +
|
"INNER JOIN SD_WEFISH_R fish ON we.ID = fish.WER_ID " +
|
||||||
" AND NVL(fish.IS_DELETED, 0) = 0 " +
|
" AND NVL(fish.IS_DELETED, 0) = 0 " +
|
||||||
"INNER JOIN SD_WE_B_H sec ON we.STCD = sec.STCD " +
|
"INNER JOIN SD_WE_B_H section ON we.STCD = section.STCD " +
|
||||||
" AND NVL(sec.USFL, 0) = 1 " +
|
" AND NVL(section.USFL, 0) = 1 " +
|
||||||
"INNER JOIN SD_ENGINFO_B_H eng ON eng.STCD = sec.RSTCD " +
|
"INNER JOIN SD_ENGINFO_B_H eng ON eng.STCD = section.RSTCD " +
|
||||||
" AND NVL(eng.IS_DELETED, 0) = 0 " +
|
" AND NVL(eng.IS_DELETED, 0) = 0 " +
|
||||||
"INNER JOIN V_SD_FISHDICTORY_B dict ON dict.FISH_ID = fish.FTP " +
|
"INNER JOIN V_SD_FISHDICTORY_B dict ON dict.FISH_ID = fish.FTP " +
|
||||||
" AND (eng.HBRVCD = dict.RVCD OR dict.RVCD = 'ZY') " +
|
" AND (eng.HBRVCD = dict.RVCD OR dict.RVCD = 'ZY') " +
|
||||||
@ -2580,11 +2580,11 @@ public class WeFishServiceImpl implements WeFishService {
|
|||||||
end = parseDateTimeSafely(endTime);
|
end = parseDateTimeSafely(endTime);
|
||||||
}
|
}
|
||||||
StringBuilder sql = new StringBuilder();
|
StringBuilder sql = new StringBuilder();
|
||||||
sql.append("SELECT agg.ftp AS ftp, sec.STCD AS stcd, sec.RSTCD AS rstcds, ")
|
sql.append("SELECT agg.ftp AS ftp, section.STCD AS stcd, section.RSTCD AS rstcds, ")
|
||||||
.append("sec.STNM AS stnm, eng.ENNM AS ennm, ")
|
.append("section.STNM AS stnm, eng.ENNM AS ennm, ")
|
||||||
.append("sec.LGTD AS lgtd, sec.LTTD AS lttd, ")
|
.append("section.LGTD AS lgtd, section.LTTD AS lttd, ")
|
||||||
.append("'ylfb' AS sttp, 'ylfb' AS sttpMap, ")
|
.append("'ylfb' AS sttp, 'ylfb' AS sttpMap, ")
|
||||||
.append("sec.RVCD AS rvcd, sec.ADDVCD AS addvcd, sec.BASE_ID AS baseId, ")
|
.append("section.RVCD AS rvcd, section.ADDVCD AS addvcd, section.BASE_ID AS baseId, ")
|
||||||
.append("'WE' AS sttpCode, 'ylfb' AS anchoPointState, '鱼类分布' AS titleName, ")
|
.append("'WE' AS sttpCode, 'ylfb' AS anchoPointState, '鱼类分布' AS titleName, ")
|
||||||
.append("eng.ELEV AS dtmel ")
|
.append("eng.ELEV AS dtmel ")
|
||||||
.append("FROM (")
|
.append("FROM (")
|
||||||
@ -2592,12 +2592,12 @@ public class WeFishServiceImpl implements WeFishService {
|
|||||||
.append("FROM (")
|
.append("FROM (")
|
||||||
.append("SELECT dict.ZY_FISH_ID AS ID, we.STCD AS stcd ")
|
.append("SELECT dict.ZY_FISH_ID AS ID, we.STCD AS stcd ")
|
||||||
.append("FROM SD_WE_R we ")
|
.append("FROM SD_WE_R we ")
|
||||||
.append("INNER JOIN SD_WE_B_H sec ON we.STCD = sec.STCD ")
|
.append("INNER JOIN SD_WE_B_H section ON we.STCD = section.STCD ")
|
||||||
.append(" AND NVL(sec.USFL, 0) = 1 ")
|
.append(" AND NVL(section.USFL, 0) = 1 ")
|
||||||
.append("INNER JOIN SD_WEFISH_R fish ON we.ID = fish.WER_ID ")
|
.append("INNER JOIN SD_WEFISH_R fish ON we.ID = fish.WER_ID ")
|
||||||
.append(" AND NVL(fish.IS_DELETED, 0) = 0 ")
|
.append(" AND NVL(fish.IS_DELETED, 0) = 0 ")
|
||||||
.append("INNER JOIN V_SD_FISHDICTORY_B dict ON dict.FISH_ID = fish.FTP ")
|
.append("INNER JOIN V_SD_FISHDICTORY_B dict ON dict.FISH_ID = fish.FTP ")
|
||||||
.append(" AND (sec.HBRVCD = dict.RVCD OR dict.RVCD = 'ZY') ")
|
.append(" AND (section.HBRVCD = dict.RVCD OR dict.RVCD = 'ZY') ")
|
||||||
.append("WHERE NVL(we.IS_DELETED, 0) = 0 ")
|
.append("WHERE NVL(we.IS_DELETED, 0) = 0 ")
|
||||||
.append("AND NVL(we.STATUS, 1) = 1 ");
|
.append("AND NVL(we.STATUS, 1) = 1 ");
|
||||||
|
|
||||||
@ -2625,12 +2625,12 @@ public class WeFishServiceImpl implements WeFishService {
|
|||||||
sql.append("AND we.STCD IN (")
|
sql.append("AND we.STCD IN (")
|
||||||
.append("SELECT a.STCD ")
|
.append("SELECT a.STCD ")
|
||||||
.append("FROM SD_WE_R a ")
|
.append("FROM SD_WE_R a ")
|
||||||
.append("INNER JOIN SD_WE_B_H sec2 ON a.STCD = sec2.STCD ")
|
.append("INNER JOIN SD_WE_B_H section2 ON a.STCD = section2.STCD ")
|
||||||
.append(" AND NVL(sec2.USFL, 0) = 1 ")
|
.append(" AND NVL(section2.USFL, 0) = 1 ")
|
||||||
.append("INNER JOIN SD_WEFISH_R b ON a.ID = b.WER_ID ")
|
.append("INNER JOIN SD_WEFISH_R b ON a.ID = b.WER_ID ")
|
||||||
.append(" AND NVL(b.IS_DELETED, 0) = 0 ")
|
.append(" AND NVL(b.IS_DELETED, 0) = 0 ")
|
||||||
.append("INNER JOIN V_SD_FISHDICTORY_B c ON c.FISH_ID = b.FTP ")
|
.append("INNER JOIN V_SD_FISHDICTORY_B c ON c.FISH_ID = b.FTP ")
|
||||||
.append(" AND (sec2.HBRVCD = c.RVCD OR c.RVCD = 'ZY') ")
|
.append(" AND (section2.HBRVCD = c.RVCD OR c.RVCD = 'ZY') ")
|
||||||
.append("WHERE NVL(a.IS_DELETED, 0) = 0 ")
|
.append("WHERE NVL(a.IS_DELETED, 0) = 0 ")
|
||||||
.append("AND NVL(a.STATUS, 1) = 1 ");
|
.append("AND NVL(a.STATUS, 1) = 1 ");
|
||||||
if (start != null && end != null) {
|
if (start != null && end != null) {
|
||||||
@ -2644,16 +2644,16 @@ public class WeFishServiceImpl implements WeFishService {
|
|||||||
sql.append("GROUP BY we.STCD, dict.ZY_FISH_ID")
|
sql.append("GROUP BY we.STCD, dict.ZY_FISH_ID")
|
||||||
.append(") t GROUP BY t.stcd")
|
.append(") t GROUP BY t.stcd")
|
||||||
.append(") agg ")
|
.append(") agg ")
|
||||||
.append("INNER JOIN SD_WE_B_H sec ON agg.stcd = sec.STCD ")
|
.append("INNER JOIN SD_WE_B_H section ON agg.stcd = section.STCD ")
|
||||||
.append(" AND NVL(sec.USFL, 0) = 1 ")
|
.append(" AND NVL(section.USFL, 0) = 1 ")
|
||||||
.append("LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = sec.RSTCD ")
|
.append("LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = section.RSTCD ")
|
||||||
.append(" AND NVL(eng.IS_DELETED, 0) = 0 ")
|
.append(" AND NVL(eng.IS_DELETED, 0) = 0 ")
|
||||||
.append("WHERE 1 = 1 ");
|
.append("WHERE 1 = 1 ");
|
||||||
if (StrUtil.isNotBlank(baseId)) {
|
if (StrUtil.isNotBlank(baseId)) {
|
||||||
paramMap.put("weFishPointBaseId", baseId);
|
paramMap.put("weFishPointBaseId", baseId);
|
||||||
sql.append("AND sec.BASE_ID = #{map.weFishPointBaseId} ");
|
sql.append("AND section.BASE_ID = #{map.weFishPointBaseId} ");
|
||||||
}
|
}
|
||||||
sql.append("ORDER BY sec.STCD ASC");
|
sql.append("ORDER BY section.STCD ASC");
|
||||||
return sql.toString();
|
return sql.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2669,14 +2669,14 @@ public class WeFishServiceImpl implements WeFishService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return switch (field) {
|
return switch (field) {
|
||||||
case "stcd" -> "sec.STCD";
|
case "stcd" -> "section.STCD";
|
||||||
case "lgtd" -> "sec.LGTD";
|
case "lgtd" -> "section.LGTD";
|
||||||
case "stnm", "titleName" -> "sec.STNM";
|
case "stnm", "titleName" -> "section.STNM";
|
||||||
case "ennm" -> "eng.ENNM";
|
case "ennm" -> "eng.ENNM";
|
||||||
case "rvcd" -> "sec.RVCD";
|
case "rvcd" -> "section.RVCD";
|
||||||
case "addvcd" -> "sec.ADDVCD";
|
case "addvcd" -> "section.ADDVCD";
|
||||||
case "baseId" -> "sec.BASE_ID";
|
case "baseId" -> "section.BASE_ID";
|
||||||
case "rstcd", "rstcds" -> "sec.RSTCD";
|
case "rstcd", "rstcds" -> "section.RSTCD";
|
||||||
case "tm" -> "latest.TM";
|
case "tm" -> "latest.TM";
|
||||||
default -> null;
|
default -> null;
|
||||||
};
|
};
|
||||||
@ -2709,13 +2709,13 @@ public class WeFishServiceImpl implements WeFishService {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return switch (field) {
|
return switch (field) {
|
||||||
case "stcd" -> "sec.STCD";
|
case "stcd" -> "section.STCD";
|
||||||
case "stnm", "titleName" -> "sec.STNM";
|
case "stnm", "titleName" -> "section.STNM";
|
||||||
case "ennm" -> "eng.ENNM";
|
case "ennm" -> "eng.ENNM";
|
||||||
case "tm" -> "latest.TM";
|
case "tm" -> "latest.TM";
|
||||||
case "rvcd" -> "sec.RVCD";
|
case "rvcd" -> "section.RVCD";
|
||||||
case "addvcd" -> "sec.ADDVCD";
|
case "addvcd" -> "section.ADDVCD";
|
||||||
case "baseId" -> "sec.BASE_ID";
|
case "baseId" -> "section.BASE_ID";
|
||||||
case "siteStepSort" -> "siteSort.SORT";
|
case "siteStepSort" -> "siteSort.SORT";
|
||||||
default -> null;
|
default -> null;
|
||||||
};
|
};
|
||||||
@ -3949,21 +3949,21 @@ public class WeFishServiceImpl implements WeFishService {
|
|||||||
.append("COUNT(DISTINCT we.STCD) AS stcdCount, ")
|
.append("COUNT(DISTINCT we.STCD) AS stcdCount, ")
|
||||||
.append("COUNT(DISTINCT fish.FTP) AS ftpCount, ")
|
.append("COUNT(DISTINCT fish.FTP) AS ftpCount, ")
|
||||||
.append("NVL(SUM(NVL(fish.FCNT, 0)), 0) AS fcntSum ")
|
.append("NVL(SUM(NVL(fish.FCNT, 0)), 0) AS fcntSum ")
|
||||||
.append("FROM SD_WE_B_H sec ")
|
.append("FROM SD_WE_B_H section ")
|
||||||
.append("INNER JOIN SD_WE_R we ON sec.STCD = we.STCD ")
|
.append("INNER JOIN SD_WE_R we ON section.STCD = we.STCD ")
|
||||||
.append(" AND NVL(we.IS_DELETED, 0) = 0 ")
|
.append(" AND NVL(we.IS_DELETED, 0) = 0 ")
|
||||||
.append(" AND NVL(we.STATUS, 1) = 1 ")
|
.append(" AND NVL(we.STATUS, 1) = 1 ")
|
||||||
.append("LEFT JOIN SD_WEFISH_R fish ON fish.WER_ID = we.ID ")
|
.append("LEFT JOIN SD_WEFISH_R fish ON fish.WER_ID = we.ID ")
|
||||||
.append(" AND NVL(fish.IS_DELETED, 0) = 0 ")
|
.append(" AND NVL(fish.IS_DELETED, 0) = 0 ")
|
||||||
.append("WHERE NVL(sec.USFL, 0) = 1 ");
|
.append("WHERE NVL(section.USFL, 0) = 1 ");
|
||||||
|
|
||||||
if (StrUtil.isNotBlank(baseId)) {
|
if (StrUtil.isNotBlank(baseId)) {
|
||||||
paramMap.put("weStaticsBaseId", baseId);
|
paramMap.put("weStaticsBaseId", baseId);
|
||||||
sql.append("AND sec.BASE_ID = #{map.weStaticsBaseId} ");
|
sql.append("AND section.BASE_ID = #{map.weStaticsBaseId} ");
|
||||||
}
|
}
|
||||||
if (StrUtil.isNotBlank(hbrvcd)) {
|
if (StrUtil.isNotBlank(hbrvcd)) {
|
||||||
paramMap.put("weStaticsHbrvcd", hbrvcd);
|
paramMap.put("weStaticsHbrvcd", hbrvcd);
|
||||||
sql.append("AND sec.HBRVCD = #{map.weStaticsHbrvcd} ");
|
sql.append("AND section.HBRVCD = #{map.weStaticsHbrvcd} ");
|
||||||
}
|
}
|
||||||
if (StrUtil.isNotBlank(yr)) {
|
if (StrUtil.isNotBlank(yr)) {
|
||||||
paramMap.put("weStaticsYr", yr);
|
paramMap.put("weStaticsYr", yr);
|
||||||
@ -3981,7 +3981,7 @@ public class WeFishServiceImpl implements WeFishService {
|
|||||||
placeholders.add("#{map." + key + "}");
|
placeholders.add("#{map." + key + "}");
|
||||||
}
|
}
|
||||||
if (CollUtil.isNotEmpty(placeholders)) {
|
if (CollUtil.isNotEmpty(placeholders)) {
|
||||||
sql.append("AND sec.RSTCD IN (").append(String.join(", ", placeholders)).append(") ");
|
sql.append("AND section.RSTCD IN (").append(String.join(", ", placeholders)).append(") ");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return sql.toString();
|
return sql.toString();
|
||||||
@ -4001,8 +4001,8 @@ public class WeFishServiceImpl implements WeFishService {
|
|||||||
|
|
||||||
private String buildWeFishTDetailSql() {
|
private String buildWeFishTDetailSql() {
|
||||||
return "SELECT " +
|
return "SELECT " +
|
||||||
"sec.STCD AS stcd, " +
|
"section.STCD AS stcd, " +
|
||||||
"sec.STNM AS stnm, " +
|
"section.STNM AS stnm, " +
|
||||||
"eng.BASE_ID AS baseId, " +
|
"eng.BASE_ID AS baseId, " +
|
||||||
"eng.BASE_NAME AS baseName, " +
|
"eng.BASE_NAME AS baseName, " +
|
||||||
"eng.RVCD AS rvcd, " +
|
"eng.RVCD AS rvcd, " +
|
||||||
@ -4044,9 +4044,9 @@ public class WeFishServiceImpl implements WeFishService {
|
|||||||
"FROM SD_WE_R we " +
|
"FROM SD_WE_R we " +
|
||||||
"INNER JOIN SD_WEFISH_R fish ON fish.WER_ID = we.ID " +
|
"INNER JOIN SD_WEFISH_R fish ON fish.WER_ID = we.ID " +
|
||||||
" AND NVL(fish.IS_DELETED, 0) = 0 " +
|
" AND NVL(fish.IS_DELETED, 0) = 0 " +
|
||||||
"INNER JOIN SD_WE_B_H sec ON sec.STCD = we.STCD " +
|
"INNER JOIN SD_WE_B_H section ON section.STCD = we.STCD " +
|
||||||
" AND NVL(sec.USFL, 0) = 1 " +
|
" AND NVL(section.USFL, 0) = 1 " +
|
||||||
"LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = sec.RSTCD " +
|
"LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = section.RSTCD " +
|
||||||
" AND NVL(eng.IS_DELETED, 0) = 0 " +
|
" AND NVL(eng.IS_DELETED, 0) = 0 " +
|
||||||
"LEFT JOIN SD_FISHDICTORY_B dict ON dict.ID = fish.FTP " +
|
"LEFT JOIN SD_FISHDICTORY_B dict ON dict.ID = fish.FTP " +
|
||||||
" AND NVL(dict.IS_DELETED, 0) = 0 " +
|
" AND NVL(dict.IS_DELETED, 0) = 0 " +
|
||||||
@ -4056,8 +4056,8 @@ public class WeFishServiceImpl implements WeFishService {
|
|||||||
|
|
||||||
private String buildWeFishQgcDetailSql() {
|
private String buildWeFishQgcDetailSql() {
|
||||||
return "SELECT " +
|
return "SELECT " +
|
||||||
"sec.STCD AS stcd, " +
|
"section.STCD AS stcd, " +
|
||||||
"sec.STNM AS stnm, " +
|
"section.STNM AS stnm, " +
|
||||||
"eng.BASE_ID AS baseId, " +
|
"eng.BASE_ID AS baseId, " +
|
||||||
"eng.BASE_NAME AS baseName, " +
|
"eng.BASE_NAME AS baseName, " +
|
||||||
"eng.RVCD AS rvcd, " +
|
"eng.RVCD AS rvcd, " +
|
||||||
@ -4099,9 +4099,9 @@ public class WeFishServiceImpl implements WeFishService {
|
|||||||
"FROM SD_WE_R we " +
|
"FROM SD_WE_R we " +
|
||||||
"INNER JOIN SD_WEFISH_R fish ON fish.WER_ID = we.ID " +
|
"INNER JOIN SD_WEFISH_R fish ON fish.WER_ID = we.ID " +
|
||||||
" AND NVL(fish.IS_DELETED, 0) = 0 " +
|
" AND NVL(fish.IS_DELETED, 0) = 0 " +
|
||||||
"INNER JOIN SD_WE_B_H sec ON sec.STCD = we.STCD " +
|
"INNER JOIN SD_WE_B_H section ON section.STCD = we.STCD " +
|
||||||
// " AND NVL(sec.USFL, 0) = 1 " +
|
// " AND NVL(section.USFL, 0) = 1 " +
|
||||||
"LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = sec.RSTCD " +
|
"LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = section.RSTCD " +
|
||||||
" AND NVL(eng.IS_DELETED, 0) = 0 " +
|
" AND NVL(eng.IS_DELETED, 0) = 0 " +
|
||||||
"LEFT JOIN SD_FISHDICTORY_B dict ON dict.ID = fish.FTP " +
|
"LEFT JOIN SD_FISHDICTORY_B dict ON dict.ID = fish.FTP " +
|
||||||
// " AND (dict.RVCD = 'ZY' OR dict.RVCD = eng.HBRVCD) " +
|
// " AND (dict.RVCD = 'ZY' OR dict.RVCD = eng.HBRVCD) " +
|
||||||
|
|||||||
@ -6,13 +6,11 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|||||||
import com.yfd.platform.common.DataSourceRequest;
|
import com.yfd.platform.common.DataSourceRequest;
|
||||||
import com.yfd.platform.common.DataSourceResult;
|
import com.yfd.platform.common.DataSourceResult;
|
||||||
import com.yfd.platform.common.exception.BizException;
|
import com.yfd.platform.common.exception.BizException;
|
||||||
import com.yfd.platform.common.utils.UserNameFillHelper;
|
|
||||||
import com.yfd.platform.config.ResponseResult;
|
import com.yfd.platform.config.ResponseResult;
|
||||||
import com.yfd.platform.qgc_base.service.ISdHbrvDicService;
|
import com.yfd.platform.qgc_base.service.ISdHbrvDicService;
|
||||||
import com.yfd.platform.qgc_env.wt.service.SdWtMonitorService;
|
import com.yfd.platform.qgc_env.wt.service.SdWtMonitorService;
|
||||||
import com.yfd.platform.qgc_lygk.along.domain.MsAlongB;
|
import com.yfd.platform.qgc_lygk.along.domain.MsAlongB;
|
||||||
import com.yfd.platform.qgc_lygk.along.domain.PowerDto;
|
import com.yfd.platform.qgc_lygk.along.domain.PowerDto;
|
||||||
import com.yfd.platform.qgc_lygk.along.domain.SttpDto;
|
|
||||||
import com.yfd.platform.qgc_lygk.along.service.IMsAlongBService;
|
import com.yfd.platform.qgc_lygk.along.service.IMsAlongBService;
|
||||||
import com.yfd.platform.qgc_sys.mapcfg.service.IMapmoduleBService;
|
import com.yfd.platform.qgc_sys.mapcfg.service.IMapmoduleBService;
|
||||||
import com.yfd.platform.utils.DataSourceRequestUtil;
|
import com.yfd.platform.utils.DataSourceRequestUtil;
|
||||||
@ -43,9 +41,6 @@ public class MsAlongBController {
|
|||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private ISdHbrvDicService hbrvDicService;
|
private ISdHbrvDicService hbrvDicService;
|
||||||
|
|
||||||
@Resource
|
|
||||||
private UserNameFillHelper userNameFillHelper;
|
|
||||||
/**
|
/**
|
||||||
* 条件过滤数据列表
|
* 条件过滤数据列表
|
||||||
*/
|
*/
|
||||||
@ -53,7 +48,6 @@ public class MsAlongBController {
|
|||||||
@PostMapping("/GetKendoList")
|
@PostMapping("/GetKendoList")
|
||||||
public ResponseResult getKendoList(@RequestBody DataSourceRequest dataSourceRequest) {
|
public ResponseResult getKendoList(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||||
DataSourceResult<MsAlongB> result = msAlongBService.getKendoList(dataSourceRequest);
|
DataSourceResult<MsAlongB> result = msAlongBService.getKendoList(dataSourceRequest);
|
||||||
userNameFillHelper.fillUserNames(result.getData());
|
|
||||||
return ResponseResult.successData(result);
|
return ResponseResult.successData(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -105,11 +99,4 @@ public class MsAlongBController {
|
|||||||
DataSourceResult<PowerDto> result = msAlongBService.getKendoPage(dataSourceRequest);
|
DataSourceResult<PowerDto> result = msAlongBService.getKendoPage(dataSourceRequest);
|
||||||
return ResponseResult.successData(result);
|
return ResponseResult.successData(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping("/sttp/GetKendoList")
|
|
||||||
@Operation(summary = "查询站类信息列表(支持模糊搜索和STTP_CODE过滤)")
|
|
||||||
public ResponseResult getSttpList(@RequestBody DataSourceRequest dataSourceRequest) {
|
|
||||||
DataSourceResult<SttpDto> result = msAlongBService.getSttpList(dataSourceRequest);
|
|
||||||
return ResponseResult.successData(result);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@ -4,8 +4,6 @@ import com.baomidou.mybatisplus.annotation.IdType;
|
|||||||
import com.baomidou.mybatisplus.annotation.TableField;
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
import com.baomidou.mybatisplus.annotation.TableId;
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
import com.baomidou.mybatisplus.annotation.TableName;
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
import com.yfd.platform.annotation.UserIdField;
|
|
||||||
import com.yfd.platform.annotation.UserNameField;
|
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
@ -49,12 +47,10 @@ public class MsAlongB implements Serializable {
|
|||||||
|
|
||||||
/** 创建人 */
|
/** 创建人 */
|
||||||
@TableField("RECORD_USER")
|
@TableField("RECORD_USER")
|
||||||
@UserIdField
|
|
||||||
private String recordUser;
|
private String recordUser;
|
||||||
|
|
||||||
/** 创建人名称(非数据库字段) */
|
/** 创建人名称(非数据库字段) */
|
||||||
@TableField(exist = false)
|
@TableField(exist = false)
|
||||||
@UserNameField
|
|
||||||
private String recordUserName;
|
private String recordUserName;
|
||||||
|
|
||||||
/** 创建时间 */
|
/** 创建时间 */
|
||||||
|
|||||||
@ -41,11 +41,7 @@ public class MsAlongDetB implements Serializable {
|
|||||||
|
|
||||||
/** 排序序号 */
|
/** 排序序号 */
|
||||||
@TableField("SORT")
|
@TableField("SORT")
|
||||||
private Integer sort;
|
private String sort;
|
||||||
|
|
||||||
// /** 排序序号 */
|
|
||||||
// @TableField("SORT")
|
|
||||||
// private String sort;
|
|
||||||
|
|
||||||
/** 沿程配置表ID */
|
/** 沿程配置表ID */
|
||||||
@TableField("ALONG_ID")
|
@TableField("ALONG_ID")
|
||||||
|
|||||||
@ -1,32 +0,0 @@
|
|||||||
package com.yfd.platform.qgc_lygk.along.domain;
|
|
||||||
|
|
||||||
import lombok.Data;
|
|
||||||
|
|
||||||
import java.util.Date;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 站类信息查询结果 DTO
|
|
||||||
*/
|
|
||||||
@Data
|
|
||||||
public class SttpDto {
|
|
||||||
|
|
||||||
private String id;
|
|
||||||
private String sttpCode;
|
|
||||||
private String sttpName;
|
|
||||||
private String sttpSname;
|
|
||||||
private String description;
|
|
||||||
private Integer enabled;
|
|
||||||
private String parentId;
|
|
||||||
private String fullPath;
|
|
||||||
private Integer treeLevel;
|
|
||||||
private Integer hasChildren;
|
|
||||||
private String introduce;
|
|
||||||
private String logo;
|
|
||||||
private String inffile;
|
|
||||||
private Integer internal;
|
|
||||||
private Integer orderIndex;
|
|
||||||
private String recordUser;
|
|
||||||
private Date recordTime;
|
|
||||||
private String modifyUser;
|
|
||||||
private Date modifyTime;
|
|
||||||
}
|
|
||||||
@ -5,7 +5,6 @@ import com.yfd.platform.common.DataSourceRequest;
|
|||||||
import com.yfd.platform.common.DataSourceResult;
|
import com.yfd.platform.common.DataSourceResult;
|
||||||
import com.yfd.platform.qgc_lygk.along.domain.MsAlongB;
|
import com.yfd.platform.qgc_lygk.along.domain.MsAlongB;
|
||||||
import com.yfd.platform.qgc_lygk.along.domain.PowerDto;
|
import com.yfd.platform.qgc_lygk.along.domain.PowerDto;
|
||||||
import com.yfd.platform.qgc_lygk.along.domain.SttpDto;
|
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@ -29,14 +28,6 @@ public interface IMsAlongBService extends IService<MsAlongB> {
|
|||||||
|
|
||||||
DataSourceResult<PowerDto> getKendoPage(DataSourceRequest dataSourceRequest);
|
DataSourceResult<PowerDto> getKendoPage(DataSourceRequest dataSourceRequest);
|
||||||
|
|
||||||
/**
|
|
||||||
* 查询站类信息列表(支持模糊搜索和STTP_CODE过滤)
|
|
||||||
*
|
|
||||||
* @param dataSourceRequest 数据源请求
|
|
||||||
* @return 数据源结果
|
|
||||||
*/
|
|
||||||
DataSourceResult<SttpDto> getSttpList(DataSourceRequest dataSourceRequest);
|
|
||||||
|
|
||||||
// /**
|
// /**
|
||||||
// * 保存或更新沿程配置
|
// * 保存或更新沿程配置
|
||||||
// *
|
// *
|
||||||
|
|||||||
@ -13,7 +13,6 @@ import com.yfd.platform.qgc_base.domain.SdRvcdDic;
|
|||||||
import com.yfd.platform.qgc_base.mapper.SdRvcdDicMapper;
|
import com.yfd.platform.qgc_base.mapper.SdRvcdDicMapper;
|
||||||
import com.yfd.platform.qgc_lygk.along.domain.MsAlongB;
|
import com.yfd.platform.qgc_lygk.along.domain.MsAlongB;
|
||||||
import com.yfd.platform.qgc_lygk.along.domain.PowerDto;
|
import com.yfd.platform.qgc_lygk.along.domain.PowerDto;
|
||||||
import com.yfd.platform.qgc_lygk.along.domain.SttpDto;
|
|
||||||
import com.yfd.platform.qgc_lygk.along.mapper.MsAlongBMapper;
|
import com.yfd.platform.qgc_lygk.along.mapper.MsAlongBMapper;
|
||||||
import com.yfd.platform.qgc_lygk.along.service.IMsAlongBService;
|
import com.yfd.platform.qgc_lygk.along.service.IMsAlongBService;
|
||||||
import com.yfd.platform.utils.CodeToNameMetadataBo;
|
import com.yfd.platform.utils.CodeToNameMetadataBo;
|
||||||
@ -155,127 +154,6 @@ public class MsAlongBServiceImpl extends ServiceImpl<MsAlongBMapper, MsAlongB> i
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public DataSourceResult<SttpDto> getSttpList(DataSourceRequest dataSourceRequest) {
|
|
||||||
DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest();
|
|
||||||
|
|
||||||
StringBuilder sql = new StringBuilder("SELECT * FROM SD_STTP_B WHERE NVL(IS_DELETED, 0) = 0");
|
|
||||||
Map<String, Object> paramMap = new HashMap<>();
|
|
||||||
|
|
||||||
// 解析过滤条件
|
|
||||||
if (dataSourceRequest != null && dataSourceRequest.getFilter() != null) {
|
|
||||||
String filterSql = parseSttpFilter(dataSourceRequest.getFilter(), paramMap, new int[]{0});
|
|
||||||
if (StrUtil.isNotBlank(filterSql)) {
|
|
||||||
sql.append(" AND ").append(filterSql);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 解析排序
|
|
||||||
if (dataSourceRequest != null && CollUtil.isNotEmpty(dataSourceRequest.getSort())) {
|
|
||||||
List<String> orderList = new ArrayList<>();
|
|
||||||
for (SortDescriptor sort : dataSourceRequest.getSort()) {
|
|
||||||
String field = sort.getField();
|
|
||||||
if (StrUtil.isBlank(field) || !isSafeSttpField(field)) continue;
|
|
||||||
String direction = "asc".equalsIgnoreCase(sort.getDir()) ? "ASC" : "DESC";
|
|
||||||
orderList.add(field + " " + direction);
|
|
||||||
}
|
|
||||||
if (!orderList.isEmpty()) {
|
|
||||||
sql.append(" ORDER BY ").append(String.join(", ", orderList));
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
sql.append(" ORDER BY ORDER_INDEX ASC, STTP_CODE ASC");
|
|
||||||
}
|
|
||||||
|
|
||||||
// 执行分页查询
|
|
||||||
Page<?> page = loadOptions == null ? null :
|
|
||||||
QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake());
|
|
||||||
List<SttpDto> list = microservicDynamicSQLMapper.pageAllListWithResultType(
|
|
||||||
page, sql.toString(), paramMap, SttpDto.class
|
|
||||||
);
|
|
||||||
|
|
||||||
DataSourceResult<SttpDto> result = new DataSourceResult<>();
|
|
||||||
result.setData(list);
|
|
||||||
result.setTotal(page != null ? page.getTotal() : list.size());
|
|
||||||
result.setAggregates(new HashMap<>());
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 递归解析站类过滤条件
|
|
||||||
*/
|
|
||||||
private String parseSttpFilter(FilterDescriptor filter, Map<String, Object> paramMap, int[] paramIndex) {
|
|
||||||
if (filter == null) return "";
|
|
||||||
|
|
||||||
List<FilterDescriptor> childFilters = filter.getFilters();
|
|
||||||
if (CollUtil.isNotEmpty(childFilters)) {
|
|
||||||
List<String> childConditions = new ArrayList<>();
|
|
||||||
for (FilterDescriptor child : childFilters) {
|
|
||||||
String childSql = parseSttpFilter(child, paramMap, paramIndex);
|
|
||||||
if (StrUtil.isNotBlank(childSql)) {
|
|
||||||
childConditions.add(childSql);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (childConditions.isEmpty()) return "";
|
|
||||||
String logic = StrUtil.isNotBlank(filter.getLogic()) ? filter.getLogic() : "and";
|
|
||||||
String connector = "and".equalsIgnoreCase(logic) ? " AND " : " OR ";
|
|
||||||
return "(" + String.join(connector, childConditions) + ")";
|
|
||||||
}
|
|
||||||
|
|
||||||
String field = filter.getField();
|
|
||||||
Object value = filter.getValue();
|
|
||||||
String operator = filter.getOperator();
|
|
||||||
|
|
||||||
if (StrUtil.isBlank(field)) return "";
|
|
||||||
if (!isSafeSttpField(field)) return "";
|
|
||||||
|
|
||||||
String paramKey = "stp" + paramIndex[0]++;
|
|
||||||
paramMap.put(paramKey, value);
|
|
||||||
|
|
||||||
if ("contains".equalsIgnoreCase(operator)) {
|
|
||||||
return field + " LIKE '%' || #{map." + paramKey + "} || '%'";
|
|
||||||
} else if ("startswith".equalsIgnoreCase(operator)) {
|
|
||||||
return field + " LIKE #{map." + paramKey + "} || '%'";
|
|
||||||
} else if ("endswith".equalsIgnoreCase(operator)) {
|
|
||||||
return field + " LIKE '%' || #{map." + paramKey + "}";
|
|
||||||
} else if ("neq".equalsIgnoreCase(operator)) {
|
|
||||||
return field + " != #{map." + paramKey + "}";
|
|
||||||
} else if ("gt".equalsIgnoreCase(operator)) {
|
|
||||||
return field + " > #{map." + paramKey + "}";
|
|
||||||
} else if ("gte".equalsIgnoreCase(operator)) {
|
|
||||||
return field + " >= #{map." + paramKey + "}";
|
|
||||||
} else if ("lt".equalsIgnoreCase(operator)) {
|
|
||||||
return field + " < #{map." + paramKey + "}";
|
|
||||||
} else if ("lte".equalsIgnoreCase(operator)) {
|
|
||||||
return field + " <= #{map." + paramKey + "}";
|
|
||||||
} else if ("isnull".equalsIgnoreCase(operator)) {
|
|
||||||
paramMap.remove(paramKey);
|
|
||||||
return field + " IS NULL";
|
|
||||||
} else if ("isnotnull".equalsIgnoreCase(operator)) {
|
|
||||||
paramMap.remove(paramKey);
|
|
||||||
return field + " IS NOT NULL";
|
|
||||||
} else if (value == null) {
|
|
||||||
paramMap.remove(paramKey);
|
|
||||||
return "";
|
|
||||||
} else {
|
|
||||||
// 默认 eq
|
|
||||||
return field + " = #{map." + paramKey + "}";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 站类表安全字段白名单
|
|
||||||
*/
|
|
||||||
private boolean isSafeSttpField(String field) {
|
|
||||||
if (StrUtil.isBlank(field)) return false;
|
|
||||||
Set<String> validFields = new HashSet<>(Arrays.asList(
|
|
||||||
"ID", "STTP_CODE", "STTP_NAME", "STTP_SNAME", "DESCRIPTION",
|
|
||||||
"ENABLED", "PARENT_ID", "FULL_PATH", "TREE_LEVEL", "HAS_CHILDREN",
|
|
||||||
"INTRODUCE", "LOGO", "INFFILE", "INTERNAL", "ORDER_INDEX",
|
|
||||||
"IS_DELETED"
|
|
||||||
));
|
|
||||||
return validFields.contains(field.toUpperCase());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 递归解析 FilterDescriptor(完美适配你的内部类结构)
|
* 递归解析 FilterDescriptor(完美适配你的内部类结构)
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -81,7 +81,7 @@ public class MsAlongDetBServiceImpl extends ServiceImpl<MsAlongDetBMapper, MsAlo
|
|||||||
List<PowerDto> powerDtos = msAlongDetBMapper.getWbsbList(stcd);
|
List<PowerDto> powerDtos = msAlongDetBMapper.getWbsbList(stcd);
|
||||||
if (CollUtil.isNotEmpty(powerDtos)) {
|
if (CollUtil.isNotEmpty(powerDtos)) {
|
||||||
// 取第一个结果(通常一个 STCD 只对应一条记录)
|
// 取第一个结果(通常一个 STCD 只对应一条记录)
|
||||||
String stnm = powerDtos.getFirst().getStnm();
|
String stnm = powerDtos.get(0).getStnm();
|
||||||
record.setStnm(stnm);
|
record.setStnm(stnm);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -154,7 +154,7 @@ public class MsAlongDetBServiceImpl extends ServiceImpl<MsAlongDetBMapper, MsAlo
|
|||||||
entity.setRecordUser(SecurityUtils.getUserId()); // 创建人
|
entity.setRecordUser(SecurityUtils.getUserId()); // 创建人
|
||||||
//entity.setRecordUser(SecurityUtils.getCurrentUsername()); // 创建人
|
//entity.setRecordUser(SecurityUtils.getCurrentUsername()); // 创建人
|
||||||
if (node.getSort() != null){
|
if (node.getSort() != null){
|
||||||
entity.setSort(node.getSort()); // 若传了排序
|
entity.setSort(String.valueOf(node.getSort())); // 若传了排序
|
||||||
}
|
}
|
||||||
if (StrUtil.isBlank(entity.getId())) {
|
if (StrUtil.isBlank(entity.getId())) {
|
||||||
entity.setId(null);
|
entity.setId(null);
|
||||||
|
|||||||
@ -1,119 +0,0 @@
|
|||||||
package com.yfd.platform.qgc_sys.threedRoam.controller;
|
|
||||||
|
|
||||||
import cn.hutool.core.util.StrUtil;
|
|
||||||
import com.yfd.platform.common.DataSourceRequest;
|
|
||||||
import com.yfd.platform.common.DataSourceResult;
|
|
||||||
import com.yfd.platform.common.exception.BizException;
|
|
||||||
import com.yfd.platform.config.ResponseResult;
|
|
||||||
import com.yfd.platform.qgc_sys.threedRoam.domain.MsThreedRoamMEntity;
|
|
||||||
import com.yfd.platform.qgc_sys.threedRoam.dto.MsThreedRoamBVO;
|
|
||||||
import com.yfd.platform.qgc_sys.threedRoam.dto.MsThreedRoamMVO;
|
|
||||||
import com.yfd.platform.qgc_sys.threedRoam.service.IMsThreedRoamMService;
|
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
|
||||||
import jakarta.annotation.Resource;
|
|
||||||
import jakarta.servlet.http.HttpServletResponse;
|
|
||||||
import org.apache.poi.xssf.usermodel.XSSFRow;
|
|
||||||
import org.apache.poi.xssf.usermodel.XSSFSheet;
|
|
||||||
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
|
||||||
import org.springframework.web.bind.annotation.*;
|
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
|
||||||
|
|
||||||
import java.io.OutputStream;
|
|
||||||
import java.net.URLEncoder;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 三维漫游数据主表控制器
|
|
||||||
*
|
|
||||||
* @author migration
|
|
||||||
*/
|
|
||||||
@RestController
|
|
||||||
@RequestMapping("/threedroamb")
|
|
||||||
@Tag(name = "三维漫游数据主表控制器")
|
|
||||||
public class MsThreedRoamMController {
|
|
||||||
|
|
||||||
@Resource
|
|
||||||
private IMsThreedRoamMService msThreedRoamMService;
|
|
||||||
|
|
||||||
@PostMapping("/GetKendoListCust")
|
|
||||||
@Operation(summary = "条件过滤数据列表")
|
|
||||||
public ResponseResult getKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
|
|
||||||
DataSourceResult<MsThreedRoamMEntity> result = msThreedRoamMService.getKendoListCustReturn(dataSourceRequest);
|
|
||||||
return ResponseResult.successData(result);
|
|
||||||
}
|
|
||||||
|
|
||||||
@PostMapping("/save")
|
|
||||||
@Operation(summary = "保存三维漫游数据")
|
|
||||||
public ResponseResult save(@RequestBody MsThreedRoamMVO vo) {
|
|
||||||
if (msThreedRoamMService.save(vo)) {
|
|
||||||
return ResponseResult.success();
|
|
||||||
} else {
|
|
||||||
return ResponseResult.error("三维漫游数据保存失败");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@GetMapping("/getThreedRoamDetails")
|
|
||||||
@Operation(summary = "获取三维漫游数据详情")
|
|
||||||
public ResponseResult getThreedRoamDetails(@RequestParam("id") String id) {
|
|
||||||
return ResponseResult.successData(msThreedRoamMService.getThreedRoamDetails(id));
|
|
||||||
}
|
|
||||||
|
|
||||||
@GetMapping("/delete")
|
|
||||||
@Operation(summary = "删除三维漫游数据")
|
|
||||||
public ResponseResult delete(@RequestParam("id") String id) {
|
|
||||||
if (msThreedRoamMService.delete(id)) {
|
|
||||||
return ResponseResult.success();
|
|
||||||
} else {
|
|
||||||
return ResponseResult.error("三维漫游数据删除失败");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@PostMapping("/getThreedRoamData")
|
|
||||||
@Operation(summary = "三维漫游数据")
|
|
||||||
public MsThreedRoamBVO getThreedRoamData(@RequestBody DataSourceRequest dataSourceRequest) {
|
|
||||||
return msThreedRoamMService.getThreedRoamData(dataSourceRequest);
|
|
||||||
}
|
|
||||||
|
|
||||||
@PostMapping("/export")
|
|
||||||
@Operation(summary = "导出三维漫游数据模板")
|
|
||||||
public void export(HttpServletResponse response) {
|
|
||||||
try {
|
|
||||||
String fileName = "三维漫游数据模板";
|
|
||||||
|
|
||||||
XSSFWorkbook workBook = new XSSFWorkbook();
|
|
||||||
XSSFSheet sheet = workBook.createSheet();
|
|
||||||
workBook.setSheetName(0, "三维漫游数据模板");
|
|
||||||
|
|
||||||
XSSFRow row = sheet.createRow(0);
|
|
||||||
row.createCell(0).setCellValue("飞行路径Code");
|
|
||||||
row.createCell(1).setCellValue("飞行路径名称");
|
|
||||||
row.createCell(2).setCellValue("经度\u00B0(0-180\u00B0)");
|
|
||||||
row.createCell(3).setCellValue("纬度\u00B0(0-90\u00B0)");
|
|
||||||
row.createCell(4).setCellValue("高程(m)(小于10000m)");
|
|
||||||
row.createCell(5).setCellValue("时间(s)(小于100s)");
|
|
||||||
row.createCell(6).setCellValue("序号");
|
|
||||||
row.createCell(7).setCellValue("里程碑节点编码(电站编码)");
|
|
||||||
row.createCell(8).setCellValue("里程碑节点名称(电站名称)");
|
|
||||||
|
|
||||||
response.setContentType("application/vnd.ms-excel;charset=utf-8");
|
|
||||||
response.setHeader("Content-Disposition", "attachment;filename="
|
|
||||||
+ URLEncoder.encode(fileName, "utf-8") + ".xlsx");
|
|
||||||
OutputStream outputStream = response.getOutputStream();
|
|
||||||
workBook.write(outputStream);
|
|
||||||
outputStream.flush();
|
|
||||||
outputStream.close();
|
|
||||||
} catch (Exception e) {
|
|
||||||
// ignore
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@PostMapping("/import")
|
|
||||||
@Operation(summary = "导入三维漫游数据")
|
|
||||||
public ResponseResult importExcel(MultipartFile file) {
|
|
||||||
if (msThreedRoamMService.importData(file)) {
|
|
||||||
return ResponseResult.success();
|
|
||||||
} else {
|
|
||||||
return ResponseResult.error("导入三维漫游数据失败");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,78 +0,0 @@
|
|||||||
package com.yfd.platform.qgc_sys.threedRoam.domain;
|
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.annotation.IdType;
|
|
||||||
import com.baomidou.mybatisplus.annotation.TableField;
|
|
||||||
import com.baomidou.mybatisplus.annotation.TableId;
|
|
||||||
import com.baomidou.mybatisplus.annotation.TableName;
|
|
||||||
import lombok.Data;
|
|
||||||
|
|
||||||
import java.io.Serializable;
|
|
||||||
import java.math.BigDecimal;
|
|
||||||
import java.util.Date;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 三维漫游数据表实体(子表)
|
|
||||||
*
|
|
||||||
* @author migration
|
|
||||||
*/
|
|
||||||
@Data
|
|
||||||
@TableName("MS_THREEDROAM_B")
|
|
||||||
public class MsThreedRoamEntity implements Serializable {
|
|
||||||
|
|
||||||
private static final long serialVersionUID = 1L;
|
|
||||||
|
|
||||||
@TableId(type = IdType.ASSIGN_UUID)
|
|
||||||
@TableField("ID")
|
|
||||||
private String id;
|
|
||||||
|
|
||||||
@TableField("ROAM_ID")
|
|
||||||
private String roamId;
|
|
||||||
|
|
||||||
@TableField("CODE")
|
|
||||||
private String code;
|
|
||||||
|
|
||||||
@TableField("NAME")
|
|
||||||
private String name;
|
|
||||||
|
|
||||||
@TableField("LGTD")
|
|
||||||
private BigDecimal lgtd;
|
|
||||||
|
|
||||||
@TableField("LTTD")
|
|
||||||
private BigDecimal lttd;
|
|
||||||
|
|
||||||
@TableField("DTMEL")
|
|
||||||
private BigDecimal dtmel;
|
|
||||||
|
|
||||||
@TableField("TIME")
|
|
||||||
private BigDecimal time;
|
|
||||||
|
|
||||||
@TableField("ORDER_INDEX")
|
|
||||||
private Integer orderIndex;
|
|
||||||
|
|
||||||
@TableField("STCD")
|
|
||||||
private String stcd;
|
|
||||||
|
|
||||||
@TableField("STNM")
|
|
||||||
private String stnm;
|
|
||||||
|
|
||||||
@TableField("RECORD_USER")
|
|
||||||
private String recordUser;
|
|
||||||
|
|
||||||
@TableField("RECORD_TIME")
|
|
||||||
private Date recordTime;
|
|
||||||
|
|
||||||
@TableField("MODIFY_USER")
|
|
||||||
private String modifyUser;
|
|
||||||
|
|
||||||
@TableField("MODIFY_TIME")
|
|
||||||
private Date modifyTime;
|
|
||||||
|
|
||||||
@TableField("IS_DELETED")
|
|
||||||
private Integer isDeleted;
|
|
||||||
|
|
||||||
@TableField("DELETE_USER")
|
|
||||||
private String deleteUser;
|
|
||||||
|
|
||||||
@TableField("DELETE_TIME")
|
|
||||||
private Date deleteTime;
|
|
||||||
}
|
|
||||||
@ -1,71 +0,0 @@
|
|||||||
package com.yfd.platform.qgc_sys.threedRoam.domain;
|
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.annotation.*;
|
|
||||||
import lombok.Data;
|
|
||||||
|
|
||||||
import java.io.Serializable;
|
|
||||||
import java.util.Date;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 三维漫游数据主表实体
|
|
||||||
*
|
|
||||||
* @author migration
|
|
||||||
*/
|
|
||||||
@Data
|
|
||||||
@TableName("MS_THREEDROAMM_B")
|
|
||||||
public class MsThreedRoamMEntity implements Serializable {
|
|
||||||
|
|
||||||
private static final long serialVersionUID = 1L;
|
|
||||||
|
|
||||||
@TableId(type = IdType.ASSIGN_UUID)
|
|
||||||
@TableField("ID")
|
|
||||||
private String id;
|
|
||||||
|
|
||||||
@TableField("CODE")
|
|
||||||
private String code;
|
|
||||||
|
|
||||||
@TableField("NAME")
|
|
||||||
private String name;
|
|
||||||
|
|
||||||
@TableField("RVCD")
|
|
||||||
private String rvcd;
|
|
||||||
|
|
||||||
@TableField("REMARK")
|
|
||||||
private String remark;
|
|
||||||
|
|
||||||
@TableField(value = "RECORD_USER",fill = FieldFill.INSERT)
|
|
||||||
private String recordUser;
|
|
||||||
|
|
||||||
@TableField(value = "RECORD_TIME",fill = FieldFill.INSERT)
|
|
||||||
private Date recordTime;
|
|
||||||
|
|
||||||
@TableField(value = "MODIFY_USER",fill = FieldFill.INSERT_UPDATE)
|
|
||||||
private String modifyUser;
|
|
||||||
|
|
||||||
@TableField(value = "MODIFY_TIME",fill = FieldFill.INSERT_UPDATE)
|
|
||||||
private Date modifyTime;
|
|
||||||
|
|
||||||
@TableField("IS_DELETED")
|
|
||||||
private Integer isDeleted;
|
|
||||||
|
|
||||||
@TableField("DELETE_USER")
|
|
||||||
private String deleteUser;
|
|
||||||
|
|
||||||
@TableField("DELETE_TIME")
|
|
||||||
private Date deleteTime;
|
|
||||||
|
|
||||||
@TableField("BASE_ID")
|
|
||||||
private String baseId;
|
|
||||||
|
|
||||||
/** 河段名称(非表字段,查询时填充) */
|
|
||||||
@TableField(exist = false)
|
|
||||||
private String rvcdName;
|
|
||||||
|
|
||||||
/** 基地编码(非表字段,查询时填充) */
|
|
||||||
@TableField(exist = false)
|
|
||||||
private String bscd;
|
|
||||||
|
|
||||||
/** 基地名称(非表字段,查询时填充) */
|
|
||||||
@TableField(exist = false)
|
|
||||||
private String bsnm;
|
|
||||||
}
|
|
||||||
@ -1,27 +0,0 @@
|
|||||||
package com.yfd.platform.qgc_sys.threedRoam.dto;
|
|
||||||
|
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
|
||||||
import lombok.Data;
|
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 三维漫游飞行路径数据查询结果 VO
|
|
||||||
*/
|
|
||||||
@Data
|
|
||||||
@Schema(description = "三维漫游飞行路径数据")
|
|
||||||
public class MsThreedRoamBVO {
|
|
||||||
|
|
||||||
@Schema(description = "数据集合 (坐标序列: totalTime, lgtd, lttd, dtmel, ...)")
|
|
||||||
private List<Object> list;
|
|
||||||
|
|
||||||
@Schema(description = "里程碑集合")
|
|
||||||
private List<String[]> milestoneList;
|
|
||||||
|
|
||||||
@Schema(description = "流域/编码")
|
|
||||||
private String code;
|
|
||||||
|
|
||||||
@Schema(description = "总时间")
|
|
||||||
private BigDecimal totalTime;
|
|
||||||
}
|
|
||||||
@ -1,36 +0,0 @@
|
|||||||
package com.yfd.platform.qgc_sys.threedRoam.dto;
|
|
||||||
|
|
||||||
import com.yfd.platform.qgc_sys.threedRoam.domain.MsThreedRoamEntity;
|
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
|
||||||
import lombok.Data;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 三维漫游数据保存/查询 VO
|
|
||||||
*/
|
|
||||||
@Data
|
|
||||||
@Schema(description = "三维漫游数据")
|
|
||||||
public class MsThreedRoamMVO {
|
|
||||||
|
|
||||||
@Schema(description = "主键")
|
|
||||||
private String id;
|
|
||||||
|
|
||||||
@Schema(description = "编码")
|
|
||||||
private String code;
|
|
||||||
|
|
||||||
@Schema(description = "名称")
|
|
||||||
private String name;
|
|
||||||
|
|
||||||
@Schema(description = "河段")
|
|
||||||
private String rvcd;
|
|
||||||
|
|
||||||
@Schema(description = "河段")
|
|
||||||
private String baseId;
|
|
||||||
|
|
||||||
@Schema(description = "备注")
|
|
||||||
private String remark;
|
|
||||||
|
|
||||||
@Schema(description = "漫游数据集合")
|
|
||||||
private List<MsThreedRoamEntity> list;
|
|
||||||
}
|
|
||||||
@ -1,50 +0,0 @@
|
|||||||
package com.yfd.platform.qgc_sys.threedRoam.dto;
|
|
||||||
|
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
|
||||||
import lombok.Data;
|
|
||||||
|
|
||||||
import java.util.Date;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 三维漫游列表 VO
|
|
||||||
*/
|
|
||||||
@Data
|
|
||||||
@Schema(description = "三维漫游列表")
|
|
||||||
public class MsThreedRoamVO {
|
|
||||||
|
|
||||||
@Schema(description = "主键")
|
|
||||||
private String id;
|
|
||||||
|
|
||||||
@Schema(description = "编码")
|
|
||||||
private String code;
|
|
||||||
|
|
||||||
@Schema(description = "名称")
|
|
||||||
private String name;
|
|
||||||
|
|
||||||
@Schema(description = "备注")
|
|
||||||
private String remark;
|
|
||||||
|
|
||||||
@Schema(description = "创建人")
|
|
||||||
private String recordUser;
|
|
||||||
|
|
||||||
@Schema(description = "更新人")
|
|
||||||
private String modifyUser;
|
|
||||||
|
|
||||||
@Schema(description = "创建时间")
|
|
||||||
private Date recordTime;
|
|
||||||
|
|
||||||
@Schema(description = "更新时间")
|
|
||||||
private Date modifyTime;
|
|
||||||
|
|
||||||
@Schema(description = "河段编码")
|
|
||||||
private String rvcd;
|
|
||||||
|
|
||||||
@Schema(description = "河段名称")
|
|
||||||
private String rvcdName;
|
|
||||||
|
|
||||||
@Schema(description = "基地编码")
|
|
||||||
private String bscd;
|
|
||||||
|
|
||||||
@Schema(description = "基地名称")
|
|
||||||
private String bsnm;
|
|
||||||
}
|
|
||||||
@ -1,12 +0,0 @@
|
|||||||
package com.yfd.platform.qgc_sys.threedRoam.mapper;
|
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
|
||||||
import com.yfd.platform.qgc_sys.threedRoam.domain.MsThreedRoamMEntity;
|
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 三维漫游数据主表 Mapper
|
|
||||||
*/
|
|
||||||
@Mapper
|
|
||||||
public interface MsThreedRoamMMapper extends BaseMapper<MsThreedRoamMEntity> {
|
|
||||||
}
|
|
||||||
@ -1,30 +0,0 @@
|
|||||||
package com.yfd.platform.qgc_sys.threedRoam.mapper;
|
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
|
||||||
import com.yfd.platform.qgc_sys.threedRoam.domain.MsThreedRoamEntity;
|
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
|
||||||
import org.apache.ibatis.annotations.Param;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 三维漫游数据子表 Mapper
|
|
||||||
*/
|
|
||||||
@Mapper
|
|
||||||
public interface MsThreedRoamMapper extends BaseMapper<MsThreedRoamEntity> {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 批量插入漫游详细数据
|
|
||||||
*/
|
|
||||||
int batchInsertList(@Param("list") List<MsThreedRoamEntity> list);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 根据漫游ID删除详细数据
|
|
||||||
*/
|
|
||||||
void deleteTheedRoam(@Param("roamId") String roamId);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 查询电站编码和名称(校验里程碑节点是否存在)
|
|
||||||
*/
|
|
||||||
MsThreedRoamEntity selectStcd(@Param("stcd") String stcd);
|
|
||||||
}
|
|
||||||
@ -1,44 +0,0 @@
|
|||||||
package com.yfd.platform.qgc_sys.threedRoam.service;
|
|
||||||
|
|
||||||
import com.yfd.platform.common.DataSourceRequest;
|
|
||||||
import com.yfd.platform.common.DataSourceResult;
|
|
||||||
import com.yfd.platform.qgc_sys.threedRoam.domain.MsThreedRoamMEntity;
|
|
||||||
import com.yfd.platform.qgc_sys.threedRoam.dto.MsThreedRoamBVO;
|
|
||||||
import com.yfd.platform.qgc_sys.threedRoam.dto.MsThreedRoamMVO;
|
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 三维漫游数据主表 Service 接口
|
|
||||||
*/
|
|
||||||
public interface IMsThreedRoamMService {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 条件过滤数据列表(GetKendoListCust)
|
|
||||||
*/
|
|
||||||
DataSourceResult<MsThreedRoamMEntity> getKendoListCustReturn(DataSourceRequest dataSourceRequest);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 保存三维漫游数据
|
|
||||||
*/
|
|
||||||
Boolean save(MsThreedRoamMVO vo);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取三维漫游数据详情
|
|
||||||
*/
|
|
||||||
MsThreedRoamMVO getThreedRoamDetails(String id);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 删除三维漫游数据
|
|
||||||
*/
|
|
||||||
Boolean delete(String id);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取三维漫游飞行路径数据
|
|
||||||
*/
|
|
||||||
MsThreedRoamBVO getThreedRoamData(DataSourceRequest dataSourceRequest);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 导入三维漫游数据
|
|
||||||
*/
|
|
||||||
Boolean importData(MultipartFile file);
|
|
||||||
}
|
|
||||||
@ -1,418 +0,0 @@
|
|||||||
package com.yfd.platform.qgc_sys.threedRoam.service.impl;
|
|
||||||
|
|
||||||
import cn.hutool.core.collection.CollUtil;
|
|
||||||
import cn.hutool.core.util.StrUtil;
|
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
||||||
import com.yfd.platform.common.DataSourceLoadOptionsBase;
|
|
||||||
import com.yfd.platform.common.DataSourceRequest;
|
|
||||||
import com.yfd.platform.common.DataSourceResult;
|
|
||||||
import com.yfd.platform.common.MicroservicDynamicSQLMapper;
|
|
||||||
import com.yfd.platform.common.exception.BizException;
|
|
||||||
import com.yfd.platform.qgc_sys.threedRoam.domain.MsThreedRoamEntity;
|
|
||||||
import com.yfd.platform.qgc_sys.threedRoam.domain.MsThreedRoamMEntity;
|
|
||||||
import com.yfd.platform.qgc_sys.threedRoam.dto.MsThreedRoamBVO;
|
|
||||||
import com.yfd.platform.qgc_sys.threedRoam.dto.MsThreedRoamMVO;
|
|
||||||
import com.yfd.platform.qgc_sys.threedRoam.mapper.MsThreedRoamMMapper;
|
|
||||||
import com.yfd.platform.qgc_sys.threedRoam.mapper.MsThreedRoamMapper;
|
|
||||||
import com.yfd.platform.qgc_sys.threedRoam.service.IMsThreedRoamMService;
|
|
||||||
import com.yfd.platform.utils.QgcQueryWrapperUtil;
|
|
||||||
import jakarta.annotation.Resource;
|
|
||||||
import org.apache.poi.xssf.usermodel.XSSFRow;
|
|
||||||
import org.apache.poi.xssf.usermodel.XSSFSheet;
|
|
||||||
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
|
||||||
import org.springframework.beans.BeanUtils;
|
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.math.BigDecimal;
|
|
||||||
import java.util.*;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 三维漫游数据主表 Service 实现类
|
|
||||||
*/
|
|
||||||
@Service
|
|
||||||
public class MsThreedRoamMServiceImpl extends ServiceImpl<MsThreedRoamMMapper, MsThreedRoamMEntity> implements IMsThreedRoamMService {
|
|
||||||
|
|
||||||
@Resource
|
|
||||||
private MicroservicDynamicSQLMapper microservicDynamicSQLMapper;
|
|
||||||
|
|
||||||
@Resource
|
|
||||||
private MsThreedRoamMapper msThreedRoamMapper;
|
|
||||||
|
|
||||||
@Resource
|
|
||||||
private MsThreedRoamMMapper msThreedRoamMMapper;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public DataSourceResult<MsThreedRoamMEntity> getKendoListCustReturn(DataSourceRequest dataSourceRequest) {
|
|
||||||
DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest();
|
|
||||||
|
|
||||||
StringBuilder sql = new StringBuilder();
|
|
||||||
sql.append("SELECT a.ID, a.CODE, a.NAME, a.RVCD, b.HBRVNM AS rvcdName, a.REMARK, ")
|
|
||||||
.append("a.RECORD_USER, a.RECORD_TIME, a.MODIFY_USER, a.MODIFY_TIME, ")
|
|
||||||
.append("c.BASEID AS bscd, c.BASENAME AS bsnm ")
|
|
||||||
.append("FROM MS_THREEDROAMM_B a ")
|
|
||||||
.append("LEFT JOIN SD_HBRV_DIC b ON a.RVCD = b.HBRVCD AND b.IS_DELETED = 0 ")
|
|
||||||
.append("LEFT JOIN SD_HYDROBASE c ON b.BASEID = c.BASEID AND c.IS_DELETED = 0 ")
|
|
||||||
.append("WHERE a.IS_DELETED = 0");
|
|
||||||
|
|
||||||
Map<String, Object> paramMap = new HashMap<>();
|
|
||||||
String filterSql = buildFilterSql(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), paramMap, new int[]{0});
|
|
||||||
if (StrUtil.isNotBlank(filterSql)) {
|
|
||||||
sql.append(" AND ").append(filterSql);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 排序
|
|
||||||
sql.append(" ORDER BY a.CODE ASC");
|
|
||||||
|
|
||||||
Page<?> page = loadOptions == null ? null
|
|
||||||
: QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake());
|
|
||||||
List<MsThreedRoamMEntity> list = microservicDynamicSQLMapper.pageAllListWithResultType(
|
|
||||||
page, sql.toString(), paramMap, MsThreedRoamMEntity.class
|
|
||||||
);
|
|
||||||
|
|
||||||
DataSourceResult<MsThreedRoamMEntity> result = new DataSourceResult<>();
|
|
||||||
result.setData(list);
|
|
||||||
result.setTotal(page == null ? list.size() : page.getTotal());
|
|
||||||
result.setAggregates(new HashMap<>());
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 递归构建过滤 SQL
|
|
||||||
*/
|
|
||||||
private String buildFilterSql(com.yfd.platform.common.DataSourceRequest.FilterDescriptor filter,
|
|
||||||
Map<String, Object> paramMap, int[] indexHolder) {
|
|
||||||
if (filter == null) return "";
|
|
||||||
|
|
||||||
List<com.yfd.platform.common.DataSourceRequest.FilterDescriptor> childFilters = filter.getFilters();
|
|
||||||
if (CollUtil.isNotEmpty(childFilters)) {
|
|
||||||
List<String> childConditions = new ArrayList<>();
|
|
||||||
for (com.yfd.platform.common.DataSourceRequest.FilterDescriptor child : childFilters) {
|
|
||||||
String childSql = buildFilterSql(child, paramMap, indexHolder);
|
|
||||||
if (StrUtil.isNotBlank(childSql)) {
|
|
||||||
childConditions.add(childSql);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (childConditions.isEmpty()) return "";
|
|
||||||
String logic = StrUtil.isNotBlank(filter.getLogic()) ? filter.getLogic() : "and";
|
|
||||||
String connector = "and".equalsIgnoreCase(logic) ? " AND " : " OR ";
|
|
||||||
return "(" + String.join(connector, childConditions) + ")";
|
|
||||||
}
|
|
||||||
|
|
||||||
String field = filter.getField();
|
|
||||||
Object value = filter.getValue();
|
|
||||||
String operator = filter.getOperator();
|
|
||||||
|
|
||||||
if (StrUtil.isBlank(field)) return "";
|
|
||||||
|
|
||||||
String column = mapToListColumn(field);
|
|
||||||
if (StrUtil.isBlank(column)) return "";
|
|
||||||
|
|
||||||
if ("isnull".equalsIgnoreCase(operator)) return column + " IS NULL";
|
|
||||||
if ("isnotnull".equalsIgnoreCase(operator)) return column + " IS NOT NULL";
|
|
||||||
if (value == null) return "";
|
|
||||||
|
|
||||||
String paramKey = "t" + indexHolder[0]++;
|
|
||||||
paramMap.put(paramKey, value);
|
|
||||||
|
|
||||||
if ("eq".equalsIgnoreCase(operator)) {
|
|
||||||
return column + " = #{map." + paramKey + "}";
|
|
||||||
} else if ("neq".equalsIgnoreCase(operator)) {
|
|
||||||
return column + " != #{map." + paramKey + "}";
|
|
||||||
} else if ("contains".equalsIgnoreCase(operator)) {
|
|
||||||
return column + " LIKE '%' || #{map." + paramKey + "} || '%'";
|
|
||||||
} else if ("startswith".equalsIgnoreCase(operator)) {
|
|
||||||
return column + " LIKE #{map." + paramKey + "} || '%'";
|
|
||||||
} else if ("endswith".equalsIgnoreCase(operator)) {
|
|
||||||
return column + " LIKE '%' || #{map." + paramKey + "}";
|
|
||||||
}
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
|
|
||||||
private String mapToListColumn(String field) {
|
|
||||||
if (StrUtil.isBlank(field)) return null;
|
|
||||||
return switch (field) {
|
|
||||||
case "code" -> "a.CODE";
|
|
||||||
case "name" -> "a.NAME";
|
|
||||||
case "rvcd" -> "a.RVCD";
|
|
||||||
case "remark" -> "a.REMARK";
|
|
||||||
default -> null;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@Transactional(rollbackFor = Exception.class)
|
|
||||||
public Boolean save(MsThreedRoamMVO vo) {
|
|
||||||
MsThreedRoamMEntity entity = new MsThreedRoamMEntity();
|
|
||||||
BeanUtils.copyProperties(vo, entity);
|
|
||||||
|
|
||||||
// 校验编码是否存在
|
|
||||||
if (!checkCodeExist(entity)) {
|
|
||||||
throw new BizException("该编码已存在");
|
|
||||||
}
|
|
||||||
|
|
||||||
boolean result;
|
|
||||||
if (StrUtil.isNotBlank(entity.getId())) {
|
|
||||||
result = this.updateById(entity);
|
|
||||||
} else {
|
|
||||||
result = this.save(entity);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (result && CollUtil.isNotEmpty(vo.getList())) {
|
|
||||||
// 删除旧数据
|
|
||||||
msThreedRoamMapper.deleteTheedRoam(entity.getId());
|
|
||||||
|
|
||||||
// 批量插入新数据
|
|
||||||
List<MsThreedRoamEntity> batchList = new ArrayList<>();
|
|
||||||
List<MsThreedRoamEntity> detailList = vo.getList();
|
|
||||||
for (int i = 0; i < detailList.size(); i++) {
|
|
||||||
MsThreedRoamEntity detail = detailList.get(i);
|
|
||||||
if (StrUtil.isBlank(detail.getStcd())) {
|
|
||||||
detail.setStcd("");
|
|
||||||
}
|
|
||||||
if (StrUtil.isBlank(detail.getStnm())) {
|
|
||||||
detail.setStnm("");
|
|
||||||
}
|
|
||||||
detail.setRoamId(entity.getId());
|
|
||||||
detail.setCode(vo.getCode());
|
|
||||||
detail.setName(vo.getName());
|
|
||||||
batchList.add(detail);
|
|
||||||
|
|
||||||
if (batchList.size() == 2000 || i == detailList.size() - 1) {
|
|
||||||
int fruit = msThreedRoamMapper.batchInsertList(batchList);
|
|
||||||
if (fruit < 1) {
|
|
||||||
throw new BizException("保存三维漫游数据失败");
|
|
||||||
}
|
|
||||||
batchList = new ArrayList<>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 校验编码是否存在(修改时排除自身)
|
|
||||||
*/
|
|
||||||
private boolean checkCodeExist(MsThreedRoamMEntity entity) {
|
|
||||||
QueryWrapper<MsThreedRoamMEntity> wrapper = new QueryWrapper<>();
|
|
||||||
wrapper.eq("CODE", entity.getCode());
|
|
||||||
MsThreedRoamMEntity exist = msThreedRoamMMapper.selectOne(wrapper);
|
|
||||||
if (exist != null && !exist.getId().equals(entity.getId())) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public MsThreedRoamMVO getThreedRoamDetails(String id) {
|
|
||||||
MsThreedRoamMVO vo = new MsThreedRoamMVO();
|
|
||||||
MsThreedRoamMEntity entity = msThreedRoamMMapper.selectById(id);
|
|
||||||
if (entity != null) {
|
|
||||||
BeanUtils.copyProperties(entity, vo);
|
|
||||||
|
|
||||||
QueryWrapper<MsThreedRoamEntity> wrapper = new QueryWrapper<>();
|
|
||||||
wrapper.eq("ROAM_ID", id);
|
|
||||||
wrapper.orderByAsc("ORDER_INDEX");
|
|
||||||
List<MsThreedRoamEntity> list = msThreedRoamMapper.selectList(wrapper);
|
|
||||||
vo.setList(list);
|
|
||||||
}
|
|
||||||
return vo;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@Transactional(rollbackFor = Exception.class)
|
|
||||||
public Boolean delete(String id) {
|
|
||||||
// 删除子表数据
|
|
||||||
QueryWrapper<MsThreedRoamEntity> wrapper = new QueryWrapper<>();
|
|
||||||
wrapper.eq("ROAM_ID", id);
|
|
||||||
List<MsThreedRoamEntity> list = msThreedRoamMapper.selectList(wrapper);
|
|
||||||
if (CollUtil.isNotEmpty(list)) {
|
|
||||||
msThreedRoamMapper.delete(wrapper);
|
|
||||||
}
|
|
||||||
// 删除主表数据
|
|
||||||
int result = msThreedRoamMMapper.deleteById(id);
|
|
||||||
return result > 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public MsThreedRoamBVO getThreedRoamData(DataSourceRequest dataSourceRequest) {
|
|
||||||
DataSourceLoadOptionsBase loadOptions = dataSourceRequest.toDevRequest();
|
|
||||||
String code = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "code");
|
|
||||||
|
|
||||||
MsThreedRoamMEntity entity = msThreedRoamMMapper.selectOne(
|
|
||||||
new QueryWrapper<MsThreedRoamMEntity>().eq("CODE", code));
|
|
||||||
if (entity == null) {
|
|
||||||
throw new BizException("该流域没有三维漫游数据");
|
|
||||||
}
|
|
||||||
|
|
||||||
QueryWrapper<MsThreedRoamEntity> wrapper = new QueryWrapper<>();
|
|
||||||
wrapper.eq("ROAM_ID", entity.getId());
|
|
||||||
wrapper.orderByAsc("ORDER_INDEX");
|
|
||||||
List<MsThreedRoamEntity> threedRoamList = msThreedRoamMapper.selectList(wrapper);
|
|
||||||
|
|
||||||
BigDecimal totalTime = BigDecimal.ZERO;
|
|
||||||
List<Object> lists = new ArrayList<>();
|
|
||||||
String baseCode = "";
|
|
||||||
List<String[]> milestoneList = new ArrayList<>();
|
|
||||||
List<String> stcdList = new ArrayList<>();
|
|
||||||
|
|
||||||
for (MsThreedRoamEntity detail : threedRoamList) {
|
|
||||||
totalTime = totalTime.add(detail.getTime().multiply(new BigDecimal("0.2")));
|
|
||||||
lists.add(totalTime);
|
|
||||||
lists.add(detail.getLgtd());
|
|
||||||
lists.add(detail.getLttd());
|
|
||||||
lists.add(detail.getDtmel());
|
|
||||||
baseCode = detail.getCode();
|
|
||||||
|
|
||||||
if (StrUtil.isNotBlank(detail.getStcd()) && !stcdList.contains(detail.getStnm())) {
|
|
||||||
stcdList.add(detail.getStnm());
|
|
||||||
milestoneList.add(new String[]{detail.getStnm(), totalTime.toString()});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
MsThreedRoamBVO vo = new MsThreedRoamBVO();
|
|
||||||
vo.setList(lists);
|
|
||||||
vo.setTotalTime(totalTime);
|
|
||||||
vo.setCode(baseCode);
|
|
||||||
vo.setMilestoneList(milestoneList);
|
|
||||||
return vo;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Boolean importData(MultipartFile file) {
|
|
||||||
if (file == null) {
|
|
||||||
throw new BizException("请上传文件");
|
|
||||||
}
|
|
||||||
|
|
||||||
List<MsThreedRoamEntity> list = new ArrayList<>();
|
|
||||||
try {
|
|
||||||
XSSFWorkbook workbook = new XSSFWorkbook(file.getInputStream());
|
|
||||||
int sheets = workbook.getNumberOfSheets();
|
|
||||||
for (int i = 0; i < sheets; i++) {
|
|
||||||
XSSFSheet sheet = workbook.getSheetAt(i);
|
|
||||||
int rows = sheet.getPhysicalNumberOfRows();
|
|
||||||
for (int j = 1; j < rows; j++) {
|
|
||||||
MsThreedRoamEntity detail = new MsThreedRoamEntity();
|
|
||||||
XSSFRow row = sheet.getRow(j);
|
|
||||||
|
|
||||||
detail.setCode(row.getCell(0).toString());
|
|
||||||
detail.setName(row.getCell(1).toString());
|
|
||||||
|
|
||||||
double lgtd = Double.parseDouble(row.getCell(2).toString());
|
|
||||||
if (lgtd > 180 || lgtd < 0) {
|
|
||||||
throw new BizException("经度必须在0-180\u00B0之间");
|
|
||||||
}
|
|
||||||
detail.setLgtd(new BigDecimal(row.getCell(2).toString()));
|
|
||||||
|
|
||||||
double lttd = Double.parseDouble(row.getCell(3).toString());
|
|
||||||
if (lttd > 90 || lttd < 0) {
|
|
||||||
throw new BizException("纬度必须在0-90\u00B0之间");
|
|
||||||
}
|
|
||||||
detail.setLttd(new BigDecimal(row.getCell(3).toString()));
|
|
||||||
|
|
||||||
double dtmel = Double.parseDouble(row.getCell(4).toString());
|
|
||||||
if (dtmel >= 10000 || dtmel < 0) {
|
|
||||||
throw new BizException("高程小于10000米");
|
|
||||||
}
|
|
||||||
detail.setDtmel(new BigDecimal(row.getCell(4).toString()).setScale(3, BigDecimal.ROUND_HALF_UP));
|
|
||||||
|
|
||||||
double time = Double.parseDouble(row.getCell(5).toString());
|
|
||||||
if (time >= 100 || time < 0) {
|
|
||||||
throw new BizException("时间小于100秒");
|
|
||||||
}
|
|
||||||
detail.setTime(new BigDecimal(row.getCell(5).toString()).setScale(1, BigDecimal.ROUND_HALF_UP));
|
|
||||||
|
|
||||||
int px = (int) Double.parseDouble(row.getCell(6).toString());
|
|
||||||
detail.setOrderIndex(px);
|
|
||||||
|
|
||||||
if (row.getCell(7) != null && StrUtil.isNotBlank(row.getCell(7).toString())) {
|
|
||||||
detail.setStcd(row.getCell(7).toString());
|
|
||||||
} else {
|
|
||||||
detail.setStcd("");
|
|
||||||
}
|
|
||||||
if (row.getCell(8) != null && StrUtil.isNotBlank(row.getCell(8).toString())) {
|
|
||||||
detail.setStnm(row.getCell(8).toString());
|
|
||||||
} else {
|
|
||||||
detail.setStnm("");
|
|
||||||
}
|
|
||||||
|
|
||||||
list.add(detail);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (IOException e) {
|
|
||||||
throw new BizException("导入文档解析错误");
|
|
||||||
}
|
|
||||||
|
|
||||||
return saveImportData(list);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 保存导入数据
|
|
||||||
*/
|
|
||||||
@Transactional(rollbackFor = Exception.class)
|
|
||||||
public Boolean saveImportData(List<MsThreedRoamEntity> list) {
|
|
||||||
Map<String, List<MsThreedRoamEntity>> collect = list.stream()
|
|
||||||
.collect(Collectors.groupingBy(MsThreedRoamEntity::getCode));
|
|
||||||
|
|
||||||
collect.forEach((code, roamList) -> {
|
|
||||||
MsThreedRoamMEntity entity = msThreedRoamMMapper.selectOne(
|
|
||||||
new QueryWrapper<MsThreedRoamMEntity>().eq("CODE", code));
|
|
||||||
if (entity == null) {
|
|
||||||
entity = new MsThreedRoamMEntity();
|
|
||||||
entity.setCode(code);
|
|
||||||
}
|
|
||||||
entity.setName(roamList.get(0).getName());
|
|
||||||
|
|
||||||
boolean result;
|
|
||||||
if (StrUtil.isNotBlank(entity.getId())) {
|
|
||||||
result = this.updateById(entity);
|
|
||||||
} else {
|
|
||||||
result = this.save(entity);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (result) {
|
|
||||||
msThreedRoamMapper.deleteTheedRoam(entity.getId());
|
|
||||||
|
|
||||||
List<MsThreedRoamEntity> batchList = new ArrayList<>();
|
|
||||||
List<String> stcdExistList = new ArrayList<>();
|
|
||||||
List<String> newStcdList = new ArrayList<>();
|
|
||||||
|
|
||||||
for (int i = 0; i < roamList.size(); i++) {
|
|
||||||
MsThreedRoamEntity detail = roamList.get(i);
|
|
||||||
detail.setRoamId(entity.getId());
|
|
||||||
|
|
||||||
if (StrUtil.isNotBlank(detail.getStcd())) {
|
|
||||||
if (!stcdExistList.contains(detail.getStcd()) && !newStcdList.contains(detail.getStcd())) {
|
|
||||||
MsThreedRoamEntity stcdEntity = msThreedRoamMapper.selectStcd(detail.getStcd());
|
|
||||||
if (stcdEntity != null) {
|
|
||||||
stcdExistList.add(detail.getStcd());
|
|
||||||
} else {
|
|
||||||
newStcdList.add(detail.getStcd());
|
|
||||||
detail.setStcd("");
|
|
||||||
detail.setStnm("");
|
|
||||||
}
|
|
||||||
} else if (newStcdList.contains(detail.getStcd())) {
|
|
||||||
detail.setStcd("");
|
|
||||||
detail.setStnm("");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
batchList.add(detail);
|
|
||||||
if (batchList.size() == 2000 || i == roamList.size() - 1) {
|
|
||||||
int fruit = msThreedRoamMapper.batchInsertList(batchList);
|
|
||||||
if (fruit < 1) {
|
|
||||||
throw new BizException("导入三维漫游数据失败");
|
|
||||||
}
|
|
||||||
batchList = new ArrayList<>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,30 +0,0 @@
|
|||||||
package com.yfd.platform.utils;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.concurrent.CompletableFuture;
|
|
||||||
|
|
||||||
public class AsyncWithCompletableFuture {
|
|
||||||
public static void main(String[] args) throws Exception {
|
|
||||||
// 异步执行任务,返回 CompletableFuture
|
|
||||||
CompletableFuture<List<String>> future = CompletableFuture.supplyAsync(() -> {
|
|
||||||
List<String> list = new ArrayList<>();
|
|
||||||
try {
|
|
||||||
Thread.sleep(2000);
|
|
||||||
} catch (InterruptedException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
|
|
||||||
return list;
|
|
||||||
});
|
|
||||||
|
|
||||||
// 注册回调(非阻塞)
|
|
||||||
future.thenAccept(result -> System.out.println("回调收到结果: " + result));
|
|
||||||
|
|
||||||
// 主线程继续执行
|
|
||||||
System.out.println("主线程继续...");
|
|
||||||
|
|
||||||
// 防止主线程提前退出(如果不想阻塞,可以省略)
|
|
||||||
future.join(); // 或 future.get()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -11,10 +11,8 @@ spring:
|
|||||||
type: com.alibaba.druid.pool.DruidDataSource
|
type: com.alibaba.druid.pool.DruidDataSource
|
||||||
druid:
|
druid:
|
||||||
master:
|
master:
|
||||||
# driverClassName: oracle.jdbc.OracleDriver
|
driverClassName: oracle.jdbc.OracleDriver
|
||||||
# url: "${DB_MASTER_URL:jdbc:oracle:thin:@172.16.31.190:1521/SDLYZ}"
|
url: "${DB_MASTER_URL:jdbc:oracle:thin:@172.16.31.190:1521/SDLYZ}"
|
||||||
driverClassName: dm.jdbc.driver.DmDriver
|
|
||||||
url: "${DB_MASTER_URL:jdbc:dm://172.16.21.143:5236/QGC_REFA}"
|
|
||||||
username: "${DB_MASTER_USERNAME:QGC_REFA}"
|
username: "${DB_MASTER_USERNAME:QGC_REFA}"
|
||||||
password: "${DB_MASTER_PASSWORD:Y4M4K1oCkL8U}"
|
password: "${DB_MASTER_PASSWORD:Y4M4K1oCkL8U}"
|
||||||
initial-size: 5
|
initial-size: 5
|
||||||
@ -37,17 +35,14 @@ spring:
|
|||||||
remove-abandoned-timeout: 1800
|
remove-abandoned-timeout: 1800
|
||||||
log-abandoned: true
|
log-abandoned: true
|
||||||
break-after-acquire-failure: true
|
break-after-acquire-failure: true
|
||||||
time-between-connect-error-millis: 30000
|
time-between-connect-error-millis: 300000
|
||||||
pool-prepared-statements: true
|
pool-prepared-statements: true
|
||||||
max-open-prepared-statements: 100
|
max-open-prepared-statements: 100
|
||||||
max-pool-prepared-statement-per-connection-size: 100
|
max-pool-prepared-statement-per-connection-size: 100
|
||||||
connection-properties: connectTimeout=10000;oracle.jdbc.ReadTimeout=60000;oracle.net.READ_TIMEOUT=60000
|
connection-properties: oracle.net.CONNECT_TIMEOUT=10000;oracle.jdbc.ReadTimeout=60000;oracle.net.READ_TIMEOUT=60000
|
||||||
# connection-properties: oracle.net.CONNECT_TIMEOUT=10000;oracle.jdbc.ReadTimeout=60000;oracle.net.READ_TIMEOUT=60000
|
|
||||||
slave:
|
slave:
|
||||||
driverClassName: dm.jdbc.driver.DmDriver
|
driverClassName: oracle.jdbc.OracleDriver
|
||||||
url: "${DB_MASTER_URL:jdbc:dm://172.16.21.143:5236/QGC_REFA}"
|
url: "${DB_SLAVE_URL:jdbc:oracle:thin:@172.16.31.190:1521/SDLYZ}"
|
||||||
# driverClassName: oracle.jdbc.OracleDriver
|
|
||||||
# url: "${DB_SLAVE_URL:jdbc:oracle:thin:@172.16.31.190:1521/SDLYZ}"
|
|
||||||
username: "${DB_SLAVE_USERNAME:QGC_REFA}"
|
username: "${DB_SLAVE_USERNAME:QGC_REFA}"
|
||||||
password: "${DB_SLAVE_PASSWORD:Y4M4K1oCkL8U}"
|
password: "${DB_SLAVE_PASSWORD:Y4M4K1oCkL8U}"
|
||||||
initial-size: 5
|
initial-size: 5
|
||||||
@ -70,12 +65,11 @@ spring:
|
|||||||
remove-abandoned-timeout: 1800
|
remove-abandoned-timeout: 1800
|
||||||
log-abandoned: true
|
log-abandoned: true
|
||||||
break-after-acquire-failure: true
|
break-after-acquire-failure: true
|
||||||
time-between-connect-error-millis: 30000
|
time-between-connect-error-millis: 300000
|
||||||
pool-prepared-statements: true
|
pool-prepared-statements: true
|
||||||
max-open-prepared-statements: 100
|
max-open-prepared-statements: 100
|
||||||
max-pool-prepared-statement-per-connection-size: 100
|
max-pool-prepared-statement-per-connection-size: 100
|
||||||
connection-properties: connectTimeout=10000;oracle.jdbc.ReadTimeout=60000;oracle.net.READ_TIMEOUT=60000
|
connection-properties: oracle.net.CONNECT_TIMEOUT=10000;oracle.jdbc.ReadTimeout=60000;oracle.net.READ_TIMEOUT=60000
|
||||||
# connection-properties: oracle.net.CONNECT_TIMEOUT=10000;oracle.jdbc.ReadTimeout=60000;oracle.net.READ_TIMEOUT=60000
|
|
||||||
filter:
|
filter:
|
||||||
stat:
|
stat:
|
||||||
enabled: true
|
enabled: true
|
||||||
|
|||||||
@ -191,66 +191,6 @@
|
|||||||
ORDER BY D.TM DESC, D.ROW_INDEX ASC
|
ORDER BY D.TM DESC, D.ROW_INDEX ASC
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="selectJoinPageWithStationScope" resultMap="JoinResultMap">
|
|
||||||
SELECT
|
|
||||||
<include refid="joinColumns"/>
|
|
||||||
FROM FISH_DRAFT_DATA D
|
|
||||||
LEFT JOIN SD_FPSS_B_H F ON D.STCD = F.STCD
|
|
||||||
LEFT JOIN SD_FISHDICTORY_B FB ON FB.ID = D.FTP
|
|
||||||
LEFT JOIN SD_ENGINFO_B_H E ON F.RSTCD = E.STCD
|
|
||||||
LEFT JOIN SD_HYDROBASE H ON E.BASE_ID = H.BASEID
|
|
||||||
<include refid="rvcdDisplayJoin"/>
|
|
||||||
WHERE D.DELETED_FLAG = 0
|
|
||||||
<if test="stcd != null and stcd != ''">
|
|
||||||
AND D.STCD = #{stcd}
|
|
||||||
</if>
|
|
||||||
<if test="userId != null and userId != ''">
|
|
||||||
AND D.CREATED_BY = #{userId}
|
|
||||||
</if>
|
|
||||||
<if test="ftp != null and ftp != ''">
|
|
||||||
AND D.FTP = #{ftp}
|
|
||||||
</if>
|
|
||||||
<if test="rstcd != null and rstcd != ''">
|
|
||||||
AND F.RSTCD = #{rstcd}
|
|
||||||
</if>
|
|
||||||
<if test="baseId != null and baseId != ''">
|
|
||||||
AND E.BASE_ID = #{baseId}
|
|
||||||
</if>
|
|
||||||
<if test="rvcd != null and rvcd != ''">
|
|
||||||
AND E.REACHCD = #{rvcd}
|
|
||||||
</if>
|
|
||||||
<if test="hbrvcd != null and hbrvcd != ''">
|
|
||||||
AND E.HBRVCD = #{hbrvcd}
|
|
||||||
</if>
|
|
||||||
<if test="direction != null and direction != ''">
|
|
||||||
AND D.DIRECTION = #{direction}
|
|
||||||
</if>
|
|
||||||
<if test="status != null and status != ''">
|
|
||||||
AND D.STATUS = #{status}
|
|
||||||
</if>
|
|
||||||
<if test="approvalId != null and approvalId != ''">
|
|
||||||
AND D.APPROVAL_ID = #{approvalId}
|
|
||||||
</if>
|
|
||||||
<if test="startTime != null and startTime != ''">
|
|
||||||
AND D.STRDT >= TO_DATE(#{startTime}, 'yyyy-mm-dd hh24:mi:ss')
|
|
||||||
</if>
|
|
||||||
<if test="endTime != null and endTime != ''">
|
|
||||||
AND D.STRDT <= TO_DATE(#{endTime}, 'yyyy-mm-dd hh24:mi:ss')
|
|
||||||
</if>
|
|
||||||
<if test="stationCodes != null and stationCodes.size() > 0">
|
|
||||||
AND D.STCD IN (
|
|
||||||
SELECT F2.STCD
|
|
||||||
FROM SD_FPSS_B_H F2
|
|
||||||
INNER JOIN SD_ENGINFO_B_H E2 ON F2.RSTCD = E2.STCD
|
|
||||||
WHERE E2.STCD IN
|
|
||||||
<foreach collection="stationCodes" item="code" open="(" separator="," close=")">
|
|
||||||
#{code}
|
|
||||||
</foreach>
|
|
||||||
)
|
|
||||||
</if>
|
|
||||||
ORDER BY H.ORDER_INDEX ASC,E.ORDER_INDEX ASC, D.TM DESC, D.ROW_INDEX ASC
|
|
||||||
</select>
|
|
||||||
|
|
||||||
<select id="selectJoinList" resultMap="JoinResultMap">
|
<select id="selectJoinList" resultMap="JoinResultMap">
|
||||||
SELECT
|
SELECT
|
||||||
<include refid="joinColumns"/>
|
<include refid="joinColumns"/>
|
||||||
|
|||||||
@ -1,43 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
|
||||||
<mapper namespace="com.yfd.platform.qgc_sys.threedRoam.mapper.MsThreedRoamMapper">
|
|
||||||
|
|
||||||
<insert id="batchInsertList" parameterType="List">
|
|
||||||
INSERT INTO MS_THREEDROAM_B(ROAM_ID, CODE, NAME, LGTD, LTTD, DTMEL, TIME, ORDER_INDEX, STCD, STNM)
|
|
||||||
SELECT *
|
|
||||||
FROM (
|
|
||||||
<foreach collection="list" item="item" separator="union all">
|
|
||||||
SELECT
|
|
||||||
#{item.roamId} AS roamId,
|
|
||||||
#{item.code} AS code,
|
|
||||||
#{item.name} AS name,
|
|
||||||
#{item.lgtd} AS lgtd,
|
|
||||||
#{item.lttd} AS lttd,
|
|
||||||
#{item.dtmel} AS dtmel,
|
|
||||||
#{item.time} AS time,
|
|
||||||
#{item.orderIndex} AS orderIndex,
|
|
||||||
#{item.stcd} AS stcd,
|
|
||||||
#{item.stnm} AS stnm
|
|
||||||
FROM DUAL
|
|
||||||
</foreach>
|
|
||||||
)
|
|
||||||
</insert>
|
|
||||||
|
|
||||||
<delete id="deleteTheedRoam" parameterType="java.lang.String">
|
|
||||||
DELETE FROM MS_THREEDROAM_B
|
|
||||||
<where>
|
|
||||||
<if test="roamId != null and roamId != ''">
|
|
||||||
AND ROAM_ID = #{roamId}
|
|
||||||
</if>
|
|
||||||
</where>
|
|
||||||
</delete>
|
|
||||||
|
|
||||||
<select id="selectStcd" resultType="com.yfd.platform.qgc_sys.threedRoam.domain.MsThreedRoamEntity">
|
|
||||||
SELECT STCD, STNM FROM V_MS_STBPRP_T
|
|
||||||
WHERE STTP_CODE = 'ENG'
|
|
||||||
<if test="stcd != null and stcd != ''">
|
|
||||||
AND STCD = #{stcd}
|
|
||||||
</if>
|
|
||||||
</select>
|
|
||||||
|
|
||||||
</mapper>
|
|
||||||
@ -12,7 +12,6 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@ant-design/icons-vue": "^7.0.1",
|
"@ant-design/icons-vue": "^7.0.1",
|
||||||
"@element-plus/icons-vue": "^2.0.10",
|
"@element-plus/icons-vue": "^2.0.10",
|
||||||
"@turf/turf": "^7.3.5",
|
|
||||||
"@types/js-cookie": "^3.0.2",
|
"@types/js-cookie": "^3.0.2",
|
||||||
"@univerjs-pro/exchange-client": "0.15.0",
|
"@univerjs-pro/exchange-client": "0.15.0",
|
||||||
"@univerjs/core": "0.14.0",
|
"@univerjs/core": "0.14.0",
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -9,18 +9,9 @@ import {
|
|||||||
} from '@/utils/popupHtmlGenerator';
|
} from '@/utils/popupHtmlGenerator';
|
||||||
import { useModelStore } from '@/store/modules/model';
|
import { useModelStore } from '@/store/modules/model';
|
||||||
import { getNearbyPointDensityDisplayRules } from '@/modules/map/domain/nearby-point-rules';
|
import { getNearbyPointDensityDisplayRules } from '@/modules/map/domain/nearby-point-rules';
|
||||||
import {
|
|
||||||
LoadOSGB,
|
|
||||||
removeQxsy,
|
|
||||||
osgbChangeClick,
|
|
||||||
osgbLocation,
|
|
||||||
type OSGBItem
|
|
||||||
} from './osgbUtils';
|
|
||||||
|
|
||||||
export class MapCesium implements MapInterface {
|
export class MapCesium implements MapInterface {
|
||||||
private viewer: Cesium.Viewer | null = null;
|
private viewer: Cesium.Viewer | null = null;
|
||||||
private _ready = false;
|
|
||||||
private _pendingOSGBItems: OSGBItem[] = [];
|
|
||||||
private clickEventHandler: Cesium.ScreenSpaceEventHandler | null = null;
|
private clickEventHandler: Cesium.ScreenSpaceEventHandler | null = null;
|
||||||
private popupElement: HTMLElement | null = null;
|
private popupElement: HTMLElement | null = null;
|
||||||
private hoveredEntityId: string | null = null;
|
private hoveredEntityId: string | null = null;
|
||||||
@ -109,7 +100,6 @@ export class MapCesium implements MapInterface {
|
|||||||
this.containerId = container.id;
|
this.containerId = container.id;
|
||||||
this.containerElement = container;
|
this.containerElement = container;
|
||||||
this.showLoadingOverlay(container);
|
this.showLoadingOverlay(container);
|
||||||
const token = 'bearer fa8aa37c-1e52-4631-a699-625b4147ace8';
|
|
||||||
|
|
||||||
this.viewer = new Cesium.Viewer(container, {
|
this.viewer = new Cesium.Viewer(container, {
|
||||||
animation: false,
|
animation: false,
|
||||||
@ -124,33 +114,35 @@ export class MapCesium implements MapInterface {
|
|||||||
infoBox: false,
|
infoBox: false,
|
||||||
selectionIndicator: false,
|
selectionIndicator: false,
|
||||||
shouldAnimate: true,
|
shouldAnimate: true,
|
||||||
requestRenderMode: false,
|
requestRenderMode: true,
|
||||||
targetFrameRate: 30,
|
targetFrameRate: 30,
|
||||||
terrainProvider: new Cesium.EllipsoidTerrainProvider() // 默认不使用地形
|
terrainProvider: new Cesium.EllipsoidTerrainProvider()
|
||||||
});
|
});
|
||||||
|
|
||||||
this.viewer.cesiumWidget.creditContainer.style.display = 'none';
|
this.viewer.cesiumWidget.creditContainer.style.display = 'none';
|
||||||
const layers = this.viewer.imageryLayers;
|
const layers = this.viewer.imageryLayers;
|
||||||
layers.removeAll();
|
layers.removeAll();
|
||||||
|
const arcgisUrl =
|
||||||
|
'https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/';
|
||||||
|
|
||||||
|
// const provider = await Cesium.ArcGisMapServerImageryProvider.fromUrl(
|
||||||
|
// arcgisUrl,
|
||||||
|
// {
|
||||||
|
// enablePickFeatures: false,
|
||||||
|
// maximumLevel: 19
|
||||||
|
// }
|
||||||
|
// );
|
||||||
const provider = new Cesium.UrlTemplateImageryProvider({
|
const provider = new Cesium.UrlTemplateImageryProvider({
|
||||||
url: 'https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}',
|
url: 'https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}',
|
||||||
maximumLevel: 19,
|
maximumLevel: 19,
|
||||||
credit:
|
credit:
|
||||||
'Esri, DigitalGlobe, GeoEye, i-cubed, USDA FSA, USGS, AEX, Getmapping, Aerogrid, IGN, IGP, swisstopo, and the GIS User Community'
|
'Esri, DigitalGlobe, GeoEye, i-cubed, USDA FSA, USGS, AEX, Getmapping, Aerogrid, IGN, IGP, swisstopo, and the GIS User Community'
|
||||||
});
|
});
|
||||||
const customTerrain = await Cesium.CesiumTerrainProvider.fromUrl(
|
|
||||||
import.meta.env.VITE_APP_MAP_URL + '/Terrain?token=' + token, // 指向包含 layer.json 的目录
|
|
||||||
{
|
|
||||||
requestVertexNormals: true
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
// 应用地形到Viewer
|
|
||||||
this.viewer.terrainProvider = customTerrain;
|
|
||||||
|
|
||||||
this.imageryBaseLayer = layers.addImageryProvider(provider);
|
this.imageryBaseLayer = layers.addImageryProvider(provider);
|
||||||
this.imageryBaseLayer.show = true;
|
this.imageryBaseLayer.show = true;
|
||||||
|
|
||||||
this.viewer.scene.globe.depthTestAgainstTerrain = true;
|
this.viewer.scene.globe.depthTestAgainstTerrain = false;
|
||||||
this.viewer.scene.globe.show = true;
|
this.viewer.scene.globe.show = true;
|
||||||
this.viewer.scene.fog.enabled = false;
|
this.viewer.scene.fog.enabled = false;
|
||||||
this.viewer.scene.fxaa = false;
|
this.viewer.scene.fxaa = false;
|
||||||
@ -161,14 +153,7 @@ export class MapCesium implements MapInterface {
|
|||||||
this.setupClickHandler();
|
this.setupClickHandler();
|
||||||
this.setupCameraPopupReset();
|
this.setupCameraPopupReset();
|
||||||
|
|
||||||
this._ready = true;
|
|
||||||
console.log('[Cesium] init complete, viewer ready');
|
console.log('[Cesium] init complete, viewer ready');
|
||||||
|
|
||||||
// 初始化完成后等 5 秒再加载倾斜摄影,确保渲染管线稳定
|
|
||||||
setTimeout(() => {
|
|
||||||
this.flushPendingOSGB();
|
|
||||||
}, 5000);
|
|
||||||
|
|
||||||
return this.viewer;
|
return this.viewer;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
this.hideLoadingOverlay();
|
this.hideLoadingOverlay();
|
||||||
@ -540,40 +525,10 @@ export class MapCesium implements MapInterface {
|
|||||||
this.popupElement.innerHTML = '';
|
this.popupElement.innerHTML = '';
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 判断 3D 位置是否被地形遮挡(基于射线与 terrain 求交) */
|
|
||||||
private isPositionBehindTerrain(position: Cesium.Cartesian3): boolean {
|
|
||||||
if (!this.viewer) return true;
|
|
||||||
const scene = this.viewer.scene;
|
|
||||||
|
|
||||||
const windowCoord = Cesium.SceneTransforms.worldToWindowCoordinates(
|
|
||||||
scene,
|
|
||||||
position
|
|
||||||
);
|
|
||||||
if (!windowCoord) return true; // 在地球背面
|
|
||||||
|
|
||||||
const ray = scene.camera.getPickRay(windowCoord);
|
|
||||||
if (!ray) return false;
|
|
||||||
|
|
||||||
const terrainPos = scene.globe.pick(ray, scene);
|
|
||||||
if (!terrainPos) return false; // 该方向无地形
|
|
||||||
|
|
||||||
const cameraPos = scene.camera.positionWC;
|
|
||||||
const terrainDist = Cesium.Cartesian3.distance(cameraPos, terrainPos);
|
|
||||||
const entityDist = Cesium.Cartesian3.distance(cameraPos, position);
|
|
||||||
// 地形交点明显更近 → 实体被遮挡
|
|
||||||
return terrainDist + 10 < entityDist;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** 根据实体世界坐标把 popup 定位到屏幕坐标 */
|
/** 根据实体世界坐标把 popup 定位到屏幕坐标 */
|
||||||
private updatePopupPosition(position: Cesium.Cartesian3): void {
|
private updatePopupPosition(position: Cesium.Cartesian3): void {
|
||||||
if (!this.viewer || !this.popupElement) return;
|
if (!this.viewer || !this.popupElement) return;
|
||||||
|
|
||||||
// 被地形遮挡时隐藏 popup
|
|
||||||
if (this.isPositionBehindTerrain(position)) {
|
|
||||||
this.hidePopup();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const canvasPosition = Cesium.SceneTransforms.worldToWindowCoordinates(
|
const canvasPosition = Cesium.SceneTransforms.worldToWindowCoordinates(
|
||||||
this.viewer.scene,
|
this.viewer.scene,
|
||||||
position
|
position
|
||||||
@ -685,9 +640,6 @@ export class MapCesium implements MapInterface {
|
|||||||
)
|
)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// 被地形遮挡的不展示 popup
|
|
||||||
if (this.isPositionBehindTerrain(position)) return;
|
|
||||||
|
|
||||||
const rawData: Record<string, any> = {
|
const rawData: Record<string, any> = {
|
||||||
...((entity as any)._rawData || {})
|
...((entity as any)._rawData || {})
|
||||||
};
|
};
|
||||||
@ -1106,8 +1058,6 @@ export class MapCesium implements MapInterface {
|
|||||||
// 取消飞行超时和加载动画
|
// 取消飞行超时和加载动画
|
||||||
this.clearFlightFallbackTimer();
|
this.clearFlightFallbackTimer();
|
||||||
this.hideLoadingOverlay();
|
this.hideLoadingOverlay();
|
||||||
this._ready = false;
|
|
||||||
this._pendingOSGBItems = [];
|
|
||||||
|
|
||||||
// 批量 popup 和 hover popup
|
// 批量 popup 和 hover popup
|
||||||
this.isBatchPopupMode = false;
|
this.isBatchPopupMode = false;
|
||||||
@ -1615,7 +1565,7 @@ export class MapCesium implements MapInterface {
|
|||||||
verticalOrigin: Cesium.VerticalOrigin.CENTER,
|
verticalOrigin: Cesium.VerticalOrigin.CENTER,
|
||||||
horizontalOrigin: Cesium.HorizontalOrigin.CENTER,
|
horizontalOrigin: Cesium.HorizontalOrigin.CENTER,
|
||||||
scaleByDistance: new Cesium.NearFarScalar(1.0e3, 1.5, 2.0e7, 0.8),
|
scaleByDistance: new Cesium.NearFarScalar(1.0e3, 1.5, 2.0e7, 0.8),
|
||||||
heightReference: Cesium.HeightReference.CLAMP_TO_GROUND
|
disableDepthTestDistance: Number.POSITIVE_INFINITY
|
||||||
} as any,
|
} as any,
|
||||||
label: {
|
label: {
|
||||||
text: labelText || undefined,
|
text: labelText || undefined,
|
||||||
@ -1628,7 +1578,7 @@ export class MapCesium implements MapInterface {
|
|||||||
pixelOffset: dynamicLabelOffset as any,
|
pixelOffset: dynamicLabelOffset as any,
|
||||||
horizontalOrigin: Cesium.HorizontalOrigin.CENTER,
|
horizontalOrigin: Cesium.HorizontalOrigin.CENTER,
|
||||||
scaleByDistance: new Cesium.NearFarScalar(1.0e3, 1.2, 2.0e7, 0.8),
|
scaleByDistance: new Cesium.NearFarScalar(1.0e3, 1.2, 2.0e7, 0.8),
|
||||||
heightReference: Cesium.HeightReference.CLAMP_TO_GROUND
|
disableDepthTestDistance: Number.POSITIVE_INFINITY
|
||||||
} as any,
|
} as any,
|
||||||
properties: {
|
properties: {
|
||||||
...item,
|
...item,
|
||||||
@ -2753,57 +2703,4 @@ export class MapCesium implements MapInterface {
|
|||||||
left.top - padding > right.bottom
|
left.top - padding > right.bottom
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ==================== 倾斜摄影(OSGB) ====================
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 加载倾斜摄影 3D Tileset 模型
|
|
||||||
* 如果 viewer 尚未就绪,暂存到队列中,等 5 秒后批量加载
|
|
||||||
*/
|
|
||||||
addQxsyLayer(item: OSGBItem): void {
|
|
||||||
if (!this.viewer || !this._ready) {
|
|
||||||
// 未就绪:放入等待队列
|
|
||||||
if (!this._pendingOSGBItems.includes(item)) {
|
|
||||||
this._pendingOSGBItems.push(item);
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
LoadOSGB(this.viewer, item);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 批量加载所有等待中的倾斜摄影
|
|
||||||
*/
|
|
||||||
private flushPendingOSGB(): void {
|
|
||||||
if (!this.viewer || this.viewer.isDestroyed()) return;
|
|
||||||
const items = this._pendingOSGBItems.splice(0);
|
|
||||||
console.log(`[Cesium] 开始加载 ${items.length} 个待加载的倾斜摄影模型`);
|
|
||||||
items.forEach(item => LoadOSGB(this.viewer!, item));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 移除倾斜摄影模型
|
|
||||||
*/
|
|
||||||
removeQxsyLayer(item: OSGBItem): void {
|
|
||||||
if (!this.viewer) return;
|
|
||||||
// 从待加载队列中移除,防止已被移除的模型在 flushPendingOSGB 时又被加载
|
|
||||||
this._pendingOSGBItems = this._pendingOSGBItems.filter(i => i !== item);
|
|
||||||
removeQxsy(this.viewer, item);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 倾斜摄影显隐切换
|
|
||||||
*/
|
|
||||||
qxsyChangeClick(item: OSGBItem, checked: boolean): void {
|
|
||||||
if (!this.viewer) return;
|
|
||||||
osgbChangeClick(this.viewer, item, checked);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 飞行定位到倾斜摄影模型
|
|
||||||
*/
|
|
||||||
qxsyToPosition(item: OSGBItem): void {
|
|
||||||
if (!this.viewer) return;
|
|
||||||
osgbLocation(this.viewer, item);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -276,22 +276,4 @@ export class MapClass implements MapClassInterface {
|
|||||||
getCurrentZoom(): number | undefined {
|
getCurrentZoom(): number | undefined {
|
||||||
return this.service.getCurrentZoom();
|
return this.service.getCurrentZoom();
|
||||||
}
|
}
|
||||||
|
|
||||||
// ==================== 倾斜摄影 ====================
|
|
||||||
|
|
||||||
addQxsyLayer(item: any): void {
|
|
||||||
this.service.addQxsyLayer?.(item);
|
|
||||||
}
|
|
||||||
|
|
||||||
removeQxsyLayer(item: any): void {
|
|
||||||
this.service.removeQxsyLayer?.(item);
|
|
||||||
}
|
|
||||||
|
|
||||||
qxsyChangeClick(item: any, checked: boolean): void {
|
|
||||||
this.service.qxsyChangeClick?.(item, checked);
|
|
||||||
}
|
|
||||||
|
|
||||||
qxsyToPosition(item: any): void {
|
|
||||||
this.service.qxsyToPosition?.(item);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
41
frontend/src/components/gis/map.d.ts
vendored
41
frontend/src/components/gis/map.d.ts
vendored
@ -130,26 +130,35 @@ export interface MapInterface {
|
|||||||
* 2D 直接返回原生 zoom,3D 由相机高度换算后返回
|
* 2D 直接返回原生 zoom,3D 由相机高度换算后返回
|
||||||
*/
|
*/
|
||||||
getCurrentZoom(): number | undefined;
|
getCurrentZoom(): number | undefined;
|
||||||
|
// /**
|
||||||
|
// * 加载倾斜摄影数据
|
||||||
|
// * @param HH3DUrlArray
|
||||||
|
// */
|
||||||
|
// addQxsyLayer(HH3DUrlArray: siteItem): void
|
||||||
|
|
||||||
/**
|
// /**
|
||||||
* 加载倾斜摄影数据
|
// * 移除倾斜摄影数据
|
||||||
*/
|
// * @param HH3DUrlArray
|
||||||
addQxsyLayer(item: any): void;
|
// */
|
||||||
|
// removeQxsyLayer(HH3DUrlArray: siteItem): void
|
||||||
|
|
||||||
/**
|
// /**
|
||||||
* 移除倾斜摄影数据
|
// * 倾斜摄影定位
|
||||||
*/
|
// * @param HH3DUrlArray
|
||||||
removeQxsyLayer(item: any): void;
|
// */
|
||||||
|
// qxsyToPosition(HH3DUrlArray: siteItem): void
|
||||||
|
|
||||||
/**
|
// /**
|
||||||
* 倾斜摄影显隐切换
|
// * 倾斜摄影裁剪
|
||||||
*/
|
// * @param HH3DUrlArray
|
||||||
qxsyChangeClick(item: any, checked: boolean): void;
|
// */
|
||||||
|
// qxsyClipBoundary(HH3DUrlArray: siteItem): void
|
||||||
|
|
||||||
/**
|
// /**
|
||||||
* 倾斜摄影定位
|
// * 移除倾斜摄影裁剪
|
||||||
*/
|
// * @param HH3DUrlArray
|
||||||
qxsyToPosition(item: any): void;
|
// */
|
||||||
|
// removeQxsyClipBoundary(HH3DUrlArray: siteItem): void
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 基地面板控制
|
* 基地面板控制
|
||||||
|
|||||||
@ -2607,10 +2607,4 @@ export class MapOl implements MapInterface {
|
|||||||
this.geoJsonData = null;
|
this.geoJsonData = null;
|
||||||
this.geoJsonData1 = null;
|
this.geoJsonData1 = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 倾斜摄影方法仅3D支持,2D为空实现
|
|
||||||
addQxsyLayer(_item: any): void {}
|
|
||||||
removeQxsyLayer(_item: any): void {}
|
|
||||||
qxsyChangeClick(_item: any, _checked: boolean): void {}
|
|
||||||
qxsyToPosition(_item: any): void {}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,747 +0,0 @@
|
|||||||
/**
|
|
||||||
* 倾斜摄影(OSGB)工具函数
|
|
||||||
* 适配自旧项目 osgbTool.ts,核心逻辑保持一致
|
|
||||||
*
|
|
||||||
* 使用字段: url, boundary, location, height, accuracy
|
|
||||||
*/
|
|
||||||
import * as turf from '@turf/turf';
|
|
||||||
import * as Cesium from 'cesium';
|
|
||||||
import { getToken } from '@/utils/auth';
|
|
||||||
|
|
||||||
// ==================== 类型定义 ====================
|
|
||||||
|
|
||||||
export interface OSGBLocation {
|
|
||||||
destination: number[]; // [x, y, z] 或 [lng, lat, height]
|
|
||||||
orientation: {
|
|
||||||
heading: number;
|
|
||||||
pitch: number;
|
|
||||||
roll: number;
|
|
||||||
};
|
|
||||||
center: number[];
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface OSGBItem {
|
|
||||||
/** 3D Tileset 服务地址 */
|
|
||||||
url: string;
|
|
||||||
/** GeoJSON Polygon 边界(用于裁切) */
|
|
||||||
boundary?: any;
|
|
||||||
/** 定位信息 */
|
|
||||||
location?: OSGBLocation | string;
|
|
||||||
/** 模型高度偏移 */
|
|
||||||
height?: number;
|
|
||||||
/** 屏幕空间误差 (默认 16) */
|
|
||||||
accuracy?: number;
|
|
||||||
/** 内部状态 - 不要手动设置 */
|
|
||||||
osgbtitles?: any;
|
|
||||||
cartesian3?: any;
|
|
||||||
clippingPlanes?: any;
|
|
||||||
eventListener?: any;
|
|
||||||
_loading?: boolean;
|
|
||||||
_loadId?: number;
|
|
||||||
/** 用户手动关闭开关标志:为 true 时不自动加载/显示,只做显隐切换 */
|
|
||||||
_switchOff?: boolean;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ==================== 内部状态(每个 OSGB 实例独立) ====================
|
|
||||||
|
|
||||||
interface OSGBInstanceState {
|
|
||||||
destination: Cesium.Cartesian3 | null;
|
|
||||||
orientation: any;
|
|
||||||
timelookat: any;
|
|
||||||
time: number;
|
|
||||||
num: number;
|
|
||||||
witetime: number;
|
|
||||||
timeout: any;
|
|
||||||
}
|
|
||||||
|
|
||||||
const instanceStates = new WeakMap<OSGBItem, OSGBInstanceState>();
|
|
||||||
|
|
||||||
function getState(obj: OSGBItem): OSGBInstanceState {
|
|
||||||
let state = instanceStates.get(obj);
|
|
||||||
if (!state) {
|
|
||||||
state = {
|
|
||||||
destination: null,
|
|
||||||
orientation: null,
|
|
||||||
timelookat: null,
|
|
||||||
time: 0,
|
|
||||||
num: 0,
|
|
||||||
witetime: 0,
|
|
||||||
timeout: undefined
|
|
||||||
};
|
|
||||||
instanceStates.set(obj, state);
|
|
||||||
}
|
|
||||||
return state;
|
|
||||||
}
|
|
||||||
|
|
||||||
function clearState(obj: OSGBItem) {
|
|
||||||
const state = instanceStates.get(obj);
|
|
||||||
if (state) {
|
|
||||||
clearTimeout(state.timeout);
|
|
||||||
clearInterval(state.timelookat);
|
|
||||||
}
|
|
||||||
instanceStates.delete(obj);
|
|
||||||
}
|
|
||||||
|
|
||||||
// ==================== 3D Tileset 场景管理 ====================
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 将 tileset 添加到场景
|
|
||||||
*/
|
|
||||||
const addOSGB = (viewer: Cesium.Viewer, tileset: Cesium.Cesium3DTileset) => {
|
|
||||||
if (!viewer || viewer.isDestroyed()) return;
|
|
||||||
viewer.scene.primitives.add(tileset);
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 从场景移除 tileset(PrimitiveCollection.remove 默认 destroy=true,会销毁 tileset)
|
|
||||||
*/
|
|
||||||
const removeOSGB = (viewer: Cesium.Viewer, tileset: Cesium.Cesium3DTileset) => {
|
|
||||||
if (!viewer || viewer.isDestroyed()) return;
|
|
||||||
viewer.scene.primitives.remove(tileset);
|
|
||||||
};
|
|
||||||
|
|
||||||
// ==================== 裁切相关 ====================
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 规范化 GeoJSON 输入,提取纯 Geometry
|
|
||||||
* 兼容 Feature / FeatureCollection / Geometry
|
|
||||||
*/
|
|
||||||
const normalizeGeometry = (geo: any): any => {
|
|
||||||
if (!geo) return null;
|
|
||||||
// 已经是 Geometry 类型(有 type 且 coordinates)
|
|
||||||
if (geo.type && geo.coordinates) return geo;
|
|
||||||
// Feature → 提取 geometry
|
|
||||||
if (geo.type === 'Feature' && geo.geometry) return geo.geometry;
|
|
||||||
// FeatureCollection → 取第一个 feature 的 geometry
|
|
||||||
if (geo.type === 'FeatureCollection' && geo.features?.length) {
|
|
||||||
return normalizeGeometry(geo.features[0]);
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
};
|
|
||||||
|
|
||||||
const get_verts_core = (poly: any): Cesium.Cartesian3[] => {
|
|
||||||
const verts_carte3: Cesium.Cartesian3[] = [];
|
|
||||||
if (!poly) return verts_carte3;
|
|
||||||
|
|
||||||
try {
|
|
||||||
// 规范化输入:兼容 Feature / FeatureCollection / Geometry
|
|
||||||
const geom = normalizeGeometry(poly);
|
|
||||||
if (!geom) return verts_carte3;
|
|
||||||
|
|
||||||
let verts = turf.coordAll(geom);
|
|
||||||
const clockwiseRing = turf.booleanClockwise(turf.lineString(verts));
|
|
||||||
if (clockwiseRing) {
|
|
||||||
verts = verts.reverse();
|
|
||||||
}
|
|
||||||
for (let i = 0; i < verts.length - 1; i++) {
|
|
||||||
const vert = verts[i];
|
|
||||||
verts_carte3.push(Cesium.Cartesian3.fromDegrees(vert[0], vert[1]));
|
|
||||||
}
|
|
||||||
} catch (e) {
|
|
||||||
console.warn('get_verts_core 解析 boundary 失败:', e);
|
|
||||||
}
|
|
||||||
return verts_carte3;
|
|
||||||
};
|
|
||||||
|
|
||||||
const get_clipping_planes = (
|
|
||||||
points: Cesium.Cartesian3[]
|
|
||||||
): Cesium.ClippingPlane[] => {
|
|
||||||
const pointsLength = points.length;
|
|
||||||
const clippingPlanes: Cesium.ClippingPlane[] = [];
|
|
||||||
|
|
||||||
for (let i = 0; i < pointsLength; ++i) {
|
|
||||||
const nextIndex = (i + 1) % pointsLength;
|
|
||||||
let midpoint = Cesium.Cartesian3.add(
|
|
||||||
points[i],
|
|
||||||
points[nextIndex],
|
|
||||||
new Cesium.Cartesian3()
|
|
||||||
);
|
|
||||||
midpoint = Cesium.Cartesian3.multiplyByScalar(midpoint, 0.5, midpoint);
|
|
||||||
|
|
||||||
const up = Cesium.Cartesian3.normalize(midpoint, new Cesium.Cartesian3());
|
|
||||||
let right = Cesium.Cartesian3.subtract(
|
|
||||||
points[nextIndex],
|
|
||||||
midpoint,
|
|
||||||
new Cesium.Cartesian3()
|
|
||||||
);
|
|
||||||
right = Cesium.Cartesian3.normalize(right, right);
|
|
||||||
|
|
||||||
let normal = Cesium.Cartesian3.cross(right, up, new Cesium.Cartesian3());
|
|
||||||
normal = Cesium.Cartesian3.normalize(normal, normal);
|
|
||||||
|
|
||||||
const originCenteredPlane = new Cesium.Plane(normal, 0.0);
|
|
||||||
const distance = Cesium.Plane.getPointDistance(
|
|
||||||
originCenteredPlane,
|
|
||||||
midpoint
|
|
||||||
);
|
|
||||||
|
|
||||||
clippingPlanes.push(new Cesium.ClippingPlane(normal, distance));
|
|
||||||
}
|
|
||||||
|
|
||||||
return clippingPlanes;
|
|
||||||
};
|
|
||||||
|
|
||||||
const clipping_terrain = (
|
|
||||||
viewer: Cesium.Viewer,
|
|
||||||
clippingPlanes: Cesium.ClippingPlane[]
|
|
||||||
) => {
|
|
||||||
const globe = viewer.scene.globe;
|
|
||||||
globe.clippingPlanes = new Cesium.ClippingPlaneCollection({
|
|
||||||
planes: clippingPlanes,
|
|
||||||
edgeWidth: 0,
|
|
||||||
edgeColor: Cesium.Color.GREEN,
|
|
||||||
enabled: true
|
|
||||||
});
|
|
||||||
globe.backFaceCulling = true;
|
|
||||||
globe.showSkirts = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
const clipping_3dtiles = (
|
|
||||||
clippingPlanes: Cesium.ClippingPlane[],
|
|
||||||
tileset: Cesium.Cesium3DTileset
|
|
||||||
) => {
|
|
||||||
// Cesium 1.141: root.transform 是内部属性,安全访问
|
|
||||||
const rootTransform = (tileset as any)?.root?.transform;
|
|
||||||
if (!rootTransform) return;
|
|
||||||
const invtrans = Cesium.Matrix4.inverse(rootTransform, new Cesium.Matrix4());
|
|
||||||
for (let i = 0; i < clippingPlanes.length; i++) {
|
|
||||||
clippingPlanes[i] = Cesium.Plane.transform(clippingPlanes[i], invtrans);
|
|
||||||
}
|
|
||||||
tileset.clippingPlanes = new Cesium.ClippingPlaneCollection({
|
|
||||||
planes: clippingPlanes,
|
|
||||||
unionClippingRegions: true,
|
|
||||||
edgeWidth: 0,
|
|
||||||
edgeColor: Cesium.Color.RED,
|
|
||||||
enabled: false
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
const Clip3DTile = (boundary: any, tileset: Cesium.Cesium3DTileset) => {
|
|
||||||
try {
|
|
||||||
const geom = normalizeGeometry(boundary);
|
|
||||||
if (!geom) return;
|
|
||||||
const buffered = turf.buffer(geom, 10, { units: 'meters' });
|
|
||||||
const verts_core = get_verts_core(buffered).reverse();
|
|
||||||
if (!verts_core.length) return;
|
|
||||||
const planes = get_clipping_planes(verts_core);
|
|
||||||
clipping_3dtiles(planes, tileset);
|
|
||||||
} catch (e) {
|
|
||||||
console.warn('Clip3DTile 裁切失败:', e);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
const ClipTerrain = (viewer: Cesium.Viewer, osgbObj: OSGBItem) => {
|
|
||||||
// Cesium 1.141: 安全访问 clippingPlanes 内部属性 _planes
|
|
||||||
const existingPlanes = (viewer.scene.globe.clippingPlanes as any)?._planes;
|
|
||||||
if (
|
|
||||||
!osgbObj.clippingPlanes ||
|
|
||||||
(existingPlanes &&
|
|
||||||
!compareClippingPlanes(osgbObj.clippingPlanes, existingPlanes))
|
|
||||||
) {
|
|
||||||
const verts_core = get_verts_core(osgbObj.boundary);
|
|
||||||
if (!verts_core.length) return;
|
|
||||||
const planes = get_clipping_planes(verts_core);
|
|
||||||
clipping_terrain(viewer, planes);
|
|
||||||
osgbObj.clippingPlanes = planes;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
const removeClip = (viewer: Cesium.Viewer, osgbObj: OSGBItem) => {
|
|
||||||
if (osgbObj.clippingPlanes) {
|
|
||||||
removeClippingPlanes(viewer);
|
|
||||||
osgbObj.clippingPlanes = undefined;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
const removeClippingPlanes = (viewer: Cesium.Viewer) => {
|
|
||||||
if (!Cesium.defined(viewer) || viewer.isDestroyed()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (Cesium.defined(viewer.scene.globe.clippingPlanes)) {
|
|
||||||
viewer.scene.globe.clippingPlanes.removeAll();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
const compareClippingPlanes = (planes1: any, planes2: any): boolean => {
|
|
||||||
let result = true;
|
|
||||||
if (planes1.length === planes2?.length) {
|
|
||||||
for (let index = 0; index < planes1.length; index++) {
|
|
||||||
if (planes1[index]._distance !== planes2[index]._distance) {
|
|
||||||
result = false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
result = false;
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
};
|
|
||||||
|
|
||||||
const getMinDistanceOfOSGB = (viewer: Cesium.Viewer): number => {
|
|
||||||
let result = Infinity;
|
|
||||||
const length = viewer.scene.primitives.length;
|
|
||||||
for (let i = 0; i < length; i++) {
|
|
||||||
const p = viewer.scene.primitives.get(i);
|
|
||||||
// Cesium 1.141: _url 和 _distanceToCamera 是内部属性,安全访问
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
||||||
if ((p as any)?._url) {
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
||||||
const d = (p as any)?.root?._distanceToCamera;
|
|
||||||
if (d != null && d < result) result = d;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
};
|
|
||||||
|
|
||||||
// ==================== 动态显隐 ====================
|
|
||||||
|
|
||||||
const dynamicSetVisible = (viewer: Cesium.Viewer, osgbObj: OSGBItem) => {
|
|
||||||
if (!Cesium.defined(viewer) || viewer.isDestroyed()) return;
|
|
||||||
if (!Cesium.defined(osgbObj?.cartesian3)) return;
|
|
||||||
|
|
||||||
let cameraPosition: Cesium.Cartesian3 | undefined;
|
|
||||||
if (viewer.trackedEntity) {
|
|
||||||
cameraPosition = viewer.trackedEntity.position?.getValue(
|
|
||||||
viewer.clock.currentTime
|
|
||||||
);
|
|
||||||
}
|
|
||||||
if (!cameraPosition) {
|
|
||||||
cameraPosition = viewer.camera.position.clone();
|
|
||||||
}
|
|
||||||
|
|
||||||
const distance = Cesium.Cartesian3.distance(
|
|
||||||
osgbObj.cartesian3,
|
|
||||||
cameraPosition
|
|
||||||
);
|
|
||||||
|
|
||||||
if (distance < 12000) {
|
|
||||||
// 用户手动关闭了开关 → 不自动加载
|
|
||||||
if (osgbObj._switchOff) return;
|
|
||||||
|
|
||||||
// 匹配旧代码逻辑:osgbObj.osgbtitles 同步设置为 nonClassificationTileset 防重入
|
|
||||||
// 新代码用 _loading + _loadId 实现同样的效果(因为 fromUrl 是异步的)
|
|
||||||
if (!osgbObj.osgbtitles && !osgbObj._loading) {
|
|
||||||
osgbObj._loading = true;
|
|
||||||
osgbObj._loadId = (osgbObj._loadId || 0) + 1;
|
|
||||||
const loadId = osgbObj._loadId;
|
|
||||||
|
|
||||||
const url = osgbObj.url.includes('?')
|
|
||||||
? osgbObj.url + `&token=${getToken()}`
|
|
||||||
: osgbObj.url + `?token=${getToken()}`;
|
|
||||||
Cesium.Cesium3DTileset.fromUrl(url, {
|
|
||||||
maximumScreenSpaceError: Number(osgbObj?.accuracy) || 16,
|
|
||||||
show: true,
|
|
||||||
maximumMemoryUsage: 128
|
|
||||||
})
|
|
||||||
.then((tileset: Cesium.Cesium3DTileset) => {
|
|
||||||
// 竞态保护:版本号变了(removeQxsy 被调用或新一轮加载开始)→ 销毁退出
|
|
||||||
if (
|
|
||||||
osgbObj._loadId !== loadId ||
|
|
||||||
!Cesium.defined(viewer) ||
|
|
||||||
viewer.isDestroyed()
|
|
||||||
) {
|
|
||||||
tileset.destroy();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
osgbObj._loading = false;
|
|
||||||
if (!Cesium.defined(tileset)) return;
|
|
||||||
tileset.maximumScreenSpaceError = 32;
|
|
||||||
|
|
||||||
// height 向上偏移:模型几何自带高程,height 只是微调(如 44m)
|
|
||||||
if (osgbObj.height != 0) {
|
|
||||||
const bs = Cesium.Cartographic.fromCartesian(
|
|
||||||
tileset.boundingSphere.center
|
|
||||||
);
|
|
||||||
const surface = Cesium.Cartesian3.fromRadians(
|
|
||||||
bs.longitude,
|
|
||||||
bs.latitude,
|
|
||||||
0.0
|
|
||||||
);
|
|
||||||
const offset = Cesium.Cartesian3.fromRadians(
|
|
||||||
bs.longitude,
|
|
||||||
bs.latitude,
|
|
||||||
osgbObj.height
|
|
||||||
);
|
|
||||||
const translation = Cesium.Cartesian3.subtract(
|
|
||||||
offset,
|
|
||||||
surface,
|
|
||||||
new Cesium.Cartesian3()
|
|
||||||
);
|
|
||||||
tileset.modelMatrix = Cesium.Matrix4.fromTranslation(translation);
|
|
||||||
}
|
|
||||||
|
|
||||||
addOSGB(viewer, tileset);
|
|
||||||
osgbObj.osgbtitles = tileset;
|
|
||||||
})
|
|
||||||
.catch((e: Error) => {
|
|
||||||
osgbObj._loading = false;
|
|
||||||
console.log('dynamicSetVisible 加载倾斜摄影报错', e);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
} else if (distance > 13000) {
|
|
||||||
// 匹配旧代码逻辑:镜头拉远 → 销毁 tileset 释放内存
|
|
||||||
if (osgbObj.osgbtitles) {
|
|
||||||
removeOSGB(viewer, osgbObj.osgbtitles);
|
|
||||||
osgbObj.osgbtitles = undefined;
|
|
||||||
}
|
|
||||||
// 不重置 _switchOff,开关状态由用户手动控制,不受距离影响
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// ==================== 地形动态裁切 ====================
|
|
||||||
|
|
||||||
const dynamicClipTerrain = (viewer: Cesium.Viewer, osgbObj: OSGBItem) => {
|
|
||||||
if (!osgbObj?.osgbtitles) {
|
|
||||||
removeClip(viewer, osgbObj);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Cesium 1.141: root 和 _distanceToCamera 是内部属性,安全访问
|
|
||||||
const root = (osgbObj.osgbtitles as any)?.root;
|
|
||||||
if (!Cesium.defined(root)) {
|
|
||||||
removeClip(viewer, osgbObj);
|
|
||||||
if (osgbObj.osgbtitles?.clippingPlanes?.enabled) {
|
|
||||||
osgbObj.osgbtitles.clippingPlanes.enabled = false;
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!osgbObj?.osgbtitles?.show) {
|
|
||||||
removeClip(viewer, osgbObj);
|
|
||||||
if (osgbObj.osgbtitles?.clippingPlanes?.enabled) {
|
|
||||||
osgbObj.osgbtitles.clippingPlanes.enabled = false;
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const distance = root._distanceToCamera;
|
|
||||||
const tilesLoaded = osgbObj.osgbtitles.tilesLoaded;
|
|
||||||
if (osgbObj.boundary && tilesLoaded) {
|
|
||||||
if (distance != null && getMinDistanceOfOSGB(viewer) === distance) {
|
|
||||||
ClipTerrain(viewer, osgbObj);
|
|
||||||
if (
|
|
||||||
osgbObj.osgbtitles?.clippingPlanes &&
|
|
||||||
!osgbObj.osgbtitles.clippingPlanes.enabled
|
|
||||||
) {
|
|
||||||
osgbObj.osgbtitles.clippingPlanes.enabled = true;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
removeClip(viewer, osgbObj);
|
|
||||||
if (osgbObj.osgbtitles?.clippingPlanes?.enabled) {
|
|
||||||
osgbObj.osgbtitles.clippingPlanes.enabled = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// ==================== 公开 API ====================
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 加载倾斜摄影 3D Tileset 模型
|
|
||||||
*
|
|
||||||
* Cesium 1.141 中必须使用 Cesium3DTileset.fromUrl() 静态方法,
|
|
||||||
* new Cesium3DTileset({url}) 不会触发网络请求。
|
|
||||||
*/
|
|
||||||
export const LoadOSGB = (viewer: Cesium.Viewer, osgbObj: OSGBItem) => {
|
|
||||||
if (!osgbObj.url) return;
|
|
||||||
|
|
||||||
// 已加载则跳过
|
|
||||||
if (osgbObj.osgbtitles && !osgbObj.osgbtitles.isDestroyed?.()) return;
|
|
||||||
|
|
||||||
// 正在加载中也跳过(防止重复调用 fromUrl)
|
|
||||||
if (osgbObj._loading) return;
|
|
||||||
osgbObj._loading = true;
|
|
||||||
|
|
||||||
// 自增版本号:每次 LoadOSGB 都 +1,.then() 里靠版本号判断是否已失效
|
|
||||||
osgbObj._loadId = (osgbObj._loadId || 0) + 1;
|
|
||||||
const loadId = osgbObj._loadId;
|
|
||||||
|
|
||||||
const url = osgbObj.url.includes('?')
|
|
||||||
? osgbObj.url + `&token=${getToken()}`
|
|
||||||
: osgbObj.url + `?token=${getToken()}`;
|
|
||||||
|
|
||||||
Cesium.Cesium3DTileset.fromUrl(url, {
|
|
||||||
maximumScreenSpaceError: Number(osgbObj?.accuracy) || 16,
|
|
||||||
show: true,
|
|
||||||
maximumMemoryUsage: 128
|
|
||||||
})
|
|
||||||
.then((tileset: Cesium.Cesium3DTileset) => {
|
|
||||||
// 竞态保护:版本号变了 → 销毁退出
|
|
||||||
if (
|
|
||||||
osgbObj._loadId !== loadId ||
|
|
||||||
!Cesium.defined(viewer) ||
|
|
||||||
viewer.isDestroyed()
|
|
||||||
) {
|
|
||||||
tileset.destroy();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (!Cesium.defined(tileset)) return;
|
|
||||||
|
|
||||||
osgbObj._loading = false;
|
|
||||||
tileset.maximumScreenSpaceError = 32;
|
|
||||||
|
|
||||||
// height 向上偏移:模型几何自带高程,height 只是微调(如 44m)
|
|
||||||
if (osgbObj.height != 0) {
|
|
||||||
const bs = Cesium.Cartographic.fromCartesian(
|
|
||||||
tileset.boundingSphere.center
|
|
||||||
);
|
|
||||||
const surface = Cesium.Cartesian3.fromRadians(
|
|
||||||
bs.longitude,
|
|
||||||
bs.latitude,
|
|
||||||
0.0
|
|
||||||
);
|
|
||||||
const offset = Cesium.Cartesian3.fromRadians(
|
|
||||||
bs.longitude,
|
|
||||||
bs.latitude,
|
|
||||||
osgbObj.height
|
|
||||||
);
|
|
||||||
const translation = Cesium.Cartesian3.subtract(
|
|
||||||
offset,
|
|
||||||
surface,
|
|
||||||
new Cesium.Cartesian3()
|
|
||||||
);
|
|
||||||
tileset.modelMatrix = Cesium.Matrix4.fromTranslation(translation);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 加入场景(匹配旧代码 readyPromise 中 addOSGB)
|
|
||||||
addOSGB(viewer, tileset);
|
|
||||||
osgbObj.osgbtitles = tileset;
|
|
||||||
|
|
||||||
// 始终设置 cartesian3,保证 dynamicSetVisible 能计算距离
|
|
||||||
osgbObj.cartesian3 = tileset.boundingSphere.center.clone();
|
|
||||||
|
|
||||||
// boundary 裁切(匹配旧代码 readyPromise 中处理)
|
|
||||||
if (osgbObj.boundary) {
|
|
||||||
if (typeof osgbObj.boundary === 'string') {
|
|
||||||
osgbObj.boundary = JSON.parse(osgbObj.boundary);
|
|
||||||
}
|
|
||||||
Clip3DTile(osgbObj.boundary, tileset);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 注册 postRender 动态显隐(300ms 节流,匹配旧代码 throttle)
|
|
||||||
let lastTime = 0;
|
|
||||||
osgbObj.eventListener = viewer.scene.postRender.addEventListener(() => {
|
|
||||||
if (!Cesium.defined(viewer) || viewer.isDestroyed()) return;
|
|
||||||
const now = performance.now();
|
|
||||||
if (now - lastTime < 300) return;
|
|
||||||
lastTime = now;
|
|
||||||
|
|
||||||
if (!getState(osgbObj).timelookat) {
|
|
||||||
dynamicSetVisible(viewer, osgbObj);
|
|
||||||
}
|
|
||||||
dynamicClipTerrain(viewer, osgbObj);
|
|
||||||
});
|
|
||||||
})
|
|
||||||
.catch((e: Error) => {
|
|
||||||
osgbObj._loading = false;
|
|
||||||
console.log('加载倾斜摄影报错', e);
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 卸载倾斜摄影模型(完全移除)
|
|
||||||
* 仅在切换 2D 等场景调用,平时开关节用 osgbChangeClick 做显隐
|
|
||||||
* 匹配旧代码 removeqxsy(osgbTool.ts:233-244):不清理 cartesian3
|
|
||||||
*/
|
|
||||||
export const removeQxsy = (viewer: Cesium.Viewer, osgbObj: OSGBItem) => {
|
|
||||||
// 递增版本号:使所有进行中的 fromUrl().then() 失效
|
|
||||||
osgbObj._loadId = (osgbObj._loadId || 0) + 1;
|
|
||||||
removeClippingPlanes(viewer);
|
|
||||||
osgbObj.clippingPlanes = undefined;
|
|
||||||
osgbObj._loading = false;
|
|
||||||
osgbObj._switchOff = undefined;
|
|
||||||
|
|
||||||
if (typeof osgbObj.eventListener === 'function') {
|
|
||||||
osgbObj.eventListener();
|
|
||||||
osgbObj.eventListener = undefined;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (osgbObj.osgbtitles) {
|
|
||||||
removeOSGB(viewer, osgbObj.osgbtitles);
|
|
||||||
osgbObj.osgbtitles = undefined;
|
|
||||||
}
|
|
||||||
// 注意:不清理 cartesian3,匹配旧代码行为
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 倾斜摄影显隐切换
|
|
||||||
* - 开关状态全局记录,不受距离影响
|
|
||||||
* - 12km 以内:执行实际的显隐/加载操作
|
|
||||||
* - 12km 以外:仅记录状态,不做 tileset 操作(tileset 不存在或已销毁)
|
|
||||||
* - 仅切换 2D 时才通过 removeQxsy 真正销毁
|
|
||||||
*/
|
|
||||||
export const osgbChangeClick = (
|
|
||||||
viewer: Cesium.Viewer,
|
|
||||||
osgbObj: OSGBItem,
|
|
||||||
checked: boolean
|
|
||||||
) => {
|
|
||||||
// 先记录开关状态(无论距离远近)
|
|
||||||
osgbObj._switchOff = !checked;
|
|
||||||
|
|
||||||
// 12km 以外:只记状态不操作 tileset(此时 tileset 可能不存在或已销毁)
|
|
||||||
if (osgbObj.cartesian3) {
|
|
||||||
const cameraPosition = viewer.camera.position.clone();
|
|
||||||
const distance = Cesium.Cartesian3.distance(
|
|
||||||
osgbObj.cartesian3,
|
|
||||||
cameraPosition
|
|
||||||
);
|
|
||||||
if (distance >= 12000) return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (checked) {
|
|
||||||
// 开关 ON:已有未销毁的 tileset → 直接显示;否则加载
|
|
||||||
if (osgbObj.osgbtitles && !osgbObj.osgbtitles.isDestroyed?.()) {
|
|
||||||
osgbObj.osgbtitles.show = true;
|
|
||||||
} else {
|
|
||||||
LoadOSGB(viewer, osgbObj);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// 开关 OFF:隐藏 tileset,移除 terrain 裁切
|
|
||||||
if (osgbObj.osgbtitles && !osgbObj.osgbtitles.isDestroyed?.()) {
|
|
||||||
osgbObj.osgbtitles.show = false;
|
|
||||||
}
|
|
||||||
removeClip(viewer, osgbObj);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 解析 location 字段为结构化定位信息
|
|
||||||
*/
|
|
||||||
const parseLocation = (location: any): OSGBLocation | null => {
|
|
||||||
if (!location) return null;
|
|
||||||
|
|
||||||
// 如果已经是对象,直接用
|
|
||||||
if (typeof location === 'object' && location.destination) {
|
|
||||||
return location as OSGBLocation;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 如果是字符串,尝试解析
|
|
||||||
if (typeof location === 'string') {
|
|
||||||
try {
|
|
||||||
const jsonString = location.replace(/\n/g, '');
|
|
||||||
const startIndex = jsonString.indexOf('{');
|
|
||||||
const endIndex = jsonString.lastIndexOf('}');
|
|
||||||
if (startIndex === -1 || endIndex === -1) return null;
|
|
||||||
const extractedData = jsonString.substring(startIndex, endIndex + 1);
|
|
||||||
const parsed = eval('(' + extractedData + ')');
|
|
||||||
return {
|
|
||||||
destination: parsed.destination,
|
|
||||||
orientation: parsed.orientation,
|
|
||||||
center: parsed.center
|
|
||||||
};
|
|
||||||
} catch {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 飞行定位到倾斜摄影模型
|
|
||||||
* 包含 flyTo + 到达后旋转动画
|
|
||||||
*/
|
|
||||||
export const osgbLocation = (viewer: Cesium.Viewer, osgbObj: OSGBItem) => {
|
|
||||||
const state = getState(osgbObj);
|
|
||||||
|
|
||||||
clearTimeout(state.timeout);
|
|
||||||
state.num = 0;
|
|
||||||
state.time = 0;
|
|
||||||
state.witetime = 0;
|
|
||||||
|
|
||||||
viewer.camera.lookAtTransform(Cesium.Matrix4.IDENTITY);
|
|
||||||
|
|
||||||
let center = Cesium.Cartesian3.fromDegrees(
|
|
||||||
100.271729604817,
|
|
||||||
35.3107902811941,
|
|
||||||
2800
|
|
||||||
);
|
|
||||||
let heading = Cesium.Math.toRadians(0.0);
|
|
||||||
const pitch = Cesium.Math.toRadians(-30.0);
|
|
||||||
const range = 2000.0;
|
|
||||||
|
|
||||||
const locationInfor = parseLocation(osgbObj.location);
|
|
||||||
|
|
||||||
if (!locationInfor) {
|
|
||||||
console.warn('该模型定位坐标未配置!');
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 判断是经纬度还是笛卡尔坐标
|
|
||||||
const destCoords = locationInfor.destination;
|
|
||||||
if (destCoords[0] <= 180 && destCoords[0] >= -180) {
|
|
||||||
state.destination = Cesium.Cartesian3.fromDegrees(
|
|
||||||
destCoords[0],
|
|
||||||
destCoords[1],
|
|
||||||
destCoords[2]
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
state.destination = new Cesium.Cartesian3(
|
|
||||||
destCoords[0],
|
|
||||||
destCoords[1],
|
|
||||||
destCoords[2]
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
state.orientation = locationInfor.orientation;
|
|
||||||
center = Cesium.Cartesian3.fromDegrees(
|
|
||||||
locationInfor.center[0],
|
|
||||||
locationInfor.center[1],
|
|
||||||
locationInfor.center[2]
|
|
||||||
);
|
|
||||||
|
|
||||||
if (!state.destination || !state.orientation) return;
|
|
||||||
|
|
||||||
viewer.camera.cancelFlight();
|
|
||||||
viewer.camera.flyTo({
|
|
||||||
destination: state.destination,
|
|
||||||
orientation: state.orientation,
|
|
||||||
complete: () => {
|
|
||||||
state.timeout = setTimeout(() => {
|
|
||||||
rotate();
|
|
||||||
}, 2000);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
const rotate = () => {
|
|
||||||
clearInterval(state.timelookat);
|
|
||||||
state.timelookat = setInterval(() => {
|
|
||||||
if (!Cesium.defined(viewer) || viewer.isDestroyed()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
state.witetime += 0.7;
|
|
||||||
if (state.witetime > 180 && state.witetime < 360) {
|
|
||||||
state.time += 0.7;
|
|
||||||
heading = Cesium.Math.toRadians(state.time);
|
|
||||||
viewer.camera.lookAt(
|
|
||||||
center,
|
|
||||||
new Cesium.HeadingPitchRange(heading, pitch, range)
|
|
||||||
);
|
|
||||||
} else if (state.witetime > 360) {
|
|
||||||
viewer.camera.lookAtTransform(Cesium.Matrix4.IDENTITY);
|
|
||||||
clearInterval(state.timelookat);
|
|
||||||
state.timelookat = null;
|
|
||||||
viewer.camera.flyTo({
|
|
||||||
destination: state.destination!,
|
|
||||||
orientation: state.orientation,
|
|
||||||
duration: 2
|
|
||||||
});
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}, 10);
|
|
||||||
};
|
|
||||||
|
|
||||||
// 点击 body 两次退出旋转
|
|
||||||
const body = document.getElementsByTagName('body')[0];
|
|
||||||
body.onclick = function () {
|
|
||||||
if (viewer && !viewer.isDestroyed() && viewer.camera) {
|
|
||||||
state.num = state.num + 1;
|
|
||||||
if (state.num > 1) {
|
|
||||||
viewer.camera.lookAtTransform(Cesium.Matrix4.IDENTITY);
|
|
||||||
clearInterval(state.timelookat);
|
|
||||||
clearTimeout(state.timeout);
|
|
||||||
state.timelookat = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
};
|
|
||||||
@ -32,16 +32,13 @@
|
|||||||
class="leaf-item"
|
class="leaf-item"
|
||||||
>
|
>
|
||||||
<div class="leaf-content">
|
<div class="leaf-content">
|
||||||
<span class="leaf-name" @click="handleLeafClick(item)">{{
|
<span class="leaf-name">{{ item.stnm }}</span>
|
||||||
item.stnm
|
|
||||||
}}</span>
|
|
||||||
<span @click.stop>
|
|
||||||
<a-switch
|
<a-switch
|
||||||
:checked="item.checked !== false"
|
:checked="item.checked !== false"
|
||||||
size="small"
|
size="small"
|
||||||
|
@click.stop
|
||||||
@change="(checked: boolean) => handleSwitchChange(item, checked)"
|
@change="(checked: boolean) => handleSwitchChange(item, checked)"
|
||||||
/>
|
/>
|
||||||
</span>
|
|
||||||
</div>
|
</div>
|
||||||
</a-menu-item>
|
</a-menu-item>
|
||||||
</a-sub-menu>
|
</a-sub-menu>
|
||||||
@ -82,9 +79,6 @@ const props = defineProps<{
|
|||||||
|
|
||||||
const emit = defineEmits<{
|
const emit = defineEmits<{
|
||||||
(e: 'update:visible', v: boolean): void;
|
(e: 'update:visible', v: boolean): void;
|
||||||
(e: 'loadModel', item: any): void;
|
|
||||||
(e: 'unloadModel', item: any): void;
|
|
||||||
(e: 'flyToSite', item: any): void;
|
|
||||||
}>();
|
}>();
|
||||||
|
|
||||||
const tooltipVisible = ref(false);
|
const tooltipVisible = ref(false);
|
||||||
@ -131,16 +125,6 @@ const onOpenChange = (visible: boolean) => {
|
|||||||
// a-switch 切换
|
// a-switch 切换
|
||||||
const handleSwitchChange = (item: any, checked: boolean) => {
|
const handleSwitchChange = (item: any, checked: boolean) => {
|
||||||
item.checked = checked;
|
item.checked = checked;
|
||||||
if (checked) {
|
|
||||||
emit('loadModel', item);
|
|
||||||
} else {
|
|
||||||
emit('unloadModel', item);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// 点击站名定位
|
|
||||||
const handleLeafClick = (item: any) => {
|
|
||||||
emit('flyToSite', item);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// 点击外部关闭tooltip
|
// 点击外部关闭tooltip
|
||||||
|
|||||||
@ -18,9 +18,6 @@
|
|||||||
:countdown="countdown"
|
:countdown="countdown"
|
||||||
:inTransition="is3DTransition && child.key === 'OSBGController'"
|
:inTransition="is3DTransition && child.key === 'OSBGController'"
|
||||||
@update:visible="(v: boolean) => handleComponentVisibleToggle(child.key, v)"
|
@update:visible="(v: boolean) => handleComponentVisibleToggle(child.key, v)"
|
||||||
@loadModel="handleLoadModel"
|
|
||||||
@unloadModel="handleUnloadModel"
|
|
||||||
@flyToSite="handleFlyToSite"
|
|
||||||
/>
|
/>
|
||||||
<!-- 非组件项:包裹 tooltip 显示名称 -->
|
<!-- 非组件项:包裹 tooltip 显示名称 -->
|
||||||
<a-tooltip
|
<a-tooltip
|
||||||
@ -109,10 +106,7 @@ const buildTiltPhotoTree = (list: any[]) => {
|
|||||||
const id = String(item.baseId ?? '');
|
const id = String(item.baseId ?? '');
|
||||||
const group = baseMap.get(id);
|
const group = baseMap.get(id);
|
||||||
if (group) {
|
if (group) {
|
||||||
// 直接 push 原始对象(不用展开),确保与 addQxsyLayer 中的 item 是同一引用
|
group.children.push({ ...item, checked: true });
|
||||||
// OSGB 状态(osgbtitles, cartesian3, eventListener 等)都挂在这个对象上
|
|
||||||
item.checked = true;
|
|
||||||
group.children.push(item);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return Array.from(baseMap.entries())
|
return Array.from(baseMap.entries())
|
||||||
@ -152,33 +146,11 @@ const fetchTiltPhotoTree = async () => {
|
|||||||
});
|
});
|
||||||
const list = res.data.data;
|
const list = res.data.data;
|
||||||
tiltPhotoTree.value = buildTiltPhotoTree(list);
|
tiltPhotoTree.value = buildTiltPhotoTree(list);
|
||||||
|
|
||||||
// 全部加载倾斜摄影模型(dynamicSetVisible 按 12km 距离自动控制显隐)
|
|
||||||
list.forEach((item: any) => {
|
|
||||||
map.value.addQxsyLayer?.(item);
|
|
||||||
});
|
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error('获取倾斜摄影数据失败:', err);
|
console.error('获取倾斜摄影数据失败:', err);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// 倾斜摄影模型相关事件处理
|
|
||||||
const handleLoadModel = (item: any) => {
|
|
||||||
// 开关打开:加载/显示模型
|
|
||||||
map.value.qxsyChangeClick?.(item, true);
|
|
||||||
};
|
|
||||||
|
|
||||||
const handleUnloadModel = (item: any) => {
|
|
||||||
// 开关关闭:卸载/隐藏模型
|
|
||||||
map.value.qxsyChangeClick?.(item, false);
|
|
||||||
};
|
|
||||||
|
|
||||||
const handleFlyToSite = (item: any) => {
|
|
||||||
// 先加载模型(如果还没加载),再飞行定位
|
|
||||||
map.value.addQxsyLayer?.(item);
|
|
||||||
map.value.qxsyToPosition?.(item);
|
|
||||||
};
|
|
||||||
|
|
||||||
// 3D过渡动画状态
|
// 3D过渡动画状态
|
||||||
// layerController / OSBGController / threedRoam 三者互斥,最多一个被选中
|
// layerController / OSBGController / threedRoam 三者互斥,最多一个被选中
|
||||||
const activeKey = ref<string | null>(null);
|
const activeKey = ref<string | null>(null);
|
||||||
@ -403,18 +375,11 @@ const handleControllerClick = (item: any) => {
|
|||||||
fetchTiltPhotoTree();
|
fetchTiltPhotoTree();
|
||||||
start3DTransition();
|
start3DTransition();
|
||||||
} else {
|
} else {
|
||||||
// 3D→2D:打开抽屉,清理过渡,卸载所有倾斜摄影模型
|
// 3D→2D:打开抽屉,清理过渡
|
||||||
uiStore.drawerOpen = true;
|
uiStore.drawerOpen = true;
|
||||||
uiStore.isRoaming = false;
|
uiStore.isRoaming = false;
|
||||||
cleanup3DTransition();
|
cleanup3DTransition();
|
||||||
activeKey.value = null;
|
activeKey.value = null;
|
||||||
// 卸载所有倾斜摄影
|
|
||||||
tiltPhotoTree.value.forEach((group: any) => {
|
|
||||||
group.children?.forEach((item: any) => {
|
|
||||||
map.value.removeQxsyLayer?.(item);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
tiltPhotoTree.value = [];
|
|
||||||
}
|
}
|
||||||
props.onClick('dim', uiStore.mapType);
|
props.onClick('dim', uiStore.mapType);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -647,7 +647,7 @@ const focusSelectedAnchorPoint = () => {
|
|||||||
|
|
||||||
mapOrchestrator.focusPoint(
|
mapOrchestrator.focusPoint(
|
||||||
selectedValue,
|
selectedValue,
|
||||||
uiStore.mapType === '3D' ? 9 : 14,
|
14,
|
||||||
isFishSurveyMode.value ? anchorPointOptions.value : undefined
|
isFishSurveyMode.value ? anchorPointOptions.value : undefined
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -58,7 +58,7 @@ service.interceptors.response.use(
|
|||||||
message.error(response.data.msg || '请求失败');
|
message.error(response.data.msg || '请求失败');
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
localStorage.clear();
|
localStorage.clear();
|
||||||
window.location.href = '/login';
|
window.location.href = '/';
|
||||||
}, 1000);
|
}, 1000);
|
||||||
return;
|
return;
|
||||||
} else if (response.data.code == 1) {
|
} else if (response.data.code == 1) {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user