实现了姓名不能重复包括在职离职员工,还实现了请假, 餐饮, 考勤的部门修改及时生效。

This commit is contained in:
wzt 2026-07-14 16:28:21 +08:00
parent 39fee88bdd
commit 74d8266b37
9 changed files with 76 additions and 14 deletions

View File

@ -175,17 +175,17 @@ public class RzAttendanceStatisticalServiceImpl extends ServiceImpl<RzAttendance
if(!rzAttendanceStatistical.getName().equals(sysStaff.getName())){ if(!rzAttendanceStatistical.getName().equals(sysStaff.getName())){
//修改部门和姓名 //修改部门和姓名
rzAttendanceStatistical.setName(sysStaff.getName()); rzAttendanceStatistical.setName(sysStaff.getName());
if(rzAttendanceStatistical.getDeptId() == null){ //if(rzAttendanceStatistical.getDeptId() == null){
rzAttendanceStatistical.setDeptId(sysStaff.getDeptId()); rzAttendanceStatistical.setDeptId(sysStaff.getDeptId());
} //}
getBaseMapper().updateRzAttendanceStatistical(rzAttendanceStatistical); getBaseMapper().updateRzAttendanceStatistical(rzAttendanceStatistical);
//查询考勤详情修改 //查询考勤详情修改
List<RzAttendance> kq_list = rzAttendanceMapper.queryMonthAttendanceByStaffId(sysStaff.getUserId(),new Date()); List<RzAttendance> kq_list = rzAttendanceMapper.queryMonthAttendanceByStaffId(sysStaff.getUserId(),new Date());
//循环修改信息 //循环修改信息
for (RzAttendance rzAttendance : kq_list) { for (RzAttendance rzAttendance : kq_list) {
if(rzAttendanceStatistical.getDeptId() == null){ //if(rzAttendanceStatistical.getDeptId() == null){
rzAttendance.setDeptId(sysStaff.getDeptId()); rzAttendance.setDeptId(sysStaff.getDeptId());
} //}
rzAttendance.setName(sysStaff.getName()); rzAttendance.setName(sysStaff.getName());
rzAttendanceMapper.updateRzAttendance(rzAttendance); rzAttendanceMapper.updateRzAttendance(rzAttendance);
} }

View File

@ -4,6 +4,7 @@ import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.evo.common.config.Global;
import com.evo.common.constant.Constants; import com.evo.common.constant.Constants;
import com.evo.common.core.domain.AjaxResult; import com.evo.common.core.domain.AjaxResult;
import com.evo.common.core.domain.entity.RzUpload; import com.evo.common.core.domain.entity.RzUpload;
@ -26,6 +27,7 @@ import com.evo.system.domain.SysStaff;
import com.evo.system.mapper.SysStaffMapper; import com.evo.system.mapper.SysStaffMapper;
import com.evo.system.service.RzUploadService; import com.evo.system.service.RzUploadService;
import com.evo.system.service.impl.SysDeptServiceImpl; import com.evo.system.service.impl.SysDeptServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner; import org.springframework.boot.ApplicationRunner;
@ -45,6 +47,7 @@ import java.util.stream.Collectors;
* @author chenyj * @author chenyj
* @date 2024-08-07 * @date 2024-08-07
*/ */
@Slf4j
@Service @Service
public class EqSnDetailServiceImpl extends ServiceImpl<EqSnDetailMapper, EqSnDetail> implements IEqSnDetailService public class EqSnDetailServiceImpl extends ServiceImpl<EqSnDetailMapper, EqSnDetail> implements IEqSnDetailService
{ {
@ -206,6 +209,10 @@ public class EqSnDetailServiceImpl extends ServiceImpl<EqSnDetailMapper, EqSnDet
@Override @Override
public Boolean sendPhoto(List<String> snList, List<Map<String, String>> userPhotoList) { public Boolean sendPhoto(List<String> snList, List<Map<String, String>> userPhotoList) {
if(!"druid".equals(Global.newInstance().getActive())){
log.info("非生产环境, 无需下发照片");
return true;
}
//检查设备是否在链接状态 //检查设备是否在链接状态
Map<String, Session> sessionMap = checkSession(snList); Map<String, Session> sessionMap = checkSession(snList);
@ -238,6 +245,7 @@ public class EqSnDetailServiceImpl extends ServiceImpl<EqSnDetailMapper, EqSnDet
}); });
} }
//发送数据的类型 //发送数据的类型
StaffDto cau = new StaffDto(); StaffDto cau = new StaffDto();
//该接口固定为to_device发送给设备用于识别对应哪个指令 //该接口固定为to_device发送给设备用于识别对应哪个指令

View File

@ -57,4 +57,6 @@ public interface RzLeaveMapper extends BaseMapper<RzLeave>
* @return * @return
*/ */
public RzLeave queryRzLeaveByUserId(@Param("userId") Long userId); public RzLeave queryRzLeaveByUserId(@Param("userId") Long userId);
public int updateDeptIdByStaffId(@Param("deptId") Long deptId, @Param("userId") Long userId);
} }

View File

@ -244,9 +244,9 @@ public class RzRestaurantStatisticsServiceImpl extends ServiceImpl<RzRestaurantS
private void create(Long staffId, Long deptId, String name, Date date){ private void create(Long staffId, Long deptId, String name, Date date){
RzRestaurantStatistics rzRestaurantStatistics = getBaseMapper().selectRzRestaurantStatisticsByUserIdAndDate(staffId,date); RzRestaurantStatistics rzRestaurantStatistics = getBaseMapper().selectRzRestaurantStatisticsByUserIdAndDate(staffId,date);
if(StringUtils.isNotNull(rzRestaurantStatistics)){ if(StringUtils.isNotNull(rzRestaurantStatistics)){
if(rzRestaurantStatistics.getDeptId() == null){ //if(rzRestaurantStatistics.getDeptId() == null){
rzRestaurantStatistics.setDeptId(deptId); rzRestaurantStatistics.setDeptId(deptId);
} //}
rzRestaurantStatistics.setName(name); rzRestaurantStatistics.setName(name);
getBaseMapper().updateRzRestaurantStatistics(rzRestaurantStatistics); getBaseMapper().updateRzRestaurantStatistics(rzRestaurantStatistics);
return; return;

View File

@ -1,5 +1,10 @@
package com.evo.system.controller; package com.evo.system.controller;
import com.evo.system.domain.vo.StaffNameDTO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import javax.annotation.Resource;
import com.evo.system.service.ISysStaffService;
import org.springframework.web.bind.annotation.RequestBody;
import com.evo.attendance.domain.vo.RzSalaryVo; import com.evo.attendance.domain.vo.RzSalaryVo;
import com.evo.common.annotation.Log; import com.evo.common.annotation.Log;
import com.evo.common.annotation.RepeatSubmit; import com.evo.common.annotation.RepeatSubmit;
@ -10,15 +15,14 @@ import com.evo.common.enums.BusinessType;
import com.evo.common.utils.poi.ExcelUtil; import com.evo.common.utils.poi.ExcelUtil;
import com.evo.system.domain.SysStaff; import com.evo.system.domain.SysStaff;
import com.evo.system.domain.vo.SysStaffVo; import com.evo.system.domain.vo.SysStaffVo;
import com.evo.system.service.ISysStaffService;
import org.apache.ibatis.annotations.Param;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.util.List; import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
/** /**
* 员工管理Controller * 员工管理Controller
@ -33,6 +37,12 @@ public class SysStaffController extends BaseController
@Resource @Resource
private ISysStaffService sysStaffService; private ISysStaffService sysStaffService;
@PostMapping("/checkName")
public AjaxResult checkStaffName(@RequestBody StaffNameDTO dto) {
boolean repeat = sysStaffService.checkNameRepeat(dto.getId(), dto.getName());
return AjaxResult.success(repeat);
}
/** /**
* 查询员工管理列表 * 查询员工管理列表
*/ */

View File

@ -9,7 +9,7 @@ import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.util.List; import java.util.List;
import com.evo.system.domain.vo.StaffNameDTO;
/** /**
* 员工管理Service接口 * 员工管理Service接口
* *
@ -24,6 +24,13 @@ public interface ISysStaffService extends IService<SysStaff>
* @param userId 员工管理主键 * @param userId 员工管理主键
* @return 员工管理 * @return 员工管理
*/ */
/**
* 校验员工名称是否重复
* @param id 员工主键ID新增时传null
* @param name 员工姓名
* @return true 名称重复false 名称可用
*/
boolean checkNameRepeat(Long id, String name);
public SysStaff selectSysStaffByUserId(Long userId); public SysStaff selectSysStaffByUserId(Long userId);
/** /**
* 查询员工管理列表 * 查询员工管理列表
@ -137,4 +144,11 @@ public interface ISysStaffService extends IService<SysStaff>
public void sysStaffLeaveByDingUserId(String dingUserId); public void sysStaffLeaveByDingUserId(String dingUserId);
AjaxResult getDingUserId(String userName); AjaxResult getDingUserId(String userName);
/**
* 校验员工姓名是否重复包含在职离职全部员工全局唯一
* @param userId 当前员工主键新增传null编辑传员工userId
* @param name 待校验姓名
* @return true=存在重名false=无重名
*/
} }

View File

@ -29,6 +29,7 @@ import com.evo.finance.service.IRzSalaryDetailService;
import com.evo.kingdeeUtils.KingdeeRequestUtils; import com.evo.kingdeeUtils.KingdeeRequestUtils;
import com.evo.kingdeeUtils.kenum.KingdeeParamsEnum; import com.evo.kingdeeUtils.kenum.KingdeeParamsEnum;
import com.evo.personnelMatters.domain.RzSubsidyInfo; import com.evo.personnelMatters.domain.RzSubsidyInfo;
import com.evo.personnelMatters.mapper.RzLeaveMapper;
import com.evo.personnelMatters.mapper.RzSubsidyInfoMapper; import com.evo.personnelMatters.mapper.RzSubsidyInfoMapper;
import com.evo.restaurant.service.IRzRestaurantStatisticsService; import com.evo.restaurant.service.IRzRestaurantStatisticsService;
import com.evo.system.domain.SysStaff; import com.evo.system.domain.SysStaff;
@ -90,6 +91,18 @@ public class SysStaffServiceImpl extends ServiceImpl<SysStaffMapper, SysStaff> i
private RzSubsidyInfoMapper rzSubsidyInfoMapper; private RzSubsidyInfoMapper rzSubsidyInfoMapper;
@Resource @Resource
IRzSalaryDetailService rzSalaryDetailService; IRzSalaryDetailService rzSalaryDetailService;
@Resource
private RzLeaveMapper rzLeaveMapper;
@Override
public boolean checkNameRepeat(Long userId, String name) {
LambdaQueryWrapper<SysStaff> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(SysStaff::getName, name.trim());
// 编辑时排除自身员工
if(userId != null){
wrapper.ne(SysStaff::getUserId, userId);
}
return this.count(wrapper) > 0;
}
/** /**
* 查询员工管理 * 查询员工管理
* *
@ -131,6 +144,10 @@ public class SysStaffServiceImpl extends ServiceImpl<SysStaffMapper, SysStaff> i
@Transactional @Transactional
public AjaxResult insertSysStaff(SysStaff sysStaff) public AjaxResult insertSysStaff(SysStaff sysStaff)
{ {
boolean repeat = checkNameRepeat(null, sysStaff.getName());
if(repeat){
return AjaxResult.error("姓名【"+sysStaff.getName()+"】已存在,所有员工(含离职)不可重名");
}
//根据省份证号查询是否已经录入 //根据省份证号查询是否已经录入
SysStaff p_staff = getBaseMapper().queryysStaffByIdCard(sysStaff.getIdCard()); SysStaff p_staff = getBaseMapper().queryysStaffByIdCard(sysStaff.getIdCard());
if(StringUtils.isNotNull(p_staff)){ if(StringUtils.isNotNull(p_staff)){
@ -359,7 +376,10 @@ public class SysStaffServiceImpl extends ServiceImpl<SysStaffMapper, SysStaff> i
@Transactional @Transactional
public AjaxResult updateSysStaff(SysStaff sysStaff) public AjaxResult updateSysStaff(SysStaff sysStaff)
{ {
boolean repeat = checkNameRepeat(sysStaff.getUserId(), sysStaff.getName());
if(repeat){
return AjaxResult.error("姓名【"+sysStaff.getName()+"】已存在,所有员工(含离职)不可重名");
}
if(StringUtils.isNotEmpty(sysStaff.getSource()) && sysStaff.getSource().equals(Constants.SOURCE_DING) && StringUtils.isEmpty(sysStaff.getSex())){ if(StringUtils.isNotEmpty(sysStaff.getSource()) && sysStaff.getSource().equals(Constants.SOURCE_DING) && StringUtils.isEmpty(sysStaff.getSex())){
//根据省份证确定性别和年龄 //根据省份证确定性别和年龄
sysStaff.setAge(Long.parseLong(new SimpleDateFormat("yyyy").format(new Date())) - Long.parseLong(sysStaff.getIdCard().substring(6,10))); sysStaff.setAge(Long.parseLong(new SimpleDateFormat("yyyy").format(new Date())) - Long.parseLong(sysStaff.getIdCard().substring(6,10)));
@ -465,6 +485,11 @@ public class SysStaffServiceImpl extends ServiceImpl<SysStaffMapper, SysStaff> i
sysStaffDetail.setTotalWages(DataUtils.DEFAULT_VALUE); sysStaffDetail.setTotalWages(DataUtils.DEFAULT_VALUE);
sysStaffDetail.setAggregatePersonalIncomeTax(DataUtils.DEFAULT_VALUE); sysStaffDetail.setAggregatePersonalIncomeTax(DataUtils.DEFAULT_VALUE);
sysStaffDetailMapper.updateById(sysStaffDetail); sysStaffDetailMapper.updateById(sysStaffDetail);
}
//判断是否修改部门
if(!old_staff.getDeptId().equals(sysStaff.getDeptId())) {
//请假数据处理
rzLeaveMapper.updateDeptIdByStaffId(sysStaff.getDeptId(), sysStaff.getUserId());
} }
//如果是部门负责人, 修改部门领导信息 //如果是部门负责人, 修改部门领导信息
if("".equals(sysStaff.getIsLeader())){ if("".equals(sysStaff.getIsLeader())){
@ -491,6 +516,7 @@ public class SysStaffServiceImpl extends ServiceImpl<SysStaffMapper, SysStaff> i
rzRestaurantStatisticsService.createRestaurantStatistics(sysStaff, DateUtils.getNowDate()); rzRestaurantStatisticsService.createRestaurantStatistics(sysStaff, DateUtils.getNowDate());
//处理考勤机相关信息 //处理考勤机相关信息
initCheckDevice(sysStaff); initCheckDevice(sysStaff);
// } // }
return AjaxResult.success(); return AjaxResult.success();
} }

View File

@ -7,7 +7,7 @@ spring:
# 热部署开关 # 热部署开关
redis: redis:
# 地址 # 地址
host: localhost host: 192.168.5.232
# 端口默认为6379 # 端口默认为6379
port: 6379 port: 6379
# 数据库索引 # 数据库索引

View File

@ -121,5 +121,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
where del_flag = '0' and user_id = #{userId} order by create_time desc limit 1 where del_flag = '0' and user_id = #{userId} order by create_time desc limit 1
</select> </select>
<update id="updateDeptIdByStaffId" >
update rz_leave set dept_id=#{deptId} where user_id = #{userId}
</update>
</mapper> </mapper>