feat: 增加过鱼设施和栖息地接口
This commit is contained in:
parent
66a810ca36
commit
ed48fa6618
@ -61,6 +61,8 @@ public class SecurityConfig {
|
||||
.requestMatchers("/env/**").permitAll()
|
||||
.requestMatchers("/wt/**").permitAll()
|
||||
.requestMatchers("/wq/**").permitAll()
|
||||
.requestMatchers("/fp/**").permitAll()
|
||||
.requestMatchers("/fh/**").permitAll()
|
||||
.requestMatchers("/data/**").permitAll()
|
||||
.requestMatchers("/sms/**").permitAll()
|
||||
.requestMatchers(HttpMethod.GET, "/").permitAll()
|
||||
|
||||
@ -76,6 +76,24 @@ public class SwaggerConfig {
|
||||
.build();
|
||||
}
|
||||
|
||||
@Bean
|
||||
public GroupedOpenApi groupEnvFPApi() {
|
||||
return GroupedOpenApi.builder()
|
||||
.group("3.2 全过程-生态环保数据服务-过鱼设施")
|
||||
.packagesToScan("com.yfd.platform.env.fp.controller")
|
||||
.build();
|
||||
}
|
||||
|
||||
@Bean
|
||||
public GroupedOpenApi groupEnvFHApi() {
|
||||
return GroupedOpenApi.builder()
|
||||
.group("3.2 全过程-生态环保数据服务-栖息地")
|
||||
.packagesToScan("com.yfd.platform.env.fh.controller")
|
||||
.build();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@Bean
|
||||
public GroupedOpenApi groupEngApi() {
|
||||
|
||||
29
backend/src/main/java/com/yfd/platform/env/fh/controller/FhHabitatController.java
vendored
Normal file
29
backend/src/main/java/com/yfd/platform/env/fh/controller/FhHabitatController.java
vendored
Normal file
@ -0,0 +1,29 @@
|
||||
package com.yfd.platform.env.fh.controller;
|
||||
|
||||
import com.yfd.platform.config.ResponseResult;
|
||||
import com.yfd.platform.env.fh.entity.ao.FhDefaultAo;
|
||||
import com.yfd.platform.env.fh.service.FhHabitatService;
|
||||
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("/fh")
|
||||
@Tag(name = "栖息地统计")
|
||||
@Validated
|
||||
public class FhHabitatController {
|
||||
|
||||
@Resource
|
||||
private FhHabitatService fhHabitatService;
|
||||
|
||||
@PostMapping("/default/getFhList")
|
||||
@Operation(summary = "获取默认有数据的栖息地站点信息")
|
||||
public ResponseResult getDefaultFhList(@RequestBody FhDefaultAo fhDefaultAo) {
|
||||
return ResponseResult.successData(fhHabitatService.getDefaultFhList(fhDefaultAo));
|
||||
}
|
||||
}
|
||||
20
backend/src/main/java/com/yfd/platform/env/fh/entity/ao/FhDefaultAo.java
vendored
Normal file
20
backend/src/main/java/com/yfd/platform/env/fh/entity/ao/FhDefaultAo.java
vendored
Normal file
@ -0,0 +1,20 @@
|
||||
package com.yfd.platform.env.fh.entity.ao;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
@Data
|
||||
@Schema(description = "栖息地默认数据信息")
|
||||
public class FhDefaultAo {
|
||||
|
||||
@Schema(description = "基地编码")
|
||||
private String baseId;
|
||||
|
||||
@Schema(description = "开始时间")
|
||||
private Date sdt;
|
||||
|
||||
@Schema(description = "结束时间")
|
||||
private Date edt;
|
||||
}
|
||||
56
backend/src/main/java/com/yfd/platform/env/fh/entity/vo/FhDefaultVo.java
vendored
Normal file
56
backend/src/main/java/com/yfd/platform/env/fh/entity/vo/FhDefaultVo.java
vendored
Normal file
@ -0,0 +1,56 @@
|
||||
package com.yfd.platform.env.fh.entity.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
@Schema(description = "栖息地默认数据结果")
|
||||
public class FhDefaultVo {
|
||||
|
||||
@Schema(description = "站点编码")
|
||||
private String stcd;
|
||||
|
||||
@Schema(description = "站点名称")
|
||||
private String stnm;
|
||||
|
||||
@Schema(description = "水温站编码")
|
||||
private String wtstcd;
|
||||
|
||||
@Schema(description = "水温站名称")
|
||||
private String wtstnm;
|
||||
|
||||
@Schema(description = "基地编码")
|
||||
private String baseId;
|
||||
|
||||
@Schema(description = "基地名称")
|
||||
private String baseName;
|
||||
|
||||
@Schema(description = "基地流域编码")
|
||||
private String hbrvcd;
|
||||
|
||||
@Schema(description = "基地流域名称")
|
||||
private String hbrvcdName;
|
||||
|
||||
@Schema(description = "栖息地编码")
|
||||
private String fhstcd;
|
||||
|
||||
@Schema(description = "栖息地名称")
|
||||
private String fhstnm;
|
||||
|
||||
@Schema(description = "数据数量")
|
||||
private Integer dataStatus;
|
||||
|
||||
@Schema(description = "站点类型编码")
|
||||
private String sttpCode;
|
||||
|
||||
@Schema(description = "站点类型名称")
|
||||
private String sttpName;
|
||||
|
||||
@Schema(description = "流量站编码")
|
||||
private String zqstcd;
|
||||
|
||||
@Schema(description = "流量站名称")
|
||||
private String zqstnm;
|
||||
}
|
||||
9
backend/src/main/java/com/yfd/platform/env/fh/service/FhHabitatService.java
vendored
Normal file
9
backend/src/main/java/com/yfd/platform/env/fh/service/FhHabitatService.java
vendored
Normal file
@ -0,0 +1,9 @@
|
||||
package com.yfd.platform.env.fh.service;
|
||||
|
||||
import com.yfd.platform.env.fh.entity.ao.FhDefaultAo;
|
||||
import com.yfd.platform.env.fh.entity.vo.FhDefaultVo;
|
||||
|
||||
public interface FhHabitatService {
|
||||
|
||||
FhDefaultVo getDefaultFhList(FhDefaultAo fhDefaultAo);
|
||||
}
|
||||
149
backend/src/main/java/com/yfd/platform/env/fh/service/impl/FhHabitatServiceImpl.java
vendored
Normal file
149
backend/src/main/java/com/yfd/platform/env/fh/service/impl/FhHabitatServiceImpl.java
vendored
Normal file
@ -0,0 +1,149 @@
|
||||
package com.yfd.platform.env.fh.service.impl;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.bean.copier.CopyOptions;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.yfd.platform.common.MicroservicDynamicSQLMapper;
|
||||
import com.yfd.platform.env.fh.entity.ao.FhDefaultAo;
|
||||
import com.yfd.platform.env.fh.entity.vo.FhDefaultVo;
|
||||
import com.yfd.platform.env.fh.service.FhHabitatService;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Service
|
||||
public class FhHabitatServiceImpl implements FhHabitatService {
|
||||
|
||||
@Resource
|
||||
private MicroservicDynamicSQLMapper microservicDynamicSQLMapper;
|
||||
|
||||
@Override
|
||||
public FhDefaultVo getDefaultFhList(FhDefaultAo fhDefaultAo) {
|
||||
Map<String, Object> paramMap = new LinkedHashMap<>();
|
||||
paramMap.put("baseId", fhDefaultAo == null ? null : fhDefaultAo.getBaseId());
|
||||
paramMap.put("sdt", fhDefaultAo == null ? null : fhDefaultAo.getSdt());
|
||||
paramMap.put("edt", fhDefaultAo == null ? null : fhDefaultAo.getEdt());
|
||||
|
||||
List<Map<String, Object>> rows = microservicDynamicSQLMapper.getAllList(buildDefaultFhListSql(fhDefaultAo), paramMap);
|
||||
if (rows == null || rows.isEmpty()) {
|
||||
return new FhDefaultVo();
|
||||
}
|
||||
|
||||
List<FhDefaultVo> list = new ArrayList<>(rows.size());
|
||||
for (Map<String, Object> row : rows) {
|
||||
list.add(BeanUtil.fillBeanWithMap(
|
||||
row,
|
||||
new FhDefaultVo(),
|
||||
CopyOptions.create().setIgnoreCase(true).setIgnoreError(true)
|
||||
));
|
||||
}
|
||||
|
||||
Map<String, List<FhDefaultVo>> groupByFh = new LinkedHashMap<>();
|
||||
for (FhDefaultVo item : list) {
|
||||
groupByFh.computeIfAbsent(item.getFhstcd(), key -> new ArrayList<>()).add(item);
|
||||
}
|
||||
|
||||
List<FhDefaultVo> result = new ArrayList<>();
|
||||
for (Map.Entry<String, List<FhDefaultVo>> entry : groupByFh.entrySet()) {
|
||||
List<FhDefaultVo> values = entry.getValue();
|
||||
FhDefaultVo merged = new FhDefaultVo();
|
||||
merged.setFhstcd(entry.getKey())
|
||||
.setFhstnm(values.get(0).getFhstnm())
|
||||
.setBaseId(values.get(0).getBaseId())
|
||||
.setBaseName(values.get(0).getBaseName())
|
||||
.setHbrvcd(values.get(0).getHbrvcd())
|
||||
.setHbrvcdName(values.get(0).getHbrvcdName());
|
||||
for (FhDefaultVo value : values) {
|
||||
if ("WTRV".equals(value.getSttpCode())) {
|
||||
merged.setWtstcd(value.getStcd()).setWtstnm(value.getStnm());
|
||||
} else if ("ZQ".equals(value.getSttpCode())) {
|
||||
merged.setZqstcd(value.getStcd()).setZqstnm(value.getStnm());
|
||||
}
|
||||
}
|
||||
result.add(merged);
|
||||
}
|
||||
|
||||
for (FhDefaultVo item : result) {
|
||||
if (StrUtil.isNotBlank(item.getWtstcd()) && StrUtil.isNotBlank(item.getZqstcd())) {
|
||||
return item;
|
||||
}
|
||||
}
|
||||
return result.get(0);
|
||||
}
|
||||
|
||||
private String buildDefaultFhListSql(FhDefaultAo fhDefaultAo) {
|
||||
String dateConditionWtrv = "";
|
||||
String dateConditionZq = "";
|
||||
if (fhDefaultAo != null && fhDefaultAo.getSdt() != null && fhDefaultAo.getEdt() != null) {
|
||||
dateConditionWtrv = " AND dayData.DT BETWEEN #{map.sdt} AND #{map.edt} ";
|
||||
dateConditionZq = " AND riverDay.DT BETWEEN #{map.sdt} AND #{map.edt} ";
|
||||
}
|
||||
|
||||
StringBuilder sql = new StringBuilder();
|
||||
sql.append("SELECT * FROM (");
|
||||
sql.append(" SELECT wt.STCD AS stcd, ");
|
||||
sql.append(" wt.STNM AS stnm, ");
|
||||
sql.append(" eng.BASE_ID AS baseId, ");
|
||||
sql.append(" hb.BASENAME AS baseName, ");
|
||||
sql.append(" eng.HBRVCD AS hbrvcd, ");
|
||||
sql.append(" hbrv.HBRVNM AS hbrvcdName, ");
|
||||
sql.append(" fh.STCD AS fhstcd, ");
|
||||
sql.append(" fh.STNM AS fhstnm, ");
|
||||
sql.append(" 'WTRV' AS sttpCode, ");
|
||||
sql.append(" '河道水温站' AS sttpName, ");
|
||||
sql.append(" (SELECT COUNT(*) FROM SD_WTRVDAY_S dayData ");
|
||||
sql.append(" WHERE dayData.STCD = wt.STCD ");
|
||||
sql.append(" AND NVL(dayData.IS_DELETED, 0) = 0 ");
|
||||
sql.append(dateConditionWtrv);
|
||||
sql.append(" ) AS dataStatus ");
|
||||
sql.append(" FROM SD_WT_B_H wt ");
|
||||
sql.append(" INNER JOIN SD_FHBT_B_H fh ON fh.STCD = wt.FHSTCD AND NVL(fh.IS_DELETED, 0) = 0 ");
|
||||
sql.append(" LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = wt.RSTCD ");
|
||||
sql.append(" LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = NVL(fh.BASE_ID, eng.BASE_ID) ");
|
||||
sql.append(" LEFT JOIN SD_HBRV_DIC hbrv ON hbrv.HBRVCD = NVL(fh.HBRVCD, eng.HBRVCD) ");
|
||||
sql.append(" AND hbrv.BASEID = NVL(fh.BASE_ID, eng.BASE_ID) ");
|
||||
sql.append(" AND NVL(hbrv.IS_DELETED, 0) = 0 ");
|
||||
sql.append(" WHERE wt.STTP = 'WTRV' ");
|
||||
sql.append(" AND NVL(wt.IS_DELETED, 0) = 0 ");
|
||||
sql.append(" AND wt.FHSTCD IS NOT NULL ");
|
||||
if (fhDefaultAo != null && StrUtil.isNotBlank(fhDefaultAo.getBaseId())) {
|
||||
sql.append(" AND NVL(fh.BASE_ID, eng.BASE_ID) = #{map.baseId} ");
|
||||
}
|
||||
sql.append(" UNION ALL ");
|
||||
sql.append(" SELECT river.STCD AS stcd, ");
|
||||
sql.append(" river.STNM AS stnm, ");
|
||||
sql.append(" eng.BASE_ID AS baseId, ");
|
||||
sql.append(" hb.BASENAME AS baseName, ");
|
||||
sql.append(" eng.HBRVCD AS hbrvcd, ");
|
||||
sql.append(" hbrv.HBRVNM AS hbrvcdName, ");
|
||||
sql.append(" fh.STCD AS fhstcd, ");
|
||||
sql.append(" fh.STNM AS fhstnm, ");
|
||||
sql.append(" 'ZQ' AS sttpCode, ");
|
||||
sql.append(" '流量站' AS sttpName, ");
|
||||
sql.append(" (SELECT COUNT(*) FROM SD_RIVERDAY_S riverDay ");
|
||||
sql.append(" WHERE riverDay.STCD = river.STCD ");
|
||||
sql.append(" AND NVL(riverDay.IS_DELETED, 0) = 0 ");
|
||||
sql.append(dateConditionZq);
|
||||
sql.append(" ) AS dataStatus ");
|
||||
sql.append(" FROM SD_RIVER_B_H river ");
|
||||
sql.append(" INNER JOIN SD_FHBT_B_H fh ON fh.STCD = river.FHSTCD AND NVL(fh.IS_DELETED, 0) = 0 ");
|
||||
sql.append(" LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = river.RSTCD ");
|
||||
sql.append(" LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = NVL(fh.BASE_ID, eng.BASE_ID) ");
|
||||
sql.append(" LEFT JOIN SD_HBRV_DIC hbrv ON hbrv.HBRVCD = NVL(fh.HBRVCD, eng.HBRVCD) ");
|
||||
sql.append(" AND hbrv.BASEID = NVL(fh.BASE_ID, eng.BASE_ID) ");
|
||||
sql.append(" AND NVL(hbrv.IS_DELETED, 0) = 0 ");
|
||||
sql.append(" WHERE river.STTP = 'ZQ' ");
|
||||
sql.append(" AND NVL(river.IS_DELETED, 0) = 0 ");
|
||||
sql.append(" AND river.FHSTCD IS NOT NULL ");
|
||||
if (fhDefaultAo != null && StrUtil.isNotBlank(fhDefaultAo.getBaseId())) {
|
||||
sql.append(" AND NVL(fh.BASE_ID, eng.BASE_ID) = #{map.baseId} ");
|
||||
}
|
||||
sql.append(") t WHERE t.dataStatus > 0 ");
|
||||
sql.append("ORDER BY t.fhstcd, t.sttpCode, t.dataStatus DESC");
|
||||
return sql.toString();
|
||||
}
|
||||
}
|
||||
29
backend/src/main/java/com/yfd/platform/env/fp/controller/FpRunController.java
vendored
Normal file
29
backend/src/main/java/com/yfd/platform/env/fp/controller/FpRunController.java
vendored
Normal file
@ -0,0 +1,29 @@
|
||||
package com.yfd.platform.env.fp.controller;
|
||||
|
||||
import com.yfd.platform.common.DataSourceRequest;
|
||||
import com.yfd.platform.config.ResponseResult;
|
||||
import com.yfd.platform.env.fp.service.FpRunService;
|
||||
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("/fp/run")
|
||||
@Tag(name = "过鱼设施建设及运行情况")
|
||||
@Validated
|
||||
public class FpRunController {
|
||||
|
||||
@Resource
|
||||
private FpRunService fpRunService;
|
||||
|
||||
@PostMapping("/secondPlan/qgc/GetKendoListCust")
|
||||
@Operation(summary = "环保部-建设及运行运行情况(二级级页面 已建设施运行情况-计划接口)")
|
||||
public ResponseResult getQgcSecondPlanKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||
return ResponseResult.successData(fpRunService.processQgcSecondPlanKendoList(dataSourceRequest));
|
||||
}
|
||||
}
|
||||
15
backend/src/main/java/com/yfd/platform/env/fp/entity/vo/FdFishVo.java
vendored
Normal file
15
backend/src/main/java/com/yfd/platform/env/fp/entity/vo/FdFishVo.java
vendored
Normal file
@ -0,0 +1,15 @@
|
||||
package com.yfd.platform.env.fp.entity.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
@Schema(description = "过鱼鱼类信息")
|
||||
public class FdFishVo {
|
||||
|
||||
@Schema(description = "鱼类编码")
|
||||
private String ftp;
|
||||
|
||||
@Schema(description = "鱼类名称")
|
||||
private String name;
|
||||
}
|
||||
47
backend/src/main/java/com/yfd/platform/env/fp/entity/vo/FpRunPlanVo.java
vendored
Normal file
47
backend/src/main/java/com/yfd/platform/env/fp/entity/vo/FpRunPlanVo.java
vendored
Normal file
@ -0,0 +1,47 @@
|
||||
package com.yfd.platform.env.fp.entity.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@Schema(description = "过鱼设施运行情况二级弹窗标题数据")
|
||||
public class FpRunPlanVo {
|
||||
|
||||
@Schema(description = "设施编码")
|
||||
private String stcd;
|
||||
|
||||
@Schema(description = "计划开始月份")
|
||||
private String designStartDate;
|
||||
|
||||
@Schema(description = "计划结束月份")
|
||||
private String designEndDate;
|
||||
|
||||
@Schema(description = "计划运行月数")
|
||||
private Integer mon;
|
||||
|
||||
@Schema(description = "计划运行频次")
|
||||
private Integer pyRate;
|
||||
|
||||
@Schema(description = "计划运行次数")
|
||||
private Integer pycnt;
|
||||
|
||||
@Schema(description = "设施类型编码")
|
||||
private String sttpCode;
|
||||
|
||||
@Schema(description = "过鱼类型 0鱼道 1过鱼机")
|
||||
private Integer dwtp;
|
||||
|
||||
@Schema(description = "计划过鱼种类")
|
||||
private String planFtp;
|
||||
|
||||
@Schema(description = "计划过鱼列表")
|
||||
private List<FdFishVo> planList;
|
||||
|
||||
@Schema(description = "设计过鱼列表")
|
||||
private List<FdFishVo> designList;
|
||||
|
||||
@Schema(description = "过鱼对象列表")
|
||||
private List<FdFishVo> objList;
|
||||
}
|
||||
10
backend/src/main/java/com/yfd/platform/env/fp/service/FpRunService.java
vendored
Normal file
10
backend/src/main/java/com/yfd/platform/env/fp/service/FpRunService.java
vendored
Normal file
@ -0,0 +1,10 @@
|
||||
package com.yfd.platform.env.fp.service;
|
||||
|
||||
import com.yfd.platform.common.DataSourceRequest;
|
||||
import com.yfd.platform.common.DataSourceResult;
|
||||
import com.yfd.platform.env.fp.entity.vo.FpRunPlanVo;
|
||||
|
||||
public interface FpRunService {
|
||||
|
||||
DataSourceResult<FpRunPlanVo> processQgcSecondPlanKendoList(DataSourceRequest dataSourceRequest);
|
||||
}
|
||||
177
backend/src/main/java/com/yfd/platform/env/fp/service/impl/FpRunServiceImpl.java
vendored
Normal file
177
backend/src/main/java/com/yfd/platform/env/fp/service/impl/FpRunServiceImpl.java
vendored
Normal file
@ -0,0 +1,177 @@
|
||||
package com.yfd.platform.env.fp.service.impl;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.bean.copier.CopyOptions;
|
||||
import cn.hutool.core.convert.Convert;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.yfd.platform.common.DataSourceLoadOptionsBase;
|
||||
import com.yfd.platform.common.DataSourceRequest;
|
||||
import com.yfd.platform.common.DataSourceResult;
|
||||
import com.yfd.platform.common.MicroservicDynamicSQLMapper;
|
||||
import com.yfd.platform.common.exception.BizException;
|
||||
import com.yfd.platform.env.fp.entity.vo.FpRunPlanVo;
|
||||
import com.yfd.platform.env.fp.service.FpRunService;
|
||||
import com.yfd.platform.utils.QgcQueryWrapperUtil;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
@Service
|
||||
public class FpRunServiceImpl implements FpRunService {
|
||||
|
||||
private static final String FP_1 = "FP_1";
|
||||
private static final String FP_2 = "FP_2";
|
||||
private static final Pattern FISH_NAME_PATTERN = Pattern.compile("name\\s*[::]\\s*([^,,}\\]]+)");
|
||||
|
||||
@Resource
|
||||
private MicroservicDynamicSQLMapper microservicDynamicSQLMapper;
|
||||
|
||||
@Override
|
||||
public DataSourceResult<FpRunPlanVo> processQgcSecondPlanKendoList(DataSourceRequest dataSourceRequest) {
|
||||
DataSourceLoadOptionsBase loadOptions = dataSourceRequest.toDevRequest();
|
||||
String stcd = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "stcd");
|
||||
String yr = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "yr");
|
||||
if (StrUtil.isBlank(stcd)) {
|
||||
throw new BizException("设施编码(stcd)不能为空.");
|
||||
}
|
||||
if (StrUtil.isBlank(yr)) {
|
||||
throw new BizException("年份(yr)不能为空.");
|
||||
}
|
||||
|
||||
Map<String, Object> paramMap = new HashMap<>();
|
||||
paramMap.put("stcd", stcd);
|
||||
paramMap.put("yr", yr);
|
||||
|
||||
Map<String, Object> row = microservicDynamicSQLMapper.getOneBySql(buildQgcSecondPlanSql(), paramMap);
|
||||
FpRunPlanVo vo = row == null || row.isEmpty()
|
||||
? new FpRunPlanVo()
|
||||
: BeanUtil.fillBeanWithMap(
|
||||
row,
|
||||
new FpRunPlanVo(),
|
||||
CopyOptions.create().setIgnoreCase(true).setIgnoreError(true)
|
||||
);
|
||||
|
||||
String fallbackFishJson = row == null ? null : Convert.toStr(row.get("fallbackFishJson"), null);
|
||||
String fallbackFishText = row == null ? null : Convert.toStr(row.get("fallbackFishText"), null);
|
||||
if (StrUtil.isBlank(vo.getPlanFtp())) {
|
||||
vo.setPlanFtp(resolveFallbackFishText(fallbackFishJson, fallbackFishText));
|
||||
}
|
||||
|
||||
if (StrUtil.isNotBlank(vo.getDesignStartDate()) && StrUtil.isNotBlank(vo.getDesignEndDate())) {
|
||||
try {
|
||||
int startMonth = Integer.parseInt(vo.getDesignStartDate());
|
||||
int endMonth = Integer.parseInt(vo.getDesignEndDate());
|
||||
vo.setMon(Math.abs(endMonth - startMonth) + 1);
|
||||
} catch (Exception ignored) {
|
||||
// Keep the old behavior: ignore invalid month format and return the raw values.
|
||||
}
|
||||
}
|
||||
|
||||
if (FP_1.equals(vo.getSttpCode()) || FP_2.equals(vo.getSttpCode())) {
|
||||
vo.setDwtp(0);
|
||||
} else {
|
||||
vo.setDwtp(1);
|
||||
if (vo.getPycnt() != null && vo.getPycnt() != 0 && vo.getMon() != null && vo.getMon() != 0) {
|
||||
vo.setPyRate(new BigDecimal(vo.getPycnt())
|
||||
.divide(new BigDecimal(vo.getMon()), 2, RoundingMode.HALF_UP)
|
||||
.intValue());
|
||||
}
|
||||
}
|
||||
|
||||
DataSourceResult<FpRunPlanVo> result = new DataSourceResult<>();
|
||||
result.setData(Collections.singletonList(vo));
|
||||
result.setTotal(1L);
|
||||
result.setAggregates(new HashMap<>());
|
||||
return result;
|
||||
}
|
||||
|
||||
private String buildQgcSecondPlanSql() {
|
||||
return "SELECT t.STCD AS stcd, " +
|
||||
" t2.stm AS designStartDate, " +
|
||||
" t2.edm AS designEndDate, " +
|
||||
" t2.pycnt AS pycnt, " +
|
||||
" NULL AS pyRate, " +
|
||||
" t.STTP AS sttpCode, " +
|
||||
" t1.planFtp AS planFtp, " +
|
||||
" t.ZYGYDX AS fallbackFishJson, " +
|
||||
" NVL(t.ZYGYDXMS, t.JGGYDXMS) AS fallbackFishText " +
|
||||
"FROM SD_FPSS_B_H t " +
|
||||
"LEFT JOIN ( " +
|
||||
" SELECT a.STCD, " +
|
||||
" REGEXP_REPLACE(LISTAGG(TO_CHAR(fish.NAME), ',') WITHIN GROUP (ORDER BY NVL(rel.ORDER_INDEX, 999999), a.FTP), '([^,]+)(,\\1)*(,|$)', '\\1\\3') AS planFtp " +
|
||||
" FROM ( " +
|
||||
" SELECT STCD, TRIM(REGEXP_SUBSTR(FTP, '[^,]+', 1, LEVEL)) AS FTP " +
|
||||
" FROM ( " +
|
||||
" SELECT STCD, FTP " +
|
||||
" FROM SD_FPRUNPLAN_B " +
|
||||
" WHERE (TASK_STATUS = 'Approved' OR TASK_STATUS IS NULL) " +
|
||||
" AND IS_DELETED = 0 " +
|
||||
" AND STCD = #{map.stcd} " +
|
||||
" AND TO_CHAR(START_TIME, 'yyyy') = #{map.yr} " +
|
||||
" ) " +
|
||||
" CONNECT BY REGEXP_SUBSTR(FTP, '[^,]+', 1, LEVEL) IS NOT NULL " +
|
||||
" AND PRIOR TO_CHAR(SYS_GUID()) IS NOT NULL " +
|
||||
" AND PRIOR FTP = FTP " +
|
||||
" AND PRIOR STCD = STCD " +
|
||||
" ) a " +
|
||||
" INNER JOIN SD_FPSS_B_H fpss ON fpss.STCD = a.STCD " +
|
||||
" LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = fpss.RSTCD " +
|
||||
" LEFT JOIN SD_FISHDICTORY_RLTN_B rel ON rel.RVCD = eng.HBRVCD " +
|
||||
" AND rel.FISH_ID = a.FTP " +
|
||||
" AND rel.IS_DELETED = 0 " +
|
||||
" LEFT JOIN SD_FISHDICTORY_B fish ON fish.ID = NVL(rel.ZY_FISH_ID, a.FTP) " +
|
||||
" AND fish.IS_DELETED = 0 " +
|
||||
" GROUP BY a.STCD " +
|
||||
") t1 ON t.STCD = t1.STCD " +
|
||||
"LEFT JOIN ( " +
|
||||
" SELECT a.STCD, MIN(a.stm) AS stm, MAX(a.edm) AS edm, MAX(a.pycnt) AS pycnt " +
|
||||
" FROM ( " +
|
||||
" SELECT STCD, TO_CHAR(START_TIME, 'mm') AS stm, TO_CHAR(END_TIME, 'mm') AS edm, PYCNT AS pycnt " +
|
||||
" FROM SD_FPRUNPLAN_B " +
|
||||
" WHERE (TASK_STATUS = 'Approved' OR TASK_STATUS IS NULL) " +
|
||||
" AND IS_DELETED = 0 " +
|
||||
" AND STCD = #{map.stcd} " +
|
||||
" AND TO_CHAR(START_TIME, 'yyyy') = #{map.yr} " +
|
||||
" UNION ALL " +
|
||||
" SELECT STCD, STMONTH AS stm, ETMMONTH AS edm, FREQUENCY AS pycnt " +
|
||||
" FROM SD_FPDESIGNSTAND_B " +
|
||||
" WHERE IS_DELETED = 0 " +
|
||||
" AND STCD = #{map.stcd} " +
|
||||
" AND STCD NOT IN ( " +
|
||||
" SELECT STCD " +
|
||||
" FROM SD_FPRUNPLAN_B " +
|
||||
" WHERE (TASK_STATUS = 'Approved' OR TASK_STATUS IS NULL) " +
|
||||
" AND IS_DELETED = 0 " +
|
||||
" AND STCD = #{map.stcd} " +
|
||||
" AND TO_CHAR(START_TIME, 'yyyy') = #{map.yr} " +
|
||||
" GROUP BY STCD " +
|
||||
" ) " +
|
||||
" ) a " +
|
||||
" GROUP BY a.STCD " +
|
||||
") t2 ON t.STCD = t2.STCD " +
|
||||
"WHERE t.STCD = #{map.stcd}";
|
||||
}
|
||||
|
||||
private String resolveFallbackFishText(String fallbackFishJson, String fallbackFishText) {
|
||||
if (StrUtil.isNotBlank(fallbackFishJson)) {
|
||||
Set<String> fishNames = new LinkedHashSet<>();
|
||||
Matcher matcher = FISH_NAME_PATTERN.matcher(fallbackFishJson);
|
||||
while (matcher.find()) {
|
||||
fishNames.add(StrUtil.trim(matcher.group(1)));
|
||||
}
|
||||
if (!fishNames.isEmpty()) {
|
||||
return String.join(",", fishNames);
|
||||
}
|
||||
}
|
||||
return StrUtil.blankToDefault(StrUtil.trim(fallbackFishText), null);
|
||||
}
|
||||
}
|
||||
@ -48,7 +48,7 @@ public class EnvWqDataController {
|
||||
}
|
||||
|
||||
@PostMapping("/data/noAuth/GetKendoListCust")
|
||||
@Operation(summary = "水质统计分析")
|
||||
@Operation(summary = "水质统计分析(完成)")
|
||||
public ResponseResult getNoAuthKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||
return ResponseResult.successData(envWqDataService.processKendoList(dataSourceRequest));
|
||||
}
|
||||
@ -66,13 +66,13 @@ public class EnvWqDataController {
|
||||
}
|
||||
|
||||
@PostMapping("/vmsstbprpt/GetKendoList")
|
||||
@Operation(summary = "根据条件查询水质基础站点数据")
|
||||
@Operation(summary = "根据条件查询水质基础站点数据(完成)")
|
||||
public ResponseResult getVmsstbprptList(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||
return ResponseResult.successData(envWqDataService.getVmsstbprptList(dataSourceRequest));
|
||||
}
|
||||
|
||||
@GetMapping("/msstbprpt/getStcdInfo")
|
||||
@Operation(summary = "根据站码查询单条水质基础数据")
|
||||
@Operation(summary = "根据站码查询单条水质基础数据(完成)")
|
||||
public ResponseResult getStcdInfo(@RequestParam String stcd) {
|
||||
return ResponseResult.successData(envWqDataService.getStcdInfo(stcd));
|
||||
}
|
||||
|
||||
@ -322,7 +322,7 @@ public class EnvWqDataServiceImpl implements EnvWqDataService {
|
||||
.append("SWR.WQGRD, MSB.WWQTG, SWR.SFDB, SWR.WQ_SFDBHN_YS, ")
|
||||
.append("MSB.BASE_ID, MSB.BASE_NAME, MSB.RVCD_NAME, MSB.ADDVCD_NAME, MSB.DTIN_TYPE, ")
|
||||
.append("MSB.BASESTEPSORT, MSB.RVCDSTEPSORT, MSB.RSTCDSTEPSORT, MSB.SITESTEPSORT, ")
|
||||
.append("MSB.TTPWR, MSB.STTP_CODE, ");
|
||||
.append("MSB.STTP_CODE, ");
|
||||
if (calculated) {
|
||||
sql.append("CAST(NULL AS NUMBER(15,3)) AS QI, CAST(NULL AS NUMBER(15,3)) AS QO ");
|
||||
} else {
|
||||
@ -337,8 +337,7 @@ public class EnvWqDataServiceImpl implements EnvWqDataService {
|
||||
sql.append("INNER JOIN (").append(buildEnvWqDataStationBaseSql()).append(") MSB ON MSB.STCD = SWR.STCD ");
|
||||
if (!calculated) {
|
||||
sql.append("LEFT JOIN SD_HYDROPW_R SHR ON MSB.RSTCD = SHR.STCD AND SWR.TM = SHR.TM AND MSB.DTIN_TYPE = 0 ")
|
||||
.append("WHERE SWR.TM <= SYSDATE ")
|
||||
.append("AND (SWR.TASK_ID IS NULL OR SWR.TASK_ID = '' OR SWR.TASK_STATUS = 'Approved') ");
|
||||
.append("WHERE SWR.TM <= SYSDATE ");
|
||||
} else {
|
||||
sql.append("WHERE 1 = 1 ");
|
||||
}
|
||||
@ -362,7 +361,6 @@ public class EnvWqDataServiceImpl implements EnvWqDataService {
|
||||
"wq.DTIN_TYPE, " +
|
||||
"siteAlong.SORT AS SITESTEPSORT, " +
|
||||
"hb.ORDER_INDEX AS BASESTEPSORT, " +
|
||||
"eng.TTPWR AS TTPWR, " +
|
||||
"rstAlong.SORT AS RSTCDSTEPSORT, " +
|
||||
"rvAlong.ORDER_INDEX AS RVCDSTEPSORT, " +
|
||||
"wq.STTP AS STTP_CODE " +
|
||||
@ -506,7 +504,6 @@ public class EnvWqDataServiceImpl implements EnvWqDataService {
|
||||
case "wqSfdbhnYs" -> "T.WQ_SFDBHN_YS";
|
||||
case "siteStepSort" -> "T.SITESTEPSORT";
|
||||
case "baseStepSort" -> "T.BASESTEPSORT";
|
||||
case "ttpwr" -> "T.TTPWR";
|
||||
case "rstcdStepSort" -> "T.RSTCDSTEPSORT";
|
||||
case "sttpCode" -> "T.STTP_CODE";
|
||||
default -> null;
|
||||
@ -899,7 +896,6 @@ public class EnvWqDataServiceImpl implements EnvWqDataService {
|
||||
case "baseStepSort" -> "T.BASESTEPSORT";
|
||||
case "rvcdStepSort" -> "T.RVCDSTEPSORT";
|
||||
case "siteStepSort" -> "T.SITESTEPSORT";
|
||||
case "drMonth" -> "T.DR_MONTH";
|
||||
case "drYear" -> "T.DR_YEAR";
|
||||
case "wqSfdbHy" -> "T.WQ_SFDB_HY";
|
||||
case "wqSfdbHn" -> "T.WQ_SFDB_HN";
|
||||
|
||||
Loading…
Reference in New Issue
Block a user