package com.ruoyi.safety.service.impl;
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.ruoyi.safety.mapper.SafetyAssessmentTaskEmployeeMapper;
|
import com.ruoyi.safety.pojo.SafetyAssessmentTask;
|
import com.ruoyi.safety.pojo.SafetyAssessmentTaskEmployee;
|
import com.ruoyi.safety.service.SafetyAssessmentTaskEmployeeService;
|
import com.ruoyi.safety.service.SafetyAssessmentTaskService;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
|
import java.time.LocalDateTime;
|
|
@Service
|
public class SafetyAssessmentTaskEmployeeServiceImpl
|
extends SafetyBaseServiceImpl<SafetyAssessmentTaskEmployeeMapper, SafetyAssessmentTaskEmployee>
|
implements SafetyAssessmentTaskEmployeeService {
|
|
@Autowired
|
private SafetyAssessmentTaskService taskService;
|
|
@Override
|
public IPage<SafetyAssessmentTaskEmployee> queryPage(Page<SafetyAssessmentTaskEmployee> page,
|
SafetyAssessmentTaskEmployee query) {
|
QueryWrapper<SafetyAssessmentTaskEmployee> wrapper =
|
new QueryWrapper<SafetyAssessmentTaskEmployee>().orderByDesc("create_time");
|
if (query != null) {
|
if (query.getTaskId() != null) {
|
wrapper.eq("task_id", query.getTaskId());
|
}
|
if (query.getEmployeeId() != null) {
|
wrapper.eq("employee_id", query.getEmployeeId());
|
}
|
if (hasText(query.getEmployeeName())) {
|
wrapper.like("employee_name", query.getEmployeeName());
|
}
|
if (query.getStatus() != null) {
|
wrapper.eq("status", query.getStatus());
|
}
|
}
|
return page(page, wrapper);
|
}
|
|
@Override
|
public boolean start(SafetyAssessmentTaskEmployee request) {
|
if (request == null || request.getTaskId() == null) {
|
return false;
|
}
|
fillCurrentEmployeeIfMissing(request);
|
if (request.getEmployeeId() == null) {
|
return false;
|
}
|
SafetyAssessmentTaskEmployee existing = getOne(new QueryWrapper<SafetyAssessmentTaskEmployee>()
|
.eq("task_id", request.getTaskId())
|
.eq("employee_id", request.getEmployeeId())
|
.last("limit 1"));
|
if (existing != null) {
|
return true;
|
}
|
if (request.getStatus() == null) {
|
request.setStatus(0);
|
}
|
updateTaskStatus(request.getTaskId(), 1);
|
return saveSafety(request);
|
}
|
|
@Override
|
public boolean submit(SafetyAssessmentTaskEmployee request) {
|
if (request == null) {
|
return false;
|
}
|
fillCurrentEmployeeIfMissing(request);
|
SafetyAssessmentTaskEmployee target = findSubmitTarget(request);
|
if (target == null) {
|
if (request.getTaskId() == null || request.getEmployeeId() == null) {
|
return false;
|
}
|
request.setStatus(1);
|
if (request.getCompleteTime() == null) {
|
request.setCompleteTime(LocalDateTime.now());
|
}
|
boolean saved = saveSafety(request);
|
finishTaskWhenAllSubmitted(request.getTaskId());
|
return saved;
|
}
|
target.setStatus(1);
|
target.setScore(request.getScore());
|
target.setRemark(request.getRemark());
|
target.setCompleteTime(request.getCompleteTime() == null ? LocalDateTime.now() : request.getCompleteTime());
|
boolean updated = updateSafety(target);
|
finishTaskWhenAllSubmitted(target.getTaskId());
|
return updated;
|
}
|
|
private SafetyAssessmentTaskEmployee findSubmitTarget(SafetyAssessmentTaskEmployee request) {
|
if (request.getId() != null) {
|
SafetyAssessmentTaskEmployee byId = getById(request.getId());
|
if (byId != null) {
|
return byId;
|
}
|
}
|
if (request.getTaskId() != null && request.getEmployeeId() != null) {
|
return getOne(new QueryWrapper<SafetyAssessmentTaskEmployee>()
|
.eq("task_id", request.getTaskId())
|
.eq("employee_id", request.getEmployeeId())
|
.last("limit 1"));
|
}
|
return null;
|
}
|
|
private void fillCurrentEmployeeIfMissing(SafetyAssessmentTaskEmployee request) {
|
if (request.getEmployeeId() == null) {
|
request.setEmployeeId(currentUserId());
|
}
|
if (!hasText(request.getEmployeeName())) {
|
request.setEmployeeName(currentUsername());
|
}
|
}
|
|
private void updateTaskStatus(Long taskId, Integer status) {
|
SafetyAssessmentTask task = taskService.getById(taskId);
|
if (task != null && (task.getStatus() == null || task.getStatus() < status)) {
|
task.setStatus(status);
|
taskService.updateSafety(task);
|
}
|
}
|
|
private void finishTaskWhenAllSubmitted(Long taskId) {
|
if (taskId == null) {
|
return;
|
}
|
long pending = count(new QueryWrapper<SafetyAssessmentTaskEmployee>()
|
.eq("task_id", taskId)
|
.eq("status", 0));
|
if (pending == 0) {
|
updateTaskStatus(taskId, 2);
|
}
|
}
|
}
|