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.env.entity.vo.BatchDeleteAo;
|
||||
import com.yfd.platform.env.entity.vo.WtrvInfo;
|
||||
import com.yfd.platform.env.service.AlongDetailService;
|
||||
import com.yfd.platform.env.service.AlongListService;
|
||||
import com.yfd.platform.env.service.SdWtMonitorService;
|
||||
import com.yfd.platform.env.service.*;
|
||||
import com.yfd.platform.utils.QgcQueryWrapperUtil;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
@ -39,6 +37,15 @@ public class SdWTMonitorController {
|
||||
@Resource
|
||||
private SdWtMonitorService sdWtMonitorService;
|
||||
|
||||
@Resource
|
||||
private SdRvwtSInOutOneService sdRvwtSInOutOneService;
|
||||
|
||||
@Resource
|
||||
private SdDzChuiXiangListService sdDzChuiXiangListService;
|
||||
|
||||
@Resource
|
||||
private SdWtvtRService sdWtvtRService;
|
||||
|
||||
|
||||
@PostMapping("/alongDetail/GetKendoListCust")
|
||||
@Operation(summary = "查询沿程水温变化二级数据列表")
|
||||
@ -121,7 +128,7 @@ public class SdWTMonitorController {
|
||||
|
||||
@PostMapping({"/alongList/default/rvcd"})
|
||||
@Operation(summary = "获取沿程水温变化默认有数据的河流")
|
||||
public ResponseResult getDefaultStcd(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||
public ResponseResult getDefaultRVCD(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||
return ResponseResult.successData(alongListService.getDefaultRvcd(dataSourceRequest));
|
||||
}
|
||||
|
||||
@ -131,6 +138,12 @@ public class SdWTMonitorController {
|
||||
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")
|
||||
@Operation(summary = "查询水温监测数量")
|
||||
@ -143,4 +156,49 @@ public class SdWTMonitorController {
|
||||
public ResponseResult getVmsstbprptList(@RequestBody DataSourceRequest 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 eng.STCD AS stcd, eng.ENNM AS stnm",
|
||||
" 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",
|
||||
" 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'>",
|
||||
" AND eng.BASE_ID IN",
|
||||
" <foreach collection='baseIdList' item='baseId' open='(' separator=',' close=')'>",
|
||||
@ -41,9 +39,11 @@ public interface SdRvwtSInOutOneMapper extends BaseMapper<SdRvwtSVO> {
|
||||
" </if>",
|
||||
" AND EXISTS (",
|
||||
" SELECT 1",
|
||||
" FROM SD_WTRVDAY_S dayData",
|
||||
" WHERE dayData.IS_DELETED = 0",
|
||||
" AND (dayData.STCD = rel.ENG_IWT_CODE OR dayData.STCD = rel.ENG_DWT_CODE)",
|
||||
" FROM SD_WTENGRLTN_B rel",
|
||||
" INNER JOIN SD_WT_B_H wt ON wt.STCD = rel.STCD AND wt.IS_DELETED = 0 AND wt.STTP = 'WTRV'",
|
||||
" 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'>",
|
||||
" AND dayData.DT BETWEEN #{startTime} AND #{endTime}",
|
||||
" </if>",
|
||||
|
||||
@ -2,6 +2,7 @@ package com.yfd.platform.env.mapper;
|
||||
|
||||
import com.yfd.platform.env.entity.vo.SdWtMonitorCountVO;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.apache.ibatis.annotations.Select;
|
||||
|
||||
import java.util.List;
|
||||
@ -19,4 +20,7 @@ public interface SdWtMonitorMapper {
|
||||
"FROM SD_WT_B_H " +
|
||||
"WHERE IS_DELETED = 0 AND STTP = 'WTVT' AND DTIN_TYPE = 0")
|
||||
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);
|
||||
DataSourceResult getDefaultRvcd(@RequestBody DataSourceRequest dataSourceRequest);
|
||||
DataSourceResult getALongKendoListCust(DataSourceRequest dataSourceRequest);
|
||||
DataSourceResult getMonthKendoListCust(DataSourceRequest dataSourceRequest);
|
||||
}
|
||||
@ -8,4 +8,8 @@ public interface SdWtMonitorService {
|
||||
DataSourceResult getEvnmAutoMonitorList();
|
||||
|
||||
DataSourceResult getVmsstbprptList(DataSourceRequest dataSourceRequest);
|
||||
|
||||
DataSourceResult getCxDetailList(DataSourceRequest dataSourceRequest);
|
||||
|
||||
DataSourceResult getWtFishAnalysis(DataSourceRequest dataSourceRequest);
|
||||
}
|
||||
|
||||
@ -1,11 +1,14 @@
|
||||
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.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.DynamicSQLMapper;
|
||||
import com.yfd.platform.common.MicroservicDynamicSQLMapper;
|
||||
import com.yfd.platform.common.PageInfo;
|
||||
import com.yfd.platform.common.exception.BizException;
|
||||
import com.yfd.platform.env.entity.vo.SdAlongVO;
|
||||
import com.yfd.platform.env.mapper.AlongListMapper;
|
||||
@ -34,6 +37,8 @@ public class AlongListServiceImpl extends ServiceImpl<AlongListMapper, SdAlongVO
|
||||
private DynamicSQLMapper dynamicSQLMapper;
|
||||
@Resource
|
||||
private AlongListMapper alongListMapper;
|
||||
@Resource
|
||||
private MicroservicDynamicSQLMapper microservicDynamicSQLMapper;
|
||||
|
||||
|
||||
|
||||
@ -144,4 +149,208 @@ public class AlongListServiceImpl extends ServiceImpl<AlongListMapper, SdAlongVO
|
||||
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
|
||||
public DataSourceResult<StcdVo> getDefaultStcd(DataSourceRequest dataSourceRequest) {
|
||||
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> rvcdList = splitFilterValues(QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "rvcd"));
|
||||
|
||||
|
||||
@ -1,19 +1,31 @@
|
||||
package com.yfd.platform.env.service.impl;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
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.SdWtBaseInfoVO;
|
||||
import com.yfd.platform.env.entity.vo.WtFishVo;
|
||||
import com.yfd.platform.env.mapper.SdWtMonitorMapper;
|
||||
import com.yfd.platform.env.service.SdWtMonitorService;
|
||||
import com.yfd.platform.utils.QgcQueryWrapperUtil;
|
||||
import jakarta.annotation.Resource;
|
||||
import lombok.Data;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
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.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Service
|
||||
public class SdWtMonitorServiceImpl implements SdWtMonitorService {
|
||||
@ -34,6 +46,86 @@ public class SdWtMonitorServiceImpl implements SdWtMonitorService {
|
||||
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
|
||||
public DataSourceResult getVmsstbprptList(DataSourceRequest dataSourceRequest) {
|
||||
DataSourceLoadOptionsBase loadOptions = dataSourceRequest.toDevRequest();
|
||||
@ -107,6 +199,258 @@ public class SdWtMonitorServiceImpl implements SdWtMonitorService {
|
||||
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) {
|
||||
PageInfo pageInfo = QgcQueryWrapperUtil.getPageInfo(loadOptions);
|
||||
if (Boolean.TRUE.equals(pageInfo.getHasPageInfo())) {
|
||||
@ -144,4 +488,198 @@ public class SdWtMonitorServiceImpl implements SdWtMonitorService {
|
||||
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