手术训练系统项目

news2024/11/24 2:45:43

★ 手术训练系统项目
项目描述:手术训练系统,它提供了多项功能,包括账户登录与创建、数据库与账户管理、课程管理、小组管理、成绩统计、证书发布、训练和系统设置。
职责描述:
1、训练功能开发(任务概述、任务指导、评分规则、评分成绩)。
2、课程管理功能(CRUD课程、为课程分配任务、设置评分规则)。
3、数据库设计。

项目概述

我参与开发的项目是一个手术训练系统,它提供了多项功能,包括账户登录与创建、数据库与账户管理、课程管理、小组管理、成绩统计、证书发布、训练和系统设置。我的主要负责领域是训练功能和课程管理功能。

我的贡献

训练功能:我负责开发系统中的训练模块。其中的主要难点之一是展示当前课程的级别-训练树,这需要将课程结构以树形式展示,并与训练任务进行关联。我成功地实现了这一功能,使用户能够轻松地浏览和选择适合他们的训练任务。

课程管理功能:我还负责课程管理模块的开发。这包括创建新的课程和管理已有课程。用户可以定义课程的基本属性,如名称、尝试次数和评论。这个模块的开发也与训练任务的创建和关联密切相关,确保了系统的一致性和流畅性。

数据库设计:
在项目中,我们使用了一种具有表层级的数据库结构,其中主要的表是course、block和task,以及一个名为exercise的训练池表。为了管理多种评分标准,我们还创建了task_metrics_configuration表,负责12种维度的评分标准。这种设计将任务、评分标准名称和评分标准属性合理地组织在一起。

其中的难点

1、面对到任务id-评分标准名称-评分标准内容三个维度的情况,如下图所示,为了减少多对多关系表的复杂性,我们采用了一种巧妙的设计,将任务ID、左手器械的最小值、最大值、状态和权重等信息存储在同一表中,以逻辑的整合换取了数据库表结构的简洁性,提高了系统的性能和可维护性。
在这里插入图片描述
2、导出到本地需要配置虚拟路径方法

public class SaTokenConfigure implements WebMvcConfigurer {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        // 配置虚拟地址 "/video/**" 映射到实际视频文件路径
        registry.addResourceHandler("/virtual/**")
                .addResourceLocations("file:///" + RESOURCE_PATH)
                .resourceChain(true)
                .addResolver(new DebugResourceResolver());
    }
}

核心难点:
3、如下图所示,左边可选训练任务是exercise(及其配置表)、中间已分配训练任务是block与task表(及其配置表),那么这棵树能够新增同级、新增子级,还能随意地复制任意结点、删除结点,由于每个训练用户还能自定义配置任务时长限制、可尝试次数、任务评分规则配置等信息,所以能预见到推论1:如果需要新增训练时,需要从exercise表中复制,而复制训练时,需要从task及其配置表中复制。
推论2:前端不会每次新增操作了给你传过来、复制操作给你传过来数据、删除操作给你传过来数据,因为前端对用户操作是无感知的,这也就意味着你在执行编辑当前课程的逻辑时,只能拿到你之前的这棵树的逻辑和前端传过来的之后修改后的这棵树的逻辑。
我与前端有如下约定:
1、exerciseId区分block与task
2、id区分是新增结点还是复制的结点

实现步骤思想:
1、清理数据结构。
2、为没有ID的子节点设置唯一的ID。
3、处理可能存在的重复ID的情况,以确保每个节点都有唯一的ID。
4、为树的每个节点设置parentId。
5、解析前端传递的参数,生成树节点列表。
6、删除与特定课程ID相关的数据库中的信息。
7、根据节点类型将节点分为任务(Task)和块(Block)。
8、将任务(Task)节点插入到任务表中。
8、将块(Block)节点插入到块表中,并关联它们到特定课程。
10、返回更新后的课程树数据。
在这里插入图片描述
在这里插入图片描述


    @PostMapping("updateDirectoryTree2")
    public CommonResult updateDirectoryTree2(@RequestBody UpdateDirectoryTreeDto updateDirectoryTreeDto) {
        //清理
        treeNodeList = new ArrayList<>();
        idCountMap = new HashMap<>();
        //为没有id的子节点设置唯一的id
        setUniqueIdsIfNotNull(updateDirectoryTreeDto.getList());
        //TODO 新增的结点是没有id的,updateDirectoryTreeDto.getList()有id重复的时候说明有复制的id,需要进行重新赋予id的操作,同时需要将配置表的信息也连带复制过来
        handleDuplicateIds(updateDirectoryTreeDto.getList());
        //为树的每个节点设置parentId
        setParentIds(updateDirectoryTreeDto.getList(), null);
        //前端传的参数解析
        setTreeNode(updateDirectoryTreeDto.getList());
        System.out.println("treeNodeList:" + treeNodeList);
        //删除与该课程id相关的block和task表中信息
        taskService.deleteTaskByCourseId(updateDirectoryTreeDto.getCourseId());
        blockService.deleteBlockByCourseId(updateDirectoryTreeDto.getCourseId());

        List<TreeNode> taskList = new ArrayList<>();
        List<TreeNode> blockList = new ArrayList<>();

        for (TreeNode node : treeNodeList) {
            if (node.getExerciseId() != null && !node.getExerciseId().isEmpty()) {
                taskList.add(node);
            } else {
                blockList.add(node);
            }
        }
        // 打印结果
        taskService.insertTask(taskList);
        blockService.insertBlock(blockList, updateDirectoryTreeDto.getCourseId());

        return CommonResult.success(blockService.getDataTreeByCourseId(updateDirectoryTreeDto.getCourseId()));
    }

遇到的注意点

1、考虑权限@SaCheckRole(value = {RoleConstants.ROLE_STUDENT, RoleConstants.ROLE_GUEST}, mode = SaMode.OR)
2、@MapperScan不要加到@SpringBootApplication,加到MybatisPlusConfig ,否则扫描包时会有异常情况。

@Configuration
@MapperScan("com.wego.training.mapper")
public class MybatisPlusConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        // 分页插件
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        return interceptor;
    }
}

3、碰到枚举的情况,至少要设置一个constants类,并加上必要的注释,否则就会与同事逻辑不一致,也便于以后修改枚举值

package com.wego.training.constant;

/**
 * @author lst
 * @date 2023年10月18日 10:27
 */
public class CourseConstants {
    /**
     * 课程私有的
     *
     * @author lst
     * @date 2023/10/18 10:28
     * @param null
     * @return null
     */
    public static final int COURSE_PRIVATE = 0;
    /**
     * 课程公开的
     *
     * @author lst
     * @date 2023/10/18 10:28
     * @param null
     * @return null
     */
    public static final int COURSE_PUBLIC = 1;
    /**
     * 课程同组的
     *
     * @author lst
     * @date 2023/10/18 10:28
     * @param null
     * @return null
     */
    public static final int COURSE_GROUP = 2;


}

总结:
在这个项目中,我承担了训练功能和课程管理功能的开发任务,并成功应对了展示课程结构、任务评分和数据库设计等关键挑战。我的工作使项目能够提供用户友好的手术训练体验,并确保了系统的高性能和可维护性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1180064.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

惊艳!拓世法宝AI智能数字人一体机解锁数字文博的全民体验

在数字化的潮流中&#xff0c;我们见证了历史与现代技术的完美融合。在今年的“国际古迹遗址日”&#xff0c;世界首个超时空参与式博物馆“数字藏经洞”正式与公众见面&#xff0c;在这里开启了一场前所未有的文化探索之旅。 时间和空间被艺术化的数字技术巧妙地折叠&#xf…

建链时,please install openssl! use “openssl version“ command to check.

please install openssl! use “openssl version” command to check. 但是我已经安装了 编辑build_chain.sh文件 也可以用vi或者gedit命令 将 [ ! -z “ ( o p e n s s l v e r s i o n ∣ g r e p 1.0.2 ) " ] ∣ ∣ [ ! − z " (openssl version | grep 1.0.2)…

YOLO目标检测——红绿灯检测数据集【含对应voc、coco和yolo三种格式标签】

实际项目应用&#xff1a;红绿灯检测数据集在自动驾驶、交通安全监控、智能交通系统、交通流量监测和驾驶员辅助系统等领域都有广泛应用的潜力数据集说明&#xff1a;红绿灯检测数据集&#xff0c;真实场景的高质量图片数据&#xff0c;数据场景丰富&#xff0c;含有国内红绿灯…

ARM64 linux并发与同步之原子操作

卷2&#xff1a;调试与案例分析 第一章 并发与同步 画了两张简图&#xff0c;方便理解&#xff0c;如下&#xff1a; 针对并发源的问题&#xff0c;我接触的项目中都是SMP系统&#xff0c;目前大部分也都是SMP系统&#xff1b; 对于SMP系统&#xff0c;情况会更复杂。 □ 同…

第二证券:特斯拉将推出低价电动汽车?最新消息

当地时间周一&#xff0c;投资者接连上星期五的达观心境&#xff0c;美国三大股指高开高走。美联储主席鲍威尔本周到会活动时将有两次揭穿说话&#xff0c;投资者期望从中得到更多关于本轮加息周期完毕的信号&#xff0c;但也对联邦基金利率可能在更长时期内维持在高水平保持警…

我的创作纪念日——2048天

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

Java并发工具-1-原子操作(Atomic)

一 原子操作之 AtomicInteger 1 概念解释 什么是原子操作呢&#xff1f;所谓原子操作&#xff0c;就是一个独立且不可分割的操作。 AtomicInteger 工具类提供了对整数操作的原子封装。为什么要对整数操作进行原子封装呢&#xff1f; 在 java 中&#xff0c;当我们在多线程情…

龙芯loongarch64服务器编译安装matplotlib

前言 根据我之前的文章介绍&#xff0c;龙芯loongarch64服务器中的很多python依赖包安装有问题&#xff0c;发现其中安装的"matplotlib"就无法正常使用&#xff0c;或报如下错误&#xff1a;ImportError: cannot import name _c_internal_utils from partially initi…

python 中文字符转换unicode及Unicode 编码转换为中文

废话不多说 直接开干 知识点 decode 字节编码可decode为str encode 将字符串转换为bytes类型的对象 (即b为前缀, bytes类型), 即Ascll编码, 字节数组 encode(‘unicode-escape’)可将此str编码为bytes类型, 内容则是unicode形式 decode(‘unicode-escape’)可将内容为unicode形…

智能座舱“卷“疯了!8295不再是最“亮”点,还需要这些顶级配置

前段时间&#xff0c;车圈被两款“极”字辈的新车刷屏&#xff1a;极越01和极氪001 FR。 前者可视作当前自主品牌车企高度智能化水平的“范式”&#xff0c;后者无疑是中国汽车品牌颠覆极限性能的代表作。 同时&#xff0c;这两款车将座舱配置作为卖点进行了详细推送&#xf…

iview table 表格合并单元格

一、如图所示 二、实现方式 表格用提供的span-method属性 <template><Table ref"table" border :span-method"handleSpan" :row-key"true" :columns"tableColumns" :data"tableData"no-data-text"暂无数据&…

NOIP2023模拟12联测33 B. 游戏

NOIP2023模拟12联测33 B. 游戏 文章目录 NOIP2023模拟12联测33 B. 游戏题目大意思路code 题目大意 期望题 思路 二分答案 m i d mid mid &#xff0c;我们只关注学生是否能够使得被抓的人数 ≤ m i d \le mid ≤mid 那我们就只关心 a > m i d a > mid a>mid 的房…

HTML的初步学习

HTML HTML 描述网页的骨架, 标签化的语言. HTML 的执行是浏览器的工作,浏览器会解析 html 的内容,根据里面的代码,往页面上放东西,浏览器的工作归根结底,还是以汇编的形式在CPU上执行. 浏览器对于html语法格式的检查没有很严格,即使你写的代码有一些不合规范之处,浏览器也会尽可…

ZZ308 物联网应用与服务赛题第E套

2023年全国职业院校技能大赛 中职组 物联网应用与服务 任 务 书 &#xff08;E卷&#xff09; 赛位号&#xff1a;______________ 竞赛须知 一、注意事项 1.检查硬件设备、电脑设备是否正常。检查竞赛所需的各项设备、软件和竞赛材料等&#xff1b; 2.竞赛任务中所使用的…

系列十九、使用JDK生成HTTPS证书

一、HTTPS概述 历史上&#xff0c;HTTPS 连接经常用于网络上的交易支付和企业信息系统中敏感信息的传输。在 2000 年代末至 2010 年代初&#xff0c;HTTPS 开始广泛使用&#xff0c;以确保各类型的网页真实&#xff0c;保护账户和保护用户通信&#xff0c;身份和网络浏览的私密…

家政预约服务小程序源码系统 线上+线下两种模式 带完整的搭建教程

人们生活水平的不断提高&#xff0c;使得家政服务行业逐渐成为一个重要的行业。然而&#xff0c;传统的家政服务模式存在一些问题&#xff0c;如信息不对称、服务质量不稳定等。为了解决这些问题&#xff0c;开发一款家政预约服务小程序源码系统变得尤为重要。下面源码小编来给…

Unity 声音的控制

闲谈&#xff1a; 游戏开发比普通软件开发难也是有原因的&#xff0c;第一 游戏功能需求变化多样内部逻辑交错纵横&#xff0c; 而软件相对固定&#xff0c;无非也就是点击跳转、数据存储 第二&#xff0c;游戏需要很多3D数学知识、物理知识&#xff0c;最起码得有高中物理的基…

Python开发运维:Python3.7安装Django3.2

目录 一、理论 1.pip 2.Django 3.Pycharm国内镜像源 二、实验 1.Python3.7安装Django3.2 三、问题 1.安装django3.2报错 2.pip更新报错 一、理论 1.pip &#xff08;1&#xff09;概念 1&#xff09;pip pip 是 Python 的包安装程序。其实&#xff0c;pip 就是 Pyt…

应用程序无法启动,因为应用程序的并行配置不正确。有关详细信息,请参阅应用程序事件日志,或使用命令行 sxstrace.exe 工具。

谷歌浏览器出现以下问题 解决 点击以下 new_chrome.exe 就可以了&#xff08; new_chrome.exe 点击之后就消失了&#xff09;

北方寒流来袭,供暖已至,你家的暖气热了吗?

如果说诗句“忽如一夜春风来&#xff0c;千树万树梨花开”来形容春天的到来&#xff0c;那么“夜凉如水&#xff0c;寒风乍起添衣裳”就可以形容现在北方的天气了&#xff0c;11月初的早晨&#xff0c;伴随着萧瑟秋风卷动着枯黄落叶的声音&#xff0c;感觉就像是在落魄时买了一…