From 2fe3fbf034a6d4bc58ae20ebf7aba2cf230dafa1 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期一, 24 八月 2026 14:20:37 +0800
Subject: [PATCH] ``` feat(staff): 完善员工在职信息管理功能

---
 src/main/java/com/ruoyi/staff/service/impl/StaffOnJobServiceImpl.java |  131 ++++++++++++++++++++++++-------------------
 1 files changed, 74 insertions(+), 57 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 3613da3..e17cc90 100644
--- a/src/main/java/com/ruoyi/staff/service/impl/StaffOnJobServiceImpl.java
+++ b/src/main/java/com/ruoyi/staff/service/impl/StaffOnJobServiceImpl.java
@@ -6,8 +6,8 @@
 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;
@@ -26,18 +26,18 @@
 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;
@@ -45,59 +45,32 @@
 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 SysDeptMapper sysDeptMapper;
-
-    @Autowired
-    private SysRoleMapper sysRoleMapper;
-
-    @Autowired
-    private SysPostMapper sysPostMapper;
-
-    @Autowired
-    private StaffContractMapper staffContractMapper;
-    @Autowired
-    private StaffLeaveMapper staffLeaveMapper;
-
-    @Autowired
-    private PersonalAttendanceRecordsMapper personalAttendanceRecordsMapper;
-
-    @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;
     }
 
     //鏂板鍏ヨ亴
@@ -112,6 +85,7 @@
         }
 
         // 鍒涘缓鍏ヨ亴鏁版嵁
+        syncStudyInfoFromEducation(staffOnJobPrams);
         staffOnJobPrams.setContractExpireTime(staffOnJobPrams.getContractEndTime());
         staffOnJobPrams.setStaffState(1);
         staffOnJobMapper.insert(staffOnJobPrams);
@@ -153,15 +127,25 @@
             throw new BaseException("缂栧彿涓�"+staffOnJobParams.getStaffNo()+"鐨勫憳宸ヤ笉瀛樺湪,鏃犳硶鏇存柊!!!");
         }
 
-        String[] ignoreProperties = {"id"};//鎺掗櫎鏇存柊灞炴��
-
         // 鑾峰彇鏈�鏂板悎鍚屾暟鎹紝骞朵笖鏇存柊
         StaffContract contract = staffContractMapper.selectOne(Wrappers.<StaffContract>lambdaQuery()
                 .eq(StaffContract::getStaffOnJobId, id)
                 .last("limit 1")
                 .orderByDesc(StaffContract::getId));
-        if (contract != null){
-            BeanUtils.copyProperties(staffOnJobParams,contract,ignoreProperties);
+        boolean hasContractData = staffOnJobParams.getContractTerm() != null
+                || staffOnJobParams.getContractStartTime() != null
+                || staffOnJobParams.getContractEndTime() != null;
+        if (contract == null && hasContractData) {
+            contract = new StaffContract();
+            contract.setStaffOnJobId(id);
+            contract.setContractTerm(staffOnJobParams.getContractTerm());
+            contract.setContractStartTime(staffOnJobParams.getContractStartTime());
+            contract.setContractEndTime(staffOnJobParams.getContractEndTime());
+            staffContractMapper.insert(contract);
+        } else if (contract != null) {
+            contract.setContractTerm(staffOnJobParams.getContractTerm());
+            contract.setContractStartTime(staffOnJobParams.getContractStartTime());
+            contract.setContractEndTime(staffOnJobParams.getContractEndTime());
             staffContractMapper.updateById(contract);
         }
 
@@ -170,6 +154,8 @@
         // 缁戝畾瀛愯〃鏁版嵁
         bingingStaffOnJobExtra(id,staffOnJobParams);
         // 鏇存柊鍛樺伐鏁版嵁
+        syncStudyInfoFromEducation(staffOnJobParams);
+        staffOnJobParams.setId(id);
         staffOnJobParams.setContractExpireTime(staffOnJobParams.getContractEndTime());
         return staffOnJobMapper.updateById(staffOnJobParams);
     }
@@ -187,6 +173,7 @@
                     .forEach(staff -> staff.setStaffOnJobId(id)); // 璧嬪��
             staffEducationService.saveBatch(staffOnJobPrams.getStaffEducationList());
         }
+
         // 鏂板宸ヤ綔缁忓巻
         if(CollectionUtils.isNotEmpty(staffOnJobPrams.getStaffWorkExperienceList())){
             staffOnJobPrams.getStaffWorkExperienceList().stream()
@@ -201,6 +188,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("/");
     }
 
 
@@ -335,8 +344,16 @@
             // 鑾峰彇鎵�鏈夎鑹叉暟鎹�
             List<SysRole> sysRoles = sysRoleMapper.selectRoleAll();
             staffOnJobs.forEach(staffOnJob -> {
+                if (staffOnJob.getStaffNo() == null || staffOnJob.getStaffNo().trim().isEmpty()) {
+                    throw new BaseException("鍛樺伐缂栧彿涓嶈兘涓虹┖锛屽憳宸ュ鍚嶏細" + staffOnJob.getStaffName());
+                }
                 StaffOnJobDto staffOnJobDto = new StaffOnJobDto();
                 BeanUtils.copyProperties(staffOnJob, staffOnJobDto);
+                staffOnJobDto.setContractStartTime(staffOnJob.getContractStartTime());
+                staffOnJobDto.setContractEndTime(staffOnJob.getContractEndTime());
+                staffOnJobDto.setContractTerm(staffOnJob.getContractTerm());
+                staffOnJobDto.setStaffNo(staffOnJob.getStaffNo());
+                staffOnJobDto.setStaffName(staffOnJob.getStaffName());
                 // 閫氳繃鍚嶇О鑾峰彇閮ㄩ棬id
                 staffOnJobDto.setSysDeptId(// ... existing code ...
                         sysDepts.stream()

--
Gitblit v1.9.3