From 75b7a414ef821a07426790cb79c37811ae2f07ac Mon Sep 17 00:00:00 2001
From: zouyu <2723363702@qq.com>
Date: 星期二, 27 一月 2026 10:42:20 +0800
Subject: [PATCH] 浪潮对接单点登录:mis管理系统配置修改
---
src/main/java/com/ruoyi/staff/service/impl/StaffJoinLeaveRecordServiceImpl.java | 169 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 169 insertions(+), 0 deletions(-)
diff --git a/src/main/java/com/ruoyi/staff/service/impl/StaffJoinLeaveRecordServiceImpl.java b/src/main/java/com/ruoyi/staff/service/impl/StaffJoinLeaveRecordServiceImpl.java
new file mode 100644
index 0000000..f82ecc8
--- /dev/null
+++ b/src/main/java/com/ruoyi/staff/service/impl/StaffJoinLeaveRecordServiceImpl.java
@@ -0,0 +1,169 @@
+package com.ruoyi.staff.service.impl;
+
+
+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.poi.ExcelUtil;
+import com.ruoyi.staff.mapper.StaffJoinLeaveRecordMapper;
+import com.ruoyi.staff.mapper.StaffOnJobMapper;
+import com.ruoyi.staff.pojo.StaffJoinLeaveRecord;
+import com.ruoyi.staff.pojo.StaffOnJob;
+import com.ruoyi.staff.service.IStaffJoinLeaveRecordService;
+import lombok.AllArgsConstructor;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletResponse;
+import java.util.*;
+import java.util.function.Function;
+
+@Service
+@AllArgsConstructor
+@Transactional(rollbackFor = Exception.class)
+public class StaffJoinLeaveRecordServiceImpl extends ServiceImpl<StaffJoinLeaveRecordMapper, StaffJoinLeaveRecord> implements IStaffJoinLeaveRecordService {
+
+ private StaffJoinLeaveRecordMapper staffJoinLeaveRecordMapper;
+ private StaffOnJobMapper staffOnJobMapper;
+
+
+ //鍒嗛〉鏌ヨ
+ @Override
+ public IPage<StaffJoinLeaveRecord> staffJoinLeaveRecordListPage(Page page, StaffJoinLeaveRecord staffJoinLeaveRecord) {
+ return staffJoinLeaveRecordMapper.staffJoinLeaveRecordListPage(page,staffJoinLeaveRecord);
+ }
+
+ //瀵煎嚭
+ @Override
+ public void staffJoinLeaveRecordExport(HttpServletResponse response, StaffJoinLeaveRecord staffJoinLeaveRecord) {
+ List<StaffJoinLeaveRecord> staffJoinLeaveRecords =staffJoinLeaveRecordMapper.staffJoinLeaveRecordList(staffJoinLeaveRecord);
+ ExcelUtil<StaffJoinLeaveRecord> util = new ExcelUtil<StaffJoinLeaveRecord>(StaffJoinLeaveRecord.class);
+ util.exportExcel(response, staffJoinLeaveRecords, staffJoinLeaveRecord.getStaffState()==0?"鍛樺伐绂昏亴":"鍛樺伐鍏ヨ亴"+"瀵煎嚭");
+ }
+
+ //鏂板鍏ヨ亴/绂昏亴
+ @Override
+ public int add(StaffJoinLeaveRecord staffJoinLeaveRecord) {
+ String[] ignoreProperties = {"id"};//鎺掗櫎id灞炴��
+ List<StaffOnJob> staffOnJobs = staffOnJobMapper.selectList(Wrappers.<StaffOnJob>lambdaQuery().eq(StaffOnJob::getStaffNo, staffJoinLeaveRecord.getStaffNo()));
+ if (staffJoinLeaveRecord.getStaffState()==1){
+ /*鍏ヨ亴*/
+ //(鏍规嵁鍛樺伐缂栧彿鍒ゆ柇鏄惁宸茬粡鏂板鍒板湪鑱岃〃閲岄潰,濡傛灉宸茬粡鏈夊氨鏇存柊,娌℃湁灏辨柊澧�)
+ if (staffOnJobs.size()>0){
+ StaffOnJob staffOnJob = staffOnJobs.get(0);
+ //鍏堟瘮杈冨埌鏈熸棩鏈�,杩欓噷閫夌敤鍒版湡鏃ユ湡鏈�涔呯殑
+ if (staffJoinLeaveRecord.getContractEndTime().compareTo(staffOnJob.getContractExpireTime())>0) {
+ BeanUtils.copyProperties(staffJoinLeaveRecord,staffOnJob,ignoreProperties);
+ staffOnJobMapper.updateById(staffOnJob);
+ }
+ }else {
+ StaffOnJob staffOnJob = new StaffOnJob();
+ BeanUtils.copyProperties(staffJoinLeaveRecord,staffOnJob,ignoreProperties);
+ staffOnJob.setContractExpireTime(staffJoinLeaveRecord.getContractEndTime());
+ staffOnJobMapper.insert(staffOnJob);
+ }
+ }else {
+ /*绂昏亴*/
+ //鏍规嵁鍛樺伐缂栧彿鎵惧埌瀵瑰簲鐨勬暟鎹皢鐘舵�佸彉鏇�
+ if (staffOnJobs.size()>0){
+ StaffOnJob staffOnJob = staffOnJobs.get(0);
+ staffOnJob.setStaffState(staffJoinLeaveRecord.getStaffState());
+ staffOnJobMapper.updateById(staffOnJob);
+ }else {
+ throw new BaseException("娌℃湁鎵惧埌"+staffJoinLeaveRecord.getStaffNo()+"缂栧彿鐨勫憳宸�,鏃犳硶鏂板绂昏亴!!!");
+ }
+ }
+ return staffJoinLeaveRecordMapper.insert(staffJoinLeaveRecord);
+ }
+
+
+ //鍒犻櫎鍏ヨ亴/绂昏亴
+ @Override
+ public int delStaffJoinLeaveRecord(List<Integer> ids) {
+ List<StaffJoinLeaveRecord> staffJoinLeaveRecords = staffJoinLeaveRecordMapper.selectBatchIds(ids);
+ for (StaffJoinLeaveRecord staffJoinLeaveRecord : staffJoinLeaveRecords) {
+ //鍏堝垽鏂槸鍏ヨ亴杩樻槸绂昏亴
+ if (staffJoinLeaveRecord.getStaffState()==1){
+ /*鍏ヨ亴*/
+ //濡傛灉鏄叆鑱�,闇�瑕佸厛鏍规嵁鍛樺伐缂栧彿鍒ゆ柇璇ュ憳宸ユ槸鍚﹁繕鏈夊叾浠栧叆鑱屼俊鎭�
+ List<StaffJoinLeaveRecord> joinLeaveRecords = staffJoinLeaveRecordMapper.selectList(Wrappers.<StaffJoinLeaveRecord>lambdaQuery()
+ .eq(StaffJoinLeaveRecord::getStaffState, 1)
+ .eq(StaffJoinLeaveRecord::getStaffNo, staffJoinLeaveRecord.getStaffNo())
+ .ne(StaffJoinLeaveRecord::getId, staffJoinLeaveRecord.getId()));
+ if (joinLeaveRecords.size()>0){
+ //杩橀渶瑕佸垽鏂鍛樺伐鏄惁鏈夌鑱屼俊鎭�
+ List<StaffJoinLeaveRecord> leaveRecords = staffJoinLeaveRecordMapper.selectList(Wrappers.<StaffJoinLeaveRecord>lambdaQuery()
+ .eq(StaffJoinLeaveRecord::getStaffState, 0)
+ .eq(StaffJoinLeaveRecord::getStaffNo, staffJoinLeaveRecord.getStaffNo()));
+ // 濡傛灉鏈夐偅鍦ㄨ亴琛ㄤ粎鍋氭洿鏂颁笉鍒犻櫎,濡傛灉娌℃湁鍏朵粬鍏ヨ亴淇℃伅,閭d箞鍦ㄨ亴琛ㄩ渶鍚屾鍒犻櫎
+ if (leaveRecords.size()>0){
+ //濡傛灉鏈夌鑱屼俊鎭�,鍒ゆ柇绂昏亴鏁伴噺鍜屽叆鑱屾暟閲忔瘯绔�,濡傛灉鍏ヨ亴鏁伴噺澶т簬绂昏亴
+ if (joinLeaveRecords.size()>leaveRecords.size()){
+ //璇ュ憳宸ュ氨杩樻槸鍦ㄨ亴
+ //鍏堟瘮杈冨埌鏈熸棩鏈�,杩欓噷閫夌敤鍒版湡鏃ユ湡鏈�涔呯殑
+ Optional<StaffJoinLeaveRecord> max = joinLeaveRecords.stream().max(Comparator.comparing(StaffJoinLeaveRecord::getContractEndTime));
+ staffOnJobMapper.update(null,Wrappers.<StaffOnJob>lambdaUpdate()
+ .eq(StaffOnJob::getStaffNo, staffJoinLeaveRecord.getStaffNo())
+ .set(StaffOnJob::getContractTerm, max.get().getContractTerm())
+ .set(StaffOnJob::getContractExpireTime, max.get().getContractEndTime()));
+ }else {
+ //璇ュ憳宸ュ睘浜庣鑱�
+ staffOnJobMapper.update(null,Wrappers.<StaffOnJob>lambdaUpdate()
+ .eq(StaffOnJob::getStaffNo, staffJoinLeaveRecord.getStaffNo())
+ .set(StaffOnJob::getStaffState, 0));
+ }
+ }else {
+ //濡傛灉娌℃湁绂昏亴淇℃伅閭d箞灏辨瘮杈冨埌鏈熸棩鏈�,杩欓噷閫夌敤鍒版湡鏃ユ湡鏈�涔呯殑
+ Optional<StaffJoinLeaveRecord> max = joinLeaveRecords.stream().max(Comparator.comparing(StaffJoinLeaveRecord::getContractEndTime));
+ staffOnJobMapper.update(null,Wrappers.<StaffOnJob>lambdaUpdate()
+ .eq(StaffOnJob::getStaffNo, staffJoinLeaveRecord.getStaffNo())
+ .set(StaffOnJob::getContractTerm, max.get().getContractTerm())
+ .set(StaffOnJob::getContractExpireTime, max.get().getContractEndTime()));
+ }
+ }else {
+ staffOnJobMapper.delete(Wrappers.<StaffOnJob>lambdaQuery().eq(StaffOnJob::getStaffNo,staffJoinLeaveRecord.getStaffNo()));
+ }
+ }else {
+ /*绂昏亴*/
+ //鍏堟煡璇㈠湪鑱岃〃鏄惁鏈夎繖涓�,濡傛灉鏈�,灏卞皢璇ュ憳宸ョ殑鐘舵�佸彉鏇翠负鍦ㄨ亴
+ List<StaffOnJob> staffOnJobs = staffOnJobMapper.selectList(Wrappers.<StaffOnJob>lambdaQuery().eq(StaffOnJob::getStaffNo, staffJoinLeaveRecord.getStaffNo()));
+ if (staffOnJobs.size()>0){
+ StaffOnJob staffOnJob = staffOnJobs.get(0);
+ staffOnJob.setStaffState(1);
+ staffOnJobMapper.updateById(staffOnJob);
+ }else {
+ throw new BaseException("娌℃湁鎵惧埌"+staffJoinLeaveRecord.getStaffNo()+"缂栧彿鐨勫憳宸�,璇锋鏌ユ槸鍚︽湁鑴忔暟鎹�!!!");
+ }
+ }
+ staffJoinLeaveRecordMapper.deleteById(staffJoinLeaveRecord);
+ }
+ return 0;
+ }
+
+ //淇敼鍏ヨ亴/绂昏亴
+ @Override
+ public int updateStaffJoinLeaveRecord(StaffJoinLeaveRecord staffJoinLeaveRecord) {
+ String[] ignoreProperties = {"id"};//鎺掗櫎id灞炴��
+ List<StaffOnJob> staffOnJobs = staffOnJobMapper.selectList(Wrappers.<StaffOnJob>lambdaQuery().eq(StaffOnJob::getStaffNo, staffJoinLeaveRecord.getStaffNo()));
+ if (staffJoinLeaveRecord.getStaffState()==1){
+ /*鍏ヨ亴*/
+ StaffOnJob job = staffOnJobMapper.selectList(Wrappers.<StaffOnJob>lambdaQuery()
+ .eq(StaffOnJob::getStaffNo, staffJoinLeaveRecord.getStaffNo())).get(0);
+ //濡傛灉鏇存敼鐨勫悎鍚屽埌鏈熸椂闂存洿涔呭垯鏇存柊,濡傛灉娌℃湁灏变笉鐢ㄦ洿鏂�
+ if (staffJoinLeaveRecord.getContractEndTime().compareTo(job.getContractExpireTime())>0) {
+ BeanUtils.copyProperties(staffJoinLeaveRecord,job,ignoreProperties);
+ staffOnJobMapper.updateById(job);
+ }
+ }else {
+ /*绂昏亴*/
+ //绂昏亴鐨勭紪杈戜笉浼氬奖鍝嶅湪鑱岃〃
+ }
+ return staffJoinLeaveRecordMapper.updateById(staffJoinLeaveRecord);
+ }
+}
--
Gitblit v1.9.3