From 9af5090f5d4597fbcfdf53a71189175892d29109 Mon Sep 17 00:00:00 2001
From: maven <2163098428@qq.com>
Date: 星期四, 05 三月 2026 17:44:35 +0800
Subject: [PATCH] yys 人力资源-员工台账模块优化

---
 src/main/java/com/ruoyi/staff/service/impl/StaffOnJobServiceImpl.java |  169 ++++++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 146 insertions(+), 23 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 21f4c2b..8336f90 100644
--- a/src/main/java/com/ruoyi/staff/service/impl/StaffOnJobServiceImpl.java
+++ b/src/main/java/com/ruoyi/staff/service/impl/StaffOnJobServiceImpl.java
@@ -1,31 +1,32 @@
 package com.ruoyi.staff.service.impl;
 
 
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 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.poi.ExcelUtil;
 import com.ruoyi.dto.WordDateDto;
 import com.ruoyi.project.system.domain.SysPost;
+import com.ruoyi.project.system.domain.SysUser;
 import com.ruoyi.project.system.mapper.SysPostMapper;
+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.mapper.StaffContractMapper;
-import com.ruoyi.staff.mapper.StaffJoinLeaveRecordMapper;
-import com.ruoyi.staff.mapper.StaffLeaveMapper;
-import com.ruoyi.staff.mapper.StaffOnJobMapper;
-import com.ruoyi.staff.pojo.StaffContract;
-import com.ruoyi.staff.pojo.StaffJoinLeaveRecord;
-import com.ruoyi.staff.pojo.StaffLeave;
-import com.ruoyi.staff.pojo.StaffOnJob;
+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 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;
@@ -37,19 +38,45 @@
 import java.time.LocalDate;
 import java.time.ZoneId;
 import java.util.*;
+import java.util.stream.Collectors;
 
 @AllArgsConstructor
 @Service
 public class StaffOnJobServiceImpl extends ServiceImpl<StaffOnJobMapper, StaffOnJob>  implements IStaffOnJobService {
 
-
+    @Autowired
     private StaffOnJobMapper staffOnJobMapper;
-
+    @Autowired
     private SysPostMapper sysPostMapper;
 
-    private StaffJoinLeaveRecordMapper staffJoinLeaveRecordMapper;
+    @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;
 
 
     //鍦ㄨ亴鍛樺伐鍙拌处鍒嗛〉鏌ヨ
@@ -65,13 +92,33 @@
         String[] ignoreProperties = {"id"};//鎺掗櫎id灞炴��
         // 鍒ゆ柇缂栧彿鏄惁瀛樺湪
         List<StaffOnJob> staffOnJobs = staffOnJobMapper.selectList(Wrappers.<StaffOnJob>lambdaQuery().eq(StaffOnJob::getStaffNo, staffOnJobPrams.getStaffNo()));
-        if (staffOnJobs.size()>0){
+        if (staffOnJobs != null && !staffOnJobs.isEmpty()){
             throw new BaseException("缂栧彿涓�"+staffOnJobPrams.getStaffNo()+"鐨勫憳宸ュ凡缁忓瓨鍦�,鏃犳硶鏂板!!!");
         }
+
         // 鍒涘缓鍏ヨ亴鏁版嵁
         staffOnJobPrams.setContractExpireTime(staffOnJobPrams.getContractEndTime());
+        staffOnJobPrams.setStaffState(1);
         staffOnJobMapper.insert(staffOnJobPrams);
-
+        // 鏌ヨ鐢ㄦ埛鏄惁宸茬粡鏂板
+        SysUser sysUser = sysUserService.selectUserById(staffOnJobPrams.getId());
+        if(sysUser == null){
+            SysUser sysUser1 = new SysUser();
+            sysUser1.setUserName(staffOnJobPrams.getStaffNo());
+            sysUser1.setNickName(staffOnJobPrams.getStaffName());
+            String s = SecurityUtils.encryptPassword("123456");
+            sysUser1.setPassword(s);
+            if(staffOnJobPrams.getSysPostId() != null){
+                Long[] posts = new Long[]{staffOnJobPrams.getSysPostId().longValue()};
+                sysUser1.setPostIds(posts);
+            }
+            sysUser1.setRoleIds(new Long[]{staffOnJobPrams.getRoleId()});
+            sysUser1.setDeptIds(new  Long[]{staffOnJobPrams.getSysDeptId()});
+            sysUser1.setStatus("0");
+            sysUserService.insertUser(sysUser1);
+        }
+        // 缁戝畾瀛愯〃鏁版嵁
+        bingingStaffOnJobExtra(staffOnJobPrams.getId(),staffOnJobPrams);
         // 鍒涘缓鍚堝悓璁板綍
         StaffContract staffContract = new StaffContract();
         staffContract.setStaffOnJobId(staffOnJobPrams.getId());
@@ -91,7 +138,7 @@
             throw new BaseException("缂栧彿涓�"+staffOnJobParams.getStaffNo()+"鐨勫憳宸ヤ笉瀛樺湪,鏃犳硶鏇存柊!!!");
         }
 
-        String[] ignoreProperties = {"id"};//鎺掗櫎id灞炴��
+        String[] ignoreProperties = {"id"};//鎺掗櫎鏇存柊灞炴��
 
         // 鑾峰彇鏈�鏂板悎鍚屾暟鎹紝骞朵笖鏇存柊
         StaffContract contract = staffContractMapper.selectOne(Wrappers.<StaffContract>lambdaQuery()
@@ -103,20 +150,81 @@
             staffContractMapper.updateById(contract);
         }
 
+        // 鍒犻櫎鎵�鏈夊瓙琛ㄦ暟鎹�
+        delStaffOnJobExtra(Arrays.asList(id));
+        // 缁戝畾瀛愯〃鏁版嵁
+        bingingStaffOnJobExtra(id,staffOnJobParams);
         // 鏇存柊鍛樺伐鏁版嵁
-        BeanUtils.copyProperties(staffOnJobParams,job,ignoreProperties);
-        job.setContractExpireTime(staffOnJobParams.getContractEndTime());
-        return staffOnJobMapper.updateById(job);
+        staffOnJobParams.setContractExpireTime(staffOnJobParams.getContractEndTime());
+        return staffOnJobMapper.updateById(staffOnJobParams);
+    }
+
+    /**
+     * 缁戝畾鍛樺伐瀛愯〃鏁版嵁
+     * @param staffOnJobPrams
+     * @param id
+     */
+    public void bingingStaffOnJobExtra(Long id,StaffOnJob staffOnJobPrams) {
+        // 鏂板鏁欒偛缁忓巻
+        if(CollectionUtils.isNotEmpty(staffOnJobPrams.getStaffEducationList())){
+            staffOnJobPrams.getStaffEducationList().stream()
+                    .filter(Objects::nonNull) // 杩囨护null瀵硅薄锛岄伩鍏嶇┖鎸囬拡
+                    .forEach(staff -> staff.setStaffOnJobId(id)); // 璧嬪��
+            staffEducationService.saveBatch(staffOnJobPrams.getStaffEducationList());
+        }
+        // 鏂板宸ヤ綔缁忓巻
+        if(CollectionUtils.isNotEmpty(staffOnJobPrams.getStaffWorkExperienceList())){
+            staffOnJobPrams.getStaffWorkExperienceList().stream()
+                    .filter(Objects::nonNull) // 杩囨护null瀵硅薄锛岄伩鍏嶇┖鎸囬拡
+                    .forEach(staff -> staff.setStaffOnJobId(id)); // 璧嬪��
+            staffWorkExperienceServiceImpl.saveBatch(staffOnJobPrams.getStaffWorkExperienceList());
+        }
+        // 鏂板绱ф�ヨ仈绯讳汉
+        if(CollectionUtils.isNotEmpty(staffOnJobPrams.getStaffEmergencyContactList())){
+            staffOnJobPrams.getStaffEmergencyContactList().stream()
+                    .filter(Objects::nonNull) // 杩囨护null瀵硅薄锛岄伩鍏嶇┖鎸囬拡
+                    .forEach(staff -> staff.setStaffOnJobId(id)); // 璧嬪��
+            staffEmergencyContactServiceImpl.saveBatch(staffOnJobPrams.getStaffEmergencyContactList());
+        }
+    }
+
+
+    /**
+     * 閫氳繃鍛樺伐id鍒犻櫎鏁欒偛缁忓巻锛屽伐浣滅粡鍘嗭紝绱ф�ヨ仈绯讳汉
+     * @param ids
+     * @return
+     */
+    public void delStaffOnJobExtra(List<Long> ids) {
+        // 鍒犻櫎鏁欒偛缁忓巻
+        staffEducationService.remove(Wrappers.<StaffEducation>lambdaQuery().in(StaffEducation::getStaffOnJobId,ids));
+        // 鍒犻櫎宸ヤ綔缁忓巻
+        staffWorkExperienceServiceImpl.remove(Wrappers.<StaffWorkExperience>lambdaQuery().in(StaffWorkExperience::getStaffOnJobId,ids));
+        // 鍒犻櫎绱ф�ヨ仈绯讳汉
+        staffEmergencyContactServiceImpl.remove(Wrappers.<StaffEmergencyContact>lambdaQuery().in(StaffEmergencyContact::getStaffOnJobId,ids));
     }
 
     //鍒犻櫎鍏ヨ亴
     @Override
     @Transactional(rollbackFor = Exception.class)
     public int delStaffOnJobs(List<Integer> ids) {
+        List<StaffOnJob> staffOnJobs = staffOnJobMapper.selectList(Wrappers.<StaffOnJob>lambdaQuery().in(StaffOnJob::getId, ids));
+        if(CollectionUtils.isEmpty(staffOnJobs)){
+            throw new BaseException("璇ュ憳宸ヤ笉瀛樺湪,鏃犳硶鍒犻櫎!!!");
+        }
         // 鍒犻櫎鍏ヨ亴鏁版嵁
         staffOnJobMapper.deleteBatchIds(ids);
         // 鍒犻櫎绂昏亴鏁版嵁
         staffLeaveMapper.delete(Wrappers.<StaffLeave>lambdaQuery().in(StaffLeave::getStaffOnJobId, ids));
+        // 鍒犻櫎鐢ㄦ埛鏁版嵁
+        List<SysUser> sysUsers = sysUserMapper.selectList(Wrappers.<SysUser>lambdaQuery()
+                .in(SysUser::getUserName, staffOnJobs.stream().map(StaffOnJob::getStaffNo).collect(Collectors.toList())));
+        if(CollectionUtils.isNotEmpty(sysUsers)){
+            Long[] longs = sysUsers.stream().map(SysUser::getUserId).toArray(Long[]::new);
+            sysUserService.deleteUserByIds(longs);
+        }
+        // 鍒犻櫎瀛愯〃鏁版嵁
+        delStaffOnJobExtra(ids.stream().map(Integer::longValue).collect(Collectors.toList()));
+
         // 鍒犻櫎鍚堝悓鏁版嵁
         return staffContractMapper.delete(Wrappers.<StaffContract>lambdaQuery().in(StaffContract::getStaffOnJobId, ids));
     }
@@ -149,11 +257,19 @@
     @Override
     public StaffOnJobDto staffOnJobDetail(Long id) {
         StaffOnJob staffOnJob  = staffOnJobMapper.selectById(id);
+        if (staffOnJob == null) {
+            throw new IllegalArgumentException("璇ュ憳宸ヤ笉瀛樺湪");
+        }
+
         StaffOnJobDto staffOnJobDto = new StaffOnJobDto();
         BeanUtils.copyProperties(staffOnJob, staffOnJobDto);
         // 鏌ヨ宀椾綅鍚嶇О
-        SysPost post = sysPostMapper.selectPostById((long) staffOnJob.getSysPostId());
-        staffOnJobDto.setPostName(post.getPostName());
+        if (staffOnJob.getSysPostId() != null) {
+            SysPost post = sysPostMapper.selectPostById(staffOnJob.getSysPostId().longValue());
+            if (post != null) {
+                staffOnJobDto.setPostName(post.getPostName());
+            }
+        }
 
         // 鏌ヨ鍚堝悓淇℃伅
         StaffContract contract = staffContractMapper.selectOne(Wrappers.<StaffContract>lambdaQuery()
@@ -165,6 +281,13 @@
             staffOnJobDto.setContractStartTime(contract.getContractStartTime());
             staffOnJobDto.setContractEndTime(contract.getContractEndTime());
         }
+        // 鑾峰彇瀛愯〃鏁版嵁
+        staffOnJobDto.setStaffEducationList(staffEducationMapper.selectList(Wrappers.<StaffEducation>lambdaQuery()
+                .eq(StaffEducation::getStaffOnJobId, staffOnJob.getId())));
+        staffOnJobDto.setStaffWorkExperienceList(staffWorkExperienceMapper.selectList(Wrappers.<StaffWorkExperience>lambdaQuery()
+                .eq(StaffWorkExperience::getStaffOnJobId, staffOnJob.getId())));
+        staffOnJobDto.setStaffEmergencyContactList(staffEmergencyContactMapper.selectList(Wrappers.<StaffEmergencyContact>lambdaQuery()
+                .eq(StaffEmergencyContact::getStaffOnJobId, staffOnJob.getId())));
         return staffOnJobDto;
     }
 
@@ -173,12 +296,12 @@
     public void staffOnJobExport(HttpServletResponse response, StaffOnJob staffOnJob) {
         List<StaffOnJobDto> staffOnJobs = staffOnJobMapper.staffOnJobList(staffOnJob);
         ExcelUtil<StaffOnJobDto> util = new ExcelUtil<StaffOnJobDto>(StaffOnJobDto.class);
-        util.exportExcel(response, staffOnJobs, "鍦ㄨ亴鍛樺伐鍙拌处瀵煎嚭");
+        util.exportExcel(response, staffOnJobs, "鍛樺伐鍙拌处瀵煎嚭");
     }
 
     @Override
-    public List<StaffJoinLeaveRecord> staffOnJobList() {
-        return staffJoinLeaveRecordMapper.staffOnJobList();
+    public List<StaffOnJobDto> staffOnJobList(StaffOnJob staffOnJob) {
+        return staffOnJobMapper.staffOnJobList(staffOnJob);
     }
 
     @Override

--
Gitblit v1.9.3