From 09263106b7b165c72fe8592dd7a6fec1829dae25 Mon Sep 17 00:00:00 2001 From: huangrenya Date: Wed, 29 May 2024 18:25:36 +0800 Subject: [PATCH 1/5] =?UTF-8?q?feat=EF=BC=9A=E6=B7=BB=E5=8A=A0=E5=9F=BA?= =?UTF-8?q?=E7=A1=80=E6=95=B0=E6=8D=AE=E5=90=8C=E6=AD=A5&=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E9=97=AE=E9=A2=98&=E8=A1=A5=E5=85=85=E8=84=9A?= =?UTF-8?q?=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../yxgh/base/domain/df/DfDwsRelDiscDike.java | 63 +++++++++++++++++++ .../base/domain/sk/SkDwsRelResDscdnm.java | 2 +- .../yxgh/base/domain/sk/SkDwsRelResRv.java | 2 +- .../yxgh/base/enums/DataSyncBasicEnum.java | 1 + .../yxgh/base/enums/DataSyncMonitorEnum.java | 8 +-- .../com/kms/yxgh/base/job/DataSyncJob.java | 30 +++++---- .../com/kms/yxgh/util/RestTemplateUtils.java | 4 +- sql/sy/v1.3.0/全量脚本/dataSync.sql | 21 ++++++- sql/sy/v1.3.0/增量脚本/v1.3.0-update.sql | 23 ++++++- 9 files changed, 130 insertions(+), 24 deletions(-) create mode 100644 shuili-system/src/main/java/com/kms/yxgh/base/domain/df/DfDwsRelDiscDike.java diff --git a/shuili-system/src/main/java/com/kms/yxgh/base/domain/df/DfDwsRelDiscDike.java b/shuili-system/src/main/java/com/kms/yxgh/base/domain/df/DfDwsRelDiscDike.java new file mode 100644 index 00000000..7f88f36b --- /dev/null +++ b/shuili-system/src/main/java/com/kms/yxgh/base/domain/df/DfDwsRelDiscDike.java @@ -0,0 +1,63 @@ +package com.kms.yxgh.base.domain.df; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.kms.yxgh.base.SyBaseEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +@TableName("dws_rel_disc_dike") +@Data +@ApiModel("堤段所属堤防对象关系表") +public class DfDwsRelDiscDike extends SyBaseEntity { + + private static final long serialVersionUID = 1L; + + /** + * 堤段代码 + */ + @ApiModelProperty("堤段代码") + @TableField("DISC_CODE") + private String discCode; + + /** + * 堤段名称 + */ + @ApiModelProperty("堤段名称") + @TableField("DISC_NAME") + private String discName; + + /** + * 堤防代码 + */ + @ApiModelProperty("堤防代码") + @TableField("DIKE_CODE") + private String dikeCode; + + /** + * 堤防名称 + */ + @ApiModelProperty("堤防名称") + @TableField("DIKE_NAME") + private String dikeName; + + /** + * 关系建立时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty("关系建立时间") + @TableField("FROM_DATE") + private Date fromDate; + + /** + * 关系终止时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty("关系终止时间") + @TableField("TO_DATE") + private Date toDate; +} diff --git a/shuili-system/src/main/java/com/kms/yxgh/base/domain/sk/SkDwsRelResDscdnm.java b/shuili-system/src/main/java/com/kms/yxgh/base/domain/sk/SkDwsRelResDscdnm.java index 7846a354..419c45e9 100644 --- a/shuili-system/src/main/java/com/kms/yxgh/base/domain/sk/SkDwsRelResDscdnm.java +++ b/shuili-system/src/main/java/com/kms/yxgh/base/domain/sk/SkDwsRelResDscdnm.java @@ -50,7 +50,7 @@ public class SkDwsRelResDscdnm extends SyBaseEntity { */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @ApiModelProperty("关系建立时间") - @TableField("FROM_CODE") + @TableField("FROM_DATE") private Date fromDate; /** diff --git a/shuili-system/src/main/java/com/kms/yxgh/base/domain/sk/SkDwsRelResRv.java b/shuili-system/src/main/java/com/kms/yxgh/base/domain/sk/SkDwsRelResRv.java index e3c62fb7..b7e7c044 100644 --- a/shuili-system/src/main/java/com/kms/yxgh/base/domain/sk/SkDwsRelResRv.java +++ b/shuili-system/src/main/java/com/kms/yxgh/base/domain/sk/SkDwsRelResRv.java @@ -50,7 +50,7 @@ public class SkDwsRelResRv extends SyBaseEntity { */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @ApiModelProperty("关系建立时间") - @TableField("FROM_CODE") + @TableField("FROM_DATE") private Date fromDate; /** diff --git a/shuili-system/src/main/java/com/kms/yxgh/base/enums/DataSyncBasicEnum.java b/shuili-system/src/main/java/com/kms/yxgh/base/enums/DataSyncBasicEnum.java index c92ee832..3b4c8cac 100644 --- a/shuili-system/src/main/java/com/kms/yxgh/base/enums/DataSyncBasicEnum.java +++ b/shuili-system/src/main/java/com/kms/yxgh/base/enums/DataSyncBasicEnum.java @@ -27,6 +27,7 @@ public enum DataSyncBasicEnum { REL_WAGA_RES("dws_rel_waga_res", "/dws_rel_waga_res", SzDwsRelWagaRes.class, "水闸所属水库关系表"), REL_WAGA_DIKE("dws_rel_waga_dike", "/dws_rel_waga_dike", SzDwsRelWagaDike.class, "水闸所属堤防对象关系表"), REL_DIKE_RV("dws_rel_dike_rv", "/dws_rel_dike_rv", DfDwsRelDikeRv.class, "堤防所属河流关系表"), + REL_DISC_DIKE("dws_rel_disc_dike", "/dws_rel_disc_dike", DfDwsRelDiscDike.class, "堤段所属堤防对象关系表"), ; private final String name; diff --git a/shuili-system/src/main/java/com/kms/yxgh/base/enums/DataSyncMonitorEnum.java b/shuili-system/src/main/java/com/kms/yxgh/base/enums/DataSyncMonitorEnum.java index 7b29e4f5..21c1a996 100644 --- a/shuili-system/src/main/java/com/kms/yxgh/base/enums/DataSyncMonitorEnum.java +++ b/shuili-system/src/main/java/com/kms/yxgh/base/enums/DataSyncMonitorEnum.java @@ -11,7 +11,7 @@ public enum DataSyncMonitorEnum { MS_HDM_OBP("ms_hdm_obp", "/bzjck/ms_hdm_obp", MsHdmObp.class, "降水量监测表"), MS_HDM_RIVER("ms_hdm_river", "/bzjck/ms_hdm_river", MsHdmRiver.class, "河道水情监测表"), - MS_HDM_RSVR("ms_hdm_rsvr", "/bzjck/ms_hdm_rsvr", MsHdmRiver.class, "水库水情监测表"), + MS_HDM_RSVR("ms_hdm_rsvr", "/bzjck/ms_hdm_rsvr", MsHdmRsvr.class, "水库水情监测表"), MS_HDM_TIDE("ms_hdm_tide", "/bzjck/ms_hdm_tide", MsHdmTide.class, "潮汐水情监测表"), MS_HDM_WDWV("ms_hdm_wdwv", "/bzjck/ms_hdm_wdwv", MsHdmWdwv.class, "风浪监测表"), MS_HDM_SALT("ms_hdm_salt", "/bzjck/ms_hdm_salt", MsHdmSalt.class, "咸潮监测表"), @@ -21,15 +21,15 @@ public enum DataSyncMonitorEnum { MS_HDM_DAYEV("ms_hdm_dayev", "/bzjck/ms_hdm_dayev", MsHdmDayev.class, "日蒸发量表"), MS_HDM_PSTAT("ms_hdm_pstat", "/bzjck/ms_hdm_pstat", MsHdmPstat.class, "降水量统计表"), MS_WQM_WQAMD("ms_wqm_wqamd", "/bzjck/ms_wqm_wqamd", MsHdmWqamd.class, "水质自动监测数据表"), - MS_HPM_SLCRS("ms_hpm_slcrs", "/bzjck/ms_hpm_slcrs", MsHdmStorm.class, "水闸运行状况监测表"), + MS_HPM_SLCRS("ms_hpm_slcrs", "/bzjck/ms_hpm_slcrs", MsHdmSlcrs.class, "水闸运行状况监测表"), MS_HPM_DKRS("ms_hpm_dkrs", "/bzjck/ms_hpm_dkrs", MsHdmDkrs.class, "堤防段运行状况监测表"), MS_HPM_GATE("ms_hpm_gate", "/bzjck/ms_hpm_gate", MsHdmGate.class, "水利工程闸门开度监测表"), MS_DSM_SRVRDS("ms_dsm_srvrds", "/bzjck/ms_dsm_srvrds", MsHdmSvrds.class, "表面垂直位移监测表"), MS_DSM_SRHRDS("ms_dsm_srhrds", "/bzjck/ms_dsm_srhrds", MsHdmSrhrds.class, "表面水平位移监测表"), MS_DSM_INVRDS("ms_dsm_invrds", "/bzjck/ms_dsm_invrds", MsHdmInvrds.class, "内部垂直位移监测表"), MS_DSM_INHRDS("ms_dsm_inhrds", "/bzjck/ms_dsm_inhrds", MsHdmInhrds.class, "内部水平位移监测表"), - MS_DSM_CKOPDG("ms_dsm_ckopdg", "/bzjck/ms_dsm_ckopdg", MsHdmGate.class, "裂缝开合度位移监测表"), - MS_DSM_SPPR("ms_dsm_sppr", "/bzjck/ms_dsm_sppr", MsHdmSvrds.class, "渗流压力水位监测表"), + MS_DSM_CKOPDG("ms_dsm_ckopdg", "/bzjck/ms_dsm_ckopdg", MsHdmCkopdg.class, "裂缝开合度位移监测表"), + MS_DSM_SPPR("ms_dsm_sppr", "/bzjck/ms_dsm_sppr", MsHdmSppr.class, "渗流压力水位监测表"), MS_DSM_PZWL("ms_dsm_pzwl", "/bzjck/ms_dsm_pzwl", MsHdmPzwl.class, "测压管水位监测表"), MS_DSM_SPQN("ms_dsm_spqn", "/bzjck/ms_dsm_spqn", MsHdmSpqn.class, "渗流量监测表"), MS_DSM_ST("ms_dsm_st", "/bzjck/ms_dsm_srhrds", MsHdmSt.class, "应变监测表"), diff --git a/shuili-system/src/main/java/com/kms/yxgh/base/job/DataSyncJob.java b/shuili-system/src/main/java/com/kms/yxgh/base/job/DataSyncJob.java index 6647ae5b..62df94d7 100644 --- a/shuili-system/src/main/java/com/kms/yxgh/base/job/DataSyncJob.java +++ b/shuili-system/src/main/java/com/kms/yxgh/base/job/DataSyncJob.java @@ -44,7 +44,7 @@ public class DataSyncJob { private static final Map FIELD_MAP = TableFieldFactory.getCacheFieldMap(); private static final Map> FIELD_TYPE_MAP = TableFieldFactory.getCacheFieldTypeMap(); private static final int ASYNC_THRESHOLD = 500; - private static final int BATCH_COUNT = 100; + private static final int BATCH_COUNT = 500; private static final SimpleDateFormat DATE_FORMAT_WITH_TIME = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); private static final SimpleDateFormat DATE_FORMAT_WITH_OUT_TIME = new SimpleDateFormat("yyyy-MM-dd"); @@ -67,7 +67,7 @@ public class DataSyncJob { */ @Scheduled(cron = "0 0 2 * * *") public void runMonitor() { - log.info("--------开启监测数据同步请求--------------", dataSyncEnabled); + log.info("--------开启监测数据同步请求:{}--------------", dataSyncEnabled); if (dataSyncEnabled) { Date date = new Date(); for (DataSyncMonitorEnum dataSyncEnum : DataSyncMonitorEnum.values()) { @@ -97,12 +97,12 @@ public class DataSyncJob { do { String requestUrl = String.format("%s%s", dataSyncUrl, url); // 发送POST请求 - Map map = new HashMap(); + Map map = new HashMap<>(); map.put("pageNum", pageNum); map.put("pageSize", pageSize); if(StringUtils.isNotBlank(type)){ - map.put("beginTime", beginTime); - map.put("endTime", endTime); + map.put("START_TIME", beginTime); + map.put("END_TIME", endTime); } String jsonStr = restTemplateUtils.doPostRequest(requestUrl, map); if (StringUtils.isBlank(jsonStr)) { @@ -124,7 +124,7 @@ public class DataSyncJob { // 解析数据 List> dataList = processDataList(jsonArray, filed.split(","), date, tableName, type); // 清除数据 - if (StringUtils.isBlank(type)) { + if (StringUtils.isBlank(type) && pageNum == 1) { baseDdlMapper.delete(tableName); } // 插入数据 @@ -133,13 +133,13 @@ public class DataSyncJob { if (StringUtils.isBlank(type) && jsonArray.size() < pageSize) { break; } - if (pageNum * pageSize >= total) { + if (StringUtils.isNotBlank(type) && pageNum * pageSize >= total) { break; } pageNum += 1; } while (true); } catch (Exception e) { - log.error("--------数据同步出错--------------,表:" + tableName, e); + log.error("--------数据同步出错--------------,表:"+tableName+", 异常:" + e.getMessage()); } } @@ -161,9 +161,9 @@ public class DataSyncJob { Class fieldType = FIELD_TYPE_MAP.getOrDefault(tableName, Collections.emptyMap()).get(fieldName); // 特殊处理:监测数据的入库时间与系统的CREATE_TIME冲突 if (StringUtils.isNotBlank(type)) { - if (fieldName.equals("MS_CREATE_TIME")) { + if ("MS_CREATE_TIME".equals(fieldName)) { return typeConversion(obj, "CREATE_TIME", fieldType); - } else if (fieldName.equals("CREATE_TIME")) { + } else if ("CREATE_TIME".equals(fieldName)) { return nowDate; } } @@ -176,6 +176,9 @@ public class DataSyncJob { * 批量入库 */ private void insertData(String filed, List> dataList, String tableName) { + if(dataList.isEmpty()){ + return; + } // 入库操作 if (dataList.size() > ASYNC_THRESHOLD) { // 先入库100条数据入库 @@ -193,7 +196,9 @@ public class DataSyncJob { cachedDataList = new ArrayList<>(BATCH_COUNT); } } - baseDdlMapper.insert(filed, cachedDataList, tableName); + if(cachedDataList.size()>0) { + baseDdlMapper.insert(filed, cachedDataList, tableName); + } }); } else { baseDdlMapper.insert(filed, dataList, tableName); @@ -230,7 +235,8 @@ public class DataSyncJob { } else if (Date.class.equals(fieldType)) { return convertToDate(obj, fieldName); } else if (Long.class.equals(fieldType)) { - return obj.getLong(fieldName); + return Optional.ofNullable(obj.get(fieldName)).map(Object::toString).filter(s -> !StringUtils.isBlank(s)) + .map(s -> Double.valueOf(s).longValue()).orElse(0L); } return null; } diff --git a/shuili-system/src/main/java/com/kms/yxgh/util/RestTemplateUtils.java b/shuili-system/src/main/java/com/kms/yxgh/util/RestTemplateUtils.java index a5d70748..9c54d5bb 100644 --- a/shuili-system/src/main/java/com/kms/yxgh/util/RestTemplateUtils.java +++ b/shuili-system/src/main/java/com/kms/yxgh/util/RestTemplateUtils.java @@ -69,9 +69,9 @@ public class RestTemplateUtils { String seqResult = ""; try { seqResult = new String(responseEntity.getBody().getBytes(),"utf-8"); - log.info("返回报文:{}", seqResult); + log.info("请求接口:{}, 请求报文:{}, 返回报文:{}", url, requestStr, seqResult); } catch (UnsupportedEncodingException e) { - log.error("接口返回异常", e); + log.error("请求接口:" + url + ",返回异常:" + e.getMessage()); } return seqResult; } diff --git a/sql/sy/v1.3.0/全量脚本/dataSync.sql b/sql/sy/v1.3.0/全量脚本/dataSync.sql index d3692de1..f933f399 100644 --- a/sql/sy/v1.3.0/全量脚本/dataSync.sql +++ b/sql/sy/v1.3.0/全量脚本/dataSync.sql @@ -157,6 +157,21 @@ CREATE TABLE `dws_rel_dike_rv` ( PRIMARY KEY (`ID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='堤防所属河流对象关系表'; +CREATE TABLE `dws_rel_disc_dike` ( + `ID` int NOT NULL AUTO_INCREMENT COMMENT '编号', + `DISC_CODE` varchar(255) COLLATE utf8mb4_general_ci NOT NULL COMMENT '堤段代码', + `DISC_NAME` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '堤段名称', + `DIKE_CODE` varchar(255) COLLATE utf8mb4_general_ci NOT NULL COMMENT '堤防代码', + `DIKE_NAME` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '堤防名称', + `FROM_DATE` datetime DEFAULT NULL COMMENT '关系建立时间', + `TO_DATE` datetime DEFAULT NULL COMMENT '关系终止时间', + `REMARK` text COLLATE utf8mb4_general_ci COMMENT '备注', + `CREATE_UID` varchar(32) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建人', + `CREATE_TIME` datetime DEFAULT NULL COMMENT '创建时间', + `UPDATE_UID` varchar(32) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '最近修改人', + `UPDATE_TIME` datetime DEFAULT NULL COMMENT '最近修改时间', + PRIMARY KEY (`ID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='堤段所属堤防对象关系表'; @@ -870,7 +885,7 @@ CREATE TABLE `MS_DSM_AMS` ( CREATE TABLE `MS_DSM_GSTMONREC` ( `ID` int NOT NULL AUTO_INCREMENT COMMENT '编号', `PRJ_STCD` varchar(18) NOT NULL COMMENT '水利工程测站代码', - `MPCD` varchar(13) NOT NULL COMMENT '测点编号', + `MPCD` varchar(20) NOT NULL COMMENT '测点编号', `TM` datetime NOT NULL COMMENT '时间', `STATUS` int DEFAULT NULL COMMENT 'GNSS定位状态(°)', `SATELLITE_NUM` int DEFAULT NULL COMMENT '卫星数', @@ -904,7 +919,7 @@ CREATE TABLE `MS_DSM_GSTMONREC` ( CREATE TABLE `MS_DSM_OSSMONREC` ( `ID` int NOT NULL AUTO_INCREMENT COMMENT '编号', `PRJ_STCD` varchar(18) NOT NULL COMMENT '水利工程测站代码', - `MPCD` varchar(13) NOT NULL COMMENT '测点编号', + `MPCD` varchar(20) NOT NULL COMMENT '测点编号', `TM` datetime NOT NULL COMMENT '时间', `UPLIFTED_PRESSURE` decimal(8,2) DEFAULT NULL COMMENT '扬压力(MPa)', `OSMOTIC_PRESSURE` decimal(8,2) DEFAULT NULL COMMENT '渗透压力(坝体、坝基、绕坝)(MPa)', @@ -929,7 +944,7 @@ CREATE TABLE `MS_DSM_OSSMONREC` ( CREATE TABLE `MS_DSM_ENV` ( `ID` int NOT NULL AUTO_INCREMENT COMMENT '编号', `PRJ_STCD` varchar(18) NOT NULL COMMENT '水利工程测站代码', - `MPCD` varchar(13) NOT NULL COMMENT '测点编号', + `MPCD` varchar(20) NOT NULL COMMENT '测点编号', `TM` datetime NOT NULL COMMENT '时间', `GTP` decimal(6,1) DEFAULT NULL COMMENT '地温(℃)', `AlTP` decimal(6,1) DEFAULT NULL COMMENT '瞬时气温(℃)', diff --git a/sql/sy/v1.3.0/增量脚本/v1.3.0-update.sql b/sql/sy/v1.3.0/增量脚本/v1.3.0-update.sql index 025f4c3f..9bbfed92 100644 --- a/sql/sy/v1.3.0/增量脚本/v1.3.0-update.sql +++ b/sql/sy/v1.3.0/增量脚本/v1.3.0-update.sql @@ -1 +1,22 @@ -SET NAMES utf8mb4; \ No newline at end of file +SET NAMES utf8mb4; + +CREATE TABLE `dws_rel_disc_dike` ( + `ID` int NOT NULL AUTO_INCREMENT COMMENT '编号', + `DISC_CODE` varchar(255) COLLATE utf8mb4_general_ci NOT NULL COMMENT '堤段代码', + `DISC_NAME` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '堤段名称', + `DIKE_CODE` varchar(255) COLLATE utf8mb4_general_ci NOT NULL COMMENT '堤防代码', + `DIKE_NAME` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '堤防名称', + `FROM_DATE` datetime DEFAULT NULL COMMENT '关系建立时间', + `TO_DATE` datetime DEFAULT NULL COMMENT '关系终止时间', + `REMARK` text COLLATE utf8mb4_general_ci COMMENT '备注', + `CREATE_UID` varchar(32) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建人', + `CREATE_TIME` datetime DEFAULT NULL COMMENT '创建时间', + `UPDATE_UID` varchar(32) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '最近修改人', + `UPDATE_TIME` datetime DEFAULT NULL COMMENT '最近修改时间', + PRIMARY KEY (`ID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='堤段所属堤防对象关系表'; + +ALTER TABLE `MS_DSM_ENV` MODIFY COLUMN MPCD varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '测点编号'; +ALTER TABLE `MS_DSM_GSTMONREC` MODIFY COLUMN MPCD varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '测点编号'; +ALTER TABLE `MS_DSM_OSSMONREC` MODIFY COLUMN MPCD varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '测点编号'; + From 9af4847bdcee1acd3fdcf188547af34f9e48e777 Mon Sep 17 00:00:00 2001 From: hxh <762326930@qq.com> Date: Fri, 31 May 2024 00:02:43 +0800 Subject: [PATCH 2/5] =?UTF-8?q?fix:=20=E9=81=BF=E5=85=8D=E9=87=8D=E5=A4=8D?= =?UTF-8?q?=E8=8F=9C=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/kms/framework/web/service/SysPermissionService.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/shuili-system/src/main/java/com/kms/framework/web/service/SysPermissionService.java b/shuili-system/src/main/java/com/kms/framework/web/service/SysPermissionService.java index 81e0d5e7..ac893838 100644 --- a/shuili-system/src/main/java/com/kms/framework/web/service/SysPermissionService.java +++ b/shuili-system/src/main/java/com/kms/framework/web/service/SysPermissionService.java @@ -14,6 +14,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.*; +import java.util.function.Function; import java.util.stream.Collectors; /** @@ -81,7 +82,7 @@ public class SysPermissionService { if (cache != null) { List menus = StringUtils.cast(cache); List ides = menus.stream().map(MenuDto::getCode).collect(Collectors.toList()); - Map map = menus.stream().collect(Collectors.toMap(MenuDto::getCode, m -> m)); + Map map = menus.stream().collect(Collectors.toMap(MenuDto::getCode, Function.identity(), (a, b) -> a)); return menuService.selectMenuList(ides).stream().map(item -> { MenuDto dto = map.get(item.getId()); From f05b1d9f23447fbd6821d0250c93d2762ae664f5 Mon Sep 17 00:00:00 2001 From: hxh <762326930@qq.com> Date: Sat, 1 Jun 2024 01:50:42 +0800 Subject: [PATCH 3/5] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=E9=97=A8=E6=88=B7?= =?UTF-8?q?=E7=99=BB=E9=99=86=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/kms/aspect/WebLogAspect.java | 162 ++++++++++++ .../controller/system/SysLoginController.java | 231 ++++++------------ .../com/kms/web/utils/WaterRequestUtil.java | 57 ++++- .../java/com/kms/web/utils/WaterResultV2.java | 25 ++ .../web/service/SysPermissionService.java | 7 + .../kms/system/service/SysMenuService.java | 35 --- 6 files changed, 306 insertions(+), 211 deletions(-) create mode 100644 shuili-admin/src/main/java/com/kms/aspect/WebLogAspect.java create mode 100644 shuili-admin/src/main/java/com/kms/web/utils/WaterResultV2.java diff --git a/shuili-admin/src/main/java/com/kms/aspect/WebLogAspect.java b/shuili-admin/src/main/java/com/kms/aspect/WebLogAspect.java new file mode 100644 index 00000000..d98b3af2 --- /dev/null +++ b/shuili-admin/src/main/java/com/kms/aspect/WebLogAspect.java @@ -0,0 +1,162 @@ +package com.kms.aspect; + +import com.alibaba.fastjson.JSON; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.context.EnvironmentAware; +import org.springframework.core.env.Environment; +import org.springframework.stereotype.Component; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.lang.reflect.Method; +import java.lang.reflect.Parameter; +import java.util.Collection; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.Map; + + +/** + * 接口日志界面 + * + * @author hxh + **/ +@Aspect +@Component +@Slf4j +public class WebLogAspect implements EnvironmentAware, InitializingBean { + + private boolean printResponseEnable; + private Environment environment; + + /** + * 切点 + */ + @Pointcut("@within(org.springframework.web.bind.annotation.RestController) || @within(org.springframework.stereotype.Controller)") + public void webLog() { + } + + /** + * 环绕切面 + * + * @param joinPoint ProceedingJoinPoint + * @return 结果 + * @throws Throwable 异常 + */ + @Around("webLog()") + public Object doAround(ProceedingJoinPoint joinPoint) throws Throwable { + long startTime = System.currentTimeMillis(); + ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); + if (servletRequestAttributes == null) { + return joinPoint.proceed(); + } + HttpServletRequest request = servletRequestAttributes.getRequest(); + Class targetCls = joinPoint.getTarget().getClass(); + MethodSignature ms = (MethodSignature) joinPoint.getSignature(); + //获取目标方法上的注解指定的操作名称 + Method targetMethod = + targetCls.getDeclaredMethod( + ms.getName(), + ms.getParameterTypes()); + String uri = request.getRequestURI(); + String httpMethod = request.getMethod(); + Object requestParams = getRequestParameter(request, joinPoint); + log.info("[{}] \"{}\" begin, params:{}", httpMethod, uri, + JSON.toJSONString(requestParams)); + Object result; + try { + result = joinPoint.proceed(); + if (printResponseEnable) { + log.info("[{}] \"{}\" response:{}", httpMethod, uri, JSON.toJSONString(result)); + } + return result; + } catch (Throwable ex) { + log.error("[{}] \"{}\" error:{}", httpMethod, uri, ex.getMessage()); + throw ex; + } finally { + log.info("[{}] \"{}\" end, use time:{}ms", httpMethod, uri, System.currentTimeMillis() - startTime); + } + } + + /** + * 获取请求参数 + * + * @param request HttpServletRequest + * @param joinPoint JoinPoint + * @return 结果 + */ + private Object getRequestParameter(HttpServletRequest request, JoinPoint joinPoint) { + Object[] args = joinPoint.getArgs(); + Method method = ((MethodSignature) joinPoint.getSignature()).getMethod(); + Parameter[] parameters = method.getParameters(); + Map params = new HashMap<>(parameters.length); + //json数据 + for (int i = 0; i < parameters.length; i++) { + if (isFilterObject(args[i])) { + continue; + } + RequestBody requestBody = parameters[i].getAnnotation(RequestBody.class); + if (requestBody != null) { + //一个接口只会有一个RequestBody + return args[i]; + } + } + //表单提交或url拼接 + Enumeration paramNames = request.getParameterNames(); + while (paramNames.hasMoreElements()) { + String key = paramNames.nextElement(); + params.put(key, request.getParameter(key)); + } + return !params.isEmpty() ? params : null; + } + + /** + * 是否需要过滤 + * + * @param obj Object + * @return true or false + */ + private boolean isFilterObject(final Object obj) { + if (obj == null) { + return true; + } + Class clazz = obj.getClass(); + if (clazz.isArray()) { + return clazz.getComponentType().isAssignableFrom(MultipartFile.class); + } else if (Collection.class.isAssignableFrom(clazz)) { + Collection collection = (Collection) obj; + for (Object o : collection) { + return o instanceof MultipartFile; + } + } else if (Map.class.isAssignableFrom(clazz)) { + Map map = (Map) obj; + for (Object o : map.entrySet()) { + Map.Entry entry = (Map.Entry) o; + return entry.getValue() instanceof MultipartFile; + } + } + return obj instanceof MultipartFile || obj instanceof HttpServletRequest || obj instanceof HttpServletResponse; + } + + @Override + public void setEnvironment(Environment environment) { + this.environment = environment; + } + + + @Override + public void afterPropertiesSet() { + printResponseEnable = environment.getProperty("sy.public.log-config.print-response", Boolean.class, false); + } +} diff --git a/shuili-admin/src/main/java/com/kms/web/controller/system/SysLoginController.java b/shuili-admin/src/main/java/com/kms/web/controller/system/SysLoginController.java index b1b503ba..be1dc874 100644 --- a/shuili-admin/src/main/java/com/kms/web/controller/system/SysLoginController.java +++ b/shuili-admin/src/main/java/com/kms/web/controller/system/SysLoginController.java @@ -3,7 +3,6 @@ package com.kms.web.controller.system; import cn.dev33.satoken.stp.StpUtil; import cn.hutool.core.collection.CollectionUtil; -import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.kms.common.utils.UserUtils; @@ -12,11 +11,9 @@ import com.kms.framework.manager.factory.AsyncFactory; import com.kms.framework.web.service.SysPermissionService; import com.kms.framework.web.service.SysPermissionService.MenuDto; import com.kms.system.service.SysMenuService; -import com.kms.system.service.SysRoleMenuService; -import com.kms.system.service.SysRoleService; import com.kms.system.service.SysUserService; import com.kms.web.utils.WaterRequestUtil; -import com.kms.web.utils.WaterResult; +import com.kms.web.utils.WaterResultV2; import com.kms.web.utils.singleDomain.SingleMenu; import com.shuili.common.constant.Constants; import com.shuili.common.constant.YesOrNo; @@ -28,16 +25,17 @@ import com.shuili.common.core.domain.model.LoginBody; import com.shuili.common.core.redis.RedisCache; import com.shuili.common.enums.UserStatus; import com.shuili.common.exception.BaseException; -import com.shuili.common.exception.CustomException; import com.shuili.common.mybaitsplus.BeanToWrapper; import com.shuili.common.utils.StringUtils; import com.shuili.common.utils.password.PasswordUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; -import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.view.RedirectView; @@ -45,13 +43,11 @@ import org.springframework.web.servlet.view.RedirectView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; -import java.util.ArrayList; import java.util.List; import java.util.Set; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; +import java.util.concurrent.CompletableFuture; import java.util.stream.Collectors; +import java.util.stream.Stream; /** * 登录验证 @@ -167,11 +163,15 @@ public class SysLoginController extends BaseController { if (user == null) { return AjaxResult.error("用户未登录"); } - List menus = menuService.selectMenuTreeByUserId(user.getId(), permissionService.getUserMenuFromPortal(user.getId())); - return AjaxResult.success(menuService.buildMenus(menus)); + List portalMenus = permissionService.getUserMenuFromPortal(user.getId()); + if (CollectionUtil.isNotEmpty(portalMenus)) { + return AjaxResult.success(menuService.buildMenus(portalMenus)); + } else { + List menus = menuService.selectMenuTreeByUserId(user.getId()); + return AjaxResult.success(menuService.buildMenus(menus)); + } } - /** * 门户单点认证登录 * @@ -182,26 +182,68 @@ public class SysLoginController extends BaseController { HttpServletResponse response, @RequestParam(name = "page", required = false) String page, @RequestParam(name = "token") String token) throws IOException { - WaterResult waterResult; - CountDownLatch countDownLatch = new CountDownLatch(1); - try { - waterResult = waterRequestUtil.authUser(token); - } catch (Exception e) { - log.error(e.getMessage()); - throw new CustomException("登录失败"); + CompletableFuture> menusFuture = CompletableFuture.supplyAsync(() -> portalMenu(token)); + CompletableFuture userFuture = CompletableFuture.supplyAsync(() -> innerLogin(token)); + CompletableFuture.allOf(menusFuture, userFuture).join(); + List menus = menusFuture.join(); + SimpleUser simpleUser = userFuture.join(); + if (simpleUser == null) { + throw new BaseException("账号异常,登陆失败"); } - JSONObject jsonObject = JSONObject.parseObject(waterResult.getData()); - String user = jsonObject.getString("user"); - JSONObject userJsonObject = JSONObject.parseObject(user); - String uid = userJsonObject.getString("id"); + permissionService.setUserMenuFromPortal(simpleUser.getId(), menus); + + RedirectView redirectView = new RedirectView(redirect + "?token=" + simpleUser.getToken() + "&page=" + page); + return new ModelAndView(redirectView); + } + + private List portalMenu(String token) { + WaterResultV2> source = waterRequestUtil.getUserResource(token); + List sMenus = source.getData(); + return sMenus.stream().flatMap(item -> { + if (item.getChildren() != null) { + return Stream.concat(Stream.of(item), item.getChildren().stream()); + } else { + return Stream.of(item); + } + }).map(item -> MenuDto.builder() + .code(item.getCode()) + .visible(item.getVisible().equals("1") ? "0" : "1") + .seq(item.getSeq()) + .status(item.getStatus().equals("1") ? "0" : "1") + .build()).collect(Collectors.toList()); + } + + private SimpleUser innerLogin(String token) { + WaterResultV2 user = waterRequestUtil.authUser(token); + String uid = user.getData().getUser().getId(); QueryWrapper query = Wrappers.query(); query.eq("single_user_id", uid); List list = userService.list(query); if (CollectionUtil.isEmpty(list)) { - throw new CustomException("数据异常,登录失败"); + return null; } - AjaxResult ajax = AjaxResult.success(); SysUser sysUser = list.get(0); + try { + checkUser(sysUser); + } catch (Exception e) { + return null; + } + CompletableFuture loginFuture = CompletableFuture.runAsync(() -> StpUtil.login(sysUser.getId())); + CompletableFuture sectionFuture = CompletableFuture.runAsync(() -> StpUtil.getSession().set("jianwei-user", sysUser)); + CompletableFuture permissionFuture = CompletableFuture.runAsync(() -> permissionService.setUserPermissionFromPortal(sysUser.getId(), user.getData().getFunctionPerms())); + CompletableFuture.allOf(loginFuture, sectionFuture, permissionFuture).join(); + return new SimpleUser(sysUser.getId(), StpUtil.getTokenValue()); + } + + @Data + @AllArgsConstructor + @NoArgsConstructor + private static class SimpleUser { + private String id; + private String token; + } + + private void checkUser(SysUser sysUser) { if (UserStatus.DELETED.getCode().equals(sysUser.getDelFlag())) { log.info(" :{} 已被删除.", sysUser.getUserName()); AsyncManager.me().execute(AsyncFactory.recordLogininfor(sysUser.getUserName(), Constants.LOGIN_FAIL, "账户已删除")); @@ -211,143 +253,6 @@ public class SysLoginController extends BaseController { AsyncManager.me().execute(AsyncFactory.recordLogininfor(sysUser.getUserName(), Constants.LOGIN_FAIL, "账户已停用")); throw new BaseException("对不起,您的账号:" + sysUser.getUserName() + " 已停用"); } - //异步执行菜单同步 - executorService.submit(new RolePerms(token, waterResult, countDownLatch, sysUser.getId())); - AsyncManager.me().execute(AsyncFactory.recordLogininfor(sysUser.getUserName(), Constants.LOGIN_SUCCESS, "登录成功")); - StpUtil.login(sysUser.getId()); - StpUtil.getSession().set("jianwei-user", sysUser); - String tokenValue = StpUtil.getTokenValue(); - userService.updateWithReids(sysUser); - ajax.put("token", tokenValue); - ajax.put("authorization", token); - try { - countDownLatch.await(); - } catch (InterruptedException e) { - e.printStackTrace(); - } -// if(StringUtils.isEmpty(page)){ -// List menus = menuService.selectMenuTreeByUserId(sysUser.getId()); -// List routerVos = menuService.buildMenus(menus); -// StringBuffer stringBuffer = new StringBuffer(); -// for (RouterVo routerVo : routerVos) { -// stringBuffer.append("/"+routerVo.getPath()); -// List children = routerVo.getChildren(); -// if(CollectionUtil.isEmpty(children)){ -// continue; -// }else { -// RouterVo vo = children.get(0); -// List childrenTwo = vo.getChildren(); -// if(CollectionUtil.isEmpty(childrenTwo)){ -// -// } -// } -// } -// } - RedirectView redirectView = new RedirectView(redirect + "?token=" + tokenValue + "&page=" + page); - ModelAndView modelAndView = new ModelAndView(redirectView); - return modelAndView; - } - - @Autowired - SysRoleService sysRoleService; - @Autowired - SysRoleMenuService sysRoleMenuService; - @Autowired - SysMenuService sysMenuService; - - ExecutorService executorService = Executors.newFixedThreadPool(5); - - /** - * 根据用户token获取资源权限 - * - * @param - * @return - */ -// @GetMapping("/getSingleRotes/{token}") -// public AjaxResult getSingleRotes(@PathVariable String token){ -// WaterResult waterResult = waterRequestUtil.authUser(token); -// String data = waterResult.getData(); -// JSONObject jsonObject = JSONObject.parseObject(data); -// List functionPerms = jsonObject.getJSONArray("functionPerms").toJavaList(String.class); -// List roles = jsonObject.getJSONArray("roles").toJavaList(String.class); -// QueryWrapper query = Wrappers.query(); -// query.in("role_key",roles); -// List roleList = sysRoleService.list(query); -// QueryWrapper menuQueryWrapper = Wrappers.query(); -// menuQueryWrapper.in("perms",functionPerms); -// List menus = sysMenuService.list(menuQueryWrapper); - -// -// return AjaxResult.success(menuService.buildMenus(menus)); -// } - - class RolePerms implements Runnable { - - private final String token; - private final WaterResult waterResult; - private final CountDownLatch countDownLatch; - private final String userId; - - public RolePerms(String token, WaterResult waterResult, CountDownLatch countDownLatch, String userId) { - this.token = token; - this.waterResult = waterResult; - this.countDownLatch = countDownLatch; - this.userId = userId; - } - - @Override - @Transactional - public void run() { - try { - WaterResult result = waterRequestUtil.getUserResource(token); - List singleMenus = JSONObject.parseArray(result.getData(), SingleMenu.class); - List singleAllMenus = new ArrayList<>(); - setChildren(singleMenus, singleAllMenus); - String data = waterResult.getData(); - JSONObject datajson = JSONObject.parseObject(data); - List functionPerms = datajson.getJSONArray("functionPerms").toJavaList(String.class); - List menuCode = singleAllMenus.stream().map(item -> MenuDto.builder() - .code(item.getCode()) - .visible(item.getVisible().equals("1") ? "0" : "1") - .seq(item.getSeq()) - .status(item.getStatus().equals("1") ? "0" : "1") - .build()).distinct().collect(Collectors.toList()); - permissionService.setUserPermissionFromPortal(userId, functionPerms); - permissionService.setUserMenuFromPortal(userId, menuCode); - - } catch (Exception e) { - log.error("同步菜单权限失败:" + e.getMessage()); - throw e; - } finally { - countDownLatch.countDown(); - } - } - } - - - public static void setChildren(List singleMenus, List singleAllMenus) { - if (CollectionUtil.isNotEmpty(singleMenus)) { - for (SingleMenu singleMenu : singleMenus) { //剔除掉不符合的 - if (singleMenu.getVisible() != null && singleMenu.getStatus() != null) { - if (singleMenu.getStatus().equals("1")) { - singleAllMenus.add(singleMenu); - } - } - if (CollectionUtil.isNotEmpty(singleMenu.getChildren())) { - List children = singleMenu.getChildren(); - for (SingleMenu child : children) { - if (singleMenu.getVisible() != null && singleMenu.getStatus() != null) { - if (singleMenu.getStatus().equals("1")) { - singleAllMenus.add(child); - } - } - if (CollectionUtil.isNotEmpty(child.getChildren())) { - setChildren(child.getChildren(), singleAllMenus); - } - } - } - } - } } } diff --git a/shuili-admin/src/main/java/com/kms/web/utils/WaterRequestUtil.java b/shuili-admin/src/main/java/com/kms/web/utils/WaterRequestUtil.java index fd4c8f6d..8515bc63 100644 --- a/shuili-admin/src/main/java/com/kms/web/utils/WaterRequestUtil.java +++ b/shuili-admin/src/main/java/com/kms/web/utils/WaterRequestUtil.java @@ -3,8 +3,12 @@ package com.kms.web.utils; import cn.hutool.core.util.IdUtil; import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpResponse; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.TypeReference; +import com.kms.web.utils.singleDomain.SingleMenu; import com.shuili.common.exception.CustomException; +import lombok.Data; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; @@ -12,6 +16,7 @@ import org.springframework.stereotype.Component; import java.util.Date; import java.util.HashMap; +import java.util.List; @Component public class WaterRequestUtil { @@ -195,22 +200,38 @@ public class WaterRequestUtil { * @param authorization * @return */ - public WaterResult authUser(String authorization) { - log.info("--------请求统一门户用户验证,请求地址为:" + userUrl); + public WaterResultV2 authUser(String authorization) { + long startTime = System.currentTimeMillis(); + log.info("--------请求统一门户用户验证,请求地址为:{}", userUrl); HttpRequest get = createGet(userUrl, authUserServiceId, authUserAppsecret); String body; try (HttpResponse response = get.header("Authorization", authorization) .execute()) { body = response.body(); } - WaterResult waterResult = JSONObject.parseObject(body, WaterResult.class); + long endTime = System.currentTimeMillis(); + log.info("--------请求统一门户用户验证,耗时{}毫秒,返回结果为:{}", endTime - startTime, body); + WaterResultV2 waterResult = JSON.parseObject(body, new TypeReference>() { + }); isSuccess(waterResult); return waterResult; } + @Data + public static class WaterUser { + private WaterUserInfo user; + private List functionPerms; + + } + + @Data + public static class WaterUserInfo { + private String id; + } + public WaterResult getOrgPage() { - log.info("--------请求获取门户组织信息,请求地址为:" + orgUrl); + log.info("--------请求获取门户组织信息,请求地址为:{}", orgUrl); HashMap hashMap = new HashMap<>(); hashMap.put("page", 1); hashMap.put("size", 100); @@ -238,19 +259,20 @@ public class WaterRequestUtil { } - public WaterResult getUserResource(String authorization) { - log.info("--------请求获取门户角色信息,请求地址为:" + resourceUrl); - HashMap hashMap = new HashMap<>(); - hashMap.put("systemCode", systemCode); + public WaterResultV2> getUserResource(String authorization) { + //计算请求消耗的时间 + long startTime = System.currentTimeMillis(); + log.info("--------请求获取门户用户资源信息,请求地址为:{}", resourceUrl); HttpRequest get = createPost(resourceUrl + "?systemCode=" + systemCode, resourceServiceId, resourceAppsecret); -// HttpRequest get = createPost(resourceUrl,resourceServiceId,resourceAppsecret); get.header("Authorization", authorization); String body; try (HttpResponse response = get.execute()) { body = response.body(); } - log.info("--------请求获取门户用户资源信息,返回结果为:" + body); - WaterResult waterResult = JSONObject.parseObject(body, WaterResult.class); + long endTime = System.currentTimeMillis(); + log.info("--------请求获取门户用户资源信息,耗时{}毫秒,返回结果为:{}", endTime - startTime, body); + WaterResultV2> waterResult = JSON.parseObject(body, new TypeReference>>() { + }); isSuccess(waterResult); //{\"total\":1,\"size\":100,\"records\":[{\"area\":\"440000\",\"systemList\":[{\"area\":\"440000\",\"code\":\"sgc-jg\",\"name\":\"水工程应用-水利工程建设管理模块\",\"id\":\"1732648267643097090\"}],\"code\":\"YW00013\",\"level\":\"1d\",\"dataConfig\":\"none\",\"type\":\"BUSINESS\",\"posts\":[],\"users\":[{\"id\":\"20231225000006\"},{\"id\":\"20240119000002\"}],\"name\":\"水利工程应用-水利工程建设管理模块角色\",\"id\":\"20231213000001\",\"category\":\"BUSINESS\",\"businesses\":[{\"parent\":\"1762458920822599682\",\"businessCode\":\"YWSLGCJSGL0008\",\"parentName\":\"水利工程建设管理\",\"businessName\":\"水利工程建设管理\",\"description\":\"\",\"id\":\"1705128209926942721\",\"delFlag\":0}],\"status\":\"1\"}],\"page\":1} return waterResult; @@ -258,7 +280,7 @@ public class WaterRequestUtil { public WaterResult getRolePage() { - log.info("--------请求获取门户角色信息,请求地址为:" + roleUrl); + log.info("--------请求获取门户角色信息,请求地址为:{}", roleUrl); HashMap hashMap = new HashMap<>(); hashMap.put("page", 1); hashMap.put("size", 100); @@ -277,7 +299,7 @@ public class WaterRequestUtil { public WaterResult usersPage() { - log.info("--------请求获取门户用户信息,请求地址为:" + usersUrl); + log.info("--------请求获取门户用户信息,请求地址为:{}", usersUrl); HashMap hashMap = new HashMap<>(); hashMap.put("page", 1); hashMap.put("size", 100); @@ -303,5 +325,14 @@ public class WaterRequestUtil { } } + private void isSuccess(WaterResultV2 waterResult) { + if (waterResult == null) { + throw new CustomException("请求异常"); + } + if (waterResult.getCode() != 200 || !waterResult.getSuccess()) { + throw new CustomException("请求失败,原因:" + waterResult.getMessage()); + } + } + } diff --git a/shuili-admin/src/main/java/com/kms/web/utils/WaterResultV2.java b/shuili-admin/src/main/java/com/kms/web/utils/WaterResultV2.java new file mode 100644 index 00000000..fbe1554b --- /dev/null +++ b/shuili-admin/src/main/java/com/kms/web/utils/WaterResultV2.java @@ -0,0 +1,25 @@ +package com.kms.web.utils; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @ClassName: WaterResultV2 + * @Description: TODO + * @Date: 2024/6/1 上午12:27 + * * + * @author: hxh + * @version: 1.0 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class WaterResultV2 { + private int code; + private String message; + private Boolean success; + private T data; + private String timestamp; + +} diff --git a/shuili-system/src/main/java/com/kms/framework/web/service/SysPermissionService.java b/shuili-system/src/main/java/com/kms/framework/web/service/SysPermissionService.java index ac893838..95af1eb4 100644 --- a/shuili-system/src/main/java/com/kms/framework/web/service/SysPermissionService.java +++ b/shuili-system/src/main/java/com/kms/framework/web/service/SysPermissionService.java @@ -12,6 +12,7 @@ import lombok.Data; import lombok.NoArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; import java.util.*; import java.util.function.Function; @@ -102,10 +103,16 @@ public class SysPermissionService { } public void setUserPermissionFromPortal(String userId, List perms) { + if (CollectionUtils.isEmpty(perms)) { + return; + } redisCache.setCacheObject(permsKey(userId), perms); } public void setUserMenuFromPortal(String userId, List menus) { + if (CollectionUtils.isEmpty(menus)) { + return; + } redisCache.setCacheObject(menusKey(userId), menus); } diff --git a/shuili-system/src/main/java/com/kms/system/service/SysMenuService.java b/shuili-system/src/main/java/com/kms/system/service/SysMenuService.java index 0e349f5c..5396c298 100644 --- a/shuili-system/src/main/java/com/kms/system/service/SysMenuService.java +++ b/shuili-system/src/main/java/com/kms/system/service/SysMenuService.java @@ -16,9 +16,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.*; -import java.util.function.Function; import java.util.stream.Collectors; -import java.util.stream.Stream; /** * 菜单 业务层处理 @@ -103,39 +101,6 @@ public class SysMenuService extends BaseService { return getChildPerms(menus, "0"); } - public List selectMenuTreeByUserId(String userId, List menuList) { - List menus; - if ("1".equals(userId)) { - menus = menuMapper.selectMenuTreeAll(); - } else { - menus = menuMapper.selectMenuTreeByUserId(userId); - } - if (menus != null) { - return getChildPerms(unionMenu(menus, menuList), "0"); - } else { - return Collections.emptyList(); - } - } - - //菜单取并集 - private List unionMenu(List menuList, List menus) { - return Stream.concat(menuList.stream(), menus.stream()) - .collect(Collectors.toMap(SysMenu::getId, Function.identity(), (o1, o2) -> { - if (o1.getIsMain()) { - return o1; - } - if (o2.getIsMain()) { - return o2; - } - return o1; - })) - .values() - .stream() - .filter(item -> item.getStatus().equals("0")) - .collect(Collectors.toList()); - - } - /** * 根据角色ID查询菜单树信息 * From 70189f6ee61f47c6bd299099ab9e984b4bf9ff84 Mon Sep 17 00:00:00 2001 From: hxh <762326930@qq.com> Date: Mon, 3 Jun 2024 13:47:28 +0800 Subject: [PATCH 4/5] =?UTF-8?q?fix:=20=E8=B0=83=E6=95=B4=E9=97=A8=E6=88=B7?= =?UTF-8?q?=E8=8F=9C=E5=8D=95=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/system/SysLoginController.java | 53 ++++++++++++---- .../common/core/domain/entity/SysMenu.java | 8 ++- .../web/service/SysPermissionService.java | 12 ++-- .../com/kms/system/domain/vo/RouterVo.java | 63 +++++++++---------- .../kms/system/service/SysMenuService.java | 52 +++++++-------- 5 files changed, 105 insertions(+), 83 deletions(-) diff --git a/shuili-admin/src/main/java/com/kms/web/controller/system/SysLoginController.java b/shuili-admin/src/main/java/com/kms/web/controller/system/SysLoginController.java index be1dc874..baf57f57 100644 --- a/shuili-admin/src/main/java/com/kms/web/controller/system/SysLoginController.java +++ b/shuili-admin/src/main/java/com/kms/web/controller/system/SysLoginController.java @@ -3,6 +3,8 @@ package com.kms.web.controller.system; import cn.dev33.satoken.stp.StpUtil; import cn.hutool.core.collection.CollectionUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.TypeReference; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.kms.common.utils.UserUtils; @@ -40,6 +42,7 @@ import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.view.RedirectView; +import javax.annotation.PostConstruct; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @@ -73,6 +76,26 @@ public class SysLoginController extends BaseController { @Value("${water.redirect:}") private String redirect; +// @PostConstruct +// public void init() { +// String body = "{\"code\":200,\"message\":\"成功\",\"success\":true,\"data\":[{\"id\":\"1777906059376144386\",\"systemId\":\"1767111930266337282\",\"code\":\"85664171b34a4a1d87e8677481815b2e\",\"pid\":\"0\",\"type\":\"1\",\"name\":\"堤防运行管理\",\"compName\":\"\",\"seq\":1,\"icon\":null,\"path\":\"\",\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":[{\"id\":\"1777906234719023106\",\"systemId\":\"1767111930266337282\",\"code\":\"e1f7d6d8c76941f1847a8bb4b1cc887d\",\"pid\":\"1777906059376144386\",\"type\":\"1\",\"name\":\"工程状况\",\"compName\":null,\"seq\":1,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":[{\"id\":\"1777906437643644930\",\"systemId\":\"1767111930266337282\",\"code\":\"8f38ba5ba5fb4569b64a7f8e7ee29b96\",\"pid\":\"1777906234719023106\",\"type\":\"1\",\"name\":\"堤防基本信息\",\"compName\":\"\",\"seq\":0,\"icon\":null,\"path\":\"\",\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":\"\",\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1787676937009836033\",\"systemId\":\"1767111930266337282\",\"code\":\"f9fe83c780e54a50a709068c1f8bd07f\",\"pid\":\"1777906234719023106\",\"type\":\"1\",\"name\":\"标识标牌管理\",\"compName\":null,\"seq\":1,\"icon\":null,\"path\":\"\",\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":\"\",\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1796356902962147329\",\"systemId\":\"1767111930266337282\",\"code\":\"b47e4c4d20484790a2bfc233f8fdf8c5\",\"pid\":\"1777906234719023106\",\"type\":\"1\",\"name\":\"堤防对比页面\",\"compName\":null,\"seq\":3,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null}]},{\"id\":\"1778008659333296129\",\"systemId\":\"1767111930266337282\",\"code\":\"7e4624ce1e4d49279a59394decdd28ec\",\"pid\":\"1777906059376144386\",\"type\":\"1\",\"name\":\"运行管护\",\"compName\":null,\"seq\":2,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":[{\"id\":\"1778008877365800961\",\"systemId\":\"1767111930266337282\",\"code\":\"d829361aed664acdbaab128c89a6ec7c\",\"pid\":\"1778008659333296129\",\"type\":\"1\",\"name\":\"工程巡检\",\"compName\":null,\"seq\":1,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":[{\"id\":\"1778010832750325762\",\"systemId\":\"1767111930266337282\",\"code\":\"09b65d8be95942d1af76848bdcce964d\",\"pid\":\"1778008877365800961\",\"type\":\"1\",\"name\":\"巡查项目管理\",\"compName\":null,\"seq\":1,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1787759522595549186\",\"systemId\":\"1767111930266337282\",\"code\":\"92a7893fb8024372ae13f6598deff5ee\",\"pid\":\"1778008877365800961\",\"type\":\"1\",\"name\":\"堤防巡查管理\",\"compName\":null,\"seq\":2,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1796361593309704193\",\"systemId\":\"1767111930266337282\",\"code\":\"0e55e53cf99f417d8a3cb058f7f525ec\",\"pid\":\"1778008877365800961\",\"type\":\"1\",\"name\":\"巡查计划管理\",\"compName\":null,\"seq\":2,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null}]},{\"id\":\"1787759002698985474\",\"systemId\":\"1767111930266337282\",\"code\":\"0c65b8e973b245f6b7453d64260ae1c9\",\"pid\":\"1778008659333296129\",\"type\":\"1\",\"name\":\"维修养护\",\"compName\":null,\"seq\":3,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":[{\"id\":\"1788050320633442306\",\"systemId\":\"1767111930266337282\",\"code\":\"364f425d93344ffa890c5ec185c28c49\",\"pid\":\"1787759002698985474\",\"type\":\"1\",\"name\":\"维修养护管理\",\"compName\":null,\"seq\":1,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1788050537583816705\",\"systemId\":\"1767111930266337282\",\"code\":\"3f7cf2a425984fc391100536d472517c\",\"pid\":\"1787759002698985474\",\"type\":\"1\",\"name\":\"维修养护计划\",\"compName\":null,\"seq\":2,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1788050631255207937\",\"systemId\":\"1767111930266337282\",\"code\":\"29a31582ce3147449b6c0d6718f00d38\",\"pid\":\"1787759002698985474\",\"type\":\"1\",\"name\":\"修养记录\",\"compName\":null,\"seq\":3,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null}]},{\"id\":\"1787759146978848769\",\"systemId\":\"1767111930266337282\",\"code\":\"a382ef796b234538a18a30cac8b8ec69\",\"pid\":\"1778008659333296129\",\"type\":\"1\",\"name\":\"水雨情测报\",\"compName\":null,\"seq\":4,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":[{\"id\":\"1788050827309559810\",\"systemId\":\"1767111930266337282\",\"code\":\"77a5de4ee8fd4e5484b6d96667fd7c6a\",\"pid\":\"1787759146978848769\",\"type\":\"1\",\"name\":\"堤防测报管理\",\"compName\":null,\"seq\":1,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1788050904765771778\",\"systemId\":\"1767111930266337282\",\"code\":\"8cb6efd0c7f8470481501d244cc00b40\",\"pid\":\"1787759146978848769\",\"type\":\"1\",\"name\":\"水雨情监测\",\"compName\":null,\"seq\":2,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1788050973346836481\",\"systemId\":\"1767111930266337282\",\"code\":\"8098adaf04344108b714e7bb57a09b2b\",\"pid\":\"1787759146978848769\",\"type\":\"1\",\"name\":\"水雨情智能分析\",\"compName\":null,\"seq\":3,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null}]},{\"id\":\"1787751440452759554\",\"systemId\":\"1767111930266337282\",\"code\":\"26db00db08f940758527b9a9b99ab387\",\"pid\":\"1778008659333296129\",\"type\":\"1\",\"name\":\"病险工程核查\",\"compName\":null,\"seq\":5,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":[{\"id\":\"1788051806314639361\",\"systemId\":\"1767111930266337282\",\"code\":\"54651202e2a24408a5134bea8bf76ea9\",\"pid\":\"1787751440452759554\",\"type\":\"1\",\"name\":\"核查分组管理\",\"compName\":null,\"seq\":2,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1788051873561915394\",\"systemId\":\"1767111930266337282\",\"code\":\"9d266937ea0b407e84fcc3f9c86335a9\",\"pid\":\"1787751440452759554\",\"type\":\"1\",\"name\":\"核查任务管理\",\"compName\":null,\"seq\":3,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1788051944596647938\",\"systemId\":\"1767111930266337282\",\"code\":\"ae5a74c25be942669cb148951140aedf\",\"pid\":\"1787751440452759554\",\"type\":\"1\",\"name\":\"工程核查\",\"compName\":null,\"seq\":4,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1788052023667666946\",\"systemId\":\"1767111930266337282\",\"code\":\"e94a0222f17641fd9a27b5ba332076d4\",\"pid\":\"1787751440452759554\",\"type\":\"1\",\"name\":\"核查报告\",\"compName\":null,\"seq\":5,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1787751557121519618\",\"systemId\":\"1767111930266337282\",\"code\":\"43dfa8fc4eb7439790fc83af6fca7166\",\"pid\":\"1787751440452759554\",\"type\":\"1\",\"name\":\"核查项目设置\",\"compName\":null,\"seq\":6,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1788052103099396098\",\"systemId\":\"1767111930266337282\",\"code\":\"5aa53d12455e40bc890365270b0092f3\",\"pid\":\"1787751440452759554\",\"type\":\"1\",\"name\":\"核查任务详情\",\"compName\":null,\"seq\":6,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1788052449314025473\",\"systemId\":\"1767111930266337282\",\"code\":\"7e1a4f8d8e2f4c8da0dfcc2606c59d5b\",\"pid\":\"1787751440452759554\",\"type\":\"1\",\"name\":\"核查项目详情\",\"compName\":null,\"seq\":7,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1788101940381560833\",\"systemId\":\"1767111930266337282\",\"code\":\"9a2d3f85e57045b388c2920fa0d12865\",\"pid\":\"1787751440452759554\",\"type\":\"1\",\"name\":\"核查报告详情\",\"compName\":null,\"seq\":7,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1788102054118502402\",\"systemId\":\"1767111930266337282\",\"code\":\"abe830193d8e425c8fff4bd73f28b442\",\"pid\":\"1787751440452759554\",\"type\":\"1\",\"name\":\"统计分析\",\"compName\":null,\"seq\":8,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1788102125396504577\",\"systemId\":\"1767111930266337282\",\"code\":\"b458e62fb98c4ebf82b8e5e01b7276d7\",\"pid\":\"1787751440452759554\",\"type\":\"1\",\"name\":\"核查填报\",\"compName\":null,\"seq\":8,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null}]},{\"id\":\"1787759230122536962\",\"systemId\":\"1767111930266337282\",\"code\":\"f3f80d66ae8643ff8fece7ca493db7b3\",\"pid\":\"1778008659333296129\",\"type\":\"1\",\"name\":\"害堤动物防治\",\"compName\":null,\"seq\":5,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":[{\"id\":\"1788051190733418498\",\"systemId\":\"1767111930266337282\",\"code\":\"69a737719e0f4726a68dfe5231e66733\",\"pid\":\"1787759230122536962\",\"type\":\"1\",\"name\":\"防治计划管理\",\"compName\":null,\"seq\":1,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1788051260899930114\",\"systemId\":\"1767111930266337282\",\"code\":\"972bb0e3caff4e3b850f4d634cc1950d\",\"pid\":\"1787759230122536962\",\"type\":\"1\",\"name\":\"害堤防治管理\",\"compName\":null,\"seq\":2,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1788051329787179009\",\"systemId\":\"1767111930266337282\",\"code\":\"958437067f9d45f8988a0a97065525bf\",\"pid\":\"1787759230122536962\",\"type\":\"1\",\"name\":\"防治记录\",\"compName\":null,\"seq\":3,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null}]},{\"id\":\"1787759339317047298\",\"systemId\":\"1767111930266337282\",\"code\":\"4662f7d0af464f93873e9ebdfbb65595\",\"pid\":\"1778008659333296129\",\"type\":\"1\",\"name\":\"动态监测\",\"compName\":null,\"seq\":7,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null}]},{\"id\":\"1787679637655072769\",\"systemId\":\"1767111930266337282\",\"code\":\"A_df606910974bf69b58079ae2382f87\",\"pid\":\"1777906059376144386\",\"type\":\"1\",\"name\":\"安全管理\",\"compName\":\"\",\"seq\":3,\"icon\":null,\"path\":\"\",\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":\"\",\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":[{\"id\":\"1787680058536701954\",\"systemId\":\"1767111930266337282\",\"code\":\"A_20876d87684fd2a2cf2980696b521e\",\"pid\":\"1787679637655072769\",\"type\":\"1\",\"name\":\"申报管理_填报\",\"compName\":null,\"seq\":0,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1787680227923668994\",\"systemId\":\"1767111930266337282\",\"code\":\"A_da55af64c34a1a88a58277f7c46248\",\"pid\":\"1787679637655072769\",\"type\":\"1\",\"name\":\"申报管理_审核\",\"compName\":null,\"seq\":1,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1787680355745083394\",\"systemId\":\"1767111930266337282\",\"code\":\"A_6c54ef447346cf95f7feffaa1bf927\",\"pid\":\"1787679637655072769\",\"type\":\"1\",\"name\":\"责任人管理\",\"compName\":null,\"seq\":2,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1787680720162992129\",\"systemId\":\"1767111930266337282\",\"code\":\"A_4c129e452c4f12810f9c8c4cb3c24f\",\"pid\":\"1787679637655072769\",\"type\":\"1\",\"name\":\"确权划界管理\",\"compName\":null,\"seq\":3,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1787680819937095681\",\"systemId\":\"1767111930266337282\",\"code\":\"A_a93cd4b77c48b495315b4039c9f108\",\"pid\":\"1787679637655072769\",\"type\":\"1\",\"name\":\"安全鉴定管理\",\"compName\":null,\"seq\":4,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":[{\"id\":\"1787680965122928641\",\"systemId\":\"1767111930266337282\",\"code\":\"B_47f97fcad14fbcb1871e6e3e4b738c\",\"pid\":\"1787680819937095681\",\"type\":\"1\",\"name\":\"安全鉴定任务\",\"compName\":null,\"seq\":0,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1787681158820081665\",\"systemId\":\"1767111930266337282\",\"code\":\"B_dab940ec0d4a439181417e0fb1abe4\",\"pid\":\"1787680819937095681\",\"type\":\"1\",\"name\":\"安全鉴定清单\",\"compName\":null,\"seq\":1,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1787681390551183362\",\"systemId\":\"1767111930266337282\",\"code\":\"B_409da6d6724ddf89d34f91458f6e66\",\"pid\":\"1787680819937095681\",\"type\":\"1\",\"name\":\"安全鉴定统计\",\"compName\":null,\"seq\":2,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null}]},{\"id\":\"1787681586118995969\",\"systemId\":\"1767111930266337282\",\"code\":\"A_a6e92ff2c94545924317cc84c87c46\",\"pid\":\"1787679637655072769\",\"type\":\"1\",\"name\":\"防汛管理\",\"compName\":null,\"seq\":5,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":[{\"id\":\"1787681710161342466\",\"systemId\":\"1767111930266337282\",\"code\":\"B_9d9b5b7cc143ff90f9ff9e47742554\",\"pid\":\"1787681586118995969\",\"type\":\"1\",\"name\":\"防汛组织管理\",\"compName\":null,\"seq\":0,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1787681830101659650\",\"systemId\":\"1767111930266337282\",\"code\":\"B_48c79215734567ae4af6ddef0c208e\",\"pid\":\"1787681586118995969\",\"type\":\"1\",\"name\":\"防汛物资管理\",\"compName\":null,\"seq\":1,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1787681929330503681\",\"systemId\":\"1767111930266337282\",\"code\":\"B_e7fb1b47e1483db66666da075b3540\",\"pid\":\"1787681586118995969\",\"type\":\"1\",\"name\":\"防汛电源管理\",\"compName\":null,\"seq\":2,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1787682059811106818\",\"systemId\":\"1767111930266337282\",\"code\":\"B_fc57f9e5974ce6911dc8fe9cb8d660\",\"pid\":\"1787681586118995969\",\"type\":\"1\",\"name\":\"防汛预案管理\",\"compName\":null,\"seq\":3,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null}]},{\"id\":\"1787682182028931074\",\"systemId\":\"1767111930266337282\",\"code\":\"A_9f0759e12849c2bb64247b6f861bc6\",\"pid\":\"1787679637655072769\",\"type\":\"1\",\"name\":\"安全生产\",\"compName\":null,\"seq\":6,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null}]},{\"id\":\"1787682307635752961\",\"systemId\":\"1767111930266337282\",\"code\":\"3b888e5f0f9d466cb7eadc78acb0e716\",\"pid\":\"1777906059376144386\",\"type\":\"1\",\"name\":\"管理保障\",\"compName\":null,\"seq\":4,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":[{\"id\":\"1796349678097346562\",\"systemId\":\"1767111930266337282\",\"code\":\"5da6b4fe05874f30b3be684619e61d1a\",\"pid\":\"1787682307635752961\",\"type\":\"1\",\"name\":\"档案管理\",\"compName\":null,\"seq\":1,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1796349753863254017\",\"systemId\":\"1767111930266337282\",\"code\":\"359268934e9143649d9f55cda87ab660\",\"pid\":\"1787682307635752961\",\"type\":\"1\",\"name\":\"经费保障\",\"compName\":null,\"seq\":2,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1796349833353703426\",\"systemId\":\"1767111930266337282\",\"code\":\"e862e75f8ea44698bfbbe805bbac087d\",\"pid\":\"1787682307635752961\",\"type\":\"1\",\"name\":\"标准化建设\",\"compName\":null,\"seq\":3,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null}]}]},{\"id\":\"1793556526064021506\",\"systemId\":\"1767111930266337282\",\"code\":\"4820885a4cca4930872d7d7caeb2d802\",\"pid\":\"0\",\"type\":\"1\",\"name\":\"水闸运行管理\",\"compName\":null,\"seq\":2,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":[{\"id\":\"1793575688798810114\",\"systemId\":\"1767111930266337282\",\"code\":\"bc0110fd46034cb78a91256fbc210c05\\t\",\"pid\":\"1793556526064021506\",\"type\":\"1\",\"name\":\"工程状况\",\"compName\":null,\"seq\":1,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":[{\"id\":\"1796349995593576449\",\"systemId\":\"1767111930266337282\",\"code\":\"7f978b73a38b424f94cc500cd6e84d47\",\"pid\":\"1793575688798810114\",\"type\":\"1\",\"name\":\"水闸基本信息\",\"compName\":null,\"seq\":1,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1796350066708000769\",\"systemId\":\"1767111930266337282\",\"code\":\"16a535dc1a6043a88544bc0673d618c6\",\"pid\":\"1793575688798810114\",\"type\":\"1\",\"name\":\"水闸基本信息选项卡\",\"compName\":null,\"seq\":2,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1796350287097704449\",\"systemId\":\"1767111930266337282\",\"code\":\"568ac0d4406f4294b6413006571b178f\",\"pid\":\"1793575688798810114\",\"type\":\"1\",\"name\":\"标识标牌管理\",\"compName\":null,\"seq\":3,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1796350353111855106\",\"systemId\":\"1767111930266337282\",\"code\":\"723784bf1a8a49668ef764ca46b63ece\",\"pid\":\"1793575688798810114\",\"type\":\"1\",\"name\":\"水闸对比页面\",\"compName\":null,\"seq\":4,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null}]},{\"id\":\"1793558653003968514\",\"systemId\":\"1767111930266337282\",\"code\":\"a56aab90c27d4d9bb9f896de8e537944\",\"pid\":\"1793556526064021506\",\"type\":\"1\",\"name\":\"运行管护\",\"compName\":null,\"seq\":2,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":[{\"id\":\"1793559854688841729\",\"systemId\":\"1767111930266337282\",\"code\":\"bc79940eb32443fea3ac016fd224de0a\",\"pid\":\"1793558653003968514\",\"type\":\"1\",\"name\":\"工程巡查\",\"compName\":null,\"seq\":0,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":[{\"id\":\"1793560468005138433\",\"systemId\":\"1767111930266337282\",\"code\":\"313252ed616148be88f072f65b8a60b2\",\"pid\":\"1793559854688841729\",\"type\":\"1\",\"name\":\"巡查项目管理\",\"compName\":null,\"seq\":0,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1793560522405261313\",\"systemId\":\"1767111930266337282\",\"code\":\"fc2598ec4cd24788a33385bb342271f4\",\"pid\":\"1793559854688841729\",\"type\":\"1\",\"name\":\"巡查路线设置\",\"compName\":null,\"seq\":1,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1793560584002809858\",\"systemId\":\"1767111930266337282\",\"code\":\"1cd0041896bd41dcac9e1cd6d203ccbc\",\"pid\":\"1793559854688841729\",\"type\":\"1\",\"name\":\"巡查计划管理\",\"compName\":null,\"seq\":2,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1793560648876109826\",\"systemId\":\"1767111930266337282\",\"code\":\"528ae03de41149bba0aa3446721cb205\",\"pid\":\"1793559854688841729\",\"type\":\"1\",\"name\":\"巡查项详情\",\"compName\":null,\"seq\":3,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1793560725829005313\",\"systemId\":\"1767111930266337282\",\"code\":\"9ab0791b65c64b189158a1a0098c8244\",\"pid\":\"1793559854688841729\",\"type\":\"1\",\"name\":\"水闸巡查管理\",\"compName\":null,\"seq\":4,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1793560772259950593\",\"systemId\":\"1767111930266337282\",\"code\":\"f6f3db8b9a71461487c1d366d5d2e6ba\",\"pid\":\"1793559854688841729\",\"type\":\"1\",\"name\":\"巡查记录\",\"compName\":null,\"seq\":5,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null}]},{\"id\":\"1793559910242398210\",\"systemId\":\"1767111930266337282\",\"code\":\"2d26df05dea643b5842ac12e39f25785\",\"pid\":\"1793558653003968514\",\"type\":\"1\",\"name\":\"维修养护\",\"compName\":null,\"seq\":1,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":[{\"id\":\"1793560855596576770\",\"systemId\":\"1767111930266337282\",\"code\":\"f512341df2a8454e830fd2635e34b1bb\",\"pid\":\"1793559910242398210\",\"type\":\"1\",\"name\":\"维修养护管理\",\"compName\":null,\"seq\":0,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1793560912391647234\",\"systemId\":\"1767111930266337282\",\"code\":\"038691476a374368ac1934371a22ed2d\",\"pid\":\"1793559910242398210\",\"type\":\"1\",\"name\":\"维修养护计划\",\"compName\":null,\"seq\":1,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1793560992263778306\",\"systemId\":\"1767111930266337282\",\"code\":\"f3e4f97a9aa8493892e8fbb3eeaa0efe\",\"pid\":\"1793559910242398210\",\"type\":\"1\",\"name\":\"维修养护记录\",\"compName\":null,\"seq\":2,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null}]},{\"id\":\"1793559961224163329\",\"systemId\":\"1767111930266337282\",\"code\":\"2e2e13824d9c4a81b14314c8bcb307b0\",\"pid\":\"1793558653003968514\",\"type\":\"1\",\"name\":\"调度运用\",\"compName\":null,\"seq\":2,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":[{\"id\":\"1793561162300862466\",\"systemId\":\"1767111930266337282\",\"code\":\"2b74d23af5f5435594b1c12cb573700d\",\"pid\":\"1793559961224163329\",\"type\":\"1\",\"name\":\"调度运用管理\",\"compName\":null,\"seq\":0,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1793561202788478977\",\"systemId\":\"1767111930266337282\",\"code\":\"583d8233adc741d3a7610e464a3555ea\",\"pid\":\"1793559961224163329\",\"type\":\"1\",\"name\":\"水闸操作记录\",\"compName\":null,\"seq\":1,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1793561243041214466\",\"systemId\":\"1767111930266337282\",\"code\":\"773200b686d14ed3bdc4f0486229547f\",\"pid\":\"1793559961224163329\",\"type\":\"1\",\"name\":\"调度计划管理\",\"compName\":null,\"seq\":2,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null}]},{\"id\":\"1793560030723780609\",\"systemId\":\"1767111930266337282\",\"code\":\"966888dd429c42ad87810410e045b988\",\"pid\":\"1793558653003968514\",\"type\":\"1\",\"name\":\"水闸水雨情测报\",\"compName\":null,\"seq\":3,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":[{\"id\":\"1793561372934615041\",\"systemId\":\"1767111930266337282\",\"code\":\"6956f7271aa449aebaafb7cc8a8479da\",\"pid\":\"1793560030723780609\",\"type\":\"1\",\"name\":\"水闸测报管理\",\"compName\":null,\"seq\":0,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1793561427758362625\",\"systemId\":\"1767111930266337282\",\"code\":\"9ec49b88c37845729ca18d924c69bb59\",\"pid\":\"1793560030723780609\",\"type\":\"1\",\"name\":\"水闸水雨情智能分析\",\"compName\":null,\"seq\":1,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null}]},{\"id\":\"1793560081219006466\",\"systemId\":\"1767111930266337282\",\"code\":\"00ac3d79c1ee4993a415e6f793df1593\",\"pid\":\"1793558653003968514\",\"type\":\"1\",\"name\":\"监督检查\",\"compName\":null,\"seq\":4,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":[{\"id\":\"1793561584700829698\",\"systemId\":\"1767111930266337282\",\"code\":\"3e82ff82619048c3af822e81f1dc8d42\",\"pid\":\"1793560081219006466\",\"type\":\"1\",\"name\":\"办法管理\",\"compName\":null,\"seq\":0,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1793561666753998850\",\"systemId\":\"1767111930266337282\",\"code\":\"ebf0a83ac12b4611b8b04e5bfe35d9a1\",\"pid\":\"1793560081219006466\",\"type\":\"1\",\"name\":\"任务管理\",\"compName\":null,\"seq\":1,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1793561705513562114\",\"systemId\":\"1767111930266337282\",\"code\":\"0e5d2ec8976b4f2a86773a604789fdd0\",\"pid\":\"1793560081219006466\",\"type\":\"1\",\"name\":\"工程管理\",\"compName\":null,\"seq\":2,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1793561746647101442\",\"systemId\":\"1767111930266337282\",\"code\":\"3219e42af6bb45919ecb805626c5a6d9\",\"pid\":\"1793560081219006466\",\"type\":\"1\",\"name\":\"办法项目配置\",\"compName\":null,\"seq\":3,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1793561792214020097\",\"systemId\":\"1767111930266337282\",\"code\":\"67e1cf6a5af643dc8f57b5643f678bbb\",\"pid\":\"1793560081219006466\",\"type\":\"1\",\"name\":\"工程上报\",\"compName\":null,\"seq\":4,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1793561887462469633\",\"systemId\":\"1767111930266337282\",\"code\":\"8ae9829895a44194a4e5f42979f0bd88\",\"pid\":\"1793560081219006466\",\"type\":\"1\",\"name\":\"工程报告\",\"compName\":null,\"seq\":6,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1793561943481593857\",\"systemId\":\"1767111930266337282\",\"code\":\"f776499a2d70446dbd31c5aff7ebdc0b\",\"pid\":\"1793560081219006466\",\"type\":\"1\",\"name\":\"问题管理\",\"compName\":null,\"seq\":6,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1793561987744083969\",\"systemId\":\"1767111930266337282\",\"code\":\"f90eb9f2c7c44413872499de126aa99d\",\"pid\":\"1793560081219006466\",\"type\":\"1\",\"name\":\"任务详情\",\"compName\":null,\"seq\":7,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1793562051329732610\",\"systemId\":\"1767111930266337282\",\"code\":\"95be40b74cb04133bd114e573a1364cf\",\"pid\":\"1793560081219006466\",\"type\":\"1\",\"name\":\"统计分析\",\"compName\":null,\"seq\":8,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1793562097773260802\",\"systemId\":\"1767111930266337282\",\"code\":\"ecb557f1429d4e7a894fc686f6ba2dcd\",\"pid\":\"1793560081219006466\",\"type\":\"1\",\"name\":\"办法详情\",\"compName\":null,\"seq\":9,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null}]},{\"id\":\"1793560208218337281\",\"systemId\":\"1767111930266337282\",\"code\":\"9643924e57ad464abdfb233614b9a7b5\",\"pid\":\"1793558653003968514\",\"type\":\"1\",\"name\":\"病险工程核查\",\"compName\":null,\"seq\":5,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":[{\"id\":\"1793562332624924673\",\"systemId\":\"1767111930266337282\",\"code\":\"4c8de95bf8d44fbaacddff983977d399\",\"pid\":\"1793560208218337281\",\"type\":\"1\",\"name\":\"核查项目设置\",\"compName\":null,\"seq\":0,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1793562382641999874\",\"systemId\":\"1767111930266337282\",\"code\":\"93ff2af3fa124749bd21d657f9fa82ad\",\"pid\":\"1793560208218337281\",\"type\":\"1\",\"name\":\"核查分组管理\",\"compName\":null,\"seq\":1,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1793562419392491522\",\"systemId\":\"1767111930266337282\",\"code\":\"57f194c1c0544120b2ec9ee358fe0bd3\",\"pid\":\"1793560208218337281\",\"type\":\"1\",\"name\":\"核查任务管理\",\"compName\":null,\"seq\":2,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1793562454138105857\",\"systemId\":\"1767111930266337282\",\"code\":\"8a2611f560f8481e86dd3e7e2c785b1a\",\"pid\":\"1793560208218337281\",\"type\":\"1\",\"name\":\"工程核查\",\"compName\":null,\"seq\":3,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1793562526506627073\",\"systemId\":\"1767111930266337282\",\"code\":\"bf67c547f2824a74b15c80386ab5181c\",\"pid\":\"1793560208218337281\",\"type\":\"1\",\"name\":\"核查报告管理\",\"compName\":null,\"seq\":4,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1793562562900602882\",\"systemId\":\"1767111930266337282\",\"code\":\"e2af6c74c8b1427f83ddb23b888769be\",\"pid\":\"1793560208218337281\",\"type\":\"1\",\"name\":\"核查项目详情\",\"compName\":null,\"seq\":5,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1793562605850275842\",\"systemId\":\"1767111930266337282\",\"code\":\"4b874673cedb45dea6e8cd398d1bc073\",\"pid\":\"1793560208218337281\",\"type\":\"1\",\"name\":\"核查报告\",\"compName\":null,\"seq\":6,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1793562663601647617\",\"systemId\":\"1767111930266337282\",\"code\":\"98e4ee10e7a8422a8283ecc8764cbcf1\",\"pid\":\"1793560208218337281\",\"type\":\"1\",\"name\":\"核查填报\",\"compName\":null,\"seq\":7,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1793562739019427841\",\"systemId\":\"1767111930266337282\",\"code\":\"aa8dfb9b75d444d4900dc078bb7141d9\",\"pid\":\"1793560208218337281\",\"type\":\"1\",\"name\":\"核查任务详情\",\"compName\":null,\"seq\":8,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1796355314805714946\",\"systemId\":\"1767111930266337282\",\"code\":\"ff98c8675e57413d965d5408fe5ee5c1\",\"pid\":\"1793560208218337281\",\"type\":\"1\",\"name\":\"统计分析\",\"compName\":null,\"seq\":10,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null}]},{\"id\":\"1793564019007762433\",\"systemId\":\"1767111930266337282\",\"code\":\"06d65eac04b24c82b8b9b6512ddbd6ad\",\"pid\":\"1793558653003968514\",\"type\":\"1\",\"name\":\"动态监测\",\"compName\":null,\"seq\":7,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":[{\"id\":\"1796355640325648385\",\"systemId\":\"1767111930266337282\",\"code\":\"0c6db2ab60f44f3e9aed1cf86ef457fa\",\"pid\":\"1793564019007762433\",\"type\":\"1\",\"name\":\"水闸动态监测\",\"compName\":null,\"seq\":1,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1793564131415109633\",\"systemId\":\"1767111930266337282\",\"code\":\"3dfde024752148348cf6173bcb8d3cf5\",\"pid\":\"1793564019007762433\",\"type\":\"1\",\"name\":\"水闸动态监测历史记录\",\"compName\":null,\"seq\":2,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null}]}]},{\"id\":\"1793558569512153090\",\"systemId\":\"1767111930266337282\",\"code\":\"50df606910974bf69b58079ae2382f87\",\"pid\":\"1793556526064021506\",\"type\":\"1\",\"name\":\"安全管理\",\"compName\":null,\"seq\":3,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":[{\"id\":\"1793558850358554626\",\"systemId\":\"1767111930266337282\",\"code\":\"2830a8101efe464c9eb5b59e8f46607d\",\"pid\":\"1793558569512153090\",\"type\":\"1\",\"name\":\"填报_申报管理选项卡\",\"compName\":null,\"seq\":1,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1796350471659663361\",\"systemId\":\"1767111930266337282\",\"code\":\"06da55af64c34a1a88a58277f7c46248\",\"pid\":\"1793558569512153090\",\"type\":\"1\",\"name\":\"申报管理_审核\",\"compName\":null,\"seq\":3,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1796350658834673666\",\"systemId\":\"1767111930266337282\",\"code\":\"0744350d7c434546b46fff40882571ae\",\"pid\":\"1793558569512153090\",\"type\":\"1\",\"name\":\"审核_申报管理选项卡\",\"compName\":null,\"seq\":4,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1796350728527228929\",\"systemId\":\"1767111930266337282\",\"code\":\"426c54ef447346cf95f7feffaa1bf927\",\"pid\":\"1793558569512153090\",\"type\":\"1\",\"name\":\"责任人管理\",\"compName\":null,\"seq\":5,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1796350817366781953\",\"systemId\":\"1767111930266337282\",\"code\":\"384c129e452c4f12810f9c8c4cb3c24f\",\"pid\":\"1793558569512153090\",\"type\":\"1\",\"name\":\"确权划界管理\",\"compName\":null,\"seq\":6,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null}]},{\"id\":\"1793558729612931074\",\"systemId\":\"1767111930266337282\",\"code\":\"1c1124dd8ba64fb0955c2c7e002c6f0f\",\"pid\":\"1793556526064021506\",\"type\":\"1\",\"name\":\"管理保障\",\"compName\":null,\"seq\":4,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":[{\"id\":\"1793562953826512898\",\"systemId\":\"1767111930266337282\",\"code\":\"01050a1b09394675a57c611bd34f0024\",\"pid\":\"1793558729612931074\",\"type\":\"1\",\"name\":\"档案管理\",\"compName\":null,\"seq\":0,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1793563551414169602\",\"systemId\":\"1767111930266337282\",\"code\":\"29e88591686142e5af0a949f603ecea0\",\"pid\":\"1793558729612931074\",\"type\":\"1\",\"name\":\"经费保障\",\"compName\":null,\"seq\":1,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1793563593613062145\",\"systemId\":\"1767111930266337282\",\"code\":\"ed21031c6692428ebdaefa7e571e1640\",\"pid\":\"1793558729612931074\",\"type\":\"1\",\"name\":\"标准化建设\",\"compName\":null,\"seq\":2,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null}]}]},{\"id\":\"1796367687213985793\",\"systemId\":\"1767111930266337282\",\"code\":\"cb86824acb9347dbbb0dcd90b5fef391\",\"pid\":\"0\",\"type\":\"1\",\"name\":\"智能监管\",\"compName\":null,\"seq\":3,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":[{\"id\":\"1796367892026044417\",\"systemId\":\"1767111930266337282\",\"code\":\"9084032ec3f1413daf759c0cc38e1083\",\"pid\":\"1796367687213985793\",\"type\":\"1\",\"name\":\"图层数据配置\",\"compName\":null,\"seq\":1,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":[{\"id\":\"1796368101602832385\",\"systemId\":\"1767111930266337282\",\"code\":\"16f8801ba2e34cb29c09e4829295ba9b\",\"pid\":\"1796367892026044417\",\"type\":\"1\",\"name\":\"资源目录\",\"compName\":null,\"seq\":1,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1796368187032416258\",\"systemId\":\"1767111930266337282\",\"code\":\"61e66dbf6e2247239f68b11a0b3c1456\",\"pid\":\"1796367892026044417\",\"type\":\"1\",\"name\":\"资源目录详情\",\"compName\":null,\"seq\":2,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null}]},{\"id\":\"1796368298823200769\",\"systemId\":\"1767111930266337282\",\"code\":\"26214fe3909d490f90b41a509b4ded96\",\"pid\":\"1796367687213985793\",\"type\":\"1\",\"name\":\"工程管理\",\"compName\":null,\"seq\":2,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":[{\"id\":\"1796368367047749634\",\"systemId\":\"1767111930266337282\",\"code\":\"28e1c4dedeb842498d262c7eb5105cc7\",\"pid\":\"1796368298823200769\",\"type\":\"1\",\"name\":\"运行场景配置\",\"compName\":null,\"seq\":1,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1796369347743133698\",\"systemId\":\"1767111930266337282\",\"code\":\"407a0853686043b18bdebc77ea55f4a2\",\"pid\":\"1796368298823200769\",\"type\":\"1\",\"name\":\"运行场景配置详情\",\"compName\":null,\"seq\":2,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null},{\"id\":\"1796373940078194690\",\"systemId\":\"1767111930266337282\",\"code\":\"d53a5d18f41a4a439a7fa686b90e54dc\",\"pid\":\"1796368298823200769\",\"type\":\"1\",\"name\":\"资源目录详情\",\"compName\":null,\"seq\":4,\"icon\":null,\"path\":null,\"visible\":\"1\",\"status\":\"1\",\"permissionCode\":null,\"remark\":null,\"routerMenu\":null,\"iframe\":\"0\",\"extendFields\":null,\"children\":null}]}]}],\"timestamp\":1717387167480}"; +// WaterResultV2> source = JSON.parseObject(body, new TypeReference>>() { +// }); +// List sMenus = source.getData(); +// List menus = sMenus.stream().flatMap(item -> { +// if (item.getChildren() != null) { +// return Stream.concat(Stream.of(item), getChildMenu(item.getChildren())); +// } else { +// return Stream.of(item); +// } +// }).map(item -> MenuDto.builder() +// .code(item.getCode()) +// .seq(item.getSeq()) +// .status(item.getStatus().equals("1") ? "0" : "1") +// .build()).collect(Collectors.toList()); +// permissionService.setUserMenuFromPortal("1", menus); +// } + @PostMapping("/login") @ApiOperation("登录接口") public AjaxResult login(@RequestBody LoginBody loginBody) { @@ -183,16 +206,17 @@ public class SysLoginController extends BaseController { @RequestParam(name = "page", required = false) String page, @RequestParam(name = "token") String token) throws IOException { CompletableFuture> menusFuture = CompletableFuture.supplyAsync(() -> portalMenu(token)); - CompletableFuture userFuture = CompletableFuture.supplyAsync(() -> innerLogin(token)); + CompletableFuture userFuture = CompletableFuture.supplyAsync(() -> innerLogin(token)); CompletableFuture.allOf(menusFuture, userFuture).join(); List menus = menusFuture.join(); - SimpleUser simpleUser = userFuture.join(); + SysUser simpleUser = userFuture.join(); if (simpleUser == null) { throw new BaseException("账号异常,登陆失败"); } permissionService.setUserMenuFromPortal(simpleUser.getId(), menus); - - RedirectView redirectView = new RedirectView(redirect + "?token=" + simpleUser.getToken() + "&page=" + page); + StpUtil.login(simpleUser.getId()); + StpUtil.getSession().set("jianwei-user", simpleUser); + RedirectView redirectView = new RedirectView(redirect + "?token=" + StpUtil.getTokenValue() + "&page=" + page); return new ModelAndView(redirectView); } @@ -201,19 +225,26 @@ public class SysLoginController extends BaseController { List sMenus = source.getData(); return sMenus.stream().flatMap(item -> { if (item.getChildren() != null) { - return Stream.concat(Stream.of(item), item.getChildren().stream()); + return Stream.concat(Stream.of(item), getChildMenu(item.getChildren())); } else { return Stream.of(item); } }).map(item -> MenuDto.builder() .code(item.getCode()) - .visible(item.getVisible().equals("1") ? "0" : "1") .seq(item.getSeq()) .status(item.getStatus().equals("1") ? "0" : "1") .build()).collect(Collectors.toList()); } - private SimpleUser innerLogin(String token) { + public Stream getChildMenu(List sub) { + if (sub == null) { + return Stream.empty(); + } else { + return sub.stream().flatMap(item -> Stream.concat(Stream.of(item), getChildMenu(item.getChildren()))); + } + } + + private SysUser innerLogin(String token) { WaterResultV2 user = waterRequestUtil.authUser(token); String uid = user.getData().getUser().getId(); QueryWrapper query = Wrappers.query(); @@ -228,11 +259,9 @@ public class SysLoginController extends BaseController { } catch (Exception e) { return null; } - CompletableFuture loginFuture = CompletableFuture.runAsync(() -> StpUtil.login(sysUser.getId())); - CompletableFuture sectionFuture = CompletableFuture.runAsync(() -> StpUtil.getSession().set("jianwei-user", sysUser)); - CompletableFuture permissionFuture = CompletableFuture.runAsync(() -> permissionService.setUserPermissionFromPortal(sysUser.getId(), user.getData().getFunctionPerms())); - CompletableFuture.allOf(loginFuture, sectionFuture, permissionFuture).join(); - return new SimpleUser(sysUser.getId(), StpUtil.getTokenValue()); + + permissionService.setUserPermissionFromPortal(sysUser.getId(), user.getData().getFunctionPerms()); + return sysUser; } @Data diff --git a/shuili-framework/src/main/java/com/shuili/common/core/domain/entity/SysMenu.java b/shuili-framework/src/main/java/com/shuili/common/core/domain/entity/SysMenu.java index 7c64157d..926019e4 100644 --- a/shuili-framework/src/main/java/com/shuili/common/core/domain/entity/SysMenu.java +++ b/shuili-framework/src/main/java/com/shuili/common/core/domain/entity/SysMenu.java @@ -39,7 +39,7 @@ public class SysMenu extends BaseEntity { /** * 显示顺序 */ - private String orderNum; + private Integer orderNum; /** * 路由地址 @@ -91,6 +91,8 @@ public class SysMenu extends BaseEntity { private List children = new ArrayList(); + + @NotBlank(message = "菜单名称不能为空") @Size(min = 0, max = 50, message = "菜单名称长度不能超过50个字符") public String getMenuName() { @@ -118,11 +120,11 @@ public class SysMenu extends BaseEntity { } @NotBlank(message = "显示顺序不能为空") - public String getOrderNum() { + public Integer getOrderNum() { return orderNum; } - public void setOrderNum(String orderNum) { + public void setOrderNum(Integer orderNum) { this.orderNum = orderNum; } diff --git a/shuili-system/src/main/java/com/kms/framework/web/service/SysPermissionService.java b/shuili-system/src/main/java/com/kms/framework/web/service/SysPermissionService.java index 95af1eb4..46e922d5 100644 --- a/shuili-system/src/main/java/com/kms/framework/web/service/SysPermissionService.java +++ b/shuili-system/src/main/java/com/kms/framework/web/service/SysPermissionService.java @@ -82,26 +82,24 @@ public class SysPermissionService { Object cache = redisCache.getCacheObject(menusKey(userId)); if (cache != null) { List menus = StringUtils.cast(cache); - List ides = menus.stream().map(MenuDto::getCode).collect(Collectors.toList()); + List ides = menus.stream().map(MenuDto::getCode).map(String::trim).collect(Collectors.toList()); Map map = menus.stream().collect(Collectors.toMap(MenuDto::getCode, Function.identity(), (a, b) -> a)); - return menuService.selectMenuList(ides).stream().map(item -> + return menuService.getChildPerms(menuService.selectMenuList(ides).stream().peek(item -> { MenuDto dto = map.get(item.getId()); if (dto != null) { - item.setVisible(dto.getVisible()); - item.setOrderNum(dto.getSeq().toString()); + item.setOrderNum(dto.getSeq()); item.setStatus(dto.getStatus()); item.setIsMain(true); - return item; } - return null; } - ).filter(Objects::nonNull).collect(Collectors.toList()); + ).collect(Collectors.toList()), "0"); } else { return Collections.emptyList(); } } + public void setUserPermissionFromPortal(String userId, List perms) { if (CollectionUtils.isEmpty(perms)) { return; diff --git a/shuili-system/src/main/java/com/kms/system/domain/vo/RouterVo.java b/shuili-system/src/main/java/com/kms/system/domain/vo/RouterVo.java index 2c6692b8..f3956308 100644 --- a/shuili-system/src/main/java/com/kms/system/domain/vo/RouterVo.java +++ b/shuili-system/src/main/java/com/kms/system/domain/vo/RouterVo.java @@ -1,16 +1,16 @@ package com.kms.system.domain.vo; import com.fasterxml.jackson.annotation.JsonInclude; + import java.util.List; /** * 路由配置信息 - * + * * @author kms */ @JsonInclude(JsonInclude.Include.NON_EMPTY) -public class RouterVo -{ +public class RouterVo { /** * 路由名字 */ @@ -41,6 +41,8 @@ public class RouterVo */ private Boolean alwaysShow; + private Integer orderNum; + /** * 其他元素 */ @@ -51,83 +53,74 @@ public class RouterVo */ private List children; - public String getName() - { + public Integer getOrderNum() { + return orderNum; + } + + public void setOrderNum(Integer orderNum) { + this.orderNum = orderNum; + } + public String getName() { return name; } - public void setName(String name) - { + public void setName(String name) { this.name = name; } - public String getPath() - { + public String getPath() { return path; } - public void setPath(String path) - { + public void setPath(String path) { this.path = path; } - public boolean getHidden() - { + public boolean getHidden() { return hidden; } - public void setHidden(boolean hidden) - { + public void setHidden(boolean hidden) { this.hidden = hidden; } - public String getRedirect() - { + public String getRedirect() { return redirect; } - public void setRedirect(String redirect) - { + public void setRedirect(String redirect) { this.redirect = redirect; } - public String getComponent() - { + public String getComponent() { return component; } - public void setComponent(String component) - { + public void setComponent(String component) { this.component = component; } - public Boolean getAlwaysShow() - { + public Boolean getAlwaysShow() { return alwaysShow; } - public void setAlwaysShow(Boolean alwaysShow) - { + public void setAlwaysShow(Boolean alwaysShow) { this.alwaysShow = alwaysShow; } - public MetaVo getMeta() - { + public MetaVo getMeta() { return meta; } - public void setMeta(MetaVo meta) - { + public void setMeta(MetaVo meta) { this.meta = meta; } - public List getChildren() - { + public List getChildren() { return children; } - public void setChildren(List children) - { + public void setChildren(List children) { this.children = children; } } diff --git a/shuili-system/src/main/java/com/kms/system/service/SysMenuService.java b/shuili-system/src/main/java/com/kms/system/service/SysMenuService.java index 5396c298..011f512a 100644 --- a/shuili-system/src/main/java/com/kms/system/service/SysMenuService.java +++ b/shuili-system/src/main/java/com/kms/system/service/SysMenuService.java @@ -118,32 +118,32 @@ public class SysMenuService extends BaseService { * @return 路由列表 */ public List buildMenus(List menus) { - List routers = new LinkedList<>(); - for (SysMenu menu : menus) { - RouterVo router = new RouterVo(); - router.setHidden("1".equals(menu.getVisible())); - router.setName(getRouteName(menu)); - router.setPath(getRouterPath(menu)); - router.setComponent(getComponent(menu)); - router.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon())); - List cMenus = menu.getChildren(); - if (!cMenus.isEmpty() && UserConstants.TYPE_DIR.equals(menu.getMenuType())) { - router.setAlwaysShow(true); - router.setRedirect("noRedirect"); - router.setChildren(buildMenus(cMenus)); - } else if (isMeunFrame(menu)) { - List childrenList = new ArrayList<>(); - RouterVo children = new RouterVo(); - children.setPath(menu.getPath()); - children.setComponent(menu.getComponent()); - children.setName(StringUtils.capitalize(menu.getPath())); - children.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon())); - childrenList.add(children); - router.setChildren(childrenList); - } - routers.add(router); - } - return routers; + return menus.stream().map(menu -> { + RouterVo router = new RouterVo(); + router.setHidden("1".equals(menu.getVisible())); + router.setName(getRouteName(menu)); + router.setPath(getRouterPath(menu)); + router.setComponent(getComponent(menu)); + router.setOrderNum(menu.getOrderNum()); + router.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon())); + List cMenus = menu.getChildren(); + if (!cMenus.isEmpty() && UserConstants.TYPE_DIR.equals(menu.getMenuType())) { + router.setAlwaysShow(true); + router.setRedirect("noRedirect"); + router.setChildren(buildMenus(cMenus)); + } else if (isMeunFrame(menu)) { + List childrenList = new ArrayList<>(); + RouterVo children = new RouterVo(); + children.setPath(menu.getPath()); + children.setComponent(menu.getComponent()); + children.setName(StringUtils.capitalize(menu.getPath())); + children.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon())); + childrenList.add(children); + router.setChildren(childrenList); + } + return router; + }).sorted(Comparator.comparingInt(RouterVo::getOrderNum)) + .collect(Collectors.toList()); } /** From 39a5c432b9eb9673f9abdc2138fbb7fab72b5987 Mon Sep 17 00:00:00 2001 From: hxh <762326930@qq.com> Date: Tue, 4 Jun 2024 09:37:16 +0800 Subject: [PATCH 5/5] =?UTF-8?q?feat:=20=E8=A1=A5=E5=85=85=E6=97=A5?= =?UTF-8?q?=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/kms/web/controller/system/SysLoginController.java | 7 +++---- .../src/main/java/com/kms/web/utils/WaterRequestUtil.java | 2 ++ .../kms/framework/web/service/SysPermissionService.java | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/shuili-admin/src/main/java/com/kms/web/controller/system/SysLoginController.java b/shuili-admin/src/main/java/com/kms/web/controller/system/SysLoginController.java index baf57f57..0b02381a 100644 --- a/shuili-admin/src/main/java/com/kms/web/controller/system/SysLoginController.java +++ b/shuili-admin/src/main/java/com/kms/web/controller/system/SysLoginController.java @@ -3,8 +3,6 @@ package com.kms.web.controller.system; import cn.dev33.satoken.stp.StpUtil; import cn.hutool.core.collection.CollectionUtil; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.TypeReference; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.kms.common.utils.UserUtils; @@ -42,7 +40,6 @@ import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.view.RedirectView; -import javax.annotation.PostConstruct; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @@ -216,7 +213,9 @@ public class SysLoginController extends BaseController { permissionService.setUserMenuFromPortal(simpleUser.getId(), menus); StpUtil.login(simpleUser.getId()); StpUtil.getSession().set("jianwei-user", simpleUser); - RedirectView redirectView = new RedirectView(redirect + "?token=" + StpUtil.getTokenValue() + "&page=" + page); + String accessToken = StpUtil.getTokenValue(); + log.info("登录成功,用户[{}]token:{}", simpleUser.getId(), accessToken); + RedirectView redirectView = new RedirectView(redirect + "?token=" + accessToken + "&page=" + page); return new ModelAndView(redirectView); } diff --git a/shuili-admin/src/main/java/com/kms/web/utils/WaterRequestUtil.java b/shuili-admin/src/main/java/com/kms/web/utils/WaterRequestUtil.java index 8515bc63..c6d1954a 100644 --- a/shuili-admin/src/main/java/com/kms/web/utils/WaterRequestUtil.java +++ b/shuili-admin/src/main/java/com/kms/web/utils/WaterRequestUtil.java @@ -291,6 +291,7 @@ public class WaterRequestUtil { .execute()) { body = response.body(); } + log.info("--------请求获取门户角色信息,返回结果为:{}", body); WaterResult waterResult = JSONObject.parseObject(body, WaterResult.class); isSuccess(waterResult); //{\"total\":1,\"size\":100,\"records\":[{\"area\":\"440000\",\"systemList\":[{\"area\":\"440000\",\"code\":\"sgc-jg\",\"name\":\"水工程应用-水利工程建设管理模块\",\"id\":\"1732648267643097090\"}],\"code\":\"YW00013\",\"level\":\"1d\",\"dataConfig\":\"none\",\"type\":\"BUSINESS\",\"posts\":[],\"users\":[{\"id\":\"20231225000006\"},{\"id\":\"20240119000002\"}],\"name\":\"水利工程应用-水利工程建设管理模块角色\",\"id\":\"20231213000001\",\"category\":\"BUSINESS\",\"businesses\":[{\"parent\":\"1762458920822599682\",\"businessCode\":\"YWSLGCJSGL0008\",\"parentName\":\"水利工程建设管理\",\"businessName\":\"水利工程建设管理\",\"description\":\"\",\"id\":\"1705128209926942721\",\"delFlag\":0}],\"status\":\"1\"}],\"page\":1} @@ -310,6 +311,7 @@ public class WaterRequestUtil { .execute()) { body = response.body(); } + log.info("--------请求获取门户用户信息,返回结果为:{}", body); WaterResult waterResult = JSONObject.parseObject(body, WaterResult.class); isSuccess(waterResult); return waterResult; diff --git a/shuili-system/src/main/java/com/kms/framework/web/service/SysPermissionService.java b/shuili-system/src/main/java/com/kms/framework/web/service/SysPermissionService.java index 46e922d5..f5f0579a 100644 --- a/shuili-system/src/main/java/com/kms/framework/web/service/SysPermissionService.java +++ b/shuili-system/src/main/java/com/kms/framework/web/service/SysPermissionService.java @@ -58,7 +58,7 @@ public class SysPermissionService { * @return 菜单权限信息 */ public Set getMenuPermission(SysUser user) { - Set perms = new HashSet(); + Set perms = new HashSet<>(); // 管理员拥有所有权限 if (user.isAdmin()) { perms.add("*:*:*");