添加员工管理自动导入能力,修复了部门,岗位未显示
This commit is contained in:
@@ -62,11 +62,17 @@ public class HrmMyApplyController extends BaseController {
|
||||
if (currentUserId == null) {
|
||||
return TableDataInfo.build();
|
||||
}
|
||||
HrmEmployee emp = employeeMapper.selectOne(new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<HrmEmployee>()
|
||||
.eq(HrmEmployee::getUserId, currentUserId));
|
||||
if (emp == null) {
|
||||
// 极端场景一个 sys_user 可能对应多条员工记录(历史孤儿/副本没清干净),
|
||||
// 用 list + limit 1 兜底,别用 selectOne 直接抛异常。
|
||||
List<HrmEmployee> empList = employeeMapper.selectList(
|
||||
new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<HrmEmployee>()
|
||||
.eq(HrmEmployee::getUserId, currentUserId)
|
||||
.orderByAsc(HrmEmployee::getEmpId)
|
||||
.last("limit 1"));
|
||||
if (empList.isEmpty()) {
|
||||
return TableDataInfo.build();
|
||||
}
|
||||
HrmEmployee emp = empList.get(0);
|
||||
SysUser sysUser = sysUserMapper.selectUserById(emp.getUserId());
|
||||
String nickName = sysUser != null ? sysUser.getNickName() : null;
|
||||
|
||||
|
||||
@@ -1,8 +1,33 @@
|
||||
package com.ruoyi.hrm.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.ruoyi.common.core.mapper.BaseMapperPlus;
|
||||
import com.ruoyi.hrm.domain.HrmEmployee;
|
||||
import com.ruoyi.hrm.domain.bo.HrmEmployeeBo;
|
||||
import com.ruoyi.hrm.domain.vo.HrmEmployeeVo;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface HrmEmployeeMapper extends BaseMapperPlus<HrmEmployeeMapper, HrmEmployee, HrmEmployeeVo> {
|
||||
|
||||
/**
|
||||
* 按 empId 查询员工详情。JOIN sys_dept / sys_post 补上 dept_name / post_name。
|
||||
* <p>
|
||||
* 注意:不能沿用父接口的 selectVoById,那是 default 方法先跑 selectById 再 BeanCopy,
|
||||
* 拿不到 JOIN 出来的 dept_name / post_name。
|
||||
*/
|
||||
HrmEmployeeVo selectEmployeeVoById(@Param("empId") Long empId);
|
||||
|
||||
/**
|
||||
* 员工列表(含 dept / post 名称)。传 BO,自己在 XML 里拼过滤条件,
|
||||
* 别用 LambdaQueryWrapper——JOIN 里字段名会跟 sys_user / sys_dept 冲突。
|
||||
*/
|
||||
List<HrmEmployeeVo> selectEmployeeVoList(@Param("bo") HrmEmployeeBo bo);
|
||||
|
||||
/**
|
||||
* 员工分页(含 dept / post 名称)。
|
||||
*/
|
||||
Page<HrmEmployeeVo> selectEmployeeVoPage(IPage<HrmEmployee> page, @Param("bo") HrmEmployeeBo bo);
|
||||
}
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package com.ruoyi.hrm.service.impl;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.ruoyi.common.core.domain.PageQuery;
|
||||
@@ -26,25 +25,30 @@ public class HrmEmployeeServiceImpl implements IHrmEmployeeService {
|
||||
|
||||
@Override
|
||||
public HrmEmployeeVo queryById(Long empId) {
|
||||
return baseMapper.selectVoById(empId);
|
||||
// 走 JOIN 版本,返回带 deptName/postName 的完整 VO
|
||||
return baseMapper.selectEmployeeVoById(empId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public HrmEmployeeVo queryByUserId(Long userId) {
|
||||
return baseMapper.selectVoOne(Wrappers.<HrmEmployee>lambdaQuery().eq(HrmEmployee::getUserId, userId));
|
||||
// 同一个 sys_user 极端情况可能对应多条员工,取 empId 最小的一条兜底
|
||||
HrmEmployeeBo bo = new HrmEmployeeBo();
|
||||
bo.setUserId(userId);
|
||||
List<HrmEmployeeVo> list = baseMapper.selectEmployeeVoList(bo);
|
||||
return list.isEmpty() ? null : list.get(0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TableDataInfo<HrmEmployeeVo> queryPageList(HrmEmployeeBo bo, PageQuery pageQuery) {
|
||||
LambdaQueryWrapper<HrmEmployee> lqw = buildQueryWrapper(bo);
|
||||
Page<HrmEmployeeVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
||||
// 显式调用 XML 里带 JOIN 的自定义方法,父接口的 selectVoPage default 只会走单表 selectPage,
|
||||
// 拿不到 dept_name / post_name。
|
||||
Page<HrmEmployeeVo> result = baseMapper.selectEmployeeVoPage(pageQuery.build(), bo);
|
||||
return TableDataInfo.build(result);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<HrmEmployeeVo> queryList(HrmEmployeeBo bo) {
|
||||
LambdaQueryWrapper<HrmEmployee> lqw = buildQueryWrapper(bo);
|
||||
return baseMapper.selectVoList(lqw);
|
||||
return baseMapper.selectEmployeeVoList(bo);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -70,17 +74,4 @@ public class HrmEmployeeServiceImpl implements IHrmEmployeeService {
|
||||
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
|
||||
return baseMapper.deleteBatchIds(ids) > 0;
|
||||
}
|
||||
|
||||
private LambdaQueryWrapper<HrmEmployee> buildQueryWrapper(HrmEmployeeBo bo) {
|
||||
LambdaQueryWrapper<HrmEmployee> lqw = Wrappers.lambdaQuery();
|
||||
lqw.eq(bo.getEmpId() != null, HrmEmployee::getEmpId, bo.getEmpId());
|
||||
lqw.eq(bo.getUserId() != null, HrmEmployee::getUserId, bo.getUserId());
|
||||
lqw.like(bo.getEmpNo() != null, HrmEmployee::getEmpNo, bo.getEmpNo());
|
||||
lqw.like(bo.getEmpName() != null, HrmEmployee::getEmpName, bo.getEmpName());
|
||||
lqw.eq(bo.getStatus() != null, HrmEmployee::getStatus, bo.getStatus());
|
||||
lqw.eq(bo.getDeptId() != null, HrmEmployee::getDeptId, bo.getDeptId());
|
||||
lqw.eq(bo.getPostId() != null, HrmEmployee::getPostId, bo.getPostId());
|
||||
lqw.orderByAsc(HrmEmployee::getEmpNo);
|
||||
return lqw;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,6 +48,7 @@
|
||||
<result column="update_time" property="updateTime"/>
|
||||
</resultMap>
|
||||
|
||||
<!-- 基础 SELECT + JOIN。dept_id 兼容员工表未维护部门时兜底到 sys_user.dept_id -->
|
||||
<sql id="selectVo">
|
||||
SELECT
|
||||
e.emp_id, e.user_id, e.emp_no, e.emp_name, e.gender, e.mobile, e.email, e.id_no,
|
||||
@@ -59,22 +60,46 @@
|
||||
p.post_name
|
||||
FROM hrm_employee e
|
||||
LEFT JOIN sys_user su ON su.user_id = e.user_id
|
||||
LEFT JOIN sys_dept d ON d.dept_id = COALESCE(e.dept_id, su.dept_id) AND d.del_flag = 0
|
||||
LEFT JOIN sys_dept d ON d.dept_id = COALESCE(e.dept_id, su.dept_id) AND d.del_flag = '0'
|
||||
LEFT JOIN sys_post p ON e.post_id = p.post_id
|
||||
WHERE e.del_flag = 0
|
||||
</sql>
|
||||
|
||||
<!-- 使用 JOIN 查询的 select 语句,确保使用 VoResultMap -->
|
||||
<select id="selectVoPage" resultMap="VoResultMap">
|
||||
<include refid="selectVo"/>
|
||||
</select>
|
||||
<sql id="whereBo">
|
||||
<if test="bo != null">
|
||||
<if test="bo.empId != null"> AND e.emp_id = #{bo.empId} </if>
|
||||
<if test="bo.userId != null"> AND e.user_id = #{bo.userId} </if>
|
||||
<if test="bo.empNo != null and bo.empNo != ''">
|
||||
AND e.emp_no LIKE CONCAT('%', #{bo.empNo}, '%')
|
||||
</if>
|
||||
<if test="bo.empName != null and bo.empName != ''">
|
||||
AND (e.emp_name LIKE CONCAT('%', #{bo.empName}, '%')
|
||||
OR e.emp_no LIKE CONCAT('%', #{bo.empName}, '%'))
|
||||
</if>
|
||||
<if test="bo.status != null and bo.status != ''">
|
||||
AND e.status = #{bo.status}
|
||||
</if>
|
||||
<if test="bo.deptId != null">
|
||||
AND COALESCE(e.dept_id, su.dept_id) = #{bo.deptId}
|
||||
</if>
|
||||
<if test="bo.postId != null"> AND e.post_id = #{bo.postId} </if>
|
||||
</if>
|
||||
</sql>
|
||||
|
||||
<select id="selectVoList" resultMap="VoResultMap">
|
||||
<include refid="selectVo"/>
|
||||
</select>
|
||||
|
||||
<select id="selectVoById" resultMap="VoResultMap">
|
||||
<select id="selectEmployeeVoById" resultMap="VoResultMap">
|
||||
<include refid="selectVo"/>
|
||||
AND e.emp_id = #{empId}
|
||||
</select>
|
||||
|
||||
<select id="selectEmployeeVoList" resultMap="VoResultMap">
|
||||
<include refid="selectVo"/>
|
||||
<include refid="whereBo"/>
|
||||
ORDER BY e.emp_no
|
||||
</select>
|
||||
|
||||
<select id="selectEmployeeVoPage" resultMap="VoResultMap">
|
||||
<include refid="selectVo"/>
|
||||
<include refid="whereBo"/>
|
||||
ORDER BY e.emp_no
|
||||
</select>
|
||||
</mapper>
|
||||
|
||||
Reference in New Issue
Block a user