From a3be5c26a1fade428f2e2667a29d9244008f4c34 Mon Sep 17 00:00:00 2001 From: huababa1 <2037205722@qq.com> Date: Fri, 4 Jul 2025 18:47:34 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E4=BF=AE=E6=94=B9=E3=80=91ps=E8=80=83?= =?UTF-8?q?=E7=82=B9=E5=87=BA=E9=A2=98=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../exam/dal/dataobject/ExamPsKeyword.java | 12 ++- .../admin/getpoints/dto/PsViewReturnDto.java | 19 +++++ .../admin/getpoints/vo/PsReturnVo.java | 36 +++++++++ .../getpoints/ExamGetPointsService.java | 3 +- .../getpoints/ExamGetPointsServiceImpl.java | 74 ++++++++++++++++--- .../controller/service/ps/IPsService.java | 3 +- .../controller/service/ps/PsServiceImpl.java | 5 +- .../utils/Mysql/MySQLExporterUtil.java | 60 ++++++++++++--- .../judgement/dal/mysql/ps/PsMapper.java | 9 ++- .../src/main/resources/mapper/ps/PsMapper.xml | 35 +++++++-- 10 files changed, 225 insertions(+), 31 deletions(-) create mode 100644 exam-module-judgement/exam-module-judgement-biz/src/main/java/pc/exam/pp/module/judgement/controller/admin/getpoints/dto/PsViewReturnDto.java create mode 100644 exam-module-judgement/exam-module-judgement-biz/src/main/java/pc/exam/pp/module/judgement/controller/admin/getpoints/vo/PsReturnVo.java diff --git a/exam-module-exam/exam-module-exam-biz/src/main/java/pc/exam/pp/module/exam/dal/dataobject/ExamPsKeyword.java b/exam-module-exam/exam-module-exam-biz/src/main/java/pc/exam/pp/module/exam/dal/dataobject/ExamPsKeyword.java index ff2d328d..83a05466 100644 --- a/exam-module-exam/exam-module-exam-biz/src/main/java/pc/exam/pp/module/exam/dal/dataobject/ExamPsKeyword.java +++ b/exam-module-exam/exam-module-exam-biz/src/main/java/pc/exam/pp/module/exam/dal/dataobject/ExamPsKeyword.java @@ -1,11 +1,14 @@ package pc.exam.pp.module.exam.dal.dataobject; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.Accessors; +import java.util.List; + @TableName(value = "exam_ps_keyword", autoResultMap = true) @Data @Accessors(chain = true) @@ -27,11 +30,11 @@ public class ExamPsKeyword { /** * 键 */ - private String keyName; + private String key; /** * 值 */ - private String keyValue; + private String value; /** * 权值 */ @@ -40,4 +43,9 @@ public class ExamPsKeyword { * 类型(学生考点:1,结果考点:2) */ private String type; + + private Integer sort; + + @TableField(exist = false) + private List children; } diff --git a/exam-module-judgement/exam-module-judgement-biz/src/main/java/pc/exam/pp/module/judgement/controller/admin/getpoints/dto/PsViewReturnDto.java b/exam-module-judgement/exam-module-judgement-biz/src/main/java/pc/exam/pp/module/judgement/controller/admin/getpoints/dto/PsViewReturnDto.java new file mode 100644 index 00000000..13aff24c --- /dev/null +++ b/exam-module-judgement/exam-module-judgement-biz/src/main/java/pc/exam/pp/module/judgement/controller/admin/getpoints/dto/PsViewReturnDto.java @@ -0,0 +1,19 @@ +package pc.exam.pp.module.judgement.controller.admin.getpoints.dto; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import pc.exam.pp.module.exam.dal.dataobject.ExamPsKeyword; +import pc.exam.pp.module.judgement.controller.admin.getpoints.vo.PsReturnVo; +import pc.exam.pp.module.judgement.controller.admin.getpoints.vo.PsVo; + +import java.util.List; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class PsViewReturnDto { + private List pointList; + + private List answerList; +} diff --git a/exam-module-judgement/exam-module-judgement-biz/src/main/java/pc/exam/pp/module/judgement/controller/admin/getpoints/vo/PsReturnVo.java b/exam-module-judgement/exam-module-judgement-biz/src/main/java/pc/exam/pp/module/judgement/controller/admin/getpoints/vo/PsReturnVo.java new file mode 100644 index 00000000..f70f2b96 --- /dev/null +++ b/exam-module-judgement/exam-module-judgement-biz/src/main/java/pc/exam/pp/module/judgement/controller/admin/getpoints/vo/PsReturnVo.java @@ -0,0 +1,36 @@ +package pc.exam.pp.module.judgement.controller.admin.getpoints.vo; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class PsReturnVo { + + + + /** + * 主键id + */ + private String id; + /** + * 试题id + */ + private String quId; + /** + * 父id + */ + private String parentId; + + private String key; + + private String rate; + + private String value; + + private List children; +} diff --git a/exam-module-judgement/exam-module-judgement-biz/src/main/java/pc/exam/pp/module/judgement/controller/service/getpoints/ExamGetPointsService.java b/exam-module-judgement/exam-module-judgement-biz/src/main/java/pc/exam/pp/module/judgement/controller/service/getpoints/ExamGetPointsService.java index 5761d886..e418bcb5 100644 --- a/exam-module-judgement/exam-module-judgement-biz/src/main/java/pc/exam/pp/module/judgement/controller/service/getpoints/ExamGetPointsService.java +++ b/exam-module-judgement/exam-module-judgement-biz/src/main/java/pc/exam/pp/module/judgement/controller/service/getpoints/ExamGetPointsService.java @@ -4,6 +4,7 @@ import pc.exam.pp.module.exam.dal.dataobject.ExamPsKeyword; import pc.exam.pp.module.exam.dal.dataobject.ExamQuestionAnswer; import pc.exam.pp.module.judgement.controller.admin.getpoints.dto.PsAnswerSubmitDTO; import pc.exam.pp.module.judgement.controller.admin.getpoints.dto.PsViewDto; +import pc.exam.pp.module.judgement.controller.admin.getpoints.dto.PsViewReturnDto; import pc.exam.pp.module.judgement.controller.admin.getpoints.vo.FilePointsVo; import pc.exam.pp.module.judgement.controller.admin.getpoints.vo.Points; import pc.exam.pp.module.judgement.controller.admin.getpoints.vo.PointsVo; @@ -31,5 +32,5 @@ public interface ExamGetPointsService { void set_ps_point(PsAnswerSubmitDTO psAnswerSubmitDTO); - PsViewDto getPsPointById(String quId); + PsViewReturnDto getPsPointById(String quId); } diff --git a/exam-module-judgement/exam-module-judgement-biz/src/main/java/pc/exam/pp/module/judgement/controller/service/getpoints/ExamGetPointsServiceImpl.java b/exam-module-judgement/exam-module-judgement-biz/src/main/java/pc/exam/pp/module/judgement/controller/service/getpoints/ExamGetPointsServiceImpl.java index a60267d0..89651425 100644 --- a/exam-module-judgement/exam-module-judgement-biz/src/main/java/pc/exam/pp/module/judgement/controller/service/getpoints/ExamGetPointsServiceImpl.java +++ b/exam-module-judgement/exam-module-judgement-biz/src/main/java/pc/exam/pp/module/judgement/controller/service/getpoints/ExamGetPointsServiceImpl.java @@ -23,6 +23,7 @@ import pc.exam.pp.module.infra.service.config.ConfigService; import pc.exam.pp.module.judgement.controller.admin.getpoints.dto.PsAnswerNode; import pc.exam.pp.module.judgement.controller.admin.getpoints.dto.PsAnswerSubmitDTO; import pc.exam.pp.module.judgement.controller.admin.getpoints.dto.PsViewDto; +import pc.exam.pp.module.judgement.controller.admin.getpoints.dto.PsViewReturnDto; import pc.exam.pp.module.judgement.controller.admin.getpoints.vo.*; import pc.exam.pp.module.judgement.controller.service.ps.IPsService; import pc.exam.pp.module.judgement.controller.utils.ps.PsUtil; @@ -464,8 +465,12 @@ public class ExamGetPointsServiceImpl implements ExamGetPointsService{ } //给List统一设置type String type = psAnswerSubmitDTO.getType(); - for (ExamPsKeyword keyword : stuList) { + + for (int i = 0; i < stuList.size(); i++) { + ExamPsKeyword keyword = stuList.get(i); keyword.setType(type); + // 设置排序值 + keyword.setSort(i + 1); } stuList.forEach(System.out::println); //先根据删除试题id删除 @@ -475,16 +480,67 @@ public class ExamGetPointsServiceImpl implements ExamGetPointsService{ } @Override - public PsViewDto getPsPointById(String quId) { - PsViewDto psViewDto=new PsViewDto(); - List pointList=psService.selectPsPointByType(quId,"1"); - List answerList=psService.selectPsPointByType(quId,"2"); - psViewDto.setAnswerList(answerList); - psViewDto.setPointList(pointList); + public PsViewReturnDto getPsPointById(String quId) { + PsViewReturnDto psViewDto=new PsViewReturnDto(); + List pointList=psService.selectPsPointByType(quId,"1"); + List answerList=psService.selectPsPointByType(quId,"2"); + // 构建树形结构 + List treeAnswerList = buildTree(answerList); + psViewDto.setAnswerList(treeAnswerList); + List treePointList = buildTree(pointList); + psViewDto.setPointList(treePointList); return psViewDto; } + /** + * 构建答案树形结构 + */ + private List buildTree(List flatList) { + if (CollectionUtils.isEmpty(flatList)) { + return Collections.emptyList(); + } + // 第一步:构建所有节点 + Map nodeMap = new LinkedHashMap<>(); + Map> parentChildMap = new HashMap<>(); + + flatList.forEach(item -> { + ExamPsKeyword node = new ExamPsKeyword(); + node.setId(item.getId()); + node.setKey(item.getKey()); + node.setValue(item.getValue()); // 先保留原始值 + node.setRate(item.getRate()); + node.setType(item.getType()); + node.setSort(item.getSort()); + nodeMap.put(item.getId(), node); + String parentId = item.getParentId() != null ? item.getParentId() : "0"; + parentChildMap.computeIfAbsent(parentId, k -> new ArrayList<>()).add(node); + }); + + // 第二步:建立父子关系并识别真正父节点 + Set realParents = new HashSet<>(); + parentChildMap.forEach((parentId, children) -> { + if ("0".equals(parentId)) { + children.forEach(node -> { + // 标记没有子节点的独立节点 + if (!parentChildMap.containsKey(node.getId())) { + node.setChildren(null); + } + }); + } else { + ExamPsKeyword parent = nodeMap.get(parentId); + if (parent != null) { + parent.setChildren(children); + realParents.add(parent); // 记录真正有子节点的父节点 + } + } + }); + + // 第三步:对有子节点的父节点设置value=null + realParents.forEach(parent -> parent.setValue(null)); + + return parentChildMap.getOrDefault("0", Collections.emptyList()); + } // 递归转换方法 @@ -496,8 +552,8 @@ public class ExamGetPointsServiceImpl implements ExamGetPointsService{ keyword.setId(id); keyword.setQuId(quId); keyword.setParentId(parentId); - keyword.setKeyName(node.getKey()); - keyword.setKeyValue(node.getValue()); + keyword.setKey(node.getKey()); + keyword.setValue(node.getValue()); keyword.setRate(node.getRate() == null ? null : node.getRate().toString()); resultList.add(keyword); diff --git a/exam-module-judgement/exam-module-judgement-biz/src/main/java/pc/exam/pp/module/judgement/controller/service/ps/IPsService.java b/exam-module-judgement/exam-module-judgement-biz/src/main/java/pc/exam/pp/module/judgement/controller/service/ps/IPsService.java index 7eaac6f0..5bf9f7e2 100644 --- a/exam-module-judgement/exam-module-judgement-biz/src/main/java/pc/exam/pp/module/judgement/controller/service/ps/IPsService.java +++ b/exam-module-judgement/exam-module-judgement-biz/src/main/java/pc/exam/pp/module/judgement/controller/service/ps/IPsService.java @@ -3,6 +3,7 @@ package pc.exam.pp.module.judgement.controller.service.ps; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Service; import pc.exam.pp.module.exam.dal.dataobject.ExamPsKeyword; +import pc.exam.pp.module.judgement.controller.admin.getpoints.vo.PsReturnVo; import pc.exam.pp.module.judgement.controller.admin.getpoints.vo.PsVo; import java.util.List; @@ -13,6 +14,6 @@ public interface IPsService { void insertPsKeywordList(List resultList); - List selectPsPointByType(String quId, String type); + List selectPsPointByType(String quId, String type); } diff --git a/exam-module-judgement/exam-module-judgement-biz/src/main/java/pc/exam/pp/module/judgement/controller/service/ps/PsServiceImpl.java b/exam-module-judgement/exam-module-judgement-biz/src/main/java/pc/exam/pp/module/judgement/controller/service/ps/PsServiceImpl.java index fc038335..d0c7b94a 100644 --- a/exam-module-judgement/exam-module-judgement-biz/src/main/java/pc/exam/pp/module/judgement/controller/service/ps/PsServiceImpl.java +++ b/exam-module-judgement/exam-module-judgement-biz/src/main/java/pc/exam/pp/module/judgement/controller/service/ps/PsServiceImpl.java @@ -3,6 +3,7 @@ package pc.exam.pp.module.judgement.controller.service.ps; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; import pc.exam.pp.module.exam.dal.dataobject.ExamPsKeyword; +import pc.exam.pp.module.judgement.controller.admin.getpoints.vo.PsReturnVo; import pc.exam.pp.module.judgement.controller.admin.getpoints.vo.PsVo; import pc.exam.pp.module.judgement.dal.mysql.ps.PsMapper; @@ -19,11 +20,11 @@ public class PsServiceImpl implements IPsService { @Override public void insertPsKeywordList(List resultList) { - psMapper.insertBatch(resultList); + psMapper.insertPsKeywordList(resultList); } @Override - public List selectPsPointByType(String quId, String type) { + public List selectPsPointByType(String quId, String type) { return psMapper.selectPsPointByType(quId,type); } } diff --git a/exam-module-judgement/exam-module-judgement-biz/src/main/java/pc/exam/pp/module/judgement/controller/utils/Mysql/MySQLExporterUtil.java b/exam-module-judgement/exam-module-judgement-biz/src/main/java/pc/exam/pp/module/judgement/controller/utils/Mysql/MySQLExporterUtil.java index ac2aa137..8d0d6e71 100644 --- a/exam-module-judgement/exam-module-judgement-biz/src/main/java/pc/exam/pp/module/judgement/controller/utils/Mysql/MySQLExporterUtil.java +++ b/exam-module-judgement/exam-module-judgement-biz/src/main/java/pc/exam/pp/module/judgement/controller/utils/Mysql/MySQLExporterUtil.java @@ -4,6 +4,8 @@ import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.sql.*; +import java.util.ArrayList; +import java.util.List; public class MySQLExporterUtil { @@ -36,7 +38,9 @@ public class MySQLExporterUtil { // 导出视图结构 exportViews(conn, writer); // 导出存储过程 - exportProcedures(conn, writer); +// exportProcedures(conn, writer); + // 4. 导出所有触发器 +// exportTriggers(conn,writer); System.out.println("导出成功!文件路径: " + outputFile); } catch (Exception e) { e.printStackTrace(); @@ -68,20 +72,33 @@ public class MySQLExporterUtil { // 获取 CREATE TABLE 语句 String createTableSQL = rs.next() ? rs.getString("Create Table") : ""; - // 移除 AUTO_INCREMENT 部分 - createTableSQL = createTableSQL.replaceAll("AUTO_INCREMENT=\\d+", ""); - - // 移除 ENGINE, CHARSET 和 ROW_FORMAT 部分 - createTableSQL = createTableSQL.replaceAll("ENGINE=[^ ]+|DEFAULT CHARSET=[^ ]+|ROW_FORMAT=[^ ]+", ""); - - // 清理多余的空格 - createTableSQL = createTableSQL.trim(); +// // 移除 AUTO_INCREMENT 部分 +// createTableSQL = createTableSQL.replaceAll("AUTO_INCREMENT=\\d+", ""); +// +// // 移除 ENGINE, CHARSET 和 ROW_FORMAT 部分 +// createTableSQL = createTableSQL.replaceAll("ENGINE=[^ ]+|DEFAULT CHARSET=[^ ]+|ROW_FORMAT=[^ ]+", ""); +// +// // 清理多余的空格 +// createTableSQL = createTableSQL.trim(); return createTableSQL; } } + /** + * 导出所有触发器 + */ + private void exportTriggers(Connection conn, FileWriter writer) throws SQLException, IOException { + writer.write("\n-- ----------------------------\n"); + writer.write("-- 触发器\n"); + writer.write("-- ----------------------------\n\n"); + List triggers = getAllTriggers(conn); + for (String trigger : triggers) { + String ddl = getTriggerDDL(conn,trigger); + writer.write(ddl + ";\n\n"); + } + } private void exportTableData(Connection conn, String tableName, FileWriter writer) throws SQLException, IOException { String query = "SELECT * FROM " + tableName; @@ -141,4 +158,29 @@ public class MySQLExporterUtil { return ""; } } + /** + * 获取触发器的DDL语句 + */ + private String getTriggerDDL(Connection conn,String triggerName) throws SQLException { + try (Statement stmt = conn.createStatement(); + ResultSet rs = stmt.executeQuery("SHOW CREATE TRIGGER `" + triggerName + "`")) { + if (rs.next()) { + return rs.getString(3); // 创建语句在第3列 + } + } + return ""; + } + /** + * 获取所有触发器 + */ + private List getAllTriggers(Connection conn) throws SQLException { + List triggers = new ArrayList<>(); + try (Statement stmt = conn.createStatement(); + ResultSet rs = stmt.executeQuery("SHOW TRIGGERS FROM " + databaseName)) { + while (rs.next()) { + triggers.add(rs.getString("Trigger")); + } + } + return triggers; + } } diff --git a/exam-module-judgement/exam-module-judgement-biz/src/main/java/pc/exam/pp/module/judgement/dal/mysql/ps/PsMapper.java b/exam-module-judgement/exam-module-judgement-biz/src/main/java/pc/exam/pp/module/judgement/dal/mysql/ps/PsMapper.java index 9a130a4d..f7ced1fa 100644 --- a/exam-module-judgement/exam-module-judgement-biz/src/main/java/pc/exam/pp/module/judgement/dal/mysql/ps/PsMapper.java +++ b/exam-module-judgement/exam-module-judgement-biz/src/main/java/pc/exam/pp/module/judgement/dal/mysql/ps/PsMapper.java @@ -4,6 +4,7 @@ import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import pc.exam.pp.framework.mybatis.core.mapper.BaseMapperX; import pc.exam.pp.module.exam.dal.dataobject.ExamPsKeyword; +import pc.exam.pp.module.judgement.controller.admin.getpoints.vo.PsReturnVo; import pc.exam.pp.module.judgement.controller.admin.getpoints.vo.PsVo; import java.util.List; @@ -15,6 +16,10 @@ public interface PsMapper extends BaseMapperX { void deleteByQuId(String quId); - List selectPsPointByType(@Param("quId") String quId - ,@Param("type") String type); + List selectPsPointByType(@Param("quId") String quId + , @Param("type") String type); + + void insertPsKeywordList(List resultList); + + } \ No newline at end of file diff --git a/exam-module-judgement/exam-module-judgement-biz/src/main/resources/mapper/ps/PsMapper.xml b/exam-module-judgement/exam-module-judgement-biz/src/main/resources/mapper/ps/PsMapper.xml index fe451e5f..5cfc0a02 100644 --- a/exam-module-judgement/exam-module-judgement-biz/src/main/resources/mapper/ps/PsMapper.xml +++ b/exam-module-judgement/exam-module-judgement-biz/src/main/resources/mapper/ps/PsMapper.xml @@ -7,21 +7,46 @@ - - + + + + - - + + INSERT INTO exam_ps_keyword ( + id, + qu_id, + parent_id, + key_name, + key_value, + rate, + type, + sort + ) VALUES + + ( + #{item.id}, + #{item.quId}, + #{item.parentId}, + #{item.key}, + #{item.value}, + #{item.rate}, + #{item.type}, + #{item.sort} + ) + + delete from exam_ps_keyword where qu_id =#{quId}