kaiyu
2021-05-06 52d8cf200d7a54890845d4c468c24b6ab97a4762
screen-manage
前台用户增加以及删除功能
2 files renamed
1 files deleted
14 files added
15 files modified
1437 ■■■■ changed files
screen-common/src/main/java/com/moral/constant/ResponseCodeEnum.java 5 ●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/controller/MenuController.java 107 ●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/controller/OrganizationController.java 10 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/controller/UserController.java 85 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/entity/User.java 8 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/pojo/dto/menu/MenuQueryNamesDTO.java 22 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/pojo/dto/organization/OrganizationQueryNamesDTO.java 2 ●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/pojo/dto/user/UserDTO.java 25 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/pojo/dto/user/UserQueryDTO.java 30 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/pojo/form/menu/MenuQueryNamesForm.java 25 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/pojo/form/menu/MenuUpdateForm.java 49 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/pojo/form/organization/OrganizationQueryNameForm.java 17 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/pojo/form/organization/OrganizationQueryNamesForm.java 20 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/pojo/form/user/UserDeleteForm.java 22 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/pojo/form/user/UserInsertForm.java 100 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/pojo/form/user/UserQueryForm.java 63 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/pojo/form/user/UserUpdateForm.java 97 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/pojo/vo/account/AccountUpdateVO.java 1 ●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/pojo/vo/menu/MenuQueryNamesVO.java 51 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/pojo/vo/menu/MenuUpdateVO.java 27 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/pojo/vo/organization/OrganizationQueryAllNamesVO.java 8 ●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/pojo/vo/user/UserQueryVO.java 74 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/pojo/vo/user/UserUpdateVO.java 24 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/pojo/vo/user/UserVO.java 30 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/service/MenuService.java 24 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/service/OrganizationService.java 13 ●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/service/UserService.java 13 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/service/impl/ManageAccountServiceImpl.java 55 ●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/service/impl/MenuServiceImpl.java 168 ●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/service/impl/OrganizationServiceImpl.java 37 ●●●● patch | view | raw | blame | history
screen-manage/src/main/java/com/moral/api/service/impl/UserServiceImpl.java 205 ●●●●● patch | view | raw | blame | history
screen-manage/src/main/resources/application-dev.yml 20 ●●●●● patch | view | raw | blame | history
screen-common/src/main/java/com/moral/constant/ResponseCodeEnum.java
@@ -41,7 +41,10 @@
    DICTTYPE_EXIST(-27,"字典类型已经存在"),
    DICTDATA_KEY_EXIST(-28,"字典数据Key已经存在"),
    DICTDATA_KEY_NOT_EXIST(-29,"字典数据Key不存在"),
    USERNAME_INVALID(-30,"用户名称无效")
    USERNAME_INVALID(-30,"用户名称无效"),
    USER_NOT_EXIST(-31,"用户不存在"),
    USER_EXIST(-32,"用户已经存在"),
    ORGANIZATION_USER_EXIST(-33,"组织已经存在用户")
    ;
    private final Integer code;
    private final String  msg;
screen-manage/src/main/java/com/moral/api/controller/MenuController.java
@@ -1,13 +1,13 @@
package com.moral.api.controller;
import com.moral.api.entity.Menu;
import com.moral.api.pojo.dto.menu.MenuDTO;
import com.moral.api.pojo.dto.menu.MenuQueryNamesDTO;
import com.moral.api.pojo.dto.menu.MenuQueryDTO;
import com.moral.api.pojo.form.menu.MenuDeleteForm;
import com.moral.api.pojo.form.menu.MenuInsertForm;
import com.moral.api.pojo.vo.menu.MenuDeleteVO;
import com.moral.api.pojo.vo.menu.MenuInsertVO;
import com.moral.api.pojo.vo.menu.MenuQueryVO;
import com.moral.api.pojo.form.menu.MenuQueryNamesForm;
import com.moral.api.pojo.form.menu.MenuUpdateForm;
import com.moral.api.pojo.vo.menu.*;
import com.moral.api.service.MenuService;
import com.moral.constant.ResponseCodeEnum;
import com.moral.constant.ResultMessage;
@@ -15,10 +15,6 @@
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
 * @ClassName MenuController
@@ -33,75 +29,9 @@
@RestController
@RequestMapping("/menu")
public class MenuController {
    @Autowired
    MenuService menuService;
    @GetMapping("queryMock")
    public ResultMessage queryMock() {
        MenuQueryDTO dto = new MenuQueryDTO();
        Menu menu1 = new Menu();
        Menu menu11 = new Menu();
        Menu menu111 = new Menu();
        Menu menu12 = new Menu();
        Menu menu121 = new Menu();
        Menu menu13 = new Menu();
        Menu menu2 = new Menu();
        Menu menu21 = new Menu();
        Menu menu211 = new Menu();
        Menu menu22 = new Menu();
        Menu menu23 = new Menu();
        Menu menu24 = new Menu();
        Menu menu241 = new Menu();
        Menu menu2411 = new Menu();
        menu1.setName("menu 1");
        menu1.setId(1);
        menu11.setName("menu 1-1");
        menu11.setId(2);
        menu111.setName("menu 1-1-1");
        menu111.setId(3);
        menu12.setName("menu 1-2");
        menu12.setId(4);
        menu121.setName("menu 1-2-1");
        menu121.setId(5);
        menu13.setName("menu 1-3");
        menu13.setId(6);
        menu2.setName("menu 2");
        menu2.setId(7);
        menu21.setName("menu 2-1");
        menu21.setId(8);
        menu211.setName("menu 2-1-1");
        menu211.setId(9);
        menu22.setName("menu 2-2");
        menu22.setId(10);
        menu23.setName("menu 2-3");
        menu23.setId(11);
        menu24.setName("menu 2-4");
        menu24.setId(12);
        menu241.setName("menu 2-4-1");
        menu241.setId(13);
        menu2411.setName("menu 2-4-1-1");
        menu2411.setId(14);
        menu12.setChildren(Arrays.asList(menu121));
        menu11.setChildren(Arrays.asList(menu111));
        menu1.setChildren(Arrays.asList(menu11, menu12, menu13));
        menu241.setChildren(Arrays.asList(menu2411));
        menu24.setChildren(Arrays.asList(menu241));
        menu21.setChildren(Arrays.asList(menu211));
        menu2.setChildren(Arrays.asList(menu21, menu22, menu23, menu24));
        MenuDTO dto1 = new MenuDTO();
        MenuDTO dto2 = new MenuDTO();
        dto1.setMenu(menu1);
        dto2.setMenu(menu2);
        dto.setDtos(Arrays.asList(dto1, dto2));
        dto.setCode(ResponseCodeEnum.SUCCESS.getCode());
        dto.setMsg(ResponseCodeEnum.SUCCESS.getMsg());
        MenuQueryVO vo = MenuQueryVO.convert(dto);
        return new ResultMessage(dto.getCode(), dto.getMsg(), vo);
    }
    @GetMapping("query")
    public ResultMessage query() {
@@ -110,6 +40,17 @@
        //转换为前端所需参数
        MenuQueryVO vo = MenuQueryVO.convert(dto);
        return new ResultMessage(dto.getCode(), dto.getMsg(), vo);
    }
    @GetMapping("queryNames")
    public ResultMessage queryNames(MenuQueryNamesForm form){
        //处理查询业务
        MenuQueryNamesDTO dto = menuService.queryNames(form);
        //转换前端所需参数
        MenuQueryNamesVO vo = MenuQueryNamesVO.convert(dto);
        return new ResultMessage(dto.getCode(), dto.getMsg(), vo);
    }
@@ -146,4 +87,20 @@
        return new ResultMessage(dto.getCode(), dto.getMsg(), vo);
    }
    @PostMapping("update")
    public ResultMessage update(@RequestBody MenuUpdateForm form){
        //判断是否缺少参数
        if (!form.valid())
            return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(),
                    ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg());
        //处理更新业务
        MenuDTO dto = menuService.updateMenu(form);
        //转换前端所需参数
        MenuUpdateVO vo = MenuUpdateVO.convert(dto);
        return new ResultMessage(dto.getCode(), dto.getMsg(), vo);
    }
}
screen-manage/src/main/java/com/moral/api/controller/OrganizationController.java
@@ -2,12 +2,10 @@
import com.moral.api.pojo.dto.organization.OrganizationDTO;
import com.moral.api.pojo.dto.organization.OrganizationQueryDTO;
import com.moral.api.pojo.dto.organization.OrganizationQueryNameDTO;
import com.moral.api.pojo.dto.organization.OrganizationQueryNamesDTO;
import com.moral.api.pojo.form.organization.*;
import com.moral.api.pojo.vo.organization.*;
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;
import io.swagger.annotations.Api;
@@ -112,13 +110,13 @@
    }
    @GetMapping("queryNames")
    public ResultMessage queryNames(OrganizationQueryNameForm form){
    public ResultMessage queryNames(OrganizationQueryNamesForm form){
        //处理查询业务
        OrganizationQueryNameDTO dto = organizationService.queryOrganizationNames(form);
        OrganizationQueryNamesDTO dto = organizationService.queryNames(form);
        //转换前端所需参数
        OrganizationQueryNamesVO vo = OrganizationQueryNamesVO.convert(dto);
        OrganizationQueryAllNamesVO vo = OrganizationQueryAllNamesVO.convert(dto);
        return new ResultMessage(dto.getCode(),dto.getMsg(),vo);
    }
screen-manage/src/main/java/com/moral/api/controller/UserController.java
@@ -1,11 +1,19 @@
package com.moral.api.controller;
import com.moral.api.pojo.dto.user.UserDTO;
import com.moral.api.pojo.dto.user.UserQueryDTO;
import com.moral.api.pojo.form.user.UserDeleteForm;
import com.moral.api.pojo.form.user.UserInsertForm;
import com.moral.api.pojo.form.user.UserQueryForm;
import com.moral.api.pojo.form.user.UserUpdateForm;
import com.moral.api.pojo.vo.user.UserQueryVO;
import com.moral.api.service.UserService;
import com.moral.constant.ResponseCodeEnum;
import com.moral.constant.ResultMessage;
import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
 * @ClassName UserController
@@ -19,9 +27,76 @@
@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    UserService userService;
    @GetMapping("query")
    public ResultMessage query(UserQueryForm form) {
        //判断是否缺少参数
        if (!form.valid())
            return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(),
                    ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg());
        //处理查询业务
        UserQueryDTO dto = userService.queryUsers(form);
        //转换前端所需参数
        UserQueryVO vo = UserQueryVO.convert(dto);
        return new ResultMessage(dto.getCode(), dto.getMsg(), vo);
    }
    @PostMapping("update")
    public ResultMessage update(@RequestBody UserUpdateForm form){
        //判断是否缺少参数
        if (!form.valid())
            return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(),
                    ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg());
        //判断参数是否有效
        UserDTO conditionDTO = form.paramValid();
        if (conditionDTO.getCode() != ResponseCodeEnum.SUCCESS.getCode()) {
            return new ResultMessage(conditionDTO.getCode(), conditionDTO.getMsg(), null);
        }
        //处理更新业务
        UserDTO dto = userService.updateUser(form);
        return new ResultMessage(dto.getCode(), dto.getMsg(), null);
    }
    @PostMapping("delete")
    public ResultMessage delete(@RequestBody UserDeleteForm form){
        //判断是否缺少参数
        if (!form.valid())
            return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(),
                    ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg());
        //处理删除业务
        UserDTO dto = userService.deleteUser(form);
        return new ResultMessage(dto.getCode(), dto.getMsg(), null);
    }
    @PostMapping("insert")
    public ResultMessage insert(){
        return null;
    public ResultMessage insert(@RequestBody UserInsertForm form){
        //判断是否缺少参数
        if (!form.valid())
            return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(),
                    ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg());
        //判断参数是否有效
        UserDTO conditionDTO = form.paramValid();
        if (conditionDTO.getCode() != ResponseCodeEnum.SUCCESS.getCode()) {
            return new ResultMessage(conditionDTO.getCode(), conditionDTO.getMsg(), null);
        }
        //处理增加业务
        UserDTO dto = userService.insertUser(form);
        return new ResultMessage(dto.getCode(), dto.getMsg(), null);
    }
}
screen-manage/src/main/java/com/moral/api/entity/User.java
@@ -5,6 +5,8 @@
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import java.io.Serializable;
import java.util.Date;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -71,17 +73,17 @@
    /**
     * 创建时间
     */
    private LocalDateTime createTime;
    private Date createTime;
    /**
     * 更新时间
     */
    private LocalDateTime updateTime;
    private Date updateTime;
    /**
     * 过期时间
     */
    private LocalDateTime expireTime;
    private Date expireTime;
    /**
     * 是否删除
screen-manage/src/main/java/com/moral/api/pojo/dto/menu/MenuQueryNamesDTO.java
New file
@@ -0,0 +1,22 @@
package com.moral.api.pojo.dto.menu;
import com.moral.api.entity.Menu;
import lombok.Data;
import java.util.List;
/**
 * @ClassName MenuQueryByNameDTO
 * @Description TODO
 * @Author 陈凯裕
 * @Date 2021/4/28 10:49
 * @Version TODO
 **/
@Data
public class MenuQueryNamesDTO {
    private Integer code;
    private String msg;
    List<Menu> Menus;
}
screen-manage/src/main/java/com/moral/api/pojo/dto/organization/OrganizationQueryNamesDTO.java
File was renamed from screen-manage/src/main/java/com/moral/api/pojo/dto/organization/OrganizationQueryNameDTO.java
@@ -13,7 +13,7 @@
 * @Version TODO
 **/
@Data
public class OrganizationQueryNameDTO {
public class OrganizationQueryNamesDTO {
    private Integer code;
screen-manage/src/main/java/com/moral/api/pojo/dto/user/UserDTO.java
New file
@@ -0,0 +1,25 @@
package com.moral.api.pojo.dto.user;
import com.moral.api.entity.Group;
import com.moral.api.entity.Organization;
import com.moral.api.entity.User;
import lombok.Data;
/**
 * @ClassName UserDTO
 * @Description TODO
 * @Author 陈凯裕
 * @Date 2021/4/28 14:53
 * @Version TODO
 **/
@Data
public class UserDTO {
    private Integer code;
    private String msg;
    private User user;
    private Organization organization;
}
screen-manage/src/main/java/com/moral/api/pojo/dto/user/UserQueryDTO.java
New file
@@ -0,0 +1,30 @@
package com.moral.api.pojo.dto.user;
import lombok.Data;
import java.util.List;
/**
 * @ClassName UserQueryDTO
 * @Description TODO
 * @Author 陈凯裕
 * @Date 2021/4/28 14:53
 * @Version TODO
 **/
@Data
public class UserQueryDTO {
    private Integer code;
    private String msg;
    private long pages;
    private long total;
    private long current;
    private long size;
    private List<UserDTO> userDTOS;
}
screen-manage/src/main/java/com/moral/api/pojo/form/menu/MenuQueryNamesForm.java
New file
@@ -0,0 +1,25 @@
package com.moral.api.pojo.form.menu;
import lombok.Data;
/**
 * @ClassName MenuQueryNameForm
 * @Description TODO
 * @Author 陈凯裕
 * @Date 2021/4/28 10:25
 * @Version TODO
 **/
@Data
public class MenuQueryNamesForm {
    private Integer id;
    private String name;
    public boolean valid(){
        if(id==null||id==0){
            return false;
        }
        return true;
    }
}
screen-manage/src/main/java/com/moral/api/pojo/form/menu/MenuUpdateForm.java
New file
@@ -0,0 +1,49 @@
package com.moral.api.pojo.form.menu;
import com.moral.api.entity.Menu;
import lombok.Data;
import org.springframework.util.ObjectUtils;
/**
 * @ClassName MenuUpdateForm
 * @Description TODO
 * @Author 陈凯裕
 * @Date 2021/4/27 11:35
 * @Version TODO
 **/
@Data
public class MenuUpdateForm {
    private Integer id;
    private String name;
    private String url;
    private Integer parentId;
    private Integer order;
    public boolean valid(){
        if(ObjectUtils.isEmpty(id))
            return false;
        if(
                ObjectUtils.isEmpty(name)&&
                        ObjectUtils.isEmpty(url)&&
                        ObjectUtils.isEmpty(parentId)&&
                        ObjectUtils.isEmpty(order)
                )
            return false;
        return true;
    }
    public Menu formConvertEntity(){
        Menu menu = new Menu();
        menu.setId(id);
        menu.setName(name);
        menu.setUrl(url);
        menu.setParentId(parentId);
        menu.setOrder(order);
        return menu;
    }
}
screen-manage/src/main/java/com/moral/api/pojo/form/organization/OrganizationQueryNameForm.java
File was deleted
screen-manage/src/main/java/com/moral/api/pojo/form/organization/OrganizationQueryNamesForm.java
New file
@@ -0,0 +1,20 @@
package com.moral.api.pojo.form.organization;
import lombok.Data;
/**
 * @ClassName OrganizationQueryNamesForm
 * @Description TODO
 * @Author 陈凯裕
 * @Date 2021/5/6 13:18
 * @Version TODO
 **/
@Data
public class OrganizationQueryNamesForm {
    private Integer id;
    private Integer adminUserId;
}
screen-manage/src/main/java/com/moral/api/pojo/form/user/UserDeleteForm.java
New file
@@ -0,0 +1,22 @@
package com.moral.api.pojo.form.user;
import lombok.Data;
/**
 * @ClassName UserDeleteForm
 * @Description TODO
 * @Author 陈凯裕
 * @Date 2021/5/6 9:31
 * @Version TODO
 **/
@Data
public class UserDeleteForm {
    private Integer id;
    public boolean valid(){
        if(id==null||id==0){
            return false;
        }
        return true;
    }
}
screen-manage/src/main/java/com/moral/api/pojo/form/user/UserInsertForm.java
@@ -1,14 +1,112 @@
package com.moral.api.pojo.form.user;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.moral.api.entity.User;
import com.moral.api.pojo.dto.user.UserDTO;
import com.moral.constant.ResponseCodeEnum;
import com.moral.util.AESUtils;
import com.moral.util.MD5Utils;
import com.moral.util.RegexUtils;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.util.ObjectUtils;
import java.util.Date;
/**
 * @ClassName UserInsertForm
 * @Description TODO
 * @Author 陈凯裕
 * @Date 2021/3/22 14:05
 * @Date 2021/5/6 10:35
 * @Version TODO
 **/
@Data
public class UserInsertForm {
    private String account;
    private String password;
    private String userName;
    private Integer organizationId;
    private String email;
    private String mobile;
    private String wechat;
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
    private Date expireTime;
    public boolean valid() {
        if (
                ObjectUtils.isEmpty(account) ||
                        ObjectUtils.isEmpty(password) ||
                        ObjectUtils.isEmpty(userName) ||
                        ObjectUtils.isEmpty(organizationId) ||
                        ObjectUtils.isEmpty(expireTime)
                )
            return false;
        return true;
    }
    public UserDTO paramValid() {
        UserDTO dto = new UserDTO();
        //判断账号是否符合条件
        if (!RegexUtils.checkAccount(account)) {
            dto.setCode(ResponseCodeEnum.ACCOUNT_INVALID.getCode());
            dto.setMsg(ResponseCodeEnum.ACCOUNT_INVALID.getMsg());
            return dto;
        }
        //判断用户名是否符合条件
        if(!RegexUtils.checkChinese(userName)||userName.contains(" ")){
            dto.setCode(ResponseCodeEnum.USERNAME_INVALID.getCode());
            dto.setMsg(ResponseCodeEnum.USERNAME_INVALID.getMsg());
            return dto;
        }
        //判断密码是否符合条件
        if (!RegexUtils.checkPassword(AESUtils.decrypt(password))) {
            dto.setCode(ResponseCodeEnum.PASSWORD_INVALID.getCode());
            dto.setMsg(ResponseCodeEnum.PASSWORD_INVALID.getMsg());
            return dto;
        }
        //判断手机号是否符合条件
        if (!ObjectUtils.isEmpty(mobile)) {
            if (!RegexUtils.checkMobile(mobile)) {
                dto.setCode(ResponseCodeEnum.MOBILE_INVALID.getCode());
                dto.setMsg(ResponseCodeEnum.MOBILE_INVALID.getMsg());
                return dto;
            }
        }
        //判断邮箱是否符合条件
        if (!ObjectUtils.isEmpty(email)) {
            if (!RegexUtils.checkEmail(email)) {
                dto.setCode(ResponseCodeEnum.EMAIL_INVALID.getCode());
                dto.setMsg(ResponseCodeEnum.EMAIL_INVALID.getMsg());
                return dto;
            }
        }
        dto.setCode(ResponseCodeEnum.SUCCESS.getCode());
        dto.setMsg(ResponseCodeEnum.SUCCESS.getMsg());
        return dto;
    }
    public User formConvertEntity() {
        User user = new User();
        user.setAccount(account);
        user.setPassword(MD5Utils.saltMD5(AESUtils.decrypt(password)));
        user.setUserName(userName);
        user.setOrganizationId(organizationId);
        user.setEmail(email);
        user.setMobile(mobile);
        user.setWechat(wechat);
        user.setExpireTime(expireTime);
        user.setIsAdmin(true);
        return user;
    }
}
screen-manage/src/main/java/com/moral/api/pojo/form/user/UserQueryForm.java
New file
@@ -0,0 +1,63 @@
package com.moral.api.pojo.form.user;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.util.ObjectUtils;
import java.util.Date;
/**
 * @ClassName UserQueryForm
 * @Description TODO
 * @Author 陈凯裕
 * @Date 2021/4/28 10:09
 * @Version TODO
 **/
@Data
public class UserQueryForm {
    private Integer page;
    private Integer size;
    private Integer organizationId;
    private String email;
    private String mobile;
    private String wechat;
    private Integer isDelete;
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
    private Date createStartTime;
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
    private Date createEndTime;
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
    private Date expireStartTime;
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
    private Date expireEndTime;
    private String order;
    private String orderType;
    public boolean valid(){
        if (
                ObjectUtils.isEmpty(page)||
                        ObjectUtils.isEmpty(size)
                )
            return false;
        return true;
    }
}
screen-manage/src/main/java/com/moral/api/pojo/form/user/UserUpdateForm.java
New file
@@ -0,0 +1,97 @@
package com.moral.api.pojo.form.user;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.moral.api.entity.User;
import com.moral.api.pojo.dto.user.UserDTO;
import com.moral.constant.ResponseCodeEnum;
import com.moral.util.AESUtils;
import com.moral.util.DateUtils;
import com.moral.util.MD5Utils;
import com.moral.util.RegexUtils;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.util.ObjectUtils;
import java.util.Date;
/**
 * @ClassName UserUpdateForm
 * @Description TODO
 * @Author 陈凯裕
 * @Date 2021/4/29 13:26
 * @Version TODO
 **/
@Data
public class UserUpdateForm {
    private Integer id;
    private String password;
    private String email;
    private String mobile;
    private String wechat;
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
    private Date expireTime;
    public boolean valid(){
        if(ObjectUtils.isEmpty(id))
            return false;
        if(
                ObjectUtils.isEmpty(password)&&
                        ObjectUtils.isEmpty(email)&&
                        ObjectUtils.isEmpty(mobile)&&
                        ObjectUtils.isEmpty(wechat)&&
                        ObjectUtils.isEmpty(expireTime)
                )
            return false;
        return true;
    }
    public User formConvertEntity(){
        User user = new User();
        user.setId(id);
        if (!ObjectUtils.isEmpty(password))
            user.setPassword(MD5Utils.saltMD5(AESUtils.decrypt(password)));
        user.setEmail(email);
        user.setMobile(mobile);
        user.setWechat(wechat);
        user.setExpireTime(DateUtils.getDateOfDay(expireTime,1));
        return user;
    }
    public UserDTO paramValid() {
        UserDTO dto = new UserDTO();
        //判断手机号是否符合条件
        if (!ObjectUtils.isEmpty(mobile)) {
            if (!RegexUtils.checkMobile(mobile)) {
                dto.setCode(ResponseCodeEnum.MOBILE_INVALID.getCode());
                dto.setMsg(ResponseCodeEnum.MOBILE_INVALID.getMsg());
                return dto;
            }
        }
        //判断邮箱是否符合条件
        if (!ObjectUtils.isEmpty(email)) {
            if (!RegexUtils.checkEmail(email)) {
                dto.setCode(ResponseCodeEnum.EMAIL_INVALID.getCode());
                dto.setMsg(ResponseCodeEnum.EMAIL_INVALID.getMsg());
                return dto;
            }
        }
        //判断密码是否符合规则
        if (!ObjectUtils.isEmpty(password)) {
            if (!RegexUtils.checkPassword(AESUtils.decrypt(password))) {
                dto.setCode(ResponseCodeEnum.PASSWORD_INVALID.getCode());
                dto.setMsg(ResponseCodeEnum.PASSWORD_INVALID.getMsg());
                return dto;
            }
        }
        dto.setCode(ResponseCodeEnum.SUCCESS.getCode());
        dto.setMsg(ResponseCodeEnum.SUCCESS.getMsg());
        return dto;
    }
}
screen-manage/src/main/java/com/moral/api/pojo/vo/account/AccountUpdateVO.java
@@ -49,4 +49,5 @@
        return vo;
    }
}
screen-manage/src/main/java/com/moral/api/pojo/vo/menu/MenuQueryNamesVO.java
New file
@@ -0,0 +1,51 @@
package com.moral.api.pojo.vo.menu;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.moral.api.entity.Menu;
import com.moral.api.pojo.dto.menu.MenuQueryNamesDTO;
import com.moral.constant.ResponseCodeEnum;
import lombok.Data;
import org.springframework.util.ObjectUtils;
import java.util.ArrayList;
import java.util.List;
/**
 * @ClassName MenuQueryAllNamesVO
 * @Description TODO
 * @Author 陈凯裕
 * @Date 2021/4/28 11:08
 * @Version TODO
 **/
@Data
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class MenuQueryNamesVO {
    List<MenuVO> menuVOs;
    public static MenuQueryNamesVO convert(MenuQueryNamesDTO dto){
        if (dto.getCode() != ResponseCodeEnum.SUCCESS.getCode())
            return null;
        MenuQueryNamesVO vo = new MenuQueryNamesVO();
        List<Menu> menus = dto.getMenus();
        List<MenuVO> vos = new ArrayList<>();
        if(!ObjectUtils.isEmpty(menus)){
            for (Menu menu : menus) {
                MenuVO menuVO = convertToQueryPage(menu);
                vos.add(menuVO);
            }
        }
        vo.setMenuVOs(vos);
        return vo;
    }
    private static MenuVO convertToQueryPage(Menu menu){
        MenuVO vo = new MenuVO();
        vo.setId(menu.getId());
        vo.setName(menu.getName());
        return vo;
    }
}
screen-manage/src/main/java/com/moral/api/pojo/vo/menu/MenuUpdateVO.java
New file
@@ -0,0 +1,27 @@
package com.moral.api.pojo.vo.menu;
import com.moral.api.entity.Menu;
import com.moral.api.pojo.dto.menu.MenuDTO;
import com.moral.constant.ResponseCodeEnum;
/**
 * @ClassName MenuUpdateVO
 * @Description TODO
 * @Author 陈凯裕
 * @Date 2021/4/27 11:59
 * @Version TODO
 **/
public class MenuUpdateVO extends MenuVO {
    public static MenuUpdateVO convert(MenuDTO dto) {
        if (dto.getCode() != ResponseCodeEnum.SUCCESS.getCode())
            return null;
        MenuUpdateVO vo = new MenuUpdateVO();
        Menu menu = dto.getMenu();
        vo.setId(menu.getId());
        vo.setParentId(menu.getParentId());
        vo.setOrder(menu.getOrder());
        vo.setUrl(menu.getUrl());
        vo.setName(menu.getName());
        return vo;
    }
}
screen-manage/src/main/java/com/moral/api/pojo/vo/organization/OrganizationQueryAllNamesVO.java
File was renamed from screen-manage/src/main/java/com/moral/api/pojo/vo/organization/OrganizationQueryNamesVO.java
@@ -2,7 +2,7 @@
import com.fasterxml.jackson.annotation.JsonInclude;
import com.moral.api.entity.Organization;
import com.moral.api.pojo.dto.organization.OrganizationQueryNameDTO;
import com.moral.api.pojo.dto.organization.OrganizationQueryNamesDTO;
import com.moral.constant.ResponseCodeEnum;
import lombok.Data;
import org.springframework.util.ObjectUtils;
@@ -19,15 +19,15 @@
 **/
@Data
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class OrganizationQueryNamesVO  {
public class OrganizationQueryAllNamesVO {
    private List<OrganizationVO> organizationVOs;
    public static OrganizationQueryNamesVO convert(OrganizationQueryNameDTO dto){
    public static OrganizationQueryAllNamesVO convert(OrganizationQueryNamesDTO dto){
        if (dto.getCode() != ResponseCodeEnum.SUCCESS.getCode())
            return null;
        OrganizationQueryNamesVO vo = new OrganizationQueryNamesVO();
        OrganizationQueryAllNamesVO vo = new OrganizationQueryAllNamesVO();
        List<OrganizationVO> vos = new ArrayList<>();
        List<Organization> organizations = dto.getOrganizations();
screen-manage/src/main/java/com/moral/api/pojo/vo/user/UserQueryVO.java
New file
@@ -0,0 +1,74 @@
package com.moral.api.pojo.vo.user;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.moral.api.entity.Organization;
import com.moral.api.entity.User;
import com.moral.api.pojo.dto.user.UserDTO;
import com.moral.api.pojo.dto.user.UserQueryDTO;
import com.moral.constant.ResponseCodeEnum;
import com.moral.util.DateUtils;
import lombok.Data;
import org.springframework.util.ObjectUtils;
import java.util.ArrayList;
import java.util.List;
/**
 * @ClassName UserQueryVO
 * @Description TODO
 * @Author 陈凯裕
 * @Date 2021/4/28 14:58
 * @Version TODO
 **/
@Data
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class UserQueryVO {
    private long pages;
    private long total;
    private long current;
    private long size;
    private List<UserVO> userVOs;
    public static UserQueryVO convert(UserQueryDTO dto) {
        if (dto.getCode() != ResponseCodeEnum.SUCCESS.getCode())
            return null;
        UserQueryVO vo = new UserQueryVO();
        long pages = dto.getPages();
        long total = dto.getTotal();
        long current = dto.getCurrent();
        long size = dto.getSize();
        List<UserDTO> dtos = dto.getUserDTOS();
        List<UserVO>  userVOs = new ArrayList<>();
        if(!ObjectUtils.isEmpty(dtos)){
            for (UserDTO userDTO : dtos) {
                UserVO userVO = convertToQueryPage(userDTO);
                userVOs.add(userVO);
            }
        }
        vo.setPages(pages);
        vo.setTotal(total);
        vo.setCurrent(current);
        vo.setSize(size);
        vo.setUserVOs(userVOs);
        return vo;
    }
    private static UserVO convertToQueryPage(UserDTO dto){
        UserVO vo = new UserVO();
        User user = dto.getUser();
        Organization organization = dto.getOrganization();
        vo.setAccount(user.getAccount());
        vo.setOrganizationName(organization.getName());
        vo.setId(user.getId());
        vo.setCreateTime(DateUtils.dateToDateString(user.getCreateTime(),"yyyy-MM-dd"));
        vo.setExpireTime(DateUtils.dateToDateString(user.getExpireTime(),"yyyy-MM-dd"));
        vo.setEmail(user.getEmail());
        vo.setMobile(user.getMobile());
        return vo;
    }
}
screen-manage/src/main/java/com/moral/api/pojo/vo/user/UserUpdateVO.java
New file
@@ -0,0 +1,24 @@
package com.moral.api.pojo.vo.user;
import com.moral.api.entity.Organization;
import com.moral.api.entity.User;
import com.moral.api.pojo.dto.user.UserDTO;
import com.moral.constant.ResponseCodeEnum;
/**
 * @ClassName UserUpdateVO
 * @Description TODO
 * @Author 陈凯裕
 * @Date 2021/4/29 17:15
 * @Version TODO
 **/
public class UserUpdateVO extends UserVO{
    public UserUpdateVO convert(UserDTO dto){
        if (dto.getCode() != ResponseCodeEnum.SUCCESS.getCode())
            return null;
        UserUpdateVO vo = new UserUpdateVO();
        User user = dto.getUser();
        return null;
    }
}
screen-manage/src/main/java/com/moral/api/pojo/vo/user/UserVO.java
New file
@@ -0,0 +1,30 @@
package com.moral.api.pojo.vo.user;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
/**
 * @ClassName UserVO
 * @Description TODO
 * @Author 陈凯裕
 * @Date 2021/4/28 14:58
 * @Version TODO
 **/
@Data
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class UserVO {
    private Integer id;
    private String account;
    private String organizationName;
    private String email;
    private String mobile;
    private String createTime;
    private String expireTime;
}
screen-manage/src/main/java/com/moral/api/service/MenuService.java
@@ -3,9 +3,12 @@
import com.moral.api.entity.Menu;
import com.baomidou.mybatisplus.extension.service.IService;
import com.moral.api.pojo.dto.menu.MenuDTO;
import com.moral.api.pojo.dto.menu.MenuQueryNamesDTO;
import com.moral.api.pojo.dto.menu.MenuQueryDTO;
import com.moral.api.pojo.form.menu.MenuDeleteForm;
import com.moral.api.pojo.form.menu.MenuInsertForm;
import com.moral.api.pojo.form.menu.MenuQueryNamesForm;
import com.moral.api.pojo.form.menu.MenuUpdateForm;
/**
 * <p>
@@ -17,7 +20,7 @@
 */
public interface MenuService extends IService<Menu> {
    /**
    * @Description: 查询所有菜单
    * @Description: 查询父子结构菜单
            * @Param: []
            * @return: com.moral.api.pojo.dto.menu.MenuQueryDTO
            * @Author: 陈凯裕
@@ -42,4 +45,23 @@
            * @Date: 2021/4/26
            */
    MenuDTO deleteMenu(MenuDeleteForm form);
    /**
    * @Description: 更新菜单
            * @Param: [from]
            * @return: com.moral.api.pojo.dto.menu.MenuDTO
            * @Author: 陈凯裕
            * @Date: 2021/4/27
            */
    MenuDTO updateMenu(MenuUpdateForm form);
    /**
    * @Description: 模糊查询菜单名称和id,不包括传来id,以及其所有子菜单,以及上一级父菜单
            * @Param: [MenuQueryNamesForm form]
            * @return: com.moral.api.pojo.dto.menu.MenuQueryByNameDTO
            * @Author: 陈凯裕
            * @Date: 2021/4/28
            */
    MenuQueryNamesDTO queryNames(MenuQueryNamesForm form);
}
screen-manage/src/main/java/com/moral/api/service/OrganizationService.java
@@ -4,7 +4,7 @@
import com.baomidou.mybatisplus.extension.service.IService;
import com.moral.api.pojo.dto.organization.OrganizationDTO;
import com.moral.api.pojo.dto.organization.OrganizationQueryDTO;
import com.moral.api.pojo.dto.organization.OrganizationQueryNameDTO;
import com.moral.api.pojo.dto.organization.OrganizationQueryNamesDTO;
import com.moral.api.pojo.form.organization.*;
/**
@@ -53,14 +53,15 @@
    OrganizationQueryDTO queryOrganization(OrganizationQueryForm organizationQueryForm);
    /**
    * @Description: 查询所有组织名称和Id,不分页
            * @Param: [organizationQueryNameForm]
            * @return: com.moral.api.pojo.dto.organization.OrganizationQueryNameDTO
    * @Description: 根据条件查询组织名称和id
            * @Param: [form]
            * @return: com.moral.api.pojo.dto.organization.OrganizationQueryNamesDTO
            * @Author: 陈凯裕
            * @Date: 2021/4/13
            * @Date: 2021/5/6
            */
    OrganizationQueryNameDTO queryOrganizationNames(OrganizationQueryNameForm organizationQueryNameForm);
     OrganizationQueryNamesDTO queryNames(OrganizationQueryNamesForm form);
}
screen-manage/src/main/java/com/moral/api/service/UserService.java
@@ -2,7 +2,12 @@
import com.moral.api.entity.User;
import com.baomidou.mybatisplus.extension.service.IService;
import com.moral.api.pojo.dto.user.UserDTO;
import com.moral.api.pojo.dto.user.UserQueryDTO;
import com.moral.api.pojo.form.user.UserDeleteForm;
import com.moral.api.pojo.form.user.UserInsertForm;
import com.moral.api.pojo.form.user.UserQueryForm;
import com.moral.api.pojo.form.user.UserUpdateForm;
/**
 * <p>
@@ -14,4 +19,12 @@
 */
public interface UserService extends IService<User> {
    UserQueryDTO queryUsers(UserQueryForm form);
    UserDTO updateUser(UserUpdateForm form);
    UserDTO deleteUser(UserDeleteForm form);
    UserDTO insertUser(UserInsertForm form);
}
screen-manage/src/main/java/com/moral/api/service/impl/ManageAccountServiceImpl.java
@@ -223,7 +223,7 @@
        StringBuilder content = new StringBuilder();
        content.append("添加了用户:").append(manageAccount.getUserName() + ";")
                .append("account:" + manageAccount.getAccount() + ";");
        logUtils.saveOperationForManage(request, content.toString(),Constants.INSERT_OPERATE_TYPE);
        logUtils.saveOperationForManage(request, content.toString(), Constants.INSERT_OPERATE_TYPE);
        return accountDTO;
    }
@@ -240,7 +240,7 @@
        AccountQueryDTO accountQueryDTO = new AccountQueryDTO();
        //取参
        Integer pageCount = accountQueryForm.getPage();
        Integer page = accountQueryForm.getPage();
        Integer size = accountQueryForm.getSize();
        String userName = accountQueryForm.getUserName();
        String email = accountQueryForm.getEmail();
@@ -250,10 +250,10 @@
        String order = accountQueryForm.getOrder();
        String orderType = accountQueryForm.getOrderType();
        Date createStartTime = accountQueryForm.getCreateStartTime();
        Date createEndTime = DateUtils.getDateOfDay(accountQueryForm.getCreateEndTime(), 1);
        Date createEndTime = accountQueryForm.getCreateEndTime();
        //组装查询条件
        Page<ManageAccount> page = new Page<>(pageCount, size);
        Page<ManageAccount> queryPage = new Page<>(page, size);
        NullFilterWrapper<ManageAccount> wrapper = new NullFilterWrapper<>();
        wrapper.like("user_name", userName);
@@ -275,20 +275,19 @@
            wrapper.eq("is_delete", Constants.NOT_DELETE);
        //查询结果
        Page resultPage = manageAccountMapper.selectPage(page, wrapper);
        Page resultPage = manageAccountMapper.selectPage(queryPage, wrapper);
        //查询用户对应的角色
        List<ManageAccount> accounts = resultPage.getRecords();
        List<AccountDTO> accountDTOS = new ArrayList<>();
        if (!ObjectUtils.isEmpty(accounts)) {
            for (ManageAccount manageAccount : accounts) {
                AccountDTO accountDTO = new AccountDTO();
                List<ManageRole> roles = manageRoleMapper.getManageRoleByAccountId(manageAccount.getId());
                accountDTO.setRoles(roles);
                accountDTO.setAccount(manageAccount);
                accountDTOS.add(accountDTO);
            }
        for (ManageAccount manageAccount : accounts) {
            AccountDTO accountDTO = new AccountDTO();
            List<ManageRole> roles = manageRoleMapper.getManageRoleByAccountId(manageAccount.getId());
            accountDTO.setRoles(roles);
            accountDTO.setAccount(manageAccount);
            accountDTOS.add(accountDTO);
        }
        //封装返回结果
        accountQueryDTO.setAccountDTOS(accountDTOS);
@@ -346,7 +345,7 @@
        StringBuilder content = new StringBuilder();
        content.append("删除了用户:").append(existManageAccount.getUserName() + ";")
                .append("账号:" + existManageAccount.getAccount() + ";");
        logUtils.saveOperationForManage(request, content.toString(),Constants.DELETE_OPERATE_TYPE);
        logUtils.saveOperationForManage(request, content.toString(), Constants.DELETE_OPERATE_TYPE);
        return accountDTO;
    }
@@ -366,22 +365,22 @@
        ManageAccount manageAccount = accountUpdateForm.formConvertEntity();
        List<Integer> roleIds = accountUpdateForm.getRoleIds();
        //判断要更新的用户是否存在
        QueryWrapper<ManageAccount> exitWrapper = new QueryWrapper<>();
        ManageAccount exitManageAccount = new ManageAccount();
        exitManageAccount.setId(manageAccount.getId());
        exitManageAccount.setIsDelete(Constants.NOT_DELETE);
        exitWrapper.setEntity(exitManageAccount);
        exitManageAccount = manageAccountMapper.selectOne(exitWrapper);
        if (ObjectUtils.isEmpty(exitManageAccount)) {
        //查找要更新的用户用于插入日志
        QueryWrapper<ManageAccount> oldAccountWrapper = new QueryWrapper<>();
        ManageAccount oldManageAccount = new ManageAccount();
        oldManageAccount.setId(manageAccount.getId());
        oldManageAccount.setIsDelete(Constants.NOT_DELETE);
        oldAccountWrapper.setEntity(oldManageAccount);
        oldManageAccount = manageAccountMapper.selectOne(oldAccountWrapper);
        if (ObjectUtils.isEmpty(oldManageAccount)) {
            accountDTO.setCode(ResponseCodeEnum.ACCOUNT_NOT_EXIST.getCode());
            accountDTO.setMsg(ResponseCodeEnum.ACCOUNT_NOT_EXIST.getMsg());
            return accountDTO;
        }
        //更新ManageAccount表
        Map manageAccountMap = JSONObject.parseObject(JSON.toJSONString(manageAccount),Map.class);//转换为Map判断属性是否有更新
        if (manageAccountMap.size()>1) {//判断如果account表中没有相应字段更新则不更新
        Map manageAccountMap = JSONObject.parseObject(JSON.toJSONString(manageAccount), Map.class);//转换为Map判断属性是否有更新
        if (manageAccountMap.size() > 1) {//判断如果没有除了id以外的任何属性则不更新
            manageAccountMapper.updateById(manageAccount);
        }
        //获取更新后的对象
@@ -420,7 +419,7 @@
        accountDTO.setAccount(manageAccount);
        //操作插入日志
        insertUpdateLog(accountUpdateForm, exitManageAccount, oldRoles);
        insertUpdateLog(accountUpdateForm, oldManageAccount, oldRoles);
        return accountDTO;
    }
@@ -465,7 +464,7 @@
                    }
                    if (!ObjectUtils.isEmpty(oldRoles)) {
                        oldRolesName.deleteCharAt(oldRolesName.length()-1);//删除 "空"
                        oldRolesName.deleteCharAt(oldRolesName.length() - 1);//删除 "空"
                        oldRolesName.append("[");
                        for (ManageRole role : oldRoles) {
                            oldRolesName.append(role.getName() + ",");
@@ -475,7 +474,7 @@
                    }
                    if (!ObjectUtils.isEmpty(newRoles)) {
                        newRolesName.deleteCharAt(newRolesName.length()-1);//删除 "空"
                        newRolesName.deleteCharAt(newRolesName.length() - 1);//删除 "空"
                        newRolesName.append("[");
                        for (ManageRole role : newRoles) {
                            newRolesName.append(role.getName() + ",");
@@ -484,7 +483,7 @@
                        newRolesName.append("]");
                    }
                    //拼接完整content
                    content.append(value+":"+oldRolesName + "->" + newRolesName + ";");
                    content.append(value + ":" + oldRolesName + "->" + newRolesName + ";");
                }
            } else {//其他属性处理
                if (newParameters.get(key) != null) {
screen-manage/src/main/java/com/moral/api/service/impl/MenuServiceImpl.java
@@ -2,13 +2,16 @@
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.moral.api.entity.ManageMenu;
import com.moral.api.config.mybatis.wrapper.NullFilterWrapper;
import com.moral.api.entity.Menu;
import com.moral.api.mapper.MenuMapper;
import com.moral.api.pojo.dto.menu.MenuDTO;
import com.moral.api.pojo.dto.menu.MenuQueryDTO;
import com.moral.api.pojo.dto.menu.MenuQueryNamesDTO;
import com.moral.api.pojo.form.menu.MenuDeleteForm;
import com.moral.api.pojo.form.menu.MenuInsertForm;
import com.moral.api.pojo.form.menu.MenuQueryNamesForm;
import com.moral.api.pojo.form.menu.MenuUpdateForm;
import com.moral.api.service.MenuService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.moral.constant.Constants;
@@ -43,7 +46,9 @@
        //创建返回对象
        MenuQueryDTO dto = new MenuQueryDTO();
        //获取所有菜单
        List<Menu> menus = menuMapper.selectList(null);
        QueryWrapper wrapper = new QueryWrapper();
        wrapper.eq("is_delete", Constants.NOT_DELETE);
        List<Menu> menus = menuMapper.selectList(wrapper);
        //组合menu父子结构
        Map<Integer, Menu> menuMap = new HashMap<>();
        for (Menu menu : menus) {
@@ -53,7 +58,7 @@
        for (Menu menu : menus) {
            combinationParentChildrenMenus(menuMap, menu);
        }
        //删除非跟菜单
        //删除非根菜单
        menus.removeIf(new Predicate<Menu>() {
            @Override
            public boolean test(Menu menu) {
@@ -94,6 +99,7 @@
            dto.setMsg(ResponseCodeEnum.MENU_IS_EXIST.getMsg());
            return dto;
        }
        //执行插入逻辑
        menuMapper.insert(menu);
        //封装返回对象
@@ -116,15 +122,18 @@
            dto.setMsg(ResponseCodeEnum.MENU_IS_NULL.getMsg());
            return dto;
        }
        //执行逻辑删除
        existMenu.setIsDelete(Constants.DELETE);
        menuMapper.updateById(existMenu);
        //删除所有子菜单
        List<Integer> childrenIds = getChildrenIdsByParentId(id);
        UpdateWrapper wrapper = new UpdateWrapper();
        wrapper.in("id",childrenIds);
        wrapper.set("is_delete",Constants.DELETE);
        menuMapper.update(null,wrapper);
        if (!ObjectUtils.isEmpty(childrenIds)) {
            UpdateWrapper wrapper = new UpdateWrapper();
            wrapper.in("id", childrenIds);
            wrapper.set("is_delete", Constants.DELETE);
            menuMapper.update(null, wrapper);
        }
        //删除根菜单
        existMenu.setIsDelete(Constants.DELETE);
        menuMapper.updateById(existMenu);
        //封装返回对象
        dto.setCode(ResponseCodeEnum.SUCCESS.getCode());
        dto.setMsg(ResponseCodeEnum.SUCCESS.getMsg());
@@ -132,6 +141,83 @@
        return dto;
    }
    @Override
    public MenuDTO updateMenu(MenuUpdateForm form) {
        //创建返回对象
        MenuDTO dto = new MenuDTO();
        //取参
        Menu menu = form.formConvertEntity();
        //查找更新前的菜单用于插入日志
        QueryWrapper<Menu> oldMenuWrapper = new QueryWrapper<>();
        Menu oldMenu = new Menu();
        oldMenu.setId(menu.getId());
        oldMenu.setIsDelete(Constants.NOT_DELETE);
        oldMenuWrapper.setEntity(oldMenu);
        oldMenu = menuMapper.selectOne(oldMenuWrapper);
        if (ObjectUtils.isEmpty(oldMenu)) {
            dto.setCode(ResponseCodeEnum.MENU_IS_NULL.getCode());
            dto.setMsg(ResponseCodeEnum.MENU_IS_NULL.getMsg());
            return dto;
        }
        //更新
        menuMapper.updateById(menu);
        //获取更新后的对象
        menu = menuMapper.selectById(menu.getId());
        //封装返回对象
        dto.setMenu(menu);
        dto.setCode(ResponseCodeEnum.SUCCESS.getCode());
        dto.setMsg(ResponseCodeEnum.SUCCESS.getMsg());
        return dto;
    }
    @Override
    public MenuQueryNamesDTO queryNames(MenuQueryNamesForm form) {
        //创建返回对象
        MenuQueryNamesDTO dto = new MenuQueryNamesDTO();
        //取参
        Integer id = form.getId();
        String name = form.getName();
        //查询结果
        NullFilterWrapper<Menu> wrapper = new NullFilterWrapper<>();
        wrapper.eq("is_delete", Constants.NOT_DELETE);
        wrapper.like("name",name);
        List<Menu> menus = menuMapper.selectList(wrapper);
        //过滤该id对应的所有子菜单
        List<Integer> childrenIds = getChildrenIdsByParentId(id);//获取所有子菜单id结合
        if (ObjectUtils.isEmpty(childrenIds)) {
            menus.removeIf(new Predicate<Menu>() {
                @Override
                public boolean test(Menu m) {
                    if (m.getId().equals(id))
                        return true;
                    return false;
                }
            });
        } else {
            menus.removeIf(new Predicate<Menu>() {
                @Override
                public boolean test(Menu m) {
                    if (childrenIds.contains(m.getId()) || m.getId().equals(id))
                        return true;
                    return false;
                }
            });
        }
        //封装返回对象
        dto.setMenus(menus);
        dto.setCode(ResponseCodeEnum.SUCCESS.getCode());
        dto.setMsg(ResponseCodeEnum.SUCCESS.getMsg());
        return dto;
    }
    /**
     * @Description: 把传来的menu放到menuMap对应的父菜单中
     * @Param: [menuMap, menu]
     * @return: void
     * @Author: 陈凯裕
     * @Date: 2021/5/6
     */
    private void combinationParentChildrenMenus(Map<Integer, Menu> menuMap, Menu menu) {
        Integer parentId = menu.getParentId();
        Menu parentMenu = menuMap.get(parentId);
@@ -141,15 +227,17 @@
    }
    /**
    * @Description: 根据菜单的id获取封装好children的menu对象
            * @Param: [id]
            * @return: com.moral.api.entity.Menu
            * @Author: 陈凯裕
            * @Date: 2021/4/26
            */
    private Menu getMenuAndChildrenById(Integer id){
     * @Description: 根据菜单的id获取封装好children的menu对象
     * @Param: [id]
     * @return: com.moral.api.entity.Menu
     * @Author: 陈凯裕
     * @Date: 2021/4/26
     */
    private Menu getMenuAndChildrenById(Integer id) {
        //获取所有菜单
        List<Menu> menus = menuMapper.selectList(null);
        QueryWrapper wrapper = new QueryWrapper();
        wrapper.eq("is_delete", Constants.NOT_DELETE);
        List<Menu> menus = menuMapper.selectList(wrapper);
        //组合menu父子结构
        Map<Integer, Menu> menuMap = new HashMap<>();
        for (Menu menu : menus) {
@@ -164,39 +252,41 @@
    }
    /**
    * @Description: 获取该菜单下的所有子菜单id集合
            * @Param: [id]
            * @return: java.util.List<java.lang.Integer>
            * @Author: 陈凯裕
            * @Date: 2021/4/26
            */
    private List<Integer> getChildrenIdsByParentId(Integer id){
     * @Description: 获取该菜单下的所有子菜单id集合
     * @Param: [id]
     * @return: java.util.List<java.lang.Integer>
     * @Author: 陈凯裕
     * @Date: 2021/4/26
     */
    private List<Integer> getChildrenIdsByParentId(Integer id) {
        Menu parentMenu = getMenuAndChildrenById(id);
        List<Menu> children = parentMenu.getChildren();
        List<Integer> childrenIds = new ArrayList<>();
        for (Menu child : children) {
            recursiveAccess(child,childrenIds);
        List<Integer> childrenIds = null;
        if (!ObjectUtils.isEmpty(parentMenu.getChildren())) {
            List<Menu> children = parentMenu.getChildren();
            childrenIds = new ArrayList<>();
            for (Menu child : children) {
                recursiveAccess(child, childrenIds);
            }
        }
        return childrenIds;
    }
    /**
    * @Description: 递归获取菜单的id放入集合中
            * @Param: [menu, ids]
            * @return: void
            * @Author: 陈凯裕
            * @Date: 2021/4/26
            */
    private void recursiveAccess(Menu menu,List<Integer> ids){
     * @Description: 递归获取菜单的id放入集合中
     * @Param: [menu, ids]
     * @return: void
     * @Author: 陈凯裕
     * @Date: 2021/4/26
     */
    private void recursiveAccess(Menu menu, List<Integer> ids) {
        ids.add(menu.getId());
        List<Menu> children = menu.getChildren();
        if(!ObjectUtils.isEmpty(children)){
        if (!ObjectUtils.isEmpty(children)) {
            for (Menu child : children) {
                recursiveAccess(child,ids);
                recursiveAccess(child, ids);
            }
        }
    }
}
screen-manage/src/main/java/com/moral/api/service/impl/OrganizationServiceImpl.java
@@ -10,7 +10,7 @@
import com.moral.api.mapper.OrganizationMapper;
import com.moral.api.pojo.dto.organization.OrganizationDTO;
import com.moral.api.pojo.dto.organization.OrganizationQueryDTO;
import com.moral.api.pojo.dto.organization.OrganizationQueryNameDTO;
import com.moral.api.pojo.dto.organization.OrganizationQueryNamesDTO;
import com.moral.api.pojo.form.organization.*;
import com.moral.api.service.OrganizationService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -19,7 +19,6 @@
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;
@@ -30,7 +29,6 @@
import javax.servlet.http.HttpServletRequest;
import java.util.*;
import java.util.function.Predicate;
/**
 * <p>
@@ -128,14 +126,14 @@
        //form转entity
        Organization organization = organizationUpdateForm.formConvertEntity();
        //查询组织是否存在
        QueryWrapper<Organization> existWrapper = new QueryWrapper<>();
        Organization existOrganization = new Organization();
        existOrganization.setId(organization.getId());
        existOrganization.setIsDelete(Constants.NOT_DELETE);
        existWrapper.setEntity(existOrganization);
        existOrganization = organizationMapper.selectOne(existWrapper);
        if (ObjectUtils.isEmpty(existOrganization)) {
        //查找要更新的组织用于插入日志
        QueryWrapper<Organization> oldWrapper = new QueryWrapper<>();
        Organization oldOrganization = new Organization();
        oldOrganization.setId(organization.getId());
        oldOrganization.setIsDelete(Constants.NOT_DELETE);
        oldWrapper.setEntity(oldOrganization);
        oldOrganization = organizationMapper.selectOne(oldWrapper);
        if (ObjectUtils.isEmpty(oldOrganization)) {
            organizationDTO.setCode(ResponseCodeEnum.ORGANIZATION_NOT_EXIST.getCode());
            organizationDTO.setMsg(ResponseCodeEnum.ORGANIZATION_NOT_EXIST.getMsg());
            return organizationDTO;
@@ -170,7 +168,7 @@
        organizationDTO.setMsg(ResponseCodeEnum.SUCCESS.getMsg());
        //操作插入日志
        insertUpdateLog(organizationUpdateForm, organization, existOrganization);
        insertUpdateLog(organizationUpdateForm, organization, oldOrganization);
        return organizationDTO;
    }
@@ -236,6 +234,8 @@
                organizationMapper.update(null, updateWrapper);
            }
        }
        //删除组织对应账号
        //封装返回结果
        dto.setOrganization(existOrganization);
@@ -338,20 +338,17 @@
    }
    /**
     * @Description: 查询所有组织的名称和Id,不做分页
     * @Param: [organizationQueryNameForm]
     * @Description: 查询所有组织的名称和Id
     * @Param: []
     * @return: com.moral.api.pojo.dto.organization.OrganizationQueryNameDTO
     * @Author: 陈凯裕
     * @Date: 2021/4/13
     */
    @Override
    public OrganizationQueryNameDTO queryOrganizationNames(OrganizationQueryNameForm form) {
        OrganizationQueryNameDTO dto = new OrganizationQueryNameDTO();
        //取参
        String name = form.getName();
    public OrganizationQueryNamesDTO queryNames(OrganizationQueryNamesForm from) {
        OrganizationQueryNamesDTO dto = new OrganizationQueryNamesDTO();
        //构造查询条件
        NullFilterWrapper<Organization> queryWrapper = new NullFilterWrapper();
        queryWrapper.like("name", name);
        QueryWrapper<Organization> queryWrapper = new QueryWrapper();
        queryWrapper.eq("is_delete", Constants.NOT_DELETE);
        //查询
        List<Organization> organizations = organizationMapper.selectList(queryWrapper);
screen-manage/src/main/java/com/moral/api/service/impl/UserServiceImpl.java
@@ -1,10 +1,33 @@
package com.moral.api.service.impl;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.moral.api.config.mybatis.wrapper.NullFilterWrapper;
import com.moral.api.entity.Organization;
import com.moral.api.entity.User;
import com.moral.api.mapper.OrganizationMapper;
import com.moral.api.mapper.UserMapper;
import com.moral.api.pojo.dto.user.UserDTO;
import com.moral.api.pojo.dto.user.UserQueryDTO;
import com.moral.api.pojo.form.user.UserDeleteForm;
import com.moral.api.pojo.form.user.UserInsertForm;
import com.moral.api.pojo.form.user.UserQueryForm;
import com.moral.api.pojo.form.user.UserUpdateForm;
import com.moral.api.service.UserService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.moral.constant.Constants;
import com.moral.constant.ResponseCodeEnum;
import com.moral.util.ConvertUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
 * <p>
@@ -17,4 +40,186 @@
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
    @Autowired
    UserMapper userMapper;
    @Autowired
    OrganizationMapper organizationMapper;
    @Override
    public UserQueryDTO queryUsers(UserQueryForm form) {
        //创建返回对象
        UserQueryDTO dto = new UserQueryDTO();
        //取参
        Integer page = form.getPage();
        Integer size = form.getSize();
        String email = form.getEmail();
        String mobile = form.getMobile();
        String wechat = form.getWechat();
        String order = form.getOrder();
        String orderType = form.getOrderType();
        Integer organizationId = form.getOrganizationId();
        Date exipreStartTime = form.getExpireStartTime();
        Date exipreEndTime = form.getExpireEndTime();
        Date createStartTime = form.getCreateStartTime();
        Date createEndTime = form.getCreateEndTime();
        Integer isDelete = form.getIsDelete();
        //组装查询条件
        Page<User> queryPage = new Page<>(page, size);
        NullFilterWrapper<User> wrapper = new NullFilterWrapper<>();
        wrapper.like("email", email);
        wrapper.like("wechat", wechat);
        wrapper.like("mobile", mobile);
        wrapper.eq("is_admin", 1);
        wrapper.eq("organization_id", organizationId);
        wrapper.between("create_time", createStartTime, createEndTime);
        wrapper.between("expire_time", exipreStartTime, exipreEndTime);
        //排序顺序条件构造
        if (!ObjectUtils.isEmpty(order) && !ObjectUtils.isEmpty(orderType)) {
            if (orderType.equals(Constants.ORDER_ASC))
                wrapper.orderByAsc(ConvertUtils.toLine(order));
            else
                wrapper.orderByDesc(ConvertUtils.toLine(order));
        }
        //逻辑删除条件构造
        if (!ObjectUtils.isEmpty(isDelete))
            wrapper.eq("is_delete", isDelete);
        else
            wrapper.eq("is_delete", Constants.NOT_DELETE);
        //查询结果
        Page<User> resultPage = userMapper.selectPage(queryPage, wrapper);
        List<User> users = resultPage.getRecords();
        //查询用户对应组织
        List<UserDTO> userDTOS = new ArrayList<>();
        for (User user : users) {
            UserDTO userDTO = new UserDTO();
            Organization organization = new Organization();
            organization.setId(user.getOrganizationId());
            organization.setIsDelete(Constants.NOT_DELETE);
            QueryWrapper<Organization> organizationWrapper = new QueryWrapper<>();
            organizationWrapper.setEntity(organization);
            organization = organizationMapper.selectOne(organizationWrapper);
            userDTO.setUser(user);
            userDTO.setOrganization(organization);
            userDTOS.add(userDTO);
        }
        //封装返回结果
        dto.setUserDTOS(userDTOS);
        dto.setCurrent(resultPage.getCurrent());
        dto.setPages(resultPage.getPages());
        dto.setSize(resultPage.getSize());
        dto.setTotal(resultPage.getTotal());
        dto.setCode(ResponseCodeEnum.SUCCESS.getCode());
        dto.setMsg(ResponseCodeEnum.SUCCESS.getMsg());
        return dto;
    }
    @Override
    @Transactional
    public UserDTO updateUser(UserUpdateForm form) {
        //创建返回对象
        UserDTO dto = new UserDTO();
        //取参
        User user = form.formConvertEntity();
        //查找要更新的用户 用于插入日志
        QueryWrapper<User> oldUserWrapper = new QueryWrapper<>();
        User oldUser = new User();
        oldUser.setId(user.getId());
        oldUser.setIsDelete(Constants.NOT_DELETE);
        oldUserWrapper.setEntity(oldUser);
        oldUser = userMapper.selectOne(oldUserWrapper);
        if (ObjectUtils.isEmpty(oldUser)) {
            dto.setCode(ResponseCodeEnum.USER_NOT_EXIST.getCode());
            dto.setMsg(ResponseCodeEnum.USER_NOT_EXIST.getMsg());
            return dto;
        }
        //更新
        userMapper.updateById(user);
        //封装返回结果
        dto.setCode(ResponseCodeEnum.SUCCESS.getCode());
        dto.setMsg(ResponseCodeEnum.SUCCESS.getMsg());
        return dto;
    }
    @Override
    @Transactional
    public UserDTO deleteUser(UserDeleteForm form) {
        //创建返回对象
        UserDTO dto = new UserDTO();
        //取参
        Integer id = form.getId();
        //查询要删除的用户 用于插入日志
        User oldUser = new User();
        oldUser.setIsDelete(Constants.NOT_DELETE);
        oldUser.setId(id);
        QueryWrapper<User> oldWrapper = new QueryWrapper<>();
        oldWrapper.setEntity(oldUser);
        oldUser = userMapper.selectOne(oldWrapper);
        if(ObjectUtils.isEmpty(oldUser)){
            dto.setCode(ResponseCodeEnum.USER_NOT_EXIST.getCode());
            dto.setMsg(ResponseCodeEnum.USER_NOT_EXIST.getMsg());
            return dto;
        }
        //逻辑删除,删除账号以及该组织下的所有账号
        UpdateWrapper<User> deleteWrapper = new UpdateWrapper<>();
        deleteWrapper.eq("organization_id",oldUser.getOrganizationId());
        deleteWrapper.set("is_delete",Constants.DELETE);
        userMapper.update(null,deleteWrapper);
        //返回结果
        dto.setCode(ResponseCodeEnum.SUCCESS.getCode());
        dto.setMsg(ResponseCodeEnum.SUCCESS.getMsg());
        return dto;
    }
    @Override
    @Transactional
    public UserDTO insertUser(UserInsertForm form) {
        //创建返回对象
        UserDTO dto = new UserDTO();
        //取参
        User user = form.formConvertEntity();
        //判断账号是否存在
        User existUser = new User();
        existUser.setAccount(user.getAccount());
        existUser.setIsDelete(Constants.NOT_DELETE);
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        wrapper.setEntity(existUser);
        User existUserResult = userMapper.selectOne(wrapper);
        if(!ObjectUtils.isEmpty(existUserResult)){
            dto.setCode(ResponseCodeEnum.USER_EXIST.getCode());
            dto.setMsg(ResponseCodeEnum.USER_EXIST.getMsg());
            return dto;
        }
        //判断组织是否已经存在管理员账号
        Integer organizationId = user.getOrganizationId();
        User organizationUser = new User();
        organizationUser.setIsAdmin(true);
        organizationUser.setIsDelete(Constants.NOT_DELETE);
        organizationUser.setOrganizationId(organizationId);
        QueryWrapper<User> organizationUserWrapper = new QueryWrapper<>();
        organizationUserWrapper.setEntity(organizationUser);
        organizationUser = userMapper.selectOne(organizationUserWrapper);
        if(!ObjectUtils.isEmpty(organizationUser)){
            dto.setCode(ResponseCodeEnum.ORGANIZATION_USER_EXIST.getCode());
            dto.setMsg(ResponseCodeEnum.ORGANIZATION_USER_EXIST.getMsg());
            return dto;
        }
        //插入
        userMapper.insert(user);
        //封装返回结果
        dto.setCode(ResponseCodeEnum.SUCCESS.getCode());
        dto.setMsg(ResponseCodeEnum.SUCCESS.getMsg());
        return dto;
    }
}
screen-manage/src/main/resources/application-dev.yml
@@ -18,13 +18,9 @@
  application:
    name: screen-manage
  redis:
    #cluster:
      #nodes: 47.112.126.78:7001,47.112.126.78:7002,47.112.126.132:7003,47.112.126.132:7004,47.112.132.193:7005,47.112.132.193:7006
    #password: test
    #timeout: 500
      host: 39.97.177.149
      host: r-bp1xdlb9wfc6zt0msp.redis.rds.aliyuncs.com
      port: 6379
      password: chenkaiyu111
      password: moral_123456
      timeout: 30000
      jedis:
        pool:
@@ -39,9 +35,9 @@
          max-wait: 30000
          min-idle: 32
  tokenRedis:
    host: 39.97.177.149
    host: r-bp1xdlb9wfc6zt0msp.redis.rds.aliyuncs.com
    port: 6379
    password: chenkaiyu111
    password: moral_123456
    timeout: 30000
    database: 14
    pool:
@@ -59,12 +55,10 @@
    filters: stat
    type: com.alibaba.druid.pool.DruidDataSource
    max-wait: 60000
    url: jdbc:mysql://39.97.177.149:3306/moral?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
    username: root
    password: chenkaiyu111
    #url: jdbc:mysql://vp9l57dtd2vng7oxft1t.rwlb.rds.aliyuncs.com:3306/moral?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
    #username: root
    #password: moral_123456
    url: jdbc:mysql://vp9l57dtd2vng7oxft1t-rw4rm.rwlb.rds.aliyuncs.com:3306/moral?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
    username: root
    password: moral_123456
    test-on-borrow: false
    sql-script-encoding: utf-8
    pool-prepared-statements: true