主頁 >  其他 > 基于微服務架構和前后端分離設計理念的PMP眾醫平臺

基于微服務架構和前后端分離設計理念的PMP眾醫平臺

2022-02-27 11:28:51 其他

該專案是自己學習SpringCloud等微服務框架后開發的一個在線預約掛號系統,涵蓋SpringBoot、SpringCloud、Redis、RabbitMQ 、MongoDB、Docker 、阿里云OSS等熱門技術堆疊,能夠幫助從單機開發到分布式微服務開發進階的小伙伴快速掌握相關開發技能,專案已開源,喜歡的小伙伴可以自行下載學習,有任何問題都可以隨時評論交流,

Github開源地址:https://github.com/CONTINUE12/PMP

其他開源進階專案:

基于AWT、Swing及MYSQL開發的學校教務系統_SKS121的博客-CSDN博客

基于Javaweb的超市訂單管理系統SMBMS_SKS121的博客-CSDN博客

基于Spring+SpringMVC+Mybatis的圖書管理系統_SKS121的博客-CSDN博客

基于SpringBoot2.0+Mybatis的學生成績管理系統_SKS121的博客-CSDN博客

基于Spring Boot、Mybatis、MySQL、Lombok、Web Bluetooth API、Thymeleaf、AdminLTE3、JqGrid 的康復外骨骼RIREE遠程互動系統_SKS121的博客-CSDN博客

下面是對專案的整體框架進行概括

專案架構圖

業務流程圖

一.功能分析

(一)平臺后臺管理系統

1、醫院設定管理

(1)醫院設定串列、添加、鎖定、洗掉

(2)醫院串列、詳情、排班、下線

2、資料管理

(1)資料字典樹形顯示、匯入、匯出

3、用戶管理

(1)用戶串列、查看、鎖定

(2)認證用戶審批

4、訂單管理

(1)訂單串列、詳情

5、統計管理

(1)預約統計

(二)用戶前臺系統

1、首頁資料顯示

(1)醫院串列

2、醫院詳情顯示

(1)醫院科室顯示

3、用戶登錄功能

(1)手機號登錄(短信驗證碼發送)

(2)微信掃描登錄

4、用戶實名認證

5、就診人管理

(1)串列、添加、詳情、洗掉

6、預約掛號功能

(1)排班和掛號詳情資訊

(2)確認掛號資訊

(3)生成預約掛號訂單

(4)掛號訂單支付(微信)

(5)取消預約訂單

7、就醫提醒功能

(三)醫院介面系統

1.醫院串列資訊

2.醫院科室資訊

3.科室排班資訊

4.醫生資訊

二.開發環境

Windows 10,IntelliJ IDEA 2020.2,mysql8.0,maven3.6.1,tomcat9

三.技術堆疊

(一)后端技術堆疊

1、SpringBoot

2、SpringCloud (1)Nacos注冊中心 (2)Feign (3)GateWay

3、Redis (1)使用Redis作為快取 (2)驗證碼有效時間、支付二維碼有效時間

4、MongoDB (1)使用MongoDB存盤醫院相關資料

5、EasyExcel (1)操作excel表格,進行讀和寫操作

6、MyBatisPlus

7、RabbitMQ (1)訂單相關操作時,用mq發送短信訊息給短信消費者

8、Docker (1)下載鏡像 docker pull (2)創建容器 docker run

9、阿里云OSS

10、容聯云短信服務

11、微信登錄/支付

12、定時任務

(二)前端技術堆疊

1、vue

2、Element-ui:管理系統

3、nuxt:用戶系統

4、npm

5、ECharts圖表

四.專案結構設計

(一)后端

1.hospital-manage:醫院介面模擬端(已開發,直接使用)

2.common:公共模塊父節點

common-util:工具類模塊,所有模塊都可以依賴于它

rabbit-util:rabbitmq業務封裝

service-util:service服務的工具包,包含service服務的公共配置類,所有service模塊依賴于它

3.server-gateway:服務網關

4.model:物體類模塊

5.service:api介面服務父節點

service-hosp:醫院api介面服務

service-cmn:公共api介面服務

service-user:用戶api介面服務

service-order:訂單api介面服務

service-oss:檔案api介面服務

service-sms:短信 api介面服務

service-task:定時任務服務

service-statistics:統計api介面服務

6.service-client:feign服務呼叫父節點

service-cmn-client:公共api介面

service-hosp-client:醫院api介面

service-order-client:訂單api介面

(二)前端

1.后臺管理系統

(1)api:用于和后端互動獲取資料

(2)assets:靜態資源

(3)router:路由跳轉

(4)views:顯示頁面

2.用戶系統

(1)api:用于和后端互動獲取資料

(2)assets:靜態資源

(3)layouts:默認頁面

(4)pages:自定義顯示頁面

五.資料庫設計:

1.醫院介面資訊資料庫yygh_cmn

(1)資料資訊表dict

2.平臺管理醫院資訊資料庫yygh_hosp

(1)醫院資訊表hospital_set

3.醫院管理資料庫yygh_manage

(1)醫院資訊表hospital_set

(2)訂單表order_info

(3)醫生排班表schedule

4.用戶訂單資料庫yygh_order

(1)訂單資訊表order_info

(2)訂單支付資訊表payment_info

(3)退款資訊表refund_info

5.用戶資訊資料庫yygh_user

(1)用戶資訊表user_info

(2)就診人資訊表patient

五.維護日志

(1)后臺管理系統中增加用戶訂單管理功能

六.技術要點總結

1.反向代理服務器nginx

(1)使用原因:由于后端有很多服務模塊,每個模塊都有對應的訪問路徑,為了提供統一的api介面,使用nginx作為反向代理服務器

(2)詳情:將請求發送到反向代理服務器,由反向代理服務器去選擇目標服務器獲取資料后,再回傳給客戶端,此時反向代理服務器和目標服務器對外就是一個服務器,暴露的是代理服務器地址,隱藏了真實服務器IP地址,

注:可用Spring Cloud Gateway網關代替

2.API網關

(1)使用原因:不同的微服務一般會有不同的網路地址,而外部客戶端可能需要呼叫多個服務的介面才能完成一個業務需求,如果讓客戶端直接與各個微服務通信,會有以下的問題:

  • 客戶端會多次請求不同的微服務,增加了客戶端的復雜性,
  • 存在跨域請求,在一定場景下處理相對復雜,
  • 認證復雜,每個服務都需要獨立認證,
  • 難以重構,隨著專案的迭代,可能需要重新劃分微服務,例如,可能將多個服務合并成一個或者將一個服務拆分成多個,如果客戶端直接與微服務通信,那么重構將會很難實施,
  • 某些微服務可能使用了防火墻 / 瀏覽器不友好的協議,直接訪問會有一定的困難,

(2)工具:Spring Cloud Gateway,是介于客戶端和服務器端之間的中間層,所有的外部請求都會先經過API 網關這一層,也就是說,API 的實作方面更多的考慮業務邏輯,而安全、性能、監控可以交由 API 網關來做,這樣既提高業務靈活性又不缺安全性,

3.跨域問題

(1)原因:瀏覽器對于javascript的同源策略的限制,是瀏覽器對于ajax請求的一種安全限制,

(2)型別:域名不同;域名相同但埠不同等

(3)解決方案:一是直接在Controller類上添加@CrossOrigin注解

二是使用Spring Cloud Gateway網關創建全域配置類CorsConfig,通過配置類解決跨域問題

@Configuration
public class CorsConfig {
	@Bean
	public CorsWebFilter corsFilter() {
		CorsConfiguration config = new CorsConfiguration();
		config.addAllowedMethod("*");
		config.addAllowedOrigin("*");
		config.addAllowedHeader("*");
						
		UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(new PathPatternParser());
		source.registerCorsConfiguration("/**", config);
						
		return new CorsWebFilter(source);
	}
}

4.注冊中心與服務呼叫

(1)使用原因:微服務專案中,不同的功能分布在不同的模塊中,為了實作模塊之間的相互呼叫,需要將服務注冊到遠程注冊中心,再進行呼叫

(2)Spring Cloud相關基礎服務組件:

  • 服務注冊——Netflix Eureka (Nacos)
  • 服務呼叫——Netflix Feign
  • 熔斷器——Netflix Hystrix
  • 服務網關——Spring Cloud GateWay
  • 分布式配置——Spring Cloud Config (Nacos)
  • 訊息總線 —— Spring Cloud Bus (Nacos)

總結:Nacos = Eureka + Config + Bus

5.資料字典

(1)定義:管理系統常用的分類資料或者一些固定資料,例如:省市區三級聯動資料、民族資料、行業資料、學歷資料等,

(2)工具:阿里巴巴開源的EasyExcel,基于Java的簡單、省記憶體的讀寫Excel的開源專案,在盡可能節約記憶體的情況下支持讀寫百M的Excel,

6.服務端渲染技術

(1)定義:Server Side Render(SSR)是在服務端完成頁面的內容,而不是在客戶端通過AJAX獲取資料,

(2)優勢:更好的 SEO(推廣),由于搜索引擎爬蟲抓取工具可以直接查看完全渲染的頁面,

(3)工具:NUXT,Nuxt.js 是一個基于 Vue.js 的輕量級應用框架,可用來創建服務端渲染 (SSR) 應用,也可充當靜態站點引擎生成靜態站點應用,具有優雅的代碼結構分層和熱加載等特性,

7.手機驗證碼登錄

(1)JWT工具,是為了在網路應用環境間傳遞宣告而執行的一種基于JSON的開放標準,最重要的作用就是對 token資訊的防偽作用,

(2)阿里云短信業務,創建簽名和模板,程式中通過使用簽名和模板的keyId進行驗證碼發送,

(3)登錄全域事件:注冊一個全域登錄事件,當需要登錄層是,發送一個登錄事件,頭部組件監聽登錄事件,然后觸發登錄按鈕的點擊事件即可打開登錄層進行登錄,

(4)用戶認證與API網關整合:

1)首先,在網關處攔截需要登錄的url,從header頭資訊中獲取用戶token,若token合法,直接回傳用戶id和200狀態碼,放行;若不合法,回傳208狀態碼,

2)其次,在前端頁面中發送請求并接受狀態碼,若狀態碼為200,表示已經登錄,放行;若狀態碼為208,表示需要登錄,觸發登錄事件進行登錄,

3)最后,呼叫阿里云短信服務介面給用戶發送驗證碼,并將驗證碼放入redis快取,接收用戶輸入的驗證碼并和redis快取的驗證碼進行對比,若一致則登錄成功,否則失敗,

8.微信登錄

(1)OAuth2協議,

(2)微信工具準備,

1)注冊:微信開放平臺:https://open.weixin.qq.com

2)郵箱激活

3)完善開發者資料

4)開發者資質認證:準備營業執照,1-2個作業日審批、300元

5)創建網站應用:提交審核,7個作業日審批

6)內網穿透:ngrok的使用

(3)授權流程:獲取access_token時序圖

第一步:請求code(生成授權URL)

第二步:通過code獲取access_token(開發回呼URL)

9.阿里云物件存盤OSS服務

(1)使用原因:用戶認證需要上傳證件圖片、首頁輪播也需要上傳圖片,因此需要做檔案服務來存盤檔案,

(2)實作:通過阿里云賬戶的keyid和OSS創建的Bucket的id連接遠程OSS存盤庫,進行存盤和訪問,

10.預約下單成功后處理邏輯(使用訊息佇列)

(1)工具:RabbitMQ,是一個開源的訊息代理的佇列服務器,用來通過普通協議在完全不同的應用之間共享資料,

(2)作用:

1)訊息佇列提供一個異步通信機制,訊息的發送者不必一直等待到訊息被成功處理才回傳,而是立即回傳,

2)如果網路連接不可用,訊息被暫存于佇列當中;當網路暢通的時候再將訊息轉發給相應的應用程式或者服務,

3)如果在商品服務和訂單服務之間使用訊息中間件,既可以提高并發量,又降低服務之間的耦合度,

(3)典型應用場景:

1)異步處理,把訊息放入訊息中間件中,等到需要的時候再去處理,

2)流量削峰,例如秒殺活動,在短時間內訪問量急劇增加,使用訊息佇列,當訊息佇列滿了就拒絕回應,跳轉到錯誤頁面,這樣就可以使得系統不會因為超負載而崩潰,

3)日志處理,

4)應用解耦,

(4)實作程序:

1)下單成功后給用戶發送預約成功的短信通知,先創建MQ的監聽器,當有短信任務被放入訊息佇列時,擇機完成任務,

2)下單成功后更新剩余預約號的數量,先創建MQ的監聽器,當有更新任務被放入訊息佇列時,擇機完成任務,

11.就醫提醒(定時任務)

(1)業務邏輯:通過定時任務,每天8點執行提醒服務,提醒當天就醫的用戶就診,

(2)Cron運算式:是一個具有時間含義的字串,字串以5個空格隔開,分為6個域,格式為X X X X X X,分別表示秒、分、時、日、月等,

(3) @Scheduled注解:用于定時任務方法上,例如: @Scheduled(cron = "0 0 8 * * ?")表示每天早上八點執行,

12.其他

(1)Redis:作快取,用于驗證碼有效時間、支付二維碼有效時間、醫院資料等

(2)MongoDB:存盤醫院相關資料

(3)RabbitMQ:進行訂單相關操作,發送mq訊息

(4)Docker:下載鏡像(MongoDB,RabbitMQ),創建容器

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/433343.html

標籤:其他

上一篇:【電商秒殺專案】專案總結:Redis 實作分布式 Session、用戶認證、超賣、系統壓測、RabbitMQ 異步下單、介面限流

下一篇:思維導圖五(Linux、JVM、Redis、POI&EasyExcel)

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more