Merge branch 'main' into dev-lilin

This commit is contained in:
lilin 2026-06-17 11:47:24 +08:00
commit 94c189c8df
434 changed files with 64330 additions and 1383586 deletions

View File

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

View File

@ -122,11 +122,19 @@ public class SwaggerConfig {
@Bean @Bean
public GroupedOpenApi groupEnvFprApi() { public GroupedOpenApi groupEnvFprApi() {
return GroupedOpenApi.builder() return GroupedOpenApi.builder()
.group("3.5 全过程-生态环保数据服务-鱼类调查") .group("3.6 全过程-生态环保数据服务-鱼类调查")
.packagesToScan("com.yfd.platform.qgc_env.fpr.controller") .packagesToScan("com.yfd.platform.qgc_env.fpr.controller")
.build(); .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.DataSourceRequest;
import com.yfd.platform.common.DataSourceResult; import com.yfd.platform.common.DataSourceResult;
import com.yfd.platform.config.ResponseResult; 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.EngEqIntervalVo;
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqMsstbprptVo; import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqMsstbprptVo;
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqRuleVo; import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqRuleVo;
@ -42,6 +43,13 @@ public class EngEqDataController {
return ResponseResult.successData(engEqDataService.getDayKendoListCust(dataSourceRequest)); 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") @PostMapping("/interval/GetKendoListCust")
@Operation(summary = "生态流量达标情况") @Operation(summary = "生态流量达标情况")
public ResponseResult getIntervalKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) { 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.DataSourceRequest;
import com.yfd.platform.common.DataSourceResult; 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.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.EngEqDayIntervalVo;
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqHourIntervalVo; import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqHourIntervalVo;
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqIntervalVo; import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqIntervalVo;
@ -21,6 +22,8 @@ public interface EngEqDataService {
DataSourceResult<EngEqDayDataVo> getDayKendoListCust(DataSourceRequest dataSourceRequest); DataSourceResult<EngEqDayDataVo> getDayKendoListCust(DataSourceRequest dataSourceRequest);
DataSourceResult<EngEqDrtpDataVo> getDrtpKendoListCust(DataSourceRequest dataSourceRequest);
DataSourceResult<EngEqIntervalVo> getIntervalKendoListCust(DataSourceRequest dataSourceRequest); DataSourceResult<EngEqIntervalVo> getIntervalKendoListCust(DataSourceRequest dataSourceRequest);
DataSourceResult<EngEqMsstbprptVo> getMsstbprptList(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.DataSourceLoadOptionsBase;
import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.common.DataSourceRequest;
import com.yfd.platform.common.DataSourceResult; import com.yfd.platform.common.DataSourceResult;
import com.yfd.platform.common.Group;
import com.yfd.platform.common.GroupHelper; import com.yfd.platform.common.GroupHelper;
import com.yfd.platform.common.GroupingInfo; import com.yfd.platform.common.GroupingInfo;
import com.yfd.platform.common.MicroservicDynamicSQLMapper; 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.common.enums.ShowEnum;
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqDataVo; 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.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.EngEqDayIntervalVo;
import com.yfd.platform.qgc_eng.eq.entity.vo.EngFidVo; import com.yfd.platform.qgc_eng.eq.entity.vo.EngFidVo;
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqHourIntervalVo; import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqHourIntervalVo;
@ -70,6 +72,15 @@ public class EngEqDataServiceImpl implements EngEqDataService {
return queryDayGroupList(dataSourceRequest, loadOptions); 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 @Override
public DataSourceResult<EngEqIntervalVo> getIntervalKendoListCust(DataSourceRequest dataSourceRequest) { public DataSourceResult<EngEqIntervalVo> getIntervalKendoListCust(DataSourceRequest dataSourceRequest) {
DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest(); DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest();
@ -742,7 +753,9 @@ public class EngEqDataServiceImpl implements EngEqDataService {
if (Boolean.TRUE.equals(dataSourceRequest.getGroupResultFlat())) { if (Boolean.TRUE.equals(dataSourceRequest.getGroupResultFlat())) {
result.setData((List<EngEqHourIntervalVo>) (List<?>) new GroupHelper().faltGroup(rows, Arrays.asList(groupInfos))); result.setData((List<EngEqHourIntervalVo>) (List<?>) new GroupHelper().faltGroup(rows, Arrays.asList(groupInfos)));
} else { } 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.setTotal(0L);
result.setAggregates(new HashMap<>()); result.setAggregates(new HashMap<>());
@ -897,7 +910,9 @@ public class EngEqDataServiceImpl implements EngEqDataService {
if (Boolean.TRUE.equals(dataSourceRequest.getGroupResultFlat())) { if (Boolean.TRUE.equals(dataSourceRequest.getGroupResultFlat())) {
result.setData((List<EngEqDayIntervalVo>) (List<?>) new GroupHelper().faltGroup(rows, Arrays.asList(groupInfos))); result.setData((List<EngEqDayIntervalVo>) (List<?>) new GroupHelper().faltGroup(rows, Arrays.asList(groupInfos)));
} else { } 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.setTotal(0L);
result.setAggregates(new HashMap<>()); 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, private String buildDayIntervalViewSql(DataSourceRequest.FilterDescriptor filter,
Map<String, Object> paramMap, Map<String, Object> paramMap,
int[] indexHolder) { int[] indexHolder) {
@ -1590,6 +1768,101 @@ public class EngEqDataServiceImpl implements EngEqDataService {
return result; 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, private DataSourceResult<EngEqIntervalVo> queryIntervalDetailList(DataSourceRequest dataSourceRequest,
DataSourceLoadOptionsBase loadOptions) { DataSourceLoadOptionsBase loadOptions) {
Map<String, Object> paramMap = new HashMap<>(); Map<String, Object> paramMap = new HashMap<>();
@ -2683,6 +2956,75 @@ public class EngEqDataServiceImpl implements EngEqDataService {
"WHERE NVL(day.IS_DELETED, 0) = 0"; "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() { private String buildDayRunDaySql() {
return "SELECT run.STCD, TRUNC(run.TM) AS DT, " + 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 " + "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); 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() { private Map<String, String> detailFieldColumns() {
Map<String, String> columns = new LinkedHashMap<>(); Map<String, String> columns = new LinkedHashMap<>();
columns.put("id", "sqr.ID AS id"); columns.put("id", "sqr.ID AS id");
@ -2815,6 +3176,49 @@ public class EngEqDataServiceImpl implements EngEqDataService {
return columns; 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) { private String buildDetailOrderBySql(List<DataSourceRequest.SortDescriptor> sortList) {
if (CollUtil.isEmpty(sortList)) { if (CollUtil.isEmpty(sortList)) {
return " ORDER BY baseStepSort ASC, rvcdStepSort ASC, rstcdStepSort ASC, siteStepSort ASC, tm DESC"; 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); 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) { private String buildEqValueExpr(String paramKey, boolean dateField, Object value) {
if (!dateField || value == null) { if (!dateField || value == null) {
return "#{map." + paramKey + "}"; return "#{map." + paramKey + "}";
@ -3684,6 +4092,83 @@ public class EngEqDataServiceImpl implements EngEqDataService {
return orders.isEmpty() ? "" : " ORDER BY " + String.join(", ", orders); 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; 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())); sql.append(buildSdrvwtsOrderBySql(dataSourceRequest == null ? null : dataSourceRequest.getSort()));
PageInfo pageInfo = loadOptions == null ? null : QgcQueryWrapperUtil.getPageInfo(loadOptions); // PageInfo pageInfo = loadOptions == null ? null : QgcQueryWrapperUtil.getPageInfo(loadOptions);
Page<?> page = pageInfo != null && pageInfo.getHasPageInfo() ? pageInfo.getPage() : null; // 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); List<FhSdrvwtsVo> list = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), paramMap, FhSdrvwtsVo.class);
DataSourceResult<FhSdrvwtsVo> result = new DataSourceResult<>(); DataSourceResult<FhSdrvwtsVo> result = new DataSourceResult<>();
@ -330,8 +331,7 @@ public class FhHabitatServiceImpl implements FhHabitatService {
} }
sql.append(buildSdriverdaysOrderBySql(dataSourceRequest == null ? null : dataSourceRequest.getSort())); sql.append(buildSdriverdaysOrderBySql(dataSourceRequest == null ? null : dataSourceRequest.getSort()));
PageInfo pageInfo = loadOptions == null ? null : QgcQueryWrapperUtil.getPageInfo(loadOptions); Page<?> page = loadOptions == null ? null : QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake());
Page<?> page = pageInfo != null && pageInfo.getHasPageInfo() ? pageInfo.getPage() : null;
List<FhSdriverdayVo> list = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), paramMap, FhSdriverdayVo.class); List<FhSdriverdayVo> list = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), paramMap, FhSdriverdayVo.class);
DataSourceResult<FhSdriverdayVo> result = new DataSourceResult<>(); DataSourceResult<FhSdriverdayVo> result = new DataSourceResult<>();
@ -1744,8 +1744,7 @@ public class FhHabitatServiceImpl implements FhHabitatService {
sql.append(buildStTbYsOrderBySql(dataSourceRequest == null ? null : dataSourceRequest.getSort())); sql.append(buildStTbYsOrderBySql(dataSourceRequest == null ? null : dataSourceRequest.getSort()));
DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest(); DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest();
PageInfo pageInfo = loadOptions == null ? null : QgcQueryWrapperUtil.getPageInfo(loadOptions); Page<?> page = loadOptions == null ? null : QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake());
Page<?> page = pageInfo != null && pageInfo.getHasPageInfo() ? pageInfo.getPage() : null;
List<StTbYsVo> list = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), paramMap, StTbYsVo.class); List<StTbYsVo> list = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), paramMap, StTbYsVo.class);
DataSourceResult<StTbYsVo> result = new DataSourceResult<>(); DataSourceResult<StTbYsVo> result = new DataSourceResult<>();

View File

@ -70,6 +70,18 @@ public class FishPassageController {
return ResponseResult.successData(fpBuildService.processKendoList(dataSourceRequest)); 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") @PostMapping("/vmsstbprpt/GetKendoList")
@Operation(summary = "根据条件查询过鱼设施基础列表") @Operation(summary = "根据条件查询过鱼设施基础列表")
public ResponseResult getVmsstbprptList(@RequestBody DataSourceRequest dataSourceRequest) { 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.DataSourceRequest;
import com.yfd.platform.common.DataSourceResult; 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.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.entity.vo.FpVmsstbprptVo;
public interface FpBuildService { public interface FpBuildService {
@ -11,6 +12,10 @@ public interface FpBuildService {
DataSourceResult<FpVmsstbprptVo> getVmsstbprptList(DataSourceRequest dataSourceRequest); DataSourceResult<FpVmsstbprptVo> getVmsstbprptList(DataSourceRequest dataSourceRequest);
DataSourceResult<FpFishDicVo> getFishDicList(DataSourceRequest dataSourceRequest);
DataSourceResult<FpFishDicVo> getFishDicListByStcd(DataSourceRequest dataSourceRequest);
DataSourceResult<FpVmsstbprptVo> getFpqMsstbprptList(DataSourceRequest dataSourceRequest); DataSourceResult<FpVmsstbprptVo> getFpqMsstbprptList(DataSourceRequest dataSourceRequest);
FpVmsstbprptVo getStInfoByStcd(String stcd); FpVmsstbprptVo getStInfoByStcd(String stcd);

View File

@ -1,21 +1,29 @@
package com.yfd.platform.qgc_env.fp.service.impl; 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.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yfd.platform.common.DataSourceLoadOptionsBase; import com.yfd.platform.common.DataSourceLoadOptionsBase;
import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.common.DataSourceRequest;
import com.yfd.platform.common.DataSourceResult; import com.yfd.platform.common.DataSourceResult;
import com.yfd.platform.common.GroupHelper;
import com.yfd.platform.common.GroupingInfo;
import com.yfd.platform.common.MicroservicDynamicSQLMapper; import com.yfd.platform.common.MicroservicDynamicSQLMapper;
import com.yfd.platform.common.PageInfo; 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.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.entity.vo.FpVmsstbprptVo;
import com.yfd.platform.qgc_env.fp.service.FpBuildService; import com.yfd.platform.qgc_env.fp.service.FpBuildService;
import com.yfd.platform.utils.QgcQueryWrapperUtil; import com.yfd.platform.utils.QgcQueryWrapperUtil;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import org.springframework.util.CollectionUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -28,8 +36,7 @@ public class FpBuildServiceImpl implements FpBuildService {
@Override @Override
public DataSourceResult<FpConstructionSituationVo> processKendoList(DataSourceRequest dataSourceRequest) { public DataSourceResult<FpConstructionSituationVo> processKendoList(DataSourceRequest dataSourceRequest) {
DataSourceLoadOptionsBase loadOptions = dataSourceRequest.toDevRequest(); DataSourceLoadOptionsBase loadOptions = dataSourceRequest.toDevRequest();
PageInfo pageInfo = QgcQueryWrapperUtil.getPageInfo(loadOptions); Page<?> page = loadOptions == null ? null : QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake());
Page<?> page = pageInfo.getHasPageInfo() ? pageInfo.getPage() : null;
String sql = "SELECT t.STTP AS sttpCode, " + String sql = "SELECT t.STTP AS sttpCode, " +
" SUM(CASE WHEN t.DTIN = 1 THEN 1 ELSE 0 END) AS bonusing, " + " 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); 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 @Override
public DataSourceResult<FpVmsstbprptVo> getFpqMsstbprptList(DataSourceRequest dataSourceRequest) { public DataSourceResult<FpVmsstbprptVo> getFpqMsstbprptList(DataSourceRequest dataSourceRequest) {
return queryVmsstbprptList(dataSourceRequest, "FPQ"); return queryVmsstbprptList(dataSourceRequest, "FPQ");
@ -113,6 +212,77 @@ public class FpBuildServiceImpl implements FpBuildService {
return list.getFirst(); 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() { private String buildVmsstbprptBaseSql() {
StringBuilder sql = new StringBuilder(); StringBuilder sql = new StringBuilder();
sql.append("SELECT ") sql.append("SELECT ")
@ -319,6 +489,87 @@ public class FpBuildServiceImpl implements FpBuildService {
return selectMap; 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, private String buildVmsstbprptFilterCondition(DataSourceRequest.FilterDescriptor filter,
Map<String, Object> paramMap, Map<String, Object> paramMap,
int[] indexHolder) { int[] indexHolder) {
@ -345,6 +596,32 @@ public class FpBuildServiceImpl implements FpBuildService {
return String.join(logic, conditions); 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, private String buildVmsstbprptLeafCondition(DataSourceRequest.FilterDescriptor filter,
Map<String, Object> paramMap, Map<String, Object> paramMap,
int[] indexHolder) { 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) { private List<Object> normalizeValues(Object value) {
List<Object> values = new ArrayList<>(); List<Object> values = new ArrayList<>();
if (value instanceof List<?> list) { if (value instanceof List<?> list) {
@ -531,6 +898,76 @@ public class FpBuildServiceImpl implements FpBuildService {
return columnMap.get(field); 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) { private String buildVmsstbprptOrderBySql(List<DataSourceRequest.SortDescriptor> sorts) {
if (sorts == null || sorts.isEmpty()) { if (sorts == null || sorts.isEmpty()) {
return " ORDER BY t.baseStepSort ASC NULLS LAST, t.rvcdStepSort ASC NULLS LAST, " + 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); 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) { private String mapVmsstbprptOuterColumn(String field) {
if (field == null || field.isBlank()) { if (field == null || field.isBlank()) {
return null; return null;

View File

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

View File

@ -201,7 +201,20 @@ public class FprMonitorServiceImpl implements FprMonitorService {
if (StrUtil.isNotBlank(filterSql)) { if (StrUtil.isNotBlank(filterSql)) {
sql.append(" AND ").append(filterSql).append(" "); 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( List<FprZyFishDicVo> list = microservicDynamicSQLMapper.getAllListWithResultType(
sql.toString(), sql.toString(),
paramMap, paramMap,
@ -535,6 +548,8 @@ public class FprMonitorServiceImpl implements FprMonitorService {
"src.DESCRIPTION AS description, " + "src.DESCRIPTION AS description, " +
"src.LOGO AS logo, " + "src.LOGO AS logo, " +
"src.INFFILE AS inffile, " + "src.INFFILE AS inffile, " +
"src.ORDERS, \n" +
"src.VLSR, \n"+
"src.SPAWN_MONTH AS spawnMonth " + "src.SPAWN_MONTH AS spawnMonth " +
"FROM SD_FISHDICTORY_B src " + "FROM SD_FISHDICTORY_B src " +
"LEFT JOIN SD_FISHDICTORY_RLTN_B rel ON src.ID = rel.ZY_FISH_ID " + "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) { if (CollUtil.isEmpty(resultList) || loadOptions == null || loadOptions.getTake() == null || loadOptions.getTake() <= 0) {
return resultList; return resultList;
} }
int start = Math.max(loadOptions.getSkip() == null ? 0 : loadOptions.getSkip(), 0); int page = loadOptions.getSkip() == null ? 1 : loadOptions.getSkip(); // 页码从1开始缺省为1
int end = Math.min(start + loadOptions.getTake(), resultList.size()); // 如果页码 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()) { if (start >= resultList.size()) {
return new ArrayList<>(); return new ArrayList<>();
} }

View File

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

View File

@ -85,4 +85,10 @@ public class SdWtBaseInfoVO implements Serializable {
@Schema(description = "基地流域编码") @Schema(description = "基地流域编码")
private String hbrvcd; 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("eng.STCD AS rstcd, ")
.append("NULL AS stCode, ") .append("NULL AS stCode, ")
.append("NULL AS stName, ") .append("NULL AS stName, ")
.append("eng.LGTD AS lgtd, ")
.append("eng.LTTD AS lttd, ")
.append("eng.DVTP AS dvtp, ") .append("eng.DVTP AS dvtp, ")
.append("hb.ORDER_INDEX AS baseStepSort, ") .append("hb.ORDER_INDEX AS baseStepSort, ")
.append("eng.HBRVCD AS hbrvcd, ") .append("eng.HBRVCD AS hbrvcd, ")
@ -700,8 +702,10 @@ public class SdWtMonitorServiceImpl implements SdWtMonitorService {
.append("eng.DVTP AS dvtp, ") .append("eng.DVTP AS dvtp, ")
.append("CASE WHEN NVL(dw.DTIN, 0) = 1 THEN '已接入' ELSE '未接入' END AS dtinName, ") .append("CASE WHEN NVL(dw.DTIN, 0) = 1 THEN '已接入' ELSE '未接入' END AS dtinName, ")
.append("CASE ") .append("CASE ")
.append("WHEN dw.BLDSTT_CODE IN ('1', '10', '11') THEN '已建' ") .append("WHEN dw.BLDSTT_CODE = 2 THEN '已建' ")
.append("WHEN dw.BLDSTT_CODE IN ('2', '7', '8') 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("ELSE '未建/规划' END AS bldsttCcodeName, ")
.append("dw.BLDSTT_CODE AS bldsttCcode, ") .append("dw.BLDSTT_CODE AS bldsttCcode, ")
.append("eng.HBRVCD AS hbrvcd ") .append("eng.HBRVCD AS hbrvcd ")
@ -733,8 +737,10 @@ public class SdWtMonitorServiceImpl implements SdWtMonitorService {
.append("wt.STCD AS stcd, ") .append("wt.STCD AS stcd, ")
.append("wt.RSTCD AS rstcd, ") .append("wt.RSTCD AS rstcd, ")
.append("CASE ") .append("CASE ")
.append("WHEN wt.BLDSTT_CODE IN ('1', '10', '11') THEN '已建' ") .append("WHEN wt.BLDSTT_CODE = 2 THEN '已建' ")
.append("WHEN wt.BLDSTT_CODE IN ('2', '7', '8') 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("ELSE '未建/规划' END AS bldsttCcodeName, ")
.append("wt.BLDSTT_CODE AS bldsttCcode, ") .append("wt.BLDSTT_CODE AS bldsttCcode, ")
.append("NULL AS stCode, ") .append("NULL AS stCode, ")
@ -1929,7 +1935,7 @@ public class SdWtMonitorServiceImpl implements SdWtMonitorService {
if ("baseStepSort".equals(field)) { if ("baseStepSort".equals(field)) {
orderColumns.add("NVL(baseStepSort, 999999) " + dir + " NULLS LAST"); orderColumns.add("NVL(baseStepSort, 999999) " + dir + " NULLS LAST");
} else if ("rvcdStepSort".equals(field)) { } 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)) { } else if ("rstcdStepSort".equals(field)) {
orderColumns.add("NVL(rstcdStepSort, 999999) " + dir + " NULLS LAST"); orderColumns.add("NVL(rstcdStepSort, 999999) " + dir + " NULLS LAST");
} else if ("siteStepSort".equals(field)) { } 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.IdUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.yfd.platform.config.ResponseResult; import com.yfd.platform.config.ResponseResult;
import com.yfd.platform.system.domain.SysConfig; import com.yfd.platform.system.domain.SysConfig;
import com.yfd.platform.system.service.ISysConfigService; import com.yfd.platform.system.service.ISysConfigService;
@ -38,16 +39,22 @@ public class SysConfigController {
@PostMapping("/getOneById") @PostMapping("/getOneById")
@Operation(summary = "根据id查询全局配置详情记录") @Operation(summary = "根据id查询全局配置详情记录")
@ResponseBody @ResponseBody
public SysConfig getOneById(String id){ public SysConfig getOneById(String id,
return configService.getById(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") @PostMapping("/addConfig")
@Operation(summary = "根据id查询全局配置详情记录") @Operation(summary = "根据id查询全局配置详情记录")
@ResponseBody @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())){ if (StrUtil.isEmpty(config.getId())){
config.setId(IdUtil.fastSimpleUUID()); } config.setId(IdUtil.fastSimpleUUID()); }
config.setTenantId(StrUtil.trimToNull(tenantId));
config.setLastmodifier(userService.getUsername()); config.setLastmodifier(userService.getUsername());
config.setLastmodifydate(new Timestamp(System.currentTimeMillis())); config.setLastmodifydate(new Timestamp(System.currentTimeMillis()));
boolean ok=configService.save(config); boolean ok=configService.save(config);
@ -57,7 +64,15 @@ public class SysConfigController {
@PostMapping("/updateById") @PostMapping("/updateById")
@Operation(summary = "根据id修改全局配置记录") @Operation(summary = "根据id修改全局配置记录")
@ResponseBody @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.setLastmodifier(userService.getUsername());
config.setLastmodifydate(new Timestamp(System.currentTimeMillis())); config.setLastmodifydate(new Timestamp(System.currentTimeMillis()));
boolean ok=configService.updateById(config); boolean ok=configService.updateById(config);

View File

@ -1,5 +1,6 @@
package com.yfd.platform.system.controller; package com.yfd.platform.system.controller;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yfd.platform.annotation.Log; import com.yfd.platform.annotation.Log;
import com.yfd.platform.config.ResponseResult; import com.yfd.platform.config.ResponseResult;
@ -42,10 +43,11 @@ public class SysLogController {
@Operation(summary = "分页查询日志信息") @Operation(summary = "分页查询日志信息")
public ResponseResult getLogList(String username, String optType, public ResponseResult getLogList(String username, String optType,
String startDate, 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, Page<SysLog> sysLogPage = sysLogService.getLogList(username, optType,
startDate, endDate, page); startDate, endDate, page, StrUtil.trimToNull(tenantId));
Map<String, Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();
map.put("list", sysLogPage.getRecords()); map.put("list", sysLogPage.getRecords());
map.put("total", sysLogPage.getTotal()); map.put("total", sysLogPage.getTotal());
@ -65,10 +67,11 @@ public class SysLogController {
public void exportExcel(String username, String optType, public void exportExcel(String username, String optType,
String startDate, String startDate,
String endDate, Page<SysLog> page, 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, Page<SysLog> sysLogPage = sysLogService.getLogList(username, optType,
startDate, endDate, page); startDate, endDate, page, StrUtil.trimToNull(tenantId));
sysLogService.exportExcel(sysLogPage.getRecords(), response); 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.IdUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.yfd.platform.annotation.Log; import com.yfd.platform.annotation.Log;
import com.yfd.platform.config.ResponseResult; import com.yfd.platform.config.ResponseResult;
@ -58,8 +59,9 @@ public class SysMenuController {
@ResponseBody @ResponseBody
public List<Map<String, Object>> getMenuButtonTree(String systemcode, public List<Map<String, Object>> getMenuButtonTree(String systemcode,
String name, String name,
String isdisplay) { String isdisplay,
return sysMenuService.getMenuButtonTree(systemcode, name, 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 @ResponseBody
public List<Map<String, Object>> getMenuTree(String systemcode, public List<Map<String, Object>> getMenuTree(String systemcode,
String name, String name,
String isdisplay) { String isdisplay,
return sysMenuService.getMenuTree(systemcode, name, 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") @PostMapping("/permissionAssignment")
@Operation(summary = "获取分配权限(不含按钮)") @Operation(summary = "获取分配权限(不含按钮)")
@ResponseBody @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)) { if (StrUtil.isBlank(code)) {
code = "1"; code = "1";
} }
return sysMenuService.permissionAssignment(code,roleId); return sysMenuService.permissionAssignment(code, roleId, StrUtil.trimToNull(tenantId));
} }
/********************************** /**********************************
@ -105,13 +109,13 @@ public class SysMenuController {
@GetMapping("/treeRoutes") @GetMapping("/treeRoutes")
@Operation(summary = "获取当前用户菜单结构树") @Operation(summary = "获取当前用户菜单结构树")
@ResponseBody @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(); SysUser userInfo = userService.getUserInfo();
String id = ""; String id = "";
if (0 != userInfo.getUsertype()) { if (0 != userInfo.getUsertype()) {
id = userInfo.getId(); 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") @PostMapping("/getOneById")
@Operation(summary = "根据id查询菜单或按钮详情") @Operation(summary = "根据id查询菜单或按钮详情")
@ResponseBody @ResponseBody
public ResponseResult getOneById(String id) { public ResponseResult getOneById(String id,
SysMenu sysMenu = sysMenuService.getById(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); return ResponseResult.successData(sysMenu);
} }
@ -138,7 +146,9 @@ public class SysMenuController {
@PostMapping("/addMenu") @PostMapping("/addMenu")
@Operation(summary = "新增菜单及按钮") @Operation(summary = "新增菜单及按钮")
@ResponseBody @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); boolean isOk = sysMenuService.addMenu(sysMenu);
if (isOk) { if (isOk) {
return ResponseResult.success(); return ResponseResult.success();
@ -157,7 +167,15 @@ public class SysMenuController {
@PostMapping("/updateById") @PostMapping("/updateById")
@Operation(summary = "修改菜单及按钮") @Operation(summary = "修改菜单及按钮")
@ResponseBody @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.setLastmodifier(userService.getUsername());
sysMenu.setLastmodifydate(new Timestamp(System.currentTimeMillis())); sysMenu.setLastmodifydate(new Timestamp(System.currentTimeMillis()));
boolean isOk = sysMenuService.updateById(sysMenu); boolean isOk = sysMenuService.updateById(sysMenu);
@ -179,7 +197,14 @@ public class SysMenuController {
@PostMapping("/deleteIcon") @PostMapping("/deleteIcon")
@Operation(summary = "根据id删除单个图标") @Operation(summary = "根据id删除单个图标")
@ResponseBody @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); boolean ok = sysMenuService.deleteIcon(id);
if (ok) { if (ok) {
return ResponseResult.success(); return ResponseResult.success();
@ -199,10 +224,11 @@ public class SysMenuController {
@PostMapping("/setIsDisplay") @PostMapping("/setIsDisplay")
@Operation(summary = "更新菜单及按钮是否有效") @Operation(summary = "更新菜单及按钮是否有效")
@ResponseBody @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<>(); UpdateWrapper<SysMenu> updateWrapper = new UpdateWrapper<>();
//根据id 修改是否显示 最近修改人最近修改时间 //根据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( "lastmodifier", userService.getUsername()).set(
"lastmodifydate", "lastmodifydate",
new Timestamp(System.currentTimeMillis())); new Timestamp(System.currentTimeMillis()));
@ -227,8 +253,15 @@ public class SysMenuController {
@ResponseBody @ResponseBody
public ResponseResult moveOrderno(@RequestParam String parentid, public ResponseResult moveOrderno(@RequestParam String parentid,
@RequestParam String id, @RequestParam String id,
@RequestParam int orderno) { @RequestParam int orderno,
boolean ok = sysMenuService.moveOrderno(parentid, id, 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) { if (ok) {
return ResponseResult.success(); return ResponseResult.success();
} else { } else {
@ -246,7 +279,14 @@ public class SysMenuController {
@PostMapping("/deleteById") @PostMapping("/deleteById")
@Operation(summary = "根据id删除菜单或按钮") @Operation(summary = "根据id删除菜单或按钮")
@ResponseBody @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); boolean ok = sysMenuService.deleteById(id);
if (ok) { if (ok) {
return ResponseResult.success(); return ResponseResult.success();
@ -266,13 +306,23 @@ public class SysMenuController {
@Operation(summary = "菜单或按钮切换") @Operation(summary = "菜单或按钮切换")
@ResponseBody @ResponseBody
public ResponseResult changeMenuOrder(@RequestParam String fromId, 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)) { if (StrUtil.isBlank(fromId) || StrUtil.isBlank(toId)) {
return ResponseResult.error("参数为空!"); return ResponseResult.error("参数为空!");
} }
if (fromId.equals(toId)) { if (fromId.equals(toId)) {
return ResponseResult.error("切换失败!"); 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); boolean ok = sysMenuService.changeOderNoById(fromId, toId);
if (ok) { if (ok) {
return ResponseResult.success(); return ResponseResult.success();
@ -290,9 +340,16 @@ public class SysMenuController {
@PostMapping("/uploadIcon") @PostMapping("/uploadIcon")
@Operation(summary = "上传单个图标") @Operation(summary = "上传单个图标")
@ResponseBody @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)) { 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 = String iconname =
System.getProperty("user.dir") + "\\src\\main" + System.getProperty("user.dir") + "\\src\\main" +

View File

@ -51,8 +51,9 @@ public class SysOrganizationController {
@PostMapping("/getOrgScopeTree") @PostMapping("/getOrgScopeTree")
@Operation(summary = "获取组织范围树结构") @Operation(summary = "获取组织范围树结构")
@ResponseBody @ResponseBody
public List<Map<String, Object>> getOrgScopeTree(String roleId) { public List<Map<String, Object>> getOrgScopeTree(String roleId,
return organizationService.getOrgScopeTree(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 = "获取组织结构树") @Operation(summary = "获取组织结构树")
@ResponseBody @ResponseBody
public List<Map<String, Object>> getOrgTree(String parentid, public List<Map<String, Object>> getOrgTree(String parentid,
String params) { String params,
return organizationService.getOrgTree(parentid, 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") @PostMapping("/getOrganizationById")
@Operation(summary = "根据企业ID查询组织信息") @Operation(summary = "根据企业ID查询组织信息")
@ResponseBody @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)) { if (StrUtil.isBlank(id)) {
return ResponseResult.error("查询失败!"); return ResponseResult.error("查询失败!");
} }
List<SysOrganization> sysOrganizations = List<SysOrganization> sysOrganizations =
organizationService.getOrganizationById(id, orgName); organizationService.getOrganizationById(id, orgName, StrUtil.trimToNull(tenantId));
return ResponseResult.successData(sysOrganizations); return ResponseResult.successData(sysOrganizations);
} }
@ -95,8 +98,13 @@ public class SysOrganizationController {
@PostMapping("/getOneById") @PostMapping("/getOneById")
@Operation(summary = "根据ID查询组织详情") @Operation(summary = "根据ID查询组织详情")
@ResponseBody @ResponseBody
public ResponseResult getOneById(String id) { public ResponseResult getOneById(String id,
SysOrganization sysOrganization = organizationService.getById(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); return ResponseResult.successData(sysOrganization);
} }
@ -110,7 +118,8 @@ public class SysOrganizationController {
@PostMapping("/addOrg") @PostMapping("/addOrg")
@Operation(summary = "新增系统组织框架") @Operation(summary = "新增系统组织框架")
@ResponseBody @ResponseBody
public ResponseResult addOrg(@RequestBody SysOrganization sysOrganization) { public ResponseResult addOrg(@RequestBody SysOrganization sysOrganization,
@RequestHeader(value = "Tenant_id", required = false) String tenantId) {
//判断是否是否填写 有效 否则默认为 1 //判断是否是否填写 有效 否则默认为 1
if (StrUtil.isEmpty(sysOrganization.getIsvaild())) { if (StrUtil.isEmpty(sysOrganization.getIsvaild())) {
sysOrganization.setIsvaild("1"); sysOrganization.setIsvaild("1");
@ -118,6 +127,7 @@ public class SysOrganizationController {
if("".equals(sysOrganization.getId())){ if("".equals(sysOrganization.getId())){
sysOrganization.setId(null); sysOrganization.setId(null);
} }
sysOrganization.setTenantId(StrUtil.trimToNull(tenantId));
//填写 当前用户名称 //填写 当前用户名称
sysOrganization.setLastmodifier(userService.getUsername()); sysOrganization.setLastmodifier(userService.getUsername());
//填写 当前日期 //填写 当前日期
@ -141,7 +151,16 @@ public class SysOrganizationController {
@PostMapping("/updateById") @PostMapping("/updateById")
@Operation(summary = "修改系统组织框架") @Operation(summary = "修改系统组织框架")
@ResponseBody @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()); sysOrganization.setLastmodifier(userService.getUsername());
//填写 当前日期 //填写 当前日期
@ -166,10 +185,11 @@ public class SysOrganizationController {
@Operation(summary = "设置组织是否有效") @Operation(summary = "设置组织是否有效")
@ResponseBody @ResponseBody
public ResponseResult setIsValid(@RequestParam String id, 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<>(); UpdateWrapper<SysOrganization> updateWrapper = new UpdateWrapper<>();
//根据id 修改是否有效最近修改人最近修改时间 //根据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", , userService.getUsername()).set("lastmodifydate",
new Timestamp(System.currentTimeMillis())); new Timestamp(System.currentTimeMillis()));
boolean isOk = organizationService.update(updateWrapper); boolean isOk = organizationService.update(updateWrapper);
@ -190,21 +210,34 @@ public class SysOrganizationController {
@PostMapping("/deleteById") @PostMapping("/deleteById")
@Operation(summary = "根据id删除系统组织框架") @Operation(summary = "根据id删除系统组织框架")
@ResponseBody @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(","); String[] orgIds = id.split(",");
for (String orgId : orgIds) { 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 = LambdaQueryWrapper<SysOrganization> queryWrapper =
new LambdaQueryWrapper<>(); new LambdaQueryWrapper<>();
List<SysOrganization> list = 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<String> ids =
list.stream().map(SysOrganization::getId).collect(Collectors.toList()); 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) { if (!isOk) {
continue; continue;
} }
for (String oid : ids) { 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(); 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.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.yfd.platform.annotation.Log; import com.yfd.platform.annotation.Log;
import com.yfd.platform.config.ResponseResult; 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.domain.SysRole;
import com.yfd.platform.system.service.ISysMenuService;
import com.yfd.platform.system.service.ISysRoleService; import com.yfd.platform.system.service.ISysRoleService;
import com.yfd.platform.system.service.IUserService; import com.yfd.platform.system.service.IUserService;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
@ -16,6 +18,7 @@ import org.springframework.web.bind.annotation.*;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import java.sql.Timestamp; import java.sql.Timestamp;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -38,6 +41,9 @@ public class SysRoleController {
@Resource @Resource
private IUserService userService; private IUserService userService;
@Resource
private ISysMenuService sysMenuService;
/*********************************** /***********************************
* 用途说明查询所有角色 * 用途说明查询所有角色
* 参数说明 * 参数说明
@ -47,8 +53,9 @@ public class SysRoleController {
@PostMapping("/list") @PostMapping("/list")
@Operation(summary = "查询所有角色") @Operation(summary = "查询所有角色")
@ResponseBody @ResponseBody
public List<SysRole> list(@RequestParam(required = false) String rolename) { public List<SysRole> list(@RequestParam(required = false) String rolename,
return roleService.selectRoleList(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") @PostMapping("/getOneById")
@Operation(summary = "根据Id获取当个角色") @Operation(summary = "根据Id获取当个角色")
@ResponseBody @ResponseBody
public ResponseResult getOneById(String id) { public ResponseResult getOneById(String id,
SysRole sysRole = roleService.getById(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); return ResponseResult.successData(sysRole);
} }
@ -75,7 +86,9 @@ public class SysRoleController {
@PostMapping("/addRole") @PostMapping("/addRole")
@Operation(summary = "新增角色") @Operation(summary = "新增角色")
@ResponseBody @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); boolean isOk = roleService.addRole(sysRole);
if (isOk) { if (isOk) {
return ResponseResult.success(); return ResponseResult.success();
@ -96,10 +109,11 @@ public class SysRoleController {
@Operation(summary = "分配操作权限") @Operation(summary = "分配操作权限")
@ResponseBody @ResponseBody
public ResponseResult setOptScope(@RequestParam String id, 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<>(); UpdateWrapper<SysRole> updateWrapper = new UpdateWrapper<>();
//根据id 更新权限最近修改人最近修改时间 //根据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( "lastmodifier", userService.getUsername()).set(
"lastmodifydate", LocalDateTime.now()); "lastmodifydate", LocalDateTime.now());
boolean ok = roleService.update(updateWrapper); boolean ok = roleService.update(updateWrapper);
@ -121,13 +135,34 @@ public class SysRoleController {
@PostMapping("/setMenuById") @PostMapping("/setMenuById")
@Operation(summary = "角色菜单权限") @Operation(summary = "角色菜单权限")
@ResponseBody @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)) { if (StrUtil.isBlank(id)) {
return ResponseResult.error("参数为空"); 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)) { if (StrUtil.isBlank(menuIds)) {
return ResponseResult.success(); 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); boolean ok = roleService.setMenuById(id, menuIds);
if (ok) { if (ok) {
return ResponseResult.success(); return ResponseResult.success();
@ -149,10 +184,11 @@ public class SysRoleController {
@Operation(summary = "设置组织范围") @Operation(summary = "设置组织范围")
@ResponseBody @ResponseBody
public ResponseResult setOrgscope(@RequestParam String id, 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<>(); UpdateWrapper<SysRole> updateWrapper = new UpdateWrapper<>();
//根据id 更新组织范围最近修改人最近修改时间 //根据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( "lastmodifier", userService.getUsername()).set(
"lastmodifydate", LocalDateTime.now()); "lastmodifydate", LocalDateTime.now());
boolean ok = roleService.update(updateWrapper); boolean ok = roleService.update(updateWrapper);
@ -175,10 +211,11 @@ public class SysRoleController {
@Operation(summary = "设置业务范围") @Operation(summary = "设置业务范围")
@ResponseBody @ResponseBody
public ResponseResult setBusscope(@RequestParam String id, 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<>(); UpdateWrapper<SysRole> updateWrapper = new UpdateWrapper<>();
//根据id 更新业务范围最近修改人最近修改时间 //根据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( "lastmodifier", userService.getUsername()).set(
"lastmodifydate", LocalDateTime.now()); "lastmodifydate", LocalDateTime.now());
boolean ok = roleService.update(updateWrapper); boolean ok = roleService.update(updateWrapper);
@ -200,7 +237,14 @@ public class SysRoleController {
@PostMapping("/setRoleUsers") @PostMapping("/setRoleUsers")
@Operation(summary = "角色添加用户") @Operation(summary = "角色添加用户")
@ResponseBody @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; boolean isOk = true;
String[] temp = userids.split(","); String[] temp = userids.split(",");
for (String userid : temp) { for (String userid : temp) {
@ -223,7 +267,14 @@ public class SysRoleController {
@Operation(summary = "删除角色用户") @Operation(summary = "删除角色用户")
@ResponseBody @ResponseBody
public ResponseResult deleteRoleUsers(@RequestParam String roleid, 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删除 //根据角色id用户id删除
boolean ok = roleService.deleteRoleUsers(roleid, userids); boolean ok = roleService.deleteRoleUsers(roleid, userids);
if (ok) { if (ok) {
@ -243,10 +294,11 @@ public class SysRoleController {
@PostMapping("/setIsvaild") @PostMapping("/setIsvaild")
@Operation(summary = "设置角色是否有效") @Operation(summary = "设置角色是否有效")
@ResponseBody @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<>(); UpdateWrapper<SysRole> updateWrapper = new UpdateWrapper<>();
//根据id 更新业务范围最近修改人最近修改时间 //根据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", , userService.getUsername()).set("lastmodifydate",
LocalDateTime.now()); LocalDateTime.now());
boolean ok = roleService.update(updateWrapper); boolean ok = roleService.update(updateWrapper);
@ -266,7 +318,15 @@ public class SysRoleController {
@PostMapping("/updateById") @PostMapping("/updateById")
@Operation(summary = "更新角色信息") @Operation(summary = "更新角色信息")
@ResponseBody @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()); sysRole.setLastmodifier(userService.getUsername());
//更新最近修改时间 //更新最近修改时间
@ -289,7 +349,17 @@ public class SysRoleController {
@PostMapping("/deleteById") @PostMapping("/deleteById")
@Operation(summary = "根据id删除角色") @Operation(summary = "根据id删除角色")
@ResponseBody @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); roleService.deleteById(id);
return ResponseResult.success(); return ResponseResult.success();
} }
@ -310,9 +380,10 @@ public class SysRoleController {
@ResponseBody @ResponseBody
public List<Map> listRoleUsers(String orgid, String username, public List<Map> listRoleUsers(String orgid, String username,
String status, String level, 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, 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; package com.yfd.platform.system.controller;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yfd.platform.annotation.Log; import com.yfd.platform.annotation.Log;
import com.yfd.platform.config.ResponseResult; import com.yfd.platform.config.ResponseResult;
@ -41,7 +42,10 @@ public class UserController {
@PostMapping("/addUser") @PostMapping("/addUser")
@Operation(summary = "新增系统用户") @Operation(summary = "新增系统用户")
@ResponseBody @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); Map reslut = userService.addUser(user, roleids);
return ResponseResult.successData(reslut); return ResponseResult.successData(reslut);
} }
@ -51,10 +55,12 @@ public class UserController {
@Operation(summary = "修改用户信息") @Operation(summary = "修改用户信息")
@ResponseBody @ResponseBody
public ResponseResult updateUser(@RequestBody SysUser user, public ResponseResult updateUser(@RequestBody SysUser user,
String roleids) { String roleids,
@RequestHeader(value = "Tenant_id", required = false) String tenantId) {
if (StrUtil.isEmpty(user.getId())) { if (StrUtil.isEmpty(user.getId())) {
return ResponseResult.error("没有用户ID"); return ResponseResult.error("没有用户ID");
} }
user.setTenantId(StrUtil.trimToNull(tenantId));
//填写 当前用户名称 //填写 当前用户名称
user.setLastmodifier(userService.getUsername()); user.setLastmodifier(userService.getUsername());
//填写 当前日期 //填写 当前日期
@ -68,10 +74,12 @@ public class UserController {
@Operation(summary = "查询用户信息") @Operation(summary = "查询用户信息")
@ResponseBody @ResponseBody
public ResponseResult queryUsers(String orgid, 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, Page<SysUser> mapPage = userService.queryUsers(orgid,
username, page); username, StrUtil.trimToNull(tenantId), page);
return ResponseResult.successData(mapPage); return ResponseResult.successData(mapPage);
} }
@ -104,8 +112,12 @@ public class UserController {
@GetMapping("/queryUserById") @GetMapping("/queryUserById")
@Operation(summary = "根据id查询用户信息") @Operation(summary = "根据id查询用户信息")
@ResponseBody @ResponseBody
public ResponseResult queryUserById(String id) { public ResponseResult queryUserById(String id,
SysUser user = userService.getById(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); return ResponseResult.successData(user);
} }
@ -232,8 +244,11 @@ public class UserController {
@GetMapping("/queryPendingAuditUsers") @GetMapping("/queryPendingAuditUsers")
@Operation(summary = "查询待审核用户列表") @Operation(summary = "查询待审核用户列表")
@ResponseBody @ResponseBody
public ResponseResult queryPendingAuditUsers(Page<SysUser> page,String name,String regStatus) { public ResponseResult queryPendingAuditUsers(Page<SysUser> page,
Page<SysUser> result = userService.queryPendingAuditUsers(page,name,regStatus); 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); return ResponseResult.successData(result);
} }
} }

View File

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

View File

@ -83,6 +83,12 @@ public class SysLog implements Serializable {
@TableField("REQUESTIP") @TableField("REQUESTIP")
private String 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; private String isdisplay;
/**
* 租户ID
*/
@TableField("TENANT_ID")
private String tenantId;
/** /**
* 最近修改者 * 最近修改者
*/ */

View File

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

View File

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

View File

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

View File

@ -25,7 +25,10 @@ public interface SysMenuMapper extends BaseMapper<SysMenu> {
*upOrderno 大于等于序号更改的序号加一 *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 小于等于序号更改的序号减一 *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<String> selectPermsByUserId(String userId);
//List<SysMenu> selectMenuByUserId(String userId); //List<SysMenu> selectMenuByUserId(String userId);
List<SysMenu> selectMenuByUserId(String userId); List<SysMenu> selectMenuByUserId(@Param("userId") String userId, @Param("tenantId") String tenantId);
/*********************************** /***********************************
* 用途说明根据权限id查找系统类型 * 用途说明根据权限id查找系统类型
@ -55,5 +61,5 @@ public interface SysMenuMapper extends BaseMapper<SysMenu> {
* 参数说明 id 权限id * 参数说明 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 角色是否有效 * isvaild 角色是否有效
* 返回值说明: 系统用户角色数据集合 * 返回值说明: 系统用户角色数据集合
***********************************/ ***********************************/
List<Map> listRoleUsers(String orgid, String username, String status, List<Map> listRoleUsers(@Param("orgid") String orgid,
String level, String rolename, String isvaild); @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除外 * 用途说明根据 角色id和用户id 删除 admin除外
@ -113,6 +118,6 @@ public interface SysRoleMapper extends BaseMapper<SysRole> {
* 参数说明rolename - 角色名称 * 参数说明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); boolean delInRoleUsersByUserid(@Param("userid") String userid,@Param("roleids")String[] roleids);
Page<SysUser> queryUsers(String orgid, Page<SysUser> queryUsers(@Param("orgid") String orgid,
String username, @Param("username") String username,
@Param("tenantId") String tenantId,
Page<SysUser> page); Page<SysUser> page);
Map<String, String> getOrganizationByid(String id); 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, Page<SysLog> getLogList(String username, String optType,
String startDate, 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 是否显示 * 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 是否显示 * 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,排列序号> * orderMap map<菜单及按钮表id,排列序号>
* 返回值说明: 是否更新成功 * 返回值说明: 是否更新成功
***********************************/ ***********************************/
boolean moveOrderno(String parentid, String id, int orderno); boolean moveOrderno(String parentid, String id, int orderno, String tenantId);
/*********************************** /***********************************
* 用途说明根据id删除菜单或按钮 * 用途说明根据id删除菜单或按钮
@ -85,7 +85,7 @@ public interface ISysMenuService extends IService<SysMenu> {
boolean changeOderNoById(String fromId, String toId); 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 是否显示 * 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; String uploadIcon(MultipartFile icon) throws FileNotFoundException;
} }

View File

@ -24,7 +24,7 @@ public interface ISysOrganizationService extends IService<SysOrganization> {
* params 名称根据名称查询二级 * 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 * 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 *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 角色是否有效 * 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); 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); 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, Page<SysUser> page); Page<SysUser> queryUsers(String orgid, String username, String tenantId, Page<SysUser> page);
/*********************************** /***********************************
* 用途说明根据ID批量删除用户 * 用途说明根据ID批量删除用户
@ -174,6 +174,6 @@ public interface IUserService extends IService<SysUser> {
*page 分页参数 *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.ProceedingJoinPoint;
import org.aspectj.lang.reflect.MethodSignature; import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Service; 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.RequestBody;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException; import java.io.IOException;
import java.lang.reflect.AnnotatedType; import java.lang.reflect.AnnotatedType;
@ -55,7 +58,7 @@ public class SysLogServiceImpl extends ServiceImpl<SysLogMapper, SysLog> impleme
@Override @Override
public Page<SysLog> getLogList(String username, String optType, public Page<SysLog> getLogList(String username, String optType,
String startDate, String startDate,
String endDate, Page<SysLog> page) { String endDate, Page<SysLog> page, String tenantId) {
LambdaQueryWrapper<SysLog> queryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<SysLog> queryWrapper = new LambdaQueryWrapper<>();
// 没有传username就不按此条件查询 // 没有传username就不按此条件查询
@ -72,6 +75,9 @@ public class SysLogServiceImpl extends ServiceImpl<SysLogMapper, SysLog> impleme
if (parseStartDate != null && parseEndDate != null) { if (parseStartDate != null && parseEndDate != null) {
queryWrapper.ge(SysLog::getLogtime, parseStartDate).lt(SysLog::getLogtime, dateTime); queryWrapper.ge(SysLog::getLogtime, parseStartDate).lt(SysLog::getLogtime, dateTime);
} }
if (StrUtil.isNotBlank(tenantId)) {
queryWrapper.eq(SysLog::getTenantId, tenantId);
}
queryWrapper.orderByDesc(SysLog::getLogtime); queryWrapper.orderByDesc(SysLog::getLogtime);
return sysLogMapper.selectPage(page, queryWrapper); return sysLogMapper.selectPage(page, queryWrapper);
@ -152,6 +158,11 @@ public class SysLogServiceImpl extends ServiceImpl<SysLogMapper, SysLog> impleme
log.setUsername(nickname); log.setUsername(nickname);
log.setParams(getParameter(method, joinPoint.getArgs())); log.setParams(getParameter(method, joinPoint.getArgs()));
log.setBrowser(browser); 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()); String operationtype = getOperationtype(signature.getName());
log.setOpttype(operationtype); log.setOpttype(operationtype);
log.setLogtime(new Timestamp(System.currentTimeMillis())); log.setLogtime(new Timestamp(System.currentTimeMillis()));

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,13 +0,0 @@
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>front-process</title>
</head>
<body>
<div id="app"></div>
<script type="module" src="/src/main.ts"></script>
</body>
</html>

File diff suppressed because it is too large Load Diff

View File

@ -1,22 +0,0 @@
{
"name": "front-process",
"private": true,
"version": "0.1.0",
"scripts": {
"dev": "vite --port 5174 --strictPort",
"build": "vue-tsc --noEmit && vite build",
"preview": "vite preview --port 5174 --strictPort"
},
"dependencies": {
"ant-design-vue": "^4.2.6",
"vue": "^3.2.40",
"vue-router": "^4.1.6"
},
"devDependencies": {
"@types/node": "^16.11.7",
"@vitejs/plugin-vue": "^4.0.0",
"typescript": "^4.7.4",
"vite": "^4.0.3",
"vue-tsc": "^0.35.0"
}
}

View File

@ -1,794 +0,0 @@
lockfileVersion: '9.0'
settings:
autoInstallPeers: true
excludeLinksFromLockfile: false
importers:
.:
dependencies:
ant-design-vue:
specifier: ^4.2.6
version: 4.2.6(vue@3.5.30(typescript@4.9.5))
vue:
specifier: ^3.2.40
version: 3.5.30(typescript@4.9.5)
vue-router:
specifier: ^4.1.6
version: 4.6.4(vue@3.5.30(typescript@4.9.5))
devDependencies:
'@types/node':
specifier: ^16.11.7
version: 16.18.126
'@vitejs/plugin-vue':
specifier: ^4.0.0
version: 4.6.2(vite@4.5.14(@types/node@16.18.126))(vue@3.5.30(typescript@4.9.5))
typescript:
specifier: ^4.7.4
version: 4.9.5
vite:
specifier: ^4.0.3
version: 4.5.14(@types/node@16.18.126)
vue-tsc:
specifier: ^0.35.0
version: 0.35.2(typescript@4.9.5)
packages:
'@ant-design/colors@6.0.0':
resolution: {integrity: sha512-qAZRvPzfdWHtfameEGP2Qvuf838NhergR35o+EuVyB5XvSA98xod5r4utvi4TJ3ywmevm290g9nsCG5MryrdWQ==}
'@ant-design/icons-svg@4.4.2':
resolution: {integrity: sha512-vHbT+zJEVzllwP+CM+ul7reTEfBR0vgxFe7+lREAsAA7YGsYpboiq2sQNeQeRvh09GfQgs/GyFEvZpJ9cLXpXA==}
'@ant-design/icons-vue@7.0.1':
resolution: {integrity: sha512-eCqY2unfZK6Fe02AwFlDHLfoyEFreP6rBwAZMIJ1LugmfMiVgwWDYlp1YsRugaPtICYOabV1iWxXdP12u9U43Q==}
peerDependencies:
vue: '>=3.0.3'
'@babel/helper-string-parser@7.27.1':
resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
engines: {node: '>=6.9.0'}
'@babel/helper-validator-identifier@7.28.5':
resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==}
engines: {node: '>=6.9.0'}
'@babel/parser@7.29.2':
resolution: {integrity: sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==}
engines: {node: '>=6.0.0'}
hasBin: true
'@babel/runtime@7.29.2':
resolution: {integrity: sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==}
engines: {node: '>=6.9.0'}
'@babel/types@7.29.0':
resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==}
engines: {node: '>=6.9.0'}
'@ctrl/tinycolor@3.6.1':
resolution: {integrity: sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==}
engines: {node: '>=10'}
'@emotion/hash@0.9.2':
resolution: {integrity: sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==}
'@emotion/unitless@0.8.1':
resolution: {integrity: sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==}
'@esbuild/android-arm64@0.18.20':
resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==}
engines: {node: '>=12'}
cpu: [arm64]
os: [android]
'@esbuild/android-arm@0.18.20':
resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==}
engines: {node: '>=12'}
cpu: [arm]
os: [android]
'@esbuild/android-x64@0.18.20':
resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==}
engines: {node: '>=12'}
cpu: [x64]
os: [android]
'@esbuild/darwin-arm64@0.18.20':
resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==}
engines: {node: '>=12'}
cpu: [arm64]
os: [darwin]
'@esbuild/darwin-x64@0.18.20':
resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==}
engines: {node: '>=12'}
cpu: [x64]
os: [darwin]
'@esbuild/freebsd-arm64@0.18.20':
resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==}
engines: {node: '>=12'}
cpu: [arm64]
os: [freebsd]
'@esbuild/freebsd-x64@0.18.20':
resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==}
engines: {node: '>=12'}
cpu: [x64]
os: [freebsd]
'@esbuild/linux-arm64@0.18.20':
resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==}
engines: {node: '>=12'}
cpu: [arm64]
os: [linux]
'@esbuild/linux-arm@0.18.20':
resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==}
engines: {node: '>=12'}
cpu: [arm]
os: [linux]
'@esbuild/linux-ia32@0.18.20':
resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==}
engines: {node: '>=12'}
cpu: [ia32]
os: [linux]
'@esbuild/linux-loong64@0.18.20':
resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==}
engines: {node: '>=12'}
cpu: [loong64]
os: [linux]
'@esbuild/linux-mips64el@0.18.20':
resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==}
engines: {node: '>=12'}
cpu: [mips64el]
os: [linux]
'@esbuild/linux-ppc64@0.18.20':
resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==}
engines: {node: '>=12'}
cpu: [ppc64]
os: [linux]
'@esbuild/linux-riscv64@0.18.20':
resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==}
engines: {node: '>=12'}
cpu: [riscv64]
os: [linux]
'@esbuild/linux-s390x@0.18.20':
resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==}
engines: {node: '>=12'}
cpu: [s390x]
os: [linux]
'@esbuild/linux-x64@0.18.20':
resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==}
engines: {node: '>=12'}
cpu: [x64]
os: [linux]
'@esbuild/netbsd-x64@0.18.20':
resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==}
engines: {node: '>=12'}
cpu: [x64]
os: [netbsd]
'@esbuild/openbsd-x64@0.18.20':
resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==}
engines: {node: '>=12'}
cpu: [x64]
os: [openbsd]
'@esbuild/sunos-x64@0.18.20':
resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==}
engines: {node: '>=12'}
cpu: [x64]
os: [sunos]
'@esbuild/win32-arm64@0.18.20':
resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==}
engines: {node: '>=12'}
cpu: [arm64]
os: [win32]
'@esbuild/win32-ia32@0.18.20':
resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==}
engines: {node: '>=12'}
cpu: [ia32]
os: [win32]
'@esbuild/win32-x64@0.18.20':
resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==}
engines: {node: '>=12'}
cpu: [x64]
os: [win32]
'@jridgewell/sourcemap-codec@1.5.5':
resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
'@simonwep/pickr@1.8.2':
resolution: {integrity: sha512-/l5w8BIkrpP6n1xsetx9MWPWlU6OblN5YgZZphxan0Tq4BByTCETL6lyIeY8lagalS2Nbt4F2W034KHLIiunKA==}
'@types/node@16.18.126':
resolution: {integrity: sha512-OTcgaiwfGFBKacvfwuHzzn1KLxH/er8mluiy8/uM3sGXHaRe73RrSIj01jow9t4kJEW633Ov+cOexXeiApTyAw==}
'@vitejs/plugin-vue@4.6.2':
resolution: {integrity: sha512-kqf7SGFoG+80aZG6Pf+gsZIVvGSCKE98JbiWqcCV9cThtg91Jav0yvYFC9Zb+jKetNGF6ZKeoaxgZfND21fWKw==}
engines: {node: ^14.18.0 || >=16.0.0}
peerDependencies:
vite: ^4.0.0 || ^5.0.0
vue: ^3.2.25
'@volar/code-gen@0.35.2':
resolution: {integrity: sha512-MoZHuNnPfUWnCNkQUI5+U+gvLTxrU+XlCTusdNOTFYUUAa+M68MH0RxFIS9Ybj4uAUWTcZx0Ow1q5t/PZozo+Q==}
'@volar/source-map@0.35.2':
resolution: {integrity: sha512-PFHh9wN/qMkOWYyvmB8ckvIzolrpNOvK5EBdxxdTpiPJhfYjW82rMDBnYf6RxCe7yQxrUrmve6BWVO7flxWNVQ==}
'@volar/vue-code-gen@0.35.2':
resolution: {integrity: sha512-8H6P8EtN06eSVGjtcJhGqZzFIg6/nWoHVOlnhc5vKqC7tXwpqPbyMQae0tO7pLBd5qSb/dYU5GQcBAHsi2jgyA==}
deprecated: 'WARNING: This project has been renamed to @vue/language-core. Install using @vue/language-core instead.'
'@volar/vue-typescript@0.35.2':
resolution: {integrity: sha512-PZI6Urb+Vr5Dvgf9xysM8X7TP09inWDy1wjDtprBoBhxS7r0Dg3V0qZuJa7sSGz7M0QMa5R/CBaZPhlxFCfJBw==}
deprecated: 'WARNING: This project has been renamed to @vue/typescript. Install using @vue/typescript instead.'
'@vue/compiler-core@3.5.30':
resolution: {integrity: sha512-s3DfdZkcu/qExZ+td75015ljzHc6vE+30cFMGRPROYjqkroYI5NV2X1yAMX9UeyBNWB9MxCfPcsjpLS11nzkkw==}
'@vue/compiler-dom@3.5.30':
resolution: {integrity: sha512-eCFYESUEVYHhiMuK4SQTldO3RYxyMR/UQL4KdGD1Yrkfdx4m/HYuZ9jSfPdA+nWJY34VWndiYdW/wZXyiPEB9g==}
'@vue/compiler-sfc@3.5.30':
resolution: {integrity: sha512-LqmFPDn89dtU9vI3wHJnwaV6GfTRD87AjWpTWpyrdVOObVtjIuSeZr181z5C4PmVx/V3j2p+0f7edFKGRMpQ5A==}
'@vue/compiler-ssr@3.5.30':
resolution: {integrity: sha512-NsYK6OMTnx109PSL2IAyf62JP6EUdk4Dmj6AkWcJGBvN0dQoMYtVekAmdqgTtWQgEJo+Okstbf/1p7qZr5H+bA==}
'@vue/devtools-api@6.6.4':
resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==}
'@vue/reactivity@3.5.30':
resolution: {integrity: sha512-179YNgKATuwj9gB+66snskRDOitDiuOZqkYia7mHKJaidOMo/WJxHKF8DuGc4V4XbYTJANlfEKb0yxTQotnx4Q==}
'@vue/runtime-core@3.5.30':
resolution: {integrity: sha512-e0Z+8PQsUTdwV8TtEsLzUM7SzC7lQwYKePydb7K2ZnmS6jjND+WJXkmmfh/swYzRyfP1EY3fpdesyYoymCzYfg==}
'@vue/runtime-dom@3.5.30':
resolution: {integrity: sha512-2UIGakjU4WSQ0T4iwDEW0W7vQj6n7AFn7taqZ9Cvm0Q/RA2FFOziLESrDL4GmtI1wV3jXg5nMoJSYO66egDUBw==}
'@vue/server-renderer@3.5.30':
resolution: {integrity: sha512-v+R34icapydRwbZRD0sXwtHqrQJv38JuMB4JxbOxd8NEpGLny7cncMp53W9UH/zo4j8eDHjQ1dEJXwzFQknjtQ==}
peerDependencies:
vue: 3.5.30
'@vue/shared@3.5.30':
resolution: {integrity: sha512-YXgQ7JjaO18NeK2K9VTbDHaFy62WrObMa6XERNfNOkAhD1F1oDSf3ZJ7K6GqabZ0BvSDHajp8qfS5Sa2I9n8uQ==}
ant-design-vue@4.2.6:
resolution: {integrity: sha512-t7eX13Yj3i9+i5g9lqFyYneoIb3OzTvQjq9Tts1i+eiOd3Eva/6GagxBSXM1fOCjqemIu0FYVE1ByZ/38epR3Q==}
engines: {node: '>=12.22.0'}
peerDependencies:
vue: '>=3.2.0'
array-tree-filter@2.1.0:
resolution: {integrity: sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw==}
async-validator@4.2.5:
resolution: {integrity: sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==}
compute-scroll-into-view@1.0.20:
resolution: {integrity: sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg==}
core-js@3.49.0:
resolution: {integrity: sha512-es1U2+YTtzpwkxVLwAFdSpaIMyQaq0PBgm3YD1W3Qpsn1NAmO3KSgZfu+oGSWVu6NvLHoHCV/aYcsE5wiB7ALg==}
csstype@3.2.3:
resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==}
dayjs@1.11.20:
resolution: {integrity: sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ==}
dom-align@1.12.4:
resolution: {integrity: sha512-R8LUSEay/68zE5c8/3BDxiTEvgb4xZTF0RKmAHfiEVN3klfIpXfi2/QCoiWPccVQ0J/ZGdz9OjzL4uJEP/MRAw==}
dom-scroll-into-view@2.0.1:
resolution: {integrity: sha512-bvVTQe1lfaUr1oFzZX80ce9KLDlZ3iU+XGNE/bz9HnGdklTieqsbmsLHe+rT2XWqopvL0PckkYqN7ksmm5pe3w==}
entities@7.0.1:
resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==}
engines: {node: '>=0.12'}
esbuild@0.18.20:
resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==}
engines: {node: '>=12'}
hasBin: true
estree-walker@2.0.2:
resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
fsevents@2.3.3:
resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
os: [darwin]
is-plain-object@3.0.1:
resolution: {integrity: sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==}
engines: {node: '>=0.10.0'}
js-tokens@4.0.0:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
lodash-es@4.17.23:
resolution: {integrity: sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg==}
lodash@4.17.23:
resolution: {integrity: sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==}
loose-envify@1.4.0:
resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
hasBin: true
magic-string@0.30.21:
resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==}
nanoid@3.3.11:
resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
nanopop@2.4.2:
resolution: {integrity: sha512-NzOgmMQ+elxxHeIha+OG/Pv3Oc3p4RU2aBhwWwAqDpXrdTbtRylbRLQztLy8dMMwfl6pclznBdfUhccEn9ZIzw==}
picocolors@1.1.1:
resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
postcss@8.5.8:
resolution: {integrity: sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==}
engines: {node: ^10 || ^12 || >=14}
resize-observer-polyfill@1.5.1:
resolution: {integrity: sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==}
rollup@3.30.0:
resolution: {integrity: sha512-kQvGasUgN+AlWGliFn2POSajRQEsULVYFGTvOZmK06d7vCD+YhZztt70kGk3qaeAXeWYL5eO7zx+rAubBc55eA==}
engines: {node: '>=14.18.0', npm: '>=8.0.0'}
hasBin: true
scroll-into-view-if-needed@2.2.31:
resolution: {integrity: sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA==}
shallow-equal@1.2.1:
resolution: {integrity: sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA==}
source-map-js@1.2.1:
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
engines: {node: '>=0.10.0'}
stylis@4.3.6:
resolution: {integrity: sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==}
throttle-debounce@5.0.2:
resolution: {integrity: sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A==}
engines: {node: '>=12.22'}
typescript@4.9.5:
resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
engines: {node: '>=4.2.0'}
hasBin: true
vite@4.5.14:
resolution: {integrity: sha512-+v57oAaoYNnO3hIu5Z/tJRZjq5aHM2zDve9YZ8HngVHbhk66RStobhb1sqPMIPEleV6cNKYK4eGrAbE9Ulbl2g==}
engines: {node: ^14.18.0 || >=16.0.0}
hasBin: true
peerDependencies:
'@types/node': '>= 14'
less: '*'
lightningcss: ^1.21.0
sass: '*'
stylus: '*'
sugarss: '*'
terser: ^5.4.0
peerDependenciesMeta:
'@types/node':
optional: true
less:
optional: true
lightningcss:
optional: true
sass:
optional: true
stylus:
optional: true
sugarss:
optional: true
terser:
optional: true
vue-router@4.6.4:
resolution: {integrity: sha512-Hz9q5sa33Yhduglwz6g9skT8OBPii+4bFn88w6J+J4MfEo4KRRpmiNG/hHHkdbRFlLBOqxN8y8gf2Fb0MTUgVg==}
peerDependencies:
vue: ^3.5.0
vue-tsc@0.35.2:
resolution: {integrity: sha512-aqY16VlODHzqtKGUkqdumNpH+s5ABCkufRyvMKQlL/mua+N2DfSVnHufzSNNUMr7vmOO0YsNg27jsspBMq4iGA==}
hasBin: true
peerDependencies:
typescript: '*'
vue-types@3.0.2:
resolution: {integrity: sha512-IwUC0Aq2zwaXqy74h4WCvFCUtoV0iSWr0snWnE9TnU18S66GAQyqQbRf2qfJtUuiFsBf6qp0MEwdonlwznlcrw==}
engines: {node: '>=10.15.0'}
peerDependencies:
vue: ^3.0.0
vue@3.5.30:
resolution: {integrity: sha512-hTHLc6VNZyzzEH/l7PFGjpcTvUgiaPK5mdLkbjrTeWSRcEfxFrv56g/XckIYlE9ckuobsdwqd5mk2g1sBkMewg==}
peerDependencies:
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
warning@4.0.3:
resolution: {integrity: sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==}
snapshots:
'@ant-design/colors@6.0.0':
dependencies:
'@ctrl/tinycolor': 3.6.1
'@ant-design/icons-svg@4.4.2': {}
'@ant-design/icons-vue@7.0.1(vue@3.5.30(typescript@4.9.5))':
dependencies:
'@ant-design/colors': 6.0.0
'@ant-design/icons-svg': 4.4.2
vue: 3.5.30(typescript@4.9.5)
'@babel/helper-string-parser@7.27.1': {}
'@babel/helper-validator-identifier@7.28.5': {}
'@babel/parser@7.29.2':
dependencies:
'@babel/types': 7.29.0
'@babel/runtime@7.29.2': {}
'@babel/types@7.29.0':
dependencies:
'@babel/helper-string-parser': 7.27.1
'@babel/helper-validator-identifier': 7.28.5
'@ctrl/tinycolor@3.6.1': {}
'@emotion/hash@0.9.2': {}
'@emotion/unitless@0.8.1': {}
'@esbuild/android-arm64@0.18.20':
optional: true
'@esbuild/android-arm@0.18.20':
optional: true
'@esbuild/android-x64@0.18.20':
optional: true
'@esbuild/darwin-arm64@0.18.20':
optional: true
'@esbuild/darwin-x64@0.18.20':
optional: true
'@esbuild/freebsd-arm64@0.18.20':
optional: true
'@esbuild/freebsd-x64@0.18.20':
optional: true
'@esbuild/linux-arm64@0.18.20':
optional: true
'@esbuild/linux-arm@0.18.20':
optional: true
'@esbuild/linux-ia32@0.18.20':
optional: true
'@esbuild/linux-loong64@0.18.20':
optional: true
'@esbuild/linux-mips64el@0.18.20':
optional: true
'@esbuild/linux-ppc64@0.18.20':
optional: true
'@esbuild/linux-riscv64@0.18.20':
optional: true
'@esbuild/linux-s390x@0.18.20':
optional: true
'@esbuild/linux-x64@0.18.20':
optional: true
'@esbuild/netbsd-x64@0.18.20':
optional: true
'@esbuild/openbsd-x64@0.18.20':
optional: true
'@esbuild/sunos-x64@0.18.20':
optional: true
'@esbuild/win32-arm64@0.18.20':
optional: true
'@esbuild/win32-ia32@0.18.20':
optional: true
'@esbuild/win32-x64@0.18.20':
optional: true
'@jridgewell/sourcemap-codec@1.5.5': {}
'@simonwep/pickr@1.8.2':
dependencies:
core-js: 3.49.0
nanopop: 2.4.2
'@types/node@16.18.126': {}
'@vitejs/plugin-vue@4.6.2(vite@4.5.14(@types/node@16.18.126))(vue@3.5.30(typescript@4.9.5))':
dependencies:
vite: 4.5.14(@types/node@16.18.126)
vue: 3.5.30(typescript@4.9.5)
'@volar/code-gen@0.35.2':
dependencies:
'@volar/source-map': 0.35.2
'@volar/source-map@0.35.2': {}
'@volar/vue-code-gen@0.35.2':
dependencies:
'@volar/code-gen': 0.35.2
'@volar/source-map': 0.35.2
'@vue/compiler-core': 3.5.30
'@vue/compiler-dom': 3.5.30
'@vue/shared': 3.5.30
'@volar/vue-typescript@0.35.2':
dependencies:
'@volar/code-gen': 0.35.2
'@volar/source-map': 0.35.2
'@volar/vue-code-gen': 0.35.2
'@vue/compiler-sfc': 3.5.30
'@vue/reactivity': 3.5.30
'@vue/compiler-core@3.5.30':
dependencies:
'@babel/parser': 7.29.2
'@vue/shared': 3.5.30
entities: 7.0.1
estree-walker: 2.0.2
source-map-js: 1.2.1
'@vue/compiler-dom@3.5.30':
dependencies:
'@vue/compiler-core': 3.5.30
'@vue/shared': 3.5.30
'@vue/compiler-sfc@3.5.30':
dependencies:
'@babel/parser': 7.29.2
'@vue/compiler-core': 3.5.30
'@vue/compiler-dom': 3.5.30
'@vue/compiler-ssr': 3.5.30
'@vue/shared': 3.5.30
estree-walker: 2.0.2
magic-string: 0.30.21
postcss: 8.5.8
source-map-js: 1.2.1
'@vue/compiler-ssr@3.5.30':
dependencies:
'@vue/compiler-dom': 3.5.30
'@vue/shared': 3.5.30
'@vue/devtools-api@6.6.4': {}
'@vue/reactivity@3.5.30':
dependencies:
'@vue/shared': 3.5.30
'@vue/runtime-core@3.5.30':
dependencies:
'@vue/reactivity': 3.5.30
'@vue/shared': 3.5.30
'@vue/runtime-dom@3.5.30':
dependencies:
'@vue/reactivity': 3.5.30
'@vue/runtime-core': 3.5.30
'@vue/shared': 3.5.30
csstype: 3.2.3
'@vue/server-renderer@3.5.30(vue@3.5.30(typescript@4.9.5))':
dependencies:
'@vue/compiler-ssr': 3.5.30
'@vue/shared': 3.5.30
vue: 3.5.30(typescript@4.9.5)
'@vue/shared@3.5.30': {}
ant-design-vue@4.2.6(vue@3.5.30(typescript@4.9.5)):
dependencies:
'@ant-design/colors': 6.0.0
'@ant-design/icons-vue': 7.0.1(vue@3.5.30(typescript@4.9.5))
'@babel/runtime': 7.29.2
'@ctrl/tinycolor': 3.6.1
'@emotion/hash': 0.9.2
'@emotion/unitless': 0.8.1
'@simonwep/pickr': 1.8.2
array-tree-filter: 2.1.0
async-validator: 4.2.5
csstype: 3.2.3
dayjs: 1.11.20
dom-align: 1.12.4
dom-scroll-into-view: 2.0.1
lodash: 4.17.23
lodash-es: 4.17.23
resize-observer-polyfill: 1.5.1
scroll-into-view-if-needed: 2.2.31
shallow-equal: 1.2.1
stylis: 4.3.6
throttle-debounce: 5.0.2
vue: 3.5.30(typescript@4.9.5)
vue-types: 3.0.2(vue@3.5.30(typescript@4.9.5))
warning: 4.0.3
array-tree-filter@2.1.0: {}
async-validator@4.2.5: {}
compute-scroll-into-view@1.0.20: {}
core-js@3.49.0: {}
csstype@3.2.3: {}
dayjs@1.11.20: {}
dom-align@1.12.4: {}
dom-scroll-into-view@2.0.1: {}
entities@7.0.1: {}
esbuild@0.18.20:
optionalDependencies:
'@esbuild/android-arm': 0.18.20
'@esbuild/android-arm64': 0.18.20
'@esbuild/android-x64': 0.18.20
'@esbuild/darwin-arm64': 0.18.20
'@esbuild/darwin-x64': 0.18.20
'@esbuild/freebsd-arm64': 0.18.20
'@esbuild/freebsd-x64': 0.18.20
'@esbuild/linux-arm': 0.18.20
'@esbuild/linux-arm64': 0.18.20
'@esbuild/linux-ia32': 0.18.20
'@esbuild/linux-loong64': 0.18.20
'@esbuild/linux-mips64el': 0.18.20
'@esbuild/linux-ppc64': 0.18.20
'@esbuild/linux-riscv64': 0.18.20
'@esbuild/linux-s390x': 0.18.20
'@esbuild/linux-x64': 0.18.20
'@esbuild/netbsd-x64': 0.18.20
'@esbuild/openbsd-x64': 0.18.20
'@esbuild/sunos-x64': 0.18.20
'@esbuild/win32-arm64': 0.18.20
'@esbuild/win32-ia32': 0.18.20
'@esbuild/win32-x64': 0.18.20
estree-walker@2.0.2: {}
fsevents@2.3.3:
optional: true
is-plain-object@3.0.1: {}
js-tokens@4.0.0: {}
lodash-es@4.17.23: {}
lodash@4.17.23: {}
loose-envify@1.4.0:
dependencies:
js-tokens: 4.0.0
magic-string@0.30.21:
dependencies:
'@jridgewell/sourcemap-codec': 1.5.5
nanoid@3.3.11: {}
nanopop@2.4.2: {}
picocolors@1.1.1: {}
postcss@8.5.8:
dependencies:
nanoid: 3.3.11
picocolors: 1.1.1
source-map-js: 1.2.1
resize-observer-polyfill@1.5.1: {}
rollup@3.30.0:
optionalDependencies:
fsevents: 2.3.3
scroll-into-view-if-needed@2.2.31:
dependencies:
compute-scroll-into-view: 1.0.20
shallow-equal@1.2.1: {}
source-map-js@1.2.1: {}
stylis@4.3.6: {}
throttle-debounce@5.0.2: {}
typescript@4.9.5: {}
vite@4.5.14(@types/node@16.18.126):
dependencies:
esbuild: 0.18.20
postcss: 8.5.8
rollup: 3.30.0
optionalDependencies:
'@types/node': 16.18.126
fsevents: 2.3.3
vue-router@4.6.4(vue@3.5.30(typescript@4.9.5)):
dependencies:
'@vue/devtools-api': 6.6.4
vue: 3.5.30(typescript@4.9.5)
vue-tsc@0.35.2(typescript@4.9.5):
dependencies:
'@volar/vue-typescript': 0.35.2
typescript: 4.9.5
vue-types@3.0.2(vue@3.5.30(typescript@4.9.5)):
dependencies:
is-plain-object: 3.0.1
vue: 3.5.30(typescript@4.9.5)
vue@3.5.30(typescript@4.9.5):
dependencies:
'@vue/compiler-dom': 3.5.30
'@vue/compiler-sfc': 3.5.30
'@vue/runtime-dom': 3.5.30
'@vue/server-renderer': 3.5.30(vue@3.5.30(typescript@4.9.5))
'@vue/shared': 3.5.30
optionalDependencies:
typescript: 4.9.5
warning@4.0.3:
dependencies:
loose-envify: 1.4.0

View File

@ -1,14 +0,0 @@
{
"name": "process",
"version": "0.1.0",
"entry": "/process/",
"routeBase": "/process",
"routes": [
{
"path": "/process/antd-demo",
"title": "AntD Demo",
"perm": "process:demo:view"
}
]
}

View File

@ -1,4 +0,0 @@
<template>
<router-view />
</template>

View File

@ -1,8 +0,0 @@
import { createApp } from 'vue';
import App from './App.vue';
import router from './router';
import Antd from 'ant-design-vue';
import 'ant-design-vue/dist/reset.css';
createApp(App).use(router).use(Antd).mount('#app');

View File

@ -1,19 +0,0 @@
import { createRouter, createWebHistory, RouteRecordRaw } from 'vue-router';
import Demo from '../views/Demo.vue';
const routes: RouteRecordRaw[] = [
{
path: '/',
redirect: '/antd-demo'
},
{
path: '/antd-demo',
component: Demo
}
];
export default createRouter({
history: createWebHistory('/process/'),
routes
});

View File

@ -1,49 +0,0 @@
<template>
<div style="padding: 24px">
<a-typography-title :level="3" style="margin: 0 0 12px 0">
Ant Design Vue Demofront-process
</a-typography-title>
<a-alert
message="该页面由 front-system 通过 Wujie 挂载展示"
type="success"
show-icon
style="margin-bottom: 16px"
/>
<a-space>
<a-button type="primary" @click="onClick">AntD 按钮</a-button>
<a-tag color="blue">Vue3 + Vite</a-tag>
<a-tag color="green">Ant Design Vue</a-tag>
</a-space>
<a-divider />
<a-card title="示例表格" :bordered="false">
<a-table :columns="columns" :data-source="data" :pagination="false" row-key="id" />
</a-card>
</div>
</template>
<script setup lang="ts">
import type { TableColumnsType } from 'ant-design-vue';
import { message } from 'ant-design-vue';
type Row = { id: number; name: string; status: string };
const columns: TableColumnsType<Row> = [
{ title: 'ID', dataIndex: 'id', key: 'id', width: 80 },
{ title: '名称', dataIndex: 'name', key: 'name' },
{ title: '状态', dataIndex: 'status', key: 'status', width: 120 }
];
const data: Row[] = [
{ id: 1, name: '流程A', status: '启用' },
{ id: 2, name: '流程B', status: '停用' }
];
function onClick() {
message.success('Ant Design Vue 组件工作正常');
}
</script>

View File

@ -1,19 +0,0 @@
{
"compilerOptions": {
"target": "ES2020",
"useDefineForClassFields": true,
"module": "ESNext",
"moduleResolution": "Bundler",
"strict": true,
"jsx": "preserve",
"resolveJsonModule": true,
"isolatedModules": true,
"esModuleInterop": true,
"lib": ["ES2020", "DOM", "DOM.Iterable"],
"skipLibCheck": true,
"types": ["vite/client"],
"noEmit": true
},
"include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"]
}

View File

@ -1,13 +0,0 @@
import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
export default defineConfig({
base: '/process/',
plugins: [vue()],
server: {
host: '0.0.0.0',
port: 5174,
strictPort: true
}
});

View File

@ -0,0 +1,15 @@
# http://editorconfig.org
root = true
[*] # 表示所有文件适用
charset = utf-8 # 设置文件字符集为 utf-8
indent_style = space # 缩进风格tab | space
indent_size = 2 # 缩进大小
end_of_line = lf # 控制换行类型(lf | cr | crlf)
trim_trailing_whitespace = true # 去除行首的任意空白字符
insert_final_newline = true # 始终在文件末尾插入一个新行
[*.md] # 表示仅 md 文件适用以下规则
max_line_length = off
trim_trailing_whitespace = false

View File

@ -0,0 +1,32 @@
## 开发环境
# 变量必须以 VITE_ 为前缀才能暴露给外部读取
NODE_ENV='development'
VITE_APP_TITLE = '水电水利建设项目全过程环境管理信息平台'
VITE_APP_PORT = 3000
VITE_APP_BASE_API = '/dev-api'
# 本地环境
VITE_APP_BASE_URL = 'http://10.84.121.127:8093'
# 测试环境
# VITE_APP_BASE_URL = 'http://172.16.21.142:8093'
# VITE_APP_BASE_URL = 'http://172.16.21.142:8096'
# 汤伟
# VITE_APP_BASE_URL = 'http://10.84.121.21:8093'
# VITE_APP_BASE_URL = 'http://192.168.1.162:8093'
# 测试环境线上10.84.121.122:
VITE_APP_TEST_ONLINE_URL = 'https://211.99.26.225:12122'
# 开发环境导入预览地址
VITE_APP_BASE_API_URL = 'http://10.84.121.21:8093'
## 开发环境 附件服务地址
VITE_APP_ATTACHMENT_URL = 'https://211.99.26.225:12125'
attachment
# 地图服务地址
VITE_APP_MAP_URL = 'https://211.99.26.225:18085'
# ?menu=systemManageMenu&page=disposeManage

View File

@ -0,0 +1,19 @@
## 生产环境
NODE_ENV='production'
VITE_APP_TITLE = 'qgc-buji-web'
VITE_APP_PORT = 3000
VITE_APP_BASE_API = '/prod-api'
## 生产环境API地址
VITE_APP_BASE_URL = 'http://localhost:8093'
## 生产环境导入预览地址
VITE_APP_BASE_API_URL = 'https://211.99.26.225:12130/prod-api'
## 生产环境预览 图片视频地址
VITE_APP_PREVIEW_URL = 'https://211.99.26.225:12125'
## 开发环境 附件服务地址
VITE_APP_ATTACHMENT_URL = 'https://211.99.26.225:12125'
attachment
# 地图服务地址
VITE_APP_MAP_URL = 'https://211.99.26.225:18085'

View File

@ -0,0 +1,6 @@
## 模拟环境
NODE_ENV='staging'
VITE_APP_TITLE = 'qgc-buji-web'
VITE_APP_PORT = 3000
VITE_APP_BASE_API = '/prod--api'

View File

@ -0,0 +1,16 @@
*.sh
node_modules
*.md
*.woff
*.ttf
.vscode
.idea
dist
/public
/docs
.husky
.local
/bin
.eslintrc.js
prettier.config.js
src/assets

View File

@ -0,0 +1,32 @@
module.exports = {
env: {
browser: true,
es2021: true,
node: true
},
globals: {
defineProps: 'readonly',
defineEmits: 'readonly',
defineExpose: 'readonly',
DialogType: "readonly",
OptionType: "readonly",
},
parser: 'vue-eslint-parser',
extends: [
'eslint:recommended',
'plugin:vue/vue3-essential',
'plugin:@typescript-eslint/recommended'
],
parserOptions: {
ecmaVersion: 'latest',
parser: '@typescript-eslint/parser',
sourceType: 'module'
},
plugins: ['vue', '@typescript-eslint'],
rules: {
'vue/multi-word-component-names': 'off',
'@typescript-eslint/no-empty-function': 'off', // 关闭空方法检查
'@typescript-eslint/no-explicit-any': 'off', // 关闭any类型的警告
'vue/no-v-model-argument': 'off'
}
};

17
frontend-sjtb/.gitignore vendored Normal file
View File

@ -0,0 +1,17 @@
node_modules
.DS_Store
dist
dist-ssr
*.local
# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.local
package-lock.json
yarn.lock

View File

@ -0,0 +1,4 @@
{
"permissions": {},
"outputStyle": "Vibe"
}

View File

@ -0,0 +1,9 @@
/dist/*
.local
.output.js
/node_modules/**
**/*.svg
**/*.sh
/public/*

View File

@ -0,0 +1,36 @@
/**
* 代码格式化配置
*/
module.exports = {
// 指定每个缩进级别的空格数
tabWidth: 2,
// 使用制表符而不是空格缩进行
useTabs: false,
// 在语句末尾打印分号
semi: true,
// 使用单引号而不是双引号
singleQuote: true,
// 更改引用对象属性的时间 可选值"<as-needed|consistent|preserve>"
quoteProps: 'as-needed',
// 多行时尽可能打印尾随逗号。(例如,单行数组永远不会出现逗号结尾。) 可选值"<none|es5|all>"默认none
trailingComma: 'none',
// 在对象文字中的括号之间打印空格
bracketSpacing: true,
// 在单独的箭头函数参数周围包括括号 always(x) => x \ avoidx => x
arrowParens: 'avoid',
// 这两个选项可用于格式化以给定字符偏移量(分别包括和不包括)开始和结束的代码
rangeStart: 0,
rangeEnd: Infinity,
// 指定要使用的解析器,不需要写文件开头的 @prettier
requirePragma: false,
// 不需要自动在文件开头插入 @prettier
insertPragma: false,
// 换行设置 always\never\preserve
proseWrap: 'never',
// 指定HTML文件的全局空格敏感度 css\strict\ignore
htmlWhitespaceSensitivity: 'css',
// Vue文件脚本和样式标签缩进
vueIndentScriptAndStyle: false,
// 换行符使用 lf 结尾是 可选值"<auto|lf|crlf|cr>"
endOfLine: 'lf',
};

21
frontend-sjtb/LICENSE Normal file
View File

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2022 有来开源组织
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@ -0,0 +1,26 @@
module.exports = {
// 继承的规则
extends: ['@commitlint/config-conventional'],
// 定义规则类型
rules: {
// type 类型定义,表示 git 提交的 type 必须在以下类型范围内
'type-enum': [
2,
'always',
[
'feat', // 新功能 feature
'fix', // 修复 bug
'docs', // 文档注释
'style', // 代码格式(不影响代码运行的变动)
'refactor', // 重构(既不增加新功能也不是修复bug)
'perf', // 性能优化
'test', // 增加测试
'chore', // 构建过程或辅助工具的变动
'revert', // 回退
'build' // 打包
]
],
// subject 大小写不做校验
'subject-case': [0]
}
};

15
frontend-sjtb/index.html Normal file
View File

@ -0,0 +1,15 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" href="/logo.png" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="qgc-buji-web" />
<meta name="keywords" content="qgc-buji-web" />
<title>水电水利建设项目全过程环境管理信息平台数据填报子系统</title>
</head>
<body>
<div id="app"></div>
<script type="module" src="/src/main.ts"></script>
</body>
</html>

View File

@ -0,0 +1,85 @@
{
"name": "qgc-buji-web",
"version": "1.2.0",
"scripts": {
"dev": "vite serve --mode development",
"build": "vite build --mode production",
"build:mvn": "vite build --mode production",
"serve": "vite preview",
"lint": "eslint src/**/*.{ts,js,vue} --fix",
"prettier": "prettier --write ."
},
"dependencies": {
"@ant-design/icons-vue": "^7.0.1",
"@element-plus/icons-vue": "^2.0.10",
"@types/js-cookie": "^3.0.2",
"@vueuse/core": "^9.1.1",
"@wangeditor/editor": "^5.0.0",
"@wangeditor/editor-for-vue": "^5.1.10",
"ant-design-vue": "latest",
"axios": "^1.2.0",
"better-scroll": "^2.4.2",
"cesium": "^1.141.0",
"dayjs": "^1.11.20",
"default-passive-events": "^2.0.0",
"dom-to-image": "^2.6.0",
"echarts": "^5.2.2",
"element-plus": "^2.2.27",
"esri-leaflet": "^3.0.19",
"js-base64": "^3.7.5",
"js-cookie": "^3.0.1",
"jsencrypt": "^3.3.2",
"jszip": "^3.10.1",
"leaflet": "^1.9.4",
"lodash": "^4.18.1",
"moment": "^2.30.1",
"nprogress": "^0.2.0",
"ol": "^10.8.0",
"path-browserify": "^1.0.1",
"path-to-regexp": "^6.2.0",
"pdfjs-dist": "^6.0.227",
"pinia": "^2.0.12",
"screenfull": "^6.0.0",
"sortablejs": "^1.14.0",
"video.js": "^8.23.7",
"videojs-contrib-hls": "^5.15.0",
"vue": "^3.2.40",
"vue-i18n": "^9.1.9",
"vue-router": "^4.1.6",
"vuedraggable": "^2.24.3",
"wujie": "^1.0.24",
"wujie-vue3": "^1.0.24",
"xlsx": "^0.18.5"
},
"devDependencies": {
"@commitlint/cli": "^16.2.3",
"@commitlint/config-conventional": "^16.2.1",
"@types/dom-to-image": "^2.6.7",
"@types/lodash": "^4.17.24",
"@types/node": "^16.11.7",
"@types/nprogress": "^0.2.0",
"@types/path-browserify": "^1.0.0",
"@typescript-eslint/eslint-plugin": "^5.19.0",
"@typescript-eslint/parser": "^5.19.0",
"@vitejs/plugin-vue": "^4.0.0",
"autoprefixer": "^10.4.13",
"eslint": "^8.14.0",
"eslint-config-prettier": "^8.5.0",
"eslint-plugin-prettier": "^4.0.0",
"eslint-plugin-vue": "^8.6.0",
"fast-glob": "^3.2.11",
"husky": "^7.0.4",
"postcss": "^8.4.20",
"prettier": "^2.6.2",
"sass": "^1.53.0",
"tailwindcss": "^3.2.4",
"typescript": "latest",
"vite": "^4.0.3",
"vite-plugin-cesium": "^1.2.22",
"vite-plugin-svg-icons": "^2.0.1",
"vue-tsc": "latest"
},
"repository": "https://gitee.com/youlaiorg/vue3-element-admin.git",
"author": "有来开源组织",
"license": "MIT"
}

8124
frontend-sjtb/pnpm-lock.yaml Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,6 @@
module.exports = {
plugins: {
tailwindcss: {},
autoprefixer: {},
},
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

1
frontend-sjtb/readme.md Normal file
View File

@ -0,0 +1 @@
这里放置前端项目的readme文件

15
frontend-sjtb/src/App.vue Normal file
View File

@ -0,0 +1,15 @@
<script setup lang="ts">
import { ElConfigProvider } from 'element-plus';
import { useAppStore,usetTheme } from '@/store/modules/app';
import locale from "ant-design-vue/es/locale/zh_CN";
const appStore = useAppStore();
</script>
<template>
<el-config-provider :locale="appStore.locale" :size="appStore.size">
<a-config-provider :theme="usetTheme" :locale="locale">
<router-view />
</a-config-provider>
</el-config-provider>
</template>

View File

@ -0,0 +1,175 @@
import request from '@/utils/request';
import { AxiosPromise } from 'axios';
import { LoginData, TokenResult, VerifyCode } from './types';
export function getAccessToken() {
return request({
url: '/register/accessToken',
method: 'get'
});
}
/**
*
* @param data {LoginForm}
* @returns
*/
export function loginApi(data: LoginData): AxiosPromise<TokenResult> {
return request({
url: '/user/login',
method: 'post',
params: data
});
}
/**
*
*/
export function logoutApi() {
return request({
url: '/user/logout',
method: 'post'
});
}
/**
*
*/
export function getCaptcha(): AxiosPromise<VerifyCode> {
return request({
url: '/user/code?t=' + new Date().getTime().toString(),
method: 'get'
});
}
/**
*
*/
export function registerUser(data: any): AxiosPromise<any> {
return request({
url: '/sms/register',
method: 'post',
data
});
}
/**
*
* @param companyId ID(),
*/
export function getBasinList(): AxiosPromise<any[]> {
return request({
url: '/register/dropdown/rvcd',
method: 'get',
headers: {
'register-token': localStorage.getItem('register-token') || ''
}
// params: baseid ? { baseid } : {}
});
}
/**
* (,)
*/
export function getGroupList(): AxiosPromise<any[]> {
return request({
url: '/register/dropdown/hycd',
method: 'get',
params: { lx: 1 },
headers: {
'register-token': localStorage.getItem('register-token') || ''
}
});
}
/**
*
*/
export function getCompanyList(): AxiosPromise<any[]> {
return request({
url: '/register/dropdown/hycd',
method: 'get',
params: { lx: 2 },
headers: {
'register-token': localStorage.getItem('register-token') || ''
}
});
}
/**
*
*/
export function getStationList(params: any): AxiosPromise<any[]> {
return request({
url: '/register/dropdown/engInfo',
method: 'post',
data: params,
headers: {
'register-token': localStorage.getItem('register-token') || ''
}
});
}
/**
*
* @param phone
* @param type 1- 2-
*/
export function sendSmsCode(phone: string, type = 1): AxiosPromise<any> {
return request({
url: '/sms/sendCode',
method: 'post',
data: { phone, type }
});
}
/**
*
* @param phone
* @param code
* @param type 1- 2-
*/
export function verifySmsCode(
phone: string,
code: string,
type = 1
): AxiosPromise<any> {
return request({
url: '/sms/verifyCode',
method: 'post',
data: { phone, code, type }
});
}
/**
*
* @param phone
* @param code
*/
export function smsLoginApi(
phone: string,
code: string
): AxiosPromise<TokenResult> {
return request({
url: '/sms/login',
method: 'post',
data: { phone, code }
});
}
/**
*
* @param phone
* @param code
* @param password
*/
export function resetPassword(
phone: string,
code: string,
password: string
): AxiosPromise<any> {
return request({
url: '/sms/resetPassword',
method: 'post',
data: { phone, code, password }
});
}

View File

@ -0,0 +1,34 @@
/**
*
*/
export interface LoginData {
username: string;
password: string;
code: string;
uuid: string;
/**
* Code
*/
//verifyCode: string;
/**
* Code服务端缓存key(UUID)
*/
// verifyCodeKey: string;
}
/**
* Token响应类型
*/
export interface TokenResult {
token: string;
refreshToken: string;
expires: number;
}
/**
*
*/
export interface VerifyCode {
verifyCodeImg: string;
verifyCodeKey: string;
}

Some files were not shown because too many files have changed in this diff Show More