feat: 获取垂向水温有数据的年份
This commit is contained in:
parent
e75bb27492
commit
8293a2f9f5
@ -1,36 +0,0 @@
|
|||||||
package com.yfd.platform.env.controller;
|
|
||||||
|
|
||||||
import com.yfd.platform.common.DataSourceRequest;
|
|
||||||
import com.yfd.platform.common.DataSourceResult;
|
|
||||||
import com.yfd.platform.config.ResponseResult;
|
|
||||||
import com.yfd.platform.env.service.SdDzChuiXiangListService;
|
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
|
||||||
import jakarta.annotation.Resource;
|
|
||||||
import org.springframework.validation.annotation.Validated;
|
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RequestBody;
|
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 电站专题垂向水温一级面板Controller
|
|
||||||
*
|
|
||||||
* @author
|
|
||||||
* @date 2023/04/18 19:22
|
|
||||||
*/
|
|
||||||
@RestController
|
|
||||||
@RequestMapping("/sw/dzCxList")
|
|
||||||
@Tag(name = "电站专题垂向水温一级面板")
|
|
||||||
@Validated
|
|
||||||
public class SdDzChuiXiangListController {
|
|
||||||
|
|
||||||
@Resource
|
|
||||||
private SdDzChuiXiangListService sdDzChuiXiangListService;
|
|
||||||
|
|
||||||
@PostMapping({"/GetKendoListCust"})
|
|
||||||
@Operation(summary = "电站专题垂向水温一级面板数据列表")
|
|
||||||
public ResponseResult getKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
|
|
||||||
return ResponseResult.successData(sdDzChuiXiangListService.processKendoList(dataSourceRequest));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,41 +0,0 @@
|
|||||||
package com.yfd.platform.env.controller;
|
|
||||||
|
|
||||||
import com.yfd.platform.common.DataSourceRequest;
|
|
||||||
import com.yfd.platform.config.ResponseResult;
|
|
||||||
import com.yfd.platform.env.service.SdRvwtSInOutOneService;
|
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
|
||||||
import jakarta.annotation.Resource;
|
|
||||||
import org.springframework.validation.annotation.Validated;
|
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RequestBody;
|
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
|
||||||
|
|
||||||
@RestController
|
|
||||||
@RequestMapping("/sw/inOutOne")
|
|
||||||
@Tag(name = "出入库水温一级折线图")
|
|
||||||
@Validated
|
|
||||||
public class SdRvwtSInOutOneController {
|
|
||||||
|
|
||||||
@Resource
|
|
||||||
private SdRvwtSInOutOneService sdRvwtSInOutOneService;
|
|
||||||
|
|
||||||
@PostMapping("/GetKendoListCust")
|
|
||||||
@Operation(summary = "查询出入库水温一级列表")
|
|
||||||
public ResponseResult getKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
|
|
||||||
return ResponseResult.successData(sdRvwtSInOutOneService.processKendoList(dataSourceRequest));
|
|
||||||
}
|
|
||||||
|
|
||||||
@PostMapping("/details")
|
|
||||||
@Operation(summary = "一次性返回出库水温和入库水温详情")
|
|
||||||
public ResponseResult getDetails(@RequestBody DataSourceRequest dataSourceRequest) {
|
|
||||||
return ResponseResult.successData(sdRvwtSInOutOneService.getDetails(dataSourceRequest));
|
|
||||||
}
|
|
||||||
|
|
||||||
@PostMapping("/default/stcd")
|
|
||||||
@Operation(summary = "获取出入库水温默认有数据的电站")
|
|
||||||
public ResponseResult getDefaultStcd(@RequestBody DataSourceRequest dataSourceRequest) {
|
|
||||||
return ResponseResult.successData(sdRvwtSInOutOneService.getDefaultStcd(dataSourceRequest));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -9,9 +9,7 @@ import com.yfd.platform.common.exception.BizException;
|
|||||||
import com.yfd.platform.config.ResponseResult;
|
import com.yfd.platform.config.ResponseResult;
|
||||||
import com.yfd.platform.env.entity.vo.BatchDeleteAo;
|
import com.yfd.platform.env.entity.vo.BatchDeleteAo;
|
||||||
import com.yfd.platform.env.entity.vo.WtrvInfo;
|
import com.yfd.platform.env.entity.vo.WtrvInfo;
|
||||||
import com.yfd.platform.env.service.AlongDetailService;
|
import com.yfd.platform.env.service.*;
|
||||||
import com.yfd.platform.env.service.AlongListService;
|
|
||||||
import com.yfd.platform.env.service.SdWtMonitorService;
|
|
||||||
import com.yfd.platform.utils.QgcQueryWrapperUtil;
|
import com.yfd.platform.utils.QgcQueryWrapperUtil;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
@ -39,6 +37,15 @@ public class SdWTMonitorController {
|
|||||||
@Resource
|
@Resource
|
||||||
private SdWtMonitorService sdWtMonitorService;
|
private SdWtMonitorService sdWtMonitorService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private SdRvwtSInOutOneService sdRvwtSInOutOneService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private SdDzChuiXiangListService sdDzChuiXiangListService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private SdWtvtRService sdWtvtRService;
|
||||||
|
|
||||||
|
|
||||||
@PostMapping("/alongDetail/GetKendoListCust")
|
@PostMapping("/alongDetail/GetKendoListCust")
|
||||||
@Operation(summary = "查询沿程水温变化二级数据列表")
|
@Operation(summary = "查询沿程水温变化二级数据列表")
|
||||||
@ -121,7 +128,7 @@ public class SdWTMonitorController {
|
|||||||
|
|
||||||
@PostMapping({"/alongList/default/rvcd"})
|
@PostMapping({"/alongList/default/rvcd"})
|
||||||
@Operation(summary = "获取沿程水温变化默认有数据的河流")
|
@Operation(summary = "获取沿程水温变化默认有数据的河流")
|
||||||
public ResponseResult getDefaultStcd(@RequestBody DataSourceRequest dataSourceRequest) {
|
public ResponseResult getDefaultRVCD(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||||
return ResponseResult.successData(alongListService.getDefaultRvcd(dataSourceRequest));
|
return ResponseResult.successData(alongListService.getDefaultRvcd(dataSourceRequest));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -131,6 +138,12 @@ public class SdWTMonitorController {
|
|||||||
return ResponseResult.successData(this.alongListService.getALongKendoListCust(dataSourceRequest));
|
return ResponseResult.successData(this.alongListService.getALongKendoListCust(dataSourceRequest));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PostMapping("/monthList/avgMon/GetKendoListCust")
|
||||||
|
@Operation(summary = "获取月平均水温历史对比数据")
|
||||||
|
public ResponseResult getMonthKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||||
|
return ResponseResult.successData(this.alongListService.getMonthKendoListCust(dataSourceRequest));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@PostMapping("/base/evnmAutoMonitor/GetKendoListCust")
|
@PostMapping("/base/evnmAutoMonitor/GetKendoListCust")
|
||||||
@Operation(summary = "查询水温监测数量")
|
@Operation(summary = "查询水温监测数量")
|
||||||
@ -143,4 +156,49 @@ public class SdWTMonitorController {
|
|||||||
public ResponseResult getVmsstbprptList(@RequestBody DataSourceRequest dataSourceRequest) {
|
public ResponseResult getVmsstbprptList(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||||
return ResponseResult.successData(sdWtMonitorService.getVmsstbprptList(dataSourceRequest));
|
return ResponseResult.successData(sdWtMonitorService.getVmsstbprptList(dataSourceRequest));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PostMapping("/cxDetail/GetKendoListCust")
|
||||||
|
@Operation(summary = "查询垂向水温明细")
|
||||||
|
public ResponseResult getCxDetailList(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||||
|
return ResponseResult.successData(sdWtMonitorService.getCxDetailList(dataSourceRequest));
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("/wtvt/defaultYear/GetKendoListCust")
|
||||||
|
@Operation(summary = "获取垂向水温有数据的年份")
|
||||||
|
public ResponseResult getWtrvDefaultYear(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||||
|
return ResponseResult.successData(sdWtvtRService.getWtrvDefaultYear(dataSourceRequest));
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("/wtrv/fish/GetKendoListCust")
|
||||||
|
@Operation(summary = "鱼类繁殖适宜性分析")
|
||||||
|
public ResponseResult getWtFishAnalysis(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||||
|
return ResponseResult.successData(sdWtMonitorService.getWtFishAnalysis(dataSourceRequest));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@PostMapping("/inOutOne/GetKendoListCust")
|
||||||
|
@Operation(summary = "查询出入库水温一级列表")
|
||||||
|
public ResponseResult getOneLevelCust(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||||
|
return ResponseResult.successData(sdRvwtSInOutOneService.processKendoList(dataSourceRequest));
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("/inOutOne/details")
|
||||||
|
@Operation(summary = "一次性返回出库水温和入库水温详情")
|
||||||
|
public ResponseResult getDetails(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||||
|
return ResponseResult.successData(sdRvwtSInOutOneService.getDetails(dataSourceRequest));
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("/inOutOne/default/stcd")
|
||||||
|
@Operation(summary = "获取出入库水温默认有数据的电站")
|
||||||
|
public ResponseResult getDefaultStcd(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||||
|
return ResponseResult.successData(sdRvwtSInOutOneService.getDefaultStcd(dataSourceRequest));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@PostMapping({"/dzCxList/GetKendoListCust"})
|
||||||
|
@Operation(summary = "电站专题垂向水温一级面板数据列表")
|
||||||
|
public ResponseResult getOneLevelListCust(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||||
|
return ResponseResult.successData(sdDzChuiXiangListService.processKendoList(dataSourceRequest));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
21
backend/src/main/java/com/yfd/platform/env/entity/vo/FishSpawnVo.java
vendored
Normal file
21
backend/src/main/java/com/yfd/platform/env/entity/vo/FishSpawnVo.java
vendored
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
package com.yfd.platform.env.entity.vo;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class FishSpawnVo {
|
||||||
|
|
||||||
|
private String id;
|
||||||
|
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
private String spawnMonthStr;
|
||||||
|
|
||||||
|
private List<String> spawnMonth;
|
||||||
|
|
||||||
|
private String pretempStr;
|
||||||
|
|
||||||
|
private List<String> pretemp;
|
||||||
|
}
|
||||||
21
backend/src/main/java/com/yfd/platform/env/entity/vo/WtFishVo.java
vendored
Normal file
21
backend/src/main/java/com/yfd/platform/env/entity/vo/WtFishVo.java
vendored
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
package com.yfd.platform.env.entity.vo;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class WtFishVo {
|
||||||
|
|
||||||
|
private Date dt;
|
||||||
|
|
||||||
|
private BigDecimal wt;
|
||||||
|
|
||||||
|
private BigDecimal beforeWt;
|
||||||
|
|
||||||
|
private String hbrvcd;
|
||||||
|
|
||||||
|
private List<FishSpawnVo> fishList;
|
||||||
|
}
|
||||||
@ -23,10 +23,8 @@ public interface SdRvwtSInOutOneMapper extends BaseMapper<SdRvwtSVO> {
|
|||||||
"SELECT * FROM (",
|
"SELECT * FROM (",
|
||||||
" SELECT eng.STCD AS stcd, eng.ENNM AS stnm",
|
" SELECT eng.STCD AS stcd, eng.ENNM AS stnm",
|
||||||
" FROM SD_ENGINFO_B_H eng",
|
" FROM SD_ENGINFO_B_H eng",
|
||||||
" INNER JOIN SD_PRWTRLTN_B rel ON rel.STCD = eng.STCD AND rel.IS_DELETED = 0",
|
|
||||||
" WHERE eng.USFL = 1",
|
" WHERE eng.USFL = 1",
|
||||||
" AND eng.DTIN = 1",
|
" AND eng.DTIN = 1",
|
||||||
" AND (rel.ENG_IWT_CODE IS NOT NULL OR rel.ENG_DWT_CODE IS NOT NULL)",
|
|
||||||
" <if test='baseIdList != null and baseIdList.size() > 0'>",
|
" <if test='baseIdList != null and baseIdList.size() > 0'>",
|
||||||
" AND eng.BASE_ID IN",
|
" AND eng.BASE_ID IN",
|
||||||
" <foreach collection='baseIdList' item='baseId' open='(' separator=',' close=')'>",
|
" <foreach collection='baseIdList' item='baseId' open='(' separator=',' close=')'>",
|
||||||
@ -41,9 +39,11 @@ public interface SdRvwtSInOutOneMapper extends BaseMapper<SdRvwtSVO> {
|
|||||||
" </if>",
|
" </if>",
|
||||||
" AND EXISTS (",
|
" AND EXISTS (",
|
||||||
" SELECT 1",
|
" SELECT 1",
|
||||||
" FROM SD_WTRVDAY_S dayData",
|
" FROM SD_WTENGRLTN_B rel",
|
||||||
" WHERE dayData.IS_DELETED = 0",
|
" INNER JOIN SD_WT_B_H wt ON wt.STCD = rel.STCD AND wt.IS_DELETED = 0 AND wt.STTP = 'WTRV'",
|
||||||
" AND (dayData.STCD = rel.ENG_IWT_CODE OR dayData.STCD = rel.ENG_DWT_CODE)",
|
" INNER JOIN SD_WTRVDAY_S dayData ON dayData.STCD = rel.STCD AND dayData.IS_DELETED = 0",
|
||||||
|
" WHERE rel.IS_DELETED = 0",
|
||||||
|
" AND (rel.ENG_IWT_CODE = eng.STCD OR rel.ENG_DWT_CODE = eng.STCD)",
|
||||||
" <if test='startTime != null and endTime != null'>",
|
" <if test='startTime != null and endTime != null'>",
|
||||||
" AND dayData.DT BETWEEN #{startTime} AND #{endTime}",
|
" AND dayData.DT BETWEEN #{startTime} AND #{endTime}",
|
||||||
" </if>",
|
" </if>",
|
||||||
|
|||||||
@ -2,6 +2,7 @@ package com.yfd.platform.env.mapper;
|
|||||||
|
|
||||||
import com.yfd.platform.env.entity.vo.SdWtMonitorCountVO;
|
import com.yfd.platform.env.entity.vo.SdWtMonitorCountVO;
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
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;
|
||||||
@ -19,4 +20,7 @@ public interface SdWtMonitorMapper {
|
|||||||
"FROM SD_WT_B_H " +
|
"FROM SD_WT_B_H " +
|
||||||
"WHERE IS_DELETED = 0 AND STTP = 'WTVT' AND DTIN_TYPE = 0")
|
"WHERE IS_DELETED = 0 AND STTP = 'WTVT' AND DTIN_TYPE = 0")
|
||||||
List<SdWtMonitorCountVO> getMonitorCountList();
|
List<SdWtMonitorCountVO> getMonitorCountList();
|
||||||
|
|
||||||
|
@Select("SELECT WT_DEVICE_TYPE FROM SD_WT_B_H WHERE STCD = #{stcd} AND IS_DELETED = 0")
|
||||||
|
Integer getWtDeviceTypeByStcd(@Param("stcd") String stcd);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -18,4 +18,5 @@ public interface AlongListService {
|
|||||||
Map<String,Object> getWtLimit(DataSourceRequest dataSourceRequest);
|
Map<String,Object> getWtLimit(DataSourceRequest dataSourceRequest);
|
||||||
DataSourceResult getDefaultRvcd(@RequestBody DataSourceRequest dataSourceRequest);
|
DataSourceResult getDefaultRvcd(@RequestBody DataSourceRequest dataSourceRequest);
|
||||||
DataSourceResult getALongKendoListCust(DataSourceRequest dataSourceRequest);
|
DataSourceResult getALongKendoListCust(DataSourceRequest dataSourceRequest);
|
||||||
|
DataSourceResult getMonthKendoListCust(DataSourceRequest dataSourceRequest);
|
||||||
}
|
}
|
||||||
@ -8,4 +8,8 @@ public interface SdWtMonitorService {
|
|||||||
DataSourceResult getEvnmAutoMonitorList();
|
DataSourceResult getEvnmAutoMonitorList();
|
||||||
|
|
||||||
DataSourceResult getVmsstbprptList(DataSourceRequest dataSourceRequest);
|
DataSourceResult getVmsstbprptList(DataSourceRequest dataSourceRequest);
|
||||||
|
|
||||||
|
DataSourceResult getCxDetailList(DataSourceRequest dataSourceRequest);
|
||||||
|
|
||||||
|
DataSourceResult getWtFishAnalysis(DataSourceRequest dataSourceRequest);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,11 +1,14 @@
|
|||||||
package com.yfd.platform.env.service.impl;
|
package com.yfd.platform.env.service.impl;
|
||||||
|
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import com.yfd.platform.common.DataSourceLoadOptionsBase;
|
import com.yfd.platform.common.DataSourceLoadOptionsBase;
|
||||||
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.DynamicSQLMapper;
|
import com.yfd.platform.common.DynamicSQLMapper;
|
||||||
|
import com.yfd.platform.common.MicroservicDynamicSQLMapper;
|
||||||
|
import com.yfd.platform.common.PageInfo;
|
||||||
import com.yfd.platform.common.exception.BizException;
|
import com.yfd.platform.common.exception.BizException;
|
||||||
import com.yfd.platform.env.entity.vo.SdAlongVO;
|
import com.yfd.platform.env.entity.vo.SdAlongVO;
|
||||||
import com.yfd.platform.env.mapper.AlongListMapper;
|
import com.yfd.platform.env.mapper.AlongListMapper;
|
||||||
@ -34,6 +37,8 @@ public class AlongListServiceImpl extends ServiceImpl<AlongListMapper, SdAlongVO
|
|||||||
private DynamicSQLMapper dynamicSQLMapper;
|
private DynamicSQLMapper dynamicSQLMapper;
|
||||||
@Resource
|
@Resource
|
||||||
private AlongListMapper alongListMapper;
|
private AlongListMapper alongListMapper;
|
||||||
|
@Resource
|
||||||
|
private MicroservicDynamicSQLMapper microservicDynamicSQLMapper;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -144,4 +149,208 @@ public class AlongListServiceImpl extends ServiceImpl<AlongListMapper, SdAlongVO
|
|||||||
return dataSourceResult;
|
return dataSourceResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public DataSourceResult getMonthKendoListCust(DataSourceRequest dataSourceRequest) {
|
||||||
|
DataSourceResult dataSourceResult = new DataSourceResult<>();
|
||||||
|
List<DataSourceRequest.FilterDescriptor> filters = new ArrayList<>();
|
||||||
|
collectFilters(dataSourceRequest.getFilter(), filters);
|
||||||
|
|
||||||
|
String rvcd = null;
|
||||||
|
String baseId = null;
|
||||||
|
Object startTime = null;
|
||||||
|
Object endTime = null;
|
||||||
|
Integer year = null;
|
||||||
|
Integer month = null;
|
||||||
|
for (DataSourceRequest.FilterDescriptor filter : filters) {
|
||||||
|
if ("rvcd".equals(filter.getField())) {
|
||||||
|
rvcd = toStringValue(filter.getValue());
|
||||||
|
} else if ("baseId".equals(filter.getField())) {
|
||||||
|
baseId = toStringValue(filter.getValue());
|
||||||
|
} else if ("year".equals(filter.getField())) {
|
||||||
|
year = toIntegerValue(filter.getValue());
|
||||||
|
} else if ("month".equals(filter.getField())) {
|
||||||
|
month = toIntegerValue(filter.getValue());
|
||||||
|
} else if ("tm".equals(filter.getField()) && "gte".equalsIgnoreCase(filter.getOperator())) {
|
||||||
|
startTime = filter.getValue();
|
||||||
|
} else if ("tm".equals(filter.getField()) && "lte".equalsIgnoreCase(filter.getOperator())) {
|
||||||
|
endTime = filter.getValue();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (year == null || month == null) {
|
||||||
|
dataSourceResult.setData(new ArrayList<>());
|
||||||
|
dataSourceResult.setTotal(0L);
|
||||||
|
return dataSourceResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
int beforeYear = year - 1;
|
||||||
|
StringBuilder sql = new StringBuilder();
|
||||||
|
sql.append("SELECT t1.stcd, t1.rstcd, t1.sttp, t1.temperature, t1.tm, t1.stnm, t1.engDwtCode, ")
|
||||||
|
.append("W.WT AS actualTemp, M.WT AS lastTemp, R.WT AS naturalTemp ")
|
||||||
|
.append("FROM (")
|
||||||
|
.append("SELECT t.stcd, t.rstcd, t.rvcd, t.sttp, t.temperature, t.tm, t.rvcdSort, t.sort, t.stnm, t.engDwtCode, ")
|
||||||
|
.append("RANK() OVER (PARTITION BY t.stcd ORDER BY t.tm DESC NULLS LAST) AS rank ")
|
||||||
|
.append("FROM (")
|
||||||
|
.append("SELECT SARC.STCD AS stcd, ")
|
||||||
|
.append("SARC.RSTCD AS rstcd, ")
|
||||||
|
.append("MAB.RVCD AS rvcd, ")
|
||||||
|
.append("MAB.ORDER_INDEX AS rvcdSort, ")
|
||||||
|
.append("SARC.SORT AS sort, ")
|
||||||
|
.append("CASE WHEN SARC.STTP = 'ENG' THEN '1' WHEN SARC.STTP = 'WTRV' THEN '2' END AS sttp, ")
|
||||||
|
.append("SWR.WT AS temperature, ")
|
||||||
|
.append("SWR.TM AS tm, ")
|
||||||
|
.append("CASE WHEN SARC.STTP = 'ENG' THEN ENG.ENNM ELSE WT.STNM END AS stnm, ")
|
||||||
|
.append("REL.ENG_DWT_CODE AS engDwtCode ")
|
||||||
|
.append("FROM MS_ALONG_B MAB ")
|
||||||
|
.append("INNER JOIN MS_ALONGDET_B SARC ON MAB.ID = SARC.ALONG_ID ")
|
||||||
|
.append("LEFT JOIN SD_ENGINFO_B_H ENG ON ENG.STCD = SARC.STCD ")
|
||||||
|
.append("LEFT JOIN SD_WT_B_H WT ON WT.STCD = SARC.STCD AND WT.IS_DELETED = 0 AND WT.STTP = 'WTRV' ")
|
||||||
|
.append("LEFT JOIN SD_WTENGRLTN_B REL ON REL.STCD = SARC.STCD AND REL.IS_DELETED = 0 ")
|
||||||
|
.append("LEFT JOIN SD_WTRV_R SWR ON SWR.STCD = SARC.STCD AND SWR.IS_DELETED = 0 ");
|
||||||
|
if (startTime != null) {
|
||||||
|
sql.append("AND SWR.TM >= TO_DATE(#{map.startTime}, 'YYYY-MM-DD HH24:MI:SS') ");
|
||||||
|
}
|
||||||
|
if (endTime != null) {
|
||||||
|
sql.append("AND SWR.TM <= TO_DATE(#{map.endTime}, 'YYYY-MM-DD HH24:MI:SS') ");
|
||||||
|
}
|
||||||
|
sql.append("WHERE MAB.CODE = 'common' ")
|
||||||
|
.append("AND MAB.IS_DELETED = 0 ")
|
||||||
|
.append("AND SARC.IS_DELETED = 0 ")
|
||||||
|
.append("AND (SARC.STTP = 'ENG' OR (SARC.STTP = 'WTRV' AND REL.ENG_DWT_CODE IS NOT NULL)) ");
|
||||||
|
if (StrUtil.isNotBlank(rvcd)) {
|
||||||
|
sql.append("AND MAB.RVCD = #{map.rvcd} ");
|
||||||
|
}
|
||||||
|
if (StrUtil.isNotBlank(baseId)) {
|
||||||
|
sql.append("AND MAB.RVCD IN (SELECT HBRVCD FROM SD_HBRV_DIC WHERE IS_DELETED = 0 AND ENABLED = 1 AND BASEID = #{map.baseId}) ");
|
||||||
|
}
|
||||||
|
sql.append(") t ")
|
||||||
|
.append(") t1 ")
|
||||||
|
.append("LEFT JOIN (")
|
||||||
|
.append("SELECT s.STCD, s.WT ")
|
||||||
|
.append("FROM SD_WTRVDRTP_S s ")
|
||||||
|
.append("INNER JOIN SD_WT_B_H wtMon ON wtMon.STCD = s.STCD AND wtMon.IS_DELETED = 0 AND wtMon.STTP = 'WTRV' AND wtMon.USFL = 1 AND wtMon.MWAY = 2 ")
|
||||||
|
.append("WHERE s.IS_DELETED = 0 AND s.DRTP = 'MON' AND s.YEAR = #{map.year} AND s.MONTH = #{map.month}")
|
||||||
|
.append(") W ON t1.STCD = W.STCD ")
|
||||||
|
.append("LEFT JOIN (")
|
||||||
|
.append("SELECT s.STCD, s.WT ")
|
||||||
|
.append("FROM SD_WTRVDRTP_S s ")
|
||||||
|
.append("INNER JOIN SD_WT_B_H wtMon ON wtMon.STCD = s.STCD AND wtMon.IS_DELETED = 0 AND wtMon.STTP = 'WTRV' AND wtMon.USFL = 1 AND wtMon.MWAY = 2 ")
|
||||||
|
.append("WHERE s.IS_DELETED = 0 AND s.DRTP = 'MON' AND s.YEAR = #{map.beforeYear} AND s.MONTH = #{map.month}")
|
||||||
|
.append(") M ON t1.STCD = M.STCD ")
|
||||||
|
.append("LEFT JOIN (")
|
||||||
|
.append("SELECT STCD, WT FROM SD_WTNP_B WHERE IS_DELETED = 0 AND WTTP = 1 AND MNTH = #{map.month}")
|
||||||
|
.append(") R ON t1.STCD = R.STCD ")
|
||||||
|
.append("WHERE t1.rank = 1 ")
|
||||||
|
.append("ORDER BY t1.rvcdSort ASC, t1.sort ASC");
|
||||||
|
|
||||||
|
Map<String, Object> paramMap = new HashMap<>();
|
||||||
|
paramMap.put("rvcd", rvcd);
|
||||||
|
paramMap.put("baseId", baseId);
|
||||||
|
paramMap.put("startTime", startTime);
|
||||||
|
paramMap.put("endTime", endTime);
|
||||||
|
paramMap.put("year", year);
|
||||||
|
paramMap.put("beforeYear", beforeYear);
|
||||||
|
paramMap.put("month", month);
|
||||||
|
|
||||||
|
Page<?> page = buildPage(dataSourceRequest.toDevRequest());
|
||||||
|
List<SdAlongVO> list = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), paramMap, SdAlongVO.class);
|
||||||
|
List<SdAlongVO> resultList = rebuildMonthList(list);
|
||||||
|
dataSourceResult.setData(resultList);
|
||||||
|
dataSourceResult.setTotal(page != null ? page.getTotal() : (long) resultList.size());
|
||||||
|
return dataSourceResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Page<?> buildPage(DataSourceLoadOptionsBase loadOptions) {
|
||||||
|
PageInfo pageInfo = QgcQueryWrapperUtil.getPageInfo(loadOptions);
|
||||||
|
if (Boolean.TRUE.equals(pageInfo.getHasPageInfo())) {
|
||||||
|
return pageInfo.getPage();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private void collectFilters(DataSourceRequest.FilterDescriptor filter, List<DataSourceRequest.FilterDescriptor> result) {
|
||||||
|
if (filter == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (filter.getFilters() == null || filter.getFilters().isEmpty()) {
|
||||||
|
if (StrUtil.isNotBlank(filter.getField())) {
|
||||||
|
result.add(filter);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for (DataSourceRequest.FilterDescriptor child : filter.getFilters()) {
|
||||||
|
collectFilters(child, result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private String toStringValue(Object value) {
|
||||||
|
return value == null ? null : String.valueOf(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Integer toIntegerValue(Object value) {
|
||||||
|
if (value == null || StrUtil.isBlank(String.valueOf(value))) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return Integer.parseInt(String.valueOf(value));
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<SdAlongVO> rebuildMonthList(List<SdAlongVO> list) {
|
||||||
|
if (CollectionUtils.isEmpty(list)) {
|
||||||
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
List<String> sttpList = list.stream().map(SdAlongVO::getSttp).collect(Collectors.toList());
|
||||||
|
int firstEnvIndex = sttpList.indexOf(SdAlongVO.TYPE_ENV);
|
||||||
|
if (firstEnvIndex == -1) {
|
||||||
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
if (firstEnvIndex - 1 >= 0) {
|
||||||
|
list = new ArrayList<>(list.subList(firstEnvIndex - 1, list.size()));
|
||||||
|
sttpList = new ArrayList<>(sttpList.subList(firstEnvIndex - 1, sttpList.size()));
|
||||||
|
}
|
||||||
|
int lastEnvIndex = sttpList.lastIndexOf(SdAlongVO.TYPE_ENV);
|
||||||
|
if (lastEnvIndex != -1 && lastEnvIndex + 2 <= list.size()) {
|
||||||
|
list = new ArrayList<>(list.subList(0, lastEnvIndex + 2));
|
||||||
|
}
|
||||||
|
|
||||||
|
Set<String> rstcdSet = list.stream()
|
||||||
|
.filter(sdAlongVO -> SdAlongVO.TYPE_ENV.equals(sdAlongVO.getSttp()))
|
||||||
|
.map(SdAlongVO::getRstcd)
|
||||||
|
.collect(Collectors.toSet());
|
||||||
|
list = list.stream()
|
||||||
|
.filter(sdAlongVO -> SdAlongVO.TYPE_ENV.equals(sdAlongVO.getSttp()) || rstcdSet.contains(sdAlongVO.getStcd()))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
|
SdAlongVO maxTmVo = list.stream()
|
||||||
|
.filter(sdAlongVO -> StringUtils.isNotBlank(sdAlongVO.getTm()))
|
||||||
|
.max(Comparator.comparing(SdAlongVO::getTm))
|
||||||
|
.orElse(null);
|
||||||
|
if (!CollectionUtils.isEmpty(list)) {
|
||||||
|
list.get(0).setMinTm(maxTmVo == null ? null : maxTmVo.getTm());
|
||||||
|
}
|
||||||
|
|
||||||
|
List<SdAlongVO> engList = new ArrayList<>();
|
||||||
|
List<SdAlongVO> wtList = new ArrayList<>();
|
||||||
|
for (SdAlongVO item : list) {
|
||||||
|
if (StringUtils.equals(SdAlongVO.TYPE_ENG, item.getSttp())) {
|
||||||
|
engList.add(item);
|
||||||
|
} else if (StringUtils.equals(SdAlongVO.TYPE_ENV, item.getSttp())) {
|
||||||
|
wtList.add(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
List<SdAlongVO> result = new ArrayList<>();
|
||||||
|
for (SdAlongVO engVo : engList) {
|
||||||
|
result.add(engVo);
|
||||||
|
for (SdAlongVO wtVo : wtList) {
|
||||||
|
if (StringUtils.equals(engVo.getStcd(), wtVo.getEngDwtCode())) {
|
||||||
|
result.add(wtVo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -69,7 +69,7 @@ public class SdRvwtSInOutOneServiceImpl extends ServiceImpl<SdRvwtSInOutOneMappe
|
|||||||
@Override
|
@Override
|
||||||
public DataSourceResult<StcdVo> getDefaultStcd(DataSourceRequest dataSourceRequest) {
|
public DataSourceResult<StcdVo> getDefaultStcd(DataSourceRequest dataSourceRequest) {
|
||||||
DataSourceLoadOptionsBase loadOptions = dataSourceRequest.toDevRequest();
|
DataSourceLoadOptionsBase loadOptions = dataSourceRequest.toDevRequest();
|
||||||
Date[] timeRange = parseTimeRange(QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "tm"));
|
Date[] timeRange = parseTimeRange(QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "dt"));
|
||||||
List<String> baseIdList = splitFilterValues(QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "baseId"));
|
List<String> baseIdList = splitFilterValues(QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "baseId"));
|
||||||
List<String> rvcdList = splitFilterValues(QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "rvcd"));
|
List<String> rvcdList = splitFilterValues(QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "rvcd"));
|
||||||
|
|
||||||
|
|||||||
@ -1,19 +1,31 @@
|
|||||||
package com.yfd.platform.env.service.impl;
|
package com.yfd.platform.env.service.impl;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.yfd.platform.common.*;
|
import com.yfd.platform.common.*;
|
||||||
|
import com.yfd.platform.env.entity.vo.FishSpawnVo;
|
||||||
import com.yfd.platform.env.entity.vo.SdWtMonitorCountVO;
|
import com.yfd.platform.env.entity.vo.SdWtMonitorCountVO;
|
||||||
import com.yfd.platform.env.entity.vo.SdWtBaseInfoVO;
|
import com.yfd.platform.env.entity.vo.SdWtBaseInfoVO;
|
||||||
|
import com.yfd.platform.env.entity.vo.WtFishVo;
|
||||||
import com.yfd.platform.env.mapper.SdWtMonitorMapper;
|
import com.yfd.platform.env.mapper.SdWtMonitorMapper;
|
||||||
import com.yfd.platform.env.service.SdWtMonitorService;
|
import com.yfd.platform.env.service.SdWtMonitorService;
|
||||||
import com.yfd.platform.utils.QgcQueryWrapperUtil;
|
import com.yfd.platform.utils.QgcQueryWrapperUtil;
|
||||||
import jakarta.annotation.Resource;
|
import jakarta.annotation.Resource;
|
||||||
|
import lombok.Data;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Calendar;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Comparator;
|
||||||
|
import java.util.Date;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Objects;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class SdWtMonitorServiceImpl implements SdWtMonitorService {
|
public class SdWtMonitorServiceImpl implements SdWtMonitorService {
|
||||||
@ -34,6 +46,86 @@ public class SdWtMonitorServiceImpl implements SdWtMonitorService {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public DataSourceResult getWtFishAnalysis(DataSourceRequest dataSourceRequest) {
|
||||||
|
List<DataSourceRequest.FilterDescriptor> filters = new ArrayList<>();
|
||||||
|
collectFilters(dataSourceRequest.getFilter(), filters);
|
||||||
|
|
||||||
|
String stcd = null;
|
||||||
|
String startTime = null;
|
||||||
|
String endTime = null;
|
||||||
|
for (DataSourceRequest.FilterDescriptor filter : filters) {
|
||||||
|
if ("stcd".equals(filter.getField())) {
|
||||||
|
stcd = toStringValue(filter.getValue());
|
||||||
|
} else if ("startTime".equals(filter.getField())) {
|
||||||
|
startTime = toStringValue(filter.getValue());
|
||||||
|
} else if ("endTime".equals(filter.getField())) {
|
||||||
|
endTime = toStringValue(filter.getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
DataSourceResult<WtFishVo> result = new DataSourceResult<>();
|
||||||
|
if (StrUtil.isBlank(stcd) || StrUtil.isBlank(startTime) || StrUtil.isBlank(endTime)) {
|
||||||
|
result.setData(new ArrayList<>());
|
||||||
|
result.setTotal(0L);
|
||||||
|
result.setAggregates(new HashMap<>());
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
StringBuilder sql = new StringBuilder();
|
||||||
|
sql.append("SELECT ")
|
||||||
|
.append("t1.DT AS dt, ")
|
||||||
|
.append("t2.WT AS wt, ")
|
||||||
|
.append("eng.HBRVCD AS hbrvcd, ")
|
||||||
|
.append("t3.WT AS beforeWt ")
|
||||||
|
.append("FROM (SELECT TRUNC(TO_DATE(#{map.startTime}, 'YYYY-MM-DD HH24:MI:SS')) + LEVEL - 1 AS DT ")
|
||||||
|
.append(" FROM DUAL ")
|
||||||
|
.append(" CONNECT BY TRUNC(TO_DATE(#{map.startTime}, 'YYYY-MM-DD HH24:MI:SS')) + LEVEL - 1 <= TRUNC(TO_DATE(#{map.endTime}, 'YYYY-MM-DD HH24:MI:SS'))) t1 ")
|
||||||
|
.append("LEFT JOIN (SELECT STCD, WT, DT FROM SD_WTRVDAY_S ")
|
||||||
|
.append(" WHERE IS_DELETED = 0 ")
|
||||||
|
.append(" AND STCD = #{map.stcd} ")
|
||||||
|
.append(" AND DT >= TO_DATE(#{map.startTime}, 'YYYY-MM-DD HH24:MI:SS') ")
|
||||||
|
.append(" AND DT <= TO_DATE(#{map.endTime}, 'YYYY-MM-DD HH24:MI:SS')) t2 ")
|
||||||
|
.append(" ON t1.DT = t2.DT ")
|
||||||
|
.append("LEFT JOIN (SELECT STCD, WT, DT FROM SD_WTRVDAY_S ")
|
||||||
|
.append(" WHERE IS_DELETED = 0 ")
|
||||||
|
.append(" AND STCD = #{map.stcd} ")
|
||||||
|
.append(" AND DT >= ADD_MONTHS(TO_DATE(#{map.startTime}, 'YYYY-MM-DD HH24:MI:SS'), -12) ")
|
||||||
|
.append(" AND DT <= ADD_MONTHS(TO_DATE(#{map.endTime}, 'YYYY-MM-DD HH24:MI:SS'), -12)) t3 ")
|
||||||
|
.append(" ON t1.DT = ADD_MONTHS(t3.DT, 12) ")
|
||||||
|
.append("LEFT JOIN SD_WT_B_H wt ON wt.STCD = #{map.stcd} AND wt.IS_DELETED = 0 AND wt.STTP = 'WTRV' ")
|
||||||
|
.append("LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = wt.RSTCD ")
|
||||||
|
.append("WHERE (t2.WT IS NOT NULL OR t3.WT IS NOT NULL) ")
|
||||||
|
.append(" AND t1.DT <= SYSDATE ")
|
||||||
|
.append("ORDER BY t1.DT DESC");
|
||||||
|
|
||||||
|
Map<String, Object> paramMap = new HashMap<>();
|
||||||
|
paramMap.put("stcd", stcd);
|
||||||
|
paramMap.put("startTime", startTime);
|
||||||
|
paramMap.put("endTime", endTime);
|
||||||
|
|
||||||
|
Page<?> page = buildPage(dataSourceRequest.toDevRequest());
|
||||||
|
List<WtFishVo> wtFishVoList = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), paramMap, WtFishVo.class);
|
||||||
|
String hbrvcd = wtFishVoList.isEmpty() ? null : wtFishVoList.get(0).getHbrvcd();
|
||||||
|
|
||||||
|
if (StrUtil.isNotBlank(hbrvcd)) {
|
||||||
|
String fishSql = "SELECT ID, NAME, PRETEMP AS pretempStr, SPAWN_MONTH AS spawnMonthStr " +
|
||||||
|
"FROM SD_FISHDICTORY_B " +
|
||||||
|
"WHERE IS_DELETED = 0 AND ENABLE = 1 AND PRETEMP IS NOT NULL AND SPAWN_MONTH IS NOT NULL " +
|
||||||
|
"AND RVCD = #{map.hbrvcd} " +
|
||||||
|
"ORDER BY NVL(ORDER_INDEX, 999999), NAME";
|
||||||
|
Map<String, Object> fishParamMap = new HashMap<>();
|
||||||
|
fishParamMap.put("hbrvcd", hbrvcd);
|
||||||
|
List<FishSpawnVo> fishSpawnVoList = microservicDynamicSQLMapper.getAllListWithResultType(fishSql, fishParamMap, FishSpawnVo.class);
|
||||||
|
fillFishList(wtFishVoList, fishSpawnVoList);
|
||||||
|
}
|
||||||
|
|
||||||
|
result.setData(wtFishVoList);
|
||||||
|
result.setTotal(page != null ? page.getTotal() : wtFishVoList.size());
|
||||||
|
result.setAggregates(new HashMap<>());
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public DataSourceResult getVmsstbprptList(DataSourceRequest dataSourceRequest) {
|
public DataSourceResult getVmsstbprptList(DataSourceRequest dataSourceRequest) {
|
||||||
DataSourceLoadOptionsBase loadOptions = dataSourceRequest.toDevRequest();
|
DataSourceLoadOptionsBase loadOptions = dataSourceRequest.toDevRequest();
|
||||||
@ -107,6 +199,258 @@ public class SdWtMonitorServiceImpl implements SdWtMonitorService {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public DataSourceResult getCxDetailList(DataSourceRequest dataSourceRequest) {
|
||||||
|
List<DataSourceRequest.FilterDescriptor> filters = new ArrayList<>();
|
||||||
|
collectFilters(dataSourceRequest.getFilter(), filters);
|
||||||
|
|
||||||
|
String stcd = null;
|
||||||
|
String drtp = null;
|
||||||
|
Object startTime = null;
|
||||||
|
Object endTime = null;
|
||||||
|
Integer startYear = null;
|
||||||
|
Integer endYear = null;
|
||||||
|
Integer startMonth = null;
|
||||||
|
Integer endMonth = null;
|
||||||
|
Integer startDr = null;
|
||||||
|
Integer endDr = null;
|
||||||
|
|
||||||
|
for (DataSourceRequest.FilterDescriptor filter : filters) {
|
||||||
|
if ("stcd".equals(filter.getField())) {
|
||||||
|
stcd = toStringValue(filter.getValue());
|
||||||
|
} else if ("drtp".equals(filter.getField())) {
|
||||||
|
drtp = toStringValue(filter.getValue());
|
||||||
|
} else if ("tm".equals(filter.getField()) && "gte".equals(filter.getOperator())) {
|
||||||
|
startTime = filter.getValue();
|
||||||
|
} else if ("tm".equals(filter.getField()) && "lte".equals(filter.getOperator())) {
|
||||||
|
endTime = filter.getValue();
|
||||||
|
} else if ("startYear".equals(filter.getField()) && "gte".equals(filter.getOperator())) {
|
||||||
|
startYear = toIntegerValue(filter.getValue());
|
||||||
|
} else if ("endYear".equals(filter.getField()) && "lte".equals(filter.getOperator())) {
|
||||||
|
endYear = toIntegerValue(filter.getValue());
|
||||||
|
} else if ("startMonth".equals(filter.getField()) && "gte".equals(filter.getOperator())) {
|
||||||
|
startMonth = toIntegerValue(filter.getValue());
|
||||||
|
} else if ("endMonth".equals(filter.getField()) && "lte".equals(filter.getOperator())) {
|
||||||
|
endMonth = toIntegerValue(filter.getValue());
|
||||||
|
} else if ("startDr".equals(filter.getField()) && "gte".equals(filter.getOperator())) {
|
||||||
|
startDr = toIntegerValue(filter.getValue());
|
||||||
|
} else if ("endDr".equals(filter.getField()) && "lte".equals(filter.getOperator())) {
|
||||||
|
endDr = toIntegerValue(filter.getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (StrUtil.isBlank(stcd)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
Integer wtDeviceType = sdWtMonitorMapper.getWtDeviceTypeByStcd(stcd);
|
||||||
|
StringBuilder sql = new StringBuilder();
|
||||||
|
Map<String, Object> paramMap = new HashMap<>();
|
||||||
|
paramMap.put("stcd", stcd);
|
||||||
|
|
||||||
|
if ("DAY".equals(drtp)) {
|
||||||
|
if (startTime == null || endTime == null) {
|
||||||
|
return emptyCxDetailResult(wtDeviceType, drtp);
|
||||||
|
}
|
||||||
|
sql.append("SELECT t1.STCD AS stcd, ")
|
||||||
|
.append("wt.STNM AS stnm, ")
|
||||||
|
.append("TO_CHAR(t1.DT, 'YYYY-MM-DD') AS dt, ")
|
||||||
|
.append("LISTAGG(TO_CHAR(t1.WTHG), ',') WITHIN GROUP(ORDER BY t1.VWT) AS wthg, ")
|
||||||
|
.append("LISTAGG(TO_CHAR(t1.VWT), ',') WITHIN GROUP(ORDER BY t1.VWT) AS vwt ")
|
||||||
|
.append("FROM SD_WTVTDAY_S t1 ")
|
||||||
|
.append("INNER JOIN SD_WT_B_H wt ON t1.STCD = wt.STCD ")
|
||||||
|
.append("WHERE t1.STCD = #{map.stcd} ")
|
||||||
|
.append("AND t1.IS_DELETED = 0 ")
|
||||||
|
.append("AND wt.IS_DELETED = 0 ")
|
||||||
|
.append("AND wt.STTP = 'WTVT' ")
|
||||||
|
.append("AND t1.DT <= #{map.endTime} ")
|
||||||
|
.append("AND t1.DT >= #{map.startTime} ")
|
||||||
|
.append("AND t1.WTHG IS NOT NULL ")
|
||||||
|
.append("AND t1.VWT IS NOT NULL ")
|
||||||
|
.append("GROUP BY t1.DT, t1.STCD, wt.STNM ");
|
||||||
|
paramMap.put("startTime", startTime);
|
||||||
|
paramMap.put("endTime", endTime);
|
||||||
|
} else if ("HOUR".equals(drtp)) {
|
||||||
|
if (startTime == null || endTime == null) {
|
||||||
|
return emptyCxDetailResult(wtDeviceType, drtp);
|
||||||
|
}
|
||||||
|
sql.append("SELECT t1.STCD AS stcd, ")
|
||||||
|
.append("wt.STNM AS stnm, ")
|
||||||
|
.append("TO_CHAR(t1.TM, 'YYYY-MM-DD HH24:MI:SS') AS dt, ")
|
||||||
|
.append("LISTAGG(TO_CHAR(t1.WTHG), ',') WITHIN GROUP(ORDER BY t1.WTHG) AS wthg, ")
|
||||||
|
.append("LISTAGG(TO_CHAR(t1.VWT), ',') WITHIN GROUP(ORDER BY t1.WTHG) AS vwt ")
|
||||||
|
.append("FROM SD_WTVT_R t1 ")
|
||||||
|
.append("INNER JOIN SD_WT_B_H wt ON t1.STCD = wt.STCD ")
|
||||||
|
.append("WHERE t1.STCD = #{map.stcd} ")
|
||||||
|
.append("AND t1.IS_DELETED = 0 ")
|
||||||
|
.append("AND wt.IS_DELETED = 0 ")
|
||||||
|
.append("AND wt.STTP = 'WTVT' ")
|
||||||
|
.append("AND t1.TM <= TO_DATE(#{map.endTime}, 'YYYY-MM-DD HH24:MI:SS') ")
|
||||||
|
.append("AND t1.TM >= TO_DATE(#{map.startTime}, 'YYYY-MM-DD HH24:MI:SS') ")
|
||||||
|
.append("AND t1.WTHG IS NOT NULL ")
|
||||||
|
.append("AND t1.VWT IS NOT NULL ")
|
||||||
|
.append("GROUP BY t1.TM, t1.STCD, wt.STNM ");
|
||||||
|
paramMap.put("startTime", startTime);
|
||||||
|
paramMap.put("endTime", endTime);
|
||||||
|
} else if ("YEAR".equals(drtp)) {
|
||||||
|
if (startYear == null || endYear == null) {
|
||||||
|
return emptyCxDetailResult(wtDeviceType, drtp);
|
||||||
|
}
|
||||||
|
sql.append("SELECT t1.STCD AS stcd, ")
|
||||||
|
.append("wt.STNM AS stnm, ")
|
||||||
|
.append("t1.YEAR || '年' AS dt, ")
|
||||||
|
.append("LISTAGG(TO_CHAR(t1.WTHG), ',') WITHIN GROUP(ORDER BY t1.WTHG) AS wthg, ")
|
||||||
|
.append("LISTAGG(TO_CHAR(t1.VWT), ',') WITHIN GROUP(ORDER BY t1.WTHG) AS vwt ")
|
||||||
|
.append("FROM SD_WTVTDRTP_S t1 ")
|
||||||
|
.append("LEFT JOIN SD_WT_B_H wt ON t1.STCD = wt.STCD ")
|
||||||
|
.append("WHERE t1.DRTP = 'YEAR' ")
|
||||||
|
.append("AND t1.STCD = #{map.stcd} ")
|
||||||
|
.append("AND t1.IS_DELETED = 0 ")
|
||||||
|
.append("AND wt.IS_DELETED = 0 ")
|
||||||
|
.append("AND wt.STTP = 'WTVT' ")
|
||||||
|
.append("AND t1.YEAR >= #{map.startYear} ")
|
||||||
|
.append("AND t1.YEAR <= #{map.endYear} ")
|
||||||
|
.append("GROUP BY t1.STCD, wt.STNM, t1.YEAR ");
|
||||||
|
paramMap.put("startYear", startYear);
|
||||||
|
paramMap.put("endYear", endYear);
|
||||||
|
} else if ("MON".equals(drtp)) {
|
||||||
|
if (startYear == null || endYear == null || startMonth == null || endMonth == null) {
|
||||||
|
return emptyCxDetailResult(wtDeviceType, drtp);
|
||||||
|
}
|
||||||
|
sql.append("SELECT t1.STCD AS stcd, ")
|
||||||
|
.append("wt.STNM AS stnm, ")
|
||||||
|
.append("t1.YEAR || '-' || LPAD(t1.MONTH, 2, '0') AS dt, ")
|
||||||
|
.append("LISTAGG(TO_CHAR(t1.WTHG), ',') WITHIN GROUP(ORDER BY t1.WTHG) AS wthg, ")
|
||||||
|
.append("LISTAGG(TO_CHAR(t1.VWT), ',') WITHIN GROUP(ORDER BY t1.WTHG) AS vwt ")
|
||||||
|
.append("FROM SD_WTVTDRTP_S t1 ")
|
||||||
|
.append("LEFT JOIN SD_WT_B_H wt ON t1.STCD = wt.STCD ")
|
||||||
|
.append("WHERE t1.DRTP = 'MON' ")
|
||||||
|
.append("AND t1.STCD = #{map.stcd} ")
|
||||||
|
.append("AND t1.IS_DELETED = 0 ")
|
||||||
|
.append("AND wt.IS_DELETED = 0 ")
|
||||||
|
.append("AND wt.STTP = 'WTVT' ")
|
||||||
|
.append("AND TO_DATE(t1.YEAR || '-' || t1.MONTH, 'YYYY-MM') >= TO_DATE(#{map.startYearMonth}, 'YYYY-MM') ")
|
||||||
|
.append("AND TO_DATE(t1.YEAR || '-' || t1.MONTH, 'YYYY-MM') <= TO_DATE(#{map.endYearMonth}, 'YYYY-MM') ")
|
||||||
|
.append("GROUP BY t1.STCD, wt.STNM, t1.YEAR, t1.MONTH ");
|
||||||
|
paramMap.put("startYearMonth", startYear + "-" + startMonth);
|
||||||
|
paramMap.put("endYearMonth", endYear + "-" + endMonth);
|
||||||
|
} else if ("QUA".equals(drtp)) {
|
||||||
|
if (startYear == null || endYear == null || startDr == null || endDr == null) {
|
||||||
|
return emptyCxDetailResult(wtDeviceType, drtp);
|
||||||
|
}
|
||||||
|
sql.append("SELECT t1.STCD AS stcd, ")
|
||||||
|
.append("wt.STNM AS stnm, ")
|
||||||
|
.append("t1.YEAR || '年' || t1.DR || '季度' AS dt, ")
|
||||||
|
.append("LISTAGG(TO_CHAR(t1.WTHG), ',') WITHIN GROUP(ORDER BY t1.WTHG) AS wthg, ")
|
||||||
|
.append("LISTAGG(TO_CHAR(t1.VWT), ',') WITHIN GROUP(ORDER BY t1.WTHG) AS vwt ")
|
||||||
|
.append("FROM SD_WTVTDRTP_S t1 ")
|
||||||
|
.append("LEFT JOIN SD_WT_B_H wt ON t1.STCD = wt.STCD ")
|
||||||
|
.append("WHERE t1.DRTP = 'QUA' ")
|
||||||
|
.append("AND t1.STCD = #{map.stcd} ")
|
||||||
|
.append("AND t1.IS_DELETED = 0 ")
|
||||||
|
.append("AND wt.IS_DELETED = 0 ")
|
||||||
|
.append("AND wt.STTP = 'WTVT' ")
|
||||||
|
.append("AND t1.YEAR >= #{map.startYear} ")
|
||||||
|
.append("AND t1.YEAR <= #{map.endYear} ")
|
||||||
|
.append("AND t1.DR >= #{map.startDr} ")
|
||||||
|
.append("AND t1.DR <= #{map.endDr} ")
|
||||||
|
.append("GROUP BY t1.STCD, wt.STNM, t1.YEAR, t1.DR ");
|
||||||
|
paramMap.put("startYear", startYear);
|
||||||
|
paramMap.put("endYear", endYear);
|
||||||
|
paramMap.put("startDr", startDr);
|
||||||
|
paramMap.put("endDr", endDr);
|
||||||
|
} else if ("TEN".equals(drtp)) {
|
||||||
|
if (startYear == null || endYear == null || startMonth == null || endMonth == null || startDr == null || endDr == null) {
|
||||||
|
return emptyCxDetailResult(wtDeviceType, drtp);
|
||||||
|
}
|
||||||
|
sql.append("SELECT t1.STCD AS stcd, ")
|
||||||
|
.append("wt.STNM AS stnm, ")
|
||||||
|
.append("t1.YEAR || '年' || t1.MONTH || '月' || CASE t1.DR WHEN 1 THEN '上' WHEN 2 THEN '中' WHEN 3 THEN '下' ELSE '' END || '旬' AS dt, ")
|
||||||
|
.append("LISTAGG(TO_CHAR(t1.WTHG), ',') WITHIN GROUP(ORDER BY t1.WTHG) AS wthg, ")
|
||||||
|
.append("LISTAGG(TO_CHAR(t1.VWT), ',') WITHIN GROUP(ORDER BY t1.WTHG) AS vwt ")
|
||||||
|
.append("FROM SD_WTVTDRTP_S t1 ")
|
||||||
|
.append("LEFT JOIN SD_WT_B_H wt ON t1.STCD = wt.STCD ")
|
||||||
|
.append("WHERE t1.DRTP = 'TEN' ")
|
||||||
|
.append("AND t1.STCD = #{map.stcd} ")
|
||||||
|
.append("AND t1.IS_DELETED = 0 ")
|
||||||
|
.append("AND wt.IS_DELETED = 0 ")
|
||||||
|
.append("AND wt.STTP = 'WTVT' ")
|
||||||
|
.append("AND t1.YEAR >= #{map.startYear} ")
|
||||||
|
.append("AND t1.YEAR <= #{map.endYear} ")
|
||||||
|
.append("AND t1.MONTH >= #{map.startMonth} ")
|
||||||
|
.append("AND t1.MONTH <= #{map.endMonth} ")
|
||||||
|
.append("AND t1.DR >= #{map.startDr} ")
|
||||||
|
.append("AND t1.DR <= #{map.endDr} ")
|
||||||
|
.append("GROUP BY t1.STCD, wt.STNM, t1.YEAR, t1.MONTH, t1.DR ");
|
||||||
|
paramMap.put("startYear", startYear);
|
||||||
|
paramMap.put("endYear", endYear);
|
||||||
|
paramMap.put("startMonth", startMonth);
|
||||||
|
paramMap.put("endMonth", endMonth);
|
||||||
|
paramMap.put("startDr", startDr);
|
||||||
|
paramMap.put("endDr", endDr);
|
||||||
|
} else {
|
||||||
|
return emptyCxDetailResult(wtDeviceType, drtp);
|
||||||
|
}
|
||||||
|
|
||||||
|
appendCxDetailOrderBy(sql, dataSourceRequest.getSort());
|
||||||
|
Page<?> page = buildPage(dataSourceRequest.toDevRequest());
|
||||||
|
List<WtCxDetailRow> rowList = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), paramMap, WtCxDetailRow.class);
|
||||||
|
|
||||||
|
List<Double> verticalList = getVerticals(rowList, wtDeviceType);
|
||||||
|
List<Map<String, Object>> resultData = new ArrayList<>();
|
||||||
|
for (WtCxDetailRow row : rowList) {
|
||||||
|
Map<String, Object> result = new LinkedHashMap<>();
|
||||||
|
result.put("stcd", row.getStcd());
|
||||||
|
result.put("stnm", row.getStnm());
|
||||||
|
result.put("dt", row.getDt());
|
||||||
|
|
||||||
|
Map<String, Object> dataList = new LinkedHashMap<>();
|
||||||
|
for (Double vertical : verticalList) {
|
||||||
|
dataList.put(Double.toString(vertical), "-");
|
||||||
|
}
|
||||||
|
|
||||||
|
List<String> wthgList = splitValue(row.getWthg());
|
||||||
|
List<String> vwtList = splitValue(row.getVwt());
|
||||||
|
for (int i = 0; i < wthgList.size(); i++) {
|
||||||
|
try {
|
||||||
|
Double wthg = Double.parseDouble(wthgList.get(i));
|
||||||
|
String key = Double.toString(wthg);
|
||||||
|
String vwt = i < vwtList.size() ? vwtList.get(i) : null;
|
||||||
|
dataList.put(key, vwt);
|
||||||
|
} catch (NumberFormatException ignored) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
result.put("dataList", dataList);
|
||||||
|
resultData.add(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
List<Map<String, Object>> columns = new ArrayList<>();
|
||||||
|
columns.add(buildColumn("stnm", "测站名称", true, "stnm", false, null, null));
|
||||||
|
String dateFormat = "yyyy-MM-dd HH:mm";
|
||||||
|
if ("DAY".equals(drtp)) {
|
||||||
|
dateFormat = "yyyy-MM-dd";
|
||||||
|
} else if ("MON".equals(drtp)) {
|
||||||
|
dateFormat = "yyyy-MM";
|
||||||
|
}
|
||||||
|
columns.add(buildColumn("dt", "时间", true, "dt", false, "date", dateFormat));
|
||||||
|
for (Double vertical : verticalList) {
|
||||||
|
String key = Double.toString(vertical);
|
||||||
|
String title = (wtDeviceType == null || wtDeviceType == 1) ? "水深" + vertical + "m(℃)" : "高程" + vertical + "m(℃)";
|
||||||
|
columns.add(buildColumn(key, title, true, key, false, null, null));
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, Object> table = new LinkedHashMap<>();
|
||||||
|
table.put("columns", columns);
|
||||||
|
table.put("dataSource", resultData);
|
||||||
|
table.put("wtDeviceType", wtDeviceType);
|
||||||
|
|
||||||
|
DataSourceResult<Map<String, Object>> result = new DataSourceResult<>();
|
||||||
|
result.setData(Collections.singletonList(table));
|
||||||
|
result.setTotal(page != null ? page.getTotal() : rowList.size());
|
||||||
|
result.setAggregates(new HashMap<>());
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
private Page<?> buildPage(DataSourceLoadOptionsBase loadOptions) {
|
private Page<?> buildPage(DataSourceLoadOptionsBase loadOptions) {
|
||||||
PageInfo pageInfo = QgcQueryWrapperUtil.getPageInfo(loadOptions);
|
PageInfo pageInfo = QgcQueryWrapperUtil.getPageInfo(loadOptions);
|
||||||
if (Boolean.TRUE.equals(pageInfo.getHasPageInfo())) {
|
if (Boolean.TRUE.equals(pageInfo.getHasPageInfo())) {
|
||||||
@ -144,4 +488,198 @@ public class SdWtMonitorServiceImpl implements SdWtMonitorService {
|
|||||||
return " ORDER BY " + String.join(", ", orderColumns);
|
return " ORDER BY " + String.join(", ", orderColumns);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void collectFilters(DataSourceRequest.FilterDescriptor filter, List<DataSourceRequest.FilterDescriptor> result) {
|
||||||
|
if (filter == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (filter.getFilters() == null || filter.getFilters().isEmpty()) {
|
||||||
|
if (StrUtil.isNotBlank(filter.getField())) {
|
||||||
|
result.add(filter);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for (DataSourceRequest.FilterDescriptor child : filter.getFilters()) {
|
||||||
|
collectFilters(child, result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private String toStringValue(Object value) {
|
||||||
|
return value == null ? null : String.valueOf(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Integer toIntegerValue(Object value) {
|
||||||
|
if (value == null || StrUtil.isBlank(String.valueOf(value))) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return Integer.parseInt(String.valueOf(value));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void appendCxDetailOrderBy(StringBuilder sql, List<DataSourceRequest.SortDescriptor> sortList) {
|
||||||
|
if (sortList == null || sortList.isEmpty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
List<String> orderColumns = new ArrayList<>();
|
||||||
|
for (DataSourceRequest.SortDescriptor sortDescriptor : sortList) {
|
||||||
|
String dir = "desc".equalsIgnoreCase(sortDescriptor.getDir()) ? "DESC" : "ASC";
|
||||||
|
if ("dt".equals(sortDescriptor.getField())) {
|
||||||
|
orderColumns.add("dt " + dir);
|
||||||
|
} else if ("stcd".equals(sortDescriptor.getField())) {
|
||||||
|
orderColumns.add("stcd " + dir);
|
||||||
|
} else if ("stnm".equals(sortDescriptor.getField())) {
|
||||||
|
orderColumns.add("stnm " + dir);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!orderColumns.isEmpty()) {
|
||||||
|
sql.append(" ORDER BY ").append(String.join(", ", orderColumns));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<Map<String, Object>> emptyTableList(Integer wtDeviceType, String drtp) {
|
||||||
|
List<Map<String, Object>> columns = new ArrayList<>();
|
||||||
|
columns.add(buildColumn("stnm", "测站名称", true, "stnm", false, null, null));
|
||||||
|
String dateFormat = "yyyy-MM-dd HH:mm";
|
||||||
|
if ("DAY".equals(drtp)) {
|
||||||
|
dateFormat = "yyyy-MM-dd";
|
||||||
|
} else if ("MON".equals(drtp)) {
|
||||||
|
dateFormat = "yyyy-MM";
|
||||||
|
}
|
||||||
|
columns.add(buildColumn("dt", "时间", true, "dt", false, "date", dateFormat));
|
||||||
|
Map<String, Object> table = new LinkedHashMap<>();
|
||||||
|
table.put("columns", columns);
|
||||||
|
table.put("dataSource", new ArrayList<>());
|
||||||
|
table.put("wtDeviceType", wtDeviceType);
|
||||||
|
return Collections.singletonList(table);
|
||||||
|
}
|
||||||
|
|
||||||
|
private DataSourceResult emptyCxDetailResult(Integer wtDeviceType, String drtp) {
|
||||||
|
DataSourceResult<Map<String, Object>> result = new DataSourceResult<>();
|
||||||
|
result.setData(emptyTableList(wtDeviceType, drtp));
|
||||||
|
result.setTotal(0);
|
||||||
|
result.setAggregates(new HashMap<>());
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Map<String, Object> buildColumn(String dataIndex,
|
||||||
|
String title,
|
||||||
|
boolean visible,
|
||||||
|
String key,
|
||||||
|
boolean merge,
|
||||||
|
String dataType,
|
||||||
|
String dataFormat) {
|
||||||
|
Map<String, Object> column = new LinkedHashMap<>();
|
||||||
|
column.put("dataIndex", dataIndex);
|
||||||
|
column.put("title", title);
|
||||||
|
column.put("visible", visible);
|
||||||
|
column.put("key", key);
|
||||||
|
column.put("unit", null);
|
||||||
|
column.put("merge", merge);
|
||||||
|
column.put("dataType", dataType);
|
||||||
|
column.put("dataFormat", dataFormat);
|
||||||
|
column.put("children", new ArrayList<>());
|
||||||
|
return column;
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<String> splitValue(String value) {
|
||||||
|
if (StrUtil.isBlank(value)) {
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
String[] values = value.split(",");
|
||||||
|
List<String> result = new ArrayList<>(values.length);
|
||||||
|
for (String item : values) {
|
||||||
|
result.add(item == null ? null : item.trim());
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<Double> getVerticals(List<WtCxDetailRow> rowList, Integer wtDeviceType) {
|
||||||
|
List<Double> verticals = new ArrayList<>();
|
||||||
|
for (WtCxDetailRow row : rowList) {
|
||||||
|
for (String wthg : splitValue(row.getWthg())) {
|
||||||
|
try {
|
||||||
|
verticals.add(Double.parseDouble(wthg));
|
||||||
|
} catch (NumberFormatException ignored) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return verticals.stream()
|
||||||
|
.filter(Objects::nonNull)
|
||||||
|
.distinct()
|
||||||
|
.sorted((wtDeviceType == null || wtDeviceType == 1) ? Comparator.naturalOrder() : Comparator.reverseOrder())
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
private void fillFishList(List<WtFishVo> wtFishVoList, List<FishSpawnVo> fishSpawnVoList) {
|
||||||
|
if (wtFishVoList == null || wtFishVoList.isEmpty() || fishSpawnVoList == null || fishSpawnVoList.isEmpty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for (WtFishVo wtFishVo : wtFishVoList) {
|
||||||
|
List<FishSpawnVo> fishList = new ArrayList<>();
|
||||||
|
Date dt = wtFishVo.getDt();
|
||||||
|
BigDecimal wt = wtFishVo.getWt();
|
||||||
|
if (dt == null || wt == null) {
|
||||||
|
wtFishVo.setFishList(fishList);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
Calendar calendar = Calendar.getInstance();
|
||||||
|
calendar.setTime(dt);
|
||||||
|
int month = calendar.get(Calendar.MONTH) + 1;
|
||||||
|
for (FishSpawnVo fishSpawnVo : fishSpawnVoList) {
|
||||||
|
if (!matchSpawnMonth(fishSpawnVo.getSpawnMonthStr(), month)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
BigDecimal[] range = parsePretempRange(fishSpawnVo.getPretempStr());
|
||||||
|
if (range == null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (wt.compareTo(range[0]) >= 0 && wt.compareTo(range[1]) <= 0) {
|
||||||
|
fishList.add(fishSpawnVo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
wtFishVo.setFishList(fishList);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean matchSpawnMonth(String spawnMonthStr, int month) {
|
||||||
|
if (StrUtil.isBlank(spawnMonthStr)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
for (String monthStr : spawnMonthStr.split(",")) {
|
||||||
|
if (StrUtil.isBlank(monthStr)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
if (Integer.parseInt(monthStr.trim()) == month) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
} catch (NumberFormatException ignored) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private BigDecimal[] parsePretempRange(String pretempStr) {
|
||||||
|
if (StrUtil.isBlank(pretempStr)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
String temp = pretempStr.replace("℃", "").trim();
|
||||||
|
String[] split = temp.contains("~") ? temp.split("~") : temp.split("~");
|
||||||
|
if (split.length != 2) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
return new BigDecimal[]{new BigDecimal(split[0].trim()), new BigDecimal(split[1].trim())};
|
||||||
|
} catch (Exception ignored) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Data
|
||||||
|
private static class WtCxDetailRow {
|
||||||
|
private String stcd;
|
||||||
|
private String dt;
|
||||||
|
private String stnm;
|
||||||
|
private String wthg;
|
||||||
|
private String vwt;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user