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 implements SafetyAssessmentTaskEmployeeService { @Autowired private SafetyAssessmentTaskService taskService; @Override public IPage queryPage(Page page, SafetyAssessmentTaskEmployee query) { QueryWrapper wrapper = new QueryWrapper().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() .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() .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() .eq("task_id", taskId) .eq("status", 0)); if (pending == 0) { updateTaskStatus(taskId, 2); } } }