Преглед изворни кода

新增用户管理增删改

wangliang пре 1 година
родитељ
комит
aeaf673a8b

+ 115 - 0
sop-business/src/main/java/com/qmth/sop/business/bean/dto/UserDto.java

@@ -0,0 +1,115 @@
+package com.qmth.sop.business.bean.dto;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.qmth.sop.business.entity.SysRole;
+import com.qmth.sop.common.enums.GenderEnum;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @Description: 用户dto
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2023/8/7
+ */
+public class UserDto implements Serializable {
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long id;
+
+    private String loginName;
+    private String realName;
+    private String mobileNumber;
+    private Boolean enable;
+    private String remark;
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long orgId;
+
+    private String orgName;
+    private GenderEnum gender;
+    private List<SysRole> roles;
+
+    public GenderEnum getGender() {
+        return gender;
+    }
+
+    public void setGender(GenderEnum gender) {
+        this.gender = gender;
+    }
+
+    public List<SysRole> getRoles() {
+        return roles;
+    }
+
+    public void setRoles(List<SysRole> roles) {
+        this.roles = roles;
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getLoginName() {
+        return loginName;
+    }
+
+    public void setLoginName(String loginName) {
+        this.loginName = loginName;
+    }
+
+    public String getRealName() {
+        return realName;
+    }
+
+    public void setRealName(String realName) {
+        this.realName = realName;
+    }
+
+    public String getMobileNumber() {
+        return mobileNumber;
+    }
+
+    public void setMobileNumber(String mobileNumber) {
+        this.mobileNumber = mobileNumber;
+    }
+
+    public Boolean getEnable() {
+        return enable;
+    }
+
+    public void setEnable(Boolean enable) {
+        this.enable = enable;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    public Long getOrgId() {
+        return orgId;
+    }
+
+    public void setOrgId(Long orgId) {
+        this.orgId = orgId;
+    }
+
+    public String getOrgName() {
+        return orgName;
+    }
+
+    public void setOrgName(String orgName) {
+        this.orgName = orgName;
+    }
+}

+ 45 - 0
sop-business/src/main/java/com/qmth/sop/business/entity/SysUser.java

@@ -1,12 +1,18 @@
 package com.qmth.sop.business.entity;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import com.qmth.sop.common.base.BaseEntity;
+import com.qmth.sop.common.enums.GenderEnum;
 import com.qmth.sop.common.enums.UserSourceEnum;
+import com.qmth.sop.common.util.Base64Util;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+import org.hibernate.validator.constraints.Length;
 
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
 import java.io.Serializable;
 
 /**
@@ -23,9 +29,12 @@ public class SysUser extends BaseEntity implements Serializable {
     private static final long serialVersionUID = 1L;
 
     @ApiModelProperty(value = "用户名")
+    @NotBlank(message = "请输入登录名")
+    @Length(message = "登录名不能超过{max}个字符", max = 30)
     private String loginName;
 
     @ApiModelProperty(value = "姓名")
+    @Length(message = "姓名不能超过{max}个字符", max = 32)
     private String realName;
 
     @ApiModelProperty(value = "工号")
@@ -35,15 +44,20 @@ public class SysUser extends BaseEntity implements Serializable {
     private String password;
 
     @ApiModelProperty(value = "手机号")
+    @Length(message = "手机号码不能超过{max}个字符", max = 25)
     private String mobileNumber;
 
     @ApiModelProperty(value = "机构id")
     @JsonSerialize(using = ToStringSerializer.class)
+    @NotNull(message = "请选择机构")
     private Long orgId;
 
     @ApiModelProperty(value = "是否启用,0:停用,1:启用")
     private Boolean enable;
 
+    @ApiModelProperty(value = "性别,MAN:男,WOMAN:女")
+    private GenderEnum gender;
+
     @ApiModelProperty(value = "密码修改次数,默认为0")
     private Integer pwdCount;
 
@@ -56,6 +70,37 @@ public class SysUser extends BaseEntity implements Serializable {
     @ApiModelProperty(value = "来源,SYSTEM:系统自带,ARCHIVES:档案")
     private UserSourceEnum source;
 
+    @JsonSerialize(using = ToStringSerializer.class)
+    @TableField(exist = false)
+    @NotNull(message = "请选择角色")
+    private Long[] roleIds;
+
+    public Long[] getRoleIds() {
+        return roleIds;
+    }
+
+    public void setRoleIds(Long[] roleIds) {
+        this.roleIds = roleIds;
+    }
+
+    public GenderEnum getGender() {
+        return gender;
+    }
+
+    public void setGender(GenderEnum gender) {
+        this.gender = gender;
+    }
+
+    /**
+     * 设置密码
+     *
+     * @param password
+     */
+    public void setPasswordInfo(String password) {
+        this.password = Base64Util.encode(password.substring(password.length() - 6, password.length()).getBytes());
+        this.enable = true;
+    }
+
     public UserSourceEnum getSource() {
         return source;
     }

+ 11 - 0
sop-business/src/main/java/com/qmth/sop/business/entity/SysUserRole.java

@@ -2,6 +2,7 @@ package com.qmth.sop.business.entity;
 
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.qmth.sop.common.contant.SystemConstant;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -39,6 +40,16 @@ public class SysUserRole implements Serializable {
     @ApiModelProperty(value = "是否启用,0:停用,1:启用")
     private Boolean enable;
 
+    public SysUserRole() {
+
+    }
+
+    public SysUserRole(Long userId, Long roleId) {
+        this.id = SystemConstant.getDbUuid();
+        this.userId = userId;
+        this.roleId = roleId;
+    }
+
     public Long getId() {
         return id;
     }

+ 10 - 0
sop-business/src/main/java/com/qmth/sop/business/mapper/SysRoleMapper.java

@@ -2,6 +2,9 @@ package com.qmth.sop.business.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.qmth.sop.business.entity.SysRole;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +16,11 @@ import com.qmth.sop.business.entity.SysRole;
  */
 public interface SysRoleMapper extends BaseMapper<SysRole> {
 
+    /**
+     * 根据userId查询角色
+     *
+     * @param userId
+     * @return
+     */
+    List<SysRole> listRolesByUserId(@Param("userId") Long userId);
 }

+ 15 - 0
sop-business/src/main/java/com/qmth/sop/business/mapper/SysUserMapper.java

@@ -1,12 +1,15 @@
 package com.qmth.sop.business.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.qmth.sop.business.bean.dto.UserDto;
 import com.qmth.sop.business.bean.dto.VerifyCodeCheckDto;
 import com.qmth.sop.business.bean.result.SysUserResult;
 import com.qmth.sop.business.entity.SysUser;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -51,4 +54,16 @@ public interface SysUserMapper extends BaseMapper<SysUser> {
      * @return 验证码记录结果
      */
     List<VerifyCodeCheckDto> findVerifyCodeByUser(@Param("userId") Long userId, @Param("mobileNumber") String mobileNumber);
+
+    /**
+     * 查询用户
+     *
+     * @param iPage
+     * @param userInfo
+     * @param orgId
+     * @param roleId
+     * @param enable
+     * @return
+     */
+    IPage<UserDto> query(IPage<Map> iPage, @Param("userInfo") String userInfo, @Param("orgId") Long orgId, @Param("roleId") Long roleId, @Param("enable") Boolean enable);
 }

+ 9 - 0
sop-business/src/main/java/com/qmth/sop/business/service/SysRoleService.java

@@ -3,6 +3,8 @@ package com.qmth.sop.business.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.qmth.sop.business.entity.SysRole;
 
+import java.util.List;
+
 /**
  * <p>
  * 角色表 服务类
@@ -13,4 +15,11 @@ import com.qmth.sop.business.entity.SysRole;
  */
 public interface SysRoleService extends IService<SysRole> {
 
+    /**
+     * 根据userId查询角色
+     *
+     * @param userId
+     * @return
+     */
+    List<SysRole> listRolesByUserId(Long userId);
 }

+ 9 - 0
sop-business/src/main/java/com/qmth/sop/business/service/SysUserRoleService.java

@@ -2,6 +2,7 @@ package com.qmth.sop.business.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.qmth.sop.business.bean.result.MenuResult;
+import com.qmth.sop.business.entity.SysUser;
 import com.qmth.sop.business.entity.SysUserRole;
 
 /**
@@ -20,4 +21,12 @@ public interface SysUserRoleService extends IService<SysUserRole> {
      * @return
      */
     MenuResult listByUserId();
+
+    /**
+     * 新增用户权限
+     *
+     * @param sysUser
+     * @param roleIds
+     */
+    public void addUserRolePrivilege(SysUser sysUser, Long[] roleIds);
 }

+ 31 - 0
sop-business/src/main/java/com/qmth/sop/business/service/SysUserService.java

@@ -1,6 +1,8 @@
 package com.qmth.sop.business.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.qmth.sop.business.bean.dto.UserDto;
 import com.qmth.sop.business.bean.result.LoginResult;
 import com.qmth.sop.business.bean.result.SysUserResult;
 import com.qmth.sop.business.entity.SysUser;
@@ -8,6 +10,7 @@ import com.qmth.sop.common.enums.AppSourceEnum;
 
 import java.security.NoSuchAlgorithmException;
 import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -62,4 +65,32 @@ public interface SysUserService extends IService<SysUser> {
      * @param code         验证码
      */
     void checkSmsCode(Long userId, String mobileNumber, String code);
+
+    /**
+     * 查询用户
+     *
+     * @param iPage
+     * @param userInfo
+     * @param orgId
+     * @param roleId
+     * @param enable
+     * @return
+     */
+    IPage<UserDto> query(IPage<Map> iPage, String userInfo, Long orgId, Long roleId, Boolean enable);
+
+    /**
+     * 新增/修改用户
+     *
+     * @param sysUser
+     * @return
+     */
+    Boolean saveUser(SysUser sysUser);
+
+    /**
+     * 启用/禁用用户
+     *
+     * @param sysUser
+     * @return
+     */
+    Boolean enable(SysUser sysUser) throws NoSuchAlgorithmException;
 }

+ 12 - 0
sop-business/src/main/java/com/qmth/sop/business/service/impl/SysRoleServiceImpl.java

@@ -6,6 +6,8 @@ import com.qmth.sop.business.mapper.SysRoleMapper;
 import com.qmth.sop.business.service.SysRoleService;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  * <p>
  * 角色表 服务实现类
@@ -17,4 +19,14 @@ import org.springframework.stereotype.Service;
 @Service
 public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> implements SysRoleService {
 
+    /**
+     * 根据userId查询角色
+     *
+     * @param userId
+     * @return
+     */
+    @Override
+    public List<SysRole> listRolesByUserId(Long userId) {
+        return this.baseMapper.listRolesByUserId(userId);
+    }
 }

+ 19 - 0
sop-business/src/main/java/com/qmth/sop/business/service/impl/SysUserRoleServiceImpl.java

@@ -9,8 +9,11 @@ import com.qmth.sop.business.mapper.SysUserRoleMapper;
 import com.qmth.sop.business.service.SysUserRoleService;
 import com.qmth.sop.common.util.ServletUtil;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * <p>
@@ -36,4 +39,20 @@ public class SysUserRoleServiceImpl extends ServiceImpl<SysUserRoleMapper, SysUs
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
         return commonCacheService.userMenuCache(sysUser.getId());
     }
+
+    /**
+     * 新增用户权限
+     *
+     * @param sysUser
+     * @param roleIds
+     */
+    @Override
+    @Transactional
+    public void addUserRolePrivilege(SysUser sysUser, Long[] roleIds) {
+        List<SysUserRole> sysUserRoleList = new ArrayList<>();
+        for (int i = 0; i < roleIds.length; i++) {
+            sysUserRoleList.add(new SysUserRole(sysUser.getId(), roleIds[i]));
+        }
+        this.saveBatch(sysUserRoleList);
+    }
 }

+ 145 - 6
sop-business/src/main/java/com/qmth/sop/business/service/impl/SysUserServiceImpl.java

@@ -1,29 +1,38 @@
 package com.qmth.sop.business.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qmth.boot.api.exception.ApiException;
 import com.qmth.boot.core.enums.Platform;
 import com.qmth.sop.business.bean.auth.AuthBean;
 import com.qmth.sop.business.bean.auth.ExpireTimeBean;
+import com.qmth.sop.business.bean.dto.UserDto;
 import com.qmth.sop.business.bean.dto.VerifyCodeCheckDto;
 import com.qmth.sop.business.bean.result.LoginResult;
 import com.qmth.sop.business.bean.result.SysUserResult;
 import com.qmth.sop.business.cache.CommonCacheService;
-import com.qmth.sop.business.entity.SysConfig;
-import com.qmth.sop.business.entity.SysRole;
-import com.qmth.sop.business.entity.SysUser;
-import com.qmth.sop.business.entity.TBSession;
+import com.qmth.sop.business.entity.*;
 import com.qmth.sop.business.mapper.SysUserMapper;
+import com.qmth.sop.business.service.SysRoleService;
+import com.qmth.sop.business.service.SysUserRoleService;
 import com.qmth.sop.business.service.SysUserService;
 import com.qmth.sop.business.service.TBSessionService;
 import com.qmth.sop.business.util.AuthUtil;
+import com.qmth.sop.common.contant.SpringContextHolder;
 import com.qmth.sop.common.contant.SystemConstant;
 import com.qmth.sop.common.enums.AppSourceEnum;
 import com.qmth.sop.common.enums.ExceptionResultEnum;
+import com.qmth.sop.common.enums.FieldUniqueEnum;
 import com.qmth.sop.common.util.IpUtil;
+import com.qmth.sop.common.util.ResultUtil;
 import com.qmth.sop.common.util.ServletUtil;
 import com.qmth.sop.common.util.SessionUtil;
+import org.springframework.dao.DuplicateKeyException;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
 
 import javax.annotation.Resource;
 import java.security.NoSuchAlgorithmException;
@@ -47,6 +56,12 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
     @Resource
     TBSessionService tbSessionService;
 
+    @Resource
+    SysRoleService sysRoleService;
+
+    @Resource
+    SysUserRoleService sysUserRoleService;
+
     @Override
     public LoginResult login(String password, SysUser sysUser, AppSourceEnum appSource) throws NoSuchAlgorithmException {
         //停用
@@ -149,6 +164,13 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
         }
     }
 
+    /**
+     * 校验短信验证码
+     *
+     * @param userId       用户id
+     * @param mobileNumber 用户手机号
+     * @param code         验证码
+     */
     @Override
     public void checkSmsCode(Long userId, String mobileNumber, String code) {
         SysConfig sysConfig = commonCacheService.addSysConfigCache(SystemConstant.SYS_CODE_ENABLE);
@@ -157,13 +179,13 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
         if (enable) {
             SysConfig sysConfigNormal = commonCacheService.addSysConfigCache(SystemConstant.SMS_NORMAL_CODE);
             Optional.ofNullable(sysConfigNormal).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("未配置万能短信验证码"));
-            if (!sysConfigNormal.getConfigValue().equals(code)) {
+            if (!Objects.equals(sysConfigNormal.getConfigValue(), code)) {
                 List<VerifyCodeCheckDto> verifyCodeCheckDtoList = this.baseMapper.findVerifyCodeByUser(userId, mobileNumber);
                 if (verifyCodeCheckDtoList.size() < 1) {
                     throw ExceptionResultEnum.ERROR.exception("验证码错误");
                 }
                 VerifyCodeCheckDto accessControl = verifyCodeCheckDtoList.get(0);
-                if (accessControl == null || !accessControl.getVerifyCode().equals(code)) {
+                if (Objects.isNull(accessControl) || !Objects.equals(accessControl.getVerifyCode(), code)) {
                     throw ExceptionResultEnum.ERROR.exception("验证码错误");
                 }
 
@@ -173,4 +195,121 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
             }
         }
     }
+
+    /**
+     * 查询用户
+     *
+     * @param iPage
+     * @param userInfo
+     * @param orgId
+     * @param roleId
+     * @param enable
+     * @return
+     */
+    @Override
+    public IPage<UserDto> query(IPage<Map> iPage, String userInfo, Long orgId, Long roleId, Boolean enable) {
+        IPage<UserDto> userDtoIPage = this.baseMapper.query(iPage, userInfo, orgId, roleId, enable);
+        if (Objects.nonNull(userDtoIPage) && !CollectionUtils.isEmpty(userDtoIPage.getRecords())) {
+            userDtoIPage.getRecords().forEach(m -> {
+                //角色
+                List<SysRole> roles = sysRoleService.listRolesByUserId(Long.valueOf(m.getId()));
+                m.setRoles(roles);
+            });
+        }
+        return this.baseMapper.query(iPage, userInfo, orgId, roleId, enable);
+    }
+
+    /**
+     * 新增/修改用户
+     *
+     * @param sysUser
+     * @return
+     */
+    @Override
+    @Transactional
+    public Boolean saveUser(SysUser sysUser) {
+        SysUserService sysUserService = SpringContextHolder.getBean(SysUserService.class);
+        try {
+            SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
+
+            // 手机号检验
+            if (Objects.nonNull(sysUser.getMobileNumber())) {
+                SysUser checkMobileNumber = this.getOne(new QueryWrapper<SysUser>().lambda().eq(SysUser::getOrgId, sysUser.getOrgId()).eq(SysUser::getEnable, true).eq(SysUser::getMobileNumber, sysUser.getMobileNumber()));
+                if (Objects.nonNull(checkMobileNumber) && checkMobileNumber.getId().longValue() != sysUser.getId().longValue()) {
+                    throw ExceptionResultEnum.ERROR.exception("用户手机号[" + sysUser.getMobileNumber() + "]在系统中已使用");
+                }
+            }
+            if (Objects.isNull(sysUser.getId())) {//新增用户
+                sysUser.insertInfo(requestUser.getId());
+                sysUser.setPasswordInfo(sysUser.getMobileNumber());
+                sysUserService.save(sysUser);
+                sysUserRoleService.addUserRolePrivilege(sysUser, sysUser.getRoleIds());
+            } else {//修改用户
+                List<SysUserRole> sysUserRoleList = commonCacheService.userRolePrivilegeCache(sysUser.getId());
+                List<Long> userRolesList = Arrays.asList(sysUser.getRoleIds());
+                Set<Long> dbUserRolesList = sysUserRoleList.stream().map(SysUserRole::getRoleId).collect(Collectors.toSet());
+                int count = (int) dbUserRolesList.stream().filter(s -> !userRolesList.contains(s)).count();
+                SysUser dbUser = sysUserService.getById(sysUser.getId());
+                sysUserService.update(new UpdateWrapper<SysUser>().lambda()
+                        .eq(SysUser::getId, sysUser.getId())
+                        .set(SysUser::getLoginName, sysUser.getLoginName())
+                        .set(SysUser::getRealName, sysUser.getRealName())
+                        .set(SysUser::getCode, sysUser.getCode())
+                        .set(SysUser::getMobileNumber, sysUser.getMobileNumber())
+                        .set(SysUser::getOrgId, sysUser.getOrgId())
+                        .set(SysUser::getEnable, dbUser.getEnable())
+                        .set(SysUser::getUpdateId, requestUser.getId())
+                        .set(SysUser::getUpdateTime, System.currentTimeMillis())
+                );
+                //如果修改了角色,需要重新登录
+                if (count > 0 || dbUserRolesList.size() != userRolesList.size()) {
+                    QueryWrapper<SysUserRole> sysUserRoleQueryWrapper = new QueryWrapper<>();
+                    sysUserRoleQueryWrapper.lambda().eq(SysUserRole::getUserId, sysUser.getId());
+                    sysUserRoleService.remove(sysUserRoleQueryWrapper);
+
+                    commonCacheService.removeUserRolePrivilegeCache(sysUser.getId());
+                    sysUserRoleService.addUserRolePrivilege(sysUser, sysUser.getRoleIds());
+                    sysUserService.removeUserInfo(sysUser.getId(), true);
+                } else if (!dbUser.getOrgId().equals(sysUser.getOrgId())) {
+                    sysUserService.removeUserInfo(sysUser.getId(), true);
+                }
+                //如果修改了机构或手机号,需更新用户缓存
+                if (Objects.nonNull(dbUser.getOrgId()) && (dbUser.getOrgId().longValue() != sysUser.getOrgId().longValue()
+                        || !Objects.equals(dbUser.getMobileNumber(), sysUser.getMobileNumber()))) {
+                    commonCacheService.updateUserCache(sysUser.getId());
+                    commonCacheService.updateUserAuthCache(sysUser.getId());
+                }
+            }
+        } catch (Exception e) {
+            log.error(SystemConstant.LOG_ERROR, e);
+            if (e instanceof DuplicateKeyException) {
+                String errorColumn = e.getCause().toString();
+                String columnStr = errorColumn.substring(errorColumn.lastIndexOf("key") + 3).replaceAll("'", "");
+                throw ExceptionResultEnum.SQL_ERROR.exception("[" + FieldUniqueEnum.convertToTitle(columnStr) + "]数据不允许重复插入");
+            } else if (e instanceof ApiException) {
+                ResultUtil.error((ApiException) e, e.getMessage());
+            } else {
+                ResultUtil.error(e.getMessage());
+            }
+        }
+        return true;
+    }
+
+    /**
+     * 启用/禁用用户
+     *
+     * @param sysUser
+     * @return
+     */
+    @Override
+    @Transactional
+    public Boolean enable(SysUser sysUser) throws NoSuchAlgorithmException {
+        this.update(new UpdateWrapper<SysUser>().lambda().set(SysUser::getEnable, sysUser.getEnable()).eq(SysUser::getId, sysUser.getId()));
+        commonCacheService.updateUserCache(sysUser.getId());
+        //如果状态为禁用,需要踢下线重新登录
+        if (!sysUser.getEnable()) {
+            this.removeUserInfo(sysUser.getId(), true);
+        }
+        return true;
+    }
 }

+ 13 - 0
sop-business/src/main/resources/mapper/SysRoleMapper.xml

@@ -2,4 +2,17 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.qmth.sop.business.mapper.SysRoleMapper">
 
+    <select id="listRolesByUserId" resultType="com.qmth.sop.business.entity.SysRole">
+        SELECT distinct
+            a.id,
+            a.name,
+            a.type,
+            a.default_role
+        FROM
+            sys_role a
+                JOIN
+            sys_user_role b ON a.id = b.role_id
+        WHERE
+            b.user_id = #{userId}
+    </select>
 </mapper>

+ 32 - 0
sop-business/src/main/resources/mapper/SysUserMapper.xml

@@ -73,4 +73,36 @@
         </where>
         ORDER BY update_time DESC
     </select>
+
+    <select id="query" resultType="com.qmth.sop.business.bean.dto.UserDto">
+        SELECT
+        a.id,
+        a.login_name loginName,
+        a.real_name realName,
+        a.mobile_number mobileNumber,
+        a.gender,
+        a.enable,
+        a.remark,
+        a.org_id orgId,
+        b.name orgName
+        FROM
+        sys_user a
+        left join
+        sys_org b on a.org_id = b.id
+        <where>
+            <if test="userInfo != null and userInfo != ''">
+                and (a.login_name like concat('%', #{userInfo} , '%') or a.real_name like concat('%', #{userInfo} , '%') or a.mobile_number like concat('%', #{userInfo} , '%'))
+            </if>
+            <if test="orgId != null and orgId != ''">
+                and a.org_id = #{orgId}
+            </if>
+            <if test="roleId != null and roleId != ''">
+                and a.id in (select user_id from sys_user_role b where b.role_id = #{roleId})
+            </if>
+            <if test="enable != null and enable != '' or enable == 0">
+                and a.enable = #{enable}
+            </if>
+        </where>
+        order by a.create_time desc
+    </select>
 </mapper>

+ 49 - 2
sop-server/src/main/java/com/qmth/sop/server/api/SysUserController.java

@@ -1,10 +1,25 @@
 package com.qmth.sop.server.api;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.sop.business.bean.dto.UserDto;
+import com.qmth.sop.business.entity.SysUser;
+import com.qmth.sop.business.service.SysUserService;
 import com.qmth.sop.common.contant.SystemConstant;
+import com.qmth.sop.common.util.Result;
+import com.qmth.sop.common.util.ResultUtil;
 import io.swagger.annotations.Api;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiResponse;
+import io.swagger.annotations.ApiResponses;
+import org.springframework.validation.BindingResult;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+import javax.validation.constraints.Max;
+import javax.validation.constraints.Min;
+import java.security.NoSuchAlgorithmException;
 
 /**
  * <p>
@@ -19,4 +34,36 @@ import org.springframework.web.bind.annotation.RestController;
 @RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + SystemConstant.PREFIX_URL_USER)
 public class SysUserController {
 
+    @Resource
+    SysUserService sysUserService;
+
+    @ApiOperation(value = "查询")
+    @RequestMapping(value = "/list", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "返回信息", response = UserDto.class)})
+    public Result list(@RequestParam(value = "userInfo", required = false) String userInfo,
+                       @RequestParam(value = "orgId", required = false) Long orgId,
+                       @RequestParam(value = "roleId", required = false) Long roleId,
+                       @RequestParam(value = "enable", required = false) Boolean enable,
+                       @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
+                       @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
+        return ResultUtil.ok(sysUserService.query(new Page<>(pageNumber, pageSize), userInfo, orgId, roleId, enable));
+    }
+
+    @ApiOperation(value = "新增/修改")
+    @RequestMapping(value = "/save", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "返回信息", response = Object.class)})
+    public Result save(@Valid @RequestBody SysUser sysUser, BindingResult bindingResult) {
+        if (bindingResult.hasErrors()) {
+            return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
+        }
+        return ResultUtil.ok(sysUserService.saveUser(sysUser));
+    }
+
+    @ApiOperation(value = "启用/禁用")
+    @RequestMapping(value = "/enable", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "返回信息", response = Object.class)})
+    public Result enable(@RequestBody SysUser sysUser) throws NoSuchAlgorithmException {
+        return ResultUtil.ok(sysUserService.enable(sysUser));
+    }
+
 }

+ 1 - 0
sop-server/src/main/resources/application.properties

@@ -86,5 +86,6 @@ com.qmth.logging.file-path=/Users/king/Downloads/sop-server.log
 
 com.qmth.solar.access-key=9ed64a57627845118913229ad578939b
 com.qmth.solar.access-secret=0qtqPS9S3DnjR043nuszsrUttl6ufqvc
+com.qmth.solar.app-code=sop
 
 com.qmth.sms.server=https://solar.qmth.com.cn