implements TasksService{
+
+ @Override
+ public TaskInfoResponse showTask(String taskId) {
+
+ TaskInfoResponse result = new TaskInfoResponse();
+ return result;
+ }
+
+ @Override
+ public String addTask(TaskRequest taskRequest) {
+ TaskEntity task= TaskConvert.MAPPER.taskRequestToTaskEntity(taskRequest);
+ task.setTaskNum(GenerateNumTool.generateNum("TASK"));
+ PriorityDto priorityDto = RequestConvert.MAPPER.taskRequestToPriorityDto(taskRequest);
+ task.setCalculatedPriority(CalculatedPriorityTool.calculatedPriority(priorityDto));
+ this.save(task);
+ return task.getTaskNum();
+ }
}
diff --git a/src/main/java/com/guo/learningprogresstracker/utils/CalculatedPriorityTool.java b/src/main/java/com/guo/learningprogresstracker/utils/CalculatedPriorityTool.java
new file mode 100644
index 0000000..58dfe8c
--- /dev/null
+++ b/src/main/java/com/guo/learningprogresstracker/utils/CalculatedPriorityTool.java
@@ -0,0 +1,40 @@
+package com.guo.learningprogresstracker.utils;
+
+import com.guo.learningprogresstracker.dto.PriorityDto;
+
+/**
+ * 加权优先级计算工具
+ *
+ * @author guo
+ */
+public class CalculatedPriorityTool {
+
+ /**
+ * 通过用户选择的5个选项,结合定义的权重计算任务的加权优先级。
+ * 急迫性 (Urgency)
+ * 急迫性代表任务的紧急程度。权重:0.35
+ *
+ * 重要性 (Importance)
+ * 重要性指示任务的重要程度。权重:0.25
+ *
+ * 内容难度 (Content Difficulty)
+ * 内容难度衡量任务内容的复杂性。权重:0.20
+ *
+ * 未来价值 (Future Value)
+ * 未来价值估计完成任务的长期价值。权重:0.10
+ *
+ * 主观优先级 (Subjective Priority)
+ * 主观优先级是用户对任务优先级的个人评估。权重:0.10
+ *
+ * @param priorityDto
+ * @return
+ */
+ public static Double calculatedPriority(PriorityDto priorityDto) {
+ // 暂时写死权重,也许可以考虑让用户自行配置权重
+ return (priorityDto.getUrgency() * 0.35) +
+ (priorityDto.getImportance() * 0.25) +
+ (priorityDto.getContentDifficulty() * 0.20) +
+ (priorityDto.getFutureValue() * 0.10) +
+ (priorityDto.getSubjectivePriority() * 0.10);
+ }
+}
diff --git a/src/main/java/com/guo/learningprogresstracker/utils/GenerateNumTool.java b/src/main/java/com/guo/learningprogresstracker/utils/GenerateNumTool.java
index e34d658..afab60d 100644
--- a/src/main/java/com/guo/learningprogresstracker/utils/GenerateNumTool.java
+++ b/src/main/java/com/guo/learningprogresstracker/utils/GenerateNumTool.java
@@ -12,7 +12,7 @@ import java.util.Date;
*/
@RequiredArgsConstructor
public class GenerateNumTool {
- public static int getNextSequence() {
+ private static int getNextSequence() {
// 获取当前时间的毫秒级时间戳
long timestamp = System.currentTimeMillis();
@@ -27,7 +27,18 @@ public class GenerateNumTool {
* @param separator
* @return
*/
- public String generateNum(String prefix, String separator) {
+ public static String generateNum(String prefix, String separator) {
+ String currentDate = new SimpleDateFormat("yyyyMMdd").format(new Date());
+
+ // 唯一的后缀
+ int sequence = getNextSequence();
+
+ // 返回完整的 taskNum
+ return prefix + separator + currentDate + separator + sequence;
+ }
+
+ public static String generateNum(String prefix) {
+ String separator = "-";
String currentDate = new SimpleDateFormat("yyyyMMdd").format(new Date());
// 唯一的后缀
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 3a1defc..64e4227 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -9,7 +9,7 @@ spring:
password:
flyway:
# 是否启动 flyway
- enabled: true
+ enabled: false
# 文件编码
encoding: UTF-8
# SQL 脚本位置,默认位于 classpath 下的 db/migration 目录
diff --git a/src/main/resources/mapper/TasksMapper.xml b/src/main/resources/mapper/TasksMapper.xml
index 0f6d723..75dcb9f 100644
--- a/src/main/resources/mapper/TasksMapper.xml
+++ b/src/main/resources/mapper/TasksMapper.xml
@@ -4,7 +4,7 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-
+
diff --git a/src/test/java/com/guo/learningprogresstracker/controller/TaskControllerTest.java b/src/test/java/com/guo/learningprogresstracker/controller/TaskControllerTest.java
new file mode 100644
index 0000000..cb82336
--- /dev/null
+++ b/src/test/java/com/guo/learningprogresstracker/controller/TaskControllerTest.java
@@ -0,0 +1,81 @@
+package com.guo.learningprogresstracker.controller;
+
+import cn.dev33.satoken.stp.StpUtil;
+import com.guo.learningprogresstracker.dto.request.TaskRequest;
+import com.guo.learningprogresstracker.dto.response.TaskInfoResponse;
+import com.guo.learningprogresstracker.entity.CommonResult;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+
+import static org.junit.jupiter.api.Assertions.*;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+@SpringBootTest
+class TaskControllerTest {
+
+ @Autowired
+ private TaskController taskController;
+
+ @BeforeEach
+ void setUp() {
+ StpUtil.login("测试用户", "test_driver");
+ }
+ @Test
+ void addTask() {
+ TaskRequest taskRequest = mock(TaskRequest.class);
+ // 设置学习任务的名称
+ when(taskRequest.getTaskName()).thenReturn("测试任务名称");
+
+ // 设置学习材料的存储URL
+ when(taskRequest.getMaterialUrl()).thenReturn("http://example.com/material");
+
+ // 设置用户设置的任务紧急性
+ when(taskRequest.getUrgency()).thenReturn(5);
+
+ // 设置用户设置的任务重要性
+ when(taskRequest.getImportance()).thenReturn(3);
+
+ // 设置任务的内容难度
+ when(taskRequest.getContentDifficulty()).thenReturn(4);
+
+ // 设置任务的未来价值
+ when(taskRequest.getFutureValue()).thenReturn(5);
+
+ // 设置用户对任务的主观优先级
+ when(taskRequest.getSubjectivePriority()).thenReturn(2);
+ CommonResult commonResult = taskController.addTask(taskRequest);
+
+ // 验证 addTask 是否被调用一次
+ assertEquals(commonResult.getCode(), 200,"测试数据插入失败");
+
+ }
+
+ @Test
+ void showTask() {
+ String taskId = mock(String.class);
+ TaskInfoResponse mockData = mock(TaskInfoResponse.class);
+
+ CommonResult commonResult = taskController.showTask(taskId);
+ assertEquals(commonResult.getCode(),200,"获取数据失败");
+ assertNotNull(commonResult.getData(),"返回值中不存在数据");
+ assertEquals(commonResult.getData(),mockData,"返回值携带数据不正确");
+ }
+
+ @Test
+ void updateTask() {
+ }
+
+ @Test
+ void deleteTask() {
+ }
+
+ @Test
+ void listTasks() {
+ }
+}
\ No newline at end of file