Merge branch 'dev-tw'

This commit is contained in:
tangwei 2026-06-17 11:46:16 +08:00
commit 1a6b8e80ac
64 changed files with 4584 additions and 173 deletions

View File

@ -65,6 +65,7 @@ public class SecurityConfig {
// .requestMatchers("/eq/**").permitAll()
// .requestMatchers("/env/**").permitAll()
// .requestMatchers("/wt/**").permitAll()
// .requestMatchers("/fb/**").permitAll()
// .requestMatchers("/zq/**").permitAll()
// .requestMatchers("/wq/**").permitAll()
// .requestMatchers("/vd/**").permitAll()

View File

@ -122,11 +122,19 @@ public class SwaggerConfig {
@Bean
public GroupedOpenApi groupEnvFprApi() {
return GroupedOpenApi.builder()
.group("3.5 全过程-生态环保数据服务-鱼类调查")
.group("3.6 全过程-生态环保数据服务-鱼类调查")
.packagesToScan("com.yfd.platform.qgc_env.fpr.controller")
.build();
}
@Bean
public GroupedOpenApi groupEnvFbApi() {
return GroupedOpenApi.builder()
.group("3.7 全过程-生态环保数据服务-增殖放流")
.packagesToScan("com.yfd.platform.qgc_env.fb.controller")
.build();
}

View File

@ -4,6 +4,7 @@ import com.yfd.platform.common.DataSourceLoadOptionsBase;
import com.yfd.platform.common.DataSourceRequest;
import com.yfd.platform.common.DataSourceResult;
import com.yfd.platform.config.ResponseResult;
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqDrtpDataVo;
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqIntervalVo;
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqMsstbprptVo;
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqRuleVo;
@ -42,6 +43,13 @@ public class EngEqDataController {
return ResponseResult.successData(engEqDataService.getDayKendoListCust(dataSourceRequest));
}
@PostMapping("/data/drtp/GetKendoListCust")
@Operation(summary = "生态流量周旬月季年数据")
public ResponseResult getDrtpKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
DataSourceResult<EngEqDrtpDataVo> result = engEqDataService.getDrtpKendoListCust(dataSourceRequest);
return ResponseResult.successData(result);
}
@PostMapping("/interval/GetKendoListCust")
@Operation(summary = "生态流量达标情况")
public ResponseResult getIntervalKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {

View File

@ -0,0 +1,126 @@
package com.yfd.platform.qgc_eng.eq.entity.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
@Data
@Schema(description = "生态流量周旬月季年数据")
public class EngEqDrtpDataVo {
@Schema(description = "主键")
private String id;
@Schema(description = "电站编码")
private String stcd;
@Schema(description = "电站名称")
private String stnm;
@Schema(description = "工程名称")
private String ennm;
@Schema(description = "基地编码")
private String baseId;
@Schema(description = "基地名称")
private String baseName;
@Schema(description = "基地流域编码")
private String hbrvcd;
@Schema(description = "基地流域名称")
private String hbrvcdName;
@Schema(description = "流域编码")
private String rvcd;
@Schema(description = "流域名称")
private String rvcdName;
@Schema(description = "行政区名称")
private String addvcdName;
@Schema(description = "入库流量")
private BigDecimal qi;
@Schema(description = "出库流量")
private BigDecimal qo;
@Schema(description = "坝上水位")
private BigDecimal rz;
@Schema(description = "坝下水位")
private BigDecimal dz;
@Schema(description = "生态流量限值(环保部)")
private BigDecimal qecLimit;
@Schema(description = "生态流量")
private BigDecimal qec;
@Schema(description = "生态流量限值(水利部)")
private BigDecimal mwrLimit;
@Schema(description = "生态流量限值(多年平均)")
private BigDecimal avqLimit;
@Schema(description = "生态流量系数(环保部)")
private BigDecimal qecC;
@Schema(description = "生态流量系数(水利部)")
private BigDecimal mwrC;
@Schema(description = "生态流量系数(多年平均)")
private BigDecimal avqC;
@Schema(description = "生态流量是否达标")
private Integer sfdb;
@Schema(description = "生态流量是否达标中文")
private String sfdbName;
@Schema(description = "生态流量是否达标(环保部)")
private Integer qecSfdb;
@Schema(description = "生态流量是否达标(水利部)")
private Integer mwrSfdb;
@Schema(description = "生态流量是否达标(水利部)中文")
private String mwrSfdbName;
@Schema(description = "生态流量是否达标(多年平均)")
private Integer avqSfdb;
@Schema(description = "生态流量是否达标(多年平均)中文")
private String avqSfdbName;
@Schema(description = "数据时间")
private Date tm;
@Schema(description = "")
private Integer month;
@Schema(description = "")
private Integer year;
@Schema(description = "维度类型")
private String drtp;
@Schema(description = "时段")
private Integer dr;
@Schema(description = "基地排序")
private Integer baseStepSort;
@Schema(description = "流域排序")
private Integer rvcdStepSort;
@Schema(description = "电站排序")
private Integer rstcdStepSort;
@Schema(description = "站点排序")
private Integer siteStepSort;
}

View File

@ -3,6 +3,7 @@ package com.yfd.platform.qgc_eng.eq.service;
import com.yfd.platform.common.DataSourceRequest;
import com.yfd.platform.common.DataSourceResult;
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqDayDataVo;
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqDrtpDataVo;
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqDayIntervalVo;
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqHourIntervalVo;
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqIntervalVo;
@ -21,6 +22,8 @@ public interface EngEqDataService {
DataSourceResult<EngEqDayDataVo> getDayKendoListCust(DataSourceRequest dataSourceRequest);
DataSourceResult<EngEqDrtpDataVo> getDrtpKendoListCust(DataSourceRequest dataSourceRequest);
DataSourceResult<EngEqIntervalVo> getIntervalKendoListCust(DataSourceRequest dataSourceRequest);
DataSourceResult<EngEqMsstbprptVo> getMsstbprptList(DataSourceRequest dataSourceRequest);

View File

@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yfd.platform.common.DataSourceLoadOptionsBase;
import com.yfd.platform.common.DataSourceRequest;
import com.yfd.platform.common.DataSourceResult;
import com.yfd.platform.common.Group;
import com.yfd.platform.common.GroupHelper;
import com.yfd.platform.common.GroupingInfo;
import com.yfd.platform.common.MicroservicDynamicSQLMapper;
@ -13,6 +14,7 @@ import com.yfd.platform.common.enums.QecIntervalEnum;
import com.yfd.platform.common.enums.ShowEnum;
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqDataVo;
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqDayDataVo;
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqDrtpDataVo;
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqDayIntervalVo;
import com.yfd.platform.qgc_eng.eq.entity.vo.EngFidVo;
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqHourIntervalVo;
@ -70,6 +72,15 @@ public class EngEqDataServiceImpl implements EngEqDataService {
return queryDayGroupList(dataSourceRequest, loadOptions);
}
@Override
public DataSourceResult<EngEqDrtpDataVo> getDrtpKendoListCust(DataSourceRequest dataSourceRequest) {
DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest();
if (CollUtil.isEmpty(dataSourceRequest == null ? null : dataSourceRequest.getGroup())) {
return queryDrtpDetailList(dataSourceRequest, loadOptions);
}
return queryDrtpGroupList(dataSourceRequest, loadOptions);
}
@Override
public DataSourceResult<EngEqIntervalVo> getIntervalKendoListCust(DataSourceRequest dataSourceRequest) {
DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest();
@ -742,7 +753,9 @@ public class EngEqDataServiceImpl implements EngEqDataService {
if (Boolean.TRUE.equals(dataSourceRequest.getGroupResultFlat())) {
result.setData((List<EngEqHourIntervalVo>) (List<?>) new GroupHelper().faltGroup(rows, Arrays.asList(groupInfos)));
} else {
result.setData((List<EngEqHourIntervalVo>) (List<?>) new GroupHelper().group(rows, Arrays.asList(groupInfos)));
List<Group> grouped = new GroupHelper().group(rows, Arrays.asList(groupInfos));
populateHourDayGroupKeyNames(grouped);
result.setData((List<EngEqHourIntervalVo>) (List<?>) grouped);
}
result.setTotal(0L);
result.setAggregates(new HashMap<>());
@ -897,7 +910,9 @@ public class EngEqDataServiceImpl implements EngEqDataService {
if (Boolean.TRUE.equals(dataSourceRequest.getGroupResultFlat())) {
result.setData((List<EngEqDayIntervalVo>) (List<?>) new GroupHelper().faltGroup(rows, Arrays.asList(groupInfos)));
} else {
result.setData((List<EngEqDayIntervalVo>) (List<?>) new GroupHelper().group(rows, Arrays.asList(groupInfos)));
List<Group> grouped = new GroupHelper().group(rows, Arrays.asList(groupInfos));
populateHourDayGroupKeyNames(grouped);
result.setData((List<EngEqDayIntervalVo>) (List<?>) grouped);
}
result.setTotal(0L);
result.setAggregates(new HashMap<>());
@ -951,6 +966,169 @@ public class EngEqDataServiceImpl implements EngEqDataService {
}
}
private void populateHourDayGroupKeyNames(List<Group> groups) {
if (CollUtil.isEmpty(groups)) {
return;
}
Map<String, String> baseNameCache = new HashMap<>();
Map<String, String> hbrvNameCache = new HashMap<>();
populateHourDayGroupKeyNames(groups, baseNameCache, hbrvNameCache);
}
private void populateHourDayGroupKeyNames(List<Group> groups,
Map<String, String> baseNameCache,
Map<String, String> hbrvNameCache) {
for (Group group : groups) {
if (group == null) {
continue;
}
if (StrUtil.isBlank(group.getKeyName())) {
group.setKeyName(resolveHourDayGroupKeyName(group.getField(), group.getKey(), baseNameCache, hbrvNameCache));
}
if (CollUtil.isNotEmpty(group.getItems()) && group.getItems().get(0) instanceof Group) {
populateHourDayGroupKeyNames((List<Group>) group.getItems(), baseNameCache, hbrvNameCache);
}
}
}
private String resolveHourDayGroupKeyName(Object field,
Object key,
Map<String, String> baseNameCache,
Map<String, String> hbrvNameCache) {
if (field == null || key == null) {
return null;
}
String fieldName = String.valueOf(field);
String keyValue = String.valueOf(key);
if (StrUtil.isBlank(keyValue)) {
return null;
}
return switch (fieldName) {
case "stnm", "ennm", "titleName", "baseName", "hbrvcdName", "addvcdName" -> keyValue;
case "sttp", "sttpCode" -> "ENG".equalsIgnoreCase(keyValue) ? "电站" : keyValue;
case "baseId" -> StrUtil.blankToDefault(resolveBaseName(keyValue, baseNameCache), keyValue);
case "hbrvcd" -> StrUtil.blankToDefault(resolveHbrvName(keyValue, hbrvNameCache), keyValue);
case "dtin" -> resolveDtinName(keyValue);
case "dtinEnv" -> resolveDtinEnvName(keyValue);
case "prsc" -> resolvePrscName(keyValue);
case "bldstt", "bldsttCcode" -> resolveBldsttName(keyValue);
case "qecInterval", "mwrInterval", "avqInterval" -> resolveQecIntervalName(keyValue);
case "anchoPointState", "mwrPointState", "avqPointState" -> resolvePointStateName(keyValue);
default -> keyValue;
};
}
private String resolveBaseName(String baseId, Map<String, String> cache) {
if (StrUtil.isBlank(baseId)) {
return null;
}
if (cache.containsKey(baseId)) {
return cache.get(baseId);
}
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("code", baseId);
List<Map<String, Object>> rows = microservicDynamicSQLMapper.pageAllList(null,
"SELECT hb.BASENAME AS name FROM SD_HYDROBASE hb " +
"WHERE hb.BASEID = #{map.code} AND NVL(hb.IS_DELETED, 0) = 0 AND ROWNUM = 1",
paramMap);
String name = extractName(rows);
cache.put(baseId, name);
return name;
}
private String resolveHbrvName(String hbrvcd, Map<String, String> cache) {
if (StrUtil.isBlank(hbrvcd)) {
return null;
}
if (cache.containsKey(hbrvcd)) {
return cache.get(hbrvcd);
}
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("code", hbrvcd);
List<Map<String, Object>> rows = microservicDynamicSQLMapper.pageAllList(null,
"SELECT dic.HBRVNM AS name FROM SD_HBRV_DIC dic " +
"WHERE dic.HBRVCD = #{map.code} AND NVL(dic.IS_DELETED, 0) = 0 AND NVL(dic.ENABLED, 1) = 1 AND ROWNUM = 1",
paramMap);
String name = extractName(rows);
cache.put(hbrvcd, name);
return name;
}
private String extractName(List<Map<String, Object>> rows) {
if (CollUtil.isEmpty(rows)) {
return null;
}
Object name = rows.get(0).get("NAME");
if (name == null) {
name = rows.get(0).get("name");
}
return name == null ? null : String.valueOf(name);
}
private String resolveDtinName(String keyValue) {
return switch (keyValue) {
case "1" -> "";
case "0" -> "";
default -> keyValue;
};
}
private String resolveDtinEnvName(String keyValue) {
return switch (keyValue) {
case "2" -> "已全部接入";
case "1" -> "部分接入";
case "0" -> "未接入";
default -> keyValue;
};
}
private String resolvePrscName(String keyValue) {
return switch (keyValue) {
case "1" -> "大型1";
case "2" -> "大型2";
case "3" -> "中型";
case "4" -> "小型";
default -> keyValue;
};
}
private String resolveBldsttName(String keyValue) {
return switch (keyValue) {
case "0" -> "未建/规划";
case "1" -> "在建";
case "2" -> "已建";
default -> keyValue;
};
}
private String resolveQecIntervalName(String keyValue) {
for (QecIntervalEnum item : QecIntervalEnum.values()) {
if (Objects.equals(item.getCode(), keyValue)) {
return item.getDesc();
}
}
return keyValue;
}
private String resolvePointStateName(String keyValue) {
String prefix;
if (keyValue.startsWith("eef_1_")) {
prefix = "大型1";
} else if (keyValue.startsWith("eef_2_")) {
prefix = "大型2/中型";
} else {
return keyValue;
}
return switch (keyValue.substring("eef_".length())) {
case "1_none", "2_none" -> prefix + "_无生态流量数据或要求";
case "1_1", "2_1" -> prefix + "_>=95%";
case "1_2", "2_2" -> prefix + "_90%~95%";
case "1_3", "2_3" -> prefix + "_80%~90%";
case "1_4", "2_4" -> prefix + "_<80%";
default -> keyValue;
};
}
private String buildDayIntervalViewSql(DataSourceRequest.FilterDescriptor filter,
Map<String, Object> paramMap,
int[] indexHolder) {
@ -1590,6 +1768,101 @@ public class EngEqDataServiceImpl implements EngEqDataService {
return result;
}
private DataSourceResult<EngEqDrtpDataVo> queryDrtpDetailList(DataSourceRequest dataSourceRequest,
DataSourceLoadOptionsBase loadOptions) {
StringBuilder sql = new StringBuilder();
sql.append("SELECT ")
.append(buildDrtpDetailSelectSql(dataSourceRequest == null ? null : dataSourceRequest.getSelect()))
.append(" FROM (")
.append(buildDrtpViewSql())
.append(") t WHERE 1 = 1 ");
Map<String, Object> paramMap = new HashMap<>();
String filterSql = buildDrtpFilterCondition(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), paramMap, new int[]{0});
if (StrUtil.isNotBlank(filterSql)) {
sql.append(" AND ").append(filterSql).append(" ");
}
sql.append(buildDrtpDetailOrderBySql(dataSourceRequest == null ? null : dataSourceRequest.getSort()));
Page<?> page = loadOptions == null ? null : QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake());
List<EngEqDrtpDataVo> list = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), paramMap, EngEqDrtpDataVo.class);
DataSourceResult<EngEqDrtpDataVo> result = new DataSourceResult<>();
result.setData(list);
result.setTotal(page != null ? page.getTotal() : list.size());
result.setAggregates(new HashMap<>());
return result;
}
private DataSourceResult<EngEqDrtpDataVo> queryDrtpGroupList(DataSourceRequest dataSourceRequest,
DataSourceLoadOptionsBase loadOptions) {
List<DataSourceRequest.GroupDescriptor> groups = dataSourceRequest.getGroup();
GroupingInfo[] groupInfos = loadOptions == null ? new GroupingInfo[0] : loadOptions.getGroup();
List<String> selectItems = new ArrayList<>();
for (DataSourceRequest.GroupDescriptor descriptor : groups) {
if (descriptor == null || StrUtil.isBlank(descriptor.getField())) {
continue;
}
String column = mapDrtpColumn(descriptor.getField());
if (StrUtil.isBlank(column)) {
continue;
}
selectItems.add(column + " AS " + descriptor.getField().toUpperCase());
selectItems.add("COUNT(*) AS COUNT_" + descriptor.getField().toUpperCase());
if (CollUtil.isNotEmpty(descriptor.getAggregates())) {
for (DataSourceRequest.AggregateDescriptor aggregate : descriptor.getAggregates()) {
String aggregateColumn = mapDrtpColumn(aggregate.getField());
if (StrUtil.isBlank(aggregateColumn) || StrUtil.isBlank(aggregate.getAggregate())) {
continue;
}
selectItems.add(buildAggregateSql(aggregate.getAggregate(), aggregateColumn, aggregate.getField()));
}
}
}
if (selectItems.isEmpty()) {
selectItems.add("t.STCD AS STCD");
selectItems.add("COUNT(*) AS COUNT_STCD");
}
StringBuilder sql = new StringBuilder();
sql.append("SELECT ")
.append(String.join(", ", selectItems))
.append(" FROM (")
.append(buildDrtpViewSql())
.append(") t WHERE 1 = 1 ");
Map<String, Object> paramMap = new HashMap<>();
String filterSql = buildDrtpFilterCondition(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), paramMap, new int[]{0});
if (StrUtil.isNotBlank(filterSql)) {
sql.append(" AND ").append(filterSql).append(" ");
}
List<String> groupByColumns = new ArrayList<>();
for (DataSourceRequest.GroupDescriptor descriptor : groups) {
if (descriptor == null || StrUtil.isBlank(descriptor.getField())) {
continue;
}
String column = mapDrtpColumn(descriptor.getField());
if (StrUtil.isNotBlank(column)) {
groupByColumns.add(column);
}
}
if (!groupByColumns.isEmpty()) {
sql.append(" GROUP BY ").append(String.join(", ", groupByColumns)).append(" ");
}
sql.append(buildDrtpGroupOrderBySql(groups));
List<Map<String, Object>> rows = microservicDynamicSQLMapper.pageAllList(null, sql.toString(), paramMap);
DataSourceResult<EngEqDrtpDataVo> result = new DataSourceResult<>();
if (Boolean.TRUE.equals(dataSourceRequest.getGroupResultFlat())) {
result.setData((List<EngEqDrtpDataVo>) (List<?>) new GroupHelper().faltGroup(rows, Arrays.asList(groupInfos)));
} else {
result.setData((List<EngEqDrtpDataVo>) (List<?>) new GroupHelper().group(rows, Arrays.asList(groupInfos)));
}
result.setTotal((long) rows.size());
result.setAggregates(new HashMap<>());
return result;
}
private DataSourceResult<EngEqIntervalVo> queryIntervalDetailList(DataSourceRequest dataSourceRequest,
DataSourceLoadOptionsBase loadOptions) {
Map<String, Object> paramMap = new HashMap<>();
@ -2683,6 +2956,75 @@ public class EngEqDataServiceImpl implements EngEqDataService {
"WHERE NVL(day.IS_DELETED, 0) = 0";
}
private String buildDrtpViewSql() {
return "SELECT " +
"drtp.ID AS id, " +
"eng.STCD AS stcd, " +
"eng.ENNM AS stnm, " +
"eng.ENNM AS ennm, " +
"eng.BASE_ID AS baseId, " +
"hb.BASENAME AS baseName, " +
"eng.HBRVCD AS hbrvcd, " +
"hbrv.HBRVNM AS hbrvcdName, " +
"eng.RVCD AS rvcd, " +
"rv.RVNM AS rvcdName, " +
"addv.ADDVNM AS addvcdName, " +
"runDrtp.QI AS qi, " +
"runDrtp.QO AS qo, " +
"runDrtp.RZ AS rz, " +
"runDrtp.DZ AS dz, " +
"drtp.QEC_LIMIT AS qecLimit, " +
"drtp.QEC AS qec, " +
"drtp.MWR_LIMIT AS mwrLimit, " +
"drtp.AVQ_LIMIT AS avqLimit, " +
"drtp.QEC_C AS qecC, " +
"drtp.MWR_C AS mwrC, " +
"drtp.AVQ_C AS avqC, " +
"drtp.SFDB AS sfdb, " +
"CASE NVL(drtp.SFDB, -1) WHEN 0 THEN '不达标' WHEN 1 THEN '达标' WHEN 2 THEN '无生态流量数据' WHEN 3 THEN '无生态流量限值要求' ELSE NULL END AS sfdbName, " +
"drtp.SFDB AS qecSfdb, " +
"drtp.MWR_SFDB AS mwrSfdb, " +
"CASE NVL(drtp.MWR_SFDB, -1) WHEN 0 THEN '不达标' WHEN 1 THEN '达标' WHEN 2 THEN '无生态流量数据' WHEN 3 THEN '无生态流量限值要求' ELSE NULL END AS mwrSfdbName, " +
"drtp.AVQ_SFDB AS avqSfdb, " +
"CASE NVL(drtp.AVQ_SFDB, -1) WHEN 0 THEN '不达标' WHEN 1 THEN '达标' WHEN 2 THEN '无生态流量数据' WHEN 3 THEN '无生态流量限值要求' ELSE NULL END AS avqSfdbName, " +
"drtp.TM AS tm, " +
"drtp.YEAR AS year, " +
"drtp.MONTH AS month, " +
"drtp.DRTP AS drtp, " +
"drtp.DR AS dr, " +
"NVL(hb.ORDER_INDEX, 999999) AS baseStepSort, " +
"NVL(along.ORDER_INDEX, 999999) AS rvcdStepSort, " +
"NVL(rstSort.SORT, 999999) AS rstcdStepSort, " +
"NVL(siteSort.SORT, 999999) AS siteStepSort " +
"FROM SD_QECDRTP_S drtp " +
"INNER JOIN SD_ENGINFO_B_H eng ON eng.STCD = drtp.STCD AND NVL(eng.IS_DELETED, 0) = 0 " +
"LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = eng.BASE_ID AND NVL(hb.IS_DELETED, 0) = 0 " +
"LEFT JOIN SD_HBRV_DIC hbrv ON hbrv.HBRVCD = eng.HBRVCD AND hbrv.BASEID = eng.BASE_ID " +
" AND NVL(hbrv.IS_DELETED, 0) = 0 AND NVL(hbrv.ENABLED, 1) = 1 " +
"LEFT JOIN SD_RVCD_DIC rv ON rv.RVCD = eng.RVCD " +
"LEFT JOIN SD_ADDVCD_DIC addv ON addv.ADDVCD = eng.ADDVCD " +
"LEFT JOIN MS_ALONG_B along ON along.RVCD = eng.HBRVCD AND along.CODE = 'common' AND NVL(along.IS_DELETED, 0) = 0 " +
"LEFT JOIN ( " +
" SELECT det.SORT, cfg.RVCD, det.STCD " +
" FROM MS_ALONGDET_B det " +
" INNER JOIN MS_ALONG_B cfg ON det.ALONG_ID = cfg.ID " +
" WHERE NVL(det.IS_DELETED, 0) = 0 AND NVL(cfg.IS_DELETED, 0) = 0 AND cfg.CODE = 'common' " +
") rstSort ON rstSort.RVCD = eng.HBRVCD AND rstSort.STCD = eng.STCD " +
"LEFT JOIN ( " +
" SELECT det.SORT, cfg.RVCD, det.STCD " +
" FROM MS_ALONGDET_B det " +
" INNER JOIN MS_ALONG_B cfg ON det.ALONG_ID = cfg.ID " +
" WHERE NVL(det.IS_DELETED, 0) = 0 AND NVL(cfg.IS_DELETED, 0) = 0 AND cfg.CODE = 'common' " +
") siteSort ON siteSort.RVCD = eng.HBRVCD AND siteSort.STCD = eng.STCD " +
"LEFT JOIN SD_HYDROPWDRTP_S runDrtp ON drtp.STCD = runDrtp.STCD " +
" AND drtp.DRTP = runDrtp.DRTP " +
" AND NVL(drtp.DR, -1) = NVL(runDrtp.DR, -1) " +
" AND NVL(drtp.MONTH, -1) = NVL(runDrtp.MONTH, -1) " +
" AND drtp.YEAR = runDrtp.YEAR " +
" AND NVL(runDrtp.IS_DELETED, 0) = 0 " +
"WHERE NVL(drtp.IS_DELETED, 0) = 0";
}
private String buildDayRunDaySql() {
return "SELECT run.STCD, TRUNC(run.TM) AS DT, " +
"AVG(run.QI) AS QI, AVG(run.QO) AS QO, AVG(run.RZ) AS RZ, AVG(run.DZ) AS DZ " +
@ -2729,6 +3071,25 @@ public class EngEqDataServiceImpl implements EngEqDataService {
return String.join(", ", selected);
}
private String buildDrtpDetailSelectSql(List<String> selectFields) {
Map<String, String> columns = drtpFieldColumns();
List<String> selected = new ArrayList<>();
if (CollUtil.isEmpty(selectFields)) {
selected.addAll(columns.values());
} else {
for (String field : selectFields) {
String column = columns.get(field);
if (StrUtil.isNotBlank(column)) {
selected.add(column);
}
}
if (selected.isEmpty()) {
selected.addAll(columns.values());
}
}
return String.join(", ", selected);
}
private Map<String, String> detailFieldColumns() {
Map<String, String> columns = new LinkedHashMap<>();
columns.put("id", "sqr.ID AS id");
@ -2815,6 +3176,49 @@ public class EngEqDataServiceImpl implements EngEqDataService {
return columns;
}
private Map<String, String> drtpFieldColumns() {
Map<String, String> columns = new LinkedHashMap<>();
columns.put("id", "t.id AS id");
columns.put("stcd", "t.stcd AS stcd");
columns.put("stnm", "t.stnm AS stnm");
columns.put("ennm", "t.ennm AS ennm");
columns.put("baseId", "t.baseId AS baseId");
columns.put("baseName", "t.baseName AS baseName");
columns.put("hbrvcd", "t.hbrvcd AS hbrvcd");
columns.put("hbrvcdName", "t.hbrvcdName AS hbrvcdName");
columns.put("rvcd", "t.rvcd AS rvcd");
columns.put("rvcdName", "t.rvcdName AS rvcdName");
columns.put("addvcdName", "t.addvcdName AS addvcdName");
columns.put("qi", "t.qi AS qi");
columns.put("qo", "t.qo AS qo");
columns.put("rz", "t.rz AS rz");
columns.put("dz", "t.dz AS dz");
columns.put("qecLimit", "t.qecLimit AS qecLimit");
columns.put("qec", "t.qec AS qec");
columns.put("mwrLimit", "t.mwrLimit AS mwrLimit");
columns.put("avqLimit", "t.avqLimit AS avqLimit");
columns.put("qecC", "t.qecC AS qecC");
columns.put("mwrC", "t.mwrC AS mwrC");
columns.put("avqC", "t.avqC AS avqC");
columns.put("sfdb", "t.sfdb AS sfdb");
columns.put("sfdbName", "t.sfdbName AS sfdbName");
columns.put("qecSfdb", "t.qecSfdb AS qecSfdb");
columns.put("mwrSfdb", "t.mwrSfdb AS mwrSfdb");
columns.put("mwrSfdbName", "t.mwrSfdbName AS mwrSfdbName");
columns.put("avqSfdb", "t.avqSfdb AS avqSfdb");
columns.put("avqSfdbName", "t.avqSfdbName AS avqSfdbName");
columns.put("tm", "t.tm AS tm");
columns.put("year", "t.year AS year");
columns.put("month", "t.month AS month");
columns.put("drtp", "t.drtp AS drtp");
columns.put("dr", "t.dr AS dr");
columns.put("baseStepSort", "t.baseStepSort AS baseStepSort");
columns.put("rvcdStepSort", "t.rvcdStepSort AS rvcdStepSort");
columns.put("rstcdStepSort", "t.rstcdStepSort AS rstcdStepSort");
columns.put("siteStepSort", "t.siteStepSort AS siteStepSort");
return columns;
}
private String buildDetailOrderBySql(List<DataSourceRequest.SortDescriptor> sortList) {
if (CollUtil.isEmpty(sortList)) {
return " ORDER BY baseStepSort ASC, rvcdStepSort ASC, rstcdStepSort ASC, siteStepSort ASC, tm DESC";
@ -3596,6 +4000,10 @@ public class EngEqDataServiceImpl implements EngEqDataService {
return "dt".equalsIgnoreCase(field) || "tm".equalsIgnoreCase(field);
}
private boolean isEqDrtpDateField(String field) {
return "tm".equalsIgnoreCase(field);
}
private String buildEqValueExpr(String paramKey, boolean dateField, Object value) {
if (!dateField || value == null) {
return "#{map." + paramKey + "}";
@ -3684,6 +4092,83 @@ public class EngEqDataServiceImpl implements EngEqDataService {
return orders.isEmpty() ? "" : " ORDER BY " + String.join(", ", orders);
}
private String buildDrtpFilterCondition(DataSourceRequest.FilterDescriptor filter,
Map<String, Object> paramMap,
int[] indexHolder) {
if (filter == null) {
return "";
}
if (StrUtil.isNotBlank(filter.getField())) {
return buildDrtpLeafCondition(filter, paramMap, indexHolder);
}
if (CollUtil.isEmpty(filter.getFilters())) {
return "";
}
List<String> conditions = new ArrayList<>();
for (DataSourceRequest.FilterDescriptor child : filter.getFilters()) {
String childSql = buildDrtpFilterCondition(child, paramMap, indexHolder);
if (StrUtil.isNotBlank(childSql)) {
conditions.add("(" + childSql + ")");
}
}
if (conditions.isEmpty()) {
return "";
}
String logic = "or".equalsIgnoreCase(filter.getLogic()) ? " OR " : " AND ";
return String.join(logic, conditions);
}
private String buildDrtpLeafCondition(DataSourceRequest.FilterDescriptor filter,
Map<String, Object> paramMap,
int[] indexHolder) {
String column = mapDrtpColumn(filter.getField());
if (StrUtil.isBlank(column)) {
return "";
}
return buildGenericCondition(column, filter, paramMap, indexHolder, isEqDrtpDateField(filter.getField()));
}
private String buildDrtpDetailOrderBySql(List<DataSourceRequest.SortDescriptor> sortList) {
if (CollUtil.isEmpty(sortList)) {
return " ORDER BY baseStepSort ASC, rvcdStepSort ASC, rstcdStepSort ASC, siteStepSort ASC, year DESC, month DESC, drtp ASC, dr ASC";
}
List<String> orders = new ArrayList<>();
for (DataSourceRequest.SortDescriptor sort : sortList) {
if (sort == null || StrUtil.isBlank(sort.getField())) {
continue;
}
String column = mapDrtpOrderColumn(sort.getField());
if (StrUtil.isBlank(column)) {
continue;
}
String dir = "desc".equalsIgnoreCase(sort.getDir()) || "des".equalsIgnoreCase(sort.getDir()) ? "DESC" : "ASC";
orders.add(column + " " + dir);
}
if (orders.isEmpty()) {
return " ORDER BY baseStepSort ASC, rvcdStepSort ASC, rstcdStepSort ASC, siteStepSort ASC, year DESC, month DESC, drtp ASC, dr ASC";
}
return " ORDER BY " + String.join(", ", orders);
}
private String buildDrtpGroupOrderBySql(List<DataSourceRequest.GroupDescriptor> groups) {
if (CollUtil.isEmpty(groups)) {
return "";
}
List<String> orders = new ArrayList<>();
for (DataSourceRequest.GroupDescriptor descriptor : groups) {
if (descriptor == null || StrUtil.isBlank(descriptor.getField())) {
continue;
}
String column = mapDrtpColumn(descriptor.getField());
if (StrUtil.isBlank(column)) {
continue;
}
String dir = "desc".equalsIgnoreCase(descriptor.getDir()) || "des".equalsIgnoreCase(descriptor.getDir()) ? "DESC" : "ASC";
orders.add(column + " " + dir);
}
return orders.isEmpty() ? "" : " ORDER BY " + String.join(", ", orders);
}
@ -4247,4 +4732,66 @@ public class EngEqDataServiceImpl implements EngEqDataService {
default -> null;
};
}
private String mapDrtpColumn(String field) {
if (StrUtil.isBlank(field)) {
return null;
}
return switch (field) {
case "id" -> "t.id";
case "stcd" -> "t.stcd";
case "stnm", "ennm" -> "t.ennm";
case "baseId" -> "t.baseId";
case "baseName" -> "t.baseName";
case "hbrvcd" -> "t.hbrvcd";
case "hbrvcdName" -> "t.hbrvcdName";
case "rvcd" -> "t.rvcd";
case "rvcdName" -> "t.rvcdName";
case "addvcdName" -> "t.addvcdName";
case "qi" -> "t.qi";
case "qo" -> "t.qo";
case "rz" -> "t.rz";
case "dz" -> "t.dz";
case "qecLimit" -> "t.qecLimit";
case "qec" -> "t.qec";
case "mwrLimit" -> "t.mwrLimit";
case "avqLimit" -> "t.avqLimit";
case "qecC" -> "t.qecC";
case "mwrC" -> "t.mwrC";
case "avqC" -> "t.avqC";
case "sfdb" -> "t.sfdb";
case "sfdbName" -> "t.sfdbName";
case "qecSfdb" -> "t.qecSfdb";
case "mwrSfdb" -> "t.mwrSfdb";
case "mwrSfdbName" -> "t.mwrSfdbName";
case "avqSfdb" -> "t.avqSfdb";
case "avqSfdbName" -> "t.avqSfdbName";
case "tm" -> "t.tm";
case "year" -> "t.year";
case "month" -> "t.month";
case "drtp" -> "t.drtp";
case "dr" -> "t.dr";
case "baseStepSort" -> "NVL(t.baseStepSort, 999999)";
case "rvcdStepSort" -> "NVL(t.rvcdStepSort, 999999)";
case "rstcdStepSort" -> "NVL(t.rstcdStepSort, 999999)";
case "siteStepSort" -> "NVL(t.siteStepSort, 999999)";
default -> null;
};
}
private String mapDrtpOrderColumn(String field) {
if (StrUtil.isBlank(field)) {
return null;
}
return switch (field) {
case "id", "baseId", "hbrvcd", "rvcd", "qecC", "mwrC", "avqC",
"sfdbName", "qecSfdb", "mwrSfdb", "mwrSfdbName", "avqSfdb",
"avqSfdbName", "baseStepSort", "rvcdStepSort", "rstcdStepSort",
"siteStepSort", "tm", "year", "month", "drtp", "dr", "stcd",
"stnm", "ennm", "qi", "qo", "qec", "sfdb", "rz", "dz",
"qecLimit", "mwrLimit", "avqLimit", "baseName", "rvcdName",
"hbrvcdName", "addvcdName" -> field;
default -> null;
};
}
}

View File

@ -0,0 +1,35 @@
package com.yfd.platform.qgc_env.fb.controller;
import com.yfd.platform.common.DataSourceRequest;
import com.yfd.platform.config.ResponseResult;
import com.yfd.platform.qgc_env.fb.service.FbStationService;
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("/fb/bsmfr")
@Tag(name = "亲鱼选配与培育-亲鱼信息")
@Validated
public class FbBsmfrController {
@Resource
private FbStationService fbStationService;
@PostMapping("/qgc/GetKendoListCust")
@Operation(summary = "(全过程)增殖站二级页面: 亲鱼选配与培育->亲鱼信息")
public ResponseResult getQgcKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
return ResponseResult.successData(fbStationService.getQgcBsmfRKendoListCust(dataSourceRequest));
}
@PostMapping("/fish/GetKendoListCust")
@Operation(summary = "(全过程)增殖站二级页面: 过程图-亲鱼")
public ResponseResult getFishKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
return ResponseResult.successData(fbStationService.getBsmfRFishKendoListCust(dataSourceRequest));
}
}

View File

@ -0,0 +1,30 @@
package com.yfd.platform.qgc_env.fb.controller;
import com.yfd.platform.config.ResponseResult;
import com.yfd.platform.qgc_env.fb.service.FbStationService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/fb/fbrdmr")
@Tag(name = "鱼类增殖站年度鱼类标记数据")
@Validated
public class FbFbrdmrController {
@Resource
private FbStationService fbStationService;
@GetMapping("/getFbRelatedYrByStcd")
@Operation(summary = "根据增殖站编码查询相关业务年份")
public ResponseResult getFbRelatedYrByStcd(@Parameter(description = "增殖站编码")
@RequestParam("stcd") String stcd) {
return ResponseResult.successData(fbStationService.getFbRelatedYrByStcd(stcd));
}
}

View File

@ -0,0 +1,29 @@
package com.yfd.platform.qgc_env.fb.controller;
import com.yfd.platform.common.DataSourceRequest;
import com.yfd.platform.config.ResponseResult;
import com.yfd.platform.qgc_env.fb.service.FbStationService;
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("/fb/msfbrdm")
@Tag(name = "鱼类增殖站增殖情况")
@Validated
public class FbMsfbrdmController {
@Resource
private FbStationService fbStationService;
@PostMapping("/fbFlData/GetKendoListCust")
@Operation(summary = "增殖站增殖情况(app)")
public ResponseResult getFbFlData(@RequestBody DataSourceRequest dataSourceRequest) {
return ResponseResult.successData(fbStationService.getFbFlDataKendoListCust(dataSourceRequest));
}
}

View File

@ -0,0 +1,62 @@
package com.yfd.platform.qgc_env.fb.controller;
import com.yfd.platform.common.DataSourceRequest;
import com.yfd.platform.config.ResponseResult;
import com.yfd.platform.qgc_env.fb.service.FbStationService;
import io.swagger.v3.oas.annotations.Parameter;
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.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/fb/station")
@Tag(name = "鱼类增殖站概况")
@Validated
public class FbStationController {
@Resource
private FbStationService fbStationService;
@PostMapping("/qgcoverview/getOverviewSecond")
@Operation(summary = "全流域增殖站概况二级页面")
public ResponseResult getQgcOverviewSecond(@RequestBody DataSourceRequest dataSourceRequest) {
return ResponseResult.successData(fbStationService.getQgcOverviewSecond(dataSourceRequest));
}
@PostMapping("/overview/getOverviewSecond")
@Operation(summary = "增殖站概况二级页面")
public ResponseResult getOverviewSecond(@RequestBody DataSourceRequest dataSourceRequest) {
return ResponseResult.successData(fbStationService.getOverviewSecond(dataSourceRequest));
}
@PostMapping("/overview/GetKendoListCust")
@Operation(summary = "全流域增殖站概况")
public ResponseResult getOverviewKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
return ResponseResult.successData(fbStationService.getOverviewKendoListCust(dataSourceRequest));
}
@PostMapping("/qgc/getFbStaticsData")
@Operation(summary = "增殖站放流数据统计")
public ResponseResult getQgcFbStaticsData(@RequestBody DataSourceRequest dataSourceRequest) {
return ResponseResult.successData(fbStationService.getQgcFbStaticsData(dataSourceRequest));
}
@GetMapping("/msstbprpt/getStInfoByStcd")
@Operation(summary = "增殖站单站基础信息")
public ResponseResult getStInfoByStcd(@Parameter(description = "站点编码") @RequestParam("stcd") String stcd) {
return ResponseResult.successData(fbStationService.getStInfoByStcd(stcd));
}
@GetMapping("/rpimnr/qgc/year/GetYearRpStatistics")
@Operation(summary = "全过程放流统计总数,根据基地流域分组")
public ResponseResult getYearRpStatistics(@Parameter(description = "年份") @RequestParam("year") String year) {
return ResponseResult.successData(fbStationService.getYearRpStatistics(year));
}
}

View File

@ -0,0 +1,68 @@
package com.yfd.platform.qgc_env.fb.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 FbBsmfRFishHeadColumnVo {
@Schema(description = "字段名")
private String dataIndex;
@Schema(description = "标题")
private String title;
@Schema(description = "是否展示")
private Boolean visible = true;
@Schema(description = "唯一键")
private String key;
@Schema(description = "单位")
private String unit;
@Schema(description = "是否合并")
private boolean merge;
@Schema(description = "数据类型")
private String dataType;
@Schema(description = "数据格式")
private String dataFormat;
@Schema(description = "子节点")
private List<FbBsmfRFishHeadColumnVo> children;
public FbBsmfRFishHeadColumnVo(String title, String dataIndex) {
this.title = title;
this.dataIndex = dataIndex;
this.key = dataIndex;
}
public FbBsmfRFishHeadColumnVo(String title, String dataIndex, String key) {
this.title = title;
this.dataIndex = dataIndex;
this.key = key;
}
public FbBsmfRFishHeadColumnVo(String dataIndex,
String title,
Boolean visible,
String key,
boolean merge,
List<FbBsmfRFishHeadColumnVo> children) {
this.title = title;
this.dataIndex = dataIndex;
this.visible = visible;
this.merge = merge;
this.children = children;
this.key = key;
}
}

View File

@ -0,0 +1,15 @@
package com.yfd.platform.qgc_env.fb.entity.vo;
import lombok.Data;
@Data
public class FbBsmfRFishSummaryVo {
private String tm;
private String ftp;
private String ftpName;
private String value;
}

View File

@ -0,0 +1,22 @@
package com.yfd.platform.qgc_env.fb.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 FbBsmfRFishTableVo {
@Schema(description = "表头")
private List<FbBsmfRFishHeadColumnVo> columns;
@Schema(description = "表格数据")
private Object dataSource;
@Schema(description = "总数")
private Long total;
}

View File

@ -0,0 +1,72 @@
package com.yfd.platform.qgc_env.fb.entity.vo;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
@Data
public class FbBsmfRQgcVo {
private String id;
private String stcd;
private Date tm;
private String ftp;
private String ftpName;
private String bssr;
private String bssrName;
private BigDecimal length;
private BigDecimal weight;
private BigDecimal age;
private Integer sex;
private String sexName;
private String signnum;
private String recorder;
private Long value;
private String fid;
private String recordUser;
private Date recordTime;
private String modifyUser;
private Date modifyTime;
private Integer isDeleted;
private String deleteUser;
private Date deleteTime;
private String platformId;
private String departmentId;
private String taskId;
private String taskStatus;
private String rstcd;
private String ennm;
private String baseId;
private String baseName;
}

View File

@ -0,0 +1,39 @@
package com.yfd.platform.qgc_env.fb.entity.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
@Schema(description = "增殖站增殖情况")
public class FbFlDataVo {
@Schema(description = "增殖站编码")
private String stcd;
@Schema(description = "增殖站名称")
private String stnm;
@Schema(description = "电站编码")
private String rstcd;
@Schema(description = "电站名称")
private String ennm;
@Schema(description = "基地编码")
private String baseId;
@Schema(description = "基地名称")
private String baseName;
@Schema(description = "年份")
private String yr;
@Schema(description = "鱼类名称")
private String ftpName;
@Schema(description = "目标放鱼数量")
private Long targetFcnt;
@Schema(description = "实际放鱼数量")
private Long realFcnt;
}

View File

@ -0,0 +1,24 @@
package com.yfd.platform.qgc_env.fb.entity.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
@Schema(description = "放流鱼种统计")
public class FbFtpStatisticsVo {
@Schema(description = "基地编码")
private String baseId;
@Schema(description = "基地名称")
private String baseName;
@Schema(description = "鱼类编码")
private String ftp;
@Schema(description = "鱼类名称")
private String fishName;
@Schema(description = "数量")
private Integer fcnt;
}

View File

@ -0,0 +1,13 @@
package com.yfd.platform.qgc_env.fb.entity.vo;
import lombok.Data;
@Data
public class FbRelatedYrVo {
private String type;
private String subType;
private String yr;
}

View File

@ -0,0 +1,51 @@
package com.yfd.platform.qgc_env.fb.entity.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
@Schema(description = "鱼类增殖站单站基础信息")
public class FbStBaseInfoVo {
@Schema(description = "站点编码")
private String stcd;
@Schema(description = "站点名称")
private String stnm;
@Schema(description = "站类编码")
private String sttpCode;
@Schema(description = "站类名称")
private String sttpName;
@Schema(description = "站类全路径")
private String sttpFullPath;
@Schema(description = "站类层级")
private Integer sttpTreeLevel;
@Schema(description = "关联站点编码")
private String stCode;
@Schema(description = "关联站点名称")
private String stName;
@Schema(description = "所属基地编码")
private String baseId;
@Schema(description = "所属基地名称")
private String baseName;
@Schema(description = "所属基地流域编码")
private String hbrvcd;
@Schema(description = "所属基地流域名称")
private String hbrvcdName;
@Schema(description = "所属流域编码")
private String rvcd;
@Schema(description = "所属流域名称")
private String rvcdName;
}

View File

@ -0,0 +1,26 @@
package com.yfd.platform.qgc_env.fb.entity.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@Data
@Schema(description = "鱼类增殖站详情返回")
public class FbStInfoResultVo {
@Schema(description = "主信息兼容对象")
private Map<String, Object> msStbprpT = new LinkedHashMap<>();
@Schema(description = "测值列表")
private List<Object> stcdValVoList = new ArrayList<>();
@Schema(description = "关联列表")
private List<Object> relList = new ArrayList<>();
@Schema(description = "站点基础信息")
private FbStBaseInfoVo stBaseInfo;
}

View File

@ -0,0 +1,53 @@
package com.yfd.platform.qgc_env.fb.entity.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
@Data
@Schema(description = "全流域增殖站概况二级页面")
public class FbStationOverviewSecondVo {
@Schema(description = "增殖站编码")
private String stcd;
@Schema(description = "增殖站名称")
private String stnm;
@Schema(description = "服务电站")
private String ennm;
@Schema(description = "增殖站总数")
private Integer count;
@Schema(description = "鱼种类数")
private Integer ftpCount;
@Schema(description = "总投资")
private BigDecimal totalInv;
@Schema(description = "计划放流鱼种类")
private String planFtp;
@Schema(description = "计划放流尾数")
private BigDecimal fcntjh;
@Schema(description = "实际鱼种类数")
private Integer realftpCount;
@Schema(description = "实际鱼种类")
private String realftp;
@Schema(description = "实际放流尾数")
private BigDecimal realfcnt;
@Schema(description = "实际放流尾数字符串")
private String realfcntStr;
@Schema(description = "年份")
private String year;
@Schema(description = "累计放鱼数量")
private Long totalFtpCount;
}

View File

@ -0,0 +1,35 @@
package com.yfd.platform.qgc_env.fb.entity.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.List;
@Data
@Schema(description = "增殖站放流统计结果")
public class FbStationStaticsDataVo {
@Schema(description = "流域编码")
private String hbrvcd;
@Schema(description = "流域名称")
private String hbrvcdName;
@Schema(description = "基地编码")
private String baseId;
@Schema(description = "基地名称")
private String baseName;
@Schema(description = "鱼类种数")
private Integer ftp;
@Schema(description = "放流数量")
private Long fcnt;
@Schema(description = "增殖站数量")
private Integer stcdCnt;
@Schema(description = "增殖站编码列表")
private List<String> stcdList;
}

View File

@ -0,0 +1,36 @@
package com.yfd.platform.qgc_env.fb.entity.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
@Schema(description = "增殖站放流统计明细")
public class FbStationStaticsRawVo {
@Schema(description = "流域编码")
private String hbrvcd;
@Schema(description = "流域名称")
private String hbrvcdName;
@Schema(description = "基地编码")
private String baseId;
@Schema(description = "基地名称")
private String baseName;
@Schema(description = "增殖站编码")
private String stcd;
@Schema(description = "增殖站名称")
private String stnm;
@Schema(description = "鱼类编码")
private String ftp;
@Schema(description = "鱼类名称")
private String ftpName;
@Schema(description = "放流数量")
private Long fcnt;
}

View File

@ -0,0 +1,23 @@
package com.yfd.platform.qgc_env.fb.entity.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.List;
@Data
@Schema(description = "年度全过程放流统计")
public class YearRpStatisticsVo {
@Schema(description = "放流总数")
private Integer fpCount;
@Schema(description = "基地编码")
private String baseId;
@Schema(description = "基地名称")
private String baseName;
@Schema(description = "鱼类分组统计")
private List<FbFtpStatisticsVo> fpFtpStatitcsVos;
}

View File

@ -0,0 +1,37 @@
package com.yfd.platform.qgc_env.fb.service;
import com.yfd.platform.common.DataSourceRequest;
import com.yfd.platform.common.DataSourceResult;
import com.yfd.platform.qgc_env.fb.entity.vo.FbBsmfRQgcVo;
import com.yfd.platform.qgc_env.fb.entity.vo.FbBsmfRFishTableVo;
import com.yfd.platform.qgc_env.fb.entity.vo.FbFlDataVo;
import com.yfd.platform.qgc_env.fb.entity.vo.FbRelatedYrVo;
import com.yfd.platform.qgc_env.fb.entity.vo.FbStInfoResultVo;
import com.yfd.platform.qgc_env.fb.entity.vo.FbStationStaticsDataVo;
import com.yfd.platform.qgc_env.fb.entity.vo.YearRpStatisticsVo;
import com.yfd.platform.qgc_env.fb.entity.vo.FbStationOverviewSecondVo;
import java.util.List;
public interface FbStationService {
List<YearRpStatisticsVo> getYearRpStatistics(String year);
DataSourceResult<FbStationOverviewSecondVo> getOverviewKendoListCust(DataSourceRequest dataSourceRequest);
DataSourceResult<FbFlDataVo> getFbFlDataKendoListCust(DataSourceRequest dataSourceRequest);
DataSourceResult<FbBsmfRQgcVo> getQgcBsmfRKendoListCust(DataSourceRequest dataSourceRequest);
DataSourceResult<FbBsmfRFishTableVo> getBsmfRFishKendoListCust(DataSourceRequest dataSourceRequest);
DataSourceResult<FbRelatedYrVo> getFbRelatedYrByStcd(String stcd);
FbStInfoResultVo getStInfoByStcd(String stcd);
DataSourceResult<FbStationStaticsDataVo> getQgcFbStaticsData(DataSourceRequest dataSourceRequest);
DataSourceResult<FbStationOverviewSecondVo> getOverviewSecond(DataSourceRequest dataSourceRequest);
DataSourceResult<FbStationOverviewSecondVo> getQgcOverviewSecond(DataSourceRequest dataSourceRequest);
}

View File

@ -278,8 +278,9 @@ public class FhHabitatServiceImpl implements FhHabitatService {
}
sql.append(buildSdrvwtsOrderBySql(dataSourceRequest == null ? null : dataSourceRequest.getSort()));
PageInfo pageInfo = loadOptions == null ? null : QgcQueryWrapperUtil.getPageInfo(loadOptions);
Page<?> page = pageInfo != null && pageInfo.getHasPageInfo() ? pageInfo.getPage() : null;
// PageInfo pageInfo = loadOptions == null ? null : QgcQueryWrapperUtil.getPageInfo(loadOptions);
// Page<?> page = pageInfo != null && pageInfo.getHasPageInfo() ? pageInfo.getPage() : null;
Page<?> page = loadOptions == null ? null : QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake());
List<FhSdrvwtsVo> list = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), paramMap, FhSdrvwtsVo.class);
DataSourceResult<FhSdrvwtsVo> result = new DataSourceResult<>();
@ -330,8 +331,7 @@ public class FhHabitatServiceImpl implements FhHabitatService {
}
sql.append(buildSdriverdaysOrderBySql(dataSourceRequest == null ? null : dataSourceRequest.getSort()));
PageInfo pageInfo = loadOptions == null ? null : QgcQueryWrapperUtil.getPageInfo(loadOptions);
Page<?> page = pageInfo != null && pageInfo.getHasPageInfo() ? pageInfo.getPage() : null;
Page<?> page = loadOptions == null ? null : QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake());
List<FhSdriverdayVo> list = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), paramMap, FhSdriverdayVo.class);
DataSourceResult<FhSdriverdayVo> result = new DataSourceResult<>();
@ -1744,8 +1744,7 @@ public class FhHabitatServiceImpl implements FhHabitatService {
sql.append(buildStTbYsOrderBySql(dataSourceRequest == null ? null : dataSourceRequest.getSort()));
DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest();
PageInfo pageInfo = loadOptions == null ? null : QgcQueryWrapperUtil.getPageInfo(loadOptions);
Page<?> page = pageInfo != null && pageInfo.getHasPageInfo() ? pageInfo.getPage() : null;
Page<?> page = loadOptions == null ? null : QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake());
List<StTbYsVo> list = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), paramMap, StTbYsVo.class);
DataSourceResult<StTbYsVo> result = new DataSourceResult<>();

View File

@ -70,6 +70,18 @@ public class FishPassageController {
return ResponseResult.successData(fpBuildService.processKendoList(dataSourceRequest));
}
@PostMapping("/fishDic/GetKendoListCust")
@Operation(summary = "鱼类字典列表")
public ResponseResult getFishDicList(@RequestBody DataSourceRequest dataSourceRequest) {
return ResponseResult.successData(fpBuildService.getFishDicList(dataSourceRequest));
}
@PostMapping("/fishDic/stcd/GetKendoList")
@Operation(summary = "根据过鱼设施站点查询鱼类列表")
public ResponseResult getFishDicListByStcd(@RequestBody DataSourceRequest dataSourceRequest) {
return ResponseResult.successData(fpBuildService.getFishDicListByStcd(dataSourceRequest));
}
@PostMapping("/vmsstbprpt/GetKendoList")
@Operation(summary = "根据条件查询过鱼设施基础列表")
public ResponseResult getVmsstbprptList(@RequestBody DataSourceRequest dataSourceRequest) {

View File

@ -0,0 +1,73 @@
package com.yfd.platform.qgc_env.fp.entity.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.util.Date;
@Data
@Schema(description = "过鱼设施模块鱼类字典信息")
public class FpFishDicVo {
private String id;
private String code;
private String name;
private String nameEn;
private String alias;
private String logo;
private String introduce;
private String inffile;
private String orders;
private String family;
private String genus;
private String species;
private Integer type;
private String typeName;
private String fsz;
private Integer rare;
private String rareName;
private Integer specOrigin;
private String specOriginName;
private Integer ptype;
private String ptypeName;
private String rvcd;
private String rvcdName;
private String habitMigrat;
private String feedingHabit;
private String spawnCharact;
private String food;
private String timeFeed;
private String orignDate;
private String pretemp;
private String flowRate;
private String depth;
private String botmMater;
private String wqtq;
private String wqtqName;
private Integer habitat;
private String habitatName;
private Integer situation;
private String situationName;
private Integer resourceType;
private String resourceTypeName;
private String shapedesc;
private String protectlvl;
private String habitation;
private String fid;
private String description;
private Integer enable;
private String enableName;
private Integer internal;
private String internalName;
private Integer orderIndex;
private String recordUser;
private Date recordTime;
private String modifyUser;
private Date modifyTime;
private Integer isDeleted;
private String deleteUser;
private Date deleteTime;
private String spawnMonth;
private String vlsr;
private Date vlsrTm;
}

View File

@ -3,6 +3,7 @@ package com.yfd.platform.qgc_env.fp.service;
import com.yfd.platform.common.DataSourceRequest;
import com.yfd.platform.common.DataSourceResult;
import com.yfd.platform.qgc_env.fp.entity.vo.FpConstructionSituationVo;
import com.yfd.platform.qgc_env.fp.entity.vo.FpFishDicVo;
import com.yfd.platform.qgc_env.fp.entity.vo.FpVmsstbprptVo;
public interface FpBuildService {
@ -11,6 +12,10 @@ public interface FpBuildService {
DataSourceResult<FpVmsstbprptVo> getVmsstbprptList(DataSourceRequest dataSourceRequest);
DataSourceResult<FpFishDicVo> getFishDicList(DataSourceRequest dataSourceRequest);
DataSourceResult<FpFishDicVo> getFishDicListByStcd(DataSourceRequest dataSourceRequest);
DataSourceResult<FpVmsstbprptVo> getFpqMsstbprptList(DataSourceRequest dataSourceRequest);
FpVmsstbprptVo getStInfoByStcd(String stcd);

View File

@ -1,21 +1,29 @@
package com.yfd.platform.qgc_env.fp.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yfd.platform.common.DataSourceLoadOptionsBase;
import com.yfd.platform.common.DataSourceRequest;
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.common.PageInfo;
import com.yfd.platform.common.exception.BizException;
import com.yfd.platform.qgc_env.fp.entity.vo.FpConstructionSituationVo;
import com.yfd.platform.qgc_env.fp.entity.vo.FpFishDicVo;
import com.yfd.platform.qgc_env.fp.entity.vo.FpVmsstbprptVo;
import com.yfd.platform.qgc_env.fp.service.FpBuildService;
import com.yfd.platform.utils.QgcQueryWrapperUtil;
import jakarta.annotation.Resource;
import org.springframework.util.CollectionUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@ -28,8 +36,7 @@ public class FpBuildServiceImpl implements FpBuildService {
@Override
public DataSourceResult<FpConstructionSituationVo> processKendoList(DataSourceRequest dataSourceRequest) {
DataSourceLoadOptionsBase loadOptions = dataSourceRequest.toDevRequest();
PageInfo pageInfo = QgcQueryWrapperUtil.getPageInfo(loadOptions);
Page<?> page = pageInfo.getHasPageInfo() ? pageInfo.getPage() : null;
Page<?> page = loadOptions == null ? null : QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake());
String sql = "SELECT t.STTP AS sttpCode, " +
" SUM(CASE WHEN t.DTIN = 1 THEN 1 ELSE 0 END) AS bonusing, " +
@ -61,6 +68,98 @@ public class FpBuildServiceImpl implements FpBuildService {
return queryVmsstbprptList(dataSourceRequest, null);
}
@Override
public DataSourceResult<FpFishDicVo> getFishDicList(DataSourceRequest dataSourceRequest) {
DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest();
Map<String, Object> paramMap = new HashMap<>();
String filterSql = buildFishDicFilterCondition(
dataSourceRequest == null ? null : dataSourceRequest.getFilter(),
paramMap,
new int[]{0}
);
if (CollUtil.isNotEmpty(dataSourceRequest == null ? null : dataSourceRequest.getGroup())) {
StringBuilder groupedBaseSql = new StringBuilder("SELECT * FROM (")
.append(buildFishDicBaseSql())
.append(") t WHERE 1 = 1 ");
if (StrUtil.isNotBlank(filterSql)) {
groupedBaseSql.append(" AND ").append(filterSql).append(" ");
}
GroupingInfo[] groupInfos = loadOptions == null ? null : loadOptions.getGroup();
String groupedSql = buildFishDicGroupSql(groupedBaseSql.toString(), groupInfos);
List<Map<String, Object>> rows = microservicDynamicSQLMapper.pageAllList(null, groupedSql, paramMap);
DataSourceResult result = new DataSourceResult();
if (Boolean.TRUE.equals(dataSourceRequest.getGroupResultFlat())) {
result.setData(new GroupHelper().faltGroup(rows, Arrays.asList(groupInfos)));
} else {
result.setData(new GroupHelper().group(rows, Arrays.asList(groupInfos)));
}
result.setTotal((long) rows.size());
result.setAggregates(new HashMap<>());
return result;
}
StringBuilder sql = new StringBuilder("SELECT ")
.append(buildFishDicDetailSelectSql(dataSourceRequest == null ? null : dataSourceRequest.getSelect()))
.append(" FROM (")
.append(buildFishDicBaseSql())
.append(") t WHERE 1 = 1 ");
if (StrUtil.isNotBlank(filterSql)) {
sql.append(" AND ").append(filterSql).append(" ");
}
sql.append(buildFishDicOrderBySql(dataSourceRequest == null ? null : dataSourceRequest.getSort()));
Page<?> page = loadOptions == null ? null : QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake());
List<FpFishDicVo> list = microservicDynamicSQLMapper.pageAllListWithResultType(
page, sql.toString(), paramMap, FpFishDicVo.class
);
DataSourceResult<FpFishDicVo> result = new DataSourceResult<>();
result.setData(list);
result.setTotal(page != null ? page.getTotal() : list.size());
result.setAggregates(new HashMap<>());
return result;
}
@Override
public DataSourceResult<FpFishDicVo> getFishDicListByStcd(DataSourceRequest dataSourceRequest) {
DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest();
String stcd = loadOptions == null ? null : QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "stcd");
if (StrUtil.isBlank(stcd)) {
throw new BizException("过鱼设施站点编码(stcd)不能为空.");
}
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("stcd", StrUtil.trim(stcd));
String sql = "SELECT DISTINCT " +
" fish.ID AS id, " +
" fish.NAME AS name " +
"FROM SD_FPSS_B_H fp " +
"INNER JOIN SD_ENGINFO_B_H eng ON eng.STCD = fp.RSTCD " +
" AND NVL(eng.IS_DELETED, 0) = 0 " +
"INNER JOIN SD_FISHDICTORY_RLTN_B rel ON rel.RVCD = eng.HBRVCD " +
" AND NVL(rel.IS_DELETED, 0) = 0 " +
"INNER JOIN SD_FISHDICTORY_B fish ON fish.ID = NVL(rel.ZY_FISH_ID, rel.FISH_ID) " +
" AND NVL(fish.IS_DELETED, 0) = 0 " +
" AND NVL(fish.ENABLE, 1) = 1 " +
"WHERE fp.STCD = #{map.stcd} " +
"ORDER BY fish.NAME";
List<FpFishDicVo> list = microservicDynamicSQLMapper.getAllListWithResultType(
sql,
paramMap,
FpFishDicVo.class
);
DataSourceResult<FpFishDicVo> result = new DataSourceResult<>();
result.setData(list);
result.setTotal(list == null ? 0L : list.size());
result.setAggregates(new HashMap<>());
return result;
}
@Override
public DataSourceResult<FpVmsstbprptVo> getFpqMsstbprptList(DataSourceRequest dataSourceRequest) {
return queryVmsstbprptList(dataSourceRequest, "FPQ");
@ -113,6 +212,77 @@ public class FpBuildServiceImpl implements FpBuildService {
return list.getFirst();
}
private String buildFishDicBaseSql() {
return "SELECT " +
"src.ID AS id, " +
"src.CODE AS code, " +
"src.NAME AS name, " +
"src.NAME_EN AS nameEn, " +
"src.ALIAS AS alias, " +
"src.LOGO AS logo, " +
"src.INTRODUCE AS introduce, " +
"src.INFFILE AS inffile, " +
"src.ORDERS AS orders, " +
"src.FAMILY AS family, " +
"src.GENUS AS genus, " +
"src.SPECIES AS species, " +
"src.TYPE AS type, " +
"CASE WHEN src.TYPE = 1 THEN '淡水' WHEN src.TYPE = 2 THEN '海水' ELSE NULL END AS typeName, " +
"src.FSZ AS fsz, " +
"src.RARE AS rare, " +
"CASE WHEN src.RARE = 1 THEN '是' WHEN src.RARE = 0 THEN '否' ELSE NULL END AS rareName, " +
"src.SPEC_ORIGIN AS specOrigin, " +
"CASE WHEN src.SPEC_ORIGIN = 1 THEN '本土物种' WHEN src.SPEC_ORIGIN = 2 THEN '外来物种' ELSE NULL END AS specOriginName, " +
"src.PTYPE AS ptype, " +
"CASE src.PTYPE " +
"WHEN 1 THEN '濒危' WHEN 2 THEN '极危' WHEN 3 THEN '近危' WHEN 4 THEN '易危' " +
"WHEN 5 THEN '重点保护' WHEN 6 THEN '无危' WHEN 7 THEN '国家二级' WHEN 8 THEN '市二级保护' ELSE NULL END AS ptypeName, " +
"src.RVCD AS rvcd, " +
"rv.RVNM AS rvcdName, " +
"src.HABIT_MIGRAT AS habitMigrat, " +
"src.FEEDING_HABIT AS feedingHabit, " +
"src.SPAWN_CHARACT AS spawnCharact, " +
"src.FOOD AS food, " +
"src.TIME_FEED AS timeFeed, " +
"src.ORIGN_DATE AS orignDate, " +
"src.PRETEMP AS pretemp, " +
"src.FLOW_RATE AS flowRate, " +
"src.DEPTH AS depth, " +
"src.BOTM_MATER AS botmMater, " +
"src.WQTQ AS wqtq, " +
"CASE src.WQTQ " +
"WHEN '1' THEN 'Ⅰ类' WHEN '2' THEN 'Ⅱ类' WHEN '3' THEN 'Ⅲ类' WHEN '4' THEN 'Ⅳ类' WHEN '5' THEN 'Ⅴ类' WHEN '6' THEN '劣V类' ELSE NULL END AS wqtqName, " +
"src.HABITAT AS habitat, " +
"CASE src.HABITAT WHEN 1 THEN '流水生境' WHEN 2 THEN '静缓流生境' WHEN 3 THEN '洞穴生境' ELSE NULL END AS habitatName, " +
"src.SITUATION AS situation, " +
"CASE src.SITUATION WHEN 1 THEN '优势种' WHEN 2 THEN '常见种' WHEN 3 THEN '少见种' WHEN 4 THEN '记录种' ELSE NULL END AS situationName, " +
"src.RESOURCE_TYPE AS resourceType, " +
"CASE src.RESOURCE_TYPE WHEN 1 THEN '保护鱼类' WHEN 2 THEN '特有鱼类' WHEN 3 THEN '重要经济鱼类' WHEN 4 THEN '濒危状况' ELSE NULL END AS resourceTypeName, " +
"src.SHAPEDESC AS shapedesc, " +
"src.PROTECTLVL AS protectlvl, " +
"src.HABITATION AS habitation, " +
"src.FID AS fid, " +
"src.DESCRIPTION AS description, " +
"src.ENABLE AS enable, " +
"CASE WHEN src.ENABLE = 1 THEN '启用' WHEN src.ENABLE = 0 THEN '禁用' ELSE NULL END AS enableName, " +
"src.INTERNAL AS internal, " +
"CASE WHEN src.INTERNAL = 1 THEN '是' WHEN src.INTERNAL = 0 THEN '否' ELSE NULL END AS internalName, " +
"src.ORDER_INDEX AS orderIndex, " +
"src.RECORD_USER AS recordUser, " +
"src.RECORD_TIME AS recordTime, " +
"src.MODIFY_USER AS modifyUser, " +
"src.MODIFY_TIME AS modifyTime, " +
"src.IS_DELETED AS isDeleted, " +
"src.DELETE_USER AS deleteUser, " +
"src.DELETE_TIME AS deleteTime, " +
"src.SPAWN_MONTH AS spawnMonth, " +
"src.VLSR AS vlsr, " +
"src.VLSR_TM AS vlsrTm " +
"FROM SD_FISHDICTORY_B src " +
"LEFT JOIN SD_RVCD_DIC rv ON rv.RVCD = src.RVCD " +
"WHERE NVL(src.IS_DELETED, 0) = 0 ";
}
private String buildVmsstbprptBaseSql() {
StringBuilder sql = new StringBuilder();
sql.append("SELECT ")
@ -319,6 +489,87 @@ public class FpBuildServiceImpl implements FpBuildService {
return selectMap;
}
private String buildFishDicDetailSelectSql(List<String> selectFields) {
LinkedHashMap<String, String> columnMap = buildFishDicSelectColumnMap();
if (CollUtil.isEmpty(selectFields)) {
return String.join(", ", columnMap.values());
}
List<String> selectColumns = new ArrayList<>();
for (String field : selectFields) {
String column = columnMap.get(field);
if (StrUtil.isNotBlank(column)) {
selectColumns.add(column);
}
}
return selectColumns.isEmpty() ? String.join(", ", columnMap.values()) : String.join(", ", selectColumns);
}
private LinkedHashMap<String, String> buildFishDicSelectColumnMap() {
LinkedHashMap<String, String> columnMap = new LinkedHashMap<>();
columnMap.put("id", "t.id AS id");
columnMap.put("code", "t.code AS code");
columnMap.put("name", "t.name AS name");
columnMap.put("nameEn", "t.nameEn AS nameEn");
columnMap.put("alias", "t.alias AS alias");
columnMap.put("logo", "t.logo AS logo");
columnMap.put("introduce", "t.introduce AS introduce");
columnMap.put("inffile", "t.inffile AS inffile");
columnMap.put("orders", "t.orders AS orders");
columnMap.put("family", "t.family AS family");
columnMap.put("genus", "t.genus AS genus");
columnMap.put("species", "t.species AS species");
columnMap.put("type", "t.type AS type");
columnMap.put("typeName", "t.typeName AS typeName");
columnMap.put("fsz", "t.fsz AS fsz");
columnMap.put("rare", "t.rare AS rare");
columnMap.put("rareName", "t.rareName AS rareName");
columnMap.put("specOrigin", "t.specOrigin AS specOrigin");
columnMap.put("specOriginName", "t.specOriginName AS specOriginName");
columnMap.put("ptype", "t.ptype AS ptype");
columnMap.put("ptypeName", "t.ptypeName AS ptypeName");
columnMap.put("rvcd", "t.rvcd AS rvcd");
columnMap.put("rvcdName", "t.rvcdName AS rvcdName");
columnMap.put("habitMigrat", "t.habitMigrat AS habitMigrat");
columnMap.put("feedingHabit", "t.feedingHabit AS feedingHabit");
columnMap.put("spawnCharact", "t.spawnCharact AS spawnCharact");
columnMap.put("food", "t.food AS food");
columnMap.put("timeFeed", "t.timeFeed AS timeFeed");
columnMap.put("orignDate", "t.orignDate AS orignDate");
columnMap.put("pretemp", "t.pretemp AS pretemp");
columnMap.put("flowRate", "t.flowRate AS flowRate");
columnMap.put("depth", "t.depth AS depth");
columnMap.put("botmMater", "t.botmMater AS botmMater");
columnMap.put("wqtq", "t.wqtq AS wqtq");
columnMap.put("wqtqName", "t.wqtqName AS wqtqName");
columnMap.put("habitat", "t.habitat AS habitat");
columnMap.put("habitatName", "t.habitatName AS habitatName");
columnMap.put("situation", "t.situation AS situation");
columnMap.put("situationName", "t.situationName AS situationName");
columnMap.put("resourceType", "t.resourceType AS resourceType");
columnMap.put("resourceTypeName", "t.resourceTypeName AS resourceTypeName");
columnMap.put("shapedesc", "t.shapedesc AS shapedesc");
columnMap.put("protectlvl", "t.protectlvl AS protectlvl");
columnMap.put("habitation", "t.habitation AS habitation");
columnMap.put("fid", "t.fid AS fid");
columnMap.put("description", "t.description AS description");
columnMap.put("enable", "t.enable AS enable");
columnMap.put("enableName", "t.enableName AS enableName");
columnMap.put("internal", "t.internal AS internal");
columnMap.put("internalName", "t.internalName AS internalName");
columnMap.put("orderIndex", "t.orderIndex AS orderIndex");
columnMap.put("recordUser", "t.recordUser AS recordUser");
columnMap.put("recordTime", "t.recordTime AS recordTime");
columnMap.put("modifyUser", "t.modifyUser AS modifyUser");
columnMap.put("modifyTime", "t.modifyTime AS modifyTime");
columnMap.put("isDeleted", "t.isDeleted AS isDeleted");
columnMap.put("deleteUser", "t.deleteUser AS deleteUser");
columnMap.put("deleteTime", "t.deleteTime AS deleteTime");
columnMap.put("spawnMonth", "t.spawnMonth AS spawnMonth");
columnMap.put("vlsr", "t.vlsr AS vlsr");
columnMap.put("vlsrTm", "t.vlsrTm AS vlsrTm");
return columnMap;
}
private String buildVmsstbprptFilterCondition(DataSourceRequest.FilterDescriptor filter,
Map<String, Object> paramMap,
int[] indexHolder) {
@ -345,6 +596,32 @@ public class FpBuildServiceImpl implements FpBuildService {
return String.join(logic, conditions);
}
private String buildFishDicFilterCondition(DataSourceRequest.FilterDescriptor filter,
Map<String, Object> paramMap,
int[] indexHolder) {
if (filter == null) {
return "";
}
if (filter.getField() != null && !filter.getField().isBlank()) {
return buildFishDicLeafCondition(filter, paramMap, indexHolder);
}
if (CollectionUtils.isEmpty(filter.getFilters())) {
return "";
}
List<String> conditions = new ArrayList<>();
for (DataSourceRequest.FilterDescriptor child : filter.getFilters()) {
String childSql = buildFishDicFilterCondition(child, paramMap, indexHolder);
if (!childSql.isBlank()) {
conditions.add("(" + childSql + ")");
}
}
if (conditions.isEmpty()) {
return "";
}
String logic = "or".equalsIgnoreCase(filter.getLogic()) ? " OR " : " AND ";
return String.join(logic, conditions);
}
private String buildVmsstbprptLeafCondition(DataSourceRequest.FilterDescriptor filter,
Map<String, Object> paramMap,
int[] indexHolder) {
@ -410,6 +687,96 @@ public class FpBuildServiceImpl implements FpBuildService {
}
}
private String buildFishDicLeafCondition(DataSourceRequest.FilterDescriptor filter,
Map<String, Object> paramMap,
int[] indexHolder) {
String column = mapFishDicColumn(filter.getField());
if (column == null || column.isBlank()) {
return "";
}
String operator = filter.getOperator() == null ? "eq" : filter.getOperator().toLowerCase();
Object value = filter.getValue();
if (isFishDicDateField(filter.getField())) {
return buildDateCondition(column, operator, value, paramMap, indexHolder, "fpFishDicP");
}
if ("isnull".equals(operator)) {
return column + " IS NULL";
}
if ("isnotnull".equals(operator)) {
return column + " IS NOT NULL";
}
if ("in".equals(operator)) {
List<Object> values = normalizeValues(value);
if (values.isEmpty()) {
return "";
}
List<String> placeholders = new ArrayList<>();
for (Object item : values) {
String paramKey = "fpFishDicP" + indexHolder[0]++;
paramMap.put(paramKey, item);
placeholders.add("#{map." + paramKey + "}");
}
return column + " IN (" + String.join(", ", placeholders) + ")";
}
if (value == null) {
return "";
}
String paramKey = "fpFishDicP" + indexHolder[0]++;
switch (operator) {
case "eq":
paramMap.put(paramKey, value);
return column + " = #{map." + paramKey + "}";
case "neq":
paramMap.put(paramKey, value);
return column + " <> #{map." + paramKey + "}";
case "contains":
paramMap.put(paramKey, "%" + value + "%");
return column + " LIKE #{map." + paramKey + "}";
case "startswith":
paramMap.put(paramKey, value + "%");
return column + " LIKE #{map." + paramKey + "}";
case "endswith":
paramMap.put(paramKey, "%" + value);
return column + " LIKE #{map." + paramKey + "}";
case "gt":
paramMap.put(paramKey, value);
return column + " > #{map." + paramKey + "}";
case "gte":
paramMap.put(paramKey, value);
return column + " >= #{map." + paramKey + "}";
case "lt":
paramMap.put(paramKey, value);
return column + " < #{map." + paramKey + "}";
case "lte":
paramMap.put(paramKey, value);
return column + " <= #{map." + paramKey + "}";
default:
return "";
}
}
private String buildDateCondition(String column,
String operator,
Object value,
Map<String, Object> paramMap,
int[] indexHolder,
String prefix) {
if (value == null) {
return "";
}
String paramKey = prefix + indexHolder[0]++;
paramMap.put(paramKey, value);
return switch (operator) {
case "eq" -> "TRUNC(" + column + ") = TRUNC(#{map." + paramKey + "})";
case "neq" -> "TRUNC(" + column + ") <> TRUNC(#{map." + paramKey + "})";
case "gt" -> column + " > #{map." + paramKey + "}";
case "gte" -> column + " >= #{map." + paramKey + "}";
case "lt" -> column + " < #{map." + paramKey + "}";
case "lte" -> column + " <= #{map." + paramKey + "}";
default -> "";
};
}
private List<Object> normalizeValues(Object value) {
List<Object> values = new ArrayList<>();
if (value instanceof List<?> list) {
@ -531,6 +898,76 @@ public class FpBuildServiceImpl implements FpBuildService {
return columnMap.get(field);
}
private String mapFishDicColumn(String field) {
if (StrUtil.isBlank(field)) {
return null;
}
return switch (field) {
case "id" -> "t.id";
case "code" -> "t.code";
case "name" -> "t.name";
case "nameEn" -> "t.nameEn";
case "alias" -> "t.alias";
case "logo" -> "t.logo";
case "introduce" -> "t.introduce";
case "inffile" -> "t.inffile";
case "orders" -> "t.orders";
case "family" -> "t.family";
case "genus" -> "t.genus";
case "species" -> "t.species";
case "type" -> "t.type";
case "typeName" -> "t.typeName";
case "fsz" -> "t.fsz";
case "rare" -> "t.rare";
case "rareName" -> "t.rareName";
case "specOrigin" -> "t.specOrigin";
case "specOriginName" -> "t.specOriginName";
case "ptype" -> "t.ptype";
case "ptypeName" -> "t.ptypeName";
case "rvcd" -> "t.rvcd";
case "rvcdName" -> "t.rvcdName";
case "habitMigrat" -> "t.habitMigrat";
case "feedingHabit" -> "t.feedingHabit";
case "spawnCharact" -> "t.spawnCharact";
case "food" -> "t.food";
case "timeFeed" -> "t.timeFeed";
case "orignDate" -> "t.orignDate";
case "pretemp" -> "t.pretemp";
case "flowRate" -> "t.flowRate";
case "depth" -> "t.depth";
case "botmMater" -> "t.botmMater";
case "wqtq" -> "t.wqtq";
case "wqtqName" -> "t.wqtqName";
case "habitat" -> "t.habitat";
case "habitatName" -> "t.habitatName";
case "situation" -> "t.situation";
case "situationName" -> "t.situationName";
case "resourceType" -> "t.resourceType";
case "resourceTypeName" -> "t.resourceTypeName";
case "shapedesc" -> "t.shapedesc";
case "protectlvl" -> "t.protectlvl";
case "habitation" -> "t.habitation";
case "fid" -> "t.fid";
case "description" -> "t.description";
case "enable" -> "t.enable";
case "enableName" -> "t.enableName";
case "internal" -> "t.internal";
case "internalName" -> "t.internalName";
case "orderIndex" -> "t.orderIndex";
case "recordUser" -> "t.recordUser";
case "recordTime" -> "t.recordTime";
case "modifyUser" -> "t.modifyUser";
case "modifyTime" -> "t.modifyTime";
case "isDeleted" -> "t.isDeleted";
case "deleteUser" -> "t.deleteUser";
case "deleteTime" -> "t.deleteTime";
case "spawnMonth" -> "t.spawnMonth";
case "vlsr" -> "t.vlsr";
case "vlsrTm" -> "t.vlsrTm";
default -> null;
};
}
private String buildVmsstbprptOrderBySql(List<DataSourceRequest.SortDescriptor> sorts) {
if (sorts == null || sorts.isEmpty()) {
return " ORDER BY t.baseStepSort ASC NULLS LAST, t.rvcdStepSort ASC NULLS LAST, " +
@ -555,6 +992,64 @@ public class FpBuildServiceImpl implements FpBuildService {
return " ORDER BY " + String.join(", ", orderItems);
}
private String buildFishDicOrderBySql(List<DataSourceRequest.SortDescriptor> sorts) {
List<String> orderItems = new ArrayList<>();
if (CollUtil.isNotEmpty(sorts)) {
for (DataSourceRequest.SortDescriptor sort : sorts) {
if (sort == null || sort.getField() == null || sort.getField().isBlank()) {
continue;
}
String column = mapFishDicColumn(sort.getField());
if (StrUtil.isBlank(column)) {
continue;
}
String direction = "desc".equalsIgnoreCase(sort.getDir()) || "des".equalsIgnoreCase(sort.getDir())
? "DESC" : "ASC";
orderItems.add(column + " " + direction + " NULLS LAST");
}
}
if (orderItems.isEmpty()) {
return " ORDER BY t.orderIndex ASC NULLS LAST, t.name ASC";
}
return " ORDER BY " + String.join(", ", orderItems);
}
private String buildFishDicGroupSql(String detailSql, GroupingInfo[] groupInfos) {
if (groupInfos == null || groupInfos.length == 0) {
return detailSql;
}
List<String> groupFields = new ArrayList<>();
List<String> selectItems = new ArrayList<>();
List<String> orderItems = new ArrayList<>();
for (GroupingInfo item : groupInfos) {
if (item == null || StrUtil.isBlank(item.getSelector())) {
continue;
}
String selector = item.getSelector();
String column = mapFishDicColumn(selector);
if (StrUtil.isBlank(column)) {
continue;
}
groupFields.add(column);
selectItems.add(column + " AS " + selector);
selectItems.add("COUNT(*) AS count_" + selector);
orderItems.add(column + (item.getDesc() ? " DESC" : " ASC"));
}
if (groupFields.isEmpty()) {
return "SELECT * FROM (" + detailSql + ") t WHERE 1 = 0";
}
return "SELECT " + String.join(", ", selectItems) +
" FROM (" + detailSql + ") t GROUP BY " + String.join(", ", groupFields) +
" ORDER BY " + String.join(", ", orderItems);
}
private boolean isFishDicDateField(String field) {
return "recordTime".equals(field)
|| "modifyTime".equals(field)
|| "deleteTime".equals(field)
|| "vlsrTm".equals(field);
}
private String mapVmsstbprptOuterColumn(String field) {
if (field == null || field.isBlank()) {
return null;

View File

@ -43,4 +43,6 @@ public class FprZyFishDicVo {
private String logo;
private String inffile;
private String spawnMonth;
private String orders;
private String vlsr;
}

View File

@ -201,7 +201,20 @@ public class FprMonitorServiceImpl implements FprMonitorService {
if (StrUtil.isNotBlank(filterSql)) {
sql.append(" AND ").append(filterSql).append(" ");
}
// 增加排序
if(dataSourceRequest.getSort() !=null && !dataSourceRequest.getSort().isEmpty()){
List<DataSourceRequest.SortDescriptor> sortDescriptors = dataSourceRequest.getSort();
StringBuilder orderSql = new StringBuilder();
orderSql.append(" order by ");
for (DataSourceRequest.SortDescriptor sort:sortDescriptors){
orderSql.append(sort.getField()).append(" ").append(sort.getDir()).append(",");
}
sql.append(orderSql, 0, orderSql.length()-1);
// String[] beans = SpringContextHolder.getApplicationContext().getBeanDefinitionNames();
sql.append(" nulls last ");
}else{
sql.append(" order by rvcd nulls last ");
}
List<FprZyFishDicVo> list = microservicDynamicSQLMapper.getAllListWithResultType(
sql.toString(),
paramMap,
@ -535,6 +548,8 @@ public class FprMonitorServiceImpl implements FprMonitorService {
"src.DESCRIPTION AS description, " +
"src.LOGO AS logo, " +
"src.INFFILE AS inffile, " +
"src.ORDERS, \n" +
"src.VLSR, \n"+
"src.SPAWN_MONTH AS spawnMonth " +
"FROM SD_FISHDICTORY_B src " +
"LEFT JOIN SD_FISHDICTORY_RLTN_B rel ON src.ID = rel.ZY_FISH_ID " +
@ -1185,8 +1200,14 @@ public class FprMonitorServiceImpl implements FprMonitorService {
if (CollUtil.isEmpty(resultList) || loadOptions == null || loadOptions.getTake() == null || loadOptions.getTake() <= 0) {
return resultList;
}
int start = Math.max(loadOptions.getSkip() == null ? 0 : loadOptions.getSkip(), 0);
int end = Math.min(start + loadOptions.getTake(), resultList.size());
int page = loadOptions.getSkip() == null ? 1 : loadOptions.getSkip(); // 页码从1开始缺省为1
// 如果页码 0强制设为1避免负值
if (page < 1) {
page = 1;
}
int size = loadOptions.getTake();
int start = (page - 1) * size;
int end = Math.min(start + size, resultList.size());
if (start >= resultList.size()) {
return new ArrayList<>();
}

View File

@ -39,8 +39,7 @@ public class VpConstructionServiceImpl implements VpConstructionService {
@Override
public DataSourceResult processKendoList(DataSourceRequest dataSourceRequest) {
DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest();
PageInfo pageInfo = loadOptions == null ? new PageInfo() : QgcQueryWrapperUtil.getPageInfo(loadOptions);
Page<?> page = pageInfo.getHasPageInfo() ? pageInfo.getPage() : null;
Page<?> page = loadOptions == null ? null : QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake());
String isBotanicalGarden = loadOptions == null ? null
: QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "isBotanicalGarden");
@ -90,8 +89,7 @@ public class VpConstructionServiceImpl implements VpConstructionService {
@Override
public DataSourceResult processVmsstbprptList(DataSourceRequest dataSourceRequest) {
DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest();
PageInfo pageInfo = loadOptions == null ? new PageInfo() : QgcQueryWrapperUtil.getPageInfo(loadOptions);
Page<?> page = pageInfo.getHasPageInfo() ? pageInfo.getPage() : null;
Page<?> page = loadOptions == null ? null : QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake());
Map<String, Object> paramMap = new HashMap<>();
StringBuilder sql = new StringBuilder(buildVmsstbprptBaseSql());
@ -177,9 +175,7 @@ public class VpConstructionServiceImpl implements VpConstructionService {
@Override
public DataSourceResult<VpWvaRunVo> processWvaKendoList(DataSourceRequest dataSourceRequest) {
DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest();
PageInfo pageInfo = loadOptions == null ? new PageInfo() : QgcQueryWrapperUtil.getPageInfo(loadOptions);
Page<?> page = pageInfo.getHasPageInfo() ? pageInfo.getPage() : null;
Page<?> page = loadOptions == null ? null : QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake());
Map<String, Object> paramMap = new HashMap<>();
StringBuilder sql = new StringBuilder(buildWvaBaseSql());
String filterSql = buildWvaFilterCondition(dataSourceRequest == null ? null : dataSourceRequest.getFilter(),
@ -218,8 +214,7 @@ public class VpConstructionServiceImpl implements VpConstructionService {
@Override
public DataSourceResult<VpVacVo> processVacKendoList(DataSourceRequest dataSourceRequest) {
DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest();
PageInfo pageInfo = loadOptions == null ? new PageInfo() : QgcQueryWrapperUtil.getPageInfo(loadOptions);
Page<?> page = pageInfo.getHasPageInfo() ? pageInfo.getPage() : null;
Page<?> page = loadOptions == null ? null : QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake());
String isZoo = loadOptions == null ? null : QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "isZoo");
Map<String, Object> paramMap = new HashMap<>();
@ -260,9 +255,7 @@ public class VpConstructionServiceImpl implements VpConstructionService {
@Override
public DataSourceResult<VpVarVo> processVarKendoList(DataSourceRequest dataSourceRequest) {
DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest();
PageInfo pageInfo = loadOptions == null ? new PageInfo() : QgcQueryWrapperUtil.getPageInfo(loadOptions);
Page<?> page = pageInfo.getHasPageInfo() ? pageInfo.getPage() : null;
Page<?> page = loadOptions == null ? null : QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake());
Map<String, Object> paramMap = new HashMap<>();
StringBuilder sql = new StringBuilder(buildVarBaseSql());
String filterSql = buildVarFilterCondition(dataSourceRequest == null ? null : dataSourceRequest.getFilter(),

View File

@ -3501,8 +3501,7 @@ public class EnvWqDataServiceImpl implements EnvWqDataService {
sql.append(buildStTbYsOrderBySql(dataSourceRequest == null ? null : dataSourceRequest.getSort()));
DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest();
PageInfo pageInfo = loadOptions == null ? null : QgcQueryWrapperUtil.getPageInfo(loadOptions);
Page<?> page = pageInfo != null && pageInfo.getHasPageInfo() ? pageInfo.getPage() : null;
Page<?> page = loadOptions == null ? null : QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake());
List<StTbYsVo> list = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), paramMap, StTbYsVo.class);
DataSourceResult<StTbYsVo> result = new DataSourceResult<>();

View File

@ -85,4 +85,10 @@ public class SdWtBaseInfoVO implements Serializable {
@Schema(description = "基地流域编码")
private String hbrvcd;
@Schema(description = "经度")
private Double lgtd;
@Schema(description = "纬度")
private Double lttd;
}

View File

@ -667,6 +667,8 @@ public class SdWtMonitorServiceImpl implements SdWtMonitorService {
.append("eng.STCD AS rstcd, ")
.append("NULL AS stCode, ")
.append("NULL AS stName, ")
.append("eng.LGTD AS lgtd, ")
.append("eng.LTTD AS lttd, ")
.append("eng.DVTP AS dvtp, ")
.append("hb.ORDER_INDEX AS baseStepSort, ")
.append("eng.HBRVCD AS hbrvcd, ")
@ -700,8 +702,10 @@ public class SdWtMonitorServiceImpl implements SdWtMonitorService {
.append("eng.DVTP AS dvtp, ")
.append("CASE WHEN NVL(dw.DTIN, 0) = 1 THEN '已接入' ELSE '未接入' END AS dtinName, ")
.append("CASE ")
.append("WHEN dw.BLDSTT_CODE IN ('1', '10', '11') THEN '已建' ")
.append("WHEN dw.BLDSTT_CODE IN ('2', '7', '8') THEN '在建' ")
.append("WHEN dw.BLDSTT_CODE = 2 THEN '已建' ")
.append("WHEN dw.BLDSTT_CODE = 1 THEN '在建' ")
// .append("WHEN dw.BLDSTT_CODE IN ('1', '10', '11') THEN '已建' ")
// .append("WHEN dw.BLDSTT_CODE IN ('2', '7', '8') THEN '在建' ")
.append("ELSE '未建/规划' END AS bldsttCcodeName, ")
.append("dw.BLDSTT_CODE AS bldsttCcode, ")
.append("eng.HBRVCD AS hbrvcd ")
@ -733,8 +737,10 @@ public class SdWtMonitorServiceImpl implements SdWtMonitorService {
.append("wt.STCD AS stcd, ")
.append("wt.RSTCD AS rstcd, ")
.append("CASE ")
.append("WHEN wt.BLDSTT_CODE IN ('1', '10', '11') THEN '已建' ")
.append("WHEN wt.BLDSTT_CODE IN ('2', '7', '8') THEN '在建' ")
.append("WHEN wt.BLDSTT_CODE = 2 THEN '已建' ")
.append("WHEN wt.BLDSTT_CODE = 1 THEN '在建' ")
// .append("WHEN wt.BLDSTT_CODE IN ('1', '10', '11') THEN '已建' ")
// .append("WHEN wt.BLDSTT_CODE IN ('2', '7', '8') THEN '在建' ")
.append("ELSE '未建/规划' END AS bldsttCcodeName, ")
.append("wt.BLDSTT_CODE AS bldsttCcode, ")
.append("NULL AS stCode, ")
@ -1929,7 +1935,7 @@ public class SdWtMonitorServiceImpl implements SdWtMonitorService {
if ("baseStepSort".equals(field)) {
orderColumns.add("NVL(baseStepSort, 999999) " + dir + " NULLS LAST");
} else if ("rvcdStepSort".equals(field)) {
orderColumns.add("NVL(rvcdStepSort, 999999) " + dir + " NULLS LAST");
// orderColumns.add("NVL(rvcdStepSort, 999999) " + dir + " NULLS LAST");
} else if ("rstcdStepSort".equals(field)) {
orderColumns.add("NVL(rstcdStepSort, 999999) " + dir + " NULLS LAST");
} else if ("siteStepSort".equals(field)) {

View File

@ -3,6 +3,7 @@ package com.yfd.platform.system.controller;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.yfd.platform.config.ResponseResult;
import com.yfd.platform.system.domain.SysConfig;
import com.yfd.platform.system.service.ISysConfigService;
@ -38,16 +39,22 @@ public class SysConfigController {
@PostMapping("/getOneById")
@Operation(summary = "根据id查询全局配置详情记录")
@ResponseBody
public SysConfig getOneById(String id){
return configService.getById(id);
public SysConfig getOneById(String id,
@RequestHeader(value = "Tenant_id", required = false) String tenantId){
LambdaQueryWrapper<SysConfig> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(SysConfig::getId, id)
.eq(StrUtil.isNotBlank(tenantId), SysConfig::getTenantId, StrUtil.trim(tenantId));
return configService.getOne(queryWrapper);
}
@PostMapping("/addConfig")
@Operation(summary = "根据id查询全局配置详情记录")
@ResponseBody
public ResponseResult addConfig(@RequestBody SysConfig config ) throws IOException, UnsupportedAudioFileException {
public ResponseResult addConfig(@RequestBody SysConfig config,
@RequestHeader(value = "Tenant_id", required = false) String tenantId) throws IOException, UnsupportedAudioFileException {
if (StrUtil.isEmpty(config.getId())){
config.setId(IdUtil.fastSimpleUUID()); }
config.setTenantId(StrUtil.trimToNull(tenantId));
config.setLastmodifier(userService.getUsername());
config.setLastmodifydate(new Timestamp(System.currentTimeMillis()));
boolean ok=configService.save(config);
@ -57,7 +64,15 @@ public class SysConfigController {
@PostMapping("/updateById")
@Operation(summary = "根据id修改全局配置记录")
@ResponseBody
public ResponseResult updateById(@RequestBody SysConfig config) throws IOException, UnsupportedAudioFileException {
public ResponseResult updateById(@RequestBody SysConfig config,
@RequestHeader(value = "Tenant_id", required = false) String tenantId) throws IOException, UnsupportedAudioFileException {
LambdaQueryWrapper<SysConfig> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(SysConfig::getId, config.getId())
.eq(StrUtil.isNotBlank(tenantId), SysConfig::getTenantId, StrUtil.trim(tenantId));
if (configService.getOne(queryWrapper) == null) {
return ResponseResult.error("未找到对应租户的配置记录");
}
config.setTenantId(StrUtil.trimToNull(tenantId));
config.setLastmodifier(userService.getUsername());
config.setLastmodifydate(new Timestamp(System.currentTimeMillis()));
boolean ok=configService.updateById(config);

View File

@ -1,5 +1,6 @@
package com.yfd.platform.system.controller;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yfd.platform.annotation.Log;
import com.yfd.platform.config.ResponseResult;
@ -42,10 +43,11 @@ public class SysLogController {
@Operation(summary = "分页查询日志信息")
public ResponseResult getLogList(String username, String optType,
String startDate,
String endDate, Page<SysLog> page) {
String endDate, Page<SysLog> page,
@RequestHeader(value = "Tenant_id", required = false) String tenantId) {
tenantId=null;
Page<SysLog> sysLogPage = sysLogService.getLogList(username, optType,
startDate, endDate, page);
startDate, endDate, page, StrUtil.trimToNull(tenantId));
Map<String, Object> map = new HashMap<>();
map.put("list", sysLogPage.getRecords());
map.put("total", sysLogPage.getTotal());
@ -65,10 +67,11 @@ public class SysLogController {
public void exportExcel(String username, String optType,
String startDate,
String endDate, Page<SysLog> page,
HttpServletResponse response) throws IOException {
HttpServletResponse response,
@RequestHeader(value = "Tenant_id", required = false) String tenantId) throws IOException {
tenantId=null;
Page<SysLog> sysLogPage = sysLogService.getLogList(username, optType,
startDate, endDate, page);
startDate, endDate, page, StrUtil.trimToNull(tenantId));
sysLogService.exportExcel(sysLogPage.getRecords(), response);
}
}

View File

@ -2,6 +2,7 @@ package com.yfd.platform.system.controller;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.yfd.platform.annotation.Log;
import com.yfd.platform.config.ResponseResult;
@ -58,8 +59,9 @@ public class SysMenuController {
@ResponseBody
public List<Map<String, Object>> getMenuButtonTree(String systemcode,
String name,
String isdisplay) {
return sysMenuService.getMenuButtonTree(systemcode, name, isdisplay);
String isdisplay,
@RequestHeader(value = "Tenant_id", required = false) String tenantId) {
return sysMenuService.getMenuButtonTree(systemcode, name, isdisplay, StrUtil.trimToNull(tenantId));
}
/***********************************
@ -75,8 +77,9 @@ public class SysMenuController {
@ResponseBody
public List<Map<String, Object>> getMenuTree(String systemcode,
String name,
String isdisplay) {
return sysMenuService.getMenuTree(systemcode, name, isdisplay);
String isdisplay,
@RequestHeader(value = "Tenant_id", required = false) String tenantId) {
return sysMenuService.getMenuTree(systemcode, name, isdisplay, StrUtil.trimToNull(tenantId));
}
/***********************************
@ -90,11 +93,12 @@ public class SysMenuController {
@PostMapping("/permissionAssignment")
@Operation(summary = "获取分配权限(不含按钮)")
@ResponseBody
public List<Map<String, Object>> permissionAssignment(String code, String roleId) {
public List<Map<String, Object>> permissionAssignment(String code, String roleId,
@RequestHeader(value = "Tenant_id", required = false) String tenantId) {
if (StrUtil.isBlank(code)) {
code = "1";
}
return sysMenuService.permissionAssignment(code,roleId);
return sysMenuService.permissionAssignment(code, roleId, StrUtil.trimToNull(tenantId));
}
/**********************************
@ -105,13 +109,13 @@ public class SysMenuController {
@GetMapping("/treeRoutes")
@Operation(summary = "获取当前用户菜单结构树")
@ResponseBody
public List<Map<String, Object>> getMenuTreeByUser() {
public List<Map<String, Object>> getMenuTreeByUser(@RequestHeader(value = "Tenant_id", required = false) String tenantId) {
SysUser userInfo = userService.getUserInfo();
String id = "";
if (0 != userInfo.getUsertype()) {
id = userInfo.getId();
}
return sysMenuService.getMenuTree(id);
return sysMenuService.getMenuTree(id, StrUtil.isNotBlank(tenantId) ? StrUtil.trimToNull(tenantId) : userInfo.getTenantId());
}
/***********************************
@ -123,8 +127,12 @@ public class SysMenuController {
@PostMapping("/getOneById")
@Operation(summary = "根据id查询菜单或按钮详情")
@ResponseBody
public ResponseResult getOneById(String id) {
SysMenu sysMenu = sysMenuService.getById(id);
public ResponseResult getOneById(String id,
@RequestHeader(value = "Tenant_id", required = false) String tenantId) {
LambdaQueryWrapper<SysMenu> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(SysMenu::getId, id)
.eq(StrUtil.isNotBlank(tenantId), SysMenu::getTenantId, StrUtil.trim(tenantId));
SysMenu sysMenu = sysMenuService.getOne(queryWrapper);
return ResponseResult.successData(sysMenu);
}
@ -138,7 +146,9 @@ public class SysMenuController {
@PostMapping("/addMenu")
@Operation(summary = "新增菜单及按钮")
@ResponseBody
public ResponseResult addMenu(@RequestBody SysMenu sysMenu) {
public ResponseResult addMenu(@RequestBody SysMenu sysMenu,
@RequestHeader(value = "Tenant_id", required = false) String tenantId) {
sysMenu.setTenantId(StrUtil.trimToNull(tenantId));
boolean isOk = sysMenuService.addMenu(sysMenu);
if (isOk) {
return ResponseResult.success();
@ -157,7 +167,15 @@ public class SysMenuController {
@PostMapping("/updateById")
@Operation(summary = "修改菜单及按钮")
@ResponseBody
public ResponseResult updateById(@RequestBody SysMenu sysMenu) {
public ResponseResult updateById(@RequestBody SysMenu sysMenu,
@RequestHeader(value = "Tenant_id", required = false) String tenantId) {
LambdaQueryWrapper<SysMenu> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(SysMenu::getId, sysMenu.getId())
.eq(StrUtil.isNotBlank(tenantId), SysMenu::getTenantId, StrUtil.trim(tenantId));
if (sysMenuService.getOne(queryWrapper) == null) {
return ResponseResult.error("未找到对应租户的菜单");
}
sysMenu.setTenantId(StrUtil.trimToNull(tenantId));
sysMenu.setLastmodifier(userService.getUsername());
sysMenu.setLastmodifydate(new Timestamp(System.currentTimeMillis()));
boolean isOk = sysMenuService.updateById(sysMenu);
@ -179,7 +197,14 @@ public class SysMenuController {
@PostMapping("/deleteIcon")
@Operation(summary = "根据id删除单个图标")
@ResponseBody
public ResponseResult deleteIcon(@RequestParam String id) {
public ResponseResult deleteIcon(@RequestParam String id,
@RequestHeader(value = "Tenant_id", required = false) String tenantId) {
LambdaQueryWrapper<SysMenu> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(SysMenu::getId, id)
.eq(StrUtil.isNotBlank(tenantId), SysMenu::getTenantId, StrUtil.trim(tenantId));
if (sysMenuService.getOne(queryWrapper) == null) {
return ResponseResult.error("未找到对应租户的菜单");
}
boolean ok = sysMenuService.deleteIcon(id);
if (ok) {
return ResponseResult.success();
@ -199,10 +224,11 @@ public class SysMenuController {
@PostMapping("/setIsDisplay")
@Operation(summary = "更新菜单及按钮是否有效")
@ResponseBody
public ResponseResult setIsDisplay(String id, String isdisplay) {
public ResponseResult setIsDisplay(String id, String isdisplay,
@RequestHeader(value = "Tenant_id", required = false) String tenantId) {
UpdateWrapper<SysMenu> updateWrapper = new UpdateWrapper<>();
//根据id 修改是否显示 最近修改人最近修改时间
updateWrapper.eq("id", id).set("isdisplay", isdisplay).set(
updateWrapper.eq("id", id).eq(StrUtil.isNotBlank(tenantId), "tenant_id", StrUtil.trim(tenantId)).set("isdisplay", isdisplay).set(
"lastmodifier", userService.getUsername()).set(
"lastmodifydate",
new Timestamp(System.currentTimeMillis()));
@ -227,8 +253,15 @@ public class SysMenuController {
@ResponseBody
public ResponseResult moveOrderno(@RequestParam String parentid,
@RequestParam String id,
@RequestParam int orderno) {
boolean ok = sysMenuService.moveOrderno(parentid, id, orderno);
@RequestParam int orderno,
@RequestHeader(value = "Tenant_id", required = false) String tenantId) {
LambdaQueryWrapper<SysMenu> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(SysMenu::getId, id)
.eq(StrUtil.isNotBlank(tenantId), SysMenu::getTenantId, StrUtil.trim(tenantId));
if (sysMenuService.getOne(queryWrapper) == null) {
return ResponseResult.error("未找到对应租户的菜单");
}
boolean ok = sysMenuService.moveOrderno(parentid, id, orderno, StrUtil.trimToNull(tenantId));
if (ok) {
return ResponseResult.success();
} else {
@ -246,7 +279,14 @@ public class SysMenuController {
@PostMapping("/deleteById")
@Operation(summary = "根据id删除菜单或按钮")
@ResponseBody
public ResponseResult deleteById(@RequestParam String id) {
public ResponseResult deleteById(@RequestParam String id,
@RequestHeader(value = "Tenant_id", required = false) String tenantId) {
LambdaQueryWrapper<SysMenu> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(SysMenu::getId, id)
.eq(StrUtil.isNotBlank(tenantId), SysMenu::getTenantId, StrUtil.trim(tenantId));
if (sysMenuService.getOne(queryWrapper) == null) {
return ResponseResult.error("未找到对应租户的菜单");
}
boolean ok = sysMenuService.deleteById(id);
if (ok) {
return ResponseResult.success();
@ -266,13 +306,23 @@ public class SysMenuController {
@Operation(summary = "菜单或按钮切换")
@ResponseBody
public ResponseResult changeMenuOrder(@RequestParam String fromId,
@RequestParam String toId) {
@RequestParam String toId,
@RequestHeader(value = "Tenant_id", required = false) String tenantId) {
if (StrUtil.isBlank(fromId) || StrUtil.isBlank(toId)) {
return ResponseResult.error("参数为空!");
}
if (fromId.equals(toId)) {
return ResponseResult.error("切换失败!");
}
LambdaQueryWrapper<SysMenu> fromWrapper = new LambdaQueryWrapper<>();
fromWrapper.eq(SysMenu::getId, fromId)
.eq(StrUtil.isNotBlank(tenantId), SysMenu::getTenantId, StrUtil.trim(tenantId));
LambdaQueryWrapper<SysMenu> toWrapper = new LambdaQueryWrapper<>();
toWrapper.eq(SysMenu::getId, toId)
.eq(StrUtil.isNotBlank(tenantId), SysMenu::getTenantId, StrUtil.trim(tenantId));
if (sysMenuService.getOne(fromWrapper) == null || sysMenuService.getOne(toWrapper) == null) {
return ResponseResult.error("存在不属于当前租户的菜单");
}
boolean ok = sysMenuService.changeOderNoById(fromId, toId);
if (ok) {
return ResponseResult.success();
@ -290,9 +340,16 @@ public class SysMenuController {
@PostMapping("/uploadIcon")
@Operation(summary = "上传单个图标")
@ResponseBody
public ResponseResult uploadIcon(MultipartFile icon, String menuId) throws FileNotFoundException {
public ResponseResult uploadIcon(MultipartFile icon, String menuId,
@RequestHeader(value = "Tenant_id", required = false) String tenantId) throws FileNotFoundException {
if (StrUtil.isNotBlank(menuId)) {
SysMenu sysMenu = sysMenuService.getById(menuId);
LambdaQueryWrapper<SysMenu> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(SysMenu::getId, menuId)
.eq(StrUtil.isNotBlank(tenantId), SysMenu::getTenantId, StrUtil.trim(tenantId));
SysMenu sysMenu = sysMenuService.getOne(queryWrapper);
if (sysMenu == null) {
return ResponseResult.error("未找到对应租户的菜单");
}
//图片路径
String iconname =
System.getProperty("user.dir") + "\\src\\main" +

View File

@ -51,8 +51,9 @@ public class SysOrganizationController {
@PostMapping("/getOrgScopeTree")
@Operation(summary = "获取组织范围树结构")
@ResponseBody
public List<Map<String, Object>> getOrgScopeTree(String roleId) {
return organizationService.getOrgScopeTree(roleId);
public List<Map<String, Object>> getOrgScopeTree(String roleId,
@RequestHeader(value = "Tenant_id", required = false) String tenantId) {
return organizationService.getOrgScopeTree(roleId, StrUtil.trimToNull(tenantId));
}
/***********************************
@ -64,8 +65,9 @@ public class SysOrganizationController {
@Operation(summary = "获取组织结构树")
@ResponseBody
public List<Map<String, Object>> getOrgTree(String parentid,
String params) {
return organizationService.getOrgTree(parentid, params);
String params,
@RequestHeader(value = "Tenant_id", required = false) String tenantId) {
return organizationService.getOrgTree(parentid, params, StrUtil.trimToNull(tenantId));
}
/***********************************
@ -77,12 +79,13 @@ public class SysOrganizationController {
@PostMapping("/getOrganizationById")
@Operation(summary = "根据企业ID查询组织信息")
@ResponseBody
public ResponseResult getOrganizationById(String id, String orgName) {
public ResponseResult getOrganizationById(String id, String orgName,
@RequestHeader(value = "Tenant_id", required = false) String tenantId) {
if (StrUtil.isBlank(id)) {
return ResponseResult.error("查询失败!");
}
List<SysOrganization> sysOrganizations =
organizationService.getOrganizationById(id, orgName);
organizationService.getOrganizationById(id, orgName, StrUtil.trimToNull(tenantId));
return ResponseResult.successData(sysOrganizations);
}
@ -95,8 +98,13 @@ public class SysOrganizationController {
@PostMapping("/getOneById")
@Operation(summary = "根据ID查询组织详情")
@ResponseBody
public ResponseResult getOneById(String id) {
SysOrganization sysOrganization = organizationService.getById(id);
public ResponseResult getOneById(String id,
@RequestHeader(value = "Tenant_id", required = false) String tenantId) {
LambdaQueryWrapper<SysOrganization> queryWrapper =
new LambdaQueryWrapper<>();
queryWrapper.eq(SysOrganization::getId, id)
.eq(StrUtil.isNotBlank(tenantId), SysOrganization::getTenantId, StrUtil.trim(tenantId));
SysOrganization sysOrganization = organizationService.getOne(queryWrapper);
return ResponseResult.successData(sysOrganization);
}
@ -110,7 +118,8 @@ public class SysOrganizationController {
@PostMapping("/addOrg")
@Operation(summary = "新增系统组织框架")
@ResponseBody
public ResponseResult addOrg(@RequestBody SysOrganization sysOrganization) {
public ResponseResult addOrg(@RequestBody SysOrganization sysOrganization,
@RequestHeader(value = "Tenant_id", required = false) String tenantId) {
//判断是否是否填写 有效 否则默认为 1
if (StrUtil.isEmpty(sysOrganization.getIsvaild())) {
sysOrganization.setIsvaild("1");
@ -118,6 +127,7 @@ public class SysOrganizationController {
if("".equals(sysOrganization.getId())){
sysOrganization.setId(null);
}
sysOrganization.setTenantId(StrUtil.trimToNull(tenantId));
//填写 当前用户名称
sysOrganization.setLastmodifier(userService.getUsername());
//填写 当前日期
@ -141,7 +151,16 @@ public class SysOrganizationController {
@PostMapping("/updateById")
@Operation(summary = "修改系统组织框架")
@ResponseBody
public ResponseResult updateById(@RequestBody SysOrganization sysOrganization) {
public ResponseResult updateById(@RequestBody SysOrganization sysOrganization,
@RequestHeader(value = "Tenant_id", required = false) String tenantId) {
LambdaQueryWrapper<SysOrganization> queryWrapper =
new LambdaQueryWrapper<>();
queryWrapper.eq(SysOrganization::getId, sysOrganization.getId())
.eq(StrUtil.isNotBlank(tenantId), SysOrganization::getTenantId, StrUtil.trim(tenantId));
if (organizationService.getOne(queryWrapper) == null) {
return ResponseResult.error("未找到对应租户的组织");
}
sysOrganization.setTenantId(StrUtil.trimToNull(tenantId));
//填写 当前用户名称
sysOrganization.setLastmodifier(userService.getUsername());
//填写 当前日期
@ -166,10 +185,11 @@ public class SysOrganizationController {
@Operation(summary = "设置组织是否有效")
@ResponseBody
public ResponseResult setIsValid(@RequestParam String id,
@RequestParam String isvaild) {
@RequestParam String isvaild,
@RequestHeader(value = "Tenant_id", required = false) String tenantId) {
UpdateWrapper<SysOrganization> updateWrapper = new UpdateWrapper<>();
//根据id 修改是否有效最近修改人最近修改时间
updateWrapper.eq("id", id).set("isvaild", isvaild).set("lastmodifier"
updateWrapper.eq("id", id).eq(StrUtil.isNotBlank(tenantId), "tenant_id", StrUtil.trim(tenantId)).set("isvaild", isvaild).set("lastmodifier"
, userService.getUsername()).set("lastmodifydate",
new Timestamp(System.currentTimeMillis()));
boolean isOk = organizationService.update(updateWrapper);
@ -190,21 +210,34 @@ public class SysOrganizationController {
@PostMapping("/deleteById")
@Operation(summary = "根据id删除系统组织框架")
@ResponseBody
public ResponseResult deleteById(@RequestParam String id) {
public ResponseResult deleteById(@RequestParam String id,
@RequestHeader(value = "Tenant_id", required = false) String tenantId) {
String[] orgIds = id.split(",");
for (String orgId : orgIds) {
LambdaQueryWrapper<SysOrganization> currentWrapper =
new LambdaQueryWrapper<>();
currentWrapper.eq(SysOrganization::getId, orgId)
.eq(StrUtil.isNotBlank(tenantId), SysOrganization::getTenantId, StrUtil.trim(tenantId));
if (organizationService.getOne(currentWrapper) == null) {
return ResponseResult.error("存在不属于当前租户的组织");
}
LambdaQueryWrapper<SysOrganization> queryWrapper =
new LambdaQueryWrapper<>();
List<SysOrganization> list =
organizationService.list(queryWrapper.eq(SysOrganization::getParentid, orgId));
organizationService.list(queryWrapper.eq(SysOrganization::getParentid, orgId)
.eq(StrUtil.isNotBlank(tenantId), SysOrganization::getTenantId, StrUtil.trim(tenantId)));
List<String> ids =
list.stream().map(SysOrganization::getId).collect(Collectors.toList());
boolean isOk = organizationService.removeById(orgId);
boolean isOk = organizationService.remove(new LambdaQueryWrapper<SysOrganization>()
.eq(SysOrganization::getId, orgId)
.eq(StrUtil.isNotBlank(tenantId), SysOrganization::getTenantId, StrUtil.trim(tenantId)));
if (!isOk) {
continue;
}
for (String oid : ids) {
organizationService.removeById(oid);
organizationService.remove(new LambdaQueryWrapper<SysOrganization>()
.eq(SysOrganization::getId, oid)
.eq(StrUtil.isNotBlank(tenantId), SysOrganization::getTenantId, StrUtil.trim(tenantId)));
}
}
return ResponseResult.success();

View File

@ -6,7 +6,9 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.yfd.platform.annotation.Log;
import com.yfd.platform.config.ResponseResult;
import com.yfd.platform.system.domain.SysMenu;
import com.yfd.platform.system.domain.SysRole;
import com.yfd.platform.system.service.ISysMenuService;
import com.yfd.platform.system.service.ISysRoleService;
import com.yfd.platform.system.service.IUserService;
import io.swagger.v3.oas.annotations.Operation;
@ -16,6 +18,7 @@ import org.springframework.web.bind.annotation.*;
import jakarta.annotation.Resource;
import java.sql.Timestamp;
import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
@ -38,6 +41,9 @@ public class SysRoleController {
@Resource
private IUserService userService;
@Resource
private ISysMenuService sysMenuService;
/***********************************
* 用途说明查询所有角色
* 参数说明
@ -47,8 +53,9 @@ public class SysRoleController {
@PostMapping("/list")
@Operation(summary = "查询所有角色")
@ResponseBody
public List<SysRole> list(@RequestParam(required = false) String rolename) {
return roleService.selectRoleList(rolename);
public List<SysRole> list(@RequestParam(required = false) String rolename,
@RequestHeader(value = "Tenant_id", required = false) String tenantId) {
return roleService.selectRoleList(rolename, StrUtil.trimToNull(tenantId));
}
/***********************************
@ -60,8 +67,12 @@ public class SysRoleController {
@PostMapping("/getOneById")
@Operation(summary = "根据Id获取当个角色")
@ResponseBody
public ResponseResult getOneById(String id) {
SysRole sysRole = roleService.getById(id);
public ResponseResult getOneById(String id,
@RequestHeader(value = "Tenant_id", required = false) String tenantId) {
LambdaQueryWrapper<SysRole> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(SysRole::getId, id)
.eq(StrUtil.isNotBlank(tenantId), SysRole::getTenantId, StrUtil.trim(tenantId));
SysRole sysRole = roleService.getOne(queryWrapper);
return ResponseResult.successData(sysRole);
}
@ -75,7 +86,9 @@ public class SysRoleController {
@PostMapping("/addRole")
@Operation(summary = "新增角色")
@ResponseBody
public ResponseResult addRole(@RequestBody SysRole sysRole) {
public ResponseResult addRole(@RequestBody SysRole sysRole,
@RequestHeader(value = "Tenant_id", required = false) String tenantId) {
sysRole.setTenantId(StrUtil.trimToNull(tenantId));
boolean isOk = roleService.addRole(sysRole);
if (isOk) {
return ResponseResult.success();
@ -96,10 +109,11 @@ public class SysRoleController {
@Operation(summary = "分配操作权限")
@ResponseBody
public ResponseResult setOptScope(@RequestParam String id,
@RequestParam String optscope) {
@RequestParam String optscope,
@RequestHeader(value = "Tenant_id", required = false) String tenantId) {
UpdateWrapper<SysRole> updateWrapper = new UpdateWrapper<>();
//根据id 更新权限最近修改人最近修改时间
updateWrapper.eq("id", id).set("optscope", optscope).set(
updateWrapper.eq("id", id).eq(StrUtil.isNotBlank(tenantId), "tenant_id", StrUtil.trim(tenantId)).set("optscope", optscope).set(
"lastmodifier", userService.getUsername()).set(
"lastmodifydate", LocalDateTime.now());
boolean ok = roleService.update(updateWrapper);
@ -121,13 +135,34 @@ public class SysRoleController {
@PostMapping("/setMenuById")
@Operation(summary = "角色菜单权限")
@ResponseBody
public ResponseResult setMenuById(String id, String menuIds) {
public ResponseResult setMenuById(String id, String menuIds,
@RequestHeader(value = "Tenant_id", required = false) String tenantId) {
if (StrUtil.isBlank(id)) {
return ResponseResult.error("参数为空");
}
LambdaQueryWrapper<SysRole> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(SysRole::getId, id)
.eq(StrUtil.isNotBlank(tenantId), SysRole::getTenantId, StrUtil.trim(tenantId));
if (roleService.getOne(queryWrapper) == null) {
return ResponseResult.error("未找到对应租户的角色");
}
if (StrUtil.isBlank(menuIds)) {
return ResponseResult.success();
}
List<String> menuIdList = Arrays.stream(menuIds.split(","))
.map(StrUtil::trim)
.filter(StrUtil::isNotBlank)
.distinct()
.toList();
if (menuIdList.isEmpty()) {
return ResponseResult.success();
}
long menuCount = sysMenuService.count(new LambdaQueryWrapper<SysMenu>()
.in(SysMenu::getId, menuIdList)
.eq(StrUtil.isNotBlank(tenantId), SysMenu::getTenantId, StrUtil.trim(tenantId)));
if (menuCount != menuIdList.size()) {
return ResponseResult.error("存在不属于当前租户的菜单");
}
boolean ok = roleService.setMenuById(id, menuIds);
if (ok) {
return ResponseResult.success();
@ -149,10 +184,11 @@ public class SysRoleController {
@Operation(summary = "设置组织范围")
@ResponseBody
public ResponseResult setOrgscope(@RequestParam String id,
@RequestParam String orgscope) {
@RequestParam String orgscope,
@RequestHeader(value = "Tenant_id", required = false) String tenantId) {
UpdateWrapper<SysRole> updateWrapper = new UpdateWrapper<>();
//根据id 更新组织范围最近修改人最近修改时间
updateWrapper.eq("id", id).set("orgscope", orgscope).set(
updateWrapper.eq("id", id).eq(StrUtil.isNotBlank(tenantId), "tenant_id", StrUtil.trim(tenantId)).set("orgscope", orgscope).set(
"lastmodifier", userService.getUsername()).set(
"lastmodifydate", LocalDateTime.now());
boolean ok = roleService.update(updateWrapper);
@ -175,10 +211,11 @@ public class SysRoleController {
@Operation(summary = "设置业务范围")
@ResponseBody
public ResponseResult setBusscope(@RequestParam String id,
@RequestParam String busscope) {
@RequestParam String busscope,
@RequestHeader(value = "Tenant_id", required = false) String tenantId) {
UpdateWrapper<SysRole> updateWrapper = new UpdateWrapper<>();
//根据id 更新业务范围最近修改人最近修改时间
updateWrapper.eq("id", id).set("busscope", busscope).set(
updateWrapper.eq("id", id).eq(StrUtil.isNotBlank(tenantId), "tenant_id", StrUtil.trim(tenantId)).set("busscope", busscope).set(
"lastmodifier", userService.getUsername()).set(
"lastmodifydate", LocalDateTime.now());
boolean ok = roleService.update(updateWrapper);
@ -200,7 +237,14 @@ public class SysRoleController {
@PostMapping("/setRoleUsers")
@Operation(summary = "角色添加用户")
@ResponseBody
public ResponseResult setRoleUsers(String roleid, String userids) {
public ResponseResult setRoleUsers(String roleid, String userids,
@RequestHeader(value = "Tenant_id", required = false) String tenantId) {
LambdaQueryWrapper<SysRole> roleWrapper = new LambdaQueryWrapper<>();
roleWrapper.eq(SysRole::getId, roleid)
.eq(StrUtil.isNotBlank(tenantId), SysRole::getTenantId, StrUtil.trim(tenantId));
if (roleService.getOne(roleWrapper) == null) {
return ResponseResult.error("未找到对应租户的角色");
}
boolean isOk = true;
String[] temp = userids.split(",");
for (String userid : temp) {
@ -223,7 +267,14 @@ public class SysRoleController {
@Operation(summary = "删除角色用户")
@ResponseBody
public ResponseResult deleteRoleUsers(@RequestParam String roleid,
@RequestParam String userids) {
@RequestParam String userids,
@RequestHeader(value = "Tenant_id", required = false) String tenantId) {
LambdaQueryWrapper<SysRole> roleWrapper = new LambdaQueryWrapper<>();
roleWrapper.eq(SysRole::getId, roleid)
.eq(StrUtil.isNotBlank(tenantId), SysRole::getTenantId, StrUtil.trim(tenantId));
if (roleService.getOne(roleWrapper) == null) {
return ResponseResult.error("未找到对应租户的角色");
}
//根据角色id用户id删除
boolean ok = roleService.deleteRoleUsers(roleid, userids);
if (ok) {
@ -243,10 +294,11 @@ public class SysRoleController {
@PostMapping("/setIsvaild")
@Operation(summary = "设置角色是否有效")
@ResponseBody
public ResponseResult setIsvaild(String id, String isvaild) {
public ResponseResult setIsvaild(String id, String isvaild,
@RequestHeader(value = "Tenant_id", required = false) String tenantId) {
UpdateWrapper<SysRole> updateWrapper = new UpdateWrapper<>();
//根据id 更新业务范围最近修改人最近修改时间
updateWrapper.eq("id", id).set("isvaild", isvaild).set("lastmodifier"
updateWrapper.eq("id", id).eq(StrUtil.isNotBlank(tenantId), "tenant_id", StrUtil.trim(tenantId)).set("isvaild", isvaild).set("lastmodifier"
, userService.getUsername()).set("lastmodifydate",
LocalDateTime.now());
boolean ok = roleService.update(updateWrapper);
@ -266,7 +318,15 @@ public class SysRoleController {
@PostMapping("/updateById")
@Operation(summary = "更新角色信息")
@ResponseBody
public ResponseResult updateById(@RequestBody SysRole sysRole) {
public ResponseResult updateById(@RequestBody SysRole sysRole,
@RequestHeader(value = "Tenant_id", required = false) String tenantId) {
LambdaQueryWrapper<SysRole> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(SysRole::getId, sysRole.getId())
.eq(StrUtil.isNotBlank(tenantId), SysRole::getTenantId, StrUtil.trim(tenantId));
if (roleService.getOne(queryWrapper) == null) {
return ResponseResult.error("未找到对应租户的角色");
}
sysRole.setTenantId(StrUtil.trimToNull(tenantId));
//更新最近修改人
sysRole.setLastmodifier(userService.getUsername());
//更新最近修改时间
@ -289,7 +349,17 @@ public class SysRoleController {
@PostMapping("/deleteById")
@Operation(summary = "根据id删除角色")
@ResponseBody
public ResponseResult deleteById(@RequestParam String id) {
public ResponseResult deleteById(@RequestParam String id,
@RequestHeader(value = "Tenant_id", required = false) String tenantId) {
String[] roleIds = id.split(",");
for (String roleId : roleIds) {
LambdaQueryWrapper<SysRole> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(SysRole::getId, roleId)
.eq(StrUtil.isNotBlank(tenantId), SysRole::getTenantId, StrUtil.trim(tenantId));
if (roleService.getOne(queryWrapper) == null) {
return ResponseResult.error("存在不属于当前租户的角色");
}
}
roleService.deleteById(id);
return ResponseResult.success();
}
@ -310,9 +380,10 @@ public class SysRoleController {
@ResponseBody
public List<Map> listRoleUsers(String orgid, String username,
String status, String level,
String rolename, String isvaild) {
String rolename, String isvaild,
@RequestHeader(value = "Tenant_id", required = false) String tenantId) {
return roleService.listRoleUsers(orgid, username, status, level,
rolename, isvaild);
rolename, isvaild, StrUtil.trimToNull(tenantId));
}
}

View File

@ -1,6 +1,7 @@
package com.yfd.platform.system.controller;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yfd.platform.annotation.Log;
import com.yfd.platform.config.ResponseResult;
@ -41,7 +42,10 @@ public class UserController {
@PostMapping("/addUser")
@Operation(summary = "新增系统用户")
@ResponseBody
public ResponseResult addUser(@RequestBody SysUser user, String roleids) {
public ResponseResult addUser(@RequestBody SysUser user,
String roleids,
@RequestHeader(value = "Tenant_id", required = false) String tenantId) {
user.setTenantId(StrUtil.trimToNull(tenantId));
Map reslut = userService.addUser(user, roleids);
return ResponseResult.successData(reslut);
}
@ -51,10 +55,12 @@ public class UserController {
@Operation(summary = "修改用户信息")
@ResponseBody
public ResponseResult updateUser(@RequestBody SysUser user,
String roleids) {
String roleids,
@RequestHeader(value = "Tenant_id", required = false) String tenantId) {
if (StrUtil.isEmpty(user.getId())) {
return ResponseResult.error("没有用户ID");
}
user.setTenantId(StrUtil.trimToNull(tenantId));
//填写 当前用户名称
user.setLastmodifier(userService.getUsername());
//填写 当前日期
@ -68,10 +74,12 @@ public class UserController {
@Operation(summary = "查询用户信息")
@ResponseBody
public ResponseResult queryUsers(String orgid,
String username, Page<SysUser> page) {
String username,
Page<SysUser> page,
@RequestHeader(value = "Tenant_id", required = false) String tenantId) {
Page<SysUser> mapPage = userService.queryUsers(orgid,
username, page);
username, StrUtil.trimToNull(tenantId), page);
return ResponseResult.successData(mapPage);
}
@ -104,8 +112,12 @@ public class UserController {
@GetMapping("/queryUserById")
@Operation(summary = "根据id查询用户信息")
@ResponseBody
public ResponseResult queryUserById(String id) {
SysUser user = userService.getById(id);
public ResponseResult queryUserById(String id,
@RequestHeader(value = "Tenant_id", required = false) String tenantId) {
LambdaQueryWrapper<SysUser> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(SysUser::getId, id)
.eq(StrUtil.isNotBlank(tenantId), SysUser::getTenantId, StrUtil.trim(tenantId));
SysUser user = userService.getOne(queryWrapper);
return ResponseResult.successData(user);
}
@ -232,8 +244,11 @@ public class UserController {
@GetMapping("/queryPendingAuditUsers")
@Operation(summary = "查询待审核用户列表")
@ResponseBody
public ResponseResult queryPendingAuditUsers(Page<SysUser> page,String name,String regStatus) {
Page<SysUser> result = userService.queryPendingAuditUsers(page,name,regStatus);
public ResponseResult queryPendingAuditUsers(Page<SysUser> page,
String name,
String regStatus,
@RequestHeader(value = "Tenant_id", required = false) String tenantId) {
Page<SysUser> result = userService.queryPendingAuditUsers(page, name, regStatus, StrUtil.trimToNull(tenantId));
return ResponseResult.successData(result);
}
}

View File

@ -48,6 +48,12 @@ public class SysConfig implements Serializable {
*/
private String remark;
/**
* 租户ID
*/
@TableField("TENANT_ID")
private String tenantId;
/**
* 最近修改者
*/

View File

@ -83,6 +83,12 @@ public class SysLog implements Serializable {
@TableField("REQUESTIP")
private String requestip;
/**
* 租户ID
*/
@TableField("TENANT_ID")
private String tenantId;
/**
* 浏览器类型
*/

View File

@ -85,6 +85,12 @@ public class SysMenu implements Serializable {
*/
private String isdisplay;
/**
* 租户ID
*/
@TableField("TENANT_ID")
private String tenantId;
/**
* 最近修改者
*/

View File

@ -63,6 +63,12 @@ public class SysOrganization implements Serializable {
*/
private String description;
/**
* 租户ID
*/
@TableField("TENANT_ID")
private String tenantId;
/**
* 最近修改者
*/

View File

@ -69,6 +69,12 @@ public class SysRole implements Serializable {
*/
private String isvaild;
/**
* 租户ID
*/
@TableField("TENANT_ID")
private String tenantId;
/**
* 最近修改者
*/

View File

@ -79,6 +79,12 @@ public class SysUser implements Serializable {
*/
private String orgid;
/**
* 租户ID
*/
@TableField("TENANT_ID")
private String tenantId;
/**
* 密码重置时间
*/

View File

@ -25,7 +25,10 @@ public interface SysMenuMapper extends BaseMapper<SysMenu> {
*upOrderno 大于等于序号更改的序号加一
* 返回值说明: 是否更新成功
***********************************/
boolean upMoveOrderno(@Param("parentid") String parentid, @Param("Orderno") int Orderno, @Param("upOrderno") int upOrderno);
boolean upMoveOrderno(@Param("parentid") String parentid,
@Param("Orderno") int Orderno,
@Param("upOrderno") int upOrderno,
@Param("tenantId") String tenantId);
/***********************************
* 用途说明菜单及按钮序号向下移动
@ -35,13 +38,16 @@ public interface SysMenuMapper extends BaseMapper<SysMenu> {
*downOrderno 小于等于序号更改的序号减一
* 返回值说明: 是否更新成功
***********************************/
boolean downMoveOrderno(@Param("parentid") String parentid, @Param("Orderno") int Orderno, @Param("downOrderno") int downOrderno);
boolean downMoveOrderno(@Param("parentid") String parentid,
@Param("Orderno") int Orderno,
@Param("downOrderno") int downOrderno,
@Param("tenantId") String tenantId);
List<String> selectPermsByUserId(String userId);
//List<SysMenu> selectMenuByUserId(String userId);
List<SysMenu> selectMenuByUserId(String userId);
List<SysMenu> selectMenuByUserId(@Param("userId") String userId, @Param("tenantId") String tenantId);
/***********************************
* 用途说明根据权限id查找系统类型
@ -55,5 +61,5 @@ public interface SysMenuMapper extends BaseMapper<SysMenu> {
* 参数说明 id 权限id
* 返回值说明: 返回权限集合
***********************************/
List<String> selectMenuByRoleId(String id);
List<String> selectMenuByRoleId(@Param("id") String id, @Param("tenantId") String tenantId);
}

View File

@ -44,8 +44,13 @@ public interface SysRoleMapper extends BaseMapper<SysRole> {
* isvaild 角色是否有效
* 返回值说明: 系统用户角色数据集合
***********************************/
List<Map> listRoleUsers(String orgid, String username, String status,
String level, String rolename, String isvaild);
List<Map> listRoleUsers(@Param("orgid") String orgid,
@Param("username") String username,
@Param("status") String status,
@Param("level") String level,
@Param("rolename") String rolename,
@Param("isvaild") String isvaild,
@Param("tenantId") String tenantId);
/***********************************
* 用途说明根据 角色id和用户id 删除 admin除外
@ -113,6 +118,6 @@ public interface SysRoleMapper extends BaseMapper<SysRole> {
* 参数说明rolename - 角色名称
* 返回值说明角色列表
***********************************/
List<SysRole> selectRoleList(@Param("rolename") String rolename);
List<SysRole> selectRoleList(@Param("rolename") String rolename, @Param("tenantId") String tenantId);
}

View File

@ -81,8 +81,9 @@ public interface SysUserMapper extends BaseMapper<SysUser> {
************************************/
boolean delInRoleUsersByUserid(@Param("userid") String userid,@Param("roleids")String[] roleids);
Page<SysUser> queryUsers(String orgid,
String username,
Page<SysUser> queryUsers(@Param("orgid") String orgid,
@Param("username") String username,
@Param("tenantId") String tenantId,
Page<SysUser> page);
Map<String, String> getOrganizationByid(String id);

View File

@ -28,7 +28,7 @@ public interface ISysLogService extends IService<SysLog> {
***********************************/
Page<SysLog> getLogList(String username, String optType,
String startDate,
String endDate, Page<SysLog> page);
String endDate, Page<SysLog> page, String tenantId);
/**********************************

View File

@ -27,7 +27,7 @@ public interface ISysMenuService extends IService<SysMenu> {
* isdisplay 是否显示
* 返回值说明: 菜单结构树集合
***********************************/
List<Map<String,Object>> getMenuButtonTree(String systemcode, String name, String isdisplay);
List<Map<String,Object>> getMenuButtonTree(String systemcode, String name, String isdisplay, String tenantId);
/***********************************
* 用途说明获取菜单结构树不含按钮
@ -37,7 +37,7 @@ public interface ISysMenuService extends IService<SysMenu> {
* isdisplay 是否显示
* 返回值说明: 菜单结构树集合
***********************************/
List<Map<String,Object>> getMenuTree(String systemcode, String name, String isdisplay);
List<Map<String,Object>> getMenuTree(String systemcode, String name, String isdisplay, String tenantId);
/***********************************
@ -73,7 +73,7 @@ public interface ISysMenuService extends IService<SysMenu> {
* orderMap map<菜单及按钮表id,排列序号>
* 返回值说明: 是否更新成功
***********************************/
boolean moveOrderno(String parentid, String id, int orderno);
boolean moveOrderno(String parentid, String id, int orderno, String tenantId);
/***********************************
* 用途说明根据id删除菜单或按钮
@ -85,7 +85,7 @@ public interface ISysMenuService extends IService<SysMenu> {
boolean changeOderNoById(String fromId, String toId);
List<Map<String, Object>> getMenuTree(String id);
List<Map<String, Object>> getMenuTree(String id, String tenantId);
/***********************************
* 用途说明权限分配
@ -95,7 +95,7 @@ public interface ISysMenuService extends IService<SysMenu> {
* isdisplay 是否显示
* 返回值说明: 菜单结构树集合
***********************************/
List<Map<String, Object>> permissionAssignment(String code,String roleId);
List<Map<String, Object>> permissionAssignment(String code, String roleId, String tenantId);
String uploadIcon(MultipartFile icon) throws FileNotFoundException;
}

View File

@ -24,7 +24,7 @@ public interface ISysOrganizationService extends IService<SysOrganization> {
* params 名称根据名称查询二级
* 返回值说明: 组织树集合
***********************************/
List<Map<String, Object>> getOrgTree(String parentid, String params);
List<Map<String, Object>> getOrgTree(String parentid, String params, String tenantId);
/***********************************
* 用途说明新增系统组织框架
@ -40,7 +40,7 @@ public interface ISysOrganizationService extends IService<SysOrganization> {
* id 企业id
* 返回值说明: 系统组织框架对象
***********************************/
List<SysOrganization> getOrganizationById(String id,String orgName);
List<SysOrganization> getOrganizationById(String id, String orgName, String tenantId);
/***********************************
* 用途说明获取组织范围树结构
@ -48,7 +48,7 @@ public interface ISysOrganizationService extends IService<SysOrganization> {
*roleId 角色id
* 返回值说明: 组织树集合
***********************************/
List<Map<String, Object>> getOrgScopeTree(String roleId);
List<Map<String, Object>> getOrgScopeTree(String roleId, String tenantId);
/**********************************
* 用途说明: 修改角色组织范围

View File

@ -52,7 +52,7 @@ public interface ISysRoleService extends IService<SysRole> {
* isvaild 角色是否有效
* 返回值说明: 系统用户角色数据集合
***********************************/
List<Map> listRoleUsers(String orgid, String username, String status, String level, String rolename, String isvaild);
List<Map> listRoleUsers(String orgid, String username, String status, String level, String rolename, String isvaild, String tenantId);
/***********************************
@ -64,5 +64,5 @@ public interface ISysRoleService extends IService<SysRole> {
***********************************/
boolean setMenuById(String id, String menuIds);
List<SysRole> selectRoleList(String rolename);
List<SysRole> selectRoleList(String rolename, String tenantId);
}

View File

@ -132,7 +132,7 @@ public interface IUserService extends IService<SysUser> {
boolean addUserRoles(String roleid, String userid);
//Page<SysUser> queryUsers(String orgid, String username, Page<SysUser> page);
Page<SysUser> queryUsers(String orgid, String username, Page<SysUser> page);
Page<SysUser> queryUsers(String orgid, String username, String tenantId, Page<SysUser> page);
/***********************************
* 用途说明根据ID批量删除用户
@ -174,6 +174,6 @@ public interface IUserService extends IService<SysUser> {
*page 分页参数
* 返回值说明: 待审核用户分页列表
************************************/
Page<SysUser> queryPendingAuditUsers(Page<SysUser> page,String name, String regStatus);
Page<SysUser> queryPendingAuditUsers(Page<SysUser> page, String name, String regStatus, String tenantId);
}

View File

@ -17,10 +17,13 @@ import com.yfd.platform.utils.StringUtils;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Service;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.AnnotatedType;
@ -55,7 +58,7 @@ public class SysLogServiceImpl extends ServiceImpl<SysLogMapper, SysLog> impleme
@Override
public Page<SysLog> getLogList(String username, String optType,
String startDate,
String endDate, Page<SysLog> page) {
String endDate, Page<SysLog> page, String tenantId) {
LambdaQueryWrapper<SysLog> queryWrapper = new LambdaQueryWrapper<>();
// 没有传username就不按此条件查询
@ -72,6 +75,9 @@ public class SysLogServiceImpl extends ServiceImpl<SysLogMapper, SysLog> impleme
if (parseStartDate != null && parseEndDate != null) {
queryWrapper.ge(SysLog::getLogtime, parseStartDate).lt(SysLog::getLogtime, dateTime);
}
if (StrUtil.isNotBlank(tenantId)) {
queryWrapper.eq(SysLog::getTenantId, tenantId);
}
queryWrapper.orderByDesc(SysLog::getLogtime);
return sysLogMapper.selectPage(page, queryWrapper);
@ -152,6 +158,11 @@ public class SysLogServiceImpl extends ServiceImpl<SysLogMapper, SysLog> impleme
log.setUsername(nickname);
log.setParams(getParameter(method, joinPoint.getArgs()));
log.setBrowser(browser);
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
if (attributes != null) {
HttpServletRequest request = attributes.getRequest();
log.setTenantId(StrUtil.trimToNull(request.getHeader("tenant_id")));
}
String operationtype = getOperationtype(signature.getName());
log.setOpttype(operationtype);
log.setLogtime(new Timestamp(System.currentTimeMillis()));

View File

@ -64,23 +64,28 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
@Override
public List<Map<String, Object>> getMenuButtonTree(String systemcode,
String name,
String isdisplay) {
String isdisplay,
String tenantId) {
List<Map<String, Object>> mapList=null;
List<Map<String, Object>> listMap =new ArrayList<>();
if(StrUtil.isEmpty(name)){//不带名称查询返回树结构
QueryWrapper<SysMenu> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("parentid", "0").eq("systemcode", systemcode).orderByAsc("orderno");
queryWrapper.eq("parentid", "0").eq("systemcode", systemcode)
.eq(StrUtil.isNotBlank(tenantId), "tenant_id", tenantId)
.orderByAsc("orderno");
mapList = this.listMaps(queryWrapper);
listMap.addAll(ObjectConverterUtil.convertMapFieldsToEntityFormat(SysMenu.class, mapList));
for (int i = 0; i < listMap.size(); i++) {
//查询下一子集
List<Map<String, Object>> childList = child(listMap.get(i).get(
"id").toString(), systemcode, name, null, null);
"id").toString(), systemcode, name, null, null, tenantId);
listMap.get(i).put("children", childList); //添加新列 子集
}
}else{ //根据菜单名称查询直接返回类别
QueryWrapper<SysMenu> queryWrapper = new QueryWrapper<>();
queryWrapper.like("name", name).eq("systemcode", systemcode).orderByAsc("name");
queryWrapper.like("name", name).eq("systemcode", systemcode)
.eq(StrUtil.isNotBlank(tenantId), "tenant_id", tenantId)
.orderByAsc("name");
mapList = this.listMaps(queryWrapper);
listMap.addAll(ObjectConverterUtil.convertMapFieldsToEntityFormat(SysMenu.class, mapList));
}
@ -97,7 +102,8 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
@Override
public List<Map<String, Object>> getMenuTree(String systemcode,
String name,
String isdisplay) {
String isdisplay,
String tenantId) {
QueryWrapper<SysMenu> queryWrapper = new QueryWrapper<>();
if (StrUtil.isNotEmpty(isdisplay)) {
queryWrapper.eq("isdisplay", isdisplay);
@ -107,11 +113,11 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
//根据系统 ,类型不为2 显示序号 正序排序
queryWrapper.eq("parentid", "0").eq("systemcode", systemcode).ne(
"type", "2").orderByAsc("orderno");
"type", "2").eq(StrUtil.isNotBlank(tenantId), "tenant_id", tenantId).orderByAsc("orderno");
List<Map<String, Object>> listMap = this.listMaps(queryWrapper);
for (int i = 0; i < listMap.size(); i++) {
List<Map<String, Object>> childList = child(listMap.get(i).get(
"id").toString(), systemcode, name, isdisplay, "2");//查询下一子集
"id").toString(), systemcode, name, isdisplay, "2", tenantId);//查询下一子集
listMap.get(i).put("children", childList); //添加新列 子集
}
return listMap;
@ -128,10 +134,11 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
***********************************/
private List<Map<String, Object>> child(String parentid,
String systemcode, String name,
String isdisplay, String type) {
String isdisplay, String type, String tenantId) {
List<Map<String, Object>> mapList;
QueryWrapper<SysMenu> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("parentid", parentid).eq("systemcode", systemcode);
queryWrapper.eq(StrUtil.isNotBlank(tenantId), "tenant_id", tenantId);
//根据上级id 系统 查询
if (StrUtil.isNotEmpty(type)) {
queryWrapper.ne("type", type);
@ -146,7 +153,7 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
for (int i = 0; i < listMap.size(); i++) { //遍历表数据
List<Map<String, Object>> childList =
child(listMap.get(i).get("id").toString(), systemcode
, name, isdisplay, type); //循环获取下一子集
, name, isdisplay, type, tenantId); //循环获取下一子集
listMap.get(i).put("children", childList); //添加新列 子集
}
}
@ -165,20 +172,24 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
String parentId = sysMenu.getParentid();
QueryWrapper<SysMenu> queryWrapper = new QueryWrapper<>();
//根据上级id 查询到总数 并累加
long orderno = this.count(queryWrapper.eq("parentid",
parentId)) + 1L;
queryWrapper.eq("parentid", parentId)
.eq(StrUtil.isNotBlank(sysMenu.getTenantId()), "tenant_id", sysMenu.getTenantId());
long orderno = this.count(queryWrapper) + 1L;
// 生成排序号
sysMenu.setOrderno((int) orderno);
// 生成编号
QueryWrapper<SysMenu> queryMaxCode = new QueryWrapper<>();
queryMaxCode.eq("parentid", parentId);
queryMaxCode.eq("parentid", parentId)
.eq(StrUtil.isNotBlank(sysMenu.getTenantId()), "tenant_id", sysMenu.getTenantId());
// 使用 Oracle 兼容的 NVL 函数处理空值
List<Object> maxList = this.listObjs(
queryMaxCode.select("NVL(MAX(code), '0') as code")
.eq("systemcode", sysMenu.getSystemcode())
);
SysMenu parentMenu = sysMenuMapper.selectById(parentId);
SysMenu parentMenu = "0".equals(parentId) ? null : this.getOne(new LambdaQueryWrapper<SysMenu>()
.eq(SysMenu::getId, parentId)
.eq(StrUtil.isNotBlank(sysMenu.getTenantId()), SysMenu::getTenantId, sysMenu.getTenantId()));
// 最大编号转换成int类型
String maxCode = !maxList.isEmpty() ? maxList.getFirst().toString() : "0";
int max = ObjectUtil.isEmpty(maxList) ? 0 :
@ -302,18 +313,25 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
* 返回值说明: 是否更新成功
***********************************/
@Override
public boolean moveOrderno(String parentid, String id, int orderno) {
public boolean moveOrderno(String parentid, String id, int orderno, String tenantId) {
boolean ok = true;
SysMenu sysMenu = this.getById(id); //根据id查询原顺序号
SysMenu sysMenu = this.getOne(new LambdaQueryWrapper<SysMenu>()
.eq(SysMenu::getId, id)
.eq(StrUtil.isNotBlank(tenantId), SysMenu::getTenantId, tenantId)); //根据id查询原顺序号
if (sysMenu == null) {
return false;
}
if (sysMenu.getOrderno() > orderno) {
ok = sysMenuMapper.upMoveOrderno(parentid, sysMenu.getOrderno(),
orderno); //根据 父级id 小于原序号 大于等于更改序号
orderno, tenantId); //根据 父级id 小于原序号 大于等于更改序号
} else {
ok = sysMenuMapper.downMoveOrderno(parentid, sysMenu.getOrderno()
, orderno); //根据 父级id 大于原序号 小于等于更改序号
, orderno, tenantId); //根据 父级id 大于原序号 小于等于更改序号
}
UpdateWrapper<SysMenu> updateWrapper = new UpdateWrapper<>();
ok = ok && this.update(updateWrapper.eq("id", id).set("orderno",
ok = ok && this.update(updateWrapper.eq("id", id)
.eq(StrUtil.isNotBlank(tenantId), "tenant_id", tenantId)
.set("orderno",
orderno)); //根据 id修改序号
return ok;
}
@ -345,8 +363,9 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
}
QueryWrapper<SysMenu> queryWrapper = new QueryWrapper<>();
//根据上级id 查询 根据 orderno 正序排序
queryWrapper.eq("parentid", sysMenu.getParentid()).orderByAsc(
"orderno");
queryWrapper.eq("parentid", sysMenu.getParentid())
.eq(StrUtil.isNotBlank(sysMenu.getTenantId()), "tenant_id", sysMenu.getTenantId())
.orderByAsc("orderno");
List<SysMenu> list = this.list(queryWrapper);
for (int i = 0; i < list.size(); i++) {
SysMenu menu = list.get(i);
@ -409,16 +428,20 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
* 返回值说明: 返回菜单树
***********************************/
@Override
public List<Map<String, Object>> getMenuTree(String id) {
public List<Map<String, Object>> getMenuTree(String id, String tenantId) {
// 根据id获取菜单
//List<SysMenu> sysMenus = sysMenuMapper.selectMenuByUserId(id);
List<SysMenu> sysMenuList;
if (StrUtil.isBlank(id)) {
LambdaQueryWrapper<SysMenu> queryWrapper =
new LambdaQueryWrapper<>();
sysMenuList = this.list(queryWrapper.eq(SysMenu::getIsdisplay, "1").ne(SysMenu::getType, "2").eq(SysMenu::getSystemcode, "1").orderByAsc(SysMenu::getOrderno));
sysMenuList = this.list(queryWrapper.eq(SysMenu::getIsdisplay, "1")
.ne(SysMenu::getType, "2")
// .eq(SysMenu::getSystemcode, "1")
.eq(StrUtil.isNotBlank(tenantId), SysMenu::getTenantId, tenantId)
.orderByAsc(SysMenu::getOrderno));
} else {
sysMenuList = sysMenuMapper.selectMenuByUserId(id);
sysMenuList = sysMenuMapper.selectMenuByUserId(id, tenantId);
}
// SysMenu 转换为 Map 并构建树
List<Map<String, Object>> list = sysMenuList.stream()
@ -451,7 +474,7 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
* 返回值说明: 菜单结构树集合
***********************************/
@Override
public List<Map<String, Object>> permissionAssignment(String code,String roleId) {
public List<Map<String, Object>> permissionAssignment(String code, String roleId, String tenantId) {
// String code = sysMenuMapper.getSystemCodeById(roleId);
// if (code == null) {
@ -459,13 +482,13 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
// }
LambdaQueryWrapper<SysMenu> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(SysMenu::getSystemcode, code).select(SysMenu::getId,
SysMenu::getParentid, SysMenu::getName).orderByAsc
SysMenu::getParentid, SysMenu::getName).eq(StrUtil.isNotBlank(tenantId), SysMenu::getTenantId, tenantId).orderByAsc
(SysMenu::getOrderno);
List<Map<String, Object>> mapList =
sysMenuMapper.selectMaps(queryWrapper);
List<Map<String, Object>> listAll = ObjectConverterUtil.convertMapFieldsToEntityFormat(SysMenu.class, mapList);
List<String> listRole =
sysMenuMapper.selectMenuByRoleId(roleId);
sysMenuMapper.selectMenuByRoleId(roleId, tenantId);
for (Map<String, Object> map : listAll) {
String id = (String) map.get("id");
if (listRole.contains(id)) {

View File

@ -56,7 +56,8 @@ public class SysOrganizationServiceImpl extends ServiceImpl<SysOrganizationMappe
***********************************/
@Override
public List<Map<String, Object>> getOrgTree(String parentid,
String params) {
String params,
String tenantId) {
SysUser userInfo = userService.getUserInfo();
// 构建权限过滤条件
@ -75,7 +76,9 @@ public class SysOrganizationServiceImpl extends ServiceImpl<SysOrganizationMappe
allowedOrgIds.addAll(stringList);
// 查询这些组织的父级ID
List<SysOrganization> list = sysOrganizationMapper.selectList(
new LambdaQueryWrapper<SysOrganization>().in(SysOrganization::getId, stringList));
new LambdaQueryWrapper<SysOrganization>()
.in(SysOrganization::getId, stringList)
.eq(StrUtil.isNotBlank(tenantId), SysOrganization::getTenantId, tenantId));
for (SysOrganization org : list) {
if (org.getParentid() != null) {
allowedOrgIds.add(org.getParentid());
@ -90,6 +93,9 @@ public class SysOrganizationServiceImpl extends ServiceImpl<SysOrganizationMappe
if (!allowedOrgIds.isEmpty()) {
queryWrapper.in("id", allowedOrgIds);
}
if (StrUtil.isNotBlank(tenantId)) {
queryWrapper.eq("tenant_id", tenantId);
}
if (StrUtil.isNotEmpty(params)) {
queryWrapper.like("orgname", params);
}
@ -189,13 +195,18 @@ public class SysOrganizationServiceImpl extends ServiceImpl<SysOrganizationMappe
queryWrapper.select("max(orgcode)");
if (StrUtil.isNotEmpty(sysOrganization.getParentid())) {
//根据父级id查询父级信息
parent = this.getById(sysOrganization.getParentid());
parent = this.getOne(new LambdaQueryWrapper<SysOrganization>()
.eq(SysOrganization::getId, sysOrganization.getParentid())
.eq(StrUtil.isNotBlank(sysOrganization.getTenantId()), SysOrganization::getTenantId, sysOrganization.getTenantId()));
queryWrapper.eq("parentid", sysOrganization.getParentid());
} else {
//默认 填写父级id为0
sysOrganization.setParentid("0");
queryWrapper.eq("parentid", "0");
}
if (StrUtil.isNotBlank(sysOrganization.getTenantId())) {
queryWrapper.eq("tenant_id", sysOrganization.getTenantId());
}
List<Object> max = this.listObjs(queryWrapper);
//判断查询是否存在 存在转换成 int 类型并给 codeMax 替换值
if (!max.isEmpty() && max.getFirst() != null) {
@ -233,7 +244,8 @@ public class SysOrganizationServiceImpl extends ServiceImpl<SysOrganizationMappe
***********************************/
@Override
public List<SysOrganization> getOrganizationById(String id,
String orgName) {
String orgName,
String tenantId) {
SysUser userInfo = userService.getUserInfo();
// 收集所有允许的组织ID
@ -258,6 +270,7 @@ public class SysOrganizationServiceImpl extends ServiceImpl<SysOrganizationMappe
// 构建查询条件
LambdaQueryWrapper<SysOrganization> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(SysOrganization::getParentid, id);
queryWrapper.eq(StrUtil.isNotBlank(tenantId), SysOrganization::getTenantId, tenantId);
if (StrUtil.isNotBlank(orgName)) {
queryWrapper.like(SysOrganization::getOrgname, orgName);
@ -281,7 +294,7 @@ public class SysOrganizationServiceImpl extends ServiceImpl<SysOrganizationMappe
* 返回值说明: 组织树集合
***********************************/
@Override
public List<Map<String, Object>> getOrgScopeTree(String roleId) {
public List<Map<String, Object>> getOrgScopeTree(String roleId, String tenantId) {
LambdaQueryWrapper<SysOrganization> queryWrapper = new LambdaQueryWrapper<>();
if(!"admin".equals(SecurityUtils.getCurrentUsername())){
@ -300,11 +313,17 @@ public class SysOrganizationServiceImpl extends ServiceImpl<SysOrganizationMappe
queryWrapper.in(SysOrganization::getId, ids);
}
queryWrapper.eq(SysOrganization::getIsvaild, '1');
queryWrapper.eq(StrUtil.isNotBlank(tenantId), SysOrganization::getTenantId, tenantId);
queryWrapper.orderByAsc(SysOrganization::getOrgcode);
List<Map<String, Object>> mapList = this.listMaps(queryWrapper);
List<Map<String, Object>> listMaps = ObjectConverterUtil.convertMapFieldsToEntityFormat(SysOrganization.class, mapList);
// 获取当前角色
SysRole sysRole = sysRoleMapper.selectById(roleId);
SysRole sysRole = sysRoleMapper.selectOne(new QueryWrapper<SysRole>()
.eq("id", roleId)
.eq(StrUtil.isNotBlank(tenantId), "tenant_id", tenantId));
if (sysRole == null) {
return new ArrayList<>();
}
String orgscope = sysRole.getOrgscope();
List<String> ids = new ArrayList<>();
if (StrUtil.isNotBlank(orgscope)) {

View File

@ -47,6 +47,7 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
int codeMax = 0;
DecimalFormat df = new DecimalFormat("000");//四位数字编号
QueryWrapper<SysRole> queryWrapper = new QueryWrapper<>();
queryWrapper.eq(StringUtils.isNotBlank(sysRole.getTenantId()), "tenant_id", sysRole.getTenantId());
List<Object> max = this.listObjs(queryWrapper.select("MAX(rolecode) " +
"rolecode"));// 查询最大的编号
// 存在转换成 int 类型并给 codeMax 替换值
@ -140,9 +141,9 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
@Override
public List<Map> listRoleUsers(String orgid, String username,
String status, String level,
String rolename, String isvaild) {
String rolename, String isvaild, String tenantId) {
return roleMapper.listRoleUsers(orgid, username, status, level,
rolename, isvaild);
rolename, isvaild, tenantId);
}
/***********************************
@ -167,8 +168,8 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
}
@Override
public List<SysRole> selectRoleList(String rolename) {
return roleMapper.selectRoleList(rolename);
public List<SysRole> selectRoleList(String rolename, String tenantId) {
return roleMapper.selectRoleList(rolename, tenantId);
}
}

View File

@ -567,9 +567,10 @@ public class UserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impleme
@Override
public Page<SysUser> queryUsers(String orgid,
String username,
String tenantId,
Page<SysUser> page) {
Page<SysUser> mapPage = sysUserMapper.queryUsers(orgid,
username, page);
username, tenantId, page);
mapPage.getRecords().forEach(record -> {
String id = record.getId();
List<SysRole> sysRoles = sysRoleMapper.getRoleByUserId(id);
@ -651,10 +652,11 @@ public class UserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impleme
}
@Override
public Page<SysUser> queryPendingAuditUsers(Page<SysUser> page, String name, String regStatus) {
public Page<SysUser> queryPendingAuditUsers(Page<SysUser> page, String name, String regStatus, String tenantId) {
LambdaQueryWrapper<SysUser> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.in(SysUser::getRegStatus, "PENDING", "APPROVED", "REJECTED");
queryWrapper.eq(ObjectUtil.isNotEmpty(regStatus), SysUser::getRegStatus, regStatus);
queryWrapper.eq(StrUtil.isNotBlank(tenantId), SysUser::getTenantId, tenantId);
queryWrapper.and(StrUtil.isNotBlank(name), wrapper ->
wrapper.like(SysUser::getNickname, name)
.or()

View File

@ -4,12 +4,26 @@
<mapper namespace="com.yfd.platform.system.mapper.SysMenuMapper">
<!-- 向上调整序号 根据父级id 序号小于原序号 并且 大于等于替换序号-->
<update id="upMoveOrderno">
update sys_menu set orderno=orderno+1 where parentid=#{parentid} and orderno &lt; #{Orderno} and orderno &gt;= #{upOrderno}
update sys_menu
set orderno=orderno+1
where parentid=#{parentid}
and orderno &lt; #{Orderno}
and orderno &gt;= #{upOrderno}
<if test="tenantId != null and tenantId != ''">
and tenant_id = #{tenantId}
</if>
</update>
<!-- 向下调整序号 根据父级id 序号大于原序号 并且 小于等于替换序号-->
<update id="downMoveOrderno">
update sys_menu SET orderno=orderno-1 where parentid=#{parentid} and orderno &gt; #{Orderno} and orderno &lt;= #{downOrderno}
update sys_menu
SET orderno=orderno-1
where parentid=#{parentid}
and orderno &gt; #{Orderno}
and orderno &lt;= #{downOrderno}
<if test="tenantId != null and tenantId != ''">
and tenant_id = #{tenantId}
</if>
</update>
<select id="selectPermsByUserId" resultType="java.lang.String">
@ -47,6 +61,10 @@
WHERE
r.isvaild = 1
AND ru.userid = #{userId}
<if test="tenantId != null and tenantId != ''">
AND m.tenant_id = #{tenantId}
AND r.tenant_id = #{tenantId}
</if>
AND m.isdisplay=1
AND m.type != 2
ORDER BY
@ -63,6 +81,9 @@
WHERE
m.isdisplay = 1
AND rm.roleid= #{id}
<if test="tenantId != null and tenantId != ''">
AND m.tenant_id = #{tenantId}
</if>
ORDER BY
m.orderno ASC
</select>

View File

@ -86,6 +86,10 @@
<if test="isvaild != null">
and c.isvaild=#{isvaild}
</if>
<if test="tenantId != null and tenantId != ''">
and b.tenant_id = #{tenantId}
and c.tenant_id = #{tenantId}
</if>
ORDER BY c.level,b.orgid,b.code
</select>
<!--根据用户id获取角色信息-->
@ -129,6 +133,9 @@
<if test="rolename != null and rolename != ''">
AND r.rolename LIKE '%' || #{rolename} || '%'
</if>
<if test="tenantId != null and tenantId != ''">
AND r.tenant_id = #{tenantId}
</if>
AND r."LEVEL" != '1'
</where>
ORDER BY r."LEVEL" ASC, lastmodifydate ASC

View File

@ -67,6 +67,7 @@
u.phone,
u.avatar,
u.orgid,
u.tenant_id AS tenantId,
u.status,
u.lastmodifier,
u.lastmodifydate
@ -82,6 +83,9 @@
<if test="username != null">
and u.username LIKE '%' || #{username} || '%'
</if>
<if test="tenantId != null and tenantId != ''">
and u.tenant_id = #{tenantId}
</if>
ORDER BY u.lastmodifydate DESC
</select>
<select id="getOrganizationByid" resultType="java.util.Map">