|
|
@@ -30,6 +30,7 @@ import javax.servlet.http.HttpServletRequest;
|
|
|
import java.time.LocalDate;
|
|
|
import java.time.format.DateTimeFormatter;
|
|
|
import java.util.*;
|
|
|
+import java.util.concurrent.locks.ReentrantLock;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
@@ -57,6 +58,9 @@ public class WorkOvertimeController {
|
|
|
private OvertimeSettingMapper overtimeSettingMapper;
|
|
|
@Resource
|
|
|
private SysFunctionService sysFunctionService;
|
|
|
+
|
|
|
+ // 定义本地锁:全局唯一,保证同一时间只有一个线程执行核心逻辑
|
|
|
+ private final ReentrantLock lock = new ReentrantLock();
|
|
|
|
|
|
@Value(value = "${upload.path}")
|
|
|
private String path;
|
|
|
@@ -74,40 +78,47 @@ public class WorkOvertimeController {
|
|
|
return msg;
|
|
|
}
|
|
|
|
|
|
- //判断是否有员工已经存在申请的记录
|
|
|
- String[] ids = workOvertime.getEmployeeIds().split(",");
|
|
|
- for (int i = 0; i < ids.length; i++) {
|
|
|
- QueryWrapper<WorkOvertime> queryWrapper = new QueryWrapper<>();
|
|
|
- queryWrapper.like("employee_ids", ids[i]);
|
|
|
- queryWrapper.eq("work_date", workOvertime.getWorkDate());
|
|
|
- if (workOvertimeService.list(queryWrapper).size() > 0) {
|
|
|
- msg.setError("员工["+userMapper.selectById(ids[i]).getName()+"]已经存在"+ dtf.format(workOvertime.getWorkDate())+"的加班申请");
|
|
|
- return msg;
|
|
|
- }
|
|
|
- }
|
|
|
- //生产车间主任(生产车间主管)代工位提交加班申请,只会按照同一工位依次提交,若申请中员工id不为同一工位,则报错返回,若相同则设置为申请工位id
|
|
|
- if (Objects.equals(user.getId(), departmentMapper.selectById(31).getManagerId())) {
|
|
|
- String[] employeeIds = workOvertime.getEmployeeIds().split(",");
|
|
|
- Integer Workstaion = null;
|
|
|
- for (int i = 0; i < employeeIds.length; i++) {
|
|
|
- if (Workstaion == null) {
|
|
|
- Workstaion = userMapper.selectById(employeeIds[i]).getDepartmentId();
|
|
|
+ lock.lock();
|
|
|
+ try{
|
|
|
+
|
|
|
+ //判断是否有员工已经存在申请的记录
|
|
|
+ String[] ids = workOvertime.getEmployeeIds().split(",");
|
|
|
+ for (int i = 0; i < ids.length; i++) {
|
|
|
+ QueryWrapper<WorkOvertime> queryWrapper = new QueryWrapper<>();
|
|
|
+ queryWrapper.like("employee_ids", ids[i]);
|
|
|
+ queryWrapper.eq("work_date", workOvertime.getWorkDate());
|
|
|
+ if (workOvertimeService.list(queryWrapper).size() > 0) {
|
|
|
+ msg.setError("员工["+userMapper.selectById(ids[i]).getName()+"]已经存在"+ dtf.format(workOvertime.getWorkDate())+"的加班申请");
|
|
|
+ return msg;
|
|
|
}
|
|
|
- else {
|
|
|
- if(!Workstaion.equals(userMapper.selectById(employeeIds[i]).getDepartmentId())){
|
|
|
- msg.setError("车间主任代工位提交加班申请,所选员工需要为同一工位");
|
|
|
- return msg;
|
|
|
+ }
|
|
|
+ //生产车间主任(生产车间主管)代工位提交加班申请,只会按照同一工位依次提交,若申请中员工id不为同一工位,则报错返回,若相同则设置为申请工位id
|
|
|
+ if (Objects.equals(user.getId(), departmentMapper.selectById(31).getManagerId())) {
|
|
|
+ String[] employeeIds = workOvertime.getEmployeeIds().split(",");
|
|
|
+ Integer Workstaion = null;
|
|
|
+ for (int i = 0; i < employeeIds.length; i++) {
|
|
|
+ if (Workstaion == null) {
|
|
|
+ Workstaion = userMapper.selectById(employeeIds[i]).getDepartmentId();
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ if(!Workstaion.equals(userMapper.selectById(employeeIds[i]).getDepartmentId())){
|
|
|
+ msg.setError("车间主任代工位提交加班申请,所选员工需要为同一工位");
|
|
|
+ return msg;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
+ if (Workstaion != null) {
|
|
|
+ workOvertime.setWorkstationId(Workstaion);
|
|
|
+ }
|
|
|
}
|
|
|
- if (Workstaion != null) {
|
|
|
- workOvertime.setWorkstationId(Workstaion);
|
|
|
+ else {
|
|
|
+ workOvertime.setWorkstationId(user.getDepartmentId());
|
|
|
}
|
|
|
+ msg.data = workOvertimeService.saveOrUpdate(workOvertime);
|
|
|
+
|
|
|
+ }finally {
|
|
|
+ lock.unlock();
|
|
|
}
|
|
|
- else {
|
|
|
- workOvertime.setWorkstationId(user.getDepartmentId());
|
|
|
- }
|
|
|
- msg.data = workOvertimeService.saveOrUpdate(workOvertime);
|
|
|
return msg;
|
|
|
}
|
|
|
|