Browse Source

修复冲突

马志强 3 years ago
parent
commit
97808cc2d7
58 changed files with 1868 additions and 115 deletions
  1. 4 1
      README.md
  2. 29 22
      pom.xml
  3. 20 0
      src/main/java/com/dragoninfo/dcuc/authweb/config/FeignRequestConfig.java
  4. 1 5
      src/main/java/com/dragoninfo/dcuc/authweb/interceptor/DcucLocaleChangeInterceptor.java
  5. 30 0
      src/main/java/com/dragoninfo/dcuc/authweb/interceptor/FeignHeadInterceptor.java
  6. 0 1
      src/main/java/com/dragoninfo/dcuc/authweb/interceptor/SecurityAccessTokenResolver.java
  7. 40 0
      src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/api/authservice/v1/controller/AuthServiceController.java
  8. 2 2
      src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/api/authservice/v1/controller/WorkFlowApiController.java
  9. 1 1
      src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/api/authservice/v1/vo/ResourceInfoVo.java
  10. 4 1
      src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/api/authservice/v1/vo/ServiceAuthFlowAcceptVo.java
  11. 9 0
      src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/api/authservice/v1/vo/ServiceAuthResultVo.java
  12. 2 2
      src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/api/authservice/v2/controller/WorkFlowApiV2Controller.java
  13. 40 20
      src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/api/authservice/v3/controller/AuthV3ApiController.java
  14. 3 4
      src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/api/authservice/v3/controller/WorkFlowApiV3Controller.java
  15. 30 0
      src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/api/authservice/v3/vo/AppFunAuthApiVo.java
  16. 30 0
      src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/api/authservice/v3/vo/AppFunInfoApiVo.java
  17. 22 0
      src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/api/authservice/v3/vo/FunCodeTreeApiVo.java
  18. 27 4
      src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/api/controller/AuthApiController.java
  19. 101 0
      src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/api/controller/WhiteRedListApiController.java
  20. 27 0
      src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/api/controller/vo/AppFunApiVo.java
  21. 39 0
      src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/api/controller/vo/AppFunRedListVo.java
  22. 24 0
      src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/api/controller/vo/WhiteListUserApiVo.java
  23. 3 1
      src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/audit/MgeAuditRptController.java
  24. 23 6
      src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/auth/AppFunInfoController.java
  25. 1 1
      src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/auth/ApplicationController.java
  26. 16 17
      src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/auth/RoleAuthInfoController.java
  27. 41 0
      src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/auth/vo/AppFunTreeVo.java
  28. 107 0
      src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/list/controller/RedListController.java
  29. 80 0
      src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/list/controller/WhiteListController.java
  30. 26 0
      src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/list/vo/AppFunRedListAddVo.java
  31. 44 0
      src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/list/vo/FunRedListTreeVo.java
  32. 28 0
      src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/list/vo/RedListOperateVo.java
  33. 28 0
      src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/list/vo/WhiteListOperateVo.java
  34. 31 0
      src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/list/vo/WhiteListUserVo.java
  35. 8 3
      src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/login/DcucLoginController.java
  36. 264 0
      src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/selfauth/controller/SelfAuthAppLyController.java
  37. 57 0
      src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/selfauth/vo/AppFunApplyUpdateVo.java
  38. 25 0
      src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/selfauth/vo/AppFunAuthApplyVo.java
  39. 30 0
      src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/selfauth/vo/AppFunAuthResourceVo.java
  40. 56 0
      src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/selfauth/vo/AppFunAuthResultVo.java
  41. 39 0
      src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/selfauth/vo/ApprovalSuggestionVo.java
  42. 30 0
      src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/selfauth/vo/FlowDefineInfoVo.java
  43. 21 0
      src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/selfauth/vo/FlowPictureVo.java
  44. 17 0
      src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/selfauth/vo/FlowStatusVo.java
  45. 35 0
      src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/selfauth/vo/FunApplyDetailVo.java
  46. 44 0
      src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/selfauth/vo/ProcessNodeVo.java
  47. 24 0
      src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/selfauth/vo/ProcessOperateVo.java
  48. 24 0
      src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/selfauth/vo/ProcessPicVo.java
  49. 31 0
      src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/selfauth/vo/ProcessStatusVo.java
  50. 41 0
      src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/selfauth/vo/ProcessTaskVo.java
  51. 53 0
      src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/selfauth/vo/WorkFlowPageViewVo.java
  52. 90 0
      src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/selfauth/vo/WorkFlowVo.java
  53. 2 2
      src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/sub/AttrController.java
  54. 2 2
      src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/sub/AuthOrgInfoController.java
  55. 28 2
      src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/sub/AuthUserInfoController.java
  56. 1 1
      src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/sub/SubSyncController.java
  57. 33 0
      src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/sub/vo/user/AuthUserVo.java
  58. 0 17
      src/main/java/com/dragoninfo/dcuc/authweb/util/ConstantsUtils.java

+ 4 - 1
README.md

@@ -20,4 +20,7 @@
   - 日志管理-权限日志管理-鉴权风险日志
   - 日志管理-鉴权行为分析
   - 日志记录(功能授权、数据授权、服务授权、工作流服务授权)
-  - 预警风险方案算法实现
+  - 预警风险方案算法实现
+### 2.4.0
+  - 权限自助模块开发
+  - 红白名单模块开发

+ 29 - 22
pom.xml

@@ -5,14 +5,14 @@
     <modelVersion>4.0.0</modelVersion>
     <groupId>com.dragoninfo</groupId>
     <artifactId>dcuc-auth-back</artifactId>
-    <version>2.3.0-tjdsj-SNAPSHOT</version>
+    <version>2.4.0-tjdsj-SNAPSHOT</version>
 
     <properties>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <maven.compiler.source>1.8</maven.compiler.source>
         <maven.compiler.target>1.8</maven.compiler.target>
         <!--revisions需写死,用于标识打包的版本号,不可删除-->
-        <revision>2.2.1-tjdsj-SNAPSHOT</revision>
+        <revision>2.4.0-tjdsj-SNAPSHOT</revision>
         <duceap.version>2.1.0-SNAPSHOT</duceap.version>
         <lombok.version>1.18.2</lombok.version>
         <jwt.version>3.10.3</jwt.version>
@@ -91,11 +91,17 @@
         </dependency>
         <!--配置 duceap 结束-->
 
-        <!--配置 dcuc 开始-->
+        <!--许可-->
         <dependency>
-            <groupId>com.dragoninfo</groupId>
-            <artifactId>dcuc-common</artifactId>
-            <version>2.0.0-SNAPSHOT</version>
+            <groupId>com.dragonsoft</groupId>
+            <artifactId>duceap-support-license</artifactId>
+        </dependency>
+        <!--许可依赖包 结束-->
+
+        <!--redis缓存-->
+        <dependency>
+            <groupId>com.dragonsoft</groupId>
+            <artifactId>duceap-boot-starter-cache-redis</artifactId>
             <exclusions>
                 <exclusion>
                     <artifactId>spring-jdbc</artifactId>
@@ -103,22 +109,12 @@
                 </exclusion>
             </exclusions>
         </dependency>
-        <!--许可-->
-        <dependency>
-            <groupId>com.dragonsoft</groupId>
-            <artifactId>duceap-support-license</artifactId>
-        </dependency>
 
-        <!--许可依赖包 结束-->
+        <!--配置 dcuc 开始-->
         <dependency>
             <groupId>com.dragoninfo</groupId>
-            <artifactId>dcuc-auth-api</artifactId>
-            <version>2.3.0-tjdsj-SNAPSHOT</version>
-        </dependency>
-        <!--redis缓存-->
-        <dependency>
-            <groupId>com.dragonsoft</groupId>
-            <artifactId>duceap-boot-starter-cache-redis</artifactId>
+            <artifactId>dcuc-common</artifactId>
+            <version>2.0.1-SNAPSHOT</version>
             <exclusions>
                 <exclusion>
                     <artifactId>spring-jdbc</artifactId>
@@ -126,11 +122,22 @@
                 </exclusion>
             </exclusions>
         </dependency>
+        <dependency>
+            <groupId>com.dragoninfo</groupId>
+            <artifactId>dcuc-auth-api</artifactId>
+            <version>2.4.0-tjdsj-SNAPSHOT</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.dragoninfo</groupId>
+            <artifactId>dcuc-list-api</artifactId>
+            <version>2.0.0-tjdsj-SNAPSHOT</version>
+        </dependency>
 
         <dependency>
             <groupId>com.dragoninfo</groupId>
             <artifactId>dcuc-app-api</artifactId>
-            <version>2.2.0-tjdsj-SNAPSHOT</version>
+            <version>2.2.2-tjdsj-SNAPSHOT</version>
         </dependency>
 
         <dependency>
@@ -148,7 +155,7 @@
         <dependency>
             <groupId>com.dragoninfo</groupId>
             <artifactId>dcuc-duceap-api</artifactId>
-            <version>2.1.1-SNAPSHOT</version>
+            <version>2.1.2-SNAPSHOT</version>
         </dependency>
         <dependency>
             <groupId>org.springframework.boot</groupId>
@@ -161,8 +168,8 @@
             <artifactId>java-jwt</artifactId>
             <version>${jwt.version}</version>
         </dependency>
-
         <!--配置 dcuc 结束-->
+
         <dependency>
             <groupId>net.unicon.cas</groupId>
             <artifactId>cas-client-autoconfig-support</artifactId>

+ 20 - 0
src/main/java/com/dragoninfo/dcuc/authweb/config/FeignRequestConfig.java

@@ -0,0 +1,20 @@
+package com.dragoninfo.dcuc.authweb.config;
+
+import com.dragoninfo.dcuc.authweb.interceptor.FeignHeadInterceptor;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * feign调用后端服务拦截器配置
+ * @author mazq
+ * @date 2021/7/29
+ */
+@Configuration
+public class FeignRequestConfig {
+
+    @Bean
+    public FeignHeadInterceptor feignHeadInterceptor() {
+        return  new FeignHeadInterceptor();
+    }
+
+}

+ 1 - 5
src/main/java/com/dragoninfo/dcuc/authweb/interceptor/DcucLocaleChangeInterceptor.java

@@ -43,11 +43,7 @@ public class DcucLocaleChangeInterceptor extends LocaleChangeInterceptor {
         if (ObjectUtils.isEmpty(configuredMethods)) {
             return true;
         } else {
-            String[] var3 = configuredMethods;
-            int var4 = configuredMethods.length;
-
-            for (int var5 = 0; var5 < var4; ++var5) {
-                String configuredMethod = var3[var5];
+            for (String configuredMethod : configuredMethods) {
                 if (configuredMethod.equalsIgnoreCase(currentMethod)) {
                     return true;
                 }

+ 30 - 0
src/main/java/com/dragoninfo/dcuc/authweb/interceptor/FeignHeadInterceptor.java

@@ -0,0 +1,30 @@
+package com.dragoninfo.dcuc.authweb.interceptor;
+
+import com.dragoninfo.dcuc.common.Constants;
+import com.dragonsoft.duceap.commons.util.ip.IpUtils;
+import feign.RequestInterceptor;
+import feign.RequestTemplate;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import javax.servlet.http.HttpServletRequest;
+import java.net.InetAddress;
+
+/**
+ * 添加调用到后端的请求头
+ * @author mazq
+ * @date 2021/7/29
+ */
+@Slf4j
+public class FeignHeadInterceptor implements RequestInterceptor {
+    @Override
+    public void apply(RequestTemplate template) {
+        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
+        if(attributes!=null) {
+            HttpServletRequest request = attributes.getRequest();
+            String ipAddr = IpUtils.getRealIpAdrress(request);
+            template.header(Constants.REAL_IP_ADDRESS_KEY, ipAddr);
+        }
+    }
+}

+ 0 - 1
src/main/java/com/dragoninfo/dcuc/authweb/interceptor/SecurityAccessTokenResolver.java

@@ -89,7 +89,6 @@ public class SecurityAccessTokenResolver implements ISecurityAccessTokenResolver
 
         BimUserInfoItemRespVO userInfoItemRespVO = bimBusinessFacade.getUserInfoByUserToken(userToken);
         String sfzh = userInfoItemRespVO.getSfzh();
-//        String sfzh = "000000000000000001";
 
         UserInfo userInfo = userFacade.detailBySfzh(sfzh);
         log.info("idcard:{}, userInfo :{}", sfzh, JsonUtils.toJSONString(userInfo));

+ 40 - 0
src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/api/authservice/v1/controller/AuthServiceController.java

@@ -6,13 +6,16 @@ import com.auth0.jwt.interfaces.DecodedJWT;
 import com.dragoninfo.dcuc.app.entity.ApplyInfo;
 import com.dragoninfo.dcuc.app.facade.IApplyInfoFacade;
 import com.dragoninfo.dcuc.auth.auth.dto.AppDataSensitiveLevelDTO;
+import com.dragoninfo.dcuc.auth.auth.dto.AppFunInfoDTO;
 import com.dragoninfo.dcuc.auth.auth.dto.ServiceAuthResultDTO;
 import com.dragoninfo.dcuc.auth.auth.facade.IBimBusinessFacade;
 import com.dragoninfo.dcuc.auth.auth.facade.IServiceAuthFlowFacade;
 import com.dragoninfo.dcuc.auth.auth.facade.IServiceAuthResultFacade;
 import com.dragoninfo.dcuc.auth.auth.facade.IStaffAssignAuthInfoFacade;
+import com.dragoninfo.dcuc.auth.power.facade.IAppFunInfoFacade;
 import com.dragoninfo.dcuc.authweb.restcontroller.api.authservice.v1.vo.AppAuthRespVO;
 import com.dragoninfo.dcuc.authweb.restcontroller.api.authservice.v1.vo.ServiceAuthResultVo;
+import com.dragoninfo.dcuc.authweb.restcontroller.api.controller.vo.AppFunApiVo;
 import com.dragoninfo.dcuc.authweb.util.VersionUtils;
 import com.dragoninfo.dcuc.common.Constants;
 import com.dragoninfo.dcuc.common.entity.ApiResult;
@@ -20,6 +23,8 @@ import com.dragoninfo.dcuc.common.entity.ApiSearchReq;
 import com.dragoninfo.dcuc.common.utils.SearchableUtil;
 import com.dragoninfo.dcuc.user.user.entity.UserInfo;
 import com.dragoninfo.dcuc.user.user.facade.IUserFacade;
+import com.dragonsoft.duceap.base.entity.http.ResponseDTO;
+import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
 import com.dragonsoft.duceap.base.enums.BooleanEnum;
 import com.dragonsoft.duceap.core.search.Searchable;
 import com.dragonsoft.duceap.core.search.enums.SearchOperator;
@@ -69,6 +74,9 @@ public class AuthServiceController {
     @Autowired
     private IBimBusinessFacade bimBusinessFacade;
 
+    @Autowired
+    private IAppFunInfoFacade iAppFunInfoFacade;
+
     @GetMapping(value = "apps/authentication")
     @ApiOperation(value = "应用级鉴权")
     @ApiImplicitParams({@ApiImplicitParam(name = "appsAuthenticationReq", value = "应用级鉴权VO")})
@@ -214,6 +222,7 @@ public class AuthServiceController {
         requestMap.put("appName", new SearchOperator[]{SearchOperator.eq, SearchOperator.like});
         requestMap.put("appOrgName", new SearchOperator[]{SearchOperator.eq, SearchOperator.like});
         requestMap.put("appOrgCode", new SearchOperator[]{SearchOperator.eq});
+        requestMap.put("serviceResourceId", new SearchOperator[]{SearchOperator.eq});
         requestMap.put("appManagerOrgName", new SearchOperator[]{SearchOperator.eq, SearchOperator.like});
         requestMap.put("applicantName", new SearchOperator[]{SearchOperator.eq, SearchOperator.like});
         requestMap.put("serviceName", new SearchOperator[]{SearchOperator.eq, SearchOperator.like});
@@ -242,4 +251,35 @@ public class AuthServiceController {
         return ApiResult.setSuccessPage(serviceAuthResultDTOS.getTotalElements(), voList);
     }
 
+    @ApiOperation(value = "查询应用相关的菜单和功能")
+    @PostMapping(value = "/app-functions/search")
+    public ApiResult appFunctionSearch(@RequestBody ApiSearchReq searchReq) {
+        Map<String, SearchOperator[]> requestMap = new HashMap<>();
+        requestMap.put("appCode", new SearchOperator[]{SearchOperator.eq, SearchOperator.in});
+        requestMap.put("funCode", new SearchOperator[]{SearchOperator.eq, SearchOperator.in});
+        Searchable searchable;
+        try {
+            searchable = SearchableUtil.parseApiSearchReqToSearchable(searchReq, requestMap);
+        } catch (IllegalArgumentException e) {
+            String message = e.getMessage();
+            return ApiResult.setFailMessage(message);
+        }
+        ResponseDTO<List<AppFunInfoDTO>> status = iAppFunInfoFacade.apiFuncSearch(searchable.toSearchDTO());
+        if(!ResponseStatus.SUCCESS_CODE.equals(status.getStatusCode())) {
+            return ApiResult.setFailMessage(status.getMessage());
+        } else {
+            List<AppFunInfoDTO> result = (List<AppFunInfoDTO>) status.getResult();
+            List<AppFunApiVo> funApiVos = result.stream().map(item -> {
+                AppFunApiVo vo = new AppFunApiVo();
+                vo.setAppName(item.getAppName());
+                vo.setAppCode(item.getAppCode());
+                vo.setFunCode(item.getCode());
+                vo.setFunName(item.getName());
+                return vo;
+            }).collect(Collectors.toList());
+            return ApiResult.setSuccessResult(funApiVos);
+        }
+    }
+
+
 }

+ 2 - 2
src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/api/authservice/v1/controller/WorkFlowApiController.java

@@ -5,7 +5,7 @@ import com.dragoninfo.dcuc.auth.auth.dto.WorkFlowResutlAcceptDTO;
 import com.dragoninfo.dcuc.auth.auth.enumresources.WorkFlowStatusEnum;
 import com.dragoninfo.dcuc.auth.auth.facade.IServiceAuthFlowFacade;
 import com.dragoninfo.dcuc.authweb.restcontroller.api.authservice.v1.vo.AuthFlowRepeatCheckVo;
-import com.dragoninfo.dcuc.authweb.restcontroller.api.authservice.v1.vo.ResourceAuthInfoVo;
+import com.dragoninfo.dcuc.authweb.restcontroller.api.authservice.v1.vo.ResourceInfoVo;
 import com.dragoninfo.dcuc.authweb.restcontroller.api.authservice.v1.vo.ServiceAuthFlowAcceptVo;
 import com.dragoninfo.dcuc.authweb.restcontroller.api.authservice.v1.vo.WorkFlowResutlAcceptVo;
 import com.dragoninfo.dcuc.common.Constants;
@@ -138,7 +138,7 @@ public class WorkFlowApiController {
      * 设置申请单appCode和serviceCode信息
      */
     private void setAppServiceInfo(ServiceAuthFlowDTO dto, ServiceAuthFlowAcceptVo serviceAuthFlowVo) {
-        ResourceAuthInfoVo resourceInfo = serviceAuthFlowVo.getResourceInfo();
+        ResourceInfoVo resourceInfo = serviceAuthFlowVo.getResourceInfo();
         dto.setAppName(resourceInfo.getVisitorName());
         dto.setAppCode(resourceInfo.getVisitorCode());
         dto.setServiceCodes(resourceInfo.getVisitResourceCode());

+ 1 - 1
src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/api/authservice/v1/vo/ResourceAuthInfoVo.java → src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/api/authservice/v1/vo/ResourceInfoVo.java

@@ -12,7 +12,7 @@ import javax.validation.constraints.NotBlank;
  */
 @ApiModel(value = "资源信息")
 @Data
-public class ResourceAuthInfoVo {
+public class ResourceInfoVo {
 
     /**
      * 应用编码

+ 4 - 1
src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/api/authservice/v1/vo/ServiceAuthFlowAcceptVo.java

@@ -97,13 +97,16 @@ public class ServiceAuthFlowAcceptVo {
     @DateTimeFormat(pattern = "yyyy-MM-dd")
     private Date endTime;
 
+    @ApiModelProperty(value = "服务共享方式")
+    private String fwgxfs;
+
     /**
      * 访问资源信息
      */
     @ApiModelProperty(value = "访问资源信息实体类")
     @Valid
     @NotNull
-    private ResourceAuthInfoVo resourceInfo;
+    private ResourceInfoVo resourceInfo;
 
     /**
      * 工作单类型

+ 9 - 0
src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/api/authservice/v1/vo/ServiceAuthResultVo.java

@@ -81,4 +81,13 @@ public class ServiceAuthResultVo {
 
     @ApiModelProperty(value = "服务授权状态")
     private String authStatus;
+
+    @ApiModelProperty(value = "服务资源提供方  tj_service:数据资源目录  bu_service 部级服务资源")
+    private String serviceResourceId;
+
+    @ApiModelProperty(value = "服务共享方式 目前只用bu服务资源才有值")
+    private String serviceSharedWay;
+
+    @ApiModelProperty(value = "服务类型")
+    private String serviceType;
 }

+ 2 - 2
src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/api/authservice/v2/controller/WorkFlowApiV2Controller.java

@@ -4,7 +4,7 @@ import com.dragoninfo.dcuc.app.facade.IApplyInfoFacade;
 import com.dragoninfo.dcuc.app.facade.IServiceResourceFacade;
 import com.dragoninfo.dcuc.auth.auth.dto.ServiceAuthFlowDTO;
 import com.dragoninfo.dcuc.auth.auth.facade.IServiceAuthFlowFacade;
-import com.dragoninfo.dcuc.authweb.restcontroller.api.authservice.v1.vo.ResourceAuthInfoVo;
+import com.dragoninfo.dcuc.authweb.restcontroller.api.authservice.v1.vo.ResourceInfoVo;
 import com.dragoninfo.dcuc.authweb.restcontroller.api.authservice.v1.vo.ServiceAuthFlowAcceptVo;
 import com.dragoninfo.dcuc.common.Constants;
 import com.dragoninfo.dcuc.common.entity.ApiResult;
@@ -87,7 +87,7 @@ public class WorkFlowApiV2Controller {
      * 设置申请单appCode和serviceCode信息
      */
     private void setAppServiceInfo(ServiceAuthFlowDTO dto, ServiceAuthFlowAcceptVo serviceAuthFlowVo) {
-        ResourceAuthInfoVo resourceInfo = serviceAuthFlowVo.getResourceInfo();
+        ResourceInfoVo resourceInfo = serviceAuthFlowVo.getResourceInfo();
         dto.setAppName(resourceInfo.getVisitorName());
         dto.setAppCode(resourceInfo.getVisitorCode());
         dto.setServiceCodes(resourceInfo.getVisitResourceCode());

+ 40 - 20
src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/api/authservice/v3/controller/AuthV3ApiController.java

@@ -1,12 +1,19 @@
 package com.dragoninfo.dcuc.authweb.restcontroller.api.authservice.v3.controller;
 
+import com.alibaba.fastjson.JSON;
 import com.dragoninfo.dcuc.app.entity.ApplyInfo;
 import com.dragoninfo.dcuc.app.facade.IApplyInfoFacade;
+import com.dragoninfo.dcuc.auth.auth.dto.AppFunInfoDTO;
 import com.dragoninfo.dcuc.auth.auth.dto.AppResourcesDto;
 import com.dragoninfo.dcuc.auth.auth.dto.RoleApiDto;
+import com.dragoninfo.dcuc.auth.auth.facade.IFunAuthResultFacade;
 import com.dragoninfo.dcuc.auth.auth.facade.IRoleFacade;
+import com.dragoninfo.dcuc.auth.auth.vo.AppFunInfoVo;
 import com.dragoninfo.dcuc.auth.auth.vo.AppFunVO;
 import com.dragoninfo.dcuc.auth.power.facade.IAppFunInfoFacade;
+import com.dragoninfo.dcuc.authweb.restcontroller.api.authservice.v3.vo.AppFunAuthApiVo;
+import com.dragoninfo.dcuc.authweb.restcontroller.api.authservice.v3.vo.AppFunInfoApiVo;
+import com.dragoninfo.dcuc.authweb.restcontroller.api.authservice.v3.vo.FunCodeTreeApiVo;
 import com.dragoninfo.dcuc.authweb.util.VersionUtils;
 import com.dragoninfo.dcuc.authweb.vo.AuthManagerRes;
 import com.dragoninfo.dcuc.authweb.vo.AuthResourceVo;
@@ -28,6 +35,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * @author yica
@@ -51,6 +59,9 @@ public class AuthV3ApiController {
     @Autowired
     private IApplyInfoFacade applyInfoFacade;
 
+    @Autowired
+    private IFunAuthResultFacade funAuthResultFacade;
+
     /**
      * 推送资源
      *
@@ -99,7 +110,7 @@ public class AuthV3ApiController {
         if (StringUtils.isEmpty(appCode)) {
             return ApiResult.setFailMessage("appCode不能为空");
         }
-        ResponseStatus responseStatus = iAppFunInfoFacade.delByAppIdAndfunCode(functionCode, appCode);
+        ResponseStatus responseStatus = iAppFunInfoFacade.delByAppIdAndFunCode(functionCode, appCode);
         if ("300".equals(responseStatus.getStatusCode())) {
             return ApiResult.setFailMessage(responseStatus.getMessage());
         }
@@ -134,11 +145,20 @@ public class AuthV3ApiController {
         roleApiDto.setAppCode(managerRes.getAppCode());
         roleApiDto.setUserId(userInfo.getId());
         roleApiDto.setIdcard(managerRes.getIdcard());
-        List<Map<String, Object>> list = roleFacade.getMenus(roleApiDto);
-
-        //去重
-        Set<Map<String, Object>> result = new HashSet<>(list);
-        List<Map<String, Object>> mapList = this.addMap(new ArrayList<>(result), null);
+        List<AppFunInfoDTO> menus = roleFacade.getMenus(roleApiDto);
+        List<AppFunInfoApiVo> vos = Optional.ofNullable(menus)
+                .orElse(new ArrayList<>())
+                .stream()
+                .map(item -> {
+                    AppFunInfoApiVo vo = new AppFunInfoApiVo();
+                    vo.setName(item.getName());
+                    vo.setCode(item.getCode());
+                    vo.setPid(item.getParentId());
+                    vo.setUrl(item.getUrl());
+                    vo.setSort(item.getSeq());
+                    return vo;
+                }).collect(Collectors.toList());
+        List<FunCodeTreeApiVo> mapList = constructFunCodeTree(vos, null);
         return ApiResult.setSuccessResult(mapList);
     }
 
@@ -150,14 +170,14 @@ public class AuthV3ApiController {
      * @param pid  父节点
      * @return
      */
-    private List<Map<String, Object>> addMap(List<Map<String, Object>> maps, String pid) {
-        List<Map<String, Object>> mapList = new ArrayList<>();
+    private List<FunCodeTreeApiVo> constructFunCodeTree (List<AppFunInfoApiVo> maps, String pid) {
+        List<FunCodeTreeApiVo> mapList = new ArrayList<>();
         maps.forEach(item -> {
-            Map<String, Object> map = new HashMap<>();
-            if (item.get("pid") == null || StringUtils.isEmpty((String) item.get("pid"))) {
-                map.put("code", item.get("code"));
-                map.put("nextNode", getChildren(maps, (String) item.get("code")));
-                mapList.add(map);
+            FunCodeTreeApiVo vo = new FunCodeTreeApiVo();
+            if (item.getPid() == null || StringUtils.isEmpty(item.getPid())) {
+                vo.setCode(item.getCode());
+                vo.setNextNode(getChildren(maps,item.getCode()));
+                mapList.add(vo);
             }
 
         });
@@ -171,14 +191,14 @@ public class AuthV3ApiController {
      * @param pid  父节点
      * @return
      */
-    private List<Map<String, Object>> getChildren(List<Map<String, Object>> maps, String pid) {
-        List<Map<String, Object>> mapList = new ArrayList<>();
+    private List<FunCodeTreeApiVo> getChildren(List<AppFunInfoApiVo> maps, String pid) {
+        List<FunCodeTreeApiVo> mapList = new ArrayList<>();
         maps.forEach(item -> {
-            Map<String, Object> map = new HashMap<>();
-            if (pid.equals(item.get("pid"))) {
-                map.put("code", item.get("code"));
-                map.put("nextNode", getChildren(maps, (String) item.get("code")));
-                mapList.add(map);
+            FunCodeTreeApiVo vo = new FunCodeTreeApiVo();
+            if (pid.equals(item.getPid())) {
+                vo.setCode(item.getCode());
+                vo.setNextNode(getChildren(maps, item.getCode()));
+                mapList.add(vo);
             }
         });
         return mapList;

+ 3 - 4
src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/api/authservice/v3/controller/WorkFlowApiV3Controller.java

@@ -4,11 +4,9 @@ import com.auth0.jwt.JWT;
 import com.auth0.jwt.interfaces.DecodedJWT;
 import com.dragoninfo.dcuc.auth.auth.dto.ActivitiHolderDTO;
 import com.dragoninfo.dcuc.auth.auth.dto.ServiceAuthFlowDTO;
-import com.dragoninfo.dcuc.auth.auth.enumresources.WorkFlowApplyTypeEnum;
-import com.dragoninfo.dcuc.auth.auth.enumresources.WorkFlowTypeEnum;
 import com.dragoninfo.dcuc.auth.auth.facade.IServiceAuthFlowFacade;
 import com.dragoninfo.dcuc.authweb.restcontroller.api.authservice.v1.vo.ActivitiHolderVo;
-import com.dragoninfo.dcuc.authweb.restcontroller.api.authservice.v1.vo.ResourceAuthInfoVo;
+import com.dragoninfo.dcuc.authweb.restcontroller.api.authservice.v1.vo.ResourceInfoVo;
 import com.dragoninfo.dcuc.authweb.restcontroller.api.authservice.v1.vo.ServiceAuthFlowAcceptVo;
 import com.dragoninfo.dcuc.common.Constants;
 import com.dragoninfo.dcuc.common.entity.ApiResult;
@@ -89,6 +87,7 @@ public class WorkFlowApiV3Controller {
         dto.setUser(idcard);
         dto.setUserToken(userToken);
         dto.setAppToken(appToken);
+        dto.setServiceSharedWay(serviceAuthFlowVo.getFwgxfs());
         //任务信息
         if (CollectionUtils.isNotEmpty(serviceAuthFlowVo.getActivitiHolderList())){
             List<ActivitiHolderDTO> activitiHolderDTOS=new ArrayList<>();
@@ -113,7 +112,7 @@ public class WorkFlowApiV3Controller {
      * 设置申请单appCode和serviceCode信息
      */
     private void setAppServiceInfo(ServiceAuthFlowDTO dto, ServiceAuthFlowAcceptVo serviceAuthFlowVo) {
-        ResourceAuthInfoVo resourceInfo = serviceAuthFlowVo.getResourceInfo();
+        ResourceInfoVo resourceInfo = serviceAuthFlowVo.getResourceInfo();
         dto.setAppName(resourceInfo.getVisitorName());
         dto.setAppCode(resourceInfo.getVisitorCode());
         dto.setServiceCodes(resourceInfo.getVisitResourceCode());

+ 30 - 0
src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/api/authservice/v3/vo/AppFunAuthApiVo.java

@@ -0,0 +1,30 @@
+package com.dragoninfo.dcuc.authweb.restcontroller.api.authservice.v3.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author mazq
+ * @date 2021/7/19
+ */
+@ApiModel(value = "功能鉴权结果Vo")
+@Data
+public class AppFunAuthApiVo {
+
+    @ApiModelProperty(value = "功能名称")
+    private String name;
+
+    @ApiModelProperty(value = "功能code")
+    private String code;
+
+    @ApiModelProperty(value = "父级功能code")
+    private String pid;
+
+    @ApiModelProperty(value = "功能url")
+    private String url;
+
+    @ApiModelProperty(value = "功能排序")
+    private String sort;
+
+}

+ 30 - 0
src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/api/authservice/v3/vo/AppFunInfoApiVo.java

@@ -0,0 +1,30 @@
+package com.dragoninfo.dcuc.authweb.restcontroller.api.authservice.v3.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author mazq
+ * @date 2021/8/4
+ */
+@Data
+@ApiModel(value = "api接口功能菜单Vo")
+public class AppFunInfoApiVo {
+
+    @ApiModelProperty(value = "功能名称")
+    private String name;
+
+    @ApiModelProperty(value = "功能code")
+    private String code;
+
+    @ApiModelProperty(value = "父级功能code")
+    private String pid;
+
+    @ApiModelProperty(value = "功能菜单url")
+    private String url;
+
+    @ApiModelProperty(value = "功能排序序号")
+    private String sort;
+
+}

+ 22 - 0
src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/api/authservice/v3/vo/FunCodeTreeApiVo.java

@@ -0,0 +1,22 @@
+package com.dragoninfo.dcuc.authweb.restcontroller.api.authservice.v3.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author mazq
+ * @date 2021/8/4
+ */
+@Data
+@ApiModel(value = "树形功能菜单Vo")
+public class FunCodeTreeApiVo {
+
+    @ApiModelProperty(value = "功能菜单code")
+    private String code;
+
+    @ApiModelProperty(value = "子级菜单Vo集合")
+    private List<FunCodeTreeApiVo> nextNode;
+}

+ 27 - 4
src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/api/controller/AuthApiController.java

@@ -2,21 +2,32 @@ package com.dragoninfo.dcuc.authweb.restcontroller.api.controller;
 
 import com.dragoninfo.dcuc.app.entity.ApplyInfo;
 import com.dragoninfo.dcuc.app.facade.IApplyInfoFacade;
+import com.dragoninfo.dcuc.auth.auth.dto.AppFunInfoDTO;
 import com.dragoninfo.dcuc.auth.auth.dto.AppResourcesDto;
 import com.dragoninfo.dcuc.auth.auth.dto.ApprovalDto;
 import com.dragoninfo.dcuc.auth.auth.dto.RoleApiDto;
 import com.dragoninfo.dcuc.auth.auth.facade.IApprovalFacade;
 import com.dragoninfo.dcuc.auth.auth.facade.IRoleFacade;
+import com.dragoninfo.dcuc.auth.auth.vo.AppFunInfoVo;
 import com.dragoninfo.dcuc.auth.power.facade.IAppFunInfoFacade;
+import com.dragoninfo.dcuc.authweb.restcontroller.api.authservice.v3.vo.AppFunInfoApiVo;
 import com.dragoninfo.dcuc.authweb.restcontroller.api.controller.pojo.FunAppovalParamVo;
 import com.dragoninfo.dcuc.authweb.restcontroller.api.controller.pojo.RoleApiParamVo;
 import com.dragoninfo.dcuc.authweb.restcontroller.api.controller.pojo.UpdataAppFunVO;
+import com.dragoninfo.dcuc.authweb.restcontroller.api.controller.vo.AppFunApiVo;
+import com.dragoninfo.dcuc.common.entity.ApiResult;
+import com.dragoninfo.dcuc.common.entity.ApiSearchReq;
+import com.dragoninfo.dcuc.common.utils.SearchableUtil;
+import com.dragoninfo.dcuc.list.dto.redwhitelist.AppFunRedListDTO;
 import com.dragoninfo.dcuc.user.user.entity.UserInfo;
 import com.dragoninfo.dcuc.user.user.facade.IUserInfoFacade;
 import com.dragoninfo.duceap.core.enums.ResultEnum;
 import com.dragoninfo.duceap.core.response.Result;
 import com.dragonsoft.duceap.base.entity.http.ResponseDTO;
+import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
 import com.dragonsoft.duceap.commons.util.string.StringUtils;
+import com.dragonsoft.duceap.core.search.Searchable;
+import com.dragonsoft.duceap.core.search.enums.SearchOperator;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
@@ -26,8 +37,8 @@ import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
-import java.util.List;
-import java.util.Map;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * @author Administrator
@@ -162,8 +173,20 @@ public class AuthApiController {
         try {
             RoleApiDto dto = new RoleApiDto();
             dto.setAppCode(appCode);
-            List<Map<String, Object>> menus = roleFacade.getMenus(dto);
-            return Result.success(menus);
+            List<AppFunInfoDTO> menus = roleFacade.getMenus(dto);
+            List<AppFunInfoApiVo> vos = Optional.ofNullable(menus)
+                    .orElse(new ArrayList<>())
+                    .stream()
+                    .map(item -> {
+                        AppFunInfoApiVo vo = new AppFunInfoApiVo();
+                        vo.setName(item.getName());
+                        vo.setCode(item.getCode());
+                        vo.setPid(item.getParentId());
+                        vo.setUrl(item.getUrl());
+                        vo.setSort(item.getSeq());
+                        return vo;
+                    }).collect(Collectors.toList());
+            return Result.success(vos);
         } catch (Exception e) {
             return Result.fail("获取失败");
         }

+ 101 - 0
src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/api/controller/WhiteRedListApiController.java

@@ -0,0 +1,101 @@
+package com.dragoninfo.dcuc.authweb.restcontroller.api.controller;
+
+import com.dragoninfo.dcuc.authweb.restcontroller.api.controller.vo.AppFunRedListVo;
+import com.dragoninfo.dcuc.authweb.restcontroller.api.controller.vo.WhiteListUserApiVo;
+import com.dragoninfo.dcuc.common.entity.ApiResult;
+import com.dragoninfo.dcuc.common.entity.ApiSearchReq;
+import com.dragoninfo.dcuc.common.utils.SearchableUtil;
+import com.dragoninfo.dcuc.list.dto.redwhitelist.AppFunRedListDTO;
+import com.dragoninfo.dcuc.list.dto.redwhitelist.WhiteListUserDTO;
+import com.dragoninfo.dcuc.list.facade.IRedListFacade;
+import com.dragoninfo.dcuc.list.facade.IWhiteListFacade;
+import com.dragonsoft.duceap.base.entity.http.ResponseDTO;
+import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
+import com.dragonsoft.duceap.core.search.Searchable;
+import com.dragonsoft.duceap.core.search.enums.SearchOperator;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @author mazq
+ * @date 2021/7/20
+ */
+@Api(value = "红白名单查询接口")
+@RestController
+@RequestMapping("/api/list-service/v1/list")
+public class WhiteRedListApiController {
+
+    @Autowired
+    private IRedListFacade redListFacade;
+
+    @Autowired
+    private IWhiteListFacade whiteListFacade;
+
+    @ApiOperation(value = "菜单和功能红名单查询")
+    @PostMapping("func-red-list")
+    public ApiResult apiFuncRedListSearch(@RequestBody ApiSearchReq apiSearchReq) {
+        Map<String, SearchOperator[]> requestMap = new HashMap<>();
+        requestMap.put("appCode", new SearchOperator[]{SearchOperator.eq, SearchOperator.in});
+        requestMap.put("funCode", new SearchOperator[]{SearchOperator.eq, SearchOperator.in});
+        Searchable searchable;
+        try {
+            searchable = SearchableUtil.parseApiSearchReqToSearchable(apiSearchReq, requestMap);
+        } catch (IllegalArgumentException e) {
+            String message = e.getMessage();
+            return ApiResult.setFailMessage(message);
+        }
+        ResponseDTO<List<AppFunRedListDTO>> status = redListFacade.apiFunRedListSearch(searchable.toSearchDTO());
+        if(!ResponseStatus.SUCCESS_CODE.equals(status.getStatusCode())) {
+            return ApiResult.setFailMessage(status.getMessage());
+        } else {
+            List<AppFunRedListDTO> result = (List<AppFunRedListDTO>) status.getResult();
+            List<AppFunRedListVo> collect = result.stream().map(item -> {
+                AppFunRedListVo vo = new AppFunRedListVo();
+                BeanUtils.copyProperties(item, vo);
+                return vo;
+            }).collect(Collectors.toList());
+            return ApiResult.setSuccessResult(collect);
+        }
+    }
+
+    @ApiOperation(value = "人员白单查询")
+    @PostMapping("user-white-list")
+    public ApiResult userWhiteListSearch(@RequestBody ApiSearchReq apiSearchReq) {
+        Map<String, SearchOperator[]> requestMap = new HashMap<>();
+        requestMap.put("idcard", new SearchOperator[]{SearchOperator.eq, SearchOperator.in});
+        Searchable searchable;
+        try {
+            searchable = SearchableUtil.parseApiSearchReqToSearchable(apiSearchReq, requestMap);
+        } catch (IllegalArgumentException e) {
+            String message = e.getMessage();
+            return ApiResult.setFailMessage(message);
+        }
+        ResponseDTO<List<WhiteListUserDTO>> status =  whiteListFacade.apiUserWhiteListSearch(searchable.toSearchDTO());
+        if(!ResponseStatus.SUCCESS_CODE.equals(status.getStatusCode())) {
+            return ApiResult.setFailMessage(status.getMessage());
+        } else {
+            List<WhiteListUserDTO> result = (List<WhiteListUserDTO>) status.getResult();
+            List<WhiteListUserApiVo> collect = result.stream().map(item -> {
+                WhiteListUserApiVo vo = new WhiteListUserApiVo();
+                BeanUtils.copyProperties(item, vo);
+                return vo;
+            }).collect(Collectors.toList());
+            return ApiResult.setSuccessResult(collect);
+        }
+    }
+
+
+
+
+}

+ 27 - 0
src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/api/controller/vo/AppFunApiVo.java

@@ -0,0 +1,27 @@
+package com.dragoninfo.dcuc.authweb.restcontroller.api.controller.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author mazq
+ * @date 2021/7/22
+ */
+@ApiModel(value = "api接口功能菜单Vo")
+@Data
+public class AppFunApiVo {
+
+    @ApiModelProperty(value = "功能code")
+    private String funCode;
+
+    @ApiModelProperty(value = "功能名称")
+    private String funName;
+
+    @ApiModelProperty("应用code")
+    private String appCode;
+
+    @ApiModelProperty("应用名称")
+    private String appName;
+
+}

+ 39 - 0
src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/api/controller/vo/AppFunRedListVo.java

@@ -0,0 +1,39 @@
+package com.dragoninfo.dcuc.authweb.restcontroller.api.controller.vo;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+/**
+ * @author mazq
+ * @date 2021/7/20
+ */
+@ApiModel(value = "功能红名单Vo")
+@Data
+public class AppFunRedListVo {
+
+
+    /**
+     * 应用code
+     */
+    private String appCode;
+
+    /**
+     * 应用名称
+     */
+    private String appName;
+
+    /**
+     * 菜单功能code
+     */
+    private String funCode;
+
+    /**
+     * 菜单功能名称
+     */
+    private String funName;
+
+    /**
+     * 红白名单等级
+     */
+    private String level;
+}

+ 24 - 0
src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/api/controller/vo/WhiteListUserApiVo.java

@@ -0,0 +1,24 @@
+package com.dragoninfo.dcuc.authweb.restcontroller.api.controller.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author mazq
+ * @date 2021/7/20
+ */
+@ApiModel(value = "人员白名单api接口Vo")
+@Data
+public class WhiteListUserApiVo {
+    @ApiModelProperty(value = "人员姓名")
+    private String userName;
+    @ApiModelProperty(value = "人员所属机构code")
+    private String orgCode;
+    @ApiModelProperty(value = "人员所属机构名称")
+    private String orgName;
+    @ApiModelProperty(value = "人员身份证号")
+    private String idcard;
+    @ApiModelProperty(value = "白名单权限级别")
+    private String listLevel;
+}

+ 3 - 1
src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/audit/MgeAuditRptController.java

@@ -114,7 +114,9 @@ public class MgeAuditRptController {
             if (!AdminObjectTypeEnum.GLY.getValue().equals(type) && !AdminObjectTypeEnum.PTCD.getValue().equals(type)) {
                 if (AdminObjectTypeEnum.JGGL.getValue().equals(type) || AdminObjectTypeEnum.RYGL.getValue().equals(type) || AdminObjectTypeEnum.SQGL.getValue().equals(type) || AdminObjectTypeEnum.GLYGL.getValue().equals(type)) {
                     ids = iOrgInfoFacade.changeIdsToNames(ids);
-                    ids = ids.replace(":-1", "(及其下属机构)").replace(":0", "").replace(":1", "").replace(":2", "(及其下属机构)");
+                    if(StringUtils.isNotBlank(ids)) {
+                        ids = ids.replace(":-1", "(及其下属机构)").replace(":0", "").replace(":1", "").replace(":2", "(及其下属机构)");
+                    }
                     mgeLog.setObjectName(ids);
                 }
 

+ 23 - 6
src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/auth/AppFunInfoController.java

@@ -1,15 +1,14 @@
 
 package com.dragoninfo.dcuc.authweb.restcontroller.auth;
 
-import cn.hutool.core.bean.BeanUtil;
-import com.dragoninfo.dcuc.app.entity.ApplyInfo;
+import com.dragoninfo.dcuc.auth.auth.dto.AppFunTreeDTO;
 import com.dragoninfo.dcuc.auth.auth.entity.AppFunInfo;
 import com.dragoninfo.dcuc.auth.auth.vo.AppFunInfoVo;
 import com.dragoninfo.dcuc.auth.auth.vo.EventInfoVO;
 import com.dragoninfo.dcuc.auth.auth.vo.TreeInfoVO;
 import com.dragoninfo.dcuc.auth.power.facade.IAppFunInfoFacade;
 import com.dragoninfo.dcuc.auth.power.facade.IFunEventFacade;
-import com.dragoninfo.dcuc.authweb.restcontroller.app.vo.AppVo;
+import com.dragoninfo.dcuc.authweb.restcontroller.auth.vo.AppFunTreeVo;
 import com.dragoninfo.duceap.core.response.Result;
 import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
 import com.dragonsoft.duceap.base.entity.search.SearchDTO;
@@ -35,6 +34,7 @@ import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * 菜单功能信息
@@ -145,7 +145,7 @@ public class AppFunInfoController {
         AppFunInfo appFunInfo = new AppFunInfo();
         BeanUtils.copyProperties(appFunInfoVo, appFunInfo);
         ResponseStatus responseStatus = iAppFunInfoFacade.save(appFunInfo);
-        if (!responseStatus.getStatusCode().equals("200")){
+        if (!responseStatus.getStatusCode().equals(ResponseStatus.SUCCESS_CODE)){
             return Result.fail(responseStatus.getStatusCode(), responseStatus.getMessage());
         }
         return Result.success();
@@ -156,7 +156,7 @@ public class AppFunInfoController {
     @PutMapping(value = "/update")
     public Result updateAppFunInfo(@Validated @RequestBody  AppFunInfoVo appFunInfoVo) {
         ResponseStatus responseStatus = iAppFunInfoFacade.updateAppFunInfo(appFunInfoVo);
-        if (!responseStatus.getStatusCode().equals("200")){
+        if (!responseStatus.getStatusCode().equals(ResponseStatus.SUCCESS_CODE)){
             return Result.fail(responseStatus.getStatusCode(), responseStatus.getMessage());
         }
         return Result.success();
@@ -167,12 +167,29 @@ public class AppFunInfoController {
     @DeleteMapping(value = "/{id}")
     public Result deleteAppFunInfo(@PathVariable("id") String id) {
         ResponseStatus responseStatus = iAppFunInfoFacade.deleteById(id);
-        if (!responseStatus.getStatusCode().equals("200")){
+        if (!responseStatus.getStatusCode().equals(ResponseStatus.SUCCESS_CODE)){
             return Result.fail(responseStatus.getStatusCode(), responseStatus.getMessage());
         }
         return Result.success();
     }
 
+    @ApiOperation(value = "全量应用功能树")
+    @ApiImplicitParam(name = "exclude", value = "exclude 是否需要排除已经通过角色授权的菜单,true 需要排除, 非必填,不选时默认为false")
+    @GetMapping(value = "/allMenuTree")
+    public Result allMenuTree(@RequestParam(value = "exclude", required = false) Boolean exclude) {
+        if(null == exclude) {
+            exclude = false;
+        }
+        List<AppFunTreeDTO> treeDTOS = iAppFunInfoFacade.allMenuTree(exclude);
+        List<AppFunTreeVo> list = treeDTOS.stream().map(item -> {
+            AppFunTreeVo treeVo = new AppFunTreeVo();
+            BeanUtils.copyProperties(item, treeVo);
+            return treeVo;
+        }).collect(Collectors.toList());
+        return Result.success(list);
+    }
+
+
     public List<TreeInfoVO> getChildTreeObjects(List<TreeInfoVO> list,
                                                 String parentCode) {
         List<TreeInfoVO> returnList = new ArrayList<TreeInfoVO>();

+ 1 - 1
src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/auth/ApplicationController.java

@@ -122,7 +122,7 @@ public class ApplicationController {
         //填充统计数据
         //TODO
         //DTO待设计
-        List<ApplicationInfoVO> apps = iApplicationInfoFacade.addCountInfo(objectConvert(applyInfos));
+        List<ApplicationInfoVO> apps = iApplicationInfoFacade.addCountInfoInLimitRole(objectConvert(applyInfos));
         for (ApplicationInfoVO source : apps) {
             ApplicationInfoVo vo = new ApplicationInfoVo();
             BeanUtils.copyProperties(source, vo);

+ 16 - 17
src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/auth/RoleAuthInfoController.java

@@ -18,9 +18,10 @@ import com.dragoninfo.dcuc.authweb.restcontroller.auth.vo.StaffAssignAuthInfoVo;
 import com.dragoninfo.dcuc.authweb.restcontroller.auth.vo.StaffOperateVo;
 import com.dragoninfo.dcuc.authweb.restcontroller.auth.vo.StaffRoleOperateVo;
 import com.dragoninfo.dcuc.duceap.facade.ICodeListResourceFacade;
-import com.dragoninfo.dcuc.duceap.facade.IDuceapCodeFacade;
 import com.dragoninfo.dcuc.org.entity.OrgInfo;
 import com.dragoninfo.dcuc.org.facade.IOrgInfoFacade;
+import com.dragoninfo.dcuc.user.label.ILabelFacade;
+import com.dragoninfo.dcuc.user.label.vo.LabelVO;
 import com.dragoninfo.dcuc.user.user.entity.UserInfo;
 import com.dragoninfo.dcuc.user.user.entity.UserInfoView;
 import com.dragoninfo.dcuc.user.user.enumresources.JobTypeEnum;
@@ -43,7 +44,6 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
-import org.hibernate.validator.internal.IgnoreForbiddenApisErrors;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
@@ -51,6 +51,7 @@ import org.springframework.http.MediaType;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.*;
+import java.util.stream.Collectors;
 
 @Api(tags = {"授权模块-角色授权管理接口"})
 @RestController
@@ -71,7 +72,7 @@ public class RoleAuthInfoController {
     @Autowired
     private ICodeListResourceFacade iCodeListResourceFacade;
     @Autowired
-    private IDuceapCodeFacade iDuceapCodeFacade;
+    private ILabelFacade labelFacade;
 
     /**
      * 角色视图 人员列表
@@ -336,26 +337,24 @@ public class RoleAuthInfoController {
     }
 
     private String getLavleValue(String value) {
-        HashMap<String, String> codeMap = getCodeVLMap("T_USER_LABEL");
+        Map<String, String> codeMap = getUserLabel();
         String codeValue = "";
-        if(StringUtils.isNotEmpty(value)){
-            String[] codeLable = value.split(",");
-            for (String s : codeLable) {
-                codeValue += codeMap.get(s)+",";
+        if(StringUtils.isNotEmpty(value)) {
+            String[] codes = value.split(",");
+            for (int i = 0; i < codes.length; i++) {
+                String code = codes[i];
+                String label = codeMap.get(code);
+                label = StringUtils.isBlank(label)? "": label;
+                codes[i] = label;
             }
+            codeValue = String.join(",",codes);
         }
         return codeValue;
     }
 
-    private HashMap<String, String> getCodeVLMap(String name) {
-        HashMap<String, String> map = new HashMap<String, String>();
-        List<Map<String, Object>> codeResource = iDuceapCodeFacade.getCodeResource(name);
-        codeResource.forEach(item->{
-            String lable = item.get("NAME").toString();
-            String value = item.get("CODE").toString();
-            map.put(value,lable);
-        });
-        return map;
+    private Map<String, String> getUserLabel() {
+        List<LabelVO> all = labelFacade.findAll();
+        return all.stream().collect(Collectors.toMap(LabelVO::getCode, LabelVO::getName));
     }
 
 

+ 41 - 0
src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/auth/vo/AppFunTreeVo.java

@@ -0,0 +1,41 @@
+package com.dragoninfo.dcuc.authweb.restcontroller.auth.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author mazq
+ * @date 2021/7/13
+ */
+@ApiModel(value = "应用功能全量树Vo")
+@Data
+public class AppFunTreeVo {
+
+    @ApiModelProperty(value = "主键id")
+    private String id;
+
+    @ApiModelProperty(value = "父节点id")
+    private String pid;
+
+    @ApiModelProperty(value = "节点名称")
+    private String label;
+
+    @ApiModelProperty(value = "资源code")
+    private String code;
+
+    @ApiModelProperty(value = "是否是树节点")
+    private Boolean isTreeNode;
+
+    @ApiModelProperty(value = "节点类型")
+    private String type;
+
+    @ApiModelProperty(value = "功能所属应用id")
+    private String appId;
+
+    @ApiModelProperty(value = "子节点集合")
+    private List<AppFunTreeVo> child;
+
+}

+ 107 - 0
src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/list/controller/RedListController.java

@@ -0,0 +1,107 @@
+package com.dragoninfo.dcuc.authweb.restcontroller.list.controller;
+
+import com.dragoninfo.dcuc.authweb.restcontroller.list.vo.AppFunRedListAddVo;
+import com.dragoninfo.dcuc.authweb.restcontroller.list.vo.FunRedListTreeVo;
+import com.dragoninfo.dcuc.authweb.restcontroller.list.vo.RedListOperateVo;
+import com.dragoninfo.dcuc.list.dto.redwhitelist.AppFunRedListAddDTO;
+import com.dragoninfo.dcuc.list.dto.redwhitelist.FunRedListTreeDTO;
+import com.dragoninfo.dcuc.list.dto.redwhitelist.RedListOperateDTO;
+import com.dragoninfo.dcuc.list.facade.IRedListFacade;
+import com.dragoninfo.duceap.core.response.Result;
+import com.dragonsoft.duceap.commons.util.collections.CollectionUtils;
+import com.dragonsoft.duceap.core.search.Searchable;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @author mazq
+ * @date 2021/7/12
+ */
+@Api(tags = "权限红名单接口")
+@RestController
+@RequestMapping(value = "/authsvr/v2/redlist")
+public class RedListController {
+
+    @Autowired
+    IRedListFacade redListFacade;
+
+    @ApiOperation(value = "功能红名单列表查询")
+    @ApiImplicitParam(name = "searchable", value = "查询条件 level:= ; appName:like ; appCode:like")
+    @PostMapping(value = "funRedListPage")
+    public Result<List<FunRedListTreeVo>> funRedListPage(Searchable searchable) {
+        Page<FunRedListTreeDTO> treeDTOPage = redListFacade.funRedListPage(searchable.toSearchDTO());
+        List<FunRedListTreeDTO> content = treeDTOPage.getContent();
+        List<FunRedListTreeVo> collect = content.stream().map(item -> {
+            FunRedListTreeVo vo = new FunRedListTreeVo();
+            BeanUtils.copyProperties(item, vo);
+            return vo;
+        }).collect(Collectors.toList());
+        return Result.success(treeDTOPage.getTotalElements(), collect);
+    }
+
+    @ApiOperation(value = "功能红名单添加")
+    @PostMapping("funRedListAdd")
+    public Result userWhiteListAdd(@RequestBody List<AppFunRedListAddVo> addVoList) {
+        if(CollectionUtils.isEmpty(addVoList)) {
+            return Result.fail();
+        }
+        List<AppFunRedListAddDTO> collect = addVoList.stream().map(item -> {
+            AppFunRedListAddDTO addDTO = new AppFunRedListAddDTO();
+            BeanUtils.copyProperties(item, addDTO);
+            return addDTO;
+        }).collect(Collectors.toList());
+        redListFacade.funRedListAdd(collect);
+        return Result.success();
+    }
+
+    @ApiOperation(value = "红名单批量修改等级")
+    @PostMapping("redListUpdateLevel")
+    public Result redListUpdateLevel(@RequestBody RedListOperateVo vo) {
+        RedListOperateDTO dto = new RedListOperateDTO();
+        BeanUtils.copyProperties(vo, dto);
+        redListFacade.funRedListUpdateLevel(dto);
+        return Result.success();
+    }
+
+    @ApiOperation(value = "应用功能红名单批量移除")
+    @PostMapping("funRedListBatchDel")
+    public Result funRedListBatchDel(@RequestBody RedListOperateVo vo) {
+        RedListOperateDTO dto = new RedListOperateDTO();
+        BeanUtils.copyProperties(vo, dto);
+        redListFacade.funRedListBatchDel(dto);
+        return Result.success();
+    }
+
+    @ApiOperation(value = "应用功能红名单单条记录移除")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "resourceType",value = "app menu 资源类型"),
+            @ApiImplicitParam(name = "resourceId",value = "资源id 应用或是功能id"),
+            @ApiImplicitParam(name = "isTreeNode",value = "是否是树节点")
+    })
+    @DeleteMapping(value = "funRedListDel")
+    public Result funRedListDel(@RequestParam("resourceType") String resourceType,
+                                @RequestParam("resourceId") String resourceId,
+                                @RequestParam("isTreeNode") Boolean isTreeNode) {
+        redListFacade.funRedListDel(resourceType, resourceId, isTreeNode);
+        return Result.success();
+    }
+
+    @ApiOperation(value = "查询已被添加为红名单的功能id")
+    @ApiImplicitParam(name = "appId", value = "appId 应用id 非必选,不填时查询所有")
+    @GetMapping("funIdsInRedList")
+    public Result<List<String>> funIdsInRedList(@RequestParam(value = "appId", required = false) String appId) {
+        List<String> funIds = redListFacade.funIdsInRedList(appId);
+        return Result.success(funIds);
+    }
+
+
+}

+ 80 - 0
src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/list/controller/WhiteListController.java

@@ -0,0 +1,80 @@
+package com.dragoninfo.dcuc.authweb.restcontroller.list.controller;
+
+import com.dragoninfo.dcuc.auth.sub.enumresource.SubObjTypeEnum;
+import com.dragoninfo.dcuc.authweb.restcontroller.list.vo.WhiteListOperateVo;
+import com.dragoninfo.dcuc.authweb.restcontroller.list.vo.WhiteListUserVo;
+import com.dragoninfo.dcuc.list.dto.redwhitelist.WhiteListOperateDTO;
+import com.dragoninfo.dcuc.list.dto.redwhitelist.WhiteListUserDTO;
+import com.dragoninfo.dcuc.list.facade.IWhiteListFacade;
+import com.dragoninfo.duceap.core.response.Result;
+import com.dragonsoft.duceap.core.search.Searchable;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageImpl;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @author mazq
+ * @date 2021/7/9
+ */
+@Api(tags = "权限白名单接口")
+@RestController
+@RequestMapping(value = "/authsvr/v2/whitelist")
+public class WhiteListController {
+
+    @Autowired
+    IWhiteListFacade whiteListFacade;
+
+    @ApiImplicitParam(name = "searchable", value = "查询条件 level:= ; name:like ; idcard:like ; orgId:=")
+    @ApiOperation(value = "用户白名单列表查询")
+    @PostMapping("userWhiteListPage")
+    public Page<WhiteListUserVo> whiteListUserPage(Searchable searchable) {
+        Page<WhiteListUserDTO> userPage = whiteListFacade.whiteListUserPage(searchable.toSearchDTO());
+        List<WhiteListUserDTO> content = userPage.getContent();
+        List<WhiteListUserVo> collect = content.stream().map(item -> {
+            WhiteListUserVo userVo = new WhiteListUserVo();
+            BeanUtils.copyProperties(item, userVo);
+            return userVo;
+        }).collect(Collectors.toList());
+        return new PageImpl<>(collect, userPage.getPageable(), userPage.getTotalElements());
+    }
+
+    @ApiOperation(value = "用户白名单添加")
+    @PostMapping("userWhiteListAdd")
+    public Result userWhiteListAdd(@RequestBody WhiteListOperateVo vo) {
+        WhiteListOperateDTO dto = new WhiteListOperateDTO();
+        vo.setSubType(SubObjTypeEnum.SUB_USER.getCode());
+        BeanUtils.copyProperties(vo, dto);
+        whiteListFacade.whiteListAdd(dto);
+        return Result.success();
+    }
+
+    @ApiOperation(value = "白名单批量删除")
+    @PostMapping("whiteListDel")
+    public Result whiteListDel(@RequestBody WhiteListOperateVo vo) {
+        WhiteListOperateDTO dto = new WhiteListOperateDTO();
+        BeanUtils.copyProperties(vo, dto);
+        whiteListFacade.whiteListDel(dto);
+        return Result.success();
+    }
+
+    @ApiOperation(value = "白名单批量修改等级")
+    @PostMapping("whiteListUpdateLevel")
+    public Result whiteListUpdateLevel(@RequestBody WhiteListOperateVo vo) {
+        WhiteListOperateDTO dto = new WhiteListOperateDTO();
+        BeanUtils.copyProperties(vo, dto);
+        whiteListFacade.whiteListUpdateLevel(dto);
+        return Result.success();
+    }
+
+}

+ 26 - 0
src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/list/vo/AppFunRedListAddVo.java

@@ -0,0 +1,26 @@
+package com.dragoninfo.dcuc.authweb.restcontroller.list.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author mazq
+ * @date 2021/7/12
+ */
+@ApiModel(value = "功能红名单添加Vo")
+@Data
+public class AppFunRedListAddVo {
+
+    @ApiModelProperty(value = "红名单等级")
+    private String level;
+
+    @ApiModelProperty(value = "应用id")
+    private String appId;
+
+    @ApiModelProperty(value = "功能ids")
+    private List<String> funIds;
+
+}

+ 44 - 0
src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/list/vo/FunRedListTreeVo.java

@@ -0,0 +1,44 @@
+package com.dragoninfo.dcuc.authweb.restcontroller.list.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author mazq
+ * @date 2021/7/13
+ */
+@ApiModel(value = "功能红名单列表树Vo")
+@Data
+public class FunRedListTreeVo {
+
+    @ApiModelProperty(value = "主键id")
+    private String id;
+
+    @ApiModelProperty(value = "父节点id")
+    private String pid;
+
+    @ApiModelProperty(value = "节点名称")
+    private String label;
+
+    @ApiModelProperty(value = "资源code")
+    private String code;
+
+    @ApiModelProperty(value = "是否是树节点")
+    private Boolean isTreeNode;
+
+    @ApiModelProperty(value = "红名单记录id")
+    private String listId;
+
+    @ApiModelProperty(value = "节点类型")
+    private String type;
+
+    @ApiModelProperty(value = "红名单等级")
+    private String level;
+
+    @ApiModelProperty(value = "子节点集合")
+    private List<FunRedListTreeVo> child;
+
+}

+ 28 - 0
src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/list/vo/RedListOperateVo.java

@@ -0,0 +1,28 @@
+package com.dragoninfo.dcuc.authweb.restcontroller.list.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author mazq
+ * @date 2021/7/9
+ */
+@ApiModel(value = "红名单操作Vo")
+@Data
+public class RedListOperateVo {
+
+    @ApiModelProperty(value = "红名单等级")
+    private String level;
+
+    @ApiModelProperty(value = "客体类型")
+    private String objType;
+
+    @ApiModelProperty(value = "客体id集合")
+    private List<String> objIds;
+
+    @ApiModelProperty(value = "红名单记录id")
+    private List<String> listIds;
+}

+ 28 - 0
src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/list/vo/WhiteListOperateVo.java

@@ -0,0 +1,28 @@
+package com.dragoninfo.dcuc.authweb.restcontroller.list.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author mazq
+ * @date 2021/7/9
+ */
+@ApiModel(value = "白名单操作Vo")
+@Data
+public class WhiteListOperateVo {
+
+    @ApiModelProperty(value = "白名单等级")
+    private String level;
+
+    @ApiModelProperty(value = "主体类型")
+    private String subType;
+
+    @ApiModelProperty(value = "主体id集合")
+    private List<String> subIds;
+
+    @ApiModelProperty(value = "白名单记录id")
+    private List<String> listIds;
+}

+ 31 - 0
src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/list/vo/WhiteListUserVo.java

@@ -0,0 +1,31 @@
+package com.dragoninfo.dcuc.authweb.restcontroller.list.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author mazq
+ * @date 2021/7/9
+ */
+@ApiModel(value = "人员白名单Vo")
+@Data
+public class WhiteListUserVo {
+
+    @ApiModelProperty(value = "人员id")
+    private String userId;
+    @ApiModelProperty(value = "人员姓名")
+    private String userName;
+    @ApiModelProperty(value = "人员所属机构id")
+    private String orgId;
+    @ApiModelProperty(value = "人员所属机构名称")
+    private String orgName;
+    @ApiModelProperty(value = "人员所属机构code")
+    private String orgCode;
+    @ApiModelProperty(value = "人员身份证号")
+    private String idcard;
+    @ApiModelProperty(value = "白名单权限级别")
+    private String listLevel;
+    @ApiModelProperty(value = "白名单记录id")
+    private String listId;
+}

+ 8 - 3
src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/login/DcucLoginController.java

@@ -54,7 +54,7 @@ public class DcucLoginController {
     }
 
     @GetMapping(value = "/info")
-    public SecurityUser info(@RequestHeader(value = "userToken",required = false) String userToken,
+    public SecurityUser info(@RequestHeader(value = "userToken", required = false) String userToken,
                              @RequestHeader(value = "appToken", required = false) String appToken) {
         logger.info("UserToken:{},appToken:{}", userToken, appToken);
 
@@ -69,7 +69,7 @@ public class DcucLoginController {
             } else {
                 userInfo = iUserInfoFacade.userDetail(securityUser.getId());
             }
-                securityUser.setId(userInfo.getId());
+            securityUser.setId(userInfo.getId());
             List<SecurityRight> authmenu = getAuthmenu(securityUser, userInfo);
             securityUser.setSecurityRightList(authmenu);
             //ADMIN管理员
@@ -102,8 +102,13 @@ public class DcucLoginController {
         } else if (dcucAuthWebConfig.isAuthAccess()) {
             logger.info("进入权限授权模块控制菜单权限");
             //使用权限授权模块控制菜单权限
-            List<String> rightIds = iRoleFacade.getAuthByUserIdAndAppCode(securityUser.getId(), dcucAuthWebConfig.getAppCode());
+            String userId = securityUser.getId();
+            String appCode = dcucAuthWebConfig.getAppCode();
+            logger.debug("Get MenuInfo userId:{} , appCode:{}", userId, appCode);
+            List<String> rightIds = iRoleFacade.getAuthByUserIdAndAppCode(userId, appCode);
+            logger.debug("Get MenuInfo rightIds:{}", rightIds);
             rights = iMenuMtAuthFacade.getMenuByIds(rightIds, "SysMenuInfo");
+            logger.debug("Get MenuInfo iMenuMtAuthFacade rightIds:{}", rightIds);
         } else {
             logger.info("进入管理员管理配置菜单权限");
             //使用管理员管理配置菜单权限

+ 264 - 0
src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/selfauth/controller/SelfAuthAppLyController.java

@@ -0,0 +1,264 @@
+package com.dragoninfo.dcuc.authweb.restcontroller.selfauth.controller;
+
+import com.alibaba.fastjson.JSON;
+import com.dragoninfo.dcuc.auth.auth.dto.*;
+import com.dragoninfo.dcuc.auth.auth.enumresources.WorkFlowSourceEnum;
+import com.dragoninfo.dcuc.auth.auth.facade.IAuthApplyFacade;
+import com.dragoninfo.dcuc.auth.auth.facade.IFunAuthResultFacade;
+import com.dragoninfo.dcuc.authweb.restcontroller.selfauth.vo.*;
+import com.dragoninfo.duceap.core.response.Result;
+import com.dragonsoft.duceap.base.entity.http.ResponseDTO;
+import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
+import com.dragonsoft.duceap.core.search.Searchable;
+import com.dragonsoft.duceap.core.search.enums.SearchOperator;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+
+/**
+ * @author mazq
+ * @date 2021/7/7
+ */
+@Api(tags = "权限自助申请接口")
+@RestController
+@RequestMapping(value = "/authsvr/v2/selfauth")
+public class SelfAuthAppLyController {
+
+    @Autowired
+    IAuthApplyFacade selfAuthApplyFacade;
+
+    @Autowired
+    IFunAuthResultFacade appFunResultFacade;
+
+    @ApiOperation(value = "权限申请单列表")
+    @ApiImplicitParam(name = "searchable", value = "searchable 查询条件flowTitle like; applyType eq ;" +
+            "createTime ge (大于等于); createTime le (小于等于)时间格式:yyyy-MM-dd HH:mm:ss")
+    @PostMapping(value = "authApplySearch")
+    public Result<List<WorkFlowPageViewVo>> authApplySearch(Searchable searchable) {
+        if(null == searchable) {
+            searchable = Searchable.newSearchable();
+        }
+        searchable.addSearchFilter("applySource", SearchOperator.eq, WorkFlowSourceEnum.SELF_AUTH_APPLY.getValue());
+        Page<WorkFlowPageViewDTO> dtoPage = selfAuthApplyFacade.authApplySearch(searchable.toSearchDTO());
+        List<WorkFlowPageViewVo> viewVos = dtoPage.getContent().stream().map(item -> {
+            WorkFlowPageViewVo viewVo = new WorkFlowPageViewVo();
+            BeanUtils.copyProperties(item, viewVo);
+            return viewVo;
+        }).collect(Collectors.toList());
+        return Result.success(dtoPage.getTotalElements(), viewVos);
+    }
+
+    @ApiOperation(value = "权限申请单撤销")
+    @ApiImplicitParam(name = "id", value = "工作流审批单号")
+    @GetMapping(value = "authApplyCancel")
+    public Result authApplyCancel(@RequestParam("applyOrdNo") String applyOrdNo) {
+        ResponseStatus status = selfAuthApplyFacade.authApplyCancel(applyOrdNo);
+        return dealResult(status);
+    }
+
+    @ApiOperation(value = "权限申请单删除")
+    @ApiImplicitParam(name = "applyOrdNo", value = "工作流审批单号")
+    @DeleteMapping(value = "authApplyDelete")
+    public Result authApplyDelete(@RequestParam("applyOrdNo") String applyOrdNo) {
+        ResponseStatus status = selfAuthApplyFacade.authApplyDelete(applyOrdNo);
+        return dealResult(status);
+    }
+
+
+    @ApiOperation(value = "应用功能授权申请保存")
+    @PostMapping(value = "funApplySave")
+    public Result funApplySave(@RequestBody AppFunAuthApplyVo vo) {
+        String jsonString = JSON.toJSONString(vo);
+        AppFunAuthApplyDTO authApplyDTO = JSON.parseObject(jsonString, AppFunAuthApplyDTO.class);
+        WorkFlowDTO workFlow = authApplyDTO.getWorkFlow();
+        workFlow.setApplySource(WorkFlowSourceEnum.SELF_AUTH_APPLY.getValue());
+        Date endTime = getEndTime(workFlow.getEndTime());
+        workFlow.setEndTime(endTime);
+        ResponseStatus status = selfAuthApplyFacade.funApplySave(authApplyDTO);
+        return dealResult(status);
+    }
+
+    private Result dealResult(ResponseStatus status) {
+        if (!ResponseStatus.SUCCESS_CODE.equals(status.getStatusCode())) {
+            return Result.fail(status.getStatusCode(), status.getMessage());
+        } else {
+            return Result.success();
+        }
+    }
+
+    private Date getEndTime(Date endTime) {
+        if (null != endTime) {
+            Calendar calendar = Calendar.getInstance();
+            calendar.setTime(endTime);
+            calendar.add(Calendar.HOUR, 23);
+            calendar.add(Calendar.MINUTE, 59);
+            calendar.add(Calendar.SECOND, 59);
+            return calendar.getTime();
+        }
+        return null;
+    }
+
+    @ApiOperation(value = "应用功能权限申请详情")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "applyOrdNo", value = "工作流审批单号"),
+            @ApiImplicitParam(name = "needFlowInfo", value = "needFlowInfo 是否需要查询工作流相关信息")
+    })
+    @GetMapping(value = "funApplyDetail")
+    public Result<FunApplyDetailVo> funApplyDetail(@RequestParam("applyOrdNo") String applyOrdNo,
+                                 @RequestParam(value = "needFlowInfo", required = false) Boolean needFlowInfo) {
+        if(null == needFlowInfo) {
+            needFlowInfo = false;
+        }
+        FunApplyDetailDTO detailDTO = selfAuthApplyFacade.funApplyDetail(applyOrdNo, needFlowInfo);
+        FunApplyDetailVo detailVo = convertToDetailVo(detailDTO);
+        return Result.success(detailVo);
+    }
+
+    private FunApplyDetailVo convertToDetailVo(FunApplyDetailDTO detailDTO) {
+        FunApplyDetailVo detailVo = new FunApplyDetailVo();
+        WorkFlowDTO workFlow = detailDTO.getWorkFlow();
+        WorkFlowVo workFlowVo = new WorkFlowVo();
+        BeanUtils.copyProperties(workFlow, workFlowVo);
+        detailVo.setWorkFlow(workFlowVo);
+        List<AppFunAuthResourceDTO> resourceInfos = detailDTO.getResourceInfos();
+        List<AppFunAuthResourceVo> resourceVoList = Optional.ofNullable(resourceInfos).orElse(new ArrayList<>()).stream().map(item -> {
+            AppFunAuthResourceVo resourceVo = new AppFunAuthResourceVo();
+            BeanUtils.copyProperties(item, resourceVo);
+            return resourceVo;
+        }).collect(Collectors.toList());
+        detailVo.setResourceInfos(resourceVoList);
+
+        List<AppFunAuthResourceDTO> delResourceInfos = detailDTO.getDelResourceInfos();
+        List<AppFunAuthResourceVo> delVoList = Optional.ofNullable(delResourceInfos).orElse(new ArrayList<>())
+                .stream().map(item -> {
+            AppFunAuthResourceVo resourceVo = new AppFunAuthResourceVo();
+            BeanUtils.copyProperties(item, resourceVo);
+            return resourceVo;
+        }).collect(Collectors.toList());
+        detailVo.setDelResourceInfos(delVoList);
+
+
+        List<AppFunAuthResourceDTO> existResourceInfos = detailDTO.getExistResourceInfos();
+        List<AppFunAuthResourceVo> existVoList = Optional.ofNullable(existResourceInfos).orElse(new ArrayList<>())
+                .stream().map(item -> {
+                    AppFunAuthResourceVo resourceVo = new AppFunAuthResourceVo();
+                    BeanUtils.copyProperties(item, resourceVo);
+                    return resourceVo;
+                }).collect(Collectors.toList());
+        detailVo.setExistResourceInfos(existVoList);
+
+        return detailVo;
+    }
+
+    @ApiOperation(value = "应用功能权限申请修改")
+    @PostMapping(value = "funApplyUpdate")
+    public Result funApplyUpdate(@RequestBody AppFunApplyUpdateVo vo){
+        String jsonString = JSON.toJSONString(vo);
+        AppFunApplyUpdateDTO updateDTO = JSON.parseObject(jsonString, AppFunApplyUpdateDTO.class);
+        Date endTime = getEndTime(updateDTO.getEndTime());
+        updateDTO.setEndTime(endTime);
+        ResponseStatus status = selfAuthApplyFacade.funApplyUpdate(updateDTO);
+        return dealResult(status);
+    }
+
+    @ApiOperation(value = "应用功能权限结果列表")
+    @ApiImplicitParam(name = "searchable", value = "searchable 查询条件")
+    @PostMapping(value = "funAuthList")
+    public Result<List<AppFunAuthResultVo>> funAuthList(Searchable searchable){
+       List<AppFunAuthResultDTO> authResultList = appFunResultFacade.findList(searchable.toSearchDTO());
+       List<AppFunAuthResultVo> resultVos = authResultList.stream().map(item -> {
+            AppFunAuthResultVo resultVo = new AppFunAuthResultVo();
+            BeanUtils.copyProperties(item, resultVo);
+            return resultVo;
+       }).collect(Collectors.toList());
+       return Result.success(resultVos);
+    }
+
+    @ApiOperation(value = "获取申请人已被授权的功能id")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "userId", value = "用户id"),
+            @ApiImplicitParam(name = "appId", value = "应用id 非必填,不选时查询所有应用")
+    })
+    @GetMapping(value = "userHasAuthFunIds")
+    public Result<List<String>> userHasAuthFunIds(@RequestParam("userId") String userId,
+                                                  @RequestParam(value = "appId" ,required = false) String appId) {
+        List<String> funIds = appFunResultFacade.userHasAuthFunIds(userId, appId);
+        return Result.success(funIds);
+    }
+
+    @ApiOperation(value = "查询审批流程意见")
+    @ApiImplicitParam(name = "applyOrdNo", value = "工作流审批单号")
+    @GetMapping(value = "approvalSuggestion")
+    public Result<List<ApprovalSuggestionVo>> approvalSuggestion(@RequestParam(value = "applyOrdNo") String applyOrdNo){
+        List<ApprovalSuggestionDTO> dtoList = selfAuthApplyFacade.approvalSuggestion(applyOrdNo);
+        List<ApprovalSuggestionVo> collect = dtoList.stream().map(item -> {
+            ApprovalSuggestionVo suggestionVo = new ApprovalSuggestionVo();
+            BeanUtils.copyProperties(item, suggestionVo);
+            return suggestionVo;
+        }).collect(Collectors.toList());
+        return Result.success(collect);
+    }
+
+    @ApiOperation(value = "查询流程状态信息")
+    @ApiImplicitParam(name = "applyOrdNo", value = "工作流审批单号")
+    @GetMapping(value = "processStatusView")
+    public Result<List<ProcessStatusVo>> processStatusView(@RequestParam(value = "applyOrdNo") String applyOrdNo) {
+        List<ProcessStatusDTO> dtoList = selfAuthApplyFacade.processStatusView(applyOrdNo);
+        List<ProcessStatusVo> collect = dtoList.stream().map(item -> {
+            ProcessStatusVo statusVo = new ProcessStatusVo();
+            BeanUtils.copyProperties(item, statusVo);
+            return statusVo;
+        }).collect(Collectors.toList());
+        return Result.success(collect);
+    }
+
+    @ApiOperation(value = "查询流程图信息")
+    @ApiImplicitParam(name = "applyOrdNo", value = "工作流审批单号")
+    @GetMapping(value = "processPicView")
+    public Result<ProcessPicVo> processPicView(@RequestParam(value = "applyOrdNo") String applyOrdNo) {
+        ProcessPicDTO picDTO = selfAuthApplyFacade.processPicView(applyOrdNo);
+        ProcessPicVo picVo = new ProcessPicVo();
+        BeanUtils.copyProperties(picDTO, picVo);
+        return Result.success(picVo);
+    }
+
+    @ApiOperation(value = "查询流程状图节点详情")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "applyOrdNo", value = "工作流审批单号"),
+            @ApiImplicitParam(name = "nodeKey", value = "工作流节点标识"),
+            @ApiImplicitParam(name = "nodeStatus", value = "节点状态")
+    })
+    @GetMapping(value = "processNodeView")
+    public Result<ProcessNodeVo> processNodeView(@RequestParam(value = "applyOrdNo") String applyOrdNo,
+                                                 @RequestParam(value = "nodeKey") String nodeKey,
+                                                 @RequestParam(value = "nodeStatus") String nodeStatus) {
+        ProcessNodeDTO nodeDTO = selfAuthApplyFacade.processNodeView(applyOrdNo, nodeKey, nodeStatus);
+        ProcessNodeVo nodeVo = new ProcessNodeVo();
+        BeanUtils.copyProperties(nodeDTO, nodeVo);
+        return Result.success(nodeVo);
+    }
+
+    @ApiOperation(value = "查询流程定义详情")
+    @ApiImplicitParam(value = "applyType 审批类型")
+    @GetMapping("flowDefineInfo")
+    public Result<FlowDefineInfoVo> getFlowDefineInfo(@RequestParam(value = "applyType") String applyType) {
+        ResponseDTO<FlowDefineInfoDTO> status = selfAuthApplyFacade.getFlowDefineInfo(applyType);
+        if(!ResponseStatus.SUCCESS_CODE.equals(status.getStatusCode())) {
+            return Result.fail(status.getStatusCode(), status.getMessage());
+        } else {
+            FlowDefineInfoDTO dto = (FlowDefineInfoDTO) status.getResult();
+            FlowDefineInfoVo vo = new FlowDefineInfoVo();
+            BeanUtils.copyProperties(dto, vo);
+            return Result.success(vo);
+        }
+    }
+}

+ 57 - 0
src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/selfauth/vo/AppFunApplyUpdateVo.java

@@ -0,0 +1,57 @@
+package com.dragoninfo.dcuc.authweb.restcontroller.selfauth.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author mazq
+ * @date 2021/7/14
+ */
+@ApiModel("应用功能工单更新操作Vo")
+@Data
+public class AppFunApplyUpdateVo {
+
+    @ApiModelProperty(value = "工作流审批单号")
+    private String applyOrdNo;
+
+    @ApiModelProperty(value = "工单id")
+    private String id;
+
+    @ApiModelProperty(value = "审批内容")
+    private String flowContent;
+
+    @ApiModelProperty(value = "申请理由")
+    private String applyReason;
+
+    @ApiModelProperty(value = "申请人联系方式")
+    private String applicantPhoneNo;
+
+    @ApiModelProperty(value = "权限有效起始时间(2020-01-01 00:00:00)")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private Date startTime;
+
+    @ApiModelProperty(value = "权限有效终止时间(2020-01-01 00:00:00)")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private Date endTime;
+
+    @ApiModelProperty(value = "权限有效类型 01:自定义 | 02:长期")
+    private String permissionValidType;
+
+    @ApiModelProperty(value = "操作类型 1:保存  2:提交")
+    private String operateType;
+
+    @ApiModelProperty(value = "修改后需要申请的应用菜单和功能集合")
+    private List<AppFunAuthResourceVo> resourceInfos;
+
+    @ApiModelProperty(value = "修改后需要撤销的应用菜单和功能集合")
+    private List<AppFunAuthResourceVo> delResourceInfos;
+
+}

+ 25 - 0
src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/selfauth/vo/AppFunAuthApplyVo.java

@@ -0,0 +1,25 @@
+package com.dragoninfo.dcuc.authweb.restcontroller.selfauth.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author mazq
+ * @date 2021/7/8
+ */
+@ApiModel(value = "应用功能权限自助申请Vo")
+@Data
+public class AppFunAuthApplyVo {
+
+    @ApiModelProperty(value = "工作流申请vo")
+    private WorkFlowVo workFlow;
+
+    @ApiModelProperty(value = "需要申请权限的应用菜单和功能集合")
+    private List<AppFunAuthResourceVo> resourceInfos;
+
+    @ApiModelProperty(value = "需要撤销的应用菜单和功能集合")
+    private List<AppFunAuthResourceVo> delResourceInfos;
+}

+ 30 - 0
src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/selfauth/vo/AppFunAuthResourceVo.java

@@ -0,0 +1,30 @@
+package com.dragoninfo.dcuc.authweb.restcontroller.selfauth.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author mazq
+ * @date 2021/7/8
+ */
+@ApiModel(value = "应用功能申请资源Vo")
+@Data
+public class AppFunAuthResourceVo {
+
+    @ApiModelProperty(value = "应用id")
+    private String appId;
+
+    @ApiModelProperty(value = "应用名称")
+    private String appName;
+
+    @ApiModelProperty(value = "功能id")
+    private String funId;
+
+    @ApiModelProperty(value = "功能code")
+    private String funCode;
+
+    @ApiModelProperty(value = "功能名称")
+    private String funName;
+
+}

+ 56 - 0
src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/selfauth/vo/AppFunAuthResultVo.java

@@ -0,0 +1,56 @@
+package com.dragoninfo.dcuc.authweb.restcontroller.selfauth.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+/**
+ * @author mazq
+ * @date 2021/7/9
+ */
+@ApiModel(value = "应用功能授权结果Vo")
+@Data
+public class AppFunAuthResultVo {
+
+    @ApiModelProperty(value = "主键")
+    private String id;
+
+    @ApiModelProperty(value = "人员id")
+    private String userId ;
+
+    @ApiModelProperty(value = "应用id")
+    private String appId ;
+
+    @ApiModelProperty(value = "应用code")
+    private String appCode ;
+
+    @ApiModelProperty(value = "功能id")
+    private String funId ;
+
+    @ApiModelProperty(value = "功能code")
+    private String funCode ;
+
+    @ApiModelProperty(value = "权限开始时间")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private Date startTime ;
+
+    @ApiModelProperty(value = "权限结束时间")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private Date endTime ;
+
+    @ApiModelProperty(value = "权限起停用状态")
+    private String authStatus ;
+
+    @ApiModelProperty(value = "权限结果来源")
+    private String authSource ;
+
+    @ApiModelProperty(value = "来源对象标识")
+    private String sourceId ;
+
+}

+ 39 - 0
src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/selfauth/vo/ApprovalSuggestionVo.java

@@ -0,0 +1,39 @@
+package com.dragoninfo.dcuc.authweb.restcontroller.selfauth.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author mazq
+ * @date 2021/7/20
+ */
+@ApiModel(value = "审批意见Vo")
+@Data
+public class ApprovalSuggestionVo {
+
+    @ApiModelProperty(value = "节点名称")
+    private String nodeName;
+
+    @ApiModelProperty(value = "审批意见")
+    private String approveMessage;
+
+    @ApiModelProperty(value = "审批时间")
+    private String approveTime;
+
+    @ApiModelProperty(value = "审批人")
+    private String assignee;
+
+    @ApiModelProperty(value = "审批人身份证号")
+    private String assigneeIdcard;
+
+    @ApiModelProperty(value = "审批动作")
+    private String approveState;
+
+    @ApiModelProperty(value = "节点定义ID")
+    private String id;
+
+    @ApiModelProperty(value = "排序字段")
+    private Integer sort;
+
+}

+ 30 - 0
src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/selfauth/vo/FlowDefineInfoVo.java

@@ -0,0 +1,30 @@
+package com.dragoninfo.dcuc.authweb.restcontroller.selfauth.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author mazq
+ * @date 2021/7/21
+ */
+@ApiModel(value = "流程定义Vo")
+@Data
+public class FlowDefineInfoVo {
+
+    @ApiModelProperty(value = "流程标识")
+    private String businessCode;
+
+    @ApiModelProperty(value = "流程名称")
+    private String processName;
+
+    @ApiModelProperty(value = "描述")
+    private String description;
+
+    @ApiModelProperty(value = "流程类型标识")
+    private String processTypeCode;
+
+    @ApiModelProperty(value = "流程类型名称")
+    private String processTypeName;
+
+}

+ 21 - 0
src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/selfauth/vo/FlowPictureVo.java

@@ -0,0 +1,21 @@
+package com.dragoninfo.dcuc.authweb.restcontroller.selfauth.vo;
+
+import com.alibaba.fastjson.JSONArray;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+/**
+ * @author mazq
+ * @date 2021/7/14
+ */
+@ApiModel(value = "工作流流程图详情")
+@Data
+public class FlowPictureVo {
+
+    private JSONArray data;
+
+    private String json;
+
+    private String processDefinitionId;
+
+}

+ 17 - 0
src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/selfauth/vo/FlowStatusVo.java

@@ -0,0 +1,17 @@
+package com.dragoninfo.dcuc.authweb.restcontroller.selfauth.vo;
+
+import com.alibaba.fastjson.JSONArray;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+/**
+ * @author mazq
+ * @date 2021/7/14
+ */
+@ApiModel(value = "工作流流程状态详情")
+@Data
+public class FlowStatusVo {
+
+    private JSONArray jsonArray;
+
+}

+ 35 - 0
src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/selfauth/vo/FunApplyDetailVo.java

@@ -0,0 +1,35 @@
+package com.dragoninfo.dcuc.authweb.restcontroller.selfauth.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author mazq
+ * @date 2021/7/14
+ */
+@ApiModel(value = "应用功能申请详情Vo")
+@Data
+public class FunApplyDetailVo {
+
+    @ApiModelProperty(value = "工单详情")
+    private WorkFlowVo workFlow;
+
+    @ApiModelProperty(value = "申请授权资源Vo集合")
+    private List<AppFunAuthResourceVo> resourceInfos;
+
+    @ApiModelProperty(value = "申请撤销授权资源Vo集合")
+    private List<AppFunAuthResourceVo> delResourceInfos;
+
+    @ApiModelProperty(value = "已通过授权的资源Vo集合")
+    private List<AppFunAuthResourceVo> existResourceInfos;
+
+    @ApiModelProperty(value = "工作流流程图详情 由审批中心提供")
+    private FlowPictureVo flowPictureInfo;
+
+    @ApiModelProperty(value = "工作流流程状态详情 由审批中心提供")
+    private FlowStatusVo flowStatusInfo;
+
+}

+ 44 - 0
src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/selfauth/vo/ProcessNodeVo.java

@@ -0,0 +1,44 @@
+package com.dragoninfo.dcuc.authweb.restcontroller.selfauth.vo;
+
+import com.alibaba.fastjson.JSONArray;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+/**
+ * @author mazq
+ * @date 2021/7/21
+ */
+@ApiModel(value = "工作流节点详情Vo")
+@Data
+public class ProcessNodeVo {
+
+    private String name;
+
+    private String statusStr;
+
+    private String dueDateNum;
+
+    private String beforeDueLimit;
+
+    private String approveMessage;
+
+    private String description;
+
+    private JSONArray assigneeList;
+
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date actStartTime;
+
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date actEndTime;
+
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date dueDate;
+}

+ 24 - 0
src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/selfauth/vo/ProcessOperateVo.java

@@ -0,0 +1,24 @@
+package com.dragoninfo.dcuc.authweb.restcontroller.selfauth.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author mazq
+ * @date 2021/7/21
+ */
+@ApiModel(value = "流程可操作类型")
+@Data
+public class ProcessOperateVo {
+
+    @ApiModelProperty(value = "是否可撤回")
+    private Boolean showRecall;
+
+    @ApiModelProperty(value = "是否可退回")
+    private Boolean showBack;
+
+    @ApiModelProperty(value = "是否可编辑")
+    private Boolean showEdit;
+
+}

+ 24 - 0
src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/selfauth/vo/ProcessPicVo.java

@@ -0,0 +1,24 @@
+package com.dragoninfo.dcuc.authweb.restcontroller.selfauth.vo;
+
+import com.alibaba.fastjson.JSONArray;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author mazq
+ * @date 2021/7/21
+ */
+@ApiModel(value = "流程图信息")
+@Data
+public class ProcessPicVo {
+
+    @ApiModelProperty(value = "流程定义id")
+    private String processDefinitionId;
+
+    @ApiModelProperty(value = "流程配置信息")
+    private String json;
+
+    @ApiModelProperty(value = "节点数据")
+    private JSONArray data;
+}

+ 31 - 0
src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/selfauth/vo/ProcessStatusVo.java

@@ -0,0 +1,31 @@
+package com.dragoninfo.dcuc.authweb.restcontroller.selfauth.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author mazq
+ * @date 2021/7/20
+ */
+@ApiModel(value = "流程状态Vo")
+@Data
+public class ProcessStatusVo {
+
+    @ApiModelProperty(value = "节点ID")
+    private String nodeId;
+
+    @ApiModelProperty(value = "节点名称")
+    private String nodeName;
+
+    @ApiModelProperty(value = "操作者总计")
+    private Integer operatorSummary;
+
+    @ApiModelProperty(value = "已办")
+    private Integer finishOperatorSummary;
+
+    @ApiModelProperty(value = "列表详情集合")
+    private List<ProcessTaskVo> taskVos;
+}

+ 41 - 0
src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/selfauth/vo/ProcessTaskVo.java

@@ -0,0 +1,41 @@
+package com.dragoninfo.dcuc.authweb.restcontroller.selfauth.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author mazq
+ * @date 2021/7/20
+ */
+@ApiModel(value = "列表详情Vo")
+@Data
+public class ProcessTaskVo {
+
+    @ApiModelProperty(value = "操作人")
+    private String assignee;
+
+    @ApiModelProperty(value = "操作人姓名")
+    private String assigneeName;
+
+    @ApiModelProperty(value = "操作状态")
+    private String operateState;
+
+    @ApiModelProperty(value = "接收时间,yyyy-MM-dd HH:mm:ss")
+    private String receiveTime;
+
+    @ApiModelProperty(value = "处理时间,yyyy-MM-dd HH:mm:ss")
+    private String handleTime;
+
+    @ApiModelProperty(value = "处理耗时")
+    private String costTime;
+
+
+
+
+
+
+
+
+
+}

+ 53 - 0
src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/selfauth/vo/WorkFlowPageViewVo.java

@@ -0,0 +1,53 @@
+package com.dragoninfo.dcuc.authweb.restcontroller.selfauth.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+/**
+ * @author mazq
+ * @date 2021/7/14
+ */
+@ApiModel(value = "权限申请工单列表Vo")
+@Data
+public class WorkFlowPageViewVo {
+
+
+    @ApiModelProperty(value = "主键id")
+    private String id;
+
+    @ApiModelProperty(value = "审批单标题")
+    private String flowTitle;
+
+    @ApiModelProperty(value = "审批类型")
+    private String applyType;
+
+    @ApiModelProperty(value = "创建时间")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    @ApiModelProperty(value = "当前节点")
+    private String taskName;
+
+    @ApiModelProperty(value = "未操作者")
+    private String dealOperator;
+
+    @ApiModelProperty(value = "流程审批单号")
+    private String applyOrdNo;
+
+    @ApiModelProperty(value = "是否可撤回")
+    private Boolean showRecall;
+
+    @ApiModelProperty(value = "是否可退回")
+    private Boolean showBack;
+
+    @ApiModelProperty(value = "是否可编辑")
+    private Boolean showEdit;
+
+
+}

+ 90 - 0
src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/selfauth/vo/WorkFlowVo.java

@@ -0,0 +1,90 @@
+package com.dragoninfo.dcuc.authweb.restcontroller.selfauth.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+/**
+ * @author mazq
+ * @date 2021/7/8
+ */
+@ApiModel(value = "权限申请工作流Vo")
+@Data
+public class WorkFlowVo {
+
+    @ApiModelProperty(value = "主键id")
+    private String id;
+
+    @ApiModelProperty(value = "审批单编号(申请单号)")
+    private String applicantOrdNo;
+
+    @ApiModelProperty(value = "申请人身份证号")
+    private String applicantIdcard;
+
+    @ApiModelProperty(value = "申请人姓名")
+    private String applicantName;
+
+    @ApiModelProperty(value = "申请人联系方式")
+    private String applicantPhoneNo;
+
+    @ApiModelProperty(value = "申请人单位编码")
+    private String applicantOrgCode;
+
+    @ApiModelProperty(value = "申请人单位名称")
+    private String applicantOrgName;
+
+    @ApiModelProperty(value = "申请单来源平台")
+    private String applySource;
+
+    @ApiModelProperty(value = "申请单来源应用code")
+    private String applyAppCode;
+
+    @ApiModelProperty(value = "权限申请单类型 对应类型:服务授权 功能授权  数据授权")
+    private String applyType;
+
+    @ApiModelProperty(value = "流程标识businessCode")
+    private String businessCode;
+
+    @ApiModelProperty(value = "流程类型processType")
+    private String processType;
+
+    @ApiModelProperty(value = "工作流标题")
+    private String flowTitle;
+
+    @ApiModelProperty(value = "审批内容")
+    private String flowContent;
+
+    @ApiModelProperty(value = "申请理由")
+    private String applyReason;
+
+    @ApiModelProperty(value = "流程名称,审批中心提供,与businessCode对应取值")
+    private String processName;
+
+    @ApiModelProperty(value = "权限有效起始时间(2020-01-01 00:00:00)")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private Date startTime;
+
+    @ApiModelProperty(value = "权限有效终止时间(2020-01-01 23:59:59)")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private Date endTime;
+
+    @ApiModelProperty(value = "创建时间")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    @ApiModelProperty(value = "权限有效类型 01:自定义 | 02:长期")
+    private String permissionValidType;
+
+    @ApiModelProperty(value = "操作类型 1:保存  2:提交")
+    private String operateType;
+
+
+
+}

+ 2 - 2
src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/sub/AttrController.java

@@ -6,8 +6,8 @@ import com.dragoninfo.dcuc.app.entity.ApplyInfo;
 import com.dragoninfo.dcuc.auth.sub.dto.AttrInfoTreeDTO;
 import com.dragoninfo.dcuc.auth.sub.dto.AttrRelAcceptDTO;
 import com.dragoninfo.dcuc.auth.sub.dto.RelSearchDTO;
-import com.dragoninfo.dcuc.auth.auth.enumresources.sub.AttrBelongTypeEnum;
-import com.dragoninfo.dcuc.auth.auth.enumresources.sub.AttrTypeEnum;
+import com.dragoninfo.dcuc.auth.sub.enumresource.AttrBelongTypeEnum;
+import com.dragoninfo.dcuc.auth.sub.enumresource.AttrTypeEnum;
 import com.dragoninfo.dcuc.auth.sub.facade.IAttrFacade;
 import com.dragoninfo.dcuc.authweb.restcontroller.sub.vo.attr.AttrInfoTreeVo;
 import com.dragoninfo.dcuc.authweb.restcontroller.sub.vo.attr.AttrRelAcceptVo;

+ 2 - 2
src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/sub/AuthOrgInfoController.java

@@ -28,7 +28,7 @@ import java.util.stream.Collectors;
  */
 @Api(tags = {"授权管理-主客体管理-机构信息"})
 @RestController
-@RequestMapping(value = "/authsvr/"+ VersionUtils.VERSION_UID +"/authorginfo")
+@RequestMapping(value = "/authsvr/" + VersionUtils.VERSION_UID + "/authorginfo")
 public class AuthOrgInfoController {
 
 
@@ -46,7 +46,7 @@ public class AuthOrgInfoController {
     @GetMapping(value = "/detail/{id}")
     @ApiImplicitParam(name = "id", value = "机构信息ID")
     @ApiOperation(value = "服务主体-机构信息详情")
-    public AuthOrgDTO detail(@PathVariable(value = "id") String id){
+    public AuthOrgDTO detail(@PathVariable(value = "id") String id) {
         return orgInfoFacade.get(id);
     }
 

+ 28 - 2
src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/sub/AuthUserInfoController.java

@@ -2,16 +2,24 @@ package com.dragoninfo.dcuc.authweb.restcontroller.sub;
 
 import com.dragoninfo.dcuc.auth.sub.dto.AuthUserDTO;
 import com.dragoninfo.dcuc.auth.sub.facade.IAuthUserInfoFacade;
+import com.dragoninfo.dcuc.authweb.restcontroller.sub.vo.user.AuthUserVo;
 import com.dragoninfo.duceap.core.response.Result;
 import com.dragonsoft.duceap.core.search.Searchable;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.List;
+import java.util.stream.Collectors;
 
+/**
+ * @author wangrs
+ * @date 2021-04-27
+ */
 @Api(tags = {"授权管理-主客体管理-用户信息"})
 @RestController
 @RequestMapping(value = "authsvr/v2/authuserinfo")
@@ -31,9 +39,11 @@ public class AuthUserInfoController {
     @ApiOperation(value = "用户信息详情")
     @ApiImplicitParam(name = "id", value = "id")
     @GetMapping(value = "/detail/{id}")
-    public AuthUserDTO detail(@PathVariable(value = "id") String id) {
+    public AuthUserVo detail(@PathVariable(value = "id") String id) {
         AuthUserDTO authUserInfo = userInfoFacade.get(id);
-        return authUserInfo;
+        AuthUserVo authUserVo = new AuthUserVo();
+        BeanUtils.copyProperties(authUserInfo,authUserVo);
+        return authUserVo;
     }
 
     @ApiOperation(value = "用户信息删除")
@@ -44,4 +54,20 @@ public class AuthUserInfoController {
         return Result.success();
     }
 
+    @ApiOperation(value = "机构下未添加白名单的人员")
+    @ApiImplicitParam(name = "searchable", value = "searchable 查询条件:orgId:= ; name:like; idcard:like")
+    @PostMapping("notInWhiteListUserPage")
+    public Result notInWhiteListUserPage(Searchable searchable) {
+        Page<AuthUserDTO> userPage = userInfoFacade.notInWhiteListUserPage(searchable.toSearchDTO());
+        List<AuthUserDTO> content = userPage.getContent();
+        List<AuthUserVo> voList = content.stream().map(item -> {
+            AuthUserVo vo = new AuthUserVo();
+            BeanUtils.copyProperties(item, vo);
+            return vo;
+        }).collect(Collectors.toList());
+        return Result.success(userPage.getTotalElements(), voList);
+    }
+
+
+
 }

+ 1 - 1
src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/sub/SubSyncController.java

@@ -114,7 +114,7 @@ public class SubSyncController {
     }
 
 
-    @ApiOperation(value = "授权主体-数据分级同步")
+    @ApiOperation(value = "授权主体-字段分类同步")
     @GetMapping(value = "fieldClaSync")
     public Result fieldClaSync() {
         ResponseStatus response = dataResourceFacade.fieldClaSync();

+ 33 - 0
src/main/java/com/dragoninfo/dcuc/authweb/restcontroller/sub/vo/user/AuthUserVo.java

@@ -1,81 +1,114 @@
 package com.dragoninfo.dcuc.authweb.restcontroller.sub.vo.user;
 
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
 /**
  * @author mazq
  * @date 2021/6/11
  */
+@ApiModel("人员信息Vo")
+@Data
 public class AuthUserVo {
 
+    @ApiModelProperty(value = "id")
     private String id;
 
     /**
      * 身份证
      */
+    @ApiModelProperty(value = "身份证")
     private String idcard;
 
     /**
      * 姓名
      */
+    @ApiModelProperty(value = "姓名")
     private String name;
 
     /**
      * 性别
      */
+    @ApiModelProperty(value = "性别")
     private String sex;
 
     /**
      * 用户类型
      */
+    @ApiModelProperty(value = "用户类型")
     private String userType;
 
     /**
      * 警号
      */
+    @ApiModelProperty(value = "警号")
     private String policeNumber;
 
+    /**
+     * 所在机构id
+     */
+    @ApiModelProperty(value = "所在机构id")
+    private String orgId;
+
     /**
      * 所在机构编码
      */
+    @ApiModelProperty(value = "所在机构编码")
     private String orgCode;
 
     /**
      * 所在机构名称
      */
+    @ApiModelProperty(value = "所在机构名称")
     private String orgName;
 
     /**
      * 人员身份类型10:民警 15:现役特警 20:辅警 25:外部党政人员 30:在编文员  99999:其他工勤人员
      */
+    @ApiModelProperty(value = "人员身份类型")
     private String manType;
 
+    /**
+     * 辅警类型 (10:合同工、20:聘用、 30:事业编、 90:其它)
+     */
+    @ApiModelProperty(value = "辅警类型 (10:合同工、20:聘用、 30:事业编、 90:其它)")
+    private String auxiliaryType;
+
     /**
      * 警种
      */
+    @ApiModelProperty(value = "警种")
     private String policeCategory;
 
     /**
      * 职级
      */
+    @ApiModelProperty(value = "职级")
     private String title;
 
     /**
      * 警衔
      */
+    @ApiModelProperty(value = "警衔")
     private String rank;
 
     /**
      * 业务域标签
      */
+    @ApiModelProperty(value = "业务域标签")
     private String policeBusiness;
 
     /**
      * 删除标识
      */
+    @ApiModelProperty(value = "删除标识")
     private String deleted;
 
     /**
      * 所属区域
      */
+    @ApiModelProperty(value = "所属区域")
     private String area;
 
 }

+ 0 - 17
src/main/java/com/dragoninfo/dcuc/authweb/util/ConstantsUtils.java

@@ -1,17 +0,0 @@
-package com.dragoninfo.dcuc.authweb.util;
-
-/**
- * @Author yica
- * @Date 2021/2/22 16:55
- **/
-public class ConstantsUtils {
-    /**
-     * 服务鉴权自定义命名空间
-     */
-    public static final String AUTHENTICATION_SPACE ="SERVICE:AUTHENTICATION:" ;
-    /**
-     * 服务鉴权过期时间(小时)
-     */
-    public static final Integer  AUTHENTICATION_TIME_OUT_HOURS =1 ;
-
-}