From 4d5eff3b824dac8e50400b2ec1114cba4ed6a87c Mon Sep 17 00:00:00 2001
From: kaiyu <404897439@qq.com>
Date: Wed, 07 Apr 2021 17:05:43 +0800
Subject: [PATCH] screen-manage     完成sysarea模块查询     拦截器逻辑代码完成     修改organization和accountBug

---
 screen-manage/src/main/java/com/moral/api/mapper/SysAreaMapper.java                          |   25 +
 screen-manage/src/main/java/com/moral/api/pojo/vo/organization/OrganizationQueryVO.java      |    4 
 screen-manage/src/main/java/com/moral/api/service/ManageMenuService.java                     |    3 
 screen-manage/src/main/java/com/moral/api/pojo/form/organization/OrganizationUpdateForm.java |   22 
 screen-common/src/main/java/com/moral/util/TokenUtils.java                                   |   54 ++
 screen-manage/src/main/resources/mapper/ManageLogMapper.xml                                  |    5 
 screen-manage/src/main/java/com/moral/api/service/impl/ManageAccountServiceImpl.java         |    5 
 screen-manage/src/main/java/com/moral/api/mapper/ManageLogMapper.java                        |    2 
 screen-manage/src/main/java/com/moral/api/pojo/vo/organization/OrganizationVO.java           |    4 
 screen-manage/src/main/java/com/moral/api/controller/SystemController.java                   |   38 ++
 screen-common/src/main/java/com/moral/util/AESUtils.java                                     |    2 
 screen-manage/src/main/java/com/moral/api/service/ManageLogService.java                      |    2 
 screen-common/src/main/java/com/moral/util/ConvertUtils.java                                 |    1 
 screen-manage/src/main/java/com/moral/api/entity/SysArea.java                                |   52 ++
 screen-common/src/main/java/com/moral/util/TokenEncryptUtils.java                            |    4 
 screen-manage/src/main/resources/mapper/ManageMenuMapper.xml                                 |   49 --
 screen-manage/src/main/java/com/moral/api/pojo/form/organization/OrganizationInsertForm.java |   26 
 screen-manage/src/main/java/com/moral/api/pojo/form/organization/OrganizationDeleteForm.java |    2 
 screen-manage/src/main/java/com/moral/api/service/impl/ManageMenuServiceImpl.java            |  122 ++++--
 screen-manage/src/main/resources/mapper/OrganizationMapper.xml                               |    8 
 screen-manage/src/main/java/com/moral/api/controller/OrganizationController.java             |   23 
 screen-manage/src/main/java/com/moral/api/pojo/form/organization/OrganizationQueryForm.java  |    4 
 screen-manage/src/main/java/com/moral/api/entity/ManageLog.java                              |   15 
 screen-manage/src/main/java/com/moral/api/pojo/vo/login/AccountInfoVO.java                   |   25 
 screen-manage/src/main/java/com/moral/api/controller/AccountController.java                  |    1 
 screen-manage/src/main/java/com/moral/api/entity/Organization.java                           |   26 
 screen-manage/src/main/java/com/moral/api/pojo/vo/account/AccountQueryVO.java                |    3 
 screen-manage/src/main/java/com/moral/api/service/OrganizationService.java                   |   55 +-
 screen-manage/src/main/resources/mapper/SysAreaMapper.xml                                    |   18 
 screen-manage/src/main/java/com/moral/api/controller/TestController.java                     |   61 +++
 screen-manage/src/main/java/com/moral/api/util/LogUtils.java                                 |   44 ++
 screen-manage/src/main/resources/application-moduleFormColumn.yml                            |   17 
 screen-manage/src/main/resources/application-dev.yml                                         |   19 
 screen-common/src/main/java/com/moral/util/WebUtils.java                                     |    7 
 screen-manage/src/main/java/com/moral/api/service/impl/SysAreaServiceImpl.java               |   80 ++++
 screen-manage/src/main/java/com/moral/api/service/impl/ManageLogServiceImpl.java             |    2 
 screen-manage/src/main/java/com/moral/api/interceptor/ManageInterceptor.java                 |    6 
 screen-manage/src/main/java/com/moral/api/pojo/form/account/AccountInsertForm.java           |    9 
 screen-manage/src/main/java/com/moral/api/service/impl/OrganizationServiceImpl.java          |  123 +++++
 screen-manage/src/main/java/com/moral/api/mapper/ManageMenuMapper.java                       |   19 
 myBatisPlusGenerator/src/main/java/com/moral/CodeGenerator.java                              |    2 
 screen-manage/src/main/java/com/moral/api/aop/log/OperationLogAspect.java                    |  106 +++-
 screen-manage/src/main/java/com/moral/api/mapper/OrganizationMapper.java                     |    2 
 screen-manage/src/main/java/com/moral/api/service/SysAreaService.java                        |   28 +
 44 files changed, 813 insertions(+), 312 deletions(-)

diff --git a/myBatisPlusGenerator/src/main/java/com/moral/CodeGenerator.java b/myBatisPlusGenerator/src/main/java/com/moral/CodeGenerator.java
index a9d82b9..2d25b48 100644
--- a/myBatisPlusGenerator/src/main/java/com/moral/CodeGenerator.java
+++ b/myBatisPlusGenerator/src/main/java/com/moral/CodeGenerator.java
@@ -43,7 +43,7 @@
         // ������������
         GlobalConfig gc = new GlobalConfig();
         //String projectPath = System.getProperty("user.dir");
-        String projectPath="D:\\tools\\moral\\screen-api\\";
+        String projectPath="C:\\Users\\cdl\\Desktop\\comProject\\newProject\\moral\\screen-manage\\";
         gc.setOutputDir(projectPath + "/src/main/java");
         gc.setAuthor("moral");
         gc.setOpen(false);
diff --git a/screen-common/src/main/java/com/moral/util/AESUtils.java b/screen-common/src/main/java/com/moral/util/AESUtils.java
index b58ed46..7f77b15 100644
--- a/screen-common/src/main/java/com/moral/util/AESUtils.java
+++ b/screen-common/src/main/java/com/moral/util/AESUtils.java
@@ -82,8 +82,6 @@
 
     public static void main(String[] args) {
         System.out.println(encrypt("123456","AD42F7787B035B7580000EF93BE20BAD"));
-        System.out.println(encrypt("chenkaiyu111","AD42F7787B035B7580000EF93BE20BAD"));
-        System.out.println(decrypt("KoWjfDMZQhJMLlG1crBPqQ==","AD42F7787B035B7580000EF93BE20BAD"));
     }
 
 }
diff --git a/screen-common/src/main/java/com/moral/util/ConvertUtils.java b/screen-common/src/main/java/com/moral/util/ConvertUtils.java
index 5f60f4f..baf5196 100644
--- a/screen-common/src/main/java/com/moral/util/ConvertUtils.java
+++ b/screen-common/src/main/java/com/moral/util/ConvertUtils.java
@@ -1,6 +1,5 @@
 package com.moral.util;
 
-import org.mockito.internal.util.StringUtil;
 
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
diff --git a/screen-common/src/main/java/com/moral/util/TokenEncryptUtils.java b/screen-common/src/main/java/com/moral/util/TokenEncryptUtils.java
index 33d6d28..3c6484a 100644
--- a/screen-common/src/main/java/com/moral/util/TokenEncryptUtils.java
+++ b/screen-common/src/main/java/com/moral/util/TokenEncryptUtils.java
@@ -1,5 +1,6 @@
 package com.moral.util;
 
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
 
@@ -11,6 +12,7 @@
  * @Version TODO
  **/
 @Component
+@Slf4j
 public class TokenEncryptUtils {
 
     private static  String key;
@@ -42,7 +44,7 @@
         try {
             hexStr = hexStrToStr(str);
         } catch (Exception e) {
-            e.printStackTrace();
+            log.error("token������������"+e.getMessage());
         }
         if (hexStr != null) {
             hexStr = encodedString(hexStr, key);
diff --git a/screen-common/src/main/java/com/moral/util/TokenUtils.java b/screen-common/src/main/java/com/moral/util/TokenUtils.java
index d1aa0aa..9bc1d5e 100644
--- a/screen-common/src/main/java/com/moral/util/TokenUtils.java
+++ b/screen-common/src/main/java/com/moral/util/TokenUtils.java
@@ -9,6 +9,7 @@
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Component;
+import org.springframework.util.ObjectUtils;
 
 
 import java.util.concurrent.TimeUnit;
@@ -32,19 +33,20 @@
     }
 
     //token��������� ������������
-    private static final int validity_time = 60*30;
+    private static final int validity_time = 60 * 30;
 
     //������user_token���������������������token
-    public static boolean hHasKey(String uid){
-        return redisTemplate.opsForHash().hasKey("user_token",uid);
+    public static boolean hHasKey(String uid) {
+        return redisTemplate.opsForHash().hasKey("user_token", uid);
     }
 
     //������������id������token
-    public static Object hget(String uid){
-        return redisTemplate.opsForHash().get("user_token",uid);
+    public static Object hget(String uid) {
+        return redisTemplate.opsForHash().get("user_token", uid);
     }
+
     /**
-     * @Description: ������token,���������������������������������
+     * @Description: ������token, ���������������������������������
      * @Param: [uid] type��� ���������������manage  ���������������api
      * @return: java.lang.String
      * @Author: ���������
@@ -61,12 +63,12 @@
                 redisTemplate.delete(oldToken);
             //���token���������value���
             redisTemplate.opsForValue().set(token, userInfo);
-            redisTemplate.expire(token, validity_time, TimeUnit.SECONDS);
+            //redisTemplate.expire(token, validity_time, TimeUnit.SECONDS);
             //���token���������Hash���
             redisTemplate.opsForHash().put("user_token", uid, token);
             return token;
         } catch (Exception e) {
-            log.error("token���������������"+e.getMessage());
+            log.error("token���������������" + e.getMessage());
             throw new TokenException(ResponseCodeEnum.TOKEN_CREATE_ERROR.getCode(),
                     ResponseCodeEnum.TOKEN_CREATE_ERROR.getMsg());
         }
@@ -76,7 +78,7 @@
     /**
      * @Description: ������token
      * @Param: [type, token] type��� ���������������manage  ���������������api
-     * @return: java.util.Map<java.lang.String   ,   java.lang.Object>
+     * @return: java.util.Map<java.lang.String                               ,                               java.lang.Object>
      * @Author: ���������
      * @Date: 2021/3/10
      */
@@ -94,22 +96,22 @@
                         ResponseCodeEnum.TOKEN_INVALID.getMsg());
             }
         } catch (Exception e) {
-            log.error("token���������������token������" + e.getMessage());
             throw new TokenException(ResponseCodeEnum.TOKEN_INVALID.getCode(),
                     ResponseCodeEnum.TOKEN_INVALID.getMsg());
         }
     }
 
+
     /**
-     * @Description: ������token������������������  ������������
+     * @Description: ������token������������������
      * @Param: [token]
-     * @return: java.util.Map<java.lang.String   ,   java.lang.Object>
+     * @return: java.util.Map<java.lang.String                               ,                               java.lang.Object>
      * @Author: ���������
      * @Date: 2021/3/11
      */
     public static Object getUserInfoByToken(String token) {
         Object userInfo = redisTemplate.opsForValue().get(token);
-        if(userInfo==null)
+        if (userInfo == null)
             throw new TokenException(ResponseCodeEnum.TOKEN_INVALID.getCode(),
                     ResponseCodeEnum.TOKEN_INVALID.getMsg());
         return userInfo;
@@ -128,13 +130,37 @@
     }
 
     /**
+     * @Description: ������token
+     * @Param: [token]
+     * @return: void
+     * @Author: ���������
+     * @Date: 2021/4/1
+     */
+    public static void destoryToken(String token) {
+        destoryToken(getUidByToken(token), token);
+    }
+
+    /**
+     * @Description: ������TOKEN������Id
+     * @Param: [token]
+     * @return: void
+     * @Author: ���������
+     * @Date: 2021/4/1
+     */
+    public static String getUidByToken(String token) {
+        String[] string = TokenEncryptUtils.decoded(token).split("/");
+        return string[0];
+    }
+
+
+    /**
      * @Description: token������
      * @Param: [token]
      * @return: void
      * @Author: ���������
      * @Date: 2021/3/11
      */
-    public static void extendTokenTime(String token)  {
+    public static void extendTokenTime(String token) {
         redisTemplate.expire(token, validity_time, TimeUnit.SECONDS);
     }
 }
diff --git a/screen-common/src/main/java/com/moral/util/WebUtils.java b/screen-common/src/main/java/com/moral/util/WebUtils.java
index 8591126..b2ebcea 100644
--- a/screen-common/src/main/java/com/moral/util/WebUtils.java
+++ b/screen-common/src/main/java/com/moral/util/WebUtils.java
@@ -1,22 +1,15 @@
 package com.moral.util;
 
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.net.InetAddress;
-import java.net.UnknownHostException;
 import java.util.Enumeration;
 import java.util.Map;
 import java.util.TreeMap;
 
 import javax.servlet.ServletRequest;
 import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
 
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.util.Assert;
 import org.springframework.util.ObjectUtils;
-import org.springframework.util.StringUtils;
 
 @Slf4j
 public class WebUtils extends org.springframework.web.util.WebUtils {
diff --git a/screen-manage/src/main/java/com/moral/api/aop/log/OperationLogAspect.java b/screen-manage/src/main/java/com/moral/api/aop/log/OperationLogAspect.java
index f7b53a4..8ac76a1 100644
--- a/screen-manage/src/main/java/com/moral/api/aop/log/OperationLogAspect.java
+++ b/screen-manage/src/main/java/com/moral/api/aop/log/OperationLogAspect.java
@@ -1,18 +1,29 @@
 package com.moral.api.aop.log;
 
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.moral.api.entity.ManageLog;
 import com.moral.api.entity.Organization;
 import com.moral.api.mapper.ManageLogMapper;
+import com.moral.api.mapper.OrganizationMapper;
+import com.moral.api.pojo.dto.login.AccountInfoDTO;
+import com.moral.api.pojo.form.organization.OrganizationDeleteForm;
 import com.moral.api.pojo.form.organization.OrganizationInsertForm;
+import com.moral.api.pojo.form.organization.OrganizationUpdateForm;
 import com.moral.constant.Constants;
+import com.moral.constant.ResponseCodeEnum;
+import com.moral.util.TokenUtils;
 import com.moral.util.WebUtils;
+import lombok.Data;
 import org.aspectj.lang.JoinPoint;
 import org.aspectj.lang.annotation.AfterReturning;
 import org.aspectj.lang.annotation.Aspect;
 import org.aspectj.lang.annotation.Pointcut;
 import org.aspectj.lang.reflect.MethodSignature;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Configuration;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.context.request.RequestAttributes;
@@ -20,6 +31,7 @@
 
 import javax.servlet.http.HttpServletRequest;
 import java.lang.reflect.Method;
+import java.util.Map;
 
 /**
  * @ClassName OperationLogAspect
@@ -30,10 +42,18 @@
  **/
 @Aspect
 @Component
+@ConfigurationProperties(prefix = "log-aspect")
+@Data
 public class OperationLogAspect {
 
     @Autowired
     ManageLogMapper manageLogMapper;
+
+    @Autowired
+    OrganizationMapper organizationMapper;
+
+    Map<String,String> organizationFormMap;
+
 
     /**
      * @Description: ������������������OperationLogAnno���������������������
@@ -55,63 +75,83 @@
      * @Date: 2021/3/31
      */
     @AfterReturning(returning = "result", value = "pointCut()")
+    @Transactional
     public void saveOperLog(JoinPoint joinPoint, Object result) throws Throwable {
+        //������������������������������������������������
+        Map resultMap = JSONObject.parseObject(JSONObject.toJSONString(result), Map.class);
+        if (!ResponseCodeEnum.SUCCESS.getCode().equals(resultMap.get("code")))
+            return;
         //������������������
         RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
         HttpServletRequest request = (HttpServletRequest) requestAttributes.resolveReference(RequestAttributes.REFERENCE_REQUEST);
         Object parameters = request.getAttribute("parameters");
+        String token = request.getHeader("token");
         //������module���type
         MethodSignature signature = (MethodSignature) joinPoint.getSignature();//���������������������������
         Method method = signature.getMethod();//������������������������
         OperationLogAnno anno = method.getAnnotation(OperationLogAnno.class);//���������������������
         String module = anno.module();//���������������������
         String type = anno.type();//���������������������
-        saveLog(request,parameters, module, type);
+        //������������������id ip ������
+        Integer id = Integer.parseInt(TokenUtils.getUidByToken(token));
+        String ip = WebUtils.getIpAddr(request);
+        AccountInfoDTO account = (AccountInfoDTO) TokenUtils.getUserInfoByToken(token);
+        String accountName = account.getAccount().getUserName();
+        //������content
+        String content = getContent(type,module,parameters);
+        content = content+"���������������"+accountName+";";
+        //���������������
+        ManageLog manageLog = new ManageLog();
+        manageLog.setContent(content);
+        manageLog.setIp(ip);
+        manageLog.setAccountId(id);
+        manageLogMapper.insert(manageLog);
+
     }
 
-    /**
-     * @Description: ������������
-     * @Param: [paramters, module, type]
-     * @return: void
-     * @Author: ���������
-     * @Date: 2021/3/31
-     */
-    public void saveLog(HttpServletRequest request,Object paramters, String module, String type) {
+    public String getContent(String type, String module,Object parameters) {
+        String content = "";
         if (module.equals(Constants.ORGANIZATION_MODULE_NAME)) {
-            saveOrganizationLog(request,paramters, module, type);
+            content = getOrganizationContent(type,parameters);
         }
+
+        return content;
     }
 
     /**
-     * @Description: ������������������
-     * @Param: [paramters, module, type]
-     * @return: void
-     * @Author: ���������
-     * @Date: 2021/3/31
-     */
-    @Transactional
-    public void saveOrganizationLog(HttpServletRequest request,Object paramters, String module, String type) {
+    * @Description: ������������������������������
+            * @Param: [type, parameters]
+            * @return: java.lang.String
+            * @Author: ���������
+            * @Date: 2021/4/1
+            */
+    public String getOrganizationContent(String type,Object parameters) {
+        StringBuilder content = new StringBuilder();
         if (type.equals(Constants.INSERT_OPERATE_TYPE)) {//������������������������������
-            OrganizationInsertForm form = JSON.parseObject(JSON.toJSONString(paramters), OrganizationInsertForm.class);
-            Integer accountId = 1;//������ ������������
-            String accountName = "������������";
+            OrganizationInsertForm form = JSON.parseObject(JSON.toJSONString(parameters), OrganizationInsertForm.class);
             String organizationName = form.getName();
-            String ip = WebUtils.getIpAddr(request);
-            String content = accountName+"���������������������"+organizationName;
-
-            ManageLog manageLog = new ManageLog();
-            manageLog.setContent(content);
-            manageLog.setIp(ip);
-            manageLog.setAccountId(accountId);
-            manageLog.setModule(module);
-            manageLog.setType(type);
-            manageLogMapper.insert(manageLog);
+            content.append("������������������").append(organizationName).append(";");
         } else if (type.equals(Constants.DELETE_OPERATE_TYPE)) { //������������������������
-
+            OrganizationDeleteForm form = JSON.parseObject(JSON.toJSONString(parameters), OrganizationDeleteForm.class);
+            Organization organization = organizationMapper.selectById(form.getOrganizationId());
+            String organizationName = organization.getName();
+            content.append("������������������").append(organizationName).append(";");
         } else if (type.equals(Constants.UPDATE_OPERATE_TYPE)) {  //������������������������
-
+            OrganizationUpdateForm form = JSON.parseObject(JSON.toJSONString(parameters), OrganizationUpdateForm.class);
+            Map<String,Object> formMap = JSON.parseObject(JSON.toJSONString(parameters), Map.class);
+            Organization organization = organizationMapper.selectById(form.getOrganizationId());
+            String organizationName = organization.getName();
+            content.append("������������������").append(organizationName).append(";");
+            //���formMap������Key���������������������������������
+            formMap.forEach((k,v)->{
+                String key = organizationFormMap.get(k);
+                if(key!=null)
+                    content.append(key).append("->").append(v).append(";");
+            });
         }
 
+        return content.toString();
     }
 
+
 }
diff --git a/screen-manage/src/main/java/com/moral/api/controller/AccountController.java b/screen-manage/src/main/java/com/moral/api/controller/AccountController.java
index 8307df0..be45676 100644
--- a/screen-manage/src/main/java/com/moral/api/controller/AccountController.java
+++ b/screen-manage/src/main/java/com/moral/api/controller/AccountController.java
@@ -21,6 +21,7 @@
 @Slf4j
 @Api(tags = {"������������������"})
 @RestController
+@CrossOrigin(origins = "*", maxAge = 3600)
 @RequestMapping("/account")
 public class AccountController {
     @Autowired
diff --git a/screen-manage/src/main/java/com/moral/api/controller/OrganizationController.java b/screen-manage/src/main/java/com/moral/api/controller/OrganizationController.java
index 6a0cf90..66cd6bb 100644
--- a/screen-manage/src/main/java/com/moral/api/controller/OrganizationController.java
+++ b/screen-manage/src/main/java/com/moral/api/controller/OrganizationController.java
@@ -12,6 +12,7 @@
 import com.moral.api.pojo.vo.organization.OrganizationQueryVO;
 import com.moral.api.pojo.vo.organization.OrganizationUpdateVO;
 import com.moral.api.service.OrganizationService;
+import com.moral.api.util.LogUtils;
 import com.moral.constant.Constants;
 import com.moral.constant.ResponseCodeEnum;
 import com.moral.constant.ResultMessage;
@@ -31,17 +32,16 @@
  **/
 @Slf4j
 @Api(tags = {"���������������������"})
+@CrossOrigin(origins = "*", maxAge = 3600)
 @RestController
-    @RequestMapping("/organization")
+@RequestMapping("/organization")
 public class OrganizationController {
     @Autowired
     OrganizationService organizationService;
 
     @PostMapping("insert")
-    @OperationLogAnno(module = Constants.ORGANIZATION_MODULE_NAME,type = Constants.INSERT_OPERATE_TYPE)
     public ResultMessage insert(@RequestBody OrganizationInsertForm form, HttpServletRequest request) {
-        //������������������request���
-        request.setAttribute("parameters",form);
+
         //������������������������
         if (!form.valid())
             return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(),
@@ -59,11 +59,12 @@
         //���������������������������
         OrganizationInsertVO vo = OrganizationInsertVO.convert(dto);
 
-        return new ResultMessage(dto.getCode(),dto.getMsg(),vo);
+        return new ResultMessage(dto.getCode(), dto.getMsg(), vo);
     }
 
     @PostMapping("update")
-    public ResultMessage update(@RequestBody OrganizationUpdateForm form){
+    public ResultMessage update(@RequestBody OrganizationUpdateForm form, HttpServletRequest request) {
+
         //������������������������
         if (!form.valid())
             return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(),
@@ -81,11 +82,11 @@
         //���������������������������
         OrganizationUpdateVO vo = OrganizationUpdateVO.convert(dto);
 
-        return new ResultMessage(dto.getCode(),dto.getMsg(),vo);
+        return new ResultMessage(dto.getCode(), dto.getMsg(), vo);
     }
 
     @PostMapping("delete")
-    public ResultMessage delete(@RequestBody OrganizationDeleteForm form){
+    public ResultMessage delete(@RequestBody OrganizationDeleteForm form,HttpServletRequest request) {
         //������������������������
         if (!form.valid())
             return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(),
@@ -97,11 +98,11 @@
         //���������������������������
         OrganizationDeleteVO vo = OrganizationDeleteVO.convert(dto);
 
-        return new ResultMessage(dto.getCode(),dto.getMsg(),vo);
+        return new ResultMessage(dto.getCode(), dto.getMsg(), vo);
     }
 
     @GetMapping("query")
-    public ResultMessage query(OrganizationQueryForm form){
+    public ResultMessage query(OrganizationQueryForm form) {
         //������������������������
         if (!form.valid())
             return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(),
@@ -113,7 +114,7 @@
         //������������������������
         OrganizationQueryVO vo = OrganizationQueryVO.convert(dto);
 
-        return new ResultMessage(dto.getCode(),dto.getMsg(),vo);
+        return new ResultMessage(dto.getCode(), dto.getMsg(), vo);
     }
 
 }
diff --git a/screen-manage/src/main/java/com/moral/api/controller/SystemController.java b/screen-manage/src/main/java/com/moral/api/controller/SystemController.java
new file mode 100644
index 0000000..58acc60
--- /dev/null
+++ b/screen-manage/src/main/java/com/moral/api/controller/SystemController.java
@@ -0,0 +1,38 @@
+package com.moral.api.controller;
+
+import com.moral.api.entity.SysArea;
+import com.moral.api.service.SysAreaService;
+import com.moral.constant.ResultMessage;
+import io.swagger.annotations.Api;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * @ClassName SystemController
+ * @Description TODO
+ * @Author ���������
+ * @Date 2021/4/7 13:17
+ * @Version TODO
+ **/
+@Slf4j
+@Api(tags = {"���������������������"})
+@CrossOrigin(origins = "*", maxAge = 3600)
+@RestController
+@RequestMapping("/system")
+public class SystemController {
+
+    @Autowired
+    SysAreaService sysAreaService;
+
+    @GetMapping("area/query")
+    public ResultMessage query(){
+        List<SysArea> sysAreas = sysAreaService.querySysArea();
+        return ResultMessage.ok(sysAreas);
+    }
+}
diff --git a/screen-manage/src/main/java/com/moral/api/controller/TestController.java b/screen-manage/src/main/java/com/moral/api/controller/TestController.java
index d011719..f15c064 100644
--- a/screen-manage/src/main/java/com/moral/api/controller/TestController.java
+++ b/screen-manage/src/main/java/com/moral/api/controller/TestController.java
@@ -6,6 +6,8 @@
 import com.moral.constant.ResultMessage;
 import com.moral.redis.RedisUtil;
 import com.moral.util.PageResult;
+import com.moral.util.TokenEncryptUtils;
+import com.moral.util.TokenUtils;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
@@ -13,12 +15,10 @@
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.kafka.core.KafkaTemplate;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import java.io.*;
 
 
 @Slf4j
@@ -104,4 +104,57 @@
         kafkaTemplate.send("test_topic","test111111111111111");
     }
 
+    @GetMapping("testToken")
+    public void testToken(){
+        String decoded = TokenEncryptUtils.decoded("5b53480d4e570b54565f555775");
+        String decoded2 = TokenEncryptUtils.decoded("584f560a49510f5453515453");
+        System.out.println(decoded);
+        System.out.println(decoded2);
+    }
+
+    public static void main(String[] args) throws IOException {
+        String path = "C:\\Users\\cdl\\Desktop\\province.txt";
+        BufferedReader fis = new BufferedReader(new FileReader(path));
+        BufferedWriter writer = new BufferedWriter(new FileWriter("C:\\Users\\cdl\\Desktop\\provin1ce.txt"));
+        String line = "";
+        while((line = fis.readLine())!=null){
+            //������code
+            StringBuilder str = new StringBuilder(line);
+            String code = str.substring(31, 37);
+
+            //������������
+            char[] chars = line.toCharArray();
+            int i = 0;
+            StringBuilder buffered = new StringBuilder();
+            for (char aChar : chars) {
+                if(aChar=='\'')
+                    i ++;
+                if(i==1){
+                    buffered.append(aChar);
+                }
+            }
+            buffered.append('\'');
+            String name = buffered.toString();
+
+            //������������code
+            line.trim();
+            char[] chars1 = line.toCharArray();
+            int j = 0;
+            StringBuilder buffered2 = new StringBuilder();
+            for (char c : chars1) {
+                if(j==6){
+                    buffered2.append(c);
+                }
+                if(c==',')
+                    j++;
+            }
+            StringBuilder parentCode = buffered2.deleteCharAt(buffered2.length() - 1);
+            //������
+            writer.write("INSERT INTO `sys_area` VALUES ("+code+","+name+","+parentCode+");");
+            writer.newLine();
+        }
+
+        writer.close();
+        fis.close();
+    }
 }
diff --git a/screen-manage/src/main/java/com/moral/api/entity/ManageLog.java b/screen-manage/src/main/java/com/moral/api/entity/ManageLog.java
index 55ec734..37920ae 100644
--- a/screen-manage/src/main/java/com/moral/api/entity/ManageLog.java
+++ b/screen-manage/src/main/java/com/moral/api/entity/ManageLog.java
@@ -14,7 +14,7 @@
  * </p>
  *
  * @author moral
- * @since 2021-03-31
+ * @since 2021-04-02
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -29,24 +29,19 @@
     private Integer id;
 
     /**
-     * ������������
+     * ������������id
      */
-    private String type;
+    private Integer accountId;
 
     /**
-     * ������������
+     * ������������
      */
-    private String module;
+    private String userName;
 
     /**
      * ������������
      */
     private String content;
-
-    /**
-     * ������������id
-     */
-    private Integer accountId;
 
     /**
      * Ip������
diff --git a/screen-manage/src/main/java/com/moral/api/entity/Organization.java b/screen-manage/src/main/java/com/moral/api/entity/Organization.java
index 3b12b20..a1eb06c 100644
--- a/screen-manage/src/main/java/com/moral/api/entity/Organization.java
+++ b/screen-manage/src/main/java/com/moral/api/entity/Organization.java
@@ -16,7 +16,7 @@
  * </p>
  *
  * @author moral
- * @since 2021-03-09
+ * @since 2021-04-06
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -51,29 +51,39 @@
     private Integer provinceCode;
 
     /**
+     * ������������
+     */
+    private String provinceName;
+
+    /**
      * ������������
      */
     private Integer cityCode;
 
     /**
-     * ���������
+     * ������������
+     */
+    private String cityName;
+
+    /**
+     * ���������
      */
     private Integer areaCode;
 
     /**
-     * ���������
+     * ���������
      */
-    private Long townCode;
+    private String areaName;
 
     /**
-     * ������������
+     * ���������������������
      */
-    private Long villageCode;
+    private Integer locationLevelCode;
 
     /**
-     * ������������������ provincd_code city_code ......
+     * ������������������������
      */
-    private String locationLevel;
+    private String locationLevelName;
 
     /**
      * ������
diff --git a/screen-manage/src/main/java/com/moral/api/entity/SysArea.java b/screen-manage/src/main/java/com/moral/api/entity/SysArea.java
new file mode 100644
index 0000000..392aa29
--- /dev/null
+++ b/screen-manage/src/main/java/com/moral/api/entity/SysArea.java
@@ -0,0 +1,52 @@
+package com.moral.api.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import java.io.Serializable;
+import java.util.List;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * ���������������
+ * </p>
+ *
+ * @author moral
+ * @since 2021-04-07
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class SysArea extends Model<SysArea> {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * ������������
+     */
+    private Integer areaCode;
+
+    /**
+     * ������������
+     */
+    private String areaName;
+
+    /**
+     * ������������
+     */
+    private Integer parentCode;
+
+    /*
+    * ������������
+    * */
+    @TableField(exist = false)
+    private List<SysArea> children;
+
+
+    @Override
+    protected Serializable pkVal() {
+        return this.areaCode;
+    }
+
+}
diff --git a/screen-manage/src/main/java/com/moral/api/interceptor/ManageInterceptor.java b/screen-manage/src/main/java/com/moral/api/interceptor/ManageInterceptor.java
index 80e4cb6..b3d4382 100644
--- a/screen-manage/src/main/java/com/moral/api/interceptor/ManageInterceptor.java
+++ b/screen-manage/src/main/java/com/moral/api/interceptor/ManageInterceptor.java
@@ -1,5 +1,6 @@
 package com.moral.api.interceptor;
 
+import com.moral.util.TokenUtils;
 import org.springframework.web.servlet.HandlerInterceptor;
 import org.springframework.web.servlet.ModelAndView;
 
@@ -9,7 +10,10 @@
 public class ManageInterceptor implements HandlerInterceptor {
     @Override
     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
-        return false;
+        String token = request.getHeader("token");
+        TokenUtils.checkToken(token);
+        //TokenUtils.extendTokenTime(token);
+        return true;
     }
 
     @Override
diff --git a/screen-manage/src/main/java/com/moral/api/mapper/ManageLogMapper.java b/screen-manage/src/main/java/com/moral/api/mapper/ManageLogMapper.java
index 125964f..f84f78c 100644
--- a/screen-manage/src/main/java/com/moral/api/mapper/ManageLogMapper.java
+++ b/screen-manage/src/main/java/com/moral/api/mapper/ManageLogMapper.java
@@ -9,7 +9,7 @@
  * </p>
  *
  * @author moral
- * @since 2021-03-31
+ * @since 2021-04-02
  */
 public interface ManageLogMapper extends BaseMapper<ManageLog> {
 
diff --git a/screen-manage/src/main/java/com/moral/api/mapper/ManageMenuMapper.java b/screen-manage/src/main/java/com/moral/api/mapper/ManageMenuMapper.java
index 7be6fae..69decf7 100644
--- a/screen-manage/src/main/java/com/moral/api/mapper/ManageMenuMapper.java
+++ b/screen-manage/src/main/java/com/moral/api/mapper/ManageMenuMapper.java
@@ -17,25 +17,8 @@
  * @since 2021-03-09
  */
 public interface ManageMenuMapper extends BaseMapper<ManageMenu> {
-    /**
-    * @Description: ������������������������������������
-            * @Param: [roles]
-            * @return: java.util.List<com.moral.api.entity.ManageMenu>
-            * @Author: ���������
-            * @Date: 2021/3/10
-            */
-    List<ManageMenu> getParentMenuByRoles(List<ManageRole> roles);
 
-    /**
-    * @Description: ���������������������������������������
-            * @Param:
-            * @return:
-            * @Author: ���������
-            * @Date: 2021/3/10
-            */
-    List<ManageMenu> getChildrenByParentId(Integer parentId);
-
-    List<ManageMenu> getParentChildrenMenusByRoles(List<ManageRole> roles);
+    List<ManageMenu> getAllMenusByRoles(List<ManageRole> roles);
 
     ManageMenu getManageMenuByName(String name);
 
diff --git a/screen-manage/src/main/java/com/moral/api/mapper/OrganizationMapper.java b/screen-manage/src/main/java/com/moral/api/mapper/OrganizationMapper.java
index 673d26f..96f6f50 100644
--- a/screen-manage/src/main/java/com/moral/api/mapper/OrganizationMapper.java
+++ b/screen-manage/src/main/java/com/moral/api/mapper/OrganizationMapper.java
@@ -9,7 +9,7 @@
  * </p>
  *
  * @author moral
- * @since 2021-03-09
+ * @since 2021-04-06
  */
 public interface OrganizationMapper extends BaseMapper<Organization> {
 
diff --git a/screen-manage/src/main/java/com/moral/api/mapper/SysAreaMapper.java b/screen-manage/src/main/java/com/moral/api/mapper/SysAreaMapper.java
new file mode 100644
index 0000000..52487dd
--- /dev/null
+++ b/screen-manage/src/main/java/com/moral/api/mapper/SysAreaMapper.java
@@ -0,0 +1,25 @@
+package com.moral.api.mapper;
+
+import com.moral.api.entity.SysArea;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+import java.util.List;
+
+/**
+ * <p>
+ * ��������������� Mapper ������
+ * </p>
+ *
+ * @author moral
+ * @since 2021-04-07
+ */
+public interface SysAreaMapper extends BaseMapper<SysArea> {
+    /**
+    * @Description: ������������������
+            * @Param: []
+            * @return: com.moral.api.entity.SysArea
+            * @Author: ���������
+            * @Date: 2021/4/7
+            */
+     List<SysArea> querySysArea();
+}
diff --git a/screen-manage/src/main/java/com/moral/api/pojo/form/account/AccountInsertForm.java b/screen-manage/src/main/java/com/moral/api/pojo/form/account/AccountInsertForm.java
index 01b2a95..fdd8925 100644
--- a/screen-manage/src/main/java/com/moral/api/pojo/form/account/AccountInsertForm.java
+++ b/screen-manage/src/main/java/com/moral/api/pojo/form/account/AccountInsertForm.java
@@ -41,21 +41,12 @@
 
     private String wechat;
 
-
-    private String createTime;
-
-
-    private String updateTime;
-
-
     private List<String> roleIds;
 
     public boolean valid() {
         if (
                 ObjectUtils.isEmpty(account)  ||
                 ObjectUtils.isEmpty(password) ||
-                ObjectUtils.isEmpty(email)    ||
-                ObjectUtils.isEmpty(mobile)   ||
                 ObjectUtils.isEmpty(userName)
             )
             return false;
diff --git a/screen-manage/src/main/java/com/moral/api/pojo/form/organization/OrganizationDeleteForm.java b/screen-manage/src/main/java/com/moral/api/pojo/form/organization/OrganizationDeleteForm.java
index 0ee1899..8c0b4fd 100644
--- a/screen-manage/src/main/java/com/moral/api/pojo/form/organization/OrganizationDeleteForm.java
+++ b/screen-manage/src/main/java/com/moral/api/pojo/form/organization/OrganizationDeleteForm.java
@@ -15,7 +15,7 @@
 
     private Integer organizationId;
 
-    private Integer deleteChildren;
+    private Integer deleteChildren;//1������������������������  0���������������������������
 
     public boolean valid() {
         if (organizationId == null || organizationId == 0|| ObjectUtils.isEmpty(deleteChildren)) {
diff --git a/screen-manage/src/main/java/com/moral/api/pojo/form/organization/OrganizationInsertForm.java b/screen-manage/src/main/java/com/moral/api/pojo/form/organization/OrganizationInsertForm.java
index ba7dde7..26824d9 100644
--- a/screen-manage/src/main/java/com/moral/api/pojo/form/organization/OrganizationInsertForm.java
+++ b/screen-manage/src/main/java/com/moral/api/pojo/form/organization/OrganizationInsertForm.java
@@ -20,7 +20,7 @@
  * @Version TODO
  **/
 @Data
-public class OrganizationInsertForm   {
+public class OrganizationInsertForm {
 
     private Integer parentId;
 
@@ -28,15 +28,19 @@
 
     private Integer provinceCode;
 
+    private String provinceName;
+
     private Integer cityCode;
+
+    private String cityName;
 
     private Integer areaCode;
 
-    private Long townCode;
+    private String areaName;
 
-    private Long villageCode;
+    private Integer locationLevelCode;
 
-    private String locationLevel;
+    private String locationLevelName;
 
     private String address;
 
@@ -52,9 +56,9 @@
         if (
                 ObjectUtils.isEmpty(name) ||
                         ObjectUtils.isEmpty(provinceCode) ||
-                        ObjectUtils.isEmpty(cityCode) ||
-                        ObjectUtils.isEmpty(areaCode) ||
-                        ObjectUtils.isEmpty(locationLevel) ||
+                        ObjectUtils.isEmpty(provinceName) ||
+                        ObjectUtils.isEmpty(locationLevelCode) ||
+                        ObjectUtils.isEmpty(locationLevelName)||
                         ObjectUtils.isEmpty(address) ||
                         ObjectUtils.isEmpty(expireTime)
                 )
@@ -67,11 +71,13 @@
         organization.setParentId(parentId);
         organization.setName(name);
         organization.setProvinceCode(provinceCode);
+        organization.setProvinceName(provinceName);
         organization.setCityCode(cityCode);
+        organization.setCityName(cityName);
         organization.setAreaCode(areaCode);
-        organization.setTownCode(townCode);
-        organization.setVillageCode(villageCode);
-        organization.setLocationLevel(locationLevel);
+        organization.setAreaName(areaName);
+        organization.setLocationLevelCode(locationLevelCode);
+        organization.setLocationLevelName(locationLevelName);
         organization.setAddress(address);
         organization.setPhone(phone);
         organization.setEmail(email);
diff --git a/screen-manage/src/main/java/com/moral/api/pojo/form/organization/OrganizationQueryForm.java b/screen-manage/src/main/java/com/moral/api/pojo/form/organization/OrganizationQueryForm.java
index 88bd7a0..242f5be 100644
--- a/screen-manage/src/main/java/com/moral/api/pojo/form/organization/OrganizationQueryForm.java
+++ b/screen-manage/src/main/java/com/moral/api/pojo/form/organization/OrganizationQueryForm.java
@@ -36,10 +36,6 @@
 
     private Integer areaCode;
 
-    private Long townCode;
-
-    private Long villageCode;
-
     private String phone;
 
     private String email;
diff --git a/screen-manage/src/main/java/com/moral/api/pojo/form/organization/OrganizationUpdateForm.java b/screen-manage/src/main/java/com/moral/api/pojo/form/organization/OrganizationUpdateForm.java
index 99385ad..66c5d6e 100644
--- a/screen-manage/src/main/java/com/moral/api/pojo/form/organization/OrganizationUpdateForm.java
+++ b/screen-manage/src/main/java/com/moral/api/pojo/form/organization/OrganizationUpdateForm.java
@@ -28,15 +28,19 @@
 
     private Integer provinceCode;
 
+    private String provinceName;
+
     private Integer cityCode;
+
+    private String cityName;
 
     private Integer areaCode;
 
-    private Long townCode;
+    private String areaName;
 
-    private Long villageCode;
+    private Integer locationLevelCode;
 
-    private String locationLevel;
+    private String locationLevelName;
 
     private String address;
 
@@ -57,9 +61,7 @@
                         ObjectUtils.isEmpty(provinceCode) &&
                         ObjectUtils.isEmpty(cityCode) &&
                         ObjectUtils.isEmpty(areaCode) &&
-                        ObjectUtils.isEmpty(townCode) &&
-                        ObjectUtils.isEmpty(villageCode) &&
-                        ObjectUtils.isEmpty(locationLevel) &&
+                        ObjectUtils.isEmpty(locationLevelCode) &&
                         ObjectUtils.isEmpty(address) &&
                         ObjectUtils.isEmpty(phone) &&
                         ObjectUtils.isEmpty(email) &&
@@ -76,11 +78,13 @@
         organization.setParentId(parentId);
         organization.setName(name);
         organization.setProvinceCode(provinceCode);
+        organization.setProvinceName(provinceName);
         organization.setCityCode(cityCode);
+        organization.setCityName(cityName);
         organization.setAreaCode(areaCode);
-        organization.setTownCode(townCode);
-        organization.setVillageCode(villageCode);
-        organization.setLocationLevel(locationLevel);
+        organization.setAreaName(areaName);
+        organization.setLocationLevelCode(locationLevelCode);
+        organization.setLocationLevelName(locationLevelName);
         organization.setAddress(address);
         organization.setPhone(phone);
         organization.setEmail(email);
diff --git a/screen-manage/src/main/java/com/moral/api/pojo/vo/account/AccountQueryVO.java b/screen-manage/src/main/java/com/moral/api/pojo/vo/account/AccountQueryVO.java
index 70c68b4..7df374e 100644
--- a/screen-manage/src/main/java/com/moral/api/pojo/vo/account/AccountQueryVO.java
+++ b/screen-manage/src/main/java/com/moral/api/pojo/vo/account/AccountQueryVO.java
@@ -78,12 +78,9 @@
         vo.setRoleNames(roleNames);
         //Date������String
         Date createTime = account.getCreateTime();
-        Date updateTime = account.getUpdateTime();
         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         String createTimeStr = sdf.format(createTime);
-        String updateTimeStr = sdf.format(updateTime);
         vo.setCreateTime(createTimeStr);
-        vo.setUpdateTime(updateTimeStr);
         return vo;
     }
 }
diff --git a/screen-manage/src/main/java/com/moral/api/pojo/vo/login/AccountInfoVO.java b/screen-manage/src/main/java/com/moral/api/pojo/vo/login/AccountInfoVO.java
index dbd42ca..5267d67 100644
--- a/screen-manage/src/main/java/com/moral/api/pojo/vo/login/AccountInfoVO.java
+++ b/screen-manage/src/main/java/com/moral/api/pojo/vo/login/AccountInfoVO.java
@@ -62,17 +62,7 @@
         /*������menu������������*/
         if (!ObjectUtils.isEmpty(menus)) {
             for (ManageMenu menu : menus) {
-                menu.setCreateTime(null);
-                menu.setIsDelete(null);
-                menu.setUpdateTime(null);
-                menu.setParentId(null);
-                List<ManageMenu> children = menu.getChildren();
-                for (ManageMenu child : children) {
-                    child.setCreateTime(null);
-                    child.setIsDelete(null);
-                    child.setUpdateTime(null);
-                    child.setParentId(null);
-                }
+                removeAttribute(menu);
             }
         }
         vo.setAccountId(account.getId());
@@ -82,4 +72,17 @@
         return vo;
     }
 
+    public static void removeAttribute(ManageMenu menu) {
+        menu.setCreateTime(null);
+        menu.setIsDelete(null);
+        menu.setUpdateTime(null);
+        menu.setParentId(null);
+        if (ObjectUtils.isEmpty(menu.getChildren()))
+            return;
+        List<ManageMenu> children = menu.getChildren();
+        for (ManageMenu child : children) {
+            removeAttribute(child);
+        }
+    }
+
 }
diff --git a/screen-manage/src/main/java/com/moral/api/pojo/vo/organization/OrganizationQueryVO.java b/screen-manage/src/main/java/com/moral/api/pojo/vo/organization/OrganizationQueryVO.java
index 8682ea0..6da3625 100644
--- a/screen-manage/src/main/java/com/moral/api/pojo/vo/organization/OrganizationQueryVO.java
+++ b/screen-manage/src/main/java/com/moral/api/pojo/vo/organization/OrganizationQueryVO.java
@@ -73,6 +73,8 @@
         String createTimeStr = DateUtils.dateToDateString(createTime, "yyyy-MM-dd");
         String exipreTimeStr = DateUtils.dateToDateString(expireTime, "yyyy-MM-dd");
 
+
+        vo.setId(organization.getId());
         vo.setName(organization.getName());
         if (!ObjectUtils.isEmpty(parentOrganization))
             vo.setParentName(parentOrganization.getName());
@@ -82,6 +84,8 @@
         vo.setAddress(organization.getAddress());
         vo.setCreateTime(createTimeStr);
         vo.setExpireTime(exipreTimeStr);
+        vo.setLocationLevelCode(organization.getLocationLevelCode());
+        vo.setLocationLevelName(organization.getLocationLevelName());
         return vo;
     }
 }
diff --git a/screen-manage/src/main/java/com/moral/api/pojo/vo/organization/OrganizationVO.java b/screen-manage/src/main/java/com/moral/api/pojo/vo/organization/OrganizationVO.java
index 5d8af57..354c8de 100644
--- a/screen-manage/src/main/java/com/moral/api/pojo/vo/organization/OrganizationVO.java
+++ b/screen-manage/src/main/java/com/moral/api/pojo/vo/organization/OrganizationVO.java
@@ -36,7 +36,9 @@
 
     private Long villageCode;
 
-    private String locationLevel;
+    private Integer locationLevelCode;
+
+    private String locationLevelName;
 
     private String address;
 
diff --git a/screen-manage/src/main/java/com/moral/api/service/ManageLogService.java b/screen-manage/src/main/java/com/moral/api/service/ManageLogService.java
index 0383b65..7eefb9b 100644
--- a/screen-manage/src/main/java/com/moral/api/service/ManageLogService.java
+++ b/screen-manage/src/main/java/com/moral/api/service/ManageLogService.java
@@ -9,7 +9,7 @@
  * </p>
  *
  * @author moral
- * @since 2021-03-31
+ * @since 2021-04-02
  */
 public interface ManageLogService extends IService<ManageLog> {
 
diff --git a/screen-manage/src/main/java/com/moral/api/service/ManageMenuService.java b/screen-manage/src/main/java/com/moral/api/service/ManageMenuService.java
index bbbbea4..c0f5cb5 100644
--- a/screen-manage/src/main/java/com/moral/api/service/ManageMenuService.java
+++ b/screen-manage/src/main/java/com/moral/api/service/ManageMenuService.java
@@ -2,6 +2,7 @@
 
 import com.moral.api.entity.ManageMenu;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.moral.api.entity.ManageRole;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
@@ -32,4 +33,6 @@
 
     @Transactional
     List<ManageMenu> getManageMenuByNameFuzzy(Map map);
+
+    List<ManageMenu> getParentChildrenMenusByRoles(List<ManageRole> roles);
 }
diff --git a/screen-manage/src/main/java/com/moral/api/service/OrganizationService.java b/screen-manage/src/main/java/com/moral/api/service/OrganizationService.java
index a5d89ee..be86943 100644
--- a/screen-manage/src/main/java/com/moral/api/service/OrganizationService.java
+++ b/screen-manage/src/main/java/com/moral/api/service/OrganizationService.java
@@ -15,46 +15,43 @@
  * </p>
  *
  * @author moral
- * @since 2021-03-09
+ * @since 2021-04-06
  */
 public interface OrganizationService extends IService<Organization> {
-
-    /** 
-    * @Description: ������������������
-            * @Param: [organizationInsertForm]
-            * @return: void
-            * @Author: ���������
-            * @Date: 2021/3/22
-            */
+    /**
+     * @Description: ������������������
+     * @Param: [organizationInsertForm]
+     * @return: void
+     * @Author: ���������
+     * @Date: 2021/3/22
+     */
     OrganizationDTO insertOrganization(OrganizationInsertForm organizationInsertForm);
 
     /**
-    * @Description: ������������������
-            * @Param: [organizationUpdateForm]
-            * @return: com.moral.api.pojo.dto.organization.OrganizationDTO
-            * @Author: ���������
-            * @Date: 2021/3/24
-            */
+     * @Description: ������������������
+     * @Param: [organizationUpdateForm]
+     * @return: com.moral.api.pojo.dto.organization.OrganizationDTO
+     * @Author: ���������
+     * @Date: 2021/3/24
+     */
     OrganizationDTO updateOrganization(OrganizationUpdateForm organizationUpdateForm);
 
     /**
-    * @Description: ������������������
-            * @Param: [organizationDeleteForm]
-            * @return: com.moral.api.pojo.dto.organization.OrganizationDTO
-            * @Author: ���������
-            * @Date: 2021/3/25
-            */
+     * @Description: ������������������
+     * @Param: [organizationDeleteForm]
+     * @return: com.moral.api.pojo.dto.organization.OrganizationDTO
+     * @Author: ���������
+     * @Date: 2021/3/25
+     */
     OrganizationDTO deleteOrganization(OrganizationDeleteForm organizationDeleteForm);
 
     /**
-    * @Description: ������������������
-            * @Param: [organizationQueryForm]
-            * @return: com.moral.api.pojo.dto.organization.OrganizationQueryDTO
-            * @Author: ���������
-            * @Date: 2021/3/25
-            */
+     * @Description: ������������������
+     * @Param: [organizationQueryForm]
+     * @return: com.moral.api.pojo.dto.organization.OrganizationQueryDTO
+     * @Author: ���������
+     * @Date: 2021/3/25
+     */
     OrganizationQueryDTO queryOrganization(OrganizationQueryForm organizationQueryForm);
-
-
 
 }
diff --git a/screen-manage/src/main/java/com/moral/api/service/SysAreaService.java b/screen-manage/src/main/java/com/moral/api/service/SysAreaService.java
new file mode 100644
index 0000000..b561acd
--- /dev/null
+++ b/screen-manage/src/main/java/com/moral/api/service/SysAreaService.java
@@ -0,0 +1,28 @@
+package com.moral.api.service;
+
+import com.moral.api.entity.SysArea;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+
+/**
+ * <p>
+ * ��������������� ���������
+ * </p>
+ *
+ * @author moral
+ * @since 2021-04-07
+ */
+public interface SysAreaService extends IService<SysArea> {
+
+    /**
+     * @Description: ���������������������������������
+     * @Param: []
+     * @return: com.moral.api.entity.SysArea
+     * @Author: ���������
+     * @Date: 2021/4/7
+     */
+    List<SysArea> querySysArea();
+
+
+}
diff --git a/screen-manage/src/main/java/com/moral/api/service/impl/ManageAccountServiceImpl.java b/screen-manage/src/main/java/com/moral/api/service/impl/ManageAccountServiceImpl.java
index c2b8aad..9d89da3 100644
--- a/screen-manage/src/main/java/com/moral/api/service/impl/ManageAccountServiceImpl.java
+++ b/screen-manage/src/main/java/com/moral/api/service/impl/ManageAccountServiceImpl.java
@@ -23,6 +23,7 @@
 import com.moral.api.service.ManageAccountService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.moral.api.config.mybatis.wrapper.NullFilterWrapper;
+import com.moral.api.service.ManageMenuService;
 import com.moral.constant.Constants;
 import com.moral.constant.ResponseCodeEnum;
 import com.moral.util.*;
@@ -50,7 +51,7 @@
     @Autowired
     ManageRoleMapper manageRoleMapper;
     @Autowired
-    ManageMenuMapper manageMenuMapper;
+    ManageMenuService manageMenuService;
     @Autowired
     ManageAccountRoleMapper manageAccountRoleMapper;
 
@@ -104,7 +105,7 @@
         //������������
         List<ManageMenu> menus = null;
         if (!ObjectUtils.isEmpty(roles)) {
-            menus = manageMenuMapper.getParentChildrenMenusByRoles(roles);
+            menus = manageMenuService.getParentChildrenMenusByRoles(roles);
         }
 
         //������������������
diff --git a/screen-manage/src/main/java/com/moral/api/service/impl/ManageLogServiceImpl.java b/screen-manage/src/main/java/com/moral/api/service/impl/ManageLogServiceImpl.java
index b6de096..56b13a1 100644
--- a/screen-manage/src/main/java/com/moral/api/service/impl/ManageLogServiceImpl.java
+++ b/screen-manage/src/main/java/com/moral/api/service/impl/ManageLogServiceImpl.java
@@ -12,7 +12,7 @@
  * </p>
  *
  * @author moral
- * @since 2021-03-31
+ * @since 2021-04-02
  */
 @Service
 public class ManageLogServiceImpl extends ServiceImpl<ManageLogMapper, ManageLog> implements ManageLogService {
diff --git a/screen-manage/src/main/java/com/moral/api/service/impl/ManageMenuServiceImpl.java b/screen-manage/src/main/java/com/moral/api/service/impl/ManageMenuServiceImpl.java
index aff0a72..7d18186 100644
--- a/screen-manage/src/main/java/com/moral/api/service/impl/ManageMenuServiceImpl.java
+++ b/screen-manage/src/main/java/com/moral/api/service/impl/ManageMenuServiceImpl.java
@@ -3,6 +3,7 @@
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.moral.api.entity.ManageMenu;
+import com.moral.api.entity.ManageRole;
 import com.moral.api.mapper.ManageMenuMapper;
 import com.moral.api.mapper.ManageRoleMenuMapper;
 import com.moral.api.service.ManageMenuService;
@@ -11,11 +12,14 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.ObjectUtils;
 
 import javax.annotation.Resource;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.function.Predicate;
 
 /**
  * <p>
@@ -36,40 +40,40 @@
 
     @Override
     @Transactional
-    public Map<String,Object> insertManageMenu(ManageMenu manageMenu) {
-        Map<String,Object> resultMap = new HashMap<>();
-        if (manageMenu.getName()==null){
-            resultMap.put("code",ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode());
-            resultMap.put("msg",ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg());
+    public Map<String, Object> insertManageMenu(ManageMenu manageMenu) {
+        Map<String, Object> resultMap = new HashMap<>();
+        if (manageMenu.getName() == null) {
+            resultMap.put("code", ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode());
+            resultMap.put("msg", ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg());
             return resultMap;
         }
-        if (manageMenuMapper.getManageMenuByName(manageMenu.getName()) != null){
-            resultMap.put("code",ResponseCodeEnum.MENU_IS_EXPIRE.getCode());
-            resultMap.put("msg",ResponseCodeEnum.MENU_IS_EXPIRE.getMsg());
-        }else {
+        if (manageMenuMapper.getManageMenuByName(manageMenu.getName()) != null) {
+            resultMap.put("code", ResponseCodeEnum.MENU_IS_EXPIRE.getCode());
+            resultMap.put("msg", ResponseCodeEnum.MENU_IS_EXPIRE.getMsg());
+        } else {
             manageMenuMapper.insertOne(manageMenu);
-            resultMap.put("code",ResponseCodeEnum.SUCCESS.getCode());
-            resultMap.put("msg",ResponseCodeEnum.SUCCESS.getMsg());
+            resultMap.put("code", ResponseCodeEnum.SUCCESS.getCode());
+            resultMap.put("msg", ResponseCodeEnum.SUCCESS.getMsg());
         }
         return resultMap;
     }
 
     @Override
     @Transactional
-    public Map<String,Object> updateManageMenu(Map map) {
-        Map<String,Object> resultMap = new HashMap<>();
-        if (!map.containsKey("id")){
-            resultMap.put("code",ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode());
-            resultMap.put("msg",ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg());
+    public Map<String, Object> updateManageMenu(Map map) {
+        Map<String, Object> resultMap = new HashMap<>();
+        if (!map.containsKey("id")) {
+            resultMap.put("code", ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode());
+            resultMap.put("msg", ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg());
             return resultMap;
         }
-        if (manageMenuMapper.getManageMenuById(Integer.parseInt(map.get("id").toString())) == null){
-            resultMap.put("code",ResponseCodeEnum.MENU_IS_NULL.getCode());
-            resultMap.put("msg",ResponseCodeEnum.MENU_IS_NULL.getMsg());
-        }else {
+        if (manageMenuMapper.getManageMenuById(Integer.parseInt(map.get("id").toString())) == null) {
+            resultMap.put("code", ResponseCodeEnum.MENU_IS_NULL.getCode());
+            resultMap.put("msg", ResponseCodeEnum.MENU_IS_NULL.getMsg());
+        } else {
             manageMenuMapper.updateManageMenuById(map);
-            resultMap.put("code",ResponseCodeEnum.SUCCESS.getCode());
-            resultMap.put("msg",ResponseCodeEnum.SUCCESS.getMsg());
+            resultMap.put("code", ResponseCodeEnum.SUCCESS.getCode());
+            resultMap.put("msg", ResponseCodeEnum.SUCCESS.getMsg());
         }
         return resultMap;
     }
@@ -77,26 +81,26 @@
     @Override
     @Transactional
     public Map<String, Object> deleteManageMenu(Map map) {
-        Map<String,Object> resultMap = new HashMap<>();
-        if (!map.containsKey("id")){
-            resultMap.put("code",ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode());
-            resultMap.put("msg",ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg());
+        Map<String, Object> resultMap = new HashMap<>();
+        if (!map.containsKey("id")) {
+            resultMap.put("code", ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode());
+            resultMap.put("msg", ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg());
             return resultMap;
         }
-        if (manageMenuMapper.getManageMenuById(Integer.parseInt(map.get("id").toString())) == null){
-            resultMap.put("code",ResponseCodeEnum.MENU_IS_NULL.getCode());
-            resultMap.put("msg",ResponseCodeEnum.MENU_IS_NULL.getMsg());
-        }else {
+        if (manageMenuMapper.getManageMenuById(Integer.parseInt(map.get("id").toString())) == null) {
+            resultMap.put("code", ResponseCodeEnum.MENU_IS_NULL.getCode());
+            resultMap.put("msg", ResponseCodeEnum.MENU_IS_NULL.getMsg());
+        } else {
             Map deleteMap = new HashMap();
             int id = Integer.parseInt(map.get("id").toString());
-            deleteMap.put("id",id);
-            deleteMap.put("is_delete",1);
+            deleteMap.put("id", id);
+            deleteMap.put("is_delete", 1);
             manageMenuMapper.updateManageMenuById(deleteMap);
             Map role_menuDeleteMap = new HashMap();
-            role_menuDeleteMap.put("menu_id",id);
+            role_menuDeleteMap.put("menu_id", id);
             manageRoleMenuMapper.updateDeleteStateByMenu_id(role_menuDeleteMap);
-            resultMap.put("code",ResponseCodeEnum.SUCCESS.getCode());
-            resultMap.put("msg",ResponseCodeEnum.SUCCESS.getMsg());
+            resultMap.put("code", ResponseCodeEnum.SUCCESS.getCode());
+            resultMap.put("msg", ResponseCodeEnum.SUCCESS.getMsg());
         }
         return resultMap;
     }
@@ -104,8 +108,8 @@
     @Override
     public List<ManageMenu> getAllWithPagingQuery(Map map) {
         Map limitMap = new HashMap();
-        limitMap.put("start",(Integer.parseInt(map.get("current").toString())-1)*Integer.parseInt(map.get("size").toString()));
-        limitMap.put("number",Integer.parseInt(map.get("size").toString()));
+        limitMap.put("start", (Integer.parseInt(map.get("current").toString()) - 1) * Integer.parseInt(map.get("size").toString()));
+        limitMap.put("number", Integer.parseInt(map.get("size").toString()));
         List<ManageMenu> manageMenus = manageMenuMapper.getDataWithPage(limitMap);
         System.out.println(manageMenus);
         return manageMenus;
@@ -114,10 +118,48 @@
     @Override
     public List<ManageMenu> getManageMenuByNameFuzzy(Map map) {
         Map limitMap = new HashMap();
-        limitMap.put("name",map.get("name"));
-        limitMap.put("start",(Integer.parseInt(map.get("current").toString())-1)*Integer.parseInt(map.get("size").toString()));
-        limitMap.put("number",Integer.parseInt(map.get("size").toString()));
+        limitMap.put("name", map.get("name"));
+        limitMap.put("start", (Integer.parseInt(map.get("current").toString()) - 1) * Integer.parseInt(map.get("size").toString()));
+        limitMap.put("number", Integer.parseInt(map.get("size").toString()));
         List<ManageMenu> manageMenus = manageMenuMapper.getManageRoleByNameFuzzy(limitMap);
         return manageMenus;
     }
+
+    @Override
+    public List<ManageMenu> getParentChildrenMenusByRoles(List<ManageRole> roles) {
+        List<ManageMenu> allMenus = manageMenuMapper.getAllMenusByRoles(roles);
+        Map<Integer, ManageMenu> menusMap = new HashMap<>();
+        for (ManageMenu menu : allMenus) {
+            menu.setChildren(new ArrayList<>());//���������
+            menusMap.put(menu.getId(), menu);
+        }
+        for (ManageMenu menu : allMenus) {
+            combinationParentChildrenMenus(menusMap, menu);
+        }
+        //������������������������������������parentId������0������������������������
+        allMenus.removeIf(new Predicate<ManageMenu>() {
+            @Override
+            public boolean test(ManageMenu manageMenu) {
+                if(manageMenu.getParentId().equals(0))
+                    return false;
+                return true;
+            }
+        });
+         return allMenus;
+    }
+
+    /**
+     * @Description: ������������������
+     * @Param: [menuMap, menu]menuMap���key���menuid���value���menu
+     * @return: void
+     * @Author: ���������
+     * @Date: 2021/4/7
+     */
+    private void combinationParentChildrenMenus(Map<Integer, ManageMenu> menuMap, ManageMenu menu) {
+        Integer parentId = menu.getParentId();
+        ManageMenu parentMenu = menuMap.get(parentId);
+        if (!ObjectUtils.isEmpty(parentMenu)) {
+            parentMenu.getChildren().add(menu);
+        }
+    }
 }
diff --git a/screen-manage/src/main/java/com/moral/api/service/impl/OrganizationServiceImpl.java b/screen-manage/src/main/java/com/moral/api/service/impl/OrganizationServiceImpl.java
index ce8b1d6..705f087 100644
--- a/screen-manage/src/main/java/com/moral/api/service/impl/OrganizationServiceImpl.java
+++ b/screen-manage/src/main/java/com/moral/api/service/impl/OrganizationServiceImpl.java
@@ -1,5 +1,7 @@
 package com.moral.api.service.impl;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -14,18 +16,22 @@
 import com.moral.api.pojo.form.organization.OrganizationUpdateForm;
 import com.moral.api.service.OrganizationService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.moral.api.util.LogUtils;
 import com.moral.constant.Constants;
 import com.moral.constant.ResponseCodeEnum;
 import com.moral.util.ConvertUtils;
 import com.moral.util.DateUtils;
+import lombok.Data;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.ObjectUtils;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
 
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
+import javax.servlet.http.HttpServletRequest;
+import java.util.*;
 
 /**
  * <p>
@@ -33,13 +39,23 @@
  * </p>
  *
  * @author moral
- * @since 2021-03-09
+ * @since 2021-04-06
  */
 @Service
+@ConfigurationProperties(prefix = "log-aspect")
 public class OrganizationServiceImpl extends ServiceImpl<OrganizationMapper, Organization> implements OrganizationService {
 
     @Autowired
     OrganizationMapper organizationMapper;
+
+    @Autowired
+    LogUtils logUtils;
+
+    Map<String, String> organizationFormMap;
+
+    public void setOrganizationFormMap(Map<String, String> organizationFormMap) {
+        this.organizationFormMap = organizationFormMap;
+    }
 
     /**
      * @Description: ������������������
@@ -82,11 +98,18 @@
         }
         //������������
         organizationMapper.insert(organization);
+
         //������DTO������
         organizationDTO.setParentOrganization(parentOrganization);
         organizationDTO.setOrganization(organization);
         organizationDTO.setCode(ResponseCodeEnum.SUCCESS.getCode());
         organizationDTO.setMsg(ResponseCodeEnum.SUCCESS.getMsg());
+
+        //������������������
+        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
+        StringBuilder content = new StringBuilder();
+        content.append("������������������").append(organization.getName());
+        logUtils.saveOperationForManage(request, content.toString());
         return organizationDTO;
     }
 
@@ -136,7 +159,7 @@
         //������������
         organizationMapper.updateById(organization);
 
-        //������������������������
+        //������������������������
         organization = organizationMapper.selectById(organization.getId());
 
         //������DTO������
@@ -144,6 +167,53 @@
         organizationDTO.setOrganization(organization);
         organizationDTO.setCode(ResponseCodeEnum.SUCCESS.getCode());
         organizationDTO.setMsg(ResponseCodeEnum.SUCCESS.getMsg());
+
+        //������������������
+        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
+        StringBuilder content = new StringBuilder();
+        content.append("������������������").append(organization.getName()).append(";");
+        //������������������Map
+        Map<String, Object> newParameters = JSONObject.parseObject(JSON.toJSONString(organizationUpdateForm), Map.class);
+        Map<String, Object> oldParameters = JSONObject.parseObject(JSON.toJSONString(existOrganization), Map.class);
+        Set<String> keys = organizationFormMap.keySet();
+        for (String key : keys) {
+            String value = organizationFormMap.get(key);
+            if ("parentName".equals(key)) {//���������������������������
+                if (organizationUpdateForm.getParentId() != null) {//������������������������������������
+                    String oldParentName = "���";
+                    String newParentName = "���";
+                    if (!existOrganization.getParentId().equals(0)) {
+                        oldParentName = organizationMapper.selectById(existOrganization.getParentId()).getName();
+                    }
+                    if (!organization.getParentId().equals(0)) {
+                        newParentName = organizationMapper.selectById(organization.getParentId()).getName();
+                    }
+                    content.append(value + ":" + oldParentName + "->" + newParentName + ";");
+                }
+            } else if ("expireTime".equals(key)) {//expireTime������������������������
+                if (organizationUpdateForm.getExpireTime() != null) {
+                    Date oldExpireTime = existOrganization.getExpireTime();
+                    Date newExpireTime = organization.getExpireTime();
+                    String oldExpireTimeStr = DateUtils.dateToDateString(oldExpireTime, "yyyy-MM-dd");
+                    String newExpireTimeStr = DateUtils.dateToDateString(newExpireTime, "yyyy-MM-dd");
+                    content.append(value + ":" + oldExpireTimeStr + "->" + newExpireTimeStr + ";");
+                }
+            } else {//������������������
+                if (newParameters.get(key) != null) {
+                    String newValue = "���";
+                    String oldValue = "���";
+                    if (newParameters.get(key) != null && !newParameters.get(key).equals(" ")) {
+                        newValue = String.valueOf(newParameters.get(key));
+                    }
+                    if (oldParameters.get(key) != null && !oldParameters.get(key).equals(" ")) {
+                        oldValue = String.valueOf(oldParameters.get(key));
+                    }
+                    content.append(value + ":" + oldValue + "->" + newValue + ";");
+                }
+            }
+        }
+        logUtils.saveOperationForManage(request, content.toString());
+
         return organizationDTO;
     }
 
@@ -190,9 +260,18 @@
             organizationMapper.update(null, updateChildrenWrapper);
         }
 
+        //������������������
         dto.setOrganization(existOrganization);
         dto.setCode(ResponseCodeEnum.SUCCESS.getCode());
         dto.setMsg(ResponseCodeEnum.SUCCESS.getMsg());
+        //������������������
+        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
+        StringBuilder content = new StringBuilder();
+        content.append("������������������").append(existOrganization.getName());
+        if(form.getDeleteChildren().equals(Constants.DELETE_CHILDREN_ORG))
+            content.append("���������������������");
+        logUtils.saveOperationForManage(request, content.toString());
+
         return dto;
     }
 
@@ -214,8 +293,6 @@
         Integer provinceCode = organizationQueryForm.getProvinceCode();
         Integer cityCode = organizationQueryForm.getCityCode();
         Integer areaCode = organizationQueryForm.getAreaCode();
-        Long townCode = organizationQueryForm.getTownCode();
-        Long villageCode = organizationQueryForm.getVillageCode();
         String phone = organizationQueryForm.getPhone();
         String email = organizationQueryForm.getEmail();
         String wechat = organizationQueryForm.getWechat();
@@ -236,8 +313,6 @@
         queryWrapper.eq("province_code", provinceCode);
         queryWrapper.eq("city_code", cityCode);
         queryWrapper.eq("area_code", areaCode);
-        queryWrapper.eq("town_code", townCode);
-        queryWrapper.eq("village_code", villageCode);
         queryWrapper.like("phone", phone);
         queryWrapper.like("email", email);
         queryWrapper.like("wechat", wechat);
@@ -264,10 +339,12 @@
         Page<Organization> resultPage = organizationMapper.selectPage(page, queryWrapper);
         List<Organization> organizations = resultPage.getRecords();
         List<OrganizationDTO> organizationDTOS = new ArrayList<>();
-        //������������������������������
+        //������������������������������������������organization���DTO���
         for (Organization child : organizations) {
             OrganizationDTO resultDto = new OrganizationDTO();
-            Organization parent = organizationMapper.selectById(child.getParentId());
+            Organization parent = organizationMapper.selectById(child.getParentId());//���������������
+            //���������������������
+            changeAddressByOrganization(child);
             resultDto.setOrganization(child);
             resultDto.setParentOrganization(parent);
             organizationDTOS.add(resultDto);
@@ -283,5 +360,29 @@
         return dto;
     }
 
+    /**
+     * @Description: ���organization���address���������provinceName cityName areaName������������
+     * @Param: [organization]
+     * @return: void
+     * @Author: ���������
+     * @Date: 2021/4/2
+     */
+    public void changeAddressByOrganization(Organization organization) {
+        String provinceName = organization.getProvinceName();
+        String cityName = organization.getCityName();
+        String areaName = organization.getAreaName();
+        String address = organization.getAddress();
 
+        StringBuilder newAddress = new StringBuilder();
+        if (provinceName != null)
+            newAddress.append(provinceName);
+        if (cityName != null)
+            newAddress.append(cityName);
+        if (areaName != null)
+            newAddress.append(areaName);
+        if (address != null)
+            newAddress.append(address);
+
+        organization.setAddress(newAddress.toString());
+    }
 }
diff --git a/screen-manage/src/main/java/com/moral/api/service/impl/SysAreaServiceImpl.java b/screen-manage/src/main/java/com/moral/api/service/impl/SysAreaServiceImpl.java
new file mode 100644
index 0000000..9e2c03a
--- /dev/null
+++ b/screen-manage/src/main/java/com/moral/api/service/impl/SysAreaServiceImpl.java
@@ -0,0 +1,80 @@
+package com.moral.api.service.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.moral.api.entity.SysArea;
+import com.moral.api.mapper.SysAreaMapper;
+import com.moral.api.service.SysAreaService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Service;
+import org.springframework.util.ObjectUtils;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.function.Predicate;
+
+/**
+ * <p>
+ * ��������������� ���������������
+ * </p>
+ *
+ * @author moral
+ * @since 2021-04-07
+ */
+@Service
+public class SysAreaServiceImpl extends ServiceImpl<SysAreaMapper, SysArea> implements SysAreaService {
+
+    @Autowired
+    SysAreaMapper sysAreaMapper;
+
+    @Autowired
+    RedisTemplate redisTemplate;
+
+    @Override
+    public List<SysArea> querySysArea() {
+        List<SysArea> sysAreas = redisTemplate.opsForList().range("sysArea", 0, -1);
+        if (ObjectUtils.isEmpty(sysAreas)) {
+            sysAreas = querySysAreaFromDB();
+        }
+        return sysAreas;
+    }
+
+
+    private List<SysArea> querySysAreaFromDB() {
+        //������������������
+        List<SysArea> sysAreas = sysAreaMapper.selectList(null);
+        //������Map key������������ value��������������� ���������������
+        Map<Integer, SysArea> areaMap = new HashMap<>();
+        for (SysArea sysArea : sysAreas) {
+            areaMap.put(sysArea.getAreaCode(), sysArea);
+            sysArea.setChildren(new ArrayList<>());//���������children������
+        }
+        //������������������������������������������������������������������������������������
+        for (SysArea sysArea : sysAreas) {
+            Integer parentCode = sysArea.getParentCode();
+            if (!parentCode.equals(0)) {
+                SysArea parentArea = areaMap.get(parentCode);
+                parentArea.getChildren().add(sysArea);
+            }
+        }
+        //���������������������������������
+        sysAreas.removeIf(new Predicate<SysArea>() {
+            @Override
+            public boolean test(SysArea sysArea) {
+                if (sysArea.getParentCode().equals(0))
+                    return false;
+                return true;
+            }
+        });
+        //������������
+        redisTemplate.opsForList().rightPushAll("sysArea",sysAreas);
+
+        return sysAreas;
+    }
+
+
+}
diff --git a/screen-manage/src/main/java/com/moral/api/util/LogUtils.java b/screen-manage/src/main/java/com/moral/api/util/LogUtils.java
new file mode 100644
index 0000000..1a03721
--- /dev/null
+++ b/screen-manage/src/main/java/com/moral/api/util/LogUtils.java
@@ -0,0 +1,44 @@
+package com.moral.api.util;
+
+import com.moral.api.entity.ManageAccount;
+import com.moral.api.entity.ManageLog;
+import com.moral.api.mapper.ManageLogMapper;
+import com.moral.api.pojo.dto.login.AccountInfoDTO;
+import com.moral.util.TokenUtils;
+import com.moral.util.WebUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * @ClassName LogUtils
+ * @Description TODO
+ * @Author ���������
+ * @Date 2021/4/2 8:45
+ * @Version TODO
+ **/
+@Component
+public class LogUtils {
+
+    @Autowired
+    public ManageLogMapper manageLogMapper;
+
+    @Transactional
+    public void saveOperationForManage(HttpServletRequest request, String content) {
+        String token = request.getHeader("token");
+        AccountInfoDTO accountInfoDTO = (AccountInfoDTO) TokenUtils.getUserInfoByToken(token);
+        ManageAccount account = accountInfoDTO.getAccount();
+        Integer id = account.getId();
+        String userName = account.getUserName();
+        String ip = WebUtils.getIpAddr(request);
+
+        ManageLog log = new ManageLog();
+        log.setAccountId(id);
+        log.setIp(ip);
+        log.setContent(content);
+        log.setUserName(userName);
+        manageLogMapper.insert(log);
+    }
+}
diff --git a/screen-manage/src/main/resources/application-dev.yml b/screen-manage/src/main/resources/application-dev.yml
index 092bb7a..4dd6901 100644
--- a/screen-manage/src/main/resources/application-dev.yml
+++ b/screen-manage/src/main/resources/application-dev.yml
@@ -13,6 +13,8 @@
 spring:
   profiles:
     active: dev
+    include:
+      moduleFormColumn
   application:
     name: screen-manage
   redis:
@@ -117,25 +119,15 @@
       - /swagger-ui.html
       - /swagger-resources/**
       - /webjars/**
-      - /logout
-      - /account/insert
-      - /account/query
-      - /account/update
-      - /account/delete
-      - /account/yanzhengma
-      - /verificationCode/get
-      - /verificationCode/verify
-      - /verificationCode/config
-      - /organization/insert
-      - /organization/update
-      - /organization/delete
-      - /organization/query
+      - /verificationCode/**
+      - /system/**
 
       - /role/getAllManageRole
       - /role/getManageRoleByNameFuzzy
       - /role/updateRoleMenu
       - /menu/getAllManageMenu
       - /menu/getManageMenuByNameFuzzy
+      - /api/**
 AES:
   KEY:
     AD42F7787B035B7580000EF93BE20BAD
@@ -143,3 +135,4 @@
   KEY:
     foh3wi2ooghiCh5
 
+
diff --git a/screen-manage/src/main/resources/application-moduleFormColumn.yml b/screen-manage/src/main/resources/application-moduleFormColumn.yml
new file mode 100644
index 0000000..27e2860
--- /dev/null
+++ b/screen-manage/src/main/resources/application-moduleFormColumn.yml
@@ -0,0 +1,17 @@
+#���������������������������������������������������������������������������
+log-aspect:
+  organization-form-map:
+    parentName: ���������
+    name: ������
+    provinceName: ������
+    cityName: ������
+    areaName: ������
+    locationLevelName: ������������
+    address: ������
+    phone: ������
+    email: ������
+    wechat: ������
+    expireTime: ������������
+
+
+
diff --git a/screen-manage/src/main/resources/mapper/ManageLogMapper.xml b/screen-manage/src/main/resources/mapper/ManageLogMapper.xml
index bb54f7f..708e835 100644
--- a/screen-manage/src/main/resources/mapper/ManageLogMapper.xml
+++ b/screen-manage/src/main/resources/mapper/ManageLogMapper.xml
@@ -5,10 +5,9 @@
         <!-- ������������������������ -->
         <resultMap id="BaseResultMap" type="com.moral.api.entity.ManageLog">
                     <id column="id" property="id" />
-                    <result column="type" property="type" />
-                    <result column="module" property="module" />
-                    <result column="content" property="content" />
                     <result column="account_id" property="accountId" />
+                    <result column="user_name" property="userName" />
+                    <result column="content" property="content" />
                     <result column="ip" property="ip" />
                     <result column="create_time" property="createTime" />
         </resultMap>
diff --git a/screen-manage/src/main/resources/mapper/ManageMenuMapper.xml b/screen-manage/src/main/resources/mapper/ManageMenuMapper.xml
index 75e4ab4..d463427 100644
--- a/screen-manage/src/main/resources/mapper/ManageMenuMapper.xml
+++ b/screen-manage/src/main/resources/mapper/ManageMenuMapper.xml
@@ -15,59 +15,14 @@
         <result column="is_delete" property="isDelete"/>
     </resultMap>
 
-    <!--������������������������������-->
-    <resultMap id="ParentChildrenResultMap" type="com.moral.api.entity.ManageMenu">
-        <id column="id" property="id"/>
-        <result column="name" property="name"/>
-        <result column="url" property="url"/>
-        <result column="icon" property="icon"/>
-        <result column="parent_id" property="parentId"/>
-        <result column="order" property="order"/>
-        <result column="create_time" property="createTime"/>
-        <result column="update_time" property="updateTime"/>
-        <result column="is_delete" property="isDelete"/>
-        <collection property="children" ofType="com.moral.api.entity.ManageMenu" column="id" select="getChildrenByParentId"></collection>
-    </resultMap>
 
     <sql id="Base_Column_List">
         mm.id,mm.name,mm.url,mm.icon,mm.parent_id,mm.order,mm.create_time,mm.update_time,mm.is_delete
     </sql>
 
-    <!--������������������������������������������-->
-    <select id="getParentMenuByRoles" resultMap="BaseResultMap">
-        select
-        <include refid="Base_Column_List"></include>
-        from
-        manage_menu mm
-        join
-        manage_role_menu mrm
-        on
-        mm.`id` = mrm.`menu_id` and mm.`is_delete`=0
-        join
-        manage_role mr
-        on
-        mr.`id` = mrm.`role_id` and mr.`id` IN
-        <foreach collection="list" separator="," open="(" close=")" item="role">
-            #{role.id}
-        </foreach>
-        where
-        mm.`is_delete`=0
-        AND
-        mm.`parent_id`=0;
-    </select>
-
-    <!--���������������Id������������������������-->
-    <select id="getChildrenByParentId" parameterType="Integer" resultMap="BaseResultMap">
-        SELECT
-        <include refid="Base_Column_List"></include>
-        FROM
-        manage_menu mm
-        WHERE
-        mm.parent_id = #{value}
-    </select>
 
     <!--���������������������������������������-->
-    <select id="getParentChildrenMenusByRoles" resultMap="ParentChildrenResultMap">
+    <select id="getAllMenusByRoles" resultMap="BaseResultMap">
         select
         DISTINCT
         <include refid="Base_Column_List"></include>
@@ -86,8 +41,6 @@
         </foreach>
         where
         mm.`is_delete`=0
-        AND
-        mm.`parent_id`=0;
     </select>
 
     <select id="getManageMenuByName" resultMap="BaseResultMap">
diff --git a/screen-manage/src/main/resources/mapper/OrganizationMapper.xml b/screen-manage/src/main/resources/mapper/OrganizationMapper.xml
index de7e2ec..7dca616 100644
--- a/screen-manage/src/main/resources/mapper/OrganizationMapper.xml
+++ b/screen-manage/src/main/resources/mapper/OrganizationMapper.xml
@@ -9,11 +9,13 @@
                     <result column="admin_user_id" property="adminUserId" />
                     <result column="name" property="name" />
                     <result column="province_code" property="provinceCode" />
+                    <result column="province_name" property="provinceName" />
                     <result column="city_code" property="cityCode" />
+                    <result column="city_name" property="cityName" />
                     <result column="area_code" property="areaCode" />
-                    <result column="town_code" property="townCode" />
-                    <result column="village_code" property="villageCode" />
-                    <result column="location_level" property="locationLevel" />
+                    <result column="area_name" property="areaName" />
+                    <result column="location_level_code" property="locationLevelCode" />
+                    <result column="location_level_name" property="locationLevelName" />
                     <result column="address" property="address" />
                     <result column="phone" property="phone" />
                     <result column="email" property="email" />
diff --git a/screen-manage/src/main/resources/mapper/SysAreaMapper.xml b/screen-manage/src/main/resources/mapper/SysAreaMapper.xml
new file mode 100644
index 0000000..99b79ad
--- /dev/null
+++ b/screen-manage/src/main/resources/mapper/SysAreaMapper.xml
@@ -0,0 +1,18 @@
+<?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.moral.api.mapper.SysAreaMapper">
+
+    <!-- ������������������������ -->
+    <resultMap id="BaseResultMap" type="com.moral.api.entity.SysArea">
+        <id column="area_code" property="areaCode"/>
+        <result column="area_name" property="areaName"/>
+        <result column="parent_code" property="parentCode"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        area_code,area_name,parent_code
+    </sql>
+
+
+
+</mapper>
\ No newline at end of file

--
Gitblit v1.8.0