diff --git a/web-adapter/src/main/java/com/zcloud/safetyDutyList/web/tasklist/TaskDetailController.java b/web-adapter/src/main/java/com/zcloud/safetyDutyList/web/tasklist/TaskDetailController.java
index 431cbf6..c90b153 100644
--- a/web-adapter/src/main/java/com/zcloud/safetyDutyList/web/tasklist/TaskDetailController.java
+++ b/web-adapter/src/main/java/com/zcloud/safetyDutyList/web/tasklist/TaskDetailController.java
@@ -14,6 +14,8 @@ import lombok.AllArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
+import java.util.List;
+
/**
* 任务详情控制器
*
@@ -40,6 +42,12 @@ public class TaskDetailController {
return taskListService.addTaskDetail(cmd);
}
+ @ApiOperation("新增任务")
+ @PostMapping("/saveBatch")
+ public SingleResponse add(@Validated @RequestBody List cmds) {
+ return taskListService.addTaskDetailBatch(cmds);
+ }
+
@ApiOperation("获取任务详情")
@GetMapping("/{detailId}")
public SingleResponse getByDetailId(@PathVariable String detailId) {
diff --git a/web-app/src/main/java/com/zcloud/safetyDutyList/command/tasklist/TaskDetailSaveBatchExe.java b/web-app/src/main/java/com/zcloud/safetyDutyList/command/tasklist/TaskDetailSaveBatchExe.java
new file mode 100644
index 0000000..ddf6c48
--- /dev/null
+++ b/web-app/src/main/java/com/zcloud/safetyDutyList/command/tasklist/TaskDetailSaveBatchExe.java
@@ -0,0 +1,80 @@
+package com.zcloud.safetyDutyList.command.tasklist;
+
+import com.alibaba.cola.exception.BizException;
+import com.zcloud.safetyDutyList.domain.enums.TaskStatusEnum;
+import com.zcloud.safetyDutyList.domain.gateway.tasklist.TaskDetailGateway;
+import com.zcloud.safetyDutyList.domain.gateway.tasklist.TaskListGateway;
+import com.zcloud.safetyDutyList.domain.model.tasklist.TaskDetailE;
+import com.zcloud.safetyDutyList.dto.clientobject.tasklist.TaskDetailCO;
+import com.zcloud.safetyDutyList.dto.tasklist.TaskDetailSaveCmd;
+import lombok.AllArgsConstructor;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Component;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 任务详情保存执行器
+ *
+ * 处理新增任务详情的业务逻辑:
+ * 1. 查询该清单下已有任务详情,计算总分
+ * 2. 校验新增后清单总分不超过100分
+ * 3. 创建任务详情实体并保存
+ * 4. 返回新增后的任务详情信息
+ */
+@Component
+@AllArgsConstructor
+public class TaskDetailSaveBatchExe {
+ private final TaskDetailGateway taskDetailGateway;
+ private final TaskListGateway taskListGateway;
+
+ public Boolean execute(List cmds) {
+
+ if (cmds == null || cmds.isEmpty()) {
+ throw new BizException("参数不能为空");
+ }
+
+ // 获取当前已有列表
+ List existDetails = taskDetailGateway.listByTaskListId(cmds.get(0).getTaskListId());
+
+ // 当前的分值
+ BigDecimal totalScore = existDetails.stream()
+ .map(TaskDetailE::getTaskScore)
+ .filter(s -> s != null)
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
+
+ BigDecimal cmdScore = cmds.stream()
+ .map(TaskDetailSaveCmd::getTaskScore)
+ .filter(s -> s != null)
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
+
+ BigDecimal diff = new BigDecimal("100").subtract(totalScore);
+
+ if (cmdScore != null) {
+ totalScore = totalScore.add(cmdScore);
+ }
+ if (totalScore.compareTo(new BigDecimal("100")) > 0) {
+ throw new BizException("当前清单总分不能超过100,任务可设最大分值:" + diff);
+ }
+
+ List detailEList = new ArrayList <>();
+ for (TaskDetailSaveCmd cmd : cmds) {
+ TaskDetailE detailE = new TaskDetailE();
+ BeanUtils.copyProperties(cmd, detailE);
+ detailE.init();
+ detailE.setTaskStatus(TaskStatusEnum.IN_PROGRESS.getCode());
+ detailE.setFeedbackStatus(1);
+
+ detailEList.add(detailE);
+ }
+
+ boolean res = taskDetailGateway.batchAdd(detailEList);
+ if (!res) {
+ throw new BizException("保存失败");
+ }
+
+ return true;
+ }
+}
diff --git a/web-app/src/main/java/com/zcloud/safetyDutyList/service/tasklist/TaskListServiceImpl.java b/web-app/src/main/java/com/zcloud/safetyDutyList/service/tasklist/TaskListServiceImpl.java
index e972f27..3e473bd 100644
--- a/web-app/src/main/java/com/zcloud/safetyDutyList/service/tasklist/TaskListServiceImpl.java
+++ b/web-app/src/main/java/com/zcloud/safetyDutyList/service/tasklist/TaskListServiceImpl.java
@@ -12,6 +12,8 @@ import com.zcloud.safetyDutyList.dto.tasklist.*;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
+import java.util.List;
+
/**
* 安全责任清单服务实现类
*
@@ -39,6 +41,8 @@ public class TaskListServiceImpl implements TaskListServiceI {
private final TaskListIssueExe taskListIssueExe;
/** 任务详情保存执行器 */
private final TaskDetailSaveExe taskDetailSaveExe;
+ /** 任务详情批量保存执行器 */
+ private final TaskDetailSaveBatchExe taskDetailSaveBatchExe;
/** 任务详情关闭执行器 */
private final TaskDetailCloseExe taskDetailCloseExe;
/** 任务评分更新执行器 */
@@ -118,6 +122,12 @@ public class TaskListServiceImpl implements TaskListServiceI {
return SingleResponse.of(co);
}
+ @Override
+ public SingleResponse addTaskDetailBatch(List cmds) {
+ taskDetailSaveBatchExe.execute(cmds);
+ return SingleResponse.buildSuccess();
+ }
+
@Override
public SingleResponse getByTaskDetailId(String detailId) {
return taskDetailQueryExe.getByDetailId(detailId);
diff --git a/web-client/src/main/java/com/zcloud/safetyDutyList/api/tasklist/TaskListServiceI.java b/web-client/src/main/java/com/zcloud/safetyDutyList/api/tasklist/TaskListServiceI.java
index 299929f..48fded1 100644
--- a/web-client/src/main/java/com/zcloud/safetyDutyList/api/tasklist/TaskListServiceI.java
+++ b/web-client/src/main/java/com/zcloud/safetyDutyList/api/tasklist/TaskListServiceI.java
@@ -7,6 +7,8 @@ import com.alibaba.cola.dto.SingleResponse;
import com.zcloud.safetyDutyList.dto.clientobject.tasklist.*;
import com.zcloud.safetyDutyList.dto.tasklist.*;
+import java.util.List;
+
/**
* 安全责任清单服务接口
*
@@ -97,6 +99,14 @@ public interface TaskListServiceI {
*/
SingleResponse addTaskDetail(TaskDetailSaveCmd cmd);
+ /**
+ * 新增任务详情(校验清单总分不超过100)
+ *
+ * @param cmds 任务保存命令
+ * @return 新增后的任务详情
+ */
+ SingleResponse addTaskDetailBatch(List cmds);
+
/**
* 根据任务详情ID获取任务详情(含所属清单信息)
*
diff --git a/web-infrastructure/src/main/resources/mapper/tasklist/FeedbackMapper.xml b/web-infrastructure/src/main/resources/mapper/tasklist/FeedbackMapper.xml
index 09ba6d1..1e691af 100644
--- a/web-infrastructure/src/main/resources/mapper/tasklist/FeedbackMapper.xml
+++ b/web-infrastructure/src/main/resources/mapper/tasklist/FeedbackMapper.xml
@@ -12,12 +12,13 @@
fb_dept.name AS feedbackDepartmentName,
fb_corp.corp_name AS feedbackCorpName
FROM safety_accountability_feedback f
- LEFT JOIN safety_accountability_task_detail td ON f.task_detail_id = td.task_detail_id
- LEFT JOIN safety_accountability_task_list tl ON f.task_list_id = tl.task_list_id
+ LEFT JOIN safety_accountability_task_detail td ON f.task_detail_id = td.task_detail_id and td.delete_enum = 'FALSE'
+ LEFT JOIN safety_accountability_task_list tl ON f.task_list_id = tl.task_list_id and tl.delete_enum = 'FALSE'
LEFT JOIN user fb_user ON f.feedback_user_id = fb_user.id
LEFT JOIN department fb_dept ON f.feedback_department_id = fb_dept.id
LEFT JOIN corp_info fb_corp ON f.feedback_corp_id = fb_corp.id
+ delete_enum = 'FALSE'
AND f.feedback_corp_id = #{params.feedbackCorpId}
@@ -36,13 +37,13 @@
@@ -59,7 +60,7 @@
LEFT JOIN user fb_user ON f.feedback_user_id = fb_user.id
LEFT JOIN department fb_dept ON f.feedback_department_id = fb_dept.id
LEFT JOIN corp_info fb_corp ON f.feedback_corp_id = fb_corp.id
- WHERE f.feedback_id = #{feedbackId}
+ WHERE f.feedback_id = #{feedbackId} AND f.delete_enum = 'FALSE'