From dd69bfc1fb8e5e28dde754fab7f23bfb1a18faa5 Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期五, 05 六月 2026 16:58:07 +0800
Subject: [PATCH] config(dev): 更新开发环境配置和文件上传功能 - 调整文件上传路径配置 - 修复OA环境文件链接前缀配置 - 在审批实例服务中添加报销相关数据删除逻辑 - 实现申请人姓名自动填充功能 - 添加文件下载预览路由的正则表达式支持 - 为企业新闻VO添加附件列表兼容别名 - 完善员工入职服务的异常处理 - 新增账户附件管理控制器 - 实现文件上传接口并返回完整文件信息

---
 src/main/java/com/ruoyi/staff/service/impl/StaffOnJobServiceImpl.java |  190 +++++++++++++++++++++++++++++++++++++----------
 1 files changed, 150 insertions(+), 40 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 02253f5..cbf9ebe 100644
--- a/src/main/java/com/ruoyi/staff/service/impl/StaffOnJobServiceImpl.java
+++ b/src/main/java/com/ruoyi/staff/service/impl/StaffOnJobServiceImpl.java
@@ -6,36 +6,34 @@
 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.mapper.StaffContractMapper;
-import com.ruoyi.staff.mapper.StaffLeaveMapper;
-import com.ruoyi.staff.mapper.StaffOnJobMapper;
-import com.ruoyi.staff.pojo.StaffContract;
-import com.ruoyi.staff.pojo.StaffLeave;
-import com.ruoyi.staff.pojo.StaffOnJob;
+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.nio.charset.StandardCharsets;
 import java.time.Instant;
@@ -44,31 +42,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 SysPostMapper sysPostMapper;
-
-    @Autowired
-    private StaffContractMapper staffContractMapper;
-    @Autowired
-    private StaffLeaveMapper staffLeaveMapper;
-
-    @Autowired
-    private SysUserServiceImpl sysUserService;
-
-    @Autowired
-    private SysUserMapper sysUserMapper;
+    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;
     }
 
     //鏂板鍏ヨ亴
@@ -83,6 +82,7 @@
         }
 
         // 鍒涘缓鍏ヨ亴鏁版嵁
+        syncStudyInfoFromEducation(staffOnJobPrams);
         staffOnJobPrams.setContractExpireTime(staffOnJobPrams.getContractEndTime());
         staffOnJobPrams.setStaffState(1);
         staffOnJobMapper.insert(staffOnJobPrams);
@@ -94,17 +94,22 @@
             sysUser1.setNickName(staffOnJobPrams.getStaffName());
             String s = SecurityUtils.encryptPassword("123456");
             sysUser1.setPassword(s);
-            Long[] posts = new Long[]{staffOnJobPrams.getSysPostId().longValue()};
-            sysUser1.setPostIds(posts);
+            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());
-        staffContract.setContractTerm(staffOnJobPrams.getContractTerm());
+        String contractTerm = staffOnJobPrams.getContractTerm();
+        staffContract.setContractTerm(StringUtils.isNotEmpty(contractTerm) ? contractTerm : null);
         staffContract.setContractStartTime(staffOnJobPrams.getContractStartTime());
         staffContract.setContractEndTime(staffOnJobPrams.getContractEndTime());
         return staffContractMapper.insert(staffContract);
@@ -132,9 +137,81 @@
             staffContractMapper.updateById(contract);
         }
 
+        // 鍒犻櫎鎵�鏈夊瓙琛ㄦ暟鎹�
+        delStaffOnJobExtra(Arrays.asList(id));
+        // 缁戝畾瀛愯〃鏁版嵁
+        bingingStaffOnJobExtra(id,staffOnJobParams);
         // 鏇存柊鍛樺伐鏁版嵁
+        syncStudyInfoFromEducation(staffOnJobParams);
         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());
+        }
+    }
+
+    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("/");
+    }
+
+
+    /**
+     * 閫氳繃鍛樺伐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));
     }
 
     //鍒犻櫎鍏ヨ亴
@@ -149,6 +226,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())));
@@ -156,6 +235,8 @@
             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));
@@ -213,6 +294,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;
     }
 
@@ -230,15 +318,37 @@
     }
 
     @Override
-    public Boolean importData(MultipartFile file) {
-        try {
-            ExcelUtil<StaffOnJob> util = new ExcelUtil<>(StaffOnJob.class);
-            List<StaffOnJob> staffOnJobs = util.importExcel(file.getInputStream());
-            return saveOrUpdateBatch(staffOnJobs);
-        } catch (Exception e) {
-            e.printStackTrace();
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean importData(MultipartFile file) throws IOException {
+        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();
+        staffOnJobs.forEach(staffOnJob -> {
+            StaffOnJobDto staffOnJobDto = new StaffOnJobDto();
+            BeanUtils.copyProperties(staffOnJob, staffOnJobDto);
+            // 閫氳繃鍚嶇О鑾峰彇閮ㄩ棬id
+            staffOnJobDto.setSysDeptId(
+                    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));
+            add(staffOnJobDto);
+        });
+        return true;
     }
 
 

--
Gitblit v1.9.3