From d729d924aff31c769b90adc99d998d38cdf50ec0 Mon Sep 17 00:00:00 2001
From: liyanqi <15181887205@163.com>
Date: 星期五, 09 九月 2022 22:06:33 +0800
Subject: [PATCH] 修复一些问题

---
 ycl-common/src/main/java/com/ycl/entity/auth/Operator.java                        |   36 ++
 ycl-common/src/main/java/com/ycl/entity/auth/AuthInfo.java                        |   14 
 ycl-common/src/main/java/com/ycl/entity/depart/SccgDepart.java                    |    4 
 ycl-common/src/main/java/com/ycl/utils/auth/UserAuthUtil.java                     |   62 +++
 ycl-platform/src/main/java/com/ycl/controller/user/UmsAdminController.java        |   14 
 ycl-common/src/main/java/com/ycl/dto/user/AdminDepartInfoDTO.java                 |   30 +
 ycl-common/src/main/java/com/ycl/service/depart/impl/SccgDepartServiceImpl.java   |   56 +++
 ycl-common/src/main/java/com/ycl/service/user/UmsAdminDepartService.java          |   31 +
 ycl-common/src/main/java/com/ycl/utils/JwtTokenUtil.java                          |   54 ++
 pom.xml                                                                           |    6 
 ycl-common/src/main/java/com/ycl/service/user/impl/UmsAdminServiceImpl.java       |   20 +
 ycl-common/src/main/java/com/ycl/utils/common/LiveTimeMillisecond.java            |   75 ++++
 ycl-common/src/main/java/com/ycl/api/BasePageDTO.java                             |   22 +
 ycl-common/src/main/java/com/ycl/vo/user/UserVO.java                              |    4 
 ycl-common/src/main/java/com/ycl/api/BaseEntity.java                              |    2 
 ycl-common/src/main/java/com/ycl/enums/common/ResultCode.java                     |   11 
 ycl-common/src/main/java/com/ycl/bo/AdminUserDetails.java                         |    4 
 ycl-common/src/main/java/com/ycl/api/BasePageVO.java                              |    2 
 ycl-common/src/main/java/com/ycl/dto/user/AdminDepartDTO.java                     |   23 +
 ycl-common/src/main/resources/mapper/user/UmsAdminDepartMapper.xml                |   33 ++
 ycl-common/src/main/java/com/ycl/mapper/user/UmsAdminDepartMapper.java            |   24 +
 ycl-common/src/main/java/com/ycl/service/depart/SccgDepartService.java            |    2 
 /dev/null                                                                         |   32 --
 ycl-common/src/main/java/com/ycl/utils/auth/OperatorAuthUtil.java                 |   49 +++
 ycl-common/src/main/java/com/ycl/utils/redis/RedisKey.java                        |    5 
 ycl-platform/src/main/java/com/ycl/controller/depart/DepartController.java        |   34 ++
 ycl-common/src/main/java/com/ycl/vo/depart/DepartVO.java                          |   44 ++
 ycl-common/src/main/java/com/ycl/dto/UmsAdminParam.java                           |   12 
 ycl-common/src/main/java/com/ycl/config/GlobalCorsConfig.java                     |   35 ++
 ycl-common/src/main/java/com/ycl/entity/user/UmsAdminDepart.java                  |   41 ++
 ycl-common/src/main/java/com/ycl/service/user/impl/UmsAdminDepartServiceImpl.java |   95 +++++
 ycl-platform/src/main/java/com/ycl/controller/BaseController.java                 |   35 ++
 32 files changed, 849 insertions(+), 62 deletions(-)

diff --git a/pom.xml b/pom.xml
index c2b7558..747e79a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -155,6 +155,12 @@
             <artifactId>easyexcel</artifactId>
             <version>3.1.1</version>
         </dependency>
+
+        <dependency>
+        <groupId>com.alibaba</groupId>
+        <artifactId>fastjson</artifactId>
+        <version>1.2.73</version>
+    </dependency>
     </dependencies>
 
 </project>
diff --git a/ycl-common/src/main/java/com/ycl/api/BaseEntity.java b/ycl-common/src/main/java/com/ycl/api/BaseEntity.java
index 9a2eff6..1b27653 100644
--- a/ycl-common/src/main/java/com/ycl/api/BaseEntity.java
+++ b/ycl-common/src/main/java/com/ycl/api/BaseEntity.java
@@ -3,6 +3,7 @@
 import com.baomidou.mybatisplus.annotation.FieldFill;
 import com.baomidou.mybatisplus.annotation.TableField;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 
 import java.util.Date;
 
@@ -11,6 +12,7 @@
  * @version 1.0
  * @date 2022/9/7
  */
+@Data
 public class BaseEntity {
     @ApiModelProperty("鍒涘缓鏃堕棿")
     @TableField(fill = FieldFill.INSERT)
diff --git a/ycl-common/src/main/java/com/ycl/api/BasePageDTO.java b/ycl-common/src/main/java/com/ycl/api/BasePageDTO.java
new file mode 100644
index 0000000..0b67830
--- /dev/null
+++ b/ycl-common/src/main/java/com/ycl/api/BasePageDTO.java
@@ -0,0 +1,22 @@
+package com.ycl.api;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author Lyq
+ * @version 1.0
+ * @date 2022/9/9
+ */
+@ApiModel
+@Data
+public  class BasePageDTO<T> {
+    @ApiModelProperty("鎬绘暟")
+    private long total;
+    @ApiModelProperty("鍒楄〃")
+    private List<T> records = new ArrayList<>();
+}
diff --git a/ycl-common/src/main/java/com/ycl/api/BasePageVO.java b/ycl-common/src/main/java/com/ycl/api/BasePageVO.java
index b73b3d8..2a15972 100644
--- a/ycl-common/src/main/java/com/ycl/api/BasePageVO.java
+++ b/ycl-common/src/main/java/com/ycl/api/BasePageVO.java
@@ -20,4 +20,6 @@
     @Min(value = 1, message = "鏈�灏忔潯鏁�1")
     @Max(value = 100, message = "鏈�澶ф潯鏁�100")
     private int pageSize = 20;
+
+
 }
diff --git a/ycl-common/src/main/java/com/ycl/bo/AdminUserDetails.java b/ycl-common/src/main/java/com/ycl/bo/AdminUserDetails.java
index a68c0d2..b1a6671 100644
--- a/ycl-common/src/main/java/com/ycl/bo/AdminUserDetails.java
+++ b/ycl-common/src/main/java/com/ycl/bo/AdminUserDetails.java
@@ -58,4 +58,8 @@
     public boolean isEnabled() {
         return umsAdmin.getStatus().equals(1);
     }
+
+    public Long getUserId(){
+        return umsAdmin.getId();
+    }
 }
diff --git a/ycl-common/src/main/java/com/ycl/config/GlobalCorsConfig.java b/ycl-common/src/main/java/com/ycl/config/GlobalCorsConfig.java
new file mode 100644
index 0000000..5fea058
--- /dev/null
+++ b/ycl-common/src/main/java/com/ycl/config/GlobalCorsConfig.java
@@ -0,0 +1,35 @@
+package com.ycl.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.cors.CorsConfiguration;
+import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
+import org.springframework.web.filter.CorsFilter;
+
+/**
+ * 鍏ㄥ眬璺ㄥ煙閰嶇疆
+ */
+@Configuration
+public class GlobalCorsConfig {
+
+    /**
+     * 鍏佽璺ㄥ煙璋冪敤鐨勮繃婊ゅ櫒
+     */
+    @Bean
+    public CorsFilter corsFilter() {
+        CorsConfiguration config = new CorsConfiguration();
+        //鍏佽鎵�鏈夊煙鍚嶈繘琛岃法鍩熻皟鐢�
+        config.addAllowedOriginPattern("*");
+        //璇ョ敤娉曞湪SpringBoot 2.7.0涓凡涓嶅啀鏀寔
+        //config.addAllowedOrigin("*");
+        //鍏佽璺ㄨ秺鍙戦�乧ookie
+        config.setAllowCredentials(true);
+        //鏀捐鍏ㄩ儴鍘熷澶翠俊鎭�
+        config.addAllowedHeader("*");
+        //鍏佽鎵�鏈夎姹傛柟娉曡法鍩熻皟鐢�
+        config.addAllowedMethod("*");
+        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
+        source.registerCorsConfiguration("/**", config);
+        return new CorsFilter(source);
+    }
+}
diff --git a/ycl-common/src/main/java/com/ycl/config/WebConfiguration.java b/ycl-common/src/main/java/com/ycl/config/WebConfiguration.java
deleted file mode 100644
index bf0b4ed..0000000
--- a/ycl-common/src/main/java/com/ycl/config/WebConfiguration.java
+++ /dev/null
@@ -1,81 +0,0 @@
-package com.ycl.config;
-
-import com.ycl.utils.JwtTokenUtil;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.core.Ordered;
-import org.springframework.core.annotation.Order;
-import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
-import org.springframework.security.crypto.password.PasswordEncoder;
-import org.springframework.web.cors.CorsConfiguration;
-import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
-import org.springframework.web.filter.CorsFilter;
-
-
-@Configuration
-@Order(Ordered.HIGHEST_PRECEDENCE)
-public class WebConfiguration {
-//    @Autowired
-//    private ProxyInterceptor proxyInterceptor;
-
-//    @Bean
-//    public WebMvcConfigurer webMvcConfigurer() {
-//        return new WebMvcConfigurer() {
-//            /**
-//             * 娣诲姞鎷︽埅鍣�
-//             * @param registry
-//             */
-//            @Override
-//            public void addInterceptors(InterceptorRegistry registry) {
-//                registry.addInterceptor(proxyInterceptor)
-//                        .addPathPatterns("/**");
-//            }
-//            @Override
-//            public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
-//                configurer.favorPathExtension(false);
-//            }
-//        };
-
-//    }
-
-    @Bean
-    public PasswordEncoder passwordEncoder() {
-        return new BCryptPasswordEncoder();
-    }
-
-    @Bean
-    public IgnoreUrlsConfig ignoreUrlsConfig() {
-        return new IgnoreUrlsConfig();
-    }
-
-    @Bean
-    public JwtTokenUtil jwtTokenUtil() {
-        return new JwtTokenUtil();
-    }
-
-    @Bean
-    public CorsFilter corsFilter() {
-        final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
-        final CorsConfiguration config = new CorsConfiguration();
-        // 鍏佽cookies璺ㄥ煙
-        config.setAllowCredentials(true);
-        // #鍏佽鍚戣鏈嶅姟鍣ㄦ彁浜よ姹傜殑URI锛�*琛ㄧず鍏ㄩ儴鍏佽锛屽湪SpringMVC涓紝濡傛灉璁炬垚*锛屼細鑷姩杞垚褰撳墠璇锋眰澶翠腑鐨凮rigin,璇ョ敤娉曞湪SpringBoot 2.7.0涓凡涓嶅啀鏀寔
-        //config.addAllowedOrigin("*");
-        // #鍏佽璁块棶鐨勫ご淇℃伅,*琛ㄧず鍏ㄩ儴
-        config.addAllowedHeader("*");
-        // 棰勬璇锋眰鐨勭紦瀛樻椂闂达紙绉掞級锛屽嵆鍦ㄨ繖涓椂闂存閲岋紝瀵逛簬鐩稿悓鐨勮法鍩熻姹備笉浼氬啀棰勬浜�
-        config.setMaxAge(18000L);
-        // 鍏佽鎻愪氦璇锋眰鐨勬柟娉曪紝*琛ㄧず鍏ㄩ儴鍏佽
-        config.addAllowedMethod("OPTIONS");
-        config.addAllowedMethod("HEAD");
-        // 鍏佽Get鐨勮姹傛柟娉�
-        config.addAllowedMethod("GET");
-        config.addAllowedMethod("PUT");
-        config.addAllowedMethod("POST");
-        config.addAllowedMethod("DELETE");
-        config.addAllowedMethod("PATCH");
-        source.registerCorsConfiguration("/**", config);
-        return new CorsFilter(source);
-    }
-
-}
diff --git a/ycl-common/src/main/java/com/ycl/config/WebSecurityCorsFilter.java b/ycl-common/src/main/java/com/ycl/config/WebSecurityCorsFilter.java
deleted file mode 100644
index e80a860..0000000
--- a/ycl-common/src/main/java/com/ycl/config/WebSecurityCorsFilter.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package com.ycl.config;
-
-import javax.servlet.*;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-
-/**
- * @author lyq
- * @version 1.0
- * @date 2022/09/06 16:52
- */
-public class WebSecurityCorsFilter implements Filter {
-    @Override
-    public void init(FilterConfig filterConfig) throws ServletException {
-
-    }
-
-    @Override
-    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
-        HttpServletResponse res = (HttpServletResponse) response;
-        res.setHeader("Access-Control-Allow-Origin", "*");
-        res.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE, PUT");
-        res.setHeader("Access-Control-Max-Age", "3600");
-        res.setHeader("Access-Control-Allow-Headers", "Authorization, Content-Type, Accept, x-requested-with, Cache-Control, os, version, source");
-        chain.doFilter(request, res);
-    }
-
-    @Override
-    public void destroy() {
-
-    }
-}
diff --git a/ycl-common/src/main/java/com/ycl/dto/UmsAdminParam.java b/ycl-common/src/main/java/com/ycl/dto/UmsAdminParam.java
index 718b238..c1931de 100644
--- a/ycl-common/src/main/java/com/ycl/dto/UmsAdminParam.java
+++ b/ycl-common/src/main/java/com/ycl/dto/UmsAdminParam.java
@@ -4,10 +4,7 @@
 import lombok.Getter;
 import lombok.Setter;
 
-import javax.validation.constraints.Email;
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotEmpty;
-import javax.validation.constraints.NotNull;
+import javax.validation.constraints.*;
 
 /**
  * 鐢ㄦ埛鐧诲綍鍙傛暟
@@ -20,6 +17,7 @@
     private String username;
 
     @ApiModelProperty(value = "鎵嬫満鍙风爜")
+    @Pattern(regexp = "^[1][3,4,5,6,7,8,9][0-9]{9}$", message = "鎵嬫満鍙锋牸寮忔湁璇�")
     private String mobile;
 
     @NotEmpty
@@ -38,13 +36,13 @@
     private String note;
 
     @ApiModelProperty(value = "鏄惁鍏氬憳,0:鍚︼紝1锛氭槸",example = "0")
+    @NotNull(message = "鍏氬憳鏈�夋嫨")
     private byte isDy;
 
     @ApiModelProperty(value = "鑱屽姟")
     private String jobTitle;
 
     @ApiModelProperty(value = "閮ㄩ棬id")
-    @NotNull(message = "閮ㄩ棬涓嶈兘涓虹┖")
     private Long departmentId;
 
     @ApiModelProperty(value = "鐢ㄦ埛绫诲瀷")
@@ -52,4 +50,8 @@
 
     @ApiModelProperty(value = "搴ф満/鍒嗘満")
     private String zj;
+
+//    @ApiModelProperty(value = "鏄惁鏄礋璐d汉锛�0->false,1->true锛岄粯璁�0",example = "0")
+//    @NotNull(message = "璐熻矗浜烘湭閫夋嫨")
+//    private byte isManager;
 }
diff --git a/ycl-common/src/main/java/com/ycl/dto/user/AdminDepartDTO.java b/ycl-common/src/main/java/com/ycl/dto/user/AdminDepartDTO.java
new file mode 100644
index 0000000..5a89ec6
--- /dev/null
+++ b/ycl-common/src/main/java/com/ycl/dto/user/AdminDepartDTO.java
@@ -0,0 +1,23 @@
+package com.ycl.dto.user;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author Lyq
+ * @version 1.0
+ * @date 2022/9/9
+ */
+public class AdminDepartDTO {
+    @Data
+    @ApiModel
+    public static class UserInfoDTO {
+        @ApiModelProperty(value = "鐢ㄦ埛Id")
+        private Long userId;
+        @ApiModelProperty(value = "鐢ㄦ埛鍚�")
+        private String username;
+    }
+
+
+}
diff --git a/ycl-common/src/main/java/com/ycl/dto/user/AdminDepartInfoDTO.java b/ycl-common/src/main/java/com/ycl/dto/user/AdminDepartInfoDTO.java
new file mode 100644
index 0000000..65b99b7
--- /dev/null
+++ b/ycl-common/src/main/java/com/ycl/dto/user/AdminDepartInfoDTO.java
@@ -0,0 +1,30 @@
+package com.ycl.dto.user;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author Lyq
+ * @version 1.0
+ * @date 2022/9/9
+ */
+@Data
+public class AdminDepartInfoDTO {
+    @ApiModelProperty("閮ㄩ棬Id")
+    private Long departId;
+
+    @ApiModelProperty("閮ㄩ棬鍚嶇О")
+    private String departName;
+
+    @ApiModelProperty("閮ㄩ棬鎻忚堪")
+    private String departDes;
+
+    @ApiModelProperty("閮ㄩ棬绫诲瀷")
+    private byte departType;
+
+    @ApiModelProperty("鐢ㄦ埛Id")
+    private Long userId;
+
+    @ApiModelProperty("鐢ㄦ埛鍚�")
+    private String userName;
+}
diff --git a/ycl-common/src/main/java/com/ycl/entity/auth/AuthInfo.java b/ycl-common/src/main/java/com/ycl/entity/auth/AuthInfo.java
new file mode 100644
index 0000000..882e388
--- /dev/null
+++ b/ycl-common/src/main/java/com/ycl/entity/auth/AuthInfo.java
@@ -0,0 +1,14 @@
+package com.ycl.entity.auth;
+
+import lombok.Data;
+
+/**
+ * @author Lyq
+ * @version 1.0
+ * @date 2022/9/9
+ */
+@Data
+public class AuthInfo {
+    private Long userId;
+    private String username;
+}
diff --git a/ycl-common/src/main/java/com/ycl/entity/auth/Operator.java b/ycl-common/src/main/java/com/ycl/entity/auth/Operator.java
new file mode 100644
index 0000000..e843788
--- /dev/null
+++ b/ycl-common/src/main/java/com/ycl/entity/auth/Operator.java
@@ -0,0 +1,36 @@
+package com.ycl.entity.auth;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * @author Lyq
+ * @version 1.0
+ * @date 2022/9/9
+ * 鎿嶄綔鑰�
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class Operator implements Serializable {
+    private static final long serialVersionUID = -6412584952129785095L;
+
+
+    /**
+     * 鎿嶄綔鑰匢d
+     */
+    @JSONField(serialize = false)
+    private long operatorId;
+
+    /**
+     * 鎿嶄綔鑰匩ame
+     */
+    @JSONField(serialize = false)
+    private String operatorName;
+
+
+}
diff --git a/ycl-common/src/main/java/com/ycl/entity/depart/SccgDepart.java b/ycl-common/src/main/java/com/ycl/entity/depart/SccgDepart.java
index 635d4ac..2a850a2 100644
--- a/ycl-common/src/main/java/com/ycl/entity/depart/SccgDepart.java
+++ b/ycl-common/src/main/java/com/ycl/entity/depart/SccgDepart.java
@@ -2,6 +2,8 @@
 
 import com.baomidou.mybatisplus.annotation.*;
 import com.ycl.api.BaseEntity;
+import com.ycl.dto.user.AdminDepartDTO;
+import com.ycl.entity.user.UmsAdminDepart;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Getter;
@@ -57,5 +59,7 @@
     @TableField(exist = false)
     private List<SccgDepart> children;
 
+    @TableField(exist = false)
+    private List<AdminDepartDTO.UserInfoDTO> userInfoDTOS;
 
 }
diff --git a/ycl-common/src/main/java/com/ycl/entity/user/UmsAdminDepart.java b/ycl-common/src/main/java/com/ycl/entity/user/UmsAdminDepart.java
new file mode 100644
index 0000000..77b8b22
--- /dev/null
+++ b/ycl-common/src/main/java/com/ycl/entity/user/UmsAdminDepart.java
@@ -0,0 +1,41 @@
+package com.ycl.entity.user;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ycl.api.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import org.apache.catalina.LifecycleState;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author lyq
+ * @since 2022-09-09
+ */
+@Getter
+@Setter
+@TableName("ums_admin_depart")
+@ApiModel(value = "UmsAdminDepart瀵硅薄", description = "")
+public class UmsAdminDepart extends BaseEntity implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("涓婚敭")
+    private Long id;
+
+    @ApiModelProperty("鐢ㄦ埛id")
+    private Long userId;
+
+    @ApiModelProperty("閮ㄩ棬id")
+    private Long departId;
+
+    @ApiModelProperty("鏄惁鏄鐞嗗憳锛�0->false,1->true锛岄粯璁�0")
+    private Boolean isManager;
+}
diff --git a/ycl-common/src/main/java/com/ycl/enums/common/ResultCode.java b/ycl-common/src/main/java/com/ycl/enums/common/ResultCode.java
index 9ff7bd4..f58d0ed 100644
--- a/ycl-common/src/main/java/com/ycl/enums/common/ResultCode.java
+++ b/ycl-common/src/main/java/com/ycl/enums/common/ResultCode.java
@@ -15,13 +15,22 @@
     UNAUTHORIZED(401, "鏆傛湭鐧诲綍鎴杢oken宸茬粡杩囨湡"),
     FORBIDDEN(403, "娌℃湁鐩稿叧鏉冮檺"),
 
+    NULL_PARAMETER(-3, "绌哄弬"),
+
     RECORD_ALREADY_EXISTS(2001, "璁板綍宸插瓨鍦�"),
     RECORD_SAVE_FAIL(2002, "璁板綍淇濆瓨澶辫触"),
     RECORD_UPDATE_FAIL(2003, "璁板綍鏇存柊澶辫触"),
     RECORD_DELETE_FAIL(2004, "璁板綍鍒犻櫎澶辫触"),
     RECORD_NOT_EXISTS(2005, "璁板綍涓嶅瓨鍦�"),
     FILE_NOT_FOUND(2006, "鏂囦欢涓嶅瓨鍦�"),
-    FILE_TYPE_FAIL(2007, "鏂囦欢鏍煎紡閿欒");
+    FILE_TYPE_FAIL(2007, "鏂囦欢鏍煎紡閿欒"),
+
+    NOT_LOGGED(2015, "鏈櫥褰�,璇风櫥褰曞悗鎿嶄綔"),
+
+    LOGIN_TIMEOUT(2016, "鐧诲綍瓒呮椂,璇烽噸鏂扮櫥褰�"),
+
+    OPERATOR_TYPE_FETCH_FAIL(3001, "鑾峰彇鎿嶄綔鍛樺け璐�");
+
 
     private long code;
     private String message;
diff --git a/ycl-common/src/main/java/com/ycl/mapper/user/UmsAdminDepartMapper.java b/ycl-common/src/main/java/com/ycl/mapper/user/UmsAdminDepartMapper.java
new file mode 100644
index 0000000..cd73ce4
--- /dev/null
+++ b/ycl-common/src/main/java/com/ycl/mapper/user/UmsAdminDepartMapper.java
@@ -0,0 +1,24 @@
+package com.ycl.mapper.user;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ycl.entity.user.UmsAdminDepart;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.security.core.parameters.P;
+
+import java.util.List;
+
+
+/**
+ * <p>
+ * Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author lyq
+ * @since 2022-09-09
+ */
+public interface UmsAdminDepartMapper extends BaseMapper<UmsAdminDepart> {
+
+    void deletedByDepartId(@Param("departId") long departId);
+
+    List<UmsAdminDepart> selectPageByUserId(@Param("userId") long userId, @Param("current") int current, @Param("pageSize") int pageSize);
+}
diff --git a/ycl-common/src/main/java/com/ycl/service/depart/SccgDepartService.java b/ycl-common/src/main/java/com/ycl/service/depart/SccgDepartService.java
index a24b41b..0d2d5df 100644
--- a/ycl-common/src/main/java/com/ycl/service/depart/SccgDepartService.java
+++ b/ycl-common/src/main/java/com/ycl/service/depart/SccgDepartService.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.ycl.api.BasePageDTO;
 import com.ycl.entity.depart.SccgDepart;
 import com.ycl.vo.depart.DepartVO;
 import org.apache.catalina.LifecycleState;
@@ -63,4 +64,5 @@
      * @param params
      */
     void updateStatus(DepartVO.StatusDepartVO params);
+
 }
diff --git a/ycl-common/src/main/java/com/ycl/service/depart/impl/SccgDepartServiceImpl.java b/ycl-common/src/main/java/com/ycl/service/depart/impl/SccgDepartServiceImpl.java
index 7243c24..8b4e019 100644
--- a/ycl-common/src/main/java/com/ycl/service/depart/impl/SccgDepartServiceImpl.java
+++ b/ycl-common/src/main/java/com/ycl/service/depart/impl/SccgDepartServiceImpl.java
@@ -1,15 +1,25 @@
 package com.ycl.service.depart.impl;
 
+import cn.hutool.core.collection.CollUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ycl.api.BasePageDTO;
 import com.ycl.api.CommonResult;
+import com.ycl.dto.user.AdminDepartDTO;
 import com.ycl.entity.depart.SccgDepart;
+import com.ycl.entity.user.UmsAdminDepart;
 import com.ycl.enums.common.ResultCode;
 import com.ycl.exception.ApiException;
 import com.ycl.mapper.depart.SccgDepartMapper;
+import com.ycl.mapper.user.UmsAdminDepartMapper;
 import com.ycl.service.depart.SccgDepartService;
+import com.ycl.service.user.UmsAdminDepartService;
+import com.ycl.service.user.UmsAdminService;
+import com.ycl.utils.common.PojoUtils;
 import com.ycl.vo.depart.DepartVO;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -31,6 +41,10 @@
 public class SccgDepartServiceImpl extends ServiceImpl<SccgDepartMapper, SccgDepart> implements SccgDepartService {
     @Resource
     private SccgDepartMapper sccgDepartMapper;
+    @Resource
+    private UmsAdminDepartService umsAdminDepartService;
+    @Resource
+    private UmsAdminService umsAdminService;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -63,16 +77,28 @@
             throw new ApiException(ResultCode.RECORD_ALREADY_EXISTS);
         }
         BeanUtils.copyProperties(updateDepartVO, sccgDepart);
+        List<Long> userIds = updateDepartVO.getUserIds();
+        if (CollUtil.isNotEmpty(userIds)) {
+            Long departId = updateDepartVO.getId();
+            userIds.forEach(e -> {
+                UmsAdminDepart adminDepart = new UmsAdminDepart();
+                adminDepart.setDepartId(departId);
+                adminDepart.setUserId(e);
+                umsAdminDepartService.save(adminDepart);
+            });
+        }
         if (sccgDepartMapper.updateById(sccgDepart) <= 0) {
             throw new ApiException(ResultCode.RECORD_UPDATE_FAIL);
         }
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public void delete(long id) {
         if (sccgDepartMapper.deleteById(id) <= 0) {
             throw new ApiException(ResultCode.RECORD_DELETE_FAIL);
         }
+        umsAdminDepartService.deletedByDepartId(id);
     }
 
     @Override
@@ -96,7 +122,33 @@
 
     @Override
     public IPage<SccgDepart> pageDepart(DepartVO.PageDepartVO params) {
-        return null;
+        Page<SccgDepart> page = new Page<>(params.getCurrent(), params.getPageSize());
+        LambdaQueryWrapper<SccgDepart> query = new LambdaQueryWrapper<>();
+        if (StringUtils.isNotBlank(params.getDepartName())) {
+            query.like(SccgDepart::getDepartName, params.getDepartName());
+        }
+        if (PojoUtils.Vo.isUsefulSearchParam(params.getDepartType())) {
+            query.like(SccgDepart::getDepartType, params.getDepartType());
+        }
+        query.orderByDesc(SccgDepart::getCreateTime);
+        Page<SccgDepart> departPage = sccgDepartMapper.selectPage(page, query);
+        List<SccgDepart> records = departPage.getRecords();
+        //璐熻矗浜�
+        if (CollUtil.isNotEmpty(records)) {
+            for (SccgDepart record : records) {
+                List<UmsAdminDepart> umsAdminDeparts = umsAdminDepartService.queryByDepartId(record.getId());
+                if (CollUtil.isNotEmpty(umsAdminDeparts)) {
+                    List<AdminDepartDTO.UserInfoDTO> userInfoDTOS = umsAdminDeparts.stream().map(a -> {
+                        AdminDepartDTO.UserInfoDTO userInfoDTO = new AdminDepartDTO.UserInfoDTO();
+                        userInfoDTO.setUserId(a.getUserId());
+                        userInfoDTO.setUsername(umsAdminService.getById(a.getUserId()).getUsername());
+                        return userInfoDTO;
+                    }).collect(Collectors.toList());
+                    record.setUserInfoDTOS(userInfoDTOS);
+                }
+            }
+        }
+        return departPage;
     }
 
     @Override
@@ -107,6 +159,7 @@
             throw new ApiException(ResultCode.RECORD_UPDATE_FAIL);
         }
     }
+
 
     /**
      * 鍒╃敤閫掑綊灏嗘渶鍚庝竴绾х┖闆嗗悎鍙樹负null锛屽墠绔仈绾ч�夋嫨鍣ㄦ渶鍚庢墠涓嶄細鍑虹幇 鏆傛棤鏁版嵁鐨刡ug
@@ -156,4 +209,5 @@
         SccgDepart sccgDepart = this.sccgDepartMapper.selectOne(queryWrapper);
         return sccgDepart;
     }
+
 }
diff --git a/ycl-common/src/main/java/com/ycl/service/user/UmsAdminDepartService.java b/ycl-common/src/main/java/com/ycl/service/user/UmsAdminDepartService.java
new file mode 100644
index 0000000..6d5cbd5
--- /dev/null
+++ b/ycl-common/src/main/java/com/ycl/service/user/UmsAdminDepartService.java
@@ -0,0 +1,31 @@
+package com.ycl.service.user;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ycl.api.BasePageDTO;
+import com.ycl.api.CommonPage;
+import com.ycl.dto.user.AdminDepartInfoDTO;
+import com.ycl.entity.user.UmsAdminDepart;
+import com.ycl.vo.depart.DepartVO;
+
+import java.util.List;
+
+/**
+ * <p>
+ *  鏈嶅姟绫�
+ * </p>
+ *
+ * @author lyq
+ * @since 2022-09-09
+ */
+public interface UmsAdminDepartService extends IService<UmsAdminDepart> {
+
+    List<UmsAdminDepart> queryByDepartId(Long departId);
+
+    List<UmsAdminDepart> queryByUserId(long userId);
+
+    void deletedByDepartId(long departId);
+
+    BasePageDTO belongDepart(long userId, int current, int pageSize);
+}
diff --git a/ycl-common/src/main/java/com/ycl/service/user/impl/UmsAdminDepartServiceImpl.java b/ycl-common/src/main/java/com/ycl/service/user/impl/UmsAdminDepartServiceImpl.java
new file mode 100644
index 0000000..73f8092
--- /dev/null
+++ b/ycl-common/src/main/java/com/ycl/service/user/impl/UmsAdminDepartServiceImpl.java
@@ -0,0 +1,95 @@
+package com.ycl.service.user.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ycl.api.BasePageDTO;
+import com.ycl.api.CommonPage;
+import com.ycl.dto.user.AdminDepartInfoDTO;
+import com.ycl.entity.depart.SccgDepart;
+import com.ycl.entity.user.UmsAdmin;
+import com.ycl.entity.user.UmsAdminDepart;
+import com.ycl.mapper.user.UmsAdminDepartMapper;
+import com.ycl.service.depart.SccgDepartService;
+import com.ycl.service.user.UmsAdminDepartService;
+import com.ycl.service.user.UmsAdminService;
+import com.ycl.vo.depart.DepartVO;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * <p>
+ * 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author lyq
+ * @since 2022-09-09
+ */
+@Service
+public class UmsAdminDepartServiceImpl extends ServiceImpl<UmsAdminDepartMapper, UmsAdminDepart> implements UmsAdminDepartService {
+
+    @Resource
+    private UmsAdminDepartMapper umsAdminDepartMapper;
+    @Resource
+    private SccgDepartService sccgDepartService;
+    @Resource
+    private UmsAdminService umsAdminService;
+
+    @Override
+    public List<UmsAdminDepart> queryByDepartId(Long departId) {
+        List<UmsAdminDepart> umsAdminDeparts = umsAdminDepartMapper.selectList(new LambdaQueryWrapper<UmsAdminDepart>()
+                .eq(UmsAdminDepart::getDepartId, departId)
+                .eq(UmsAdminDepart::getIsManager, 1));
+        if (CollUtil.isNotEmpty(umsAdminDeparts)) {
+            return umsAdminDeparts;
+        }
+        return null;
+    }
+
+    @Override
+    public List<UmsAdminDepart> queryByUserId(long userId) {
+        List<UmsAdminDepart> umsAdminDeparts = umsAdminDepartMapper.selectList(new LambdaQueryWrapper<UmsAdminDepart>().eq(UmsAdminDepart::getUserId, userId));
+        if (CollUtil.isNotEmpty(umsAdminDeparts)) {
+            return umsAdminDeparts;
+        }
+        return null;
+    }
+
+    @Override
+    public void deletedByDepartId(long departId) {
+        umsAdminDepartMapper.deletedByDepartId(departId);
+    }
+
+    @Override
+    public BasePageDTO belongDepart(long userId, int current, int pageSize) {
+        BasePageDTO basePageDTO = new BasePageDTO();
+        Long count = umsAdminDepartMapper.selectCount(new LambdaQueryWrapper<UmsAdminDepart>().eq(UmsAdminDepart::getUserId, userId));
+        basePageDTO.setTotal(count);
+        if (count > 0) {
+            current = (current - 1) * pageSize;
+            List<UmsAdminDepart> departList = umsAdminDepartMapper.selectPageByUserId(userId, current, pageSize);
+            List<DepartVO.AdminDepartInfoVO> adminDepartInfoVOS = new ArrayList<>();
+            DepartVO.AdminDepartInfoVO adminDepartInfoVO = null;
+            for (UmsAdminDepart umsAdminDepart : departList) {
+                adminDepartInfoVO = new DepartVO.AdminDepartInfoVO();
+                SccgDepart sccgDepart = sccgDepartService.loadDepartById(umsAdminDepart.getDepartId());
+                UmsAdmin umsAdmin = umsAdminService.getById(userId);
+                adminDepartInfoVO.setDepartId(umsAdminDepart.getDepartId());
+                adminDepartInfoVO.setDepartName(sccgDepart.getDepartName());
+                adminDepartInfoVO.setDepartDes(sccgDepart.getDepartDes());
+                adminDepartInfoVO.setDepartType(sccgDepart.getDepartType());
+                adminDepartInfoVO.setUserId(userId);
+                adminDepartInfoVO.setUserName(umsAdmin.getUsername());
+                adminDepartInfoVOS.add(adminDepartInfoVO);
+            }
+            basePageDTO.setRecords(adminDepartInfoVOS);
+        }
+        return basePageDTO;
+    }
+
+}
diff --git a/ycl-common/src/main/java/com/ycl/service/user/impl/UmsAdminServiceImpl.java b/ycl-common/src/main/java/com/ycl/service/user/impl/UmsAdminServiceImpl.java
index 366c696..880646f 100644
--- a/ycl-common/src/main/java/com/ycl/service/user/impl/UmsAdminServiceImpl.java
+++ b/ycl-common/src/main/java/com/ycl/service/user/impl/UmsAdminServiceImpl.java
@@ -18,14 +18,18 @@
 import com.ycl.mapper.user.UmsResourceMapper;
 import com.ycl.mapper.user.UmsRoleMapper;
 import com.ycl.service.depart.SccgDepartService;
+import com.ycl.service.redis.RedisService;
 import com.ycl.service.user.UmsAdminCacheService;
+import com.ycl.service.user.UmsAdminDepartService;
 import com.ycl.service.user.UmsAdminRoleRelationService;
 import com.ycl.service.user.UmsAdminService;
 import com.ycl.utils.JwtTokenUtil;
 import com.ycl.utils.SpringUtil;
+import com.ycl.utils.common.LiveTimeMillisecond;
 import com.ycl.utils.common.MacUtils;
 import com.ycl.utils.common.PojoUtils;
 import com.ycl.utils.common.RandomUtils;
+import com.ycl.utils.redis.RedisKey;
 import com.ycl.vo.user.UserVO;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
@@ -71,6 +75,10 @@
     private UmsResourceMapper umsResourceMapper;
     @Resource
     private SccgDepartService sccgDepartService;
+    @Resource
+    private UmsAdminDepartService umsAdminDepartService;
+    @Resource
+    private RedisService redisService;
 
     @Override
     public UmsAdmin getAdminByUsername(String username) {
@@ -107,8 +115,10 @@
         String encodePassword = passwordEncoder.encode(umsAdmin.getPassword());
         umsAdmin.setPassword(encodePassword);
         baseMapper.insert(umsAdmin);
+        //瀵圭敤鎴峰悕绯荤粺榛樿娣诲姞
         umsAdmin.setNickName(RandomUtils.getUserId(umsAdmin.getId()));
         baseMapper.updateById(umsAdmin);
+
         return umsAdmin;
     }
 
@@ -117,7 +127,7 @@
         String token = null;
         //瀵嗙爜闇�瑕佸鎴风鍔犲瘑鍚庝紶閫�
         try {
-            UserDetails userDetails = loadUserByUsername(username);
+            AdminUserDetails userDetails = (AdminUserDetails) loadUserByUsername(username);
             if (!passwordEncoder.matches(password, userDetails.getPassword())) {
                 Asserts.fail("瀵嗙爜涓嶆纭�");
             }
@@ -126,7 +136,9 @@
             }
             UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities());
             SecurityContextHolder.getContext().setAuthentication(authentication);
-            token = jwtTokenUtil.generateToken(userDetails);
+            //鏍规嵁鐢ㄦ埛id锛岀敤鎴峰鍚�
+            token = jwtTokenUtil.generateToken(userDetails.getUserId(), userDetails.getUsername());
+            redisService.set(RedisKey.PLATFORM_TOKEN_KEY.concat(username), token, LiveTimeMillisecond.s7200.time);
 //            updateLoginTimeByUsername(username);
             insertLoginLog(username);
         } catch (AuthenticationException e) {
@@ -181,6 +193,7 @@
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public boolean update(Long id, UmsAdmin admin) {
         admin.setId(id);
         UmsAdmin rawAdmin = getById(id);
@@ -299,6 +312,9 @@
         if (PojoUtils.Vo.isUsefulSearchParam(pageUserVO.getUserType())) {
             queryWrapper.eq(UmsAdmin::getUserType, pageUserVO.getUserType());
         }
+        if (StringUtils.isNotBlank(pageUserVO.getMobile())) {
+            queryWrapper.like(UmsAdmin::getMobile, pageUserVO.getMobile());
+        }
         if (PojoUtils.Vo.isUsefulSearchParam(pageUserVO.getDepartmentId())) {
             queryWrapper.eq(UmsAdmin::getDepartmentId, pageUserVO.getDepartmentId());
         }
diff --git a/ycl-common/src/main/java/com/ycl/utils/JwtTokenUtil.java b/ycl-common/src/main/java/com/ycl/utils/JwtTokenUtil.java
index 45f2028..1ebaabf 100644
--- a/ycl-common/src/main/java/com/ycl/utils/JwtTokenUtil.java
+++ b/ycl-common/src/main/java/com/ycl/utils/JwtTokenUtil.java
@@ -2,6 +2,11 @@
 
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.ycl.entity.auth.AuthInfo;
+import com.ycl.enums.common.ResultCode;
+import com.ycl.exception.ApiException;
 import io.jsonwebtoken.Claims;
 import io.jsonwebtoken.Jwts;
 import io.jsonwebtoken.SignatureAlgorithm;
@@ -27,7 +32,7 @@
  */
 public class JwtTokenUtil {
     private static final Logger LOGGER = LoggerFactory.getLogger(JwtTokenUtil.class);
-    private static final String CLAIM_KEY_USERNAME = "sub";
+    private static final String CLAIM_KEY_INFO = "sub";
     private static final String CLAIM_KEY_CREATED = "created";
     @Value("${jwt.secret}")
     private String secret;
@@ -116,7 +121,7 @@
      */
     public String generateToken(UserDetails userDetails) {
         Map<String, Object> claims = new HashMap<>();
-        claims.put(CLAIM_KEY_USERNAME, userDetails.getUsername());
+        claims.put(CLAIM_KEY_INFO, userDetails.getUsername());
         claims.put(CLAIM_KEY_CREATED, new Date());
         return generateToken(claims);
     }
@@ -127,26 +132,26 @@
      * @param oldToken 甯okenHead鐨則oken
      */
     public String refreshHeadToken(String oldToken) {
-        if(StrUtil.isEmpty(oldToken)){
+        if (StrUtil.isEmpty(oldToken)) {
             return null;
         }
         String token = oldToken.substring(tokenHead.length());
-        if(StrUtil.isEmpty(token)){
+        if (StrUtil.isEmpty(token)) {
             return null;
         }
         //token鏍¢獙涓嶉�氳繃
         Claims claims = getClaimsFromToken(token);
-        if(claims==null){
+        if (claims == null) {
             return null;
         }
         //濡傛灉token宸茬粡杩囨湡锛屼笉鏀寔鍒锋柊
-        if(isTokenExpired(token)){
+        if (isTokenExpired(token)) {
             return null;
         }
         //濡傛灉token鍦�30鍒嗛挓涔嬪唴鍒氬埛鏂拌繃锛岃繑鍥炲師token
-        if(tokenRefreshJustBefore(token,30*60)){
+        if (tokenRefreshJustBefore(token, 30 * 60)) {
             return token;
-        }else{
+        } else {
             claims.put(CLAIM_KEY_CREATED, new Date());
             return generateToken(claims);
         }
@@ -154,17 +159,46 @@
 
     /**
      * 鍒ゆ柇token鍦ㄦ寚瀹氭椂闂村唴鏄惁鍒氬垰鍒锋柊杩�
+     *
      * @param token 鍘焧oken
-     * @param time 鎸囧畾鏃堕棿锛堢锛�
+     * @param time  鎸囧畾鏃堕棿锛堢锛�
      */
     private boolean tokenRefreshJustBefore(String token, int time) {
         Claims claims = getClaimsFromToken(token);
         Date created = claims.get(CLAIM_KEY_CREATED, Date.class);
         Date refreshDate = new Date();
         //鍒锋柊鏃堕棿鍦ㄥ垱寤烘椂闂寸殑鎸囧畾鏃堕棿鍐�
-        if(refreshDate.after(created)&&refreshDate.before(DateUtil.offsetSecond(created,time))){
+        if (refreshDate.after(created) && refreshDate.before(DateUtil.offsetSecond(created, time))) {
             return true;
         }
         return false;
     }
+
+    public AuthInfo parseToken(String token) {
+        AuthInfo authInfo = null;
+        try {
+            if (isTokenExpired(token)) {
+                throw new ApiException(ResultCode.NOT_LOGGED);
+            }
+            Claims claims = getClaimsFromToken(token);
+            String subject = claims.getSubject();
+            authInfo = JSON.parseObject(subject, AuthInfo.class);
+        } catch (Exception e) {
+            throw new ApiException(e.getMessage());
+        }
+        return authInfo;
+    }
+
+    /**
+     * 鏍规嵁鐢ㄦ埛id,鐢ㄦ埛鍚嶇敓鎴恡oken
+     */
+    public String generateToken(long userId, String username) {
+        Map<String, Object> claims = new HashMap<>();
+        AuthInfo authInfo = new AuthInfo();
+        authInfo.setUserId(userId);
+        authInfo.setUsername(username);
+        claims.put(CLAIM_KEY_INFO, JSONObject.toJSONString(authInfo));
+        claims.put(CLAIM_KEY_CREATED, new Date());
+        return generateToken(claims);
+    }
 }
diff --git a/ycl-common/src/main/java/com/ycl/utils/auth/OperatorAuthUtil.java b/ycl-common/src/main/java/com/ycl/utils/auth/OperatorAuthUtil.java
new file mode 100644
index 0000000..0cc6c4b
--- /dev/null
+++ b/ycl-common/src/main/java/com/ycl/utils/auth/OperatorAuthUtil.java
@@ -0,0 +1,49 @@
+package com.ycl.utils.auth;
+
+import com.ycl.entity.auth.Operator;
+import com.ycl.enums.common.ResultCode;
+import com.ycl.exception.ApiException;
+import org.springframework.stereotype.Component;
+import org.springframework.stereotype.Controller;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author Lyq
+ * @version 1.0
+ * @date 2022/9/9
+ */
+@Component
+public class OperatorAuthUtil {
+
+    @Resource
+    private UserAuthUtil userAuthUtil;
+
+    private static Map<Long, Operator> platformMap = new HashMap<>();
+
+    /**
+     * 鑾峰彇鎿嶄綔鑰�
+     *
+     * @param request
+     * @return
+     * @throws ApiException
+     */
+    public Operator fetchUser(HttpServletRequest request) throws ApiException {
+        try {
+            long memberId = userAuthUtil.fetchUserId(request);
+            Operator operator = platformMap.get(memberId);
+            if (operator != null) {
+                return operator;
+            }
+            String memberName = userAuthUtil.fetchUserName(request);
+            operator = new Operator(memberId, memberName);
+            platformMap.put(memberId, operator);
+            return operator;
+        } catch (Exception e) {
+            throw new ApiException(e.getMessage());
+        }
+    }
+}
diff --git a/ycl-common/src/main/java/com/ycl/utils/auth/UserAuthUtil.java b/ycl-common/src/main/java/com/ycl/utils/auth/UserAuthUtil.java
new file mode 100644
index 0000000..72c083d
--- /dev/null
+++ b/ycl-common/src/main/java/com/ycl/utils/auth/UserAuthUtil.java
@@ -0,0 +1,62 @@
+package com.ycl.utils.auth;
+
+import cn.hutool.core.util.StrUtil;
+import com.ycl.entity.auth.AuthInfo;
+import com.ycl.enums.common.ResultCode;
+import com.ycl.exception.ApiException;
+import com.ycl.service.redis.RedisService;
+import com.ycl.utils.JwtTokenUtil;
+import com.ycl.utils.common.LiveTimeMillisecond;
+import com.ycl.utils.common.NetworkUtil;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * @author Lyq
+ * @version 1.0
+ * @date 2022/9/9
+ */
+@Component("userAuthUtil")
+public class UserAuthUtil {
+    @Resource
+    private JwtTokenUtil jwtTokenUtil;
+    @Resource
+    private RedisService redisService;
+
+
+    public void saveUser(Long userId, String token, String redisKey) {
+        redisService.set(redisKey.concat(userId.toString()), token, LiveTimeMillisecond.s2592000.time);
+    }
+
+    /**
+     * 鑾峰彇鎿嶄綔鍛榠d
+     *
+     * @param request
+     * @return
+     */
+    public long fetchUserId(HttpServletRequest request) {
+        String accessToken = NetworkUtil.getAccessToken(request);
+        if (StrUtil.isBlank(accessToken)) {
+            throw new ApiException(ResultCode.NOT_LOGGED);
+        }
+        AuthInfo authInfo = jwtTokenUtil.parseToken(accessToken);
+        return authInfo.getUserId();
+    }
+
+    /**
+     * 鑾峰彇鎿嶄綔鍛樺鍚�
+     *
+     * @param request
+     * @return
+     */
+    public String fetchUserName(HttpServletRequest request) {
+        String accessToken = NetworkUtil.getAccessToken(request);
+        if (StrUtil.isBlank(accessToken)) {
+            throw new ApiException(ResultCode.NOT_LOGGED);
+        }
+        AuthInfo authInfo = jwtTokenUtil.parseToken(accessToken);
+        return authInfo.getUsername();
+    }
+}
diff --git a/ycl-common/src/main/java/com/ycl/utils/common/LiveTimeMillisecond.java b/ycl-common/src/main/java/com/ycl/utils/common/LiveTimeMillisecond.java
new file mode 100644
index 0000000..de37e99
--- /dev/null
+++ b/ycl-common/src/main/java/com/ycl/utils/common/LiveTimeMillisecond.java
@@ -0,0 +1,75 @@
+package com.ycl.utils.common;
+
+/**
+ *   redis缂撳瓨鏃堕棿
+ *      鍗曚綅姣
+ * @version 1.0
+ * @date 2022/9/9
+ */
+public enum LiveTimeMillisecond {
+
+                     s1(1000),
+                      /** 5绉� */
+                      s5(5000),
+
+                        /** 10绉� */
+                      s10(10000),
+
+                      /** 1鍒嗛挓 */
+                      s60(60000),
+                        /** 2鍒嗛挓 */
+
+                        s120(120000),
+                      /** 3鍒嗛挓*/
+                      s180(180000),
+
+                      /** 5鍒嗛挓*/
+                      s300(300000),
+
+                     /** 10鍒嗛挓 */
+                      s600(600000),
+
+                     /** 30鍒嗛挓 */
+                      s1800(1800000),
+
+                      /** 1灏忔椂 */
+                      s3600(3600000),
+
+                      /** 2灏忔椂 */
+                      s7200(7200000),
+
+                      /** 3灏忔椂 */
+                      s10800(10800000),
+
+                      /** 4灏忔椂 */
+                      s14400(14400000),
+
+                      /** 12灏忔椂 */
+                      s43200(43200000),
+
+                      /** 涓�澶� */
+                      s86400(86400000),
+                        /** 涓夊ぉ*/
+                      s259200000(259200000),
+
+                      /** 涓冨ぉ */
+                      s604800(604800000),
+
+                      /** 30澶�*/
+                      s2592000(2592000000L),
+
+                     /** 60澶�*/
+                     s5184000(5184000000L),
+                     /**180澶�*/
+                     s15552000(15552000000L);
+
+    /**
+     *  瓒呮椂鏃堕棿  鍗曚綅绉�
+     */
+    public long time;
+
+    private LiveTimeMillisecond(long time) {
+        this.time = time;
+    }
+
+}
diff --git a/ycl-common/src/main/java/com/ycl/utils/redis/RedisKey.java b/ycl-common/src/main/java/com/ycl/utils/redis/RedisKey.java
index 658e6d0..a2665e0 100644
--- a/ycl-common/src/main/java/com/ycl/utils/redis/RedisKey.java
+++ b/ycl-common/src/main/java/com/ycl/utils/redis/RedisKey.java
@@ -7,5 +7,8 @@
  * @since 2022-09-06
  */
 public final class RedisKey {
-
+    /**
+     * 绠$悊鍚庡彴
+     */
+    public static final String PLATFORM_TOKEN_KEY = "platform-token:";
 }
diff --git a/ycl-common/src/main/java/com/ycl/vo/depart/DepartVO.java b/ycl-common/src/main/java/com/ycl/vo/depart/DepartVO.java
index 66489d2..a7d2a9e 100644
--- a/ycl-common/src/main/java/com/ycl/vo/depart/DepartVO.java
+++ b/ycl-common/src/main/java/com/ycl/vo/depart/DepartVO.java
@@ -1,11 +1,14 @@
 package com.ycl.vo.depart;
 
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
 import com.ycl.api.BasePageVO;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import javax.validation.constraints.NotNull;
+import java.util.List;
 
 /**
  * @author Lyq
@@ -23,13 +26,13 @@
         private String departDes;
 
         @ApiModelProperty("閮ㄩ棬绫诲瀷")
-        private Integer departType;
+        private byte departType;
 
         @ApiModelProperty("鐖剁骇id,榛樿0")
         private Long parentId;
 
-        @ApiModelProperty("鍋滅敤鐘舵�侊紝0->false,1->true,榛樿鍋滅敤")
-        private byte status;
+//        @ApiModelProperty("鍋滅敤鐘舵�侊紝0->false,1->true,榛樿鍋滅敤")
+//        private byte status;
     }
 
     @ApiModel
@@ -63,18 +66,47 @@
         private String departDes;
 
         @ApiModelProperty("閮ㄩ棬绫诲瀷")
-        private Integer departType;
+        private byte departType;
 
         @ApiModelProperty("鐖剁骇id,榛樿0")
         private Long parentId;
 
-        @ApiModelProperty("鍋滅敤鐘舵�侊紝0->false,1->true,榛樿鍋滅敤")
-        private byte status;
+        @ApiModelProperty("鐢ㄦ埛Id闆嗗悎")
+        private List<Long> userIds;
+
+//        @ApiModelProperty("鍋滅敤鐘舵�侊紝0->false,1->true,榛樿鍋滅敤")
+//        private byte status;
     }
 
     @ApiModel
     @Data
     public static class PageDepartVO extends BasePageVO {
+        @ApiModelProperty(value = "閮ㄩ棬绫诲瀷,0榛樿鏌ヨ鍏ㄩ儴", example = "0")
+        private Integer departType;
 
+        @ApiModelProperty("閮ㄩ棬鍚嶇О")
+        private String departName;
     }
+
+    @Data
+    public static class AdminDepartInfoVO {
+        @ApiModelProperty("閮ㄩ棬Id")
+        private Long departId;
+
+        @ApiModelProperty("閮ㄩ棬鍚嶇О")
+        private String departName;
+
+        @ApiModelProperty("閮ㄩ棬鎻忚堪")
+        private String departDes;
+
+        @ApiModelProperty("閮ㄩ棬绫诲瀷")
+        private byte departType;
+
+        @ApiModelProperty("鐢ㄦ埛Id")
+        private Long userId;
+
+        @ApiModelProperty("鐢ㄦ埛鍚�")
+        private String userName;
+    }
+
 }
diff --git a/ycl-common/src/main/java/com/ycl/vo/user/UserVO.java b/ycl-common/src/main/java/com/ycl/vo/user/UserVO.java
index fbfce15..47ebda7 100644
--- a/ycl-common/src/main/java/com/ycl/vo/user/UserVO.java
+++ b/ycl-common/src/main/java/com/ycl/vo/user/UserVO.java
@@ -18,11 +18,15 @@
         @ApiModelProperty(value = "閮ㄩ棬id,0鍗充负鏌ヨ鍏ㄩ儴锛岄粯璁�0",example = "0")
         private Long departmentId;
 
+
         @ApiModelProperty(value = "鐢ㄦ埛绫诲瀷,0鍗充负鏌ヨ鍏ㄩ儴锛岄粯璁�0",example = "0")
         private byte userType;
 
         @ApiModelProperty(value = "鑱屽姟")
         private String jobTitle;
+
+        @ApiModelProperty(value = "鐢佃瘽")
+        private String mobile;
     }
 
 }
diff --git a/ycl-common/src/main/resources/mapper/user/UmsAdminDepartMapper.xml b/ycl-common/src/main/resources/mapper/user/UmsAdminDepartMapper.xml
new file mode 100644
index 0000000..cca0e29
--- /dev/null
+++ b/ycl-common/src/main/resources/mapper/user/UmsAdminDepartMapper.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ycl.mapper.user.UmsAdminDepartMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ycl.entity.user.UmsAdminDepart">
+        <id column="id" property="id"/>
+        <result column="user_id" property="userId"/>
+        <result column="depart_id" property="departId"/>
+        <result column="is_manager" property="isManager"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_time" property="updateTime"/>
+    </resultMap>
+    <!-- 閫氱敤鏌ヨ缁撴灉鍒� -->
+    <sql id="Base_Column_List">
+        id
+        , user_id,depart_id,is_manager,create_time,update_time
+    </sql>
+
+    <delete id="deletedByDepartId">
+        delete
+        from ums_admin_depart
+        where depart_id = #{departId}
+    </delete>
+
+    <select id="selectPageByUserId" resultMap="BaseResultMap">
+        select
+        <include refid="Base_Column_List"/>
+        from ums_admin_depart
+        where user_id=#{userId}
+        limit #{current},#{pageSize}
+    </select>
+</mapper>
diff --git a/ycl-platform/src/main/java/com/ycl/controller/BaseController.java b/ycl-platform/src/main/java/com/ycl/controller/BaseController.java
new file mode 100644
index 0000000..13f48a6
--- /dev/null
+++ b/ycl-platform/src/main/java/com/ycl/controller/BaseController.java
@@ -0,0 +1,35 @@
+package com.ycl.controller;
+
+import com.ycl.entity.auth.Operator;
+import com.ycl.enums.common.ResultCode;
+import com.ycl.exception.ApiException;
+import com.ycl.utils.auth.OperatorAuthUtil;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * @author Lyq
+ * @version 1.0
+ * @date 2022/9/9
+ */
+@RestController
+public class BaseController {
+    @Resource
+    private OperatorAuthUtil operatorAuthUtil;
+    @Resource
+    protected HttpServletRequest request;
+
+    protected Operator fetchOperator(HttpServletRequest request) throws ApiException {
+        if (null == request) {
+            throw new ApiException(ResultCode.NULL_PARAMETER);
+        }
+
+        Operator operator = operatorAuthUtil.fetchUser(request);
+        if (null == operator) {
+            throw new ApiException(ResultCode.OPERATOR_TYPE_FETCH_FAIL);
+        }
+        return operator;
+    }
+}
diff --git a/ycl-platform/src/main/java/com/ycl/controller/depart/DepartController.java b/ycl-platform/src/main/java/com/ycl/controller/depart/DepartController.java
index 4c8303e..499e7a8 100644
--- a/ycl-platform/src/main/java/com/ycl/controller/depart/DepartController.java
+++ b/ycl-platform/src/main/java/com/ycl/controller/depart/DepartController.java
@@ -1,10 +1,20 @@
 package com.ycl.controller.depart;
 
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ycl.api.BasePageDTO;
+import com.ycl.api.BasePageVO;
+import com.ycl.api.CommonPage;
 import com.ycl.api.CommonResult;
+import com.ycl.controller.BaseController;
+import com.ycl.dto.user.AdminDepartInfoDTO;
+import com.ycl.entity.auth.Operator;
 import com.ycl.entity.depart.SccgDepart;
+import com.ycl.entity.user.UmsAdminDepart;
 import com.ycl.entity.user.UmsMenu;
 import com.ycl.service.depart.SccgDepartService;
+import com.ycl.service.user.UmsAdminDepartService;
 import com.ycl.service.user.UmsMenuService;
 import com.ycl.vo.depart.DepartVO;
 import io.swagger.annotations.Api;
@@ -27,15 +37,24 @@
 @RestController
 @Api(tags = "閮ㄩ棬绠$悊妯″潡")
 @RequestMapping("/depart")
-public class DepartController {
+public class DepartController extends BaseController {
 
     @Autowired
     private SccgDepartService departService;
+    @Resource
+    private UmsAdminDepartService umsAdminDepartService;
 
     @ApiOperation("娣诲姞閮ㄩ棬")
     @PostMapping(value = "/create")
     public CommonResult<Void> create(@Validated @RequestBody DepartVO.AddDepartVO addDepartVO) {
         departService.create(addDepartVO);
+        return CommonResult.success(null);
+    }
+
+    @ApiOperation("缂栬緫閮ㄩ棬")
+    @PostMapping(value = "/update")
+    public CommonResult<Void> create(@Validated @RequestBody DepartVO.UpdateDepartVO params) {
+        departService.update(params);
         return CommonResult.success(null);
     }
 
@@ -67,5 +86,18 @@
         return CommonResult.success(null);
     }
 
+    @ApiOperation("鏌ヨ鍏ㄩ儴閮ㄩ棬")
+    @GetMapping(value = "/page")
+    public CommonResult<IPage<SccgDepart>> page(DepartVO.PageDepartVO params) {
+        IPage<SccgDepart> page = departService.pageDepart(params);
+        return CommonResult.success(page);
+    }
+
+    @ApiOperation("鏌ヨ鎴戠殑閮ㄩ棬")
+    @GetMapping(value = "/belongDepart")
+    public CommonResult<BasePageDTO> belongDepart(BasePageVO params) {
+        BasePageDTO basePageDTO= umsAdminDepartService.belongDepart(fetchOperator(request).getOperatorId(), params.getCurrent(), params.getPageSize());
+        return CommonResult.success(basePageDTO);
+    }
 }
 
diff --git a/ycl-platform/src/main/java/com/ycl/controller/user/UmsAdminController.java b/ycl-platform/src/main/java/com/ycl/controller/user/UmsAdminController.java
index 277425d..de4e2b0 100644
--- a/ycl-platform/src/main/java/com/ycl/controller/user/UmsAdminController.java
+++ b/ycl-platform/src/main/java/com/ycl/controller/user/UmsAdminController.java
@@ -5,13 +5,16 @@
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ycl.api.CommonPage;
 import com.ycl.api.CommonResult;
+import com.ycl.controller.BaseController;
 import com.ycl.dto.UmsAdminLoginParam;
 import com.ycl.dto.UmsAdminParam;
 import com.ycl.dto.UpdateAdminPasswordParam;
 import com.ycl.entity.user.UmsAdmin;
 import com.ycl.entity.user.UmsRole;
+import com.ycl.service.redis.RedisService;
 import com.ycl.service.user.UmsAdminService;
 import com.ycl.service.user.UmsRoleService;
+import com.ycl.utils.redis.RedisKey;
 import com.ycl.vo.user.UserVO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -22,6 +25,7 @@
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
+import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import java.security.Principal;
 import java.util.HashMap;
@@ -35,7 +39,7 @@
 @Controller
 @Api(tags = "鍚庡彴鐢ㄦ埛绠$悊")
 @RequestMapping("/admin")
-public class UmsAdminController {
+public class UmsAdminController extends BaseController {
     @Value("${jwt.tokenHeader}")
     private String tokenHeader;
     @Value("${jwt.tokenHead}")
@@ -44,6 +48,8 @@
     private UmsAdminService adminService;
     @Autowired
     private UmsRoleService roleService;
+    @Resource
+    private RedisService redisService;
 
     @ApiOperation(value = "鐢ㄦ埛娉ㄥ唽")
     @RequestMapping(value = "/register", method = RequestMethod.POST)
@@ -110,13 +116,15 @@
     @RequestMapping(value = "/logout", method = RequestMethod.POST)
     @ResponseBody
     public CommonResult logout() {
+        String operatorName = fetchOperator(request).getOperatorName();
+        redisService.del(RedisKey.PLATFORM_TOKEN_KEY.concat(operatorName));
         return CommonResult.success(null);
     }
 
     @ApiOperation("鍒嗛〉")
-    @RequestMapping(value = "/page", method = RequestMethod.GET)
+    @RequestMapping(value = "/list", method = RequestMethod.GET)
     @ResponseBody
-    public CommonResult<IPage<UmsAdmin>> list(@Validated  UserVO.PageUserVO pageUserVO) {
+    public CommonResult<IPage<UmsAdmin>> list(@Validated UserVO.PageUserVO pageUserVO) {
         IPage<UmsAdmin> page = adminService.pageUser(pageUserVO);
         return CommonResult.success(page);
     }

--
Gitblit v1.8.0