JAVA分布式医疗云平台系统开发实战第一节 open-his系统技术架构与环境准备

article/2025/8/23 13:35:08

项目简介                                                                        

Open-His 是以完整的基层医疗机构-信息化解决方案为出发点,打 造连接诊所、医生、 患者、一站式互联网医疗服务系统,深度挖掘基层医疗机构需求, 解决其真正的痛点;全面 提升医疗管理质量和可执行落地的综合性解决方案。

 

项目特色                                                                                      

1) 前后端分离,基于shiro API 授权机制

2) 基于 SpringCloud Alibaba的分布式架构,扩展更容易 ;

3) MySQLRedis多种数据存储方式,只为更快

4) 使用Mycat进行主从复制、读写分离技术,解决数据库高并发、 高可靠问题

5) RocketMQ 发布订阅消息队列,实现模块解耦和异步处理;

6) 支付模块,支持支付宝沙箱及现金支付环境;

7) 精准细粒的业务功能讲解;

8) Docker 的项目发布和动态扩容;

9) Nginx 的负载均衡。

技术特点

项目开发采用SSM架构,数据持久层框架使用mybatis,数据库使
mysql5.7,以及其它中间件,具体名称及作用如下表所示:

组件名称

作用

版本

JDK

编译运行平台

1.8

spring framework

轻量级的控制反转(IOC)和面向切面(AOP)的容器框架

5.2.5

spring mvc framework

基于MVC的轻量级web开发框架

5.2.5

spring boot

用注解方式实现对spring框架的自动配置

2.2.6

shiro

Java安全框架,用于身份验证、授权、密码和会话管理

1.5.3

Mybatis-plus

Mybatis增强工具包,简化CRUD操作

3.3.1

dubbo

SCA-轻量级、高性能分布式RPC框架

2.7.5

nacos

SCA-微服务注册配置与管理组件

1.2.0

sentinel

SCA-分布式高可用流量防护组件

1.8.2

redis

内存数据库,用于缓存数据

5.0.5

rocketmq

消息中间件,用于发送接收消息

4.5.1

swagger

接口测试工具,用于生成、描述、调用和可视化 RESTful 风格的

模块设计及功能演示

系统管理模块

系统基础数据模块,主要包含科室管理、用户管理、角色管理、菜 单管理、字典管理、通知公告、登陆日志管理、操作日志管理、检 查费用设置、挂号费用设置,主要包含 RBAC 权限设置功能,字典 模块,基础数据维护模块,日志管理模块。

进销存模块

 

 一个小型的药品 ERP 系统,包含生产厂家维护、药品信息维护、供 应商维护、采购入库、审核、库存等查询。

就诊模块(核心-难点)

看病就诊、门诊挂号、挂号列表、新开就诊、我的排班、医生排 班、患者库,里面的核心业务为挂号,就诊,排班。

收费管理模块

 

主要处理挂号收费、检查收费、药品处方收费等业务功能的处理。

检查管理模块

 

主要处理检查业务功能,医生可以接收检查及上传检查结果。

数据统计模块

 

整个系统数据统计分支,包含 收支统计、药品销售统计、检查项目 统计、工作量统计等功能。

项目架构

 

部署架构

 

项目环境准备

开发时最好准备两台云服务器,如果没有,也可以在本地安装一台 虚拟机,但是老师推荐使用云服务器,这样每次开发就不用启动那 么多东西了。

配置ucloud云服务器

https://www.ucloud.cn

设置外网防火墙

 

 

可根据实际情况自行添加安全规则,为防止网络攻击建议设置源地 址,如嫌麻烦可全部放行【不推荐】。

docker安装 

yum -y install docker 安装 
systemctl start docker 启动 
systemctl restart docker 重启 
systemctl stop docker 停止 
systemctl enable docker 开机自启 

前方有坑---------如果你在 docker 运行期间操作了防火墙[启动或关 ]必须重启

docker systemctl restart docker

编辑配置文件

vi /etc/docker/daemon.json 

拷贝下面的内容/etc/docker/daemon.json

{ "registry-mirrors":  
["https://32xw0apq.mirror.aliyuncs.com"] } systemctl daemon-reload 
systemctl restart docker 

JDK安装                                                                                       

安装JDK11
如果是tar.gz文件,则执行解压缩命令

tar -zxvf jdk-11.0.11_linux-x64_bin.tar.gz

解压缩后,默认安装在当前目录下

/etc/profile文件中设置java环境变量  

输入命令检查安装是否完成 

java -version

出现上面的提示,表示jdk安装正常 

redis安装

使用 docker 运行 redis

docker run -d --name redis -p 6390:6379 redis --requirepass  "123456" 

安装完成后,查看redis进程,如上图所示则安装正常
nacos控制台安装                                                                          

下载nacos压缩包,使用下面的命令解压缩

tar -zxvf nacos-server-1.2.0.tar.gz

进入nacos安装路径下的bin目录执行启动命令

./startup.sh -m standalone 

 使用ps命令查看进程情况

 

输入http://你的ip:8848,启动nacos控制台

 

sentinel控制台安装                                                                     

下载sentinel-dashboard-1.8.2.jar包,在jar包所在目录打开命令行 窗口,执行以下命令启动控制台

java -jar sentinel-dashboard-1.8.2.jar 

 

输入默认用户名、密码sentinel,进入主界面

rocketmq环境搭建                                                                        

环境要求
JDK 11.0.5
4G+ free

可使用wget命令下载、解压缩并安装

 

wget  https://archive.apache.org/dist/rocketmq/4.5.1/ rocketmq-all-4.5.1-bin-release.zip

 修改脚本

bin/runserver.sh

bin/runbroker.sh

bin/tools.sh

nameserver:

#!/bin/sh 6  # Licensed to the Apache Software Foundation  (ASF) under one or more 
# contributor license agreements. See the  
NOTICE file distributed with 
# this work for additional information  
regarding copyright ownership. 
# The ASF licenses this file to You under the  Apache License, Version 2.0 
# (the "License"); you may not use this file  except in compliance with 
# the License. You may obtain a copy of the  License at 
# 
# http://www.apache.org/licenses/LICENSE-2.0 
# 
# Unless required by applicable law or agreed  
to in writing, software 
# distributed under the License is distributed  on an "AS IS" BASIS, 
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,  either express or implied. 
# See the License for the specific language  governing permissions and 
# limitations under the License.   #============================================== 
============================================= 
# Java Environment Setting #============================================== 
============================================= 
error_exit () 
{ 
echo "ERROR: $1 !!" 
exit 1 
} [ ! -e "$JAVA_HOME/bin/java" ] &&  
JAVA_HOME=$HOME/jdk/java 
[ ! -e "$JAVA_HOME/bin/java" ] &&  
JAVA_HOME=/usr/java 
[ ! -e "$JAVA_HOME/bin/java" ] && error_exit  "Please set the JAVA_HOME variable in your  environment, We need java(x64)!" export JAVA_HOME 
export JAVA="$JAVA_HOME/bin/java" 
export BASE_DIR=$(dirname $0)/.. 
export CLASSPATH=${BASE_DIR}/lib/rocketmq- namesrv- 
4.5.0.jar:${BASE_DIR}/lib/*:${BASE_DIR}/conf:${ CLASSPATH} 
#export  CLASSPATH=.:${BASE_DIR}/conf:${CLASSPATH} 
#echo "BASE_DIR:$BASE_DIR" 
#echo "CLASSPATH:$CLASSPATH" 7   #============================================== 
============================================= 
# JVM Configuration #============================================== 
============================================= 
JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g - Xmn512m -XX:MetaspaceSize=128m - XX:MaxMetaspaceSize=320m" 
#JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g - Xmn2g -XX:MetaspaceSize=128m - XX:MaxMetaspaceSize=320m" 
JAVA_OPT="${JAVA_OPT} - XX:CMSInitiatingOccupancyFraction=70 - XX:+CMSParallelRemarkEnabled - XX:SoftRefLRUPolicyMSPerMB=0 - XX:+CMSClassUnloadingEnabled - XX:SurvivorRatio=8" 
JAVA_OPT="${JAVA_OPT} -verbose:gc - Xlog:gc:/dev/shm/rmq_srv_gc.log" 
JAVA_OPT="${JAVA_OPT} -XX:- OmitStackTraceInFastThrow" 
JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages" #JAVA_OPT="${JAVA_OPT} -Xdebug - Xrunjdwp:transport=dt_socket,address=9555,serve r=y,suspend=n" 
JAVA_OPT="${JAVA_OPT} ${JAVA_OPT_EXT}" 
JAVA_OPT="${JAVA_OPT} -cp ${CLASSPATH}" $JAVA ${JAVA_OPT} $@ 
vim bin/runserver.sh

删除 UseCMSCompactAtFullCollection

UseParNewGC UseConcMarkSweepGC

修改内存:

JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m  
-Xmn128m - 
XX:MetaspaceSize=64mm - 
XX:MaxMetaspaceSize=160mm" 

-Xloggc修改为-Xlog:gc

broker:

#!/bin/sh 
# Licensed to the Apache Software Foundation  (ASF) under one or more 
# contributor license agreements. See the  NOTICE file distributed with 
# this work for additional information  regarding copyright ownership. 
# The ASF licenses this file to You under the  Apache License, Version 2.0 
# (the "License"); you may not use this file  except in compliance with 
# the License. You may obtain a copy of the  License at 
# 
# http://www.apache.org/licenses/LICENSE-2.0 
#   # Unless required by applicable law or agreed  
to in writing, software 
# distributed under the License is distributed  on an "AS IS" BASIS, 
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
# See the License for the specific language  governing permissions and 
# limitations under the License. #============================================== 
============================ 
# Java Environment Setting #============================================== 
============================ 
error_exit () 
{ 
echo "ERROR: $1 !!" 
exit 1 
} 
[ ! -e "$JAVA_HOME/bin/java" ] &&  
JAVA_HOME=$HOME/jdk/java 
[ ! -e "$JAVA_HOME/bin/java" ] &&  
JAVA_HOME=/usr/java 
[ ! -e "$JAVA_HOME/bin/java" ] && error_exit  "Please set the JAVA_HOME 
variable in your environment, We need  java(x64)!" 
export JAVA_HOME 
export JAVA="$JAVA_HOME/bin/java" 
export BASE_DIR=$(dirname $0)/.. 
export 10   
CLASSPATH=.${JAVA_HOME}/jre/lib/ext:${BASE_DIR} /lib/*:${BASE_DIR}/conf:${CLASSPATH} #============================================== 
============================ 
# JVM Configuration #============================================== 
============================ 
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m 
-Xmn128m" 
JAVA_OPT="${JAVA_OPT} -XX:+UseG1GC - XX:G1HeapRegionSize=16m -XX:G1ReservePercent=25 
-XX:InitiatingHeapOccupancyPercent=30 - XX:SoftRefLRUPolicyMSPerMB=0" 
JAVA_OPT="${JAVA_OPT} -verbose:gc - Xloggc:/dev/shm/mq_gc_%p.log - XX:+PrintGCDetails" 
JAVA_OPT="${JAVA_OPT} -XX:- OmitStackTraceInFastThrow" 
JAVA_OPT="${JAVA_OPT} -XX:+AlwaysPreTouch" JAVA_OPT="${JAVA_OPT} - XX:MaxDirectMemorySize=15g" 
JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages -XX:- UseBiasedLocking" 
#JAVA_OPT="${JAVA_OPT} -Xdebug - Xrunjdwp:transport=dt_socket,address=9555,serve r=y,suspend=n" 
JAVA_OPT="${JAVA_OPT} ${JAVA_OPT_EXT}" 
JAVA_OPT="${JAVA_OPT} -cp ${CLASSPATH}" 
numactl --interleave=all pwd > /dev/null 2>&1 
if [ $? -eq 0 ] 
then if [ -z "$RMQ_NUMA_NODE" ] ; then 11   numactl --interleave=all $JAVA  ${JAVA_OPT} $@ else numactl --cpunodebind=$RMQ_NUMA_NODE -- membind=$RMQ_NUMA_NODE $JAVA ${JAVA_OPT} $@ fi 
else $JAVA ${JAVA_OPT} --add- 
exports=java.base/jdk.internal.ref=ALL-UNNAMED  $@ 
fi
vim bin/runbroker.sh 

删除:

PrintGCDateStamps
PrintGCApplicationStoppedTime
PrintAdaptiveSizePolicy 
UseGCLogFileRotation 
NumberOfGCLogFiles=5 
GCLogFileSize=30m 

tools:

#!/bin/sh 
# Licensed to the Apache Software Foundation  (ASF) under one or more 
# contributor license agreements. See the  NOTICE file distributed with 
# this work for additional information  regarding copyright ownership. 12   
# The ASF licenses this file to You under the  Apache License, Version 2.0 
# (the "License"); you may not use this file  except in compliance with 
# the License. You may obtain a copy of the  License at 
# 
#   http://www.apache.org/licenses/LICENSE-2.0 
# 
# Unless required by applicable law or agreed  
to in writing, software 
# distributed under the License is distributed  on an "AS IS" BASIS, 
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
# See the License for the specific language  governing permissions and 
# limitations under the License. #============================================== 
============================ 
================= 
# Java Environment Setting #============================================== 
============================ 
================= 
error_exit () 
{ echo "ERROR: $1 !!" exit 1 
} 
[ ! -e "$JAVA_HOME/bin/java" ] &&  
JAVA_HOME=$HOME/jdk/java 13   
[ ! -e "$JAVA_HOME/bin/java" ] &&  
JAVA_HOME=/usr/java 
[ ! -e "$JAVA_HOME/bin/java" ] && error_exit  "Please set the JAVA_HOME 
variable in your environment, We need  java(x64)!" 
export JAVA_HOME 
export JAVA="$JAVA_HOME/bin/java" 
export BASE_DIR=$(dirname $0)/.. 
# export  CLASSPATH=.:${BASE_DIR}/conf:${CLASSPATH} export 
CLASSPATH=.${JAVA_HOME}/jre/lib/ext:${BASE_DIR} /lib/*:${BASE_DIR}/conf:${CL 
ASSPATH} 
#============================================== 
============================ 
================= 
# JVM Configuration #============================================== 
============================ 
================= 
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m 
-Xmn256m -XX:PermSize=128m 
-XX:MaxPermSize=128m" 
# JAVA_OPT="${JAVA_OPT} - 
Djava.ext.dirs=${BASE_DIR}/lib:${JAVA_HOME}/jre /lib/ext" 
JAVA_OPT="${JAVA_OPT} -cp ${CLASSPATH}" 
$JAVA ${JAVA_OPT} $@ 14   vim bin/tools.sh 
# 删除 JAVA_OPT="${JAVA_OPT} - 
Djava.ext.dirs=${BASE_DIR}/lib:${JAVA_HOME}/jre /lib/ext" 

进入rocketmq目录,启动nameserver

nohup sh mqnamesrv > /dev/null 2>&1 & 

然后启动broker

nohup sh mqbroker -n localhost:9876 > /dev/null  2>&1 & 

fastdfs安装

1、下载fastdfs镜像

docker pull registry.cn- 
beijing.aliyuncs.com/tianzuo/fastdfs

2、启动镜像

docker run -d --restart=always -- 
privileged=true --net=host --name=fastdfs -e  IP=192.168.139.128 -e WEB_PORT=8888 -v  ${HOME}/fastdfs:/var/local/fdfs registry.cn- beijing.aliyuncs.com/tianzuo/fastdfs 

3、查看镜像

docker ps -a

 5、测试上传

 

vim /etc/fdfs/client.conf 
#需要修改的内容如下 
base_path=/home/fastdfs 
#tracker服务器IP和端口 
tracker_server=192.168.139.128:22122  
#保存后测试,返回ID表示成功 如: group1/M00/00/00/xxx.png /usr/bin/fdfs_upload_file /etc/fdfs/client.conf  /root/fastdfs/1.png group1/M00/00/00/wKjTiF7h5EWASb5aAACGZa9JdFo611 .png 

 

mysql安装                                                                                    

下载必要的安装文件,按顺序执行安装命令,完成后初始化mysql 修改初始密码

 

先移除mariadb,再安装
解压缩mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar,解压完成后会 生成一系列rpm安装包,安装的顺序是
1mysql-community-common-5.7.28-1.el7.x86_64.rpm
2mysql-community-libs-5.7.28-1.el7.x86_64.rpm
3mysql-community-libs-compat-5.7.28-1.el7.x86_64.rpm
4mysql-community-client-5.7.28-1.el7.x86_64.rpm
5mysql-community-server-5.7.28-1.el7.x86_64.rpm
6mysql-community-devel-5.7.28-1.el7.x86_64.rpm

初始化mysql

mysqld --initialize --user=mysql 

查看初始密码

cat /var/log/mysqld.log

进入mysql,修改初始密码

>mysql -uroot -p 
>set password=password('123456'); 

mycat安装

下载Mycat-server-1.6.7.5-release-linux.tar.gz,解压后进入 mycat/bin目录,执行启动命令

./mycat start       启动 
./mycat stop        停止 
./mycat restart     重启 ./mycat status      查看状态 

访问mycat,连接成功后和操作mysql一样

mysql -uroot -proot -h127.0.0.1 -P8066

mysql主从搭建                                                                             

后面再细说

读写分离配置                                                                                

后面再细说

idea安装                                                                                      

自行下载安装,项目中使用的是2020.2版本


http://chatgpt.dhexx.cn/article/plqrVEe1.shtml

相关文章

模块供应商质量数据的采集与海尔云平台系统的互联

近些年传统的企业,越来越重视生产的数据化,这不仅仅是对本公司生产的成品,对模块供应商也要求提供的物料必须有相关生产测试数据,并提交至云平台,以供追溯。 比如海尔对于模块商质量物联驱动机制如下: 所以…

基于微服务架构的智慧工地云平台系统源码

Spring Cloud 智慧工地源码,智慧建造源码 系统概述: 智慧工地云平台系统,依托计算机技术、物联网、云计算、大数据、人工智能、VR&AR等技术相结合,对建筑工地中的管理人员、施工人员、车辆/物料、施工设备、视频监控等数据有…

【KVM虚拟化实践与编程】云平台管理系统

文章目录 【KVM虚拟化实践与编程】云平台管理系统一、KVM/QEMU虚拟化环境的搭建1. 安装QEMU2.构建KVM环境3.安装虚拟化管理工具4.配置JDK环境 二、需求分析三、系统设计四、系统实现 【KVM虚拟化实践与编程】云平台管理系统 一、KVM/QEMU虚拟化环境的搭建 1. 安装QEMU 使用命…

云平台系统如何进行资源纳管

资源管理-纳管对象 1、物理机资源管理 物理服务器可被手动发现或根据预定义策略自动发现并成为可被管理和调度的计算资源 2、存储资源管理 NAS、SAN等共享存储纳入管理,使其成为可用的存储资源 3、网络资源管理 接入交换机、防火墙、负载均衡器以及虚拟交换机&…

服务器云平台 系统,服务器云平台 系统

服务器云平台 系统 内容精选 换一换 云服务器创建后区域固定,不能将云服务器转移到另一个区域,也不能将云服务器转移到另一个帐号。您可以通过镜像迁移方式实现云服务器的跨帐号跨区域迁移。服务器迁移的常见场景与常用的迁移方式请参考常见的服务器迁移…

物联网云平台系统设计【一】

物联网云平台系统设计 ##物联网云平台系统设计 下面将谈到几个关键问题: 设备如何接入网络?设备间如何通信?物联网数据的用途?如何搭建起一个物联网系统框架呢?它的技术架构又是怎么样呢?物联网终端软件系统架构&am…

正商职业学校预付费云平台系统 的设计与应用

王兰 安科瑞电气股份有限公司,上海 嘉定 201801 摘要:介绍正商职业学校预付费云平台系统,采用智能预付费仪表进行智能预付费远程控制。系统采用现场网关就地组网的方式,组网后通过网络将数据远传云服务器后台,通过Acre…

学校预付费云平台系统 的设计与应用

概述 项目为新建学生宿舍楼的电能管理系统。将现场男生宿舍楼和女生宿舍楼的配电箱内安装安科瑞预付费计量仪表。从而实现宿舍学生用电的智能化管理,采用云平台系统方便学校对宿舍用电情况进行了解及收费。针对本项目配置安科瑞预付费电能表ADM130来分别计量每个房…

服务器云平台 系统,服务器云平台系统

服务器云平台系统 内容精选 换一换 您可以选择在云服务器上安装一个或多个应用。如需在云服务器上安装其他应用,请参考如下操作进行添加。暂时仅允许支持VR应用的云服务器安装VR应用。暂时仅允许支持3D应用的云服务器安装3D应用。暂时仅允许支持VR应用的云服务器有多…

物联网云平台系统设计

##物联网云平台系统设计 下面将谈到几个关键问题: 设备如何接入网络?设备间如何通信?物联网数据的用途?如何搭建起一个物联网系统框架呢?它的技术架构又是怎么样呢?物联网终端软件系统架构?物联网云平台…

Java中数据类型详解

文章目录 一,数据类型的作用二,两种数据类型1,基本数据类型(1)第一类:整数型(2)第二类:浮点型(3)第三类:布尔型(4)第四类&…

JAVA基本数据类型及转换规则

JAVA基本数据类型及转换规则 java数据类型分为两大类: 一:基本数据类型 由程序设计语言系统所定义,不可再分的数据类型。在JAVA语言中,基本数据类型所占的内存空间大小是固定不变的,与所处的平台无关,基本…

JAVA基本数据类型及练习题

目录 8种基本数据类型 类型转换 题目 JAVA的数据类型分为:基本数据类型和引用数据类型。本篇博客会介绍基本数据类型及其使用的注意事项,其中包括隐式类型转换、显示类型转换、编译器的常量优化,结尾会给出10道练习题。 8种基本数据类型 …

java基础:java基本数据类型详解

1.java基本数据类型 java有八种基本数据类型: 4种整型 :byte,short,int,long2种浮点型:float,double (3.14F位浮点型,没有F默认为double)一种字符型&#x…

Java基础(一) 八大基本数据类型

Java基础(一) 八大基本数据类型 自从Java发布以来,基本数据类型就是Java语言的一部分,分别是byte, short, int, long, char, float, double, boolean. 其中: 整型:byte, short, int, long 字符型:char 浮点型&…

GitHub 宣布两个重磅消息:发布移动端、封存代码

By 超神经 AI 无处不在的时代,每天都有新的技术与研究成果出现。无论学术界还是商界,技术还是产品,AI 的新发现都源源不断,在带给我们全新视角的同时,也引起我们更深的思考。 想知道最近的 AI 动态吗?Hyper…

OpenAI 是如何被10亿美元收买了“非盈利”灵魂的?

编译 | 陈彩娴、琰琰 近日,一篇名为“How OpenAI Sold its Soul for $1 Billion”(OpenAI是如何因为 10 亿美元出卖自己的灵魂)的文章在 Reddit 上引起了热议。 文章作者 Alberto Romero 抨击知名的非营利机构OpenAI 为了金钱而出卖自己原有…

可怕!程序员要被革命了,微软推出自己会编程的 “AI 程序员” 插件

loonggg 读完需要 7分钟 速读仅需 3 分钟 大家好,我是校长。 这几天微软和 GitHub 推出了一款 AI 程序员智能插件,它自己会编程,会自动生成代码,有人说: 软件开发领域的「第三次工业革命」似乎正缓缓揭开序幕。 01 到底…

程序员提前下班的福音来了!GitHub、OpenAI 联手推出 AI 代码生成神器

整理 | 苏宓 出品 | CSDN(ID:CSDNnews) 编程门槛正在降低,编程效率正在提升,我们距离「人人都能成为开发者」的目标更近一步。这不,微软正式宣布发布了一个人工智能代码建议方案——GitHub Copilot&#xf…

2020 最好的Linux网络监控工具(翻译)

前言 虽然这个清单包含开源的和闭源的产品,但它着重于介绍基于 Linux 的网络监控工具, 少数常用工具只能在 Windows,Pandora 或其他系统上运行,但是大多数网络监视工具都在Linux系统上运行,因为 Linux 通常是 IT 专家…