|
@@ -1,7 +1,11 @@
|
|
|
package com.xjrsoft.module.teacher.service.impl;
|
|
|
|
|
|
+import cn.hutool.core.date.DateUtil;
|
|
|
+import cn.hutool.core.util.ObjectUtil;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import com.github.yulichang.base.MPJBaseServiceImpl;
|
|
|
+import com.xjrsoft.common.enums.LeaveReasonEnum;
|
|
|
+import com.xjrsoft.common.exception.MyException;
|
|
|
import com.xjrsoft.module.teacher.entity.WfHeadTeacherLeave;
|
|
|
import com.xjrsoft.module.teacher.entity.WfTeacherleave;
|
|
|
import com.xjrsoft.module.teacher.mapper.WfTeacherleaveMapper;
|
|
@@ -10,11 +14,16 @@ import com.xjrsoft.module.teacher.service.IWfTeacherleaveService;
|
|
|
import lombok.AllArgsConstructor;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Objects;
|
|
|
+
|
|
|
+import java.text.ParseException;
|
|
|
+import java.text.SimpleDateFormat;
|
|
|
+import java.time.Instant;
|
|
|
+import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
|
|
|
+import static java.util.Calendar.DAY_OF_MONTH;
|
|
|
+
|
|
|
/**
|
|
|
* @title: 教职工请假流程
|
|
|
* @Author szs
|
|
@@ -30,22 +39,133 @@ public class WfTeacherleaveServiceImpl extends MPJBaseServiceImpl<WfTeacherleave
|
|
|
public Boolean dataHandle(Long dataId) {
|
|
|
WfTeacherleave wfTeacherleave = this.getById(dataId);
|
|
|
//如果请假老师是班主任,将信息同步到班主任事项请假
|
|
|
- if(wfTeacherleave.getIsItAHomeroomTeacher().equals("是")){
|
|
|
- WfHeadTeacherLeave wfHeadTeacherLeave = new WfHeadTeacherLeave();
|
|
|
- wfHeadTeacherLeave.setWfTeacherleaveId(wfTeacherleave.getId());
|
|
|
- wfHeadTeacherLeave.setApplicantUserId(wfTeacherleave.getUserId());
|
|
|
+ if(ObjectUtil.isNotNull(wfTeacherleave) && wfTeacherleave.getIsItAHomeroomTeacher().equals("是")){
|
|
|
/*
|
|
|
* 如果是周一到周四的上午,自动同步请假类型为“早自习、课间操”的数据到班主任事项请假列表,
|
|
|
* 如果是周五下午自动同步请假类型为“学生放假”的数据到班主任事项请假列表。
|
|
|
*/
|
|
|
- //wfHeadTeacherLeave.setApplicantUserId(wfTeacherleave.getUserId());
|
|
|
+ Date leaveStartTime = wfTeacherleave.getLeaveStartTime();//请假开始时间
|
|
|
+ Date leaveEndTime = wfTeacherleave.getLeaveEndTime();//请假结束时间
|
|
|
+
|
|
|
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
+ SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
+ //根据请假开始时间获取请假开始时间当天的上午,下午区间
|
|
|
+ String leaveStartDayStr = sdf1.format(leaveStartTime);//"yyyy-MM-dd"
|
|
|
+ String forenoonStartStr = leaveStartDayStr + " 06:00:00";//上午区间开始时间
|
|
|
+ String forenoonEndStr = leaveStartDayStr + " 11:00:00";//上午区间结束时间
|
|
|
+ String afternoonStartStr = leaveStartDayStr + " 14:00:00";//下午区间开始时间
|
|
|
+ String afternoonEndStr = leaveStartDayStr + " 22:00:00";//下午区间结束时间
|
|
|
+
|
|
|
+ //获取请假开始时间后一天的上午,下午区间
|
|
|
+ Instant instant = leaveStartTime.toInstant();
|
|
|
+ Calendar calendar = Calendar.getInstance();
|
|
|
+ calendar.setTimeZone(TimeZone.getTimeZone("UTC"));
|
|
|
+ calendar.setTimeInMillis(instant.toEpochMilli());
|
|
|
|
|
|
+ int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK) - 1;//获取请假开始的星期(从星期日开始算,所以需要减1)
|
|
|
|
|
|
- wfHeadTeacherLeave.setStartTime(wfTeacherleave.getLeaveStartTime());
|
|
|
- wfHeadTeacherLeave.setEndTime(wfTeacherleave.getLeaveEndTime());
|
|
|
- wfHeadTeacherLeave.setRemark(wfTeacherleave.getReasonForLeave());
|
|
|
- return wfHeadTeacherLeaveService.save(wfHeadTeacherLeave);
|
|
|
+ calendar.add(DAY_OF_MONTH, 1);
|
|
|
+ Date leaveStartDayTomorrow = calendar.getTime();
|
|
|
+
|
|
|
+ String leaveTomorrowDayStr = sdf1.format(leaveStartDayTomorrow);//"yyyy-MM-dd"
|
|
|
+ String forenoonStartTomorrowStr = leaveTomorrowDayStr + " 06:00:00";//上午区间开始时间
|
|
|
+ String forenoonEndTomorrowStr = leaveTomorrowDayStr + " 11:00:00";//上午区间结束时间
|
|
|
+ String afternoonStartTomorrowStr = leaveTomorrowDayStr + " 14:00:00";//下午区间开始时间
|
|
|
+ String afternoonEndTomorrowStr = leaveTomorrowDayStr + " 22:00:00";//下午区间结束时间
|
|
|
+
|
|
|
+ Date forenoonStartDate;
|
|
|
+ Date forenoonEndDate;
|
|
|
+ Date afternoonStartDate;
|
|
|
+ Date afternoonEndDate;
|
|
|
+ Date forenoonStartTomorrowDate;
|
|
|
+ Date forenoonEndTomorrowDate;
|
|
|
+ Date afternoonStartTomorrowDate;
|
|
|
+ Date afternoonEndTomorrowDate;
|
|
|
+ try {
|
|
|
+ forenoonStartDate = sdf.parse(forenoonStartStr);
|
|
|
+ forenoonEndDate = sdf.parse(forenoonEndStr);
|
|
|
+ afternoonStartDate = sdf.parse(afternoonStartStr);
|
|
|
+ afternoonEndDate = sdf.parse(afternoonEndStr);
|
|
|
+ forenoonStartTomorrowDate = sdf.parse(forenoonStartTomorrowStr);
|
|
|
+ forenoonEndTomorrowDate = sdf.parse(forenoonEndTomorrowStr);
|
|
|
+ afternoonStartTomorrowDate = sdf.parse(afternoonStartTomorrowStr);
|
|
|
+ afternoonEndTomorrowDate = sdf.parse(afternoonEndTomorrowStr);
|
|
|
+ } catch (ParseException e) {
|
|
|
+ throw new MyException("出现未知错误,请联系管理员");
|
|
|
+ }
|
|
|
+ /*
|
|
|
+ *当请假开始的星期是在星期一到星期四,
|
|
|
+ * 且开始时间早于请假当天上午区间的开始时间,
|
|
|
+ * 结束时间晚于当天上午区间的结束时间,
|
|
|
+ * 结束时间早于第二天上午区间的开始时间,
|
|
|
+ * 自动同步一条请假类型为“早自习、课间操”的数据到班主任事项请假列表。
|
|
|
+ */
|
|
|
+ if(dayOfWeek > 0 && dayOfWeek < 5
|
|
|
+ && leaveStartTime.compareTo(forenoonStartDate) < 0
|
|
|
+ && leaveEndTime.compareTo(forenoonEndDate) > 0
|
|
|
+ && leaveEndTime.compareTo(forenoonStartTomorrowDate) < 0){
|
|
|
+ WfHeadTeacherLeave wfHeadTeacherLeave = new WfHeadTeacherLeave();
|
|
|
+ wfHeadTeacherLeave.setWfTeacherleaveId(wfTeacherleave.getId());
|
|
|
+ wfHeadTeacherLeave.setApplicantUserId(Long.valueOf(wfTeacherleave.getUserId()));
|
|
|
+ wfHeadTeacherLeave.setLeaveReason(LeaveReasonEnum.LeaveReason2.getCode());
|
|
|
+ wfHeadTeacherLeave.setStartTime(wfTeacherleave.getLeaveStartTime());
|
|
|
+ wfHeadTeacherLeave.setEndTime(wfTeacherleave.getLeaveEndTime());
|
|
|
+ wfHeadTeacherLeave.setRemark(wfTeacherleave.getReasonForLeave());
|
|
|
+ wfHeadTeacherLeave.setStatus(1);
|
|
|
+ return wfHeadTeacherLeaveService.save(wfHeadTeacherLeave);
|
|
|
+ }
|
|
|
+
|
|
|
+ /*
|
|
|
+ *当请假开始的星期是在星期一到星期四,
|
|
|
+ * 且开始时间早于请假当天上午区间的开始时间,
|
|
|
+ * 结束时间晚于第二天上午区间的结束时间,
|
|
|
+ * 自动同步2条请假类型为“早自习、课间操”的数据到班主任事项请假列表。
|
|
|
+ */
|
|
|
+ if(dayOfWeek > 0 && dayOfWeek < 5
|
|
|
+ && leaveStartTime.compareTo(forenoonStartDate) < 0
|
|
|
+ && leaveEndTime.compareTo(forenoonEndTomorrowDate) > 0){
|
|
|
+ List<WfHeadTeacherLeave> list = new ArrayList<>();
|
|
|
+ WfHeadTeacherLeave wfHeadTeacherLeave1 = new WfHeadTeacherLeave();
|
|
|
+ wfHeadTeacherLeave1.setWfTeacherleaveId(wfTeacherleave.getId());
|
|
|
+ wfHeadTeacherLeave1.setApplicantUserId(Long.valueOf(wfTeacherleave.getUserId()));
|
|
|
+ wfHeadTeacherLeave1.setLeaveReason(LeaveReasonEnum.LeaveReason2.getCode());
|
|
|
+ wfHeadTeacherLeave1.setStartTime(wfTeacherleave.getLeaveStartTime());
|
|
|
+ wfHeadTeacherLeave1.setEndTime(forenoonStartTomorrowDate);
|
|
|
+ wfHeadTeacherLeave1.setRemark(wfTeacherleave.getReasonForLeave());
|
|
|
+ wfHeadTeacherLeave1.setStatus(1);
|
|
|
+ list.add(wfHeadTeacherLeave1);
|
|
|
+
|
|
|
+ WfHeadTeacherLeave wfHeadTeacherLeave2 = new WfHeadTeacherLeave();
|
|
|
+ wfHeadTeacherLeave2.setWfTeacherleaveId(wfTeacherleave.getId());
|
|
|
+ wfHeadTeacherLeave2.setApplicantUserId(Long.valueOf(wfTeacherleave.getUserId()));
|
|
|
+ wfHeadTeacherLeave2.setLeaveReason(LeaveReasonEnum.LeaveReason2.getCode());
|
|
|
+ wfHeadTeacherLeave2.setStartTime(forenoonStartTomorrowDate);
|
|
|
+ wfHeadTeacherLeave2.setEndTime(wfTeacherleave.getLeaveEndTime());
|
|
|
+ wfHeadTeacherLeave2.setRemark(wfTeacherleave.getReasonForLeave());
|
|
|
+ wfHeadTeacherLeave2.setStatus(1);
|
|
|
+ list.add(wfHeadTeacherLeave2);
|
|
|
+
|
|
|
+ return wfHeadTeacherLeaveService.saveBatch(list);
|
|
|
+ }
|
|
|
+
|
|
|
+ /*
|
|
|
+ *当请假开始的时间是在星期五,
|
|
|
+ * 且开始时间早于下午区间的开始时间,
|
|
|
+ * 结束时间晚于下午区间的结束时间,
|
|
|
+ * 自动同步一条请假类型为“学生放假”的数据到班主任事项请假列表。
|
|
|
+ */
|
|
|
+ if(dayOfWeek == 5 && leaveStartTime.compareTo(afternoonStartDate) < 0 && leaveEndTime.compareTo(afternoonEndDate) > 0){
|
|
|
+ WfHeadTeacherLeave wfHeadTeacherLeave = new WfHeadTeacherLeave();
|
|
|
+ wfHeadTeacherLeave.setWfTeacherleaveId(wfTeacherleave.getId());
|
|
|
+ wfHeadTeacherLeave.setApplicantUserId(Long.valueOf(wfTeacherleave.getUserId()));
|
|
|
+ wfHeadTeacherLeave.setLeaveReason(LeaveReasonEnum.LeaveReason1.getCode());
|
|
|
+ wfHeadTeacherLeave.setStartTime(wfTeacherleave.getLeaveStartTime());
|
|
|
+ wfHeadTeacherLeave.setEndTime(wfTeacherleave.getLeaveEndTime());
|
|
|
+ wfHeadTeacherLeave.setRemark(wfTeacherleave.getReasonForLeave());
|
|
|
+ wfHeadTeacherLeave.setStatus(1);
|
|
|
+ return wfHeadTeacherLeaveService.save(wfHeadTeacherLeave);
|
|
|
+ }
|
|
|
}
|
|
|
- return false;
|
|
|
+ return true;
|
|
|
}
|
|
|
}
|