| ¶Ô±ÈÐÂÎļþ |
| | |
| | | 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())); |
| | | // 妿æé£å¨è表ä»
åæ´æ°ä¸å é¤,å¦ææ²¡æå
¶ä»å
¥èä¿¡æ¯,é£ä¹å¨è表é忥å é¤ |
| | | 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 { |
| | | //å¦ææ²¡æç¦»èä¿¡æ¯é£ä¹å°±æ¯è¾å°ææ¥æ,è¿ééç¨å°ææ¥ææä¹
ç |
| | | 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); |
| | | } |
| | | } |