diff --git a/README.md b/README.md
index 4c9118f..6dc219a 100644
--- a/README.md
+++ b/README.md
@@ -17,4 +17,4 @@
### 教育评价项
> 学生每学期所有的评价项都在一个项中,按学校进行分区
-分区键: `AppraiseItem-{学校id}`
\ No newline at end of file
+分区键: `AppraiseRecord-{学校id}`
\ No newline at end of file
diff --git a/src/main/java/cn/teammodel/common/PK.java b/src/main/java/cn/teammodel/common/PK.java
index ce92243..9b0df58 100644
--- a/src/main/java/cn/teammodel/common/PK.java
+++ b/src/main/java/cn/teammodel/common/PK.java
@@ -11,6 +11,27 @@ public interface PK {
/**
* 评价树
*/
- PartitionKey PK_EVALUATION = new PartitionKey("Appraise");
+ String PK_APPRAISE = "Appraise";
+ /**
+ * 学生的评价记录
+ * 参数数量: 1 , 拼接: SchoolId
+ */
+ String PK_APPRAISE_RECORD = "AppraiseRecord-%s";
+
+ /**
+ * 构建分区键
+ */
+ static PartitionKey of(String pk) {
+ return new PartitionKey(pk);
+ }
+
+ /**
+ * 需要传参构建分区键
+ * 注意: 参数的个数不会在编译时被校验,需自己注意
+ */
+ static PartitionKey buildOf(String pk, String... args) {
+ String pkStr = String.format(pk, args);
+ return new PartitionKey(pkStr);
+ }
}
diff --git a/src/main/java/cn/teammodel/model/entity/Appraise.java b/src/main/java/cn/teammodel/model/entity/Appraise.java
index 9cb977c..85ef5ba 100644
--- a/src/main/java/cn/teammodel/model/entity/Appraise.java
+++ b/src/main/java/cn/teammodel/model/entity/Appraise.java
@@ -1,11 +1,9 @@
package cn.teammodel.model.entity;
import com.azure.spring.data.cosmos.core.mapping.Container;
-import com.azure.spring.data.cosmos.core.mapping.GeneratedValue;
-import com.azure.spring.data.cosmos.core.mapping.PartitionKey;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
-import org.springframework.data.annotation.Id;
+import lombok.EqualsAndHashCode;
import java.util.List;
@@ -14,18 +12,11 @@ import java.util.List;
* @author winter
* @create 2023-11-20 11:04
*/
+@EqualsAndHashCode(callSuper = true)
@Container(containerName = "School")
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
-public class Appraise {
- @Id
- @GeneratedValue
- private String id;
- /**
- * 分区键: evaluation
- */
- @PartitionKey
- private String code;
+public class Appraise extends BaseItem{
/**
* 学校 Id
*/
diff --git a/src/main/java/cn/teammodel/model/entity/AppraiseRecord.java b/src/main/java/cn/teammodel/model/entity/AppraiseRecord.java
new file mode 100644
index 0000000..c5b8afe
--- /dev/null
+++ b/src/main/java/cn/teammodel/model/entity/AppraiseRecord.java
@@ -0,0 +1,36 @@
+package cn.teammodel.model.entity;
+
+import com.azure.spring.data.cosmos.core.mapping.Container;
+import com.azure.spring.data.cosmos.core.mapping.GeneratedValue;
+import com.azure.spring.data.cosmos.core.mapping.PartitionKey;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import lombok.Data;
+import org.springframework.data.annotation.Id;
+
+/**
+ * @author winter
+ * @create 2023-11-27 11:02
+ */
+@Container(containerName = "Student")
+@Data
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class AppraiseRecord {
+ @Id
+ @GeneratedValue
+ private String id;
+ /**
+ * 分区键: AppraiseRecord-{schoolId}
+ */
+ @PartitionKey
+ private String code;
+ /**
+ * 学校 Id
+ */
+ private String schoolId;
+ /**
+ * 学段 id
+ */
+ private String periodId;
+
+
+}
diff --git a/src/main/java/cn/teammodel/model/entity/BaseItem.java b/src/main/java/cn/teammodel/model/entity/BaseItem.java
new file mode 100644
index 0000000..10ae0e6
--- /dev/null
+++ b/src/main/java/cn/teammodel/model/entity/BaseItem.java
@@ -0,0 +1,24 @@
+package cn.teammodel.model.entity;
+
+import com.azure.spring.data.cosmos.core.mapping.GeneratedValue;
+import com.azure.spring.data.cosmos.core.mapping.PartitionKey;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import lombok.Data;
+import org.springframework.data.annotation.Id;
+
+/**
+ * @author winter
+ * @create 2023-11-27 11:05
+ */
+@Data
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class BaseItem {
+ @Id
+ @GeneratedValue
+ private String id;
+/**
+* 分区键
+*/
+ @PartitionKey
+ private String code;
+}
diff --git a/src/main/java/cn/teammodel/service/impl/EvaluationServiceImpl.java b/src/main/java/cn/teammodel/service/impl/EvaluationServiceImpl.java
index e0d02a3..ce13739 100644
--- a/src/main/java/cn/teammodel/service/impl/EvaluationServiceImpl.java
+++ b/src/main/java/cn/teammodel/service/impl/EvaluationServiceImpl.java
@@ -40,13 +40,14 @@ public class EvaluationServiceImpl implements EvaluationService {
* 通用的获取 evaluation 的方法: 判断参数,判断数据是否为空
* 从 token 中获取 schoolId
*/
- private Appraise findEvaluation(String periodId) {
+ private Appraise findAppraise(String periodId) {
+ // 默认学区为 default
periodId = StringUtils.isEmpty(periodId) ? "default" : periodId;
User loginUser = SecurityUtils.getLoginUser();
String schoolId = loginUser.getSchoolId();
// 拿到要新增节点的原始数据
- Appraise appraise = evaluationRepository.findBySchoolIdAndPeriodId(schoolId, periodId, PK.PK_EVALUATION);
+ Appraise appraise = evaluationRepository.findBySchoolIdAndPeriodId(schoolId, periodId, PK.of(PK.PK_APPRAISE));
if (appraise == null) {
throw new ServiceException(ErrorCode.PARAMS_ERROR.getCode(), "学校评价数据不存在");
}
@@ -55,7 +56,7 @@ public class EvaluationServiceImpl implements EvaluationService {
@Override
public Appraise getTree(GetEvaluateTreeDto getEvaluateTreeDto) {
- Appraise appraise = findEvaluation(getEvaluateTreeDto.getPeriodId());
+ Appraise appraise = findAppraise(getEvaluateTreeDto.getPeriodId());
return this.buildTree(appraise);
}
@@ -100,7 +101,7 @@ public class EvaluationServiceImpl implements EvaluationService {
@Override
public Appraise insertNode(InsertNodeDto insertNodeDto) {
- Appraise appraise = findEvaluation(insertNodeDto.getPeriodId());
+ Appraise appraise = findAppraise(insertNodeDto.getPeriodId());
User loginUser = SecurityUtils.getLoginUser();
List originNodes = appraise.getNodes();
@@ -130,7 +131,7 @@ public class EvaluationServiceImpl implements EvaluationService {
public Appraise updateNode(UpdateNodeDto updateNodeDto) {
String updateNodeId = updateNodeDto.getId();
- Appraise appraise = findEvaluation(updateNodeDto.getPeriodId());
+ Appraise appraise = findAppraise(updateNodeDto.getPeriodId());
List originNodes = appraise.getNodes();
// 每个节点都有 id, 直接校验是否合法
AppraiseTreeNode updateNode = originNodes.stream()
@@ -150,7 +151,7 @@ public class EvaluationServiceImpl implements EvaluationService {
@Override
public Appraise deleteNode(DeleteNodeDto deleteNodeDto) {
// 删除指定节点,可能是(一级,二级,三级),设计一个通用的
- Appraise appraise = findEvaluation(deleteNodeDto.getPeriodId());
+ Appraise appraise = findAppraise(deleteNodeDto.getPeriodId());
List nodes = appraise.getNodes();
List nodesToDelete = new ArrayList<>();
diff --git a/src/test/java/cn/teammodel/TestWithoutSpring.java b/src/test/java/cn/teammodel/TestWithoutSpring.java
index 83b270b..1216416 100644
--- a/src/test/java/cn/teammodel/TestWithoutSpring.java
+++ b/src/test/java/cn/teammodel/TestWithoutSpring.java
@@ -11,7 +11,6 @@ import com.taobao.api.ApiException;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
-import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -137,6 +136,6 @@ public class TestWithoutSpring {
@Test
public void testLocalDateTime() {
- System.out.println(LocalDateTime.now());
+
}
}