医院信息化与智能化系统(15)
医院信息化与智能化系统(15)
这里只描述对应过程,和可能遇到的问题及解决办法以及对应的参考链接,并不会直接每一步详细配置
如果你想通过文字描述或代码画流程图,可以试试PlantUML
,告诉GPT你的文件结构,让他给你对应的代码
预约挂号微服务模块搭建
前端知识点补充,此章节不会详细讲具体前端的每个知识点
1、医院管理概述
目前我们把医院、科室和排班都上传到了平台,那么管理平台
就应该把他们管理起来,在我们的管理平台能够直观的查看这些信息。
需求分析及Nacos启动
需求分析:
要设置一个element-ui
中的table标签存放logo
、医院名称
、等级...
在MongoDB数据库中并没有等级
字段,只有hostype
,那么需要根据数据字典
获取对应的等级:这里涉及到通过service-hosp
远程调用service-cmn
模块
注册中心与服务调用
下载nacos-server-1.1.4
版本并解压,在其bin目录下双击打开startup.cmd
| start.sh
,前后分别对应Windows
| Linux
。
访问路径默认为 : http://localhost:8848/nacos
,用户密码都是nacos
Nacos注册服务
- 在service模块引入
spring-cloud-starter-alibaba-nacos-discovery
依赖 - 在
application.properties
配置文件设置nacos地址`spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848 - 在启动类
ServiceHospApplication
上添加注解@EnableDiscoveryClient
- 注意:service-hosp和service-cmn都要按步骤2、3设置
我这里出现了一个问题:service-cmn
突然爆了一个关于没有找到mongodb连接
的问题,我心想我也没使用它,所以在该模块的依赖中去找,找到了对service-hosp
的依赖,再具体分析依赖关系
(右键项目可以查看),发现确实不小心填加了关于mongodb的依赖项,所以做法很简单,就是直接把对service-hosp
的依赖删除即可。[我这删除完没报错,如果你们有,最多应该也就是import出了问题,应该直接删就行,我没看见需要import关于hosp模块的地方]
2、 医院列表接口
在service-hosp中创建HospitalController
用于存储实现方法,用@RestController
、@RequestMapping("xx")
、@CrossOrigin
注解修饰。
医院列表实际是以get
方式获取page和limit,随后进行条件查询。项目提供HospitalQueryVo
类用于存放查询条件。创建selectHospPage
方法实现条件查询,流程就是基于Mongodb
数据库条件查询逻辑。
由于医院等级、省市区地址都是取的数据字典value
值,因此我们在列表显示医院等级与医院地址时要根据数据字典value值获取数据字典名称。
由于yygh_cmn数据库表的value值并不唯一,所以需要创建方法来根据dictcode和value获取对应的name
,
在service-cmn
的DictController
创建getName方法;
@GetMapping("getName/{dictCode}/{value}")public String getName(@PathVariable String dictCode,@PathVariable String value){String dictName = dictService.getDictName(dictCode,value);return dictName;}@GetMapping("getName/{value}")public String getName(@PathVariable String value){String dictName = dictService.getDictName("",value);return dictName;}
在DictServiceImpl中实现具体getDictName
方法:
- 提供value,直接依靠value值来找
- 提供value和dictcode,根据dictcode找到对应其父类对应的id,再根据
parent_id =id
以及value做更细致的查找
public String getDictName(String dictCode, String value) {//如果dictCode为空,则直接根据value查询if (StringUtils.isEmpty(dictCode)){QueryWrapper<Dict> wrapper = new QueryWrapper<>();wrapper.eq("value",value);Dict dict = baseMapper.selectOne(wrapper);return dict.getName();}else {Dict codeDict =this.getDictByCode(dictCode);Long parent_id = codeDict.getId();//根据parent_id和value进行查询Dict finalDick = baseMapper.selectOne(new QueryWrapper<Dict>().eq("parent_id", parent_id).eq("value", value));return finalDick.getName();}
封装Feign服务调用
搭建service_client
模块,来进行服务调用的封装,注意:这里是创建子模块,也就是yygh_parent->新建模块->Maven工程
,而不是用Spring Initializr创建一个springboot工程。
设置打包方式为<packaging>pom</packaging>
导入相关依赖:common模块、feign相关依赖、common-util模块等。
在该模块创建子模块service_cmn_client
创建接口DictFeignClient
,该接口用@FeignClient("service-cmn")
、@Repository
修饰,其中service-cmn是nacos
中需要被调用服务的名称,该名称的声明在application.properties
中。
该接口中方法的声明步骤,直接去找你要调用的模块方法,除方法体外
内容全部复制即可,但需要注意的是@xxxMapping
注解的路径需要补充完整;此外还需要指定URL路径中的变量名
@GetMapping("/admin/cmn/dict/getName/{value}")public String getName(@PathVariable("value") String value);
接着就是在调用端service-hosp
模块引入service_cmn_client
依赖,在HospitalServiceImpl
中实例化实现DictFeignClient
接口的对象;并在启动类添加注解@EnableFeignClients(basePackages = "com.xxx")
由于Hospital中没有等级信息字段,查看其父类BaseMongoEntity
中声明了Map<String,Object> param
,利用其进行对等级的封装。
根据lambda表达式,对每一个取出的Hospital
进行等级与地区设置;分别用hostypeString
和fullAddress
对应。
//根据条件与页数返回pages后//获取查询list集合,遍历进行医院等级封装...pages.getContent().stream().forEach(item->{this.setHospitalHosType(item);});private Hospital setHospitalHosType(Hospital hospital) {//这里的hospital的Hostype是value类型:1,2...//"Hostype"是对应字典的dict_CodeString hostypeString = dictFeignClient.getName("Hostype", hospital.getHostype());//查询省 市 地区String provinceString = dictFeignClient.getName(hospital.getProvinceCode());String cityString = dictFeignClient.getName( hospital.getCityCode());String districtString = dictFeignClient.getName(hospital.getDistrictCode());hospital.getParam().put("hostypeString",hostypeString);hospital.getParam().put("fullAddress",provinceString+cityString+districtString);return hospital;}
测试时nacos、redis、mongodb、nginx全部打开,再启动模块,再到swagger里测试。
查询所有子节点 接口
首次进入前端,显示所有省份的医院信息;再添加查询功能,根据省
和市
进行条件查询
所以在DictController
创建方法,根据dictCode查询子数据列表并在DictServiceImpl
实现findByDictCode
代码逻辑。
findByDictCode借助getDictByCode
函数,输入dictCode可以得到对应的Dict对象,再通过findChildData
,输入Dict对象的id,得到其子节点数组,最后做返回。
测试时,输入对应dict_code,会以JSON响应对应的子节点(省:北京市...
)
医院列表 前端
第一步是添加路由
,在router/index.js
的医院设置管理下面添加医院列表
部分,并设置跳转路径为:@/views/hosp/list
(对应创建)
第二步在api/hosp.js
设置与后端接口的对应;
getHospList
:对应后端listHospital
方法,根据当前页,每页记录数,查询条件查询。findByDictCode
:对应后端findByDictCode
方法,根据DictCode查所有省
findChildId
:对应后端findChildData
方法,根据数据id查所有市
第三部分编写list.vue
在<template>
标签内,仍是借助element-ui
先是提供两个选择表单
,选择要查询的省和市,一个普通表单
对应要查询的医院名称,一个查询按钮;
随后提供一个table
,里面对应医院列表的各个信息
最后放置分组组件
对应分页功能。
方法部分
- 导入hosp.js,为后续调用方法做准备
- 搭建基础结构:data、created、methods
- 定义变量及默认值:list
医院列表数据
、 total数据库中的总记录数
、page默认页码
…
进入页面就需要进行查询,所以创建fetchData
方法,内部调用getHospList
,并在.then()
中处理返回值,将list和total分别赋值。
同时,需要在查询列表中,显示所有的省份,因此创建findAllProvince
方法,内部调用findByDictCode
。
根据省需要提供市的列表,做法是创建provinceChanged
方法,首先初始化市列表
,随后根据searchObj.provinceCode
获得选项框省的ID,再调用findChildId
,最后把返回值赋值给`cityList
页面插件有一个选择页数
进行展示,绑定方法changeSize
,每一次选择页数进行调用,内部直接赋值this.limit
,再执行this.fetchData(1)
实现刷新即可。
相关文章:

医院信息化与智能化系统(15)
医院信息化与智能化系统(15) 这里只描述对应过程,和可能遇到的问题及解决办法以及对应的参考链接,并不会直接每一步详细配置 如果你想通过文字描述或代码画流程图,可以试试PlantUML,告诉GPT你的文件结构,让他给你对应…...

小红书笔记详情API接口系列(概述到示例案例)
小红书笔记详情数据API接口是小红书开放平台提供的一项服务,允许开发者获取小红书上的笔记详情数据。以下是对该接口及其使用方法的详细介绍: 一、接口概述 小红书笔记详情数据API接口提供了一系列的接口,允许开发者获取笔记的标题、正文、标…...

跨境电商平台系统开发
随着全球化的不断深入,跨境电商作为新兴的商业模式,越来越受到企业和消费者的关注。跨境电商平台的系统开发不仅涉及技术层面的挑战,更涉及到法律、物流、支付等多方面的因素。商淘云将分享跨境电商平台系统开发的主要环节,包括需…...
开源模型应用落地-qwen模型小试-Qwen2.5-7B-Instruct-玩转ollama-Modelfile文件(二)
一、前言 在AI大模型百花齐放的时代,很多人都对新兴技术充满了热情,渴望尝试。然而,实际上要入门AI技术的门槛非常高。除了需要高端设备外,还需要面对复杂的部署和安装过程,这让许多人望而却步。在这样的背景下,Ollama的出现为广大开发者和爱好者提供了一条便捷的道路,极…...

链表详解(一)
目录 顺序表的问题及思考链表链表的概念及结构链表的分类单链表的实现链表功能实现遍历链表void SLTprint(SLNode* phead)代码 创造新节点SLNode* CreateNode(SLNDataType x)代码 顺序表的问题及思考 中间/头部的插入删除,时间复杂度为O(N),效率低,但是尾部插入效率…...
npm入门教程6:npm脚本
一、npm脚本的基本用法 定义脚本 在package.json文件的scripts字段中,你可以定义多个脚本命令。每个脚本都是一个键值对,其中键是脚本的名称,值是要执行的命令。例如: "scripts": {"start": "node index…...

用Python脚本执行安卓打包任务
这个样例是基于windows系统写的python打包安卓的脚本: 一、配置AndroidStudio下的打包任务 1.在Android项目根目录下的build.gradle文件配置生成Release包的任务: task cleanAll(type: Delete) {delete rootProject.buildDirrootProject.subprojects.e…...
制作安装k8s需要的离线yum源
制作安装k8s需要的离线yum源 添加docker在线源制作安装k8s命令行工具需要的离线yum源传到内网k8s节点,通过如下命令导出镜像: 要全内网环境安装docker、k8s和相关依赖,需要在内部提供安装k8s、docker需要的yum源 添加docker在线源 yum-confi…...

Node学习记录-events
来自:https://juejin.cn/post/7285915718666354723 和 https://nodejs.cn/api/events.html Nodejs核心API都是采用异步事件驱动架构,在该架构中,某些类型的对象(触发器)触发命名事件,导致调用Function对象(…...

Java Collection/Executor DelayedWorkQueue 总结
前言 相关系列 《Java & Collection & 目录》《Java & Executor & 目录》《Java & Collection/Executor & DelayedWorkQueue & 源码》《Java & Collection/Executor & DelayedWorkQueue & 总结》《Java & Collection/Executor &a…...

《TCP/IP网络编程》学习笔记 | Chapter 1:理解网络编程和套接字
《TCP/IP网络编程》学习笔记 | Chapter 1:理解网络编程和套接字 《TCP/IP网络编程》学习笔记 | Chapter 1:理解网络编程和套接字基本概念服务端客户端 基于 Linux 平台的 "Hello world!" 服务端和客户端基于 Linux 的文件操作打开文件关闭文件…...

服务端监控工具:Nmon使用方法
在性能测试过程中,对服务端的各项资源使用情况进行监控是很重要的一环。这篇博客,介绍下服务端监控工具:nmon的使用方法。 一、认识nmon 1、简介 nmon是一种在AIX与各种Linux操作系统上广泛使用的监控与分析工具,它能在系统运行…...

Java中的线程安全问题(如果想知道Java中有关线程安全问题的基本知识,那么只看这一篇就足够了!)
前言:多线程编程已经广泛开始使用,其可以充分利用系统资源来提升效率,但是线程安全问题也随之出现,它直接影响了程序的正确性和稳定性,需要对其进行深入的理解与解决。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解…...
基础设施即代码(IaC)在Python自动化运维中的应用探讨
基础设施即代码(IaC)在Python自动化运维中的应用探讨 目录 🌐 IaC概念与工具介绍🐍 使用Python实现基础设施自动化📦 版本控制与基础设施管理的最佳实践🔄 部署环境的一致性与可复现性 1. 🌐 …...
浅谈路由器
路由器是一种网络设备,它在网络中起着至关重要的作用,主要功能包括: 1、数据转发:路由器的主要任务是将数据包从一个网络转发到另一个网络。它根据数据包的目的地址来决定将数据包发送到哪个网络。 2、路径选择:路由器…...

openGauss数据库-头歌实验1-1 初识openGauss
一、历史与特性 任务描述 本关任务:了解openGauss的发展历史以及相关特性。 相关知识 为了完成本关任务,你需要掌握:1.openGauss的发展历程,2.openGauss的功能特性。 发展历程 2019年9月19日在华为全联接大会上,…...

QT找不到ffmpeg链接库解决方法
error: undefined reference to avformat_network_init() 一个神奇的报错,查了很久,检查步骤: 1、检查了 pro工程文件 2、链接库的真实性和正确性 在main.cpp中调用没有报错,在其它cpp文件中调用就报错。 破案了,…...

消息队列-Rabbitmq(消息发送,消息接收)
将来我们开发业务功能的时候,肯定不会在控制台收发消息,而是应该基于编程的方式。由于RabbitMQ采用了AMQP协议,因此它具备跨语言的特性。任何语言只要遵循AMQP协议收发消息,都可以与RabbitMQ交互。并且RabbitMQ官方也提供了各种不…...

2、顶点着色器之视图矩阵
1、作用:将物体从世界坐标系转换到相机坐标系,相当于从世界坐标系转换到相机的局部(本地)坐标系。 2、基于LookAt函数的视图矩阵: 相机位置eye:(ex,ey,ez),世界坐标系下的位置 目标位置center:(cx,cy,cz…...
crontab实现2026年开始每个月1号执行一次
要在 crontab 中设置一个任务,使其从 2026 年开始每个月的 1 号执行一次,可以使用以下格式: 0 0 1 * * <你的命令>这条规则的解释如下: 0 0:表示在每个月的 1 号的零点(00:00)执行。1&a…...

IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)
目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关࿰…...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

听写流程自动化实践,轻量级教育辅助
随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...

初探Service服务发现机制
1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...

人机融合智能 | “人智交互”跨学科新领域
本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...

华为云Flexus+DeepSeek征文 | 基于Dify构建具备联网搜索能力的知识库问答助手
华为云FlexusDeepSeek征文 | 基于Dify构建具备联网搜索能力的知识库问答助手 一、构建知识库问答助手引言二、构建知识库问答助手环境2.1 基于FlexusX实例的Dify平台2.2 基于MaaS的模型API商用服务 三、构建知识库问答助手实战3.1 配置Dify环境3.2 创建知识库问答助手3.3 使用知…...
JVM——对象模型:JVM对象的内部机制和存在方式是怎样的?
引入 在Java的编程宇宙中,“Everything is object”是最核心的哲学纲领。当我们写下new Book()这样简单的代码时,JVM正在幕后构建一个复杂而精妙的“数据实体”——对象。这个看似普通的对象,实则是JVM内存管理、类型系统和多态机制的基石。…...