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