Browse Source

1:计量、安全菜单权限问题;
2:APP更新bug;
3:APP待办任务查询条件问题;

liuyc 1 year ago
parent
commit
b9fbaa0dd8

+ 13 - 2
blade-auth/src/main/java/org/springblade/auth/service/BladeUserDetailsServiceImpl.java

@@ -156,8 +156,11 @@ public class BladeUserDetailsServiceImpl implements UserDetailsService {
                     || user.getUserType().contains(("3"))
                     || user.getUserType().contains(("4"))
                     || user.getUserType().contains(("5"))
-                    || user.getUserType().contains(("6"))) {
-                if (!("1,2,3,4,5,6").equals(user.getUserType())) {
+                    || user.getUserType().contains(("6"))
+                    || user.getUserType().contains(("7"))
+                    || user.getUserType().contains(("8"))
+            ) {
+                if (!("1,2,3,4,5,6,7,8").equals(user.getUserType())) {
                     //如果不是全部权限,那么分批校验登陆平台权限
                     this.judgeLoginPermission(user);
                 }
@@ -268,6 +271,12 @@ public class BladeUserDetailsServiceImpl implements UserDetailsService {
                 case "lar":
                     result = "6"; //lar = 征拆系统
                     break;
+                case "measure":
+                    result = "7"; //measure = 计量系统
+                    break;
+                case "secure":
+                    result = "8"; //secure = 安全
+                    break;
             }
         }
 
@@ -277,6 +286,8 @@ public class BladeUserDetailsServiceImpl implements UserDetailsService {
                 || (("4").equals(result) && user.getUserType().contains("4")) //后管
                 || (("5").equals(result)) // 成本管控系统
                 || (("6").equals(result)) // 征拆系统
+                || (("7").equals(result)) // 计量系统
+                || (("8").equals(result)) // 安全
         ) {
             //放行
             return;

+ 44 - 0
blade-service-api/blade-archive-api/src/main/java/org/springblade/archive/dto/ArchiveTaskDTO.java

@@ -0,0 +1,44 @@
+package org.springblade.archive.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 档案-任务管理page分页查询DTO
+ */
+@Data
+public class ArchiveTaskDTO implements Serializable {
+
+    @ApiModelProperty(value = "选择菜单类型,1=待办,2=已办,3=我发起的")
+    private Integer selectedType;
+
+    @ApiModelProperty(value = "任务类型")
+    private Integer typeValue;
+
+    @ApiModelProperty(value = "任务状态")
+    private Integer statusValue;
+
+    @ApiModelProperty(value = "合同段id")
+    private Long contractIdValue;
+
+    @ApiModelProperty(value = "上报批次")
+    private Integer batchValue;
+
+    @ApiModelProperty(value = "开始时间")
+    private String startTimeValue;
+
+    @ApiModelProperty(value = "结束时间")
+    private String endTimeValue;
+
+    @ApiModelProperty(value = "关键字查询输入框")
+    private String queryValue;
+
+    @ApiModelProperty(value = "每页条数")
+    private Integer size;
+
+    @ApiModelProperty(value = "当前页码")
+    private Integer current;
+
+}

+ 41 - 0
blade-service-api/blade-archive-api/src/main/java/org/springblade/archive/vo/ArchiveTaskPageVO.java

@@ -0,0 +1,41 @@
+package org.springblade.archive.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class ArchiveTaskPageVO implements Serializable {
+
+    @ApiModelProperty(value = "任务id")
+    private Long id;
+
+    @ApiModelProperty(value = "任务名称")
+    private String taskName;
+
+    @ApiModelProperty(value = "任务类型")
+    private String taskTypeName;
+
+    @ApiModelProperty(value = "任务状态")
+    private String taskStatusName;
+
+    @ApiModelProperty(value = "开始时间")
+    private String startTime;
+
+    @ApiModelProperty(value = "限时时间")
+    private String endTime;
+
+    @ApiModelProperty(value = "任务描述")
+    private String taskDesc;
+
+    @ApiModelProperty(value = "上报人")
+    private String taskReportUserName;
+
+    @ApiModelProperty(value = "签字人员")
+    private String taskApproveUserNames;
+
+    @ApiModelProperty(value = "电签状态")
+    private String eVisaStatus;
+
+}

+ 12 - 6
blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/CheckedTreeVO.java

@@ -27,14 +27,20 @@ public class CheckedTreeVO implements Serializable {
     //表单
     private List<String> tableOwners;
 
-    private List<String> dataScope;
-
-    private List<String> apiScope;
-
-    // 内控系统
+    //内控系统
     private List<String> hacMenu;
 
-    // 征拆系统
+    //征拆系统
     private List<String> larMenu;
 
+    //计量系统
+    private List<String> measureMenu;
+
+    //安全系统
+    private List<String> secureMenu;
+
+    private List<String> dataScope;
+
+    private List<String> apiScope;
+
 }

+ 6 - 0
blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/GrantVO.java

@@ -33,6 +33,12 @@ public class GrantVO implements Serializable {
     @ApiModelProperty(value = "menuArchivesIds集合-征拆")
     private List<String> menularIds;
 
+    @ApiModelProperty(value = "menuMeasureIds集合-计量")
+    private List<String> menuMeasureIds;
+
+    @ApiModelProperty(value = "menuSecureIds集合-安全")
+    private List<String> menuSecureIds;
+
     @ApiModelProperty(value = "topMenuIds集合")
     private List<Long> topMenuIds;
 

+ 65 - 4
blade-service/blade-archive/src/main/java/org/springblade/archive/controller/ArchiveFileTaskController.java

@@ -1,5 +1,6 @@
 package org.springblade.archive.controller;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import com.itextpdf.text.Image;
 import com.itextpdf.text.Rectangle;
@@ -9,7 +10,11 @@ import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
 import org.apache.commons.lang.StringUtils;
 import org.apache.poi.util.IOUtils;
+import org.springblade.archive.dto.ArchiveTaskDTO;
+import org.springblade.archive.vo.ArchiveTaskPageVO;
 import org.springblade.business.entity.ArchiveFile;
+import org.springblade.business.entity.Task;
+import org.springblade.business.feign.ArchiveFileClient;
 import org.springblade.common.utils.CommonUtil;
 import org.springblade.core.boot.ctrl.BladeController;
 import org.springblade.core.log.exception.ServiceException;
@@ -39,6 +44,7 @@ public class ArchiveFileTaskController extends BladeController {
     private final JdbcTemplate jdbcTemplate;
     private final SignPfxClient signPfxClient;
     private final EVisaClient eVisaClient;
+    private final ArchiveFileClient archiveFileClient;
 
     /**
      * 批量认证(水印图片签章默认认证电签)
@@ -130,15 +136,70 @@ public class ArchiveFileTaskController extends BladeController {
                         names.add(name);
                     }
                 }
-                if (names.size() > 0) {
-                    throw new ServiceException("未获取到用户【" + StringUtils.join(names, "、") + "】的签字证书信息");
-                }
-                return R.data(false);
+                throw new ServiceException("未获取到用户【" + StringUtils.join(names, "、") + "】的签字证书信息");
             }
         }
         return R.data(true);
     }
 
+    /**
+     * 档案-任务管理-任务查看分页查询
+     */
+    @PostMapping("/page")
+    @ApiOperationSupport(order = 3)
+    @ApiOperation(value = "档案-任务管理-任务查看分页查询", notes = "传入用户userIds,字符串逗号分割拼接")
+    public R<IPage<ArchiveTaskPageVO>> page(@RequestBody ArchiveTaskDTO dto) {
+        int current = dto.getCurrent();
+        int size = dto.getSize();
+        StringBuilder sqlString = new StringBuilder("SELECT * FROM u_task WHERE 1=1");
+        if (ObjectUtil.isNotEmpty(dto.getTypeValue())) {
+            sqlString.append(" type = ").append(dto.getTypeValue());
+        }
+        if (ObjectUtil.isNotEmpty(dto.getStatusValue())) {
+            sqlString.append(" AND status = ").append(dto.getStatusValue());
+        }
+        if (ObjectUtil.isNotEmpty(dto.getContractIdValue())) {
+            sqlString.append(" AND contract_id = ").append(dto.getContractIdValue());
+        }
+        if (ObjectUtil.isNotEmpty(dto.getBatchValue())) {
+            sqlString.append(" AND batch = ").append(dto.getBatchValue());
+        }
+        if (StringUtils.isNotBlank(dto.getStartTimeValue()) && StringUtils.isNotBlank(dto.getEndTimeValue())) {
+            sqlString.append(" AND start_time >= '")
+                    .append(dto.getStartTimeValue())
+                    .append("' AND end_time <= '")
+                    .append(dto.getEndTimeValue())
+                    .append("'");
+        }
+        if (StringUtils.isNotBlank(dto.getQueryValue())) {
+            sqlString.append(" AND task_name LIKE '%").append(dto.getQueryValue()).append("%'");
+        }
+
+        if (ObjectUtil.isNotEmpty(dto.getSelectedType())) {
+            if (dto.getSelectedType().equals(1)) { //待办
+                sqlString.append(" AND EXISTS (SELECT 1 FROM u_task_parallel WHERE u_task.process_instance_id = u_task_parallel.process_instance_id AND u_task_parallel.status = 1 AND u_task_parallel.task_user = ").append(SecureUtil.getUserId()).append(")");
+            } else if (dto.getSelectedType().equals(2)) { //已办
+                sqlString.append(" AND EXISTS (SELECT 1 FROM u_task_parallel WHERE u_task.process_instance_id = u_task_parallel.process_instance_id AND u_task_parallel.status = 2 AND u_task_parallel.task_user = ").append(SecureUtil.getUserId()).append(")");
+            } else if (dto.getSelectedType().equals(3)) { //我发起
+                sqlString.append(" AND report_user = ").append(SecureUtil.getUserId());
+            }
+        }
+
+        //总数量
+        String sqlCount = sqlString.toString().replace("*", "count(1)");
+        List<Task> count = jdbcTemplate.query(sqlCount, new BeanPropertyRowMapper<>(Task.class));
+
+        //分页
+        sqlString.append(" ORDER BY create_time DESC LIMIT ")
+                .append((current - 1) * size) //计算起始位置
+                .append(",")
+                .append(size); //指定每页的记录数量
+
+        List<Task> resultList = jdbcTemplate.query(String.valueOf(sqlString), new BeanPropertyRowMapper<>(Task.class));
+
+
+        return null;
+    }
 
 
 }

+ 5 - 1
blade-service/blade-business/src/main/java/org/springblade/business/controller/TaskController.java

@@ -375,8 +375,8 @@ public class TaskController extends BladeController {
         }
 
         Map<Long, String> nameMap = jdbcTemplate.query("select id,name from blade_user where is_deleted = 0", new BeanPropertyRowMapper<>(User.class)).stream().collect(Collectors.toMap(User::getId, User::getName, (key1, key2) -> key1));
+        Map<Long, String> fileNameMaps = jdbcTemplate.query("select id,file_name from u_archive_file where file_name is not null and id in (" + archiveTaskBatchReportDTO.getDataIds() + ")", new BeanPropertyRowMapper<>(ArchiveFile.class)).stream().collect(Collectors.toMap(ArchiveFile::getId, ArchiveFile::getFileName, (obj1, obj2) -> obj1));
         String[] archiveIds = archiveTaskBatchReportDTO.getDataIds().split(",");
-        Map<Long, String> fileNameMaps = jdbcTemplate.query("select file_name from u_archive_file where file_name is not null and id in (" + archiveTaskBatchReportDTO.getDataIds() + ")", new BeanPropertyRowMapper<>(ArchiveFile.class)).stream().collect(Collectors.toMap(ArchiveFile::getId, ArchiveFile::getFileName, (obj1, obj2) -> obj1));
         for (String archiveId : archiveIds) {
             //创建task审批任务
             Long processInstanceId = SnowFlakeUtil.getId();
@@ -778,6 +778,10 @@ public class TaskController extends BladeController {
      */
     @Async
     public void sendsWebSocketCount(R<IPage<TaskVO>> iPageR, int type, TaskQueryVO queryVO) throws IOException {
+        if (ObjectUtil.isEmpty(queryVO.getCurrentContractId())) {
+            //如果getCurrentContractId=null,那么表示是APP的待办查询(web端不为null)
+            queryVO.setCurrentContractId(queryVO.getContractId());
+        }
         if (type == 1) {
             Map<String, String> stringMap = iTaskService.getTaskCount(queryVO.getProjectId(), queryVO.getCurrentContractId(), SecureUtil.getUserId().toString());
             stringMap.put("taskCount", String.valueOf(iPageR.getData().getTotal()));

+ 17 - 13
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/AppVersionDetailController.java

@@ -12,6 +12,7 @@ import org.springblade.core.boot.ctrl.BladeController;
 import org.springblade.core.mp.base.BaseEntity;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.ObjectUtil;
 import org.springblade.manager.entity.AppVersion;
 import org.springblade.manager.entity.AppVersionDetail;
 import org.springblade.manager.service.IAppVersionDetailService;
@@ -36,14 +37,17 @@ public class AppVersionDetailController extends BladeController {
     @GetMapping("/getNewVersion")
     @ApiOperationSupport(order = 2)
     @ApiOperation(value = "获取最新版本", notes = "传入版本id与软件类型1安卓2IOS")
-    public R<AppVersionDetail> getNewVersion(String platform,Integer softwareType,Integer fileType){
+    public R<AppVersionDetail> getNewVersion(String platform, Integer softwareType, Integer fileType) {
         AppVersion one = versionService.getOne(new LambdaQueryWrapper<AppVersion>().eq(AppVersion::getPlatform, platform));
-        return R.data(versionDetailService.getOne(new LambdaQueryWrapper<AppVersionDetail>()
-                            .eq(AppVersionDetail::getVersionId,one.getId())
-                            .eq(AppVersionDetail::getSoftwareType,softwareType)
-                            .eq(AppVersionDetail::getFileType,fileType)
-                            .orderByDesc(AppVersionDetail::getUpdateDate)
-                            .last("limit 1")));
+        LambdaQueryWrapper<AppVersionDetail> queryWrapper = new LambdaQueryWrapper<>();
+        if (ObjectUtil.isNotEmpty(fileType)) {
+            queryWrapper.eq(AppVersionDetail::getFileType, fileType);
+        }
+        queryWrapper.eq(AppVersionDetail::getVersionId, one.getId())
+                .eq(AppVersionDetail::getSoftwareType, softwareType)
+                .orderByDesc(AppVersionDetail::getUpdateDate)
+                .last("limit 1");
+        return R.data(versionDetailService.getOne(queryWrapper));
     }
 
 
@@ -54,7 +58,7 @@ public class AppVersionDetailController extends BladeController {
     @ApiOperationSupport(order = 1)
     @ApiOperation(value = "新增", notes = "传入版本信息")
     @Transactional
-    public R add(@RequestBody AppVersionDetail detail){
+    public R add(@RequestBody AppVersionDetail detail) {
         detail.setUpdateDate(LocalDateTime.now());
         versionDetailService.save(detail);
         AppVersion appVersion = new AppVersion();
@@ -71,10 +75,10 @@ public class AppVersionDetailController extends BladeController {
     @GetMapping("/page")
     @ApiOperationSupport(order = 2)
     @ApiOperation(value = "分页", notes = "传入版本id与分页信息")
-    public R<IPage<AppVersionDetail>> page(Long versionId,Query query){
-        IPage<AppVersionDetail> page = new Page<>(query.getCurrent(),query.getSize());
+    public R<IPage<AppVersionDetail>> page(Long versionId, Query query) {
+        IPage<AppVersionDetail> page = new Page<>(query.getCurrent(), query.getSize());
         IPage<AppVersionDetail> iPage = versionDetailService.page(page,
-                new LambdaQueryWrapper<AppVersionDetail>().eq(AppVersionDetail::getVersionId,versionId).orderByDesc(BaseEntity::getCreateTime));
+                new LambdaQueryWrapper<AppVersionDetail>().eq(AppVersionDetail::getVersionId, versionId).orderByDesc(BaseEntity::getCreateTime));
         return R.data(iPage);
     }
 
@@ -84,7 +88,7 @@ public class AppVersionDetailController extends BladeController {
     @PostMapping("/update")
     @ApiOperationSupport(order = 3)
     @ApiOperation(value = "修改", notes = "传入版本详情")
-    public R update(@RequestBody AppVersionDetail detail){
+    public R update(@RequestBody AppVersionDetail detail) {
         versionDetailService.updateById(detail);
         return R.data("修改成功");
     }
@@ -95,7 +99,7 @@ public class AppVersionDetailController extends BladeController {
     @GetMapping("/delete")
     @ApiOperationSupport(order = 4)
     @ApiOperation(value = "删除", notes = "传入id")
-    public R page(Long id){
+    public R page(Long id) {
         versionDetailService.removeById(id);
         return R.data("删除成功");
     }

+ 24 - 11
blade-service/blade-system/src/main/java/org/springblade/system/controller/MenuController.java

@@ -309,25 +309,38 @@ public class MenuController extends BladeController {
         //客户端
         vo.setUsermenu(menuService.roleTreeKeys(roleIds));
 
+        //表单
+        List<WbsTableOwnerRole> wbsTableOwnerRoles = roleMapper.selectRoleAndTableOwnerListByRoleId(Long.valueOf(roleIds));
+        List<String> collect = wbsTableOwnerRoles.stream().map(WbsTableOwnerRole::getTableOwnerNumber).collect(Collectors.toList());
+        vo.setTableOwners(collect);
+
         //档案
         vo.setArchivesMenu(menuService.roleTreeKeys(roleIds));
 
-        //数据源
-        vo.setDataScope(menuService.dataScopeTreeKeys(roleIds));
+        //内控系统
+        vo.setHacMenu(menuService.roleTreeKeys(roleIds));
 
-        //接口
-        vo.setApiScope(menuService.apiScopeTreeKeys(roleIds));
+        //征拆系统
+        vo.setLarMenu(menuService.roleTreeKeys(roleIds));
 
-        // 内控系统
-        vo.setHacMenu(menuService.apiScopeTreeKeys(roleIds));
+        //计量系统
+        vo.setMeasureMenu(menuService.roleTreeKeys(roleIds));
+
+        //安全系统
+        vo.setSecureMenu(menuService.roleTreeKeys(roleIds));
 
+        /*不清楚为什么其他开发要用menuService.apiScopeTreeKeys(roleIds)
+         * 现在把内控、征拆改为menuService.roleTreeKeys(roleIds)*/
+        /*//内控系统
+        vo.setHacMenu(menuService.apiScopeTreeKeys(roleIds));
         //征拆系统
-        vo.setLarMenu(menuService.apiScopeTreeKeys(roleIds));
+        vo.setLarMenu(menuService.apiScopeTreeKeys(roleIds));*/
 
-        //表单
-        List<WbsTableOwnerRole> wbsTableOwnerRoles = roleMapper.selectRoleAndTableOwnerListByRoleId(Long.valueOf(roleIds));
-        List<String> collect = wbsTableOwnerRoles.stream().map(WbsTableOwnerRole::getTableOwnerNumber).collect(Collectors.toList());
-        vo.setTableOwners(collect);
+        /*暂时没有使用到下面的数据源、接口菜单*/
+        /*//数据源
+        vo.setDataScope(menuService.dataScopeTreeKeys(roleIds));
+        //接口
+        vo.setApiScope(menuService.apiScopeTreeKeys(roleIds));*/
 
         return R.data(vo);
     }

+ 7 - 1
blade-service/blade-system/src/main/java/org/springblade/system/controller/RoleController.java

@@ -187,7 +187,13 @@ public class RoleController extends BladeController {
     public R grant(@RequestBody GrantVO grantVO) {
         CacheUtil.clear(SYS_CACHE);
         CacheUtil.clear(SYS_CACHE, Boolean.FALSE);
-        boolean temp = roleService.grant(grantVO.getRoleIds(), grantVO.getMenuIds(), grantVO.getMenuClientIds(), grantVO.getDataScopeIds(), grantVO.getApiScopeIds(), grantVO.getTableOwners(), grantVO.getMenuArchivesIds(), grantVO.getMenuHacIds(), grantVO.getMenularIds());
+        boolean temp = roleService.grant(grantVO.getRoleIds()
+                , grantVO.getMenuIds(), grantVO.getMenuClientIds()
+                , grantVO.getDataScopeIds(), grantVO.getApiScopeIds()
+                , grantVO.getTableOwners(), grantVO.getMenuArchivesIds()
+                , grantVO.getMenuHacIds(), grantVO.getMenularIds()
+                , grantVO.getMenuMeasureIds(), grantVO.getMenuSecureIds()
+        );
         return R.status(temp);
     }
 

+ 18 - 8
blade-service/blade-system/src/main/java/org/springblade/system/service/IRoleService.java

@@ -56,15 +56,25 @@ public interface IRoleService extends IService<Role> {
     /**
      * 权限配置
      *
-     * @param roleIds       角色id集合
-     * @param menuIds       菜单id集合
-     * @param menuClientIds 客户端菜单id集合
-     * @param tableOwners   表单id集合
-     * @param dataScopeIds  数据权限id集合
-     * @param apiScopeIds   接口权限id集合
-     * @return 是否成功
+     * @param roleIds
+     * @param menuIds
+     * @param menuClientIds
+     * @param dataScopeIds
+     * @param apiScopeIds
+     * @param tableOwners
+     * @param menuArchivesIds
+     * @param menuHacIds
+     * @param menuLarIds
+     * @param menuMeasureIds
+     * @param menuSecureIds
+     * @return
      */
-    boolean grant(@NotEmpty List<Long> roleIds, List<String> menuIds, List<String> menuClientIds, List<Long> dataScopeIds, List<Long> apiScopeIds, List<Long> tableOwners, List<String> menuArchivesIds, List<String> menuHacIds, List<String> menuLarIds);
+    boolean grant(@NotEmpty List<Long> roleIds, List<String> menuIds, List<String> menuClientIds
+            , List<Long> dataScopeIds, List<Long> apiScopeIds
+            , List<Long> tableOwners, List<String> menuArchivesIds
+            , List<String> menuHacIds, List<String> menuLarIds
+            , List<String> menuMeasureIds, List<String> menuSecureIds
+    );
 
     /**
      * 获取角色ID

+ 47 - 6
blade-service/blade-system/src/main/java/org/springblade/system/service/impl/RoleServiceImpl.java

@@ -87,11 +87,23 @@ public class RoleServiceImpl extends ServiceImpl<RoleMapper, Role> implements IR
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public boolean grant(@NotEmpty List<Long> roleIds, List<String> menuIds, List<String> menuClientIds, List<Long> dataScopeIds, List<Long> apiScopeIds, List<Long> tableOwners, List<String> menuArchivesIds, List<String> menuHacIds, List<String> menuLarIds) {
-        return grantRoleMenu(roleIds, menuIds, menuClientIds, menuArchivesIds, menuHacIds, menuLarIds) && grantDataScope(roleIds, dataScopeIds) && grantApiScope(roleIds, apiScopeIds) && submitRoleAndTableOwner(roleIds, tableOwners);
+    public boolean grant(@NotEmpty List<Long> roleIds, List<String> menuIds, List<String> menuClientIds
+            , List<Long> dataScopeIds, List<Long> apiScopeIds
+            , List<Long> tableOwners, List<String> menuArchivesIds
+            , List<String> menuHacIds, List<String> menuLarIds
+            , List<String> menuMeasureIds, List<String> menuSecureIds) {
+
+        return grantRoleMenu(roleIds, menuIds, menuClientIds, menuArchivesIds, menuHacIds, menuLarIds, menuMeasureIds, menuSecureIds)
+                && grantDataScope(roleIds, dataScopeIds)
+                && grantApiScope(roleIds, apiScopeIds)
+                && submitRoleAndTableOwner(roleIds, tableOwners);
     }
 
-    private boolean grantRoleMenu(List<Long> roleIds, List<String> menuIds, List<String> menuClientIds, List<String> menuArchivesIds, List<String> menuHacIds, List<String> menuLarIds) {
+    private boolean grantRoleMenu(List<Long> roleIds
+            , List<String> menuIds, List<String> menuClientIds, List<String> menuArchivesIds
+            , List<String> menuHacIds, List<String> menuLarIds
+            , List<String> menuMeasureIds, List<String> menuSecureIds
+    ) {
         // 防止越权配置超管角色
         Long administratorCount = baseMapper.selectCount(Wrappers.<Role>query().lambda().eq(Role::getRoleAlias, RoleConstant.ADMINISTRATOR).in(Role::getId, roleIds));
         if (!AuthUtil.isAdministrator() && administratorCount > 0L) {
@@ -156,9 +168,32 @@ public class RoleServiceImpl extends ServiceImpl<RoleMapper, Role> implements IR
                 roleMenus.add(roleMenu);
             }));
         }
+
+        // 组装配置-计量
+        if (menuMeasureIds != null && menuMeasureIds.size() >= 1) {
+            roleIds.forEach(roleId -> menuMeasureIds.forEach(menuIdC -> {
+                RoleMenu roleMenu = new RoleMenu();
+                roleMenu.setRoleId(roleId);
+                roleMenu.setMenuId(Long.valueOf(menuIdC.split("---")[0]));
+                roleMenu.setStatus(menuIdC.split("---")[1]);
+                roleMenus.add(roleMenu);
+            }));
+        }
+
+        // 组装配置-安全
+        if (menuSecureIds != null && menuSecureIds.size() >= 1) {
+            roleIds.forEach(roleId -> menuSecureIds.forEach(menuIdC -> {
+                RoleMenu roleMenu = new RoleMenu();
+                roleMenu.setRoleId(roleId);
+                roleMenu.setMenuId(Long.valueOf(menuIdC.split("---")[0]));
+                roleMenu.setStatus(menuIdC.split("---")[1]);
+                roleMenus.add(roleMenu);
+            }));
+        }
+
         // 新增配置
-        boolean b = roleMenuService.saveBatch(roleMenus);
-        System.out.println("ddd");
+        roleMenuService.saveBatch(roleMenus);
+
         // 递归设置下属角色菜单集合
         if (menuIds != null && menuIds.size() >= 1) {
             recursionRoleMenu(roleIds, menuIds);
@@ -175,6 +210,12 @@ public class RoleServiceImpl extends ServiceImpl<RoleMapper, Role> implements IR
         if (menuLarIds != null && menuLarIds.size() >= 1) {
             recursionRoleMenu(roleIds, menuLarIds); //征拆
         }
+        if (menuMeasureIds != null && menuMeasureIds.size() >= 1) {
+            recursionRoleMenu(roleIds, menuMeasureIds); //计量
+        }
+        if (menuSecureIds != null && menuSecureIds.size() >= 1) {
+            recursionRoleMenu(roleIds, menuSecureIds); //安全
+        }
 
         return true;
     }
@@ -187,7 +228,7 @@ public class RoleServiceImpl extends ServiceImpl<RoleMapper, Role> implements IR
             String id = split[0]; //id
             menuIds.add(Long.valueOf(id));
         }
-        //
+
         for (Long roleId : roleIds) {
             List<Role> roleList = roleMapper.getRoleDeptInfoByParentId(roleId + "");
             roleList.forEach(role -> {