员工信息调整,按钮调整,样式调整,增加重置密码、冻结、解冻功能

This commit is contained in:
1378012178@qq.com 2026-03-12 16:17:37 +08:00
parent 552e2decb5
commit a5b97d9524
10 changed files with 784 additions and 530 deletions

View File

@ -4,7 +4,11 @@ import java.util.Arrays;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.alibaba.fastjson.JSONObject;
import com.nu.dto.EmployeesStatusMQDto;
import com.nu.utils.RabbitMQUtil;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.api.ISysBaseAPI;
import org.jeecg.common.system.query.QueryGenerator;
import com.nu.modules.employeesInfo.entity.BizEmployeesInfo;
import com.nu.modules.employeesInfo.service.IBizEmployeesInfoService;
@ -36,6 +40,10 @@ import org.apache.shiro.authz.annotation.RequiresPermissions;
public class BizEmployeesInfoController extends JeecgController<BizEmployeesInfo, IBizEmployeesInfoService> {
@Autowired
private IBizEmployeesInfoService bizEmployeesInfoService;
@Autowired
private ISysBaseAPI sysBaseAPI;
@Autowired
private RabbitMQUtil rabbitMQUtil;
/**
* 分页列表查询
@ -53,10 +61,13 @@ public class BizEmployeesInfoController extends JeecgController<BizEmployeesInfo
@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
HttpServletRequest req) {
QueryWrapper<BizEmployeesInfo> queryWrapper = QueryGenerator.initQueryWrapper(bizEmployeesInfo, req.getParameterMap());
queryWrapper.orderByDesc("create_time");
Page<BizEmployeesInfo> page = new Page<BizEmployeesInfo>(pageNo, pageSize);
IPage<BizEmployeesInfo> pageList = bizEmployeesInfoService.page(page, queryWrapper);
// QueryWrapper<BizEmployeesInfo> queryWrapper = QueryGenerator.initQueryWrapper(bizEmployeesInfo, req.getParameterMap());
// queryWrapper.orderByDesc("create_time");
// Page<BizEmployeesInfo> page = new Page<BizEmployeesInfo>(pageNo, pageSize);
// //查询已在mapper中重写
// IPage<BizEmployeesInfo> pageList = bizEmployeesInfoService.page(page, queryWrapper);
IPage<BizEmployeesInfo> pageList = bizEmployeesInfoService.queryPageList(bizEmployeesInfo, pageNo, pageSize, req);
return Result.OK(pageList);
}
@ -162,4 +173,27 @@ public class BizEmployeesInfoController extends JeecgController<BizEmployeesInfo
return super.importExcel(request, response, BizEmployeesInfo.class);
}
/**
* 冻结/解冻员工
*
* @param bizEmployeesInfo
* @return
*/
@AutoLog(value = "员工信息-冻结/解冻员工")
@ApiOperation(value = "员工信息-冻结/解冻员工", notes = "员工信息-冻结/解冻员工")
@RequestMapping(value = "/djOrJd", method = {RequestMethod.PUT, RequestMethod.POST})
public Result<String> djOrJd(@RequestBody BizEmployeesInfo bizEmployeesInfo) {
BizEmployeesInfo upInfo = new BizEmployeesInfo();
upInfo.setId(bizEmployeesInfo.getId());
upInfo.setIzFreeze(bizEmployeesInfo.getIzFreeze());//是否冻结 Y冻结 N未冻结
bizEmployeesInfoService.updateById(upInfo);
JSONObject deptInfo = sysBaseAPI.getDeptInfo();
EmployeesStatusMQDto mqDto = new EmployeesStatusMQDto();
mqDto.setOrgCode(deptInfo.getString("code"));
mqDto.setIzFreeze(bizEmployeesInfo.getIzFreeze());
mqDto.setOpenId(bizEmployeesInfo.getOpenId());
rabbitMQUtil.sendToExchange("hldy.employees", "employees.account.freezeOrEnabled", mqDto);
return Result.OK("操作成功!");
}
}

View File

@ -1,6 +1,7 @@
package com.nu.modules.employeesInfo.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
@ -241,4 +242,11 @@ public class BizEmployeesInfo implements Serializable {
/**接单上限*/
@ApiModelProperty(value = "接单上限")
private Integer orderCap;
@TableField(exist = false)
private String userStatus;
@TableField(exist = false)
private String userId;
}

View File

@ -1,17 +1,23 @@
package com.nu.modules.employeesInfo.mapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.nu.modules.employeesInfo.entity.BizEmployeesInfo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import java.util.Map;
/**
* @Description: 员工信息
* @Author: jeecg-boot
* @Date: 2025-04-01
* @Date: 2025-04-01
* @Version: V1.0
*/
public interface BizEmployeesInfoMapper extends BaseMapper<BizEmployeesInfo> {
BizEmployeesInfo findById(BizEmployeesInfo bizEmployeesInfo);
void UpUserEmployeesId(@Param("userId") String userId);
IPage<BizEmployeesInfo> queryPageList(Page<BizEmployeesInfo> page, @Param("params") Map<String, Object> params);
}

View File

@ -2,14 +2,15 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.nu.modules.employeesInfo.mapper.BizEmployeesInfoMapper">
<update id="UpUserEmployeesId">
update sys_user set employees_id = id where id = #{userId}
update sys_user
set employees_id = id
where id = #{userId}
</update>
<select id="findById" resultType="com.nu.modules.employeesInfo.entity.BizEmployeesInfo">
select
id,
name,
sex,
select id,
name,
sex,
national,
head_path,
id_card,
@ -64,4 +65,102 @@
where id = #{id}
</select>
<select id="queryPageList" resultType="com.nu.modules.employeesInfo.entity.BizEmployeesInfo">
SELECT
ei.id AS id,
ei.name AS name,
ei.sex AS sex,
ei.national AS national,
ei.head_path AS headPath,
ei.id_card AS idCard,
ei.tel AS tel,
ei.entry_time AS entryTime,
ei.post_level AS postLevel,
ei.date_of_birth AS dateOfBirth,
ei.married_or_not AS marriedOrNot,
ei.wages AS wages,
ei.height AS height,
ei.weight AS weight,
ei.address AS address,
ei.current_address AS currentAddress,
ei.is_smoking AS isSmoking,
ei.health_status AS healthStatus,
ei.house_address AS houseAddress,
ei.political_appearance AS politicalAppearance,
ei.emergency_contact AS emergencyContact,
ei.emergency_tel AS emergencyTel,
ei.emergency_relationship AS emergencyRelationship,
ei.hukou_nature AS hukouNature,
ei.content AS content,
ei.id_card_positive AS idCardPositive,
ei.id_card_negative AS idCardNegative,
ei.contract_positive AS contractPositive,
ei.contract_negative AS contractNegative,
ei.health_certificate_positive AS healthCertificatePositive,
ei.health_certificate_negative AS healthCertificateNegative,
ei.bank_positive AS bankPositive,
ei.bank_negative AS bankNegative,
ei.qualification AS qualification,
ei.no_crime_certificate AS noCrimeCertificate,
ei.regional AS regional,
ei.service_tag AS serviceTag,
ei.del_flag AS delFlag,
ei.create_by AS createBy,
ei.create_time AS createTime,
ei.update_by AS updateBy,
ei.update_time AS updateTime,
ei.sys_org_code AS sysOrgCode,
ei.open_id AS openId,
ei.iz_online AS izOnline,
ei.iz_freeze AS izFreeze,
ei.opening_bank AS openingBank,
ei.bank_card AS bankCard,
ei.iz_invited AS izInvited,
ei.modify_status AS modifyStatus,
ei.start_time AS startTime,
ei.end_time AS endTime,
ei.order_cap AS orderCap,
usert.status AS userStatus,
usert.id AS userId
FROM nu_biz_employees_info AS ei
LEFT JOIN sys_user usert on ei.tel = usert.username
<where>
ei.del_flag = 0
<if test="params.name != null and params.name != ''">
AND ei.name LIKE CONCAT('%', #{params.name}, '%')
</if>
<if test="params.sex != null and params.sex != ''">
AND ei.sex = #{params.sex}
</if>
<if test="params.idCard != null and params.idCard != ''">
AND ei.id_card LIKE CONCAT('%', #{params.idCard}, '%')
</if>
<if test="params.tel != null and params.tel != ''">
AND ei.tel LIKE CONCAT('%', #{params.tel}, '%')
</if>
<if test="params.postLevel != null and params.postLevel != ''">
AND ei.post_level = #{params.postLevel}
</if>
<if test="params.regional != null and params.regional != ''">
AND ei.regional = #{params.regional}
</if>
<if test="params.izOnline != null and params.izOnline != ''">
AND ei.iz_online = #{params.izOnline}
</if>
<if test="params.izFreeze != null and params.izFreeze != ''">
AND ei.iz_freeze = #{params.izFreeze}
</if>
<if test="params.entryTimeStart != null">
AND ei.entry_time >= #{params.entryTimeStart}
</if>
<if test="params.entryTimeEnd != null">
AND ei.entry_time &lt;= #{params.entryTimeEnd}
</if>
<if test="params.sysOrgCode != null and params.sysOrgCode != ''">
AND ei.sys_org_code LIKE CONCAT(#{params.sysOrgCode}, '%')
</if>
</where>
ORDER BY ei.create_time DESC
</select>
</mapper>

View File

@ -1,16 +1,21 @@
package com.nu.modules.employeesInfo.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.nu.modules.employeesInfo.entity.BizEmployeesInfo;
import com.baomidou.mybatisplus.extension.service.IService;
import javax.servlet.http.HttpServletRequest;
/**
* @Description: 员工信息
* @Author: jeecg-boot
* @Date: 2025-04-01
* @Date: 2025-04-01
* @Version: V1.0
*/
public interface IBizEmployeesInfoService extends IService<BizEmployeesInfo> {
BizEmployeesInfo findById(BizEmployeesInfo bizEmployeesInfo);
void UpUserEmployeesId(String userId);
IPage<BizEmployeesInfo> queryPageList(BizEmployeesInfo bizEmployeesInfo, Integer pageNo, Integer pageSize, HttpServletRequest req);
}

View File

@ -2,6 +2,8 @@ package com.nu.modules.employeesInfo.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.nu.entity.EmployeesInfoEntity;
import com.nu.modules.IEmployeesInfoApi;
import com.nu.modules.employeesInfo.entity.BizEmployeesInfo;
@ -15,6 +17,7 @@ import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@ -34,7 +37,7 @@ public class BizEmployeesInfoServiceImpl extends ServiceImpl<BizEmployeesInfoMap
private INuAppEmployeesPermissionService nuAppEmployeesPermissionService;
@Override
public BizEmployeesInfo findById(BizEmployeesInfo bizEmployeesInfo){
public BizEmployeesInfo findById(BizEmployeesInfo bizEmployeesInfo) {
return baseMapper.findById(bizEmployeesInfo);
}
@ -95,4 +98,31 @@ public class BizEmployeesInfoServiceImpl extends ServiceImpl<BizEmployeesInfoMap
})
.collect(Collectors.toList());
}
public IPage<BizEmployeesInfo> queryPageList(BizEmployeesInfo bizEmployeesInfo,
Integer pageNo,
Integer pageSize,
HttpServletRequest req) {
Page<BizEmployeesInfo> page = new Page<>(pageNo, pageSize);
// 将查询参数转换为Map
Map<String, Object> params = new HashMap<>();
if (bizEmployeesInfo != null) {
params.put("name", bizEmployeesInfo.getName());
params.put("sex", bizEmployeesInfo.getSex());
params.put("idCard", bizEmployeesInfo.getIdCard());
params.put("tel", bizEmployeesInfo.getTel());
params.put("postLevel", bizEmployeesInfo.getPostLevel());
params.put("regional", bizEmployeesInfo.getRegional());
params.put("izOnline", bizEmployeesInfo.getIzOnline());
params.put("izFreeze", bizEmployeesInfo.getIzFreeze());
params.put("sysOrgCode", bizEmployeesInfo.getSysOrgCode());
}
// 从request中获取其他参数
params.put("entryTimeStart", req.getParameter("entryTimeStart"));
params.put("entryTimeEnd", req.getParameter("entryTimeEnd"));
return baseMapper.queryPageList(page, params);
}
}

View File

@ -50,12 +50,12 @@ public class SysUserOnlineController {
private BaseCommonService baseCommonService;
@RequestMapping(value = "/list", method = RequestMethod.GET)
public Result<Page<SysUserOnlineVO>> list(@RequestParam(name="username", required=false) String username,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo, @RequestParam(name="pageSize", defaultValue="10") Integer pageSize) {
public Result<Page<SysUserOnlineVO>> list(@RequestParam(name = "username", required = false) String username,
@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
Collection<String> keys = redisUtil.scan(CommonConstant.PREFIX_USER_TOKEN + "*");
List<SysUserOnlineVO> onlineList = new ArrayList<SysUserOnlineVO>();
for (String key : keys) {
String token = (String)redisUtil.get(key);
String token = (String) redisUtil.get(key);
if (StringUtils.isNotEmpty(token)) {
SysUserOnlineVO online = new SysUserOnlineVO();
online.setToken(token);
@ -64,12 +64,12 @@ public class SysUserOnlineController {
if (loginUser != null && !"_reserve_user_external".equals(loginUser.getUsername())) {
//update-begin---author:wangshuai ---date:20220104 for[JTC-382]在线用户查询无效------------
//验证用户名是否与传过来的用户名相同
boolean isMatchUsername=true;
boolean isMatchUsername = true;
//判断用户名是否为空并且当前循环的用户不包含传过来的用户名那么就设成false
if(oConvertUtils.isNotEmpty(username) && !loginUser.getUsername().contains(username)){
if (oConvertUtils.isNotEmpty(username) && !loginUser.getUsername().contains(username)) {
isMatchUsername = false;
}
if(isMatchUsername){
if (isMatchUsername) {
BeanUtils.copyProperties(loginUser, online);
onlineList.add(online);
}
@ -103,17 +103,17 @@ public class SysUserOnlineController {
/**
* 强退用户
*/
@RequestMapping(value = "/forceLogout",method = RequestMethod.POST)
@RequestMapping(value = "/forceLogout", method = RequestMethod.POST)
public Result<Object> forceLogout(@RequestBody SysUserOnlineVO online) {
//用户退出逻辑
if(oConvertUtils.isEmpty(online.getToken())) {
if (oConvertUtils.isEmpty(online.getToken())) {
return Result.error("退出登录失败!");
}
String username = JwtUtil.getUsername(online.getToken());
LoginUser sysUser = sysBaseApi.getUserByName(username);
if(sysUser!=null) {
baseCommonService.addLog("强制: "+sysUser.getRealname()+"退出成功!", CommonConstant.LOG_TYPE_1, null,sysUser);
log.info(" 强制 "+sysUser.getRealname()+"退出成功! ");
if (sysUser != null) {
baseCommonService.addLog("强制: " + sysUser.getRealname() + "退出成功!", CommonConstant.LOG_TYPE_1, null, sysUser);
log.info(" 强制 " + sysUser.getRealname() + "退出成功! ");
//清空用户登录Token缓存
redisUtil.del(CommonConstant.PREFIX_USER_TOKEN + online.getToken());
//清空用户登录Shiro权限缓存
@ -123,8 +123,47 @@ public class SysUserOnlineController {
//调用shiro的logout
SecurityUtils.getSubject().logout();
return Result.ok("退出登录成功!");
}else {
} else {
return Result.error("Token无效!");
}
}
@RequestMapping(value = "/forceLogoutByUsername", method = RequestMethod.POST)
public Result<Object> forceLogoutByUsername(@RequestBody SysUserOnlineVO userVo) {
Collection<String> keys = redisUtil.scan(CommonConstant.PREFIX_USER_TOKEN + "*");
List<SysUserOnlineVO> onlineList = new ArrayList<SysUserOnlineVO>();
for (String key : keys) {
String token = (String) redisUtil.get(key);
if (StringUtils.isNotEmpty(token)) {
SysUserOnlineVO online = new SysUserOnlineVO();
online.setToken(token);
LoginUser loginUser = sysBaseApi.getUserByName(JwtUtil.getUsername(token));
if (loginUser != null && loginUser.getUsername().equals(userVo.getUsername())){
//用户退出逻辑
if (oConvertUtils.isEmpty(online.getToken())) {
return Result.error("退出登录失败!");
}
String username = JwtUtil.getUsername(online.getToken());
LoginUser sysUser = sysBaseApi.getUserByName(username);
if (sysUser != null) {
baseCommonService.addLog("强制: " + sysUser.getRealname() + "退出成功!", CommonConstant.LOG_TYPE_1, null, sysUser);
log.info(" 强制 " + sysUser.getRealname() + "退出成功! ");
//清空用户登录Token缓存
redisUtil.del(CommonConstant.PREFIX_USER_TOKEN + online.getToken());
//清空用户登录Shiro权限缓存
redisUtil.del(CommonConstant.PREFIX_USER_SHIRO_CACHE + sysUser.getId());
//清空用户的缓存信息包括部门信息例如sys:cache:user::<username>
redisUtil.del(String.format("%s::%s", CacheConstant.SYS_USERS_CACHE, sysUser.getUsername()));
//调用shiro的logout
SecurityUtils.getSubject().logout();
return Result.ok("退出登录成功!");
} else {
return Result.error("Token无效!");
}
}
}
}
return Result.ok();
}
}

View File

@ -467,4 +467,5 @@ public interface ISysUserService extends IService<SysUser> {
* @param izOnline
*/
void modifyEmpOnline(SysUser sysUser, String izOnline);
}

View File

@ -2111,14 +2111,15 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
/**
* 修改员工在线状态
*
* @param sysUser
* @param izOnline
*/
@Override
public void modifyEmpOnline(SysUser sysUser, String izOnline){
public void modifyEmpOnline(SysUser sysUser, String izOnline) {
String employeeId = sysUser.getEmployeesId();
if(employeeId!=null&&!employeeId.equals("")){
userMapper.modifyEmpOnline(employeeId,izOnline);
if (employeeId != null && !employeeId.equals("")) {
userMapper.modifyEmpOnline(employeeId, izOnline);
}
}
}