人员完善

This commit is contained in:
lhx
2025-11-25 18:21:01 +08:00
parent 0f4bd88dc8
commit e7a1fc0149
16 changed files with 291 additions and 46 deletions

View File

@@ -20,10 +20,11 @@ public class SaTokenConfigure implements WebMvcConfigurer {
System.out.println("----- SaToken 拦截器启动成功!"); System.out.println("----- SaToken 拦截器启动成功!");
registry registry
.addInterceptor(new SaInterceptor(h -> { .addInterceptor(new SaInterceptor(h -> {
SaRouter SaRouter.match("/**", "/auth/**", r -> StpUtil.checkLogin());
.match("/**") //SaRouter
.notMatch("/auth/**") // .match("/**")
.check(r -> StpUtil.checkLogin()); // .notMatch("/auth/**")
// .check(r -> StpUtil.checkLogin());
})) }))
.addPathPatterns("/**"); .addPathPatterns("/**");
} }

View File

@@ -0,0 +1,29 @@
package com.dc.dc_project.controller;
import cn.dev33.satoken.stp.StpUtil;
import com.dc.dc_project.common.ResponseResult;
import com.dc.dc_project.common.aop.DcCheckPermission;
import com.dc.dc_project.model.dto.PersonnelDto;
import com.dc.dc_project.service.PersonnelService;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RequiredArgsConstructor(onConstructor_ = @Autowired)
@RestController
@RequestMapping("/personnel")
public class PersonnelController {
private final PersonnelService personnelService;
@PostMapping("/list")
@DcCheckPermission("system:personnel:list")
public ResponseResult list(@RequestBody PersonnelDto personnelDto) {
Long userId = StpUtil.getLoginIdAsLong();
return personnelService.getList(personnelDto, userId);
}
}

View File

@@ -6,6 +6,7 @@ import cn.dev33.satoken.stp.StpUtil;
import com.dc.dc_project.common.ResponseResult; import com.dc.dc_project.common.ResponseResult;
import com.dc.dc_project.common.aop.DcCheckPermission; import com.dc.dc_project.common.aop.DcCheckPermission;
import com.dc.dc_project.model.dto.user.UpdateUserPasswordDto; import com.dc.dc_project.model.dto.user.UpdateUserPasswordDto;
import com.dc.dc_project.model.dto.user.UserAddDto;
import com.dc.dc_project.model.dto.user.UserInfoUpdateDto; import com.dc.dc_project.model.dto.user.UserInfoUpdateDto;
import com.dc.dc_project.model.dto.user.UserReqDto; import com.dc.dc_project.model.dto.user.UserReqDto;
import com.dc.dc_project.model.pojo.RecordResult; import com.dc.dc_project.model.pojo.RecordResult;
@@ -37,13 +38,12 @@ public class UserController {
@PostMapping("/getUserInfo") @PostMapping("/getUserInfo")
ResponseResult getUserInfo() { ResponseResult getUserInfo() {
Long userId = StpUtil.getLoginIdAsLong(); Long userId = StpUtil.getLoginIdAsLong();
List<String> permissions = StpUtil.getPermissionList(); return userService.getUserInfo(userId);
return userService.getUserInfo();
} }
@PostMapping("/save") @PostMapping("/save")
ResponseResult save(@RequestBody User user) { ResponseResult save(@RequestBody UserAddDto user) {
return ResponseResult.success(); return userService.save(user);
} }
@PostMapping("/updateInfo") @PostMapping("/updateInfo")

View File

@@ -1,8 +1,14 @@
package com.dc.dc_project.mapper; package com.dc.dc_project.mapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.dc.dc_project.model.dto.PersonnelDto;
import com.dc.dc_project.model.pojo.Personnel; import com.dc.dc_project.model.pojo.Personnel;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dc.dc_project.model.vo.PersonnelListVo;
import com.dc.dc_project.model.vo.PersonnelVo; import com.dc.dc_project.model.vo.PersonnelVo;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/** /**
* @author ADMIN * @author ADMIN
@@ -13,6 +19,14 @@ import com.dc.dc_project.model.vo.PersonnelVo;
public interface PersonnelMapper extends BaseMapper<Personnel> { public interface PersonnelMapper extends BaseMapper<Personnel> {
PersonnelVo getVoByUserId(Long id); PersonnelVo getVoByUserId(Long id);
/**
* 获取人员列表
* @param personnelDto
* @param orgIds
* @return
*/
Page<PersonnelListVo> getPage(@Param("personnelDto") PersonnelDto personnelDto,@Param("orgIds") List<Long> orgIds);
} }

View File

@@ -1,5 +1,6 @@
package com.dc.dc_project.mapper; package com.dc.dc_project.mapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.dc.dc_project.model.dto.user.LoginDto; import com.dc.dc_project.model.dto.user.LoginDto;
import com.dc.dc_project.model.dto.user.UserReqDto; import com.dc.dc_project.model.dto.user.UserReqDto;
import com.dc.dc_project.model.pojo.User; import com.dc.dc_project.model.pojo.User;
@@ -17,7 +18,7 @@ import java.util.List;
*/ */
public interface UserMapper extends BaseMapper<User> { public interface UserMapper extends BaseMapper<User> {
List<UserVo> getUserListBySelf(@Param("userReqDto") UserReqDto userReqDto,@Param("pOrgId") Long pOrgId); Page<UserVo> getUserListByAll(@Param("userReqDto") UserReqDto userReqDto, @Param("orgIds") List<Long> orgIds);
} }

View File

@@ -0,0 +1,26 @@
package com.dc.dc_project.model.dto;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.dc.dc_project.model.pojo.Personnel;
import lombok.Data;
@Data
public class PersonnelDto extends Page<Personnel> {
private String name;
private String contactPhone;
private String email;
private Integer sex;
private String mainResponsibility;
private String remark;
private Integer status;
private Long orgId;
}

View File

@@ -0,0 +1,20 @@
package com.dc.dc_project.model.dto.user;
import lombok.Data;
@Data
public class UserAddDto {
private Long personnel_id;
private String username;
private String password;
private String phone;
private String email;
private String remark;
}

View File

@@ -0,0 +1,36 @@
package com.dc.dc_project.model.vo;
import lombok.Data;
@Data
public class PersonnelListVo {
private Long id;
private String name;
private String sex;
private String contactPhone;
private String email;
private String mainResponsibility;
private String remark;
private String avatar;
private String status;
private Long orgId;
private String orgName;
private Long positionId;
private String positionName;
private Long userId;
}

View File

@@ -1,5 +1,7 @@
package com.dc.dc_project.service; package com.dc.dc_project.service;
import com.dc.dc_project.common.ResponseResult;
import com.dc.dc_project.model.dto.PersonnelDto;
import com.dc.dc_project.model.pojo.Personnel; import com.dc.dc_project.model.pojo.Personnel;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
@@ -16,4 +18,12 @@ public interface PersonnelService extends IService<Personnel> {
* @return * @return
*/ */
Personnel getOneByUserId(Long userId); Personnel getOneByUserId(Long userId);
/**
* 获取人员列表
* @param personnelDto
* @param userId
* @return
*/
ResponseResult getList(PersonnelDto personnelDto, Long userId);
} }

View File

@@ -2,6 +2,7 @@ package com.dc.dc_project.service;
import com.dc.dc_project.common.ResponseResult; import com.dc.dc_project.common.ResponseResult;
import com.dc.dc_project.model.dto.user.LoginDto; import com.dc.dc_project.model.dto.user.LoginDto;
import com.dc.dc_project.model.dto.user.UserAddDto;
import com.dc.dc_project.model.dto.user.UserReqDto; import com.dc.dc_project.model.dto.user.UserReqDto;
import com.dc.dc_project.model.pojo.RecordResult; import com.dc.dc_project.model.pojo.RecordResult;
import com.dc.dc_project.model.pojo.User; import com.dc.dc_project.model.pojo.User;
@@ -28,7 +29,7 @@ public interface UserService extends IService<User> {
* 获取用户信息 * 获取用户信息
* @return * @return
*/ */
ResponseResult getUserInfo(); ResponseResult getUserInfo(Long userId);
/** /**
* 用户列表 * 用户列表
@@ -37,4 +38,10 @@ public interface UserService extends IService<User> {
* @return * @return
*/ */
ResponseResult UserList(UserReqDto userReqDto, Long userId); ResponseResult UserList(UserReqDto userReqDto, Long userId);
/**
* 人员新增用户
* @param user
*/
ResponseResult save(UserAddDto user);
} }

View File

@@ -66,6 +66,7 @@ public class OrgServiceImpl extends ServiceImpl<OrgMapper, Org>
@Override @Override
public List<Long> getCListByOrgId(Long pOrgId) { public List<Long> getCListByOrgId(Long pOrgId) {
List<Long> cList = baseMapper.getCListByOrgId(pOrgId); List<Long> cList = baseMapper.getCListByOrgId(pOrgId);
return cList;
} }
} }

View File

@@ -1,13 +1,28 @@
package com.dc.dc_project.service.impl; package com.dc.dc_project.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dc.dc_project.common.ResponseResult;
import com.dc.dc_project.enums.DataScopeType;
import com.dc.dc_project.enums.IsDeleted;
import com.dc.dc_project.mapper.OrgMapper;
import com.dc.dc_project.model.dto.PersonnelDto;
import com.dc.dc_project.model.pojo.Org;
import com.dc.dc_project.model.pojo.Personnel; import com.dc.dc_project.model.pojo.Personnel;
import com.dc.dc_project.model.vo.PersonnelListVo;
import com.dc.dc_project.model.vo.PersonnelVo;
import com.dc.dc_project.service.OrgService;
import com.dc.dc_project.service.PersonnelService; import com.dc.dc_project.service.PersonnelService;
import com.dc.dc_project.mapper.PersonnelMapper; import com.dc.dc_project.mapper.PersonnelMapper;
import com.dc.dc_project.utils.PermissionUtils;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import java.util.List;
/** /**
* @author ADMIN * @author ADMIN
* @description 针对表【sys_personnel(人员台账表)】的数据库操作Service实现 * @description 针对表【sys_personnel(人员台账表)】的数据库操作Service实现
@@ -15,9 +30,15 @@ import lombok.extern.slf4j.Slf4j;
*/ */
@Service @Service
@Slf4j @Slf4j
@RequiredArgsConstructor(onConstructor_ = @Autowired)
public class PersonnelServiceImpl extends ServiceImpl<PersonnelMapper, Personnel> public class PersonnelServiceImpl extends ServiceImpl<PersonnelMapper, Personnel>
implements PersonnelService{ implements PersonnelService{
private final PersonnelMapper personnelMapper;
private final OrgMapper orgMapper;
private final OrgService orgService;
@Override @Override
public Personnel getOneByUserId(Long userId) { public Personnel getOneByUserId(Long userId) {
LambdaQueryWrapper<Personnel> queryWrapper = new LambdaQueryWrapper<Personnel>() LambdaQueryWrapper<Personnel> queryWrapper = new LambdaQueryWrapper<Personnel>()
@@ -25,6 +46,27 @@ public class PersonnelServiceImpl extends ServiceImpl<PersonnelMapper, Personnel
.eq(Personnel::getIsDeleted, 0); .eq(Personnel::getIsDeleted, 0);
return this.getOne(queryWrapper); return this.getOne(queryWrapper);
} }
@Override
public ResponseResult getList(PersonnelDto personnelDto, Long userId) {
log.info("获取人员列表");
DataScopeType dataScopeType = DataScopeType.getByLevel(PermissionUtils.getOrDefault(DataScopeType.CUSTOM.getLevel()));
Personnel personnel = this.getOneByUserId(userId);
Long pOrgId = orgMapper.getOrgIdByPersonnelId(personnel.getId());
List<Long> orgIds = null;
if (dataScopeType != null) {
orgIds = switch (dataScopeType) {
case SELF -> orgService.getCListByOrgId(pOrgId);
case ALL -> orgService.list(new LambdaQueryWrapper<Org>().eq(Org::getIsDeleted, IsDeleted.NO.getCode())).stream().map(Org::getId).toList();
default -> List.of(pOrgId);
};
}
Page<PersonnelListVo> page = baseMapper.getPage(personnelDto, orgIds);
return null;
}
} }

View File

@@ -2,12 +2,15 @@ package com.dc.dc_project.service.impl;
import cn.dev33.satoken.stp.StpUtil; import cn.dev33.satoken.stp.StpUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dc.dc_project.common.ResponseResult; import com.dc.dc_project.common.ResponseResult;
import com.dc.dc_project.common.ResultCode; import com.dc.dc_project.common.ResultCode;
import com.dc.dc_project.enums.DataScopeType; import com.dc.dc_project.enums.DataScopeType;
import com.dc.dc_project.enums.IsDeleted;
import com.dc.dc_project.mapper.*; import com.dc.dc_project.mapper.*;
import com.dc.dc_project.model.dto.user.LoginDto; import com.dc.dc_project.model.dto.user.LoginDto;
import com.dc.dc_project.model.dto.user.UserAddDto;
import com.dc.dc_project.model.dto.user.UserReqDto; import com.dc.dc_project.model.dto.user.UserReqDto;
import com.dc.dc_project.model.pojo.*; import com.dc.dc_project.model.pojo.*;
import com.dc.dc_project.model.vo.PersonnelVo; import com.dc.dc_project.model.vo.PersonnelVo;
@@ -24,9 +27,11 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.stream.Collectors;
import static com.dc.dc_project.model.vo.PersonnelVo.toVo; import static com.dc.dc_project.model.vo.PersonnelVo.toVo;
@@ -89,9 +94,9 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User>
} }
@Override @Override
public ResponseResult getUserInfo() { public ResponseResult getUserInfo(Long userId) {
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<User>() LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<User>()
.eq(User::getId, StpUtil.getLoginIdAsLong()) .eq(User::getId, userId)
.eq(User::getIsDeleted, 0) .eq(User::getIsDeleted, 0)
.eq(User::getStatus, 1); .eq(User::getStatus, 1);
User user = baseMapper.selectOne(queryWrapper); User user = baseMapper.selectOne(queryWrapper);
@@ -113,23 +118,27 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User>
Personnel personnel = personnelService.getOneByUserId(userId); Personnel personnel = personnelService.getOneByUserId(userId);
Long pOrgId = orgMapper.getOrgIdByPersonnelId(personnel.getId()); Long pOrgId = orgMapper.getOrgIdByPersonnelId(personnel.getId());
// 管理员
if(pOrgId == null && StpUtil.getRoleList().get(0).equals("admin")){
pOrgId = 1L;
dataScopeType = DataScopeType.ALL;
}
List<Long> orgIds = new ArrayList<>(); List<Long> orgIds = new ArrayList<>();
List<UserVo> userVos = new ArrayList<>(); Page<UserVo> userVos;
if (dataScopeType != null) { if (dataScopeType != null) {
switch (dataScopeType){ switch (dataScopeType){
case DataScopeType.SELF: case SELF:
orgIds.addAll(orgService.getCListByOrgId(pOrgId)); orgIds.addAll(orgService.getCListByOrgId(pOrgId));
break; break;
case DataScopeType.ALL : case ALL :
userVos = baseMapper.getUserListByAll(userReqDto); orgIds.addAll(orgService.list(new LambdaQueryWrapper<Org>().eq(Org::getIsDeleted, IsDeleted.NO.getCode())).stream().map(Org::getId).toList());
break; break;
default: default:
if(userReqDto.getOrgId() != null && !userReqDto.getOrgId().equals(pOrgId)){ orgIds.add(pOrgId);
return ResponseResult.error(ResultCode.NO_PERMISSION); break;
}
userVos = baseMapper.getUserListByCustom(userReqDto, pOrgId);
} }
} }
else { else {
@@ -138,8 +147,19 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User>
userVos = baseMapper.getUserListByAll(userReqDto, orgIds); userVos = baseMapper.getUserListByAll(userReqDto, orgIds);
return ResponseResult.success(userVos);
}
return null; @Override
public ResponseResult save(UserAddDto userDto) {
User user = new User();
user.setUsername(userDto.getUsername());
user.setPassword(userDto.getPassword());
user.setPhone(userDto.getPhone());
user.setStatus(1);
user.setCreatedAt(LocalDateTime.now());
user.setUpdatedAt(LocalDateTime.now());
return this.save(user) ? ResponseResult.success() : ResponseResult.error();
} }
} }

View File

@@ -10,9 +10,13 @@
remark,created_at,updated_at,is_deleted remark,created_at,updated_at,is_deleted
</sql> </sql>
<select id="getOrgIdByPersonnelId" resultType="java.lang.Long"> <select id="getOrgIdByPersonnelId" resultType="java.lang.Long">
select so.id from sys_org so where id == (select org_id from sys_personnel_org where personnel_id=#{personnelId}) select so.id from sys_org so where id = (select org_id from sys_personnel_org where personnel_id=#{personnelId})
</select> </select>
<select id="getCListByOrgId" resultType="java.lang.Long"> <select id="getCListByOrgId" resultType="java.lang.Long">
select id from sys_org where parent_id=#{orgId} with recursive org as (
SELECT id FROM sys_org where sys_org.id = #{orgId}
UNION ALL SELECT o.id from sys_org o
inner join org or1 on o.parent_id = or1.id
) SELECT id from org;
</select> </select>
</mapper> </mapper>

View File

@@ -14,4 +14,22 @@
<select id="getVoByUserId" resultType="com.dc.dc_project.model.vo.PersonnelVo"> <select id="getVoByUserId" resultType="com.dc.dc_project.model.vo.PersonnelVo">
</select> </select>
<select id="getPage" resultType="com.dc.dc_project.model.vo.PersonnelListVo">
select
sp.id,
so.org_id,
sp.user_id,
sp.name,
sp.position,
sp.contact_phone,
sp.email,
sp.main_responsibility,
sp.remark,
sp.status,
From sys_personnel sp
left join sys_personnel_position spp on sp.id = spp.personnel_id
left join sys_position sps on spp.position_id = sps.id
left join sys_personnel_org spo on sp.id = spo.personnel_id
left join sys_org so on so.id = spo.org_id
</select>
</mapper> </mapper>

View File

@@ -4,28 +4,6 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dc.dc_project.mapper.UserMapper"> <mapper namespace="com.dc.dc_project.mapper.UserMapper">
<resultMap id="BaseResultMap" type="com.dc.dc_project.model.pojo.User">
<id property="id" column="id" />
<result property="username" column="username" />
<result property="password" column="password" />
<result property="real_name" column="real_name" />
<result property="gender" column="gender" />
<result property="phone" column="phone" />
<result property="email" column="email" />
<result property="org_id" column="org_id" />
<result property="status" column="status" />
<result property="last_login_time" column="last_login_time" />
<result property="remark" column="remark" />
<result property="created_at" column="created_at" />
<result property="updated_at" column="updated_at" />
<result property="is_deleted" column="is_deleted" />
</resultMap>
<sql id="Base_Column_List">
id,username,password,real_name,gender,phone,
email,org_id,status,last_login_time,remark,
created_at,updated_at,is_deleted
</sql>
<select id="getUserListBySelf" resultType="com.dc.dc_project.model.vo.UserVo"> <select id="getUserListBySelf" resultType="com.dc.dc_project.model.vo.UserVo">
SELECT SELECT
u.id, u.id,
@@ -63,4 +41,42 @@
and u.is_deleted = 0 and u.is_deleted = 0
</where> </where>
</select> </select>
<select id="getUserListByAll" resultType="com.dc.dc_project.model.vo.UserVo">
SELECT
u.id,
u.username,
p.name as real_name,
p.sex,
u.phone,
p.email,
o.id as org_id,
u.status,
u.last_login_time,
u.remark,
p.id AS personnel_id,
o.name AS org_name
FROM sys_user u
LEFT JOIN sys_personnel p ON u.id = p.user_id
LEFT JOIN sys_personnel_org spo ON p.id = spo.personnel_id
LEFT JOIN sys_org o ON spo.org_id = o.id
<where>
<if test="userReqDto.name != null">
AND (p.name LIKE CONCAT('%',#{userReqDto.name},'%') OR u.username LIKE CONCAT('%',#{userReqDto.name},'%'))
</if>
<if test="userReqDto.phone != null">
AND u.phone LIKE CONCAT('%',#{userReqDto.phone},'%')
</if>
<if test="userReqDto.email != null">
AND p.email LIKE CONCAT('%',#{userReqDto.email},'%')
</if>
<if test="userReqDto.status != null">
AND u.status = #{userReqDto.status}
</if>
<if test="orgIds != null">
AND o.id in (#{orgIds})
</if>
and u.is_deleted = 0
</where>
limit #{userReqDto.current},#{userReqDto.size}
</select>
</mapper> </mapper>