feat: 水生生态调查对比(柱状图)

This commit is contained in:
tangwei 2026-06-29 18:08:49 +08:00
parent 4480109fb0
commit 0295c67e41
6 changed files with 165 additions and 0 deletions

View File

@ -69,6 +69,12 @@ public class WeFishController {
return ResponseResult.successData(weFishService.getWvaDefaultList(dataSourceRequest));
}
@PostMapping("/we/compareBar/GetKendoListCust")
@Operation(summary = "水生生态调查对比(柱状图)")
public ResponseResult getWeCompareBarList(@RequestBody DataSourceRequest dataSourceRequest) {
return ResponseResult.successData(weFishService.getWeCompareBarList(dataSourceRequest));
}
@PostMapping("/we/fisht/year/qgc/GetKendoListCust")
@Operation(summary = "全过程沿程鱼类变化情况有数据的流域和年份")
public ResponseResult getQgcFishStaticsYearList(@RequestBody DataSourceRequest dataSourceRequest) {

View File

@ -0,0 +1,33 @@
package com.yfd.platform.qgc_env.wte.entity.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.List;
@Data
@Accessors(chain = true)
@AllArgsConstructor
@Schema(description = "水生生态调查对比柱状图表头")
public class WeCompareBarHeadColumnVo {
@Schema(description = "字段名")
private String dataIndex;
@Schema(description = "标题")
private String title;
@Schema(description = "是否可见")
private Boolean visible;
@Schema(description = "")
private String key;
@Schema(description = "单位")
private boolean merge;
@Schema(description = "子列")
private List<WeCompareBarHeadColumnVo> children;
}

View File

@ -0,0 +1,22 @@
package com.yfd.platform.qgc_env.wte.entity.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.List;
@Data
@Accessors(chain = true)
@Schema(description = "水生生态调查对比柱状图表格")
public class WeCompareBarTableVo {
@Schema(description = "表头")
private List<WeCompareBarHeadColumnVo> columns;
@Schema(description = "表格数据")
private Object dataSource;
@Schema(description = "总数")
private Long total;
}

View File

@ -0,0 +1,29 @@
package com.yfd.platform.qgc_env.wte.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 WeCompareBarVo {
@Schema(description = "鱼类名称")
private String ftp;
@Schema(description = "科属")
private String genus;
@Schema(description = "调查批次")
private String dcpc;
@Schema(description = "对比批次")
private String dcpc2;
@Schema(description = "鱼类数量")
private Integer fcnt;
@Schema(description = "对比鱼类数量")
private Integer fcnt2;
}

View File

@ -4,6 +4,7 @@ import com.yfd.platform.common.DataSourceRequest;
import com.yfd.platform.common.DataSourceResult;
import com.yfd.platform.qgc_env.wte.entity.vo.WeFishListQgcVo;
import com.yfd.platform.qgc_env.wte.entity.vo.WeFishListStatQgcVo;
import com.yfd.platform.qgc_env.wte.entity.vo.WeCompareBarTableVo;
import com.yfd.platform.qgc_env.wte.entity.vo.WeFishDetailVo;
import com.yfd.platform.qgc_env.wte.entity.vo.WeMsstbprptVo;
import com.yfd.platform.qgc_env.wte.entity.vo.WeFishPointQgcVo;
@ -38,6 +39,8 @@ public interface WeFishService {
DataSourceResult<WeWvaYearQgcVo> getWvaDefaultYearList(DataSourceRequest dataSourceRequest);
DataSourceResult<WeCompareBarTableVo> getWeCompareBarList(DataSourceRequest dataSourceRequest);
DataSourceResult<Map<String, List<String>>> getQgcFishStaticsYearList(DataSourceRequest dataSourceRequest);
DataSourceResult<WeStaticsVo> getQgcWeFishStatics(DataSourceRequest dataSourceRequest);

View File

@ -10,6 +10,9 @@ import com.yfd.platform.common.DataSourceResult;
import com.yfd.platform.common.GroupHelper;
import com.yfd.platform.common.GroupingInfo;
import com.yfd.platform.common.MicroservicDynamicSQLMapper;
import com.yfd.platform.qgc_env.wte.entity.vo.WeCompareBarHeadColumnVo;
import com.yfd.platform.qgc_env.wte.entity.vo.WeCompareBarTableVo;
import com.yfd.platform.qgc_env.wte.entity.vo.WeCompareBarVo;
import com.yfd.platform.qgc_env.wte.entity.vo.WeFishListQgcVo;
import com.yfd.platform.qgc_env.wte.entity.vo.WeFishListStatQgcVo;
import com.yfd.platform.qgc_env.wte.entity.vo.WeFishDetailVo;
@ -423,6 +426,58 @@ public class WeFishServiceImpl implements WeFishService {
return result;
}
@Override
public DataSourceResult<WeCompareBarTableVo> getWeCompareBarList(DataSourceRequest dataSourceRequest) {
DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest();
DataSourceRequest.FilterDescriptor filter = dataSourceRequest == null ? null : dataSourceRequest.getFilter();
String stcd = getFirstWeFishFilterText(filter, "stcd");
String dcpc = getFirstWeFishFilterText(filter, "dcpc");
String dcpc2 = getFirstWeFishFilterText(filter, "dcpc2");
List<WeCompareBarVo> list = new ArrayList<>();
long total = 0L;
if (StrUtil.isNotBlank(stcd) && StrUtil.isNotBlank(dcpc) && StrUtil.isNotBlank(dcpc2)) {
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("stcd", stcd);
paramMap.put("dcpc", dcpc);
paramMap.put("dcpc2", dcpc2);
String sql = "SELECT dict.NAME AS ftp, " +
"MAX(NVL(dict.FAMILY, '') || NVL(dict.GENUS, '')) AS genus, " +
"#{map.dcpc} AS dcpc, " +
"#{map.dcpc2} AS dcpc2, " +
"SUM(CASE WHEN we.DCPC = #{map.dcpc} THEN NVL(fish.FCNT, 0) ELSE 0 END) AS fcnt, " +
"SUM(CASE WHEN we.DCPC = #{map.dcpc2} THEN NVL(fish.FCNT, 0) ELSE 0 END) AS fcnt2 " +
"FROM SD_WE_R we " +
"INNER JOIN SD_WEFISH_R fish ON we.ID = fish.WER_ID AND NVL(fish.IS_DELETED, 0) = 0 " +
"INNER JOIN SD_WE_B_H section ON section.STCD = we.STCD AND NVL(section.USFL, 0) = 1 " +
"INNER JOIN SD_FISHDICTORY_B dict ON dict.ID = fish.FTP AND NVL(dict.IS_DELETED, 0) = 0 " +
"WHERE NVL(we.IS_DELETED, 0) = 0 " +
"AND NVL(we.STATUS, 1) = 1 " +
"AND we.STCD = #{map.stcd} " +
"AND we.DCPC IN (#{map.dcpc}, #{map.dcpc2}) " +
"GROUP BY dict.NAME " +
"ORDER BY dict.NAME";
Page<?> page = loadOptions == null ? null
: QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake());
list = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql, paramMap, WeCompareBarVo.class);
total = page != null ? page.getTotal() : list.size();
}
WeCompareBarTableVo tableVo = new WeCompareBarTableVo()
.setColumns(buildWeCompareBarColumns(dcpc, dcpc2))
.setDataSource(list)
.setTotal(total);
DataSourceResult<WeCompareBarTableVo> result = new DataSourceResult<>();
result.setData(Collections.singletonList(tableVo));
result.setTotal(total);
result.setAggregates(new HashMap<>());
return result;
}
@Override
public DataSourceResult<Map<String, List<String>>> getQgcFishStaticsYearList(DataSourceRequest dataSourceRequest) {
Map<String, Object> paramMap = new HashMap<>();
@ -1357,6 +1412,17 @@ public class WeFishServiceImpl implements WeFishService {
return splitWeFishText(names);
}
private List<WeCompareBarHeadColumnVo> buildWeCompareBarColumns(String dcpc, String dcpc2) {
List<WeCompareBarHeadColumnVo> columns = new ArrayList<>();
columns.add(new WeCompareBarHeadColumnVo("ftp", "鱼种类", true, "ftp", false, new ArrayList<>()));
columns.add(new WeCompareBarHeadColumnVo("genus", "科属", true, "genus", false, new ArrayList<>()));
columns.add(new WeCompareBarHeadColumnVo("dcpc", StrUtil.isBlank(dcpc) ? "调查批次" : dcpc, true, "dcpc", false, new ArrayList<>()));
columns.add(new WeCompareBarHeadColumnVo("dcpc2", StrUtil.isBlank(dcpc2) ? "对比批次" : dcpc2, true, "dcpc2", false, new ArrayList<>()));
columns.add(new WeCompareBarHeadColumnVo("fcnt", "鱼类数量(尾)", true, "fnct", false, new ArrayList<>()));
columns.add(new WeCompareBarHeadColumnVo("fcnt2", "对比鱼类数量(尾)", true, "fcnt2", false, new ArrayList<>()));
return columns;
}
private String firstNonBlankWeFishFilter(DataSourceRequest.FilterDescriptor filter, String... fields) {
if (fields == null) {
return null;
@ -3088,6 +3154,12 @@ public class WeFishServiceImpl implements WeFishService {
return values;
}
private List<Object> normalizeWeWvaValues(Object value) {
List<Object> values = new ArrayList<>();
appendWeFishQgcValues(values, value);
return values;
}
private String buildWeFishListStatFilterCondition(DataSourceRequest.FilterDescriptor filter,
Map<String, Object> paramMap,
int[] indexHolder) {