screen-manage
完成sysarea模块查询
拦截器逻辑代码完成
修改organization和accountBug
8 files added
36 files modified
1125 ■■■■ changed files
myBatisPlusGenerator/src/main/java/com/moral/CodeGenerator.java 2 ●●● patch | view | raw | blame | history
screen-common/src/main/java/com/moral/util/AESUtils.java 2 ●●●●● patch | view | raw | blame | history
screen-common/src/main/java/com/moral/util/ConvertUtils.java 1 ●●●● patch | view | raw | blame | history
screen-common/src/main/java/com/moral/util/TokenEncryptUtils.java 4 ●●● patch | view | raw | blame | history
screen-common/src/main/java/com/moral/util/TokenUtils.java 54 ●●●● patch | view | raw | blame | history
screen-common/src/main/java/com/moral/util/WebUtils.java 7 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/aop/log/OperationLogAspect.java 106 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/controller/AccountController.java 1 ●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/controller/OrganizationController.java 23 ●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/controller/SystemController.java 38 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/controller/TestController.java 61 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/entity/ManageLog.java 15 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/entity/Organization.java 26 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/entity/SysArea.java 52 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/interceptor/ManageInterceptor.java 6 ●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/mapper/ManageLogMapper.java 2 ●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/mapper/ManageMenuMapper.java 19 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/mapper/OrganizationMapper.java 2 ●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/mapper/SysAreaMapper.java 25 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/pojo/form/account/AccountInsertForm.java 9 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/pojo/form/organization/OrganizationDeleteForm.java 2 ●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/pojo/form/organization/OrganizationInsertForm.java 26 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/pojo/form/organization/OrganizationQueryForm.java 4 ●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/pojo/form/organization/OrganizationUpdateForm.java 22 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/pojo/vo/account/AccountQueryVO.java 3 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/pojo/vo/login/AccountInfoVO.java 25 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/pojo/vo/organization/OrganizationQueryVO.java 4 ●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/pojo/vo/organization/OrganizationVO.java 4 ●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/service/ManageLogService.java 2 ●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/service/ManageMenuService.java 3 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/service/OrganizationService.java 55 ●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/service/SysAreaService.java 28 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/service/impl/ManageAccountServiceImpl.java 5 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/service/impl/ManageLogServiceImpl.java 2 ●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/service/impl/ManageMenuServiceImpl.java 122 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/service/impl/OrganizationServiceImpl.java 123 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/service/impl/SysAreaServiceImpl.java 80 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/util/LogUtils.java 44 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/resources/application-dev.yml 19 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/resources/application-moduleFormColumn.yml 17 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/resources/mapper/ManageLogMapper.xml 5 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/resources/mapper/ManageMenuMapper.xml 49 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/resources/mapper/OrganizationMapper.xml 8 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/resources/mapper/SysAreaMapper.xml 18 ●●●●● patch | view | raw | blame | history
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);
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"));
    }
}
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;
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);
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);
    }
}
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 {
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();
    }
}
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
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);
    }
}
screen-manage/src/main/java/com/moral/api/controller/SystemController.java
New file
@@ -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);
    }
}
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();
    }
}
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地址
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;
    /**
     * 地址
screen-manage/src/main/java/com/moral/api/entity/SysArea.java
New file
@@ -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;
    }
}
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
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> {
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);
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> {
screen-manage/src/main/java/com/moral/api/mapper/SysAreaMapper.java
New file
@@ -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();
}
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;
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)) {
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);
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;
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);
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;
    }
}
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);
        }
    }
}
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;
    }
}
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;
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> {
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);
}
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);
}
screen-manage/src/main/java/com/moral/api/service/SysAreaService.java
New file
@@ -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();
}
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);
        }
        //封装用户信息
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 {
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);
        }
    }
}
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());
    }
}
screen-manage/src/main/java/com/moral/api/service/impl/SysAreaServiceImpl.java
New file
@@ -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;
    }
}
screen-manage/src/main/java/com/moral/api/util/LogUtils.java
New file
@@ -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);
    }
}
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
screen-manage/src/main/resources/application-moduleFormColumn.yml
New file
@@ -0,0 +1,17 @@
#接收前端数据实体中属性的含义,用于转换供日志使用。
log-aspect:
  organization-form-map:
    parentName: 父组织
    name: 名称
    provinceName: 省份
    cityName: 城市
    areaName: 区域
    locationLevelName: 定位级别
    address: 地址
    phone: 电话
    email: 邮箱
    wechat: 微信
    expireTime: 过期时间
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>
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">
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" />
screen-manage/src/main/resources/mapper/SysAreaMapper.xml
New file
@@ -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>