From 1b77c2724e38d087f3eab4a2f27b3b165f4265dc Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期一, 25 五月 2026 14:37:34 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev_tide' into dev_tide
---
src/main/java/com/ruoyi/safety/service/impl/SafetyAssessmentTaskEmployeeServiceImpl.java | 141 +++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 141 insertions(+), 0 deletions(-)
diff --git a/src/main/java/com/ruoyi/safety/service/impl/SafetyAssessmentTaskEmployeeServiceImpl.java b/src/main/java/com/ruoyi/safety/service/impl/SafetyAssessmentTaskEmployeeServiceImpl.java
new file mode 100644
index 0000000..cef0b03
--- /dev/null
+++ b/src/main/java/com/ruoyi/safety/service/impl/SafetyAssessmentTaskEmployeeServiceImpl.java
@@ -0,0 +1,141 @@
+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);
+ }
+ }
+}
--
Gitblit v1.9.3