From c7d92d01b02f6b26b17dc77b217f0ffe39615ebe Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期三, 03 六月 2026 09:13:43 +0800
Subject: [PATCH] feat(staff): 修改员工入职服务接口增加用户添加标识参数
---
src/main/java/com/ruoyi/staff/service/impl/StaffOnJobServiceImpl.java | 152 ++++++++++++++++++++++++++++++++++----------------
1 files changed, 104 insertions(+), 48 deletions(-)
diff --git a/src/main/java/com/ruoyi/staff/service/impl/StaffOnJobServiceImpl.java b/src/main/java/com/ruoyi/staff/service/impl/StaffOnJobServiceImpl.java
index 8336f90..3b116fc 100644
--- a/src/main/java/com/ruoyi/staff/service/impl/StaffOnJobServiceImpl.java
+++ b/src/main/java/com/ruoyi/staff/service/impl/StaffOnJobServiceImpl.java
@@ -6,33 +6,38 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.exception.base.BaseException;
-import com.ruoyi.common.utils.OrderUtils;
import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.dto.WordDateDto;
+import com.ruoyi.project.system.domain.SysDept;
import com.ruoyi.project.system.domain.SysPost;
+import com.ruoyi.project.system.domain.SysRole;
import com.ruoyi.project.system.domain.SysUser;
+import com.ruoyi.project.system.mapper.SysDeptMapper;
import com.ruoyi.project.system.mapper.SysPostMapper;
+import com.ruoyi.project.system.mapper.SysRoleMapper;
import com.ruoyi.project.system.mapper.SysUserMapper;
import com.ruoyi.project.system.service.impl.SysUserServiceImpl;
import com.ruoyi.staff.dto.StaffOnJobDto;
+import com.ruoyi.staff.dto.StaffOnJobExcelDto;
import com.ruoyi.staff.mapper.*;
import com.ruoyi.staff.pojo.*;
import com.ruoyi.staff.service.IStaffOnJobService;
import freemarker.template.Configuration;
import freemarker.template.Template;
-import lombok.AllArgsConstructor;
-
+import jakarta.servlet.http.HttpServletResponse;
+import lombok.RequiredArgsConstructor;
import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.collections4.ListUtils;
import org.springframework.beans.BeanUtils;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
-import javax.servlet.http.HttpServletResponse;
-import java.io.*;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.OutputStreamWriter;
+import java.io.StringWriter;
import java.nio.charset.StandardCharsets;
import java.time.Instant;
import java.time.LocalDate;
@@ -40,63 +45,50 @@
import java.util.*;
import java.util.stream.Collectors;
-@AllArgsConstructor
+@RequiredArgsConstructor
@Service
public class StaffOnJobServiceImpl extends ServiceImpl<StaffOnJobMapper, StaffOnJob> implements IStaffOnJobService {
- @Autowired
- private StaffOnJobMapper staffOnJobMapper;
- @Autowired
- private SysPostMapper sysPostMapper;
-
- @Autowired
- private StaffContractMapper staffContractMapper;
- @Autowired
- private StaffLeaveMapper staffLeaveMapper;
-
- @Autowired
- private SysUserServiceImpl sysUserService;
-
- @Autowired
- private SysUserMapper sysUserMapper;
-
- @Autowired
- private StaffEducationServiceImpl staffEducationService;
-
- @Autowired
- private StaffEducationMapper staffEducationMapper;
-
- @Autowired
- private StaffWorkExperienceMapper staffWorkExperienceMapper;
-
- @Autowired
- private StaffWorkExperienceServiceImpl staffWorkExperienceServiceImpl;
-
- @Autowired
- private StaffEmergencyContactMapper staffEmergencyContactMapper;
-
- @Autowired
- private StaffEmergencyContactServiceImpl staffEmergencyContactServiceImpl;
+ private final StaffOnJobMapper staffOnJobMapper;
+ private final SysDeptMapper sysDeptMapper;
+ private final SysRoleMapper sysRoleMapper;
+ private final SysPostMapper sysPostMapper;
+ private final StaffContractMapper staffContractMapper;
+ private final StaffLeaveMapper staffLeaveMapper;
+ private final PersonalAttendanceRecordsMapper personalAttendanceRecordsMapper;
+ private final SysUserServiceImpl sysUserService;
+ private final SysUserMapper sysUserMapper;
+ private final StaffEducationServiceImpl staffEducationService;
+ private final StaffEducationMapper staffEducationMapper;
+ private final StaffWorkExperienceMapper staffWorkExperienceMapper;
+ private final StaffWorkExperienceServiceImpl staffWorkExperienceServiceImpl;
+ private final StaffEmergencyContactMapper staffEmergencyContactMapper;
+ private final StaffEmergencyContactServiceImpl staffEmergencyContactServiceImpl;
//鍦ㄨ亴鍛樺伐鍙拌处鍒嗛〉鏌ヨ
@Override
- public IPage<StaffOnJobDto> staffOnJobListPage(Page page, StaffOnJob staffOnJob) {
- return staffOnJobMapper.staffOnJobListPage(page,staffOnJob);
+ public IPage<StaffOnJobDto> staffOnJobListPage(Page page, StaffOnJobDto staffOnJob) {
+ IPage<StaffOnJobDto> staffOnJobDtoIPage = staffOnJobMapper.staffOnJobListPage(page, staffOnJob);
+ return staffOnJobDtoIPage;
}
//鏂板鍏ヨ亴
@Override
@Transactional(rollbackFor = Exception.class)
- public int add(StaffOnJobDto staffOnJobPrams) {
+ public int add(StaffOnJobDto staffOnJobPrams,boolean isAddUser) {
String[] ignoreProperties = {"id"};//鎺掗櫎id灞炴��
// 鍒ゆ柇缂栧彿鏄惁瀛樺湪
List<StaffOnJob> staffOnJobs = staffOnJobMapper.selectList(Wrappers.<StaffOnJob>lambdaQuery().eq(StaffOnJob::getStaffNo, staffOnJobPrams.getStaffNo()));
if (staffOnJobs != null && !staffOnJobs.isEmpty()){
- throw new BaseException("缂栧彿涓�"+staffOnJobPrams.getStaffNo()+"鐨勫憳宸ュ凡缁忓瓨鍦�,鏃犳硶鏂板!!!");
+ if(isAddUser){
+ throw new BaseException("缂栧彿涓�"+staffOnJobPrams.getStaffNo()+"鐨勫憳宸ュ凡缁忓瓨鍦�,鏃犳硶鏂板!");
+ }
+ return 0;
}
// 鍒涘缓鍏ヨ亴鏁版嵁
+ syncStudyInfoFromEducation(staffOnJobPrams);
staffOnJobPrams.setContractExpireTime(staffOnJobPrams.getContractEndTime());
staffOnJobPrams.setStaffState(1);
staffOnJobMapper.insert(staffOnJobPrams);
@@ -155,6 +147,7 @@
// 缁戝畾瀛愯〃鏁版嵁
bingingStaffOnJobExtra(id,staffOnJobParams);
// 鏇存柊鍛樺伐鏁版嵁
+ syncStudyInfoFromEducation(staffOnJobParams);
staffOnJobParams.setContractExpireTime(staffOnJobParams.getContractEndTime());
return staffOnJobMapper.updateById(staffOnJobParams);
}
@@ -172,6 +165,7 @@
.forEach(staff -> staff.setStaffOnJobId(id)); // 璧嬪��
staffEducationService.saveBatch(staffOnJobPrams.getStaffEducationList());
}
+
// 鏂板宸ヤ綔缁忓巻
if(CollectionUtils.isNotEmpty(staffOnJobPrams.getStaffWorkExperienceList())){
staffOnJobPrams.getStaffWorkExperienceList().stream()
@@ -186,6 +180,28 @@
.forEach(staff -> staff.setStaffOnJobId(id)); // 璧嬪��
staffEmergencyContactServiceImpl.saveBatch(staffOnJobPrams.getStaffEmergencyContactList());
}
+ }
+
+ private void syncStudyInfoFromEducation(StaffOnJob staffOnJobPrams) {
+ if (staffOnJobPrams == null || CollectionUtils.isEmpty(staffOnJobPrams.getStaffEducationList())) {
+ if (staffOnJobPrams != null) {
+ staffOnJobPrams.setFirstStudy("/");
+ staffOnJobPrams.setProfession("/");
+ }
+ return;
+ }
+ Optional<StaffEducation> matchedEducation = staffOnJobPrams.getStaffEducationList().stream()
+ .filter(Objects::nonNull)
+ .filter(education -> StringUtils.isNotEmpty(education.getMajor()))
+ .findFirst();
+ if (matchedEducation.isPresent()) {
+ StaffEducation education = matchedEducation.get();
+ staffOnJobPrams.setFirstStudy(education.getEducation());
+ staffOnJobPrams.setProfession(education.getMajor());
+ return;
+ }
+ staffOnJobPrams.setFirstStudy("/");
+ staffOnJobPrams.setProfession("/");
}
@@ -215,6 +231,8 @@
staffOnJobMapper.deleteBatchIds(ids);
// 鍒犻櫎绂昏亴鏁版嵁
staffLeaveMapper.delete(Wrappers.<StaffLeave>lambdaQuery().in(StaffLeave::getStaffOnJobId, ids));
+ // 鍒犻櫎鎵撳崱璁板綍
+ personalAttendanceRecordsMapper.delete(Wrappers.<PersonalAttendanceRecords>lambdaQuery().in(PersonalAttendanceRecords::getStaffOnJobId, ids));
// 鍒犻櫎鐢ㄦ埛鏁版嵁
List<SysUser> sysUsers = sysUserMapper.selectList(Wrappers.<SysUser>lambdaQuery()
.in(SysUser::getUserName, staffOnJobs.stream().map(StaffOnJob::getStaffNo).collect(Collectors.toList())));
@@ -305,11 +323,49 @@
}
@Override
+ @Transactional(rollbackFor = Exception.class)
public Boolean importData(MultipartFile file) {
try {
- ExcelUtil<StaffOnJob> util = new ExcelUtil<>(StaffOnJob.class);
- List<StaffOnJob> staffOnJobs = util.importExcel(file.getInputStream());
- return saveOrUpdateBatch(staffOnJobs);
+ ExcelUtil<StaffOnJobExcelDto> util = new ExcelUtil<>(StaffOnJobExcelDto.class);
+ List<StaffOnJobExcelDto> staffOnJobs = util.importExcel(file.getInputStream());
+ if (CollectionUtils.isEmpty(staffOnJobs)){
+ return false;
+ }
+ // 鑾峰彇鎵�鏈夐儴闂ㄦ暟鎹�
+ List<SysDept> sysDepts = sysDeptMapper.selectList(Wrappers.<SysDept>lambdaQuery().eq(SysDept::getDelFlag, 0));
+ // 鑾峰彇鎵�鏈夎鑹叉暟鎹�
+ List<SysRole> sysRoles = sysRoleMapper.selectRoleAll();
+ for (StaffOnJobExcelDto staffOnJob : staffOnJobs) {
+ StaffOnJobDto staffOnJobDto = new StaffOnJobDto();
+ BeanUtils.copyProperties(staffOnJob, staffOnJobDto);
+ // 濡傛灉鍚堝悓骞撮檺涓虹┖锛屾牴鎹悎鍚屽紑濮嬫棩鏈熷拰缁撴潫鏃ユ湡璁$畻
+ if (StringUtils.isEmpty(staffOnJob.getContractTerm())
+ && staffOnJob.getContractStartTime() != null
+ && staffOnJob.getContractEndTime() != null) {
+ LocalDate start = staffOnJob.getContractStartTime().toInstant()
+ .atZone(ZoneId.of("Asia/Shanghai")).toLocalDate();
+ LocalDate end = staffOnJob.getContractEndTime().toInstant()
+ .atZone(ZoneId.of("Asia/Shanghai")).toLocalDate();
+ int years = end.getYear() - start.getYear();
+ staffOnJobDto.setContractTerm(String.valueOf(years));
+ }
+ // 閫氳繃鍚嶇О鑾峰彇閮ㄩ棬id
+ staffOnJobDto.setSysDeptId(// ... existing code ...
+ sysDepts.stream()
+ .filter(dept -> dept.getDeptName() != null && dept.getDeptName().equals(staffOnJob.getSysDeptName()))
+ .findFirst()
+ .map(SysDept::getDeptId)
+ .orElse(null)
+ );
+ // 閫氳繃鍚嶇О鑾峰彇瑙掕壊id
+ staffOnJobDto.setRoleId(sysRoles.stream()
+ .filter(role -> role.getRoleName() != null && role.getRoleName().equals(staffOnJob.getRoleName()))
+ .findFirst()
+ .map(SysRole::getRoleId)
+ .orElse( null));
+ int i = add(staffOnJobDto,false);
+ }
+ return true;
} catch (Exception e) {
e.printStackTrace();
return false;
--
Gitblit v1.9.3