From cdc16c48e3130408d3689afc134ee312c35347b8 Mon Sep 17 00:00:00 2001
From: zss <zss@example.com>
Date: 星期三, 02 七月 2025 16:25:41 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 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