社區(qū)醫(yī)療系統(tǒng)平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn)
?作者主頁(yè):
作者簡(jiǎn)介:Java領(lǐng)域優(yōu)質(zhì)創(chuàng)作者、CSDN博客專家 、掘金特邀作者、多年架構(gòu)師設(shè)計(jì)經(jīng)驗(yàn)、騰訊課堂常駐講師
主要內(nèi)容:Java項(xiàng)目、畢業(yè)設(shè)計(jì)、簡(jiǎn)歷模板、學(xué)習(xí)資料、面試題庫(kù)、技術(shù)互助
文末獲取源碼?
項(xiàng)目編號(hào):BS-YL-019
一,項(xiàng)目簡(jiǎn)介
現(xiàn)在互聯(lián)網(wǎng)是日新月異發(fā)展越來越快,已經(jīng)在各行各業(yè)中不斷受到大家的重視,也得到在不同的行業(yè)中進(jìn)行使用。不管在那個(gè)行業(yè)都面臨著現(xiàn)代化信息時(shí)代的挑戰(zhàn)。同樣醫(yī)院行業(yè)也是如此,一個(gè)完善的社區(qū)醫(yī)療平臺(tái),要具有一般醫(yī)院所具備的基本功能條件還有信息的管理功能,但是現(xiàn)在的一些社區(qū)衛(wèi)生醫(yī)療基本上是通過原來的街道辦診所改建而來的,雖然可以滿足日?;颊呖床〉男枨?,但是在對(duì)于現(xiàn)在的人們來說已經(jīng)越來越滿足不了大家的需求了,同時(shí)對(duì)患者一些信息的管理也存在著嚴(yán)重的不中,還是純手工的進(jìn)行記錄,如果要查詢患者的一些信息是極為不方便的?,F(xiàn)在我國(guó)的醫(yī)療行業(yè)的改革正在穩(wěn)步前進(jìn),要實(shí)現(xiàn)居民看病不再難,不再排隊(duì),對(duì)患者信息有一種更有效的手段管理機(jī)制。
綜以上所述,所以本次畢業(yè)項(xiàng)目我將開發(fā)一個(gè)社區(qū)醫(yī)療系統(tǒng)平臺(tái),來服務(wù)本社區(qū)的所有的居民。實(shí)現(xiàn)讓居民看病不再困難,不再排隊(duì)的問題,讓居民感受到社區(qū)的服務(wù)很到位!本社區(qū)醫(yī)療系統(tǒng)平臺(tái)將采用最流行的B/S結(jié)構(gòu)和SSM框架做為項(xiàng)目的架構(gòu),使用IDEA工具進(jìn)行編碼,采用主流的MySql數(shù)據(jù)庫(kù)存儲(chǔ)數(shù)據(jù)。社區(qū)醫(yī)療系統(tǒng)主要有超級(jí)管理員、社區(qū)醫(yī)生和患者三個(gè)角色。超級(jí)管理員可以對(duì)本系統(tǒng)中所有的數(shù)據(jù)進(jìn)行操作。醫(yī)生角色對(duì)患者進(jìn)行接診、添加病歷等操作?;颊呖梢栽诰€預(yù)約和瀏覽社區(qū)醫(yī)院的相關(guān)信息。此系統(tǒng)有效的減少了大量的人力投入和工作效率以及社區(qū)患者的看病效率極大的提供了方便和效率!
關(guān)鍵詞:SSM;MySQL;MVC;LayUi;社區(qū)醫(yī)療
1.1.1業(yè)務(wù)流程
本系統(tǒng)一共有三個(gè)角色管理員、醫(yī)生、患者。管理員和醫(yī)生是通過后臺(tái)登錄進(jìn)入到管理頁(yè)面。而患者則是不同,患者先進(jìn)入到社區(qū)醫(yī)療系統(tǒng)首頁(yè),在首頁(yè)中可以登錄也可以注冊(cè)。登錄成功后點(diǎn)擊【個(gè)人中心】進(jìn)入到后臺(tái)管理,進(jìn)行對(duì)患者的信息做操作。
社區(qū)醫(yī)療系統(tǒng)平臺(tái)的超級(jí)管理員功能主要有以下幾個(gè):管理患者和醫(yī)生信息、本社區(qū)醫(yī)院有那些科室等功能。超級(jí)管理員業(yè)務(wù)流程圖如圖3.1所示。

圖1.1 系統(tǒng)管理員業(yè)務(wù)流程圖
社區(qū)醫(yī)療系統(tǒng)平臺(tái)的醫(yī)生功能主要包括以下幾個(gè):修改個(gè)人信息及密碼,以及在線診斷和病歷管理功能。
醫(yī)生業(yè)務(wù)流程圖如圖1.2所示。

?圖1.2醫(yī)生業(yè)務(wù)流程圖
社區(qū)醫(yī)療系統(tǒng)平臺(tái)患者功能主要包括以下幾個(gè):修改個(gè)人資料、瀏覽本社區(qū)醫(yī)院的醫(yī)生的一些基本信息,在線預(yù)約和取消預(yù)約,查看自己的以往的就診歷史。
患者業(yè)務(wù)流程圖如圖1.3所示。

圖1.3 患者業(yè)務(wù)流程圖
1.1.2數(shù)據(jù)流圖
使用數(shù)據(jù)流圖對(duì)系統(tǒng)進(jìn)行分析,關(guān)注系統(tǒng)中的數(shù)據(jù),主要展示系統(tǒng)的數(shù)據(jù)之間的處理過程。它采取分層描繪的方法,在頂層圖中能展現(xiàn)系統(tǒng)與外部實(shí)體之間的信息關(guān)聯(lián),可以察看是否有輸入信息、需要處理的信息和輸出信息的疏漏,能盡早發(fā)現(xiàn)系統(tǒng)中的邏輯錯(cuò)誤,并對(duì)其糾正。就這樣逐層分解下去,系統(tǒng)的框架就可以被展現(xiàn)出來。系統(tǒng)頂層數(shù)據(jù)流圖如圖3.4所示。

圖1.4系統(tǒng)頂層數(shù)據(jù)流圖
系統(tǒng)1層數(shù)據(jù)流圖如圖1.5所示

圖1.5系統(tǒng)1層數(shù)據(jù)流圖
1.1.4功能需求
經(jīng)過前期在社區(qū)的走訪調(diào)研和網(wǎng)上查閱資料再根據(jù)目前所掌握的技術(shù),具體的功能需求分析如下:
社區(qū)醫(yī)療系統(tǒng)平臺(tái)主要有超級(jí)管理員、醫(yī)生、患者三大角色和個(gè)人信息管理、醫(yī)生管理、患者管理等14個(gè)功能。在這里管理員權(quán)限的級(jí)別是最高的同樣它的功能也是最多的。接下來我們將根據(jù)不同的角色簡(jiǎn)單說明一下各個(gè)角色的功能需求:
1)管理員角色:管理員可以對(duì)醫(yī)生信息的管理、患者信息的管理、醫(yī)院公告、科室的管理、藥品的管理等進(jìn)行操作。
(1)醫(yī)生管理模塊中可以對(duì)醫(yī)生實(shí)現(xiàn)添加醫(yī)生,在添加醫(yī)生界面中可以選擇該醫(yī)生所對(duì)應(yīng)的的科室。修改操作只能對(duì)醫(yī)生的用戶名、真實(shí)姓名、科室、以及該醫(yī)生所對(duì)應(yīng)的級(jí)別進(jìn)行修改。刪除操作必須要通過主鍵id進(jìn)行刪除。查詢是可以根據(jù)多條件進(jìn)行查詢并分頁(yè)展示。條件查詢可以根據(jù)用戶輸入的用戶名、醫(yī)生的真實(shí)姓名、性別、科室、級(jí)別、注冊(cè)時(shí)間進(jìn)行全方位的查詢。
(2)對(duì)患者管理管理員沒有添加功能,如果患者沒有賬戶是需要通過患者在主頁(yè)中點(diǎn)擊注冊(cè)進(jìn)行注冊(cè)用戶之后,才可以進(jìn)行預(yù)約。所以管理員只能對(duì)患者進(jìn)行修改、刪除和多條件分頁(yè)查詢。管理員可以修改患者的用戶名、真實(shí)姓名、郵箱、級(jí)別(普通/VIP)、性別、手機(jī)號(hào)這些信息,在提交數(shù)據(jù)時(shí)是通過患者的唯一主鍵id進(jìn)行修改用戶信息。刪除操作必須要通過主鍵id進(jìn)行刪除。條件查詢可以根據(jù)管理員的任意組合方式進(jìn)行全方位的查詢。
(3)對(duì)公告管理功能管理員只有添加和刪除功能??梢蕴砑庸嬉恍┗緝?nèi)容,添加完成之后立即發(fā)布公告。刪除公告則通過主鍵id進(jìn)行唯一刪除。
(4)對(duì)科室管理功能管理員可以對(duì)科室進(jìn)行添加、修改、刪除功能。添加科室時(shí)要注意科室的名稱不能重復(fù)的。修改科室通過id修改對(duì)應(yīng)的科室的名稱。刪除科室功能要先查詢?cè)摽剖蚁率欠裼衅渌t(yī)生,如果有其他醫(yī)生則不是直接刪除,需要管理員回到醫(yī)生管理中刪除該分類下的醫(yī)生,才可以刪除科室,反之則可以直接刪除科室。
(5)對(duì)藥品管理功能管理員可以做藥品添加、藥品修改、藥品刪除和多條件查詢操作。藥品添加可以將藥品的一些常見信息的錄入。藥品修改可以對(duì)藥品的信息進(jìn)行修改其他的生產(chǎn)日期和有效期是不能修改的,因?yàn)檫@是藥品出廠已經(jīng)規(guī)定好的。藥品刪除只能根據(jù)id刪除,點(diǎn)擊按鈕把id傳遞到后臺(tái),在數(shù)據(jù)庫(kù)刪除記錄即可。藥品查詢可以多條件查詢條件可以輸入藥品的編號(hào)、藥品的名稱、藥品的類別、主治功能、生產(chǎn)日期、藥品價(jià)格進(jìn)行模糊查詢并分頁(yè)展示在頁(yè)面!
2)醫(yī)生角色: 醫(yī)生可對(duì)預(yù)約管理、患者病歷、藥品信息、醫(yī)生信息、社保信息等進(jìn)操作。
(1)預(yù)約管理功能分為兩個(gè)操作一個(gè)是查看預(yù)約患者列表另外一個(gè)是已接診的患者功能。在預(yù)約患者列表中查看預(yù)約信息,醫(yī)生只能看到自己的患者預(yù)約信息。醫(yī)生可以通過點(diǎn)擊按鈕進(jìn)行接診處理。接完診就可以在已接診的預(yù)約列表中查看,在這里醫(yī)生就可以進(jìn)行看病診斷添加病歷信息了。
(2)患者病歷功能醫(yī)生可查看以往患者的病歷信息,同時(shí)對(duì)病歷可編輯,編輯的內(nèi)容有患者的姓名、性別、病歷的創(chuàng)建日期、診斷結(jié)論和診斷詳情進(jìn)行修改。刪除只能通過id進(jìn)行刪除。
(3)藥品信息功能,醫(yī)生只有查看的權(quán)限沒有添加、刪除、修改的權(quán)限這些權(quán)限只有管理員才有。這個(gè)功能只是幫助醫(yī)生在開藥的時(shí)候方便查看藥品的一些詳情信息進(jìn)行錄入診斷記錄。
(4)醫(yī)生信息功能主要是修改個(gè)人資料及密碼。
(5)社保信息功能主要是讓醫(yī)生看看當(dāng)前的患者有沒有社保信息,如果有社??梢栽陂_藥的時(shí)候進(jìn)行開一些可以報(bào)銷的藥品。醫(yī)生對(duì)社保這塊的功能只有查詢。其他操作只有患者本人才有。查詢社保信息時(shí)也可以多條件的查詢并分頁(yè)。
3)患者角色:系統(tǒng)啟動(dòng)后自動(dòng)進(jìn)入門戶系統(tǒng),在門戶系統(tǒng)中患者可以瀏覽本社區(qū)醫(yī)療系統(tǒng)的一些其他信息,比如門診科室、社區(qū)醫(yī)院的醫(yī)療特色、醫(yī)院簡(jiǎn)介、醫(yī)室團(tuán)隊(duì)、新聞動(dòng)態(tài)等內(nèi)容。在門診科室和醫(yī)師團(tuán)隊(duì)頁(yè)面中可以在線預(yù)約就診。在點(diǎn)擊【預(yù)約】時(shí)如果患者沒有登錄則會(huì)提示患者登錄。點(diǎn)擊【個(gè)人中心】進(jìn)入到患者的后臺(tái)管理進(jìn)行查看患者的預(yù)約信息以及個(gè)人資料和以往的病歷信息。
(1)我的預(yù)約功能可以取消預(yù)約操作。
(2)個(gè)人資料是修改個(gè)人的基本信息。
(3)病歷信息功能查看患者以往的就診信息,這個(gè)功能只能查詢沒有刪除、修改、添加功能。在查詢時(shí)還可以根據(jù)病例的標(biāo)題、病歷診斷內(nèi)容等多條件查詢并分頁(yè)展示。
二,環(huán)境介紹
語言環(huán)境:Java:? jdk1.8
數(shù)據(jù)庫(kù):Mysql: mysql5.7
應(yīng)用服務(wù)器:Tomcat:? tomcat8.5.31
開發(fā)工具:IDEA或eclipse
后臺(tái)技術(shù):SSM+MAVEN
前臺(tái)技術(shù):layui+jquery+ajax
三,系統(tǒng)展示
5.1 門戶前臺(tái)模塊實(shí)現(xiàn)
前臺(tái)頁(yè)面主要集成了首頁(yè)、門診科室、醫(yī)療特色、醫(yī)院簡(jiǎn)介、醫(yī)師團(tuán)隊(duì)、新聞動(dòng)態(tài)、聯(lián)系我們等信息的展示。方便患者可以從前臺(tái)就能了解社區(qū)醫(yī)院的基本信息,也能讓患者找到相應(yīng)的科室,進(jìn)行預(yù)約自己喜歡的醫(yī)生?;颊咴跒g覽時(shí)是不需要登錄系統(tǒng)的,如果要預(yù)約的話是需要進(jìn)行登錄才能預(yù)約醫(yī)生進(jìn)行就診。門戶前臺(tái)頁(yè)面如圖5.1所示。

圖5.1門戶前臺(tái)界面
5.2 登錄功能模塊實(shí)現(xiàn)
登錄功能有兩套界面一個(gè)是患者從門戶登錄預(yù)約醫(yī)生另外一個(gè)是管理員和醫(yī)生登錄的界面。居民登錄成功后頁(yè)面跳轉(zhuǎn)到門戶系統(tǒng)的首頁(yè),根據(jù)患者想瀏覽的信息進(jìn)行選擇相應(yīng)的模塊。管理員和醫(yī)生在登錄時(shí)要進(jìn)行選擇相應(yīng)的角色,再填入登錄所需的信息,最后提交正確無誤后才能完成登錄。后臺(tái)會(huì)在以上填寫的信息正確的基礎(chǔ)至上,會(huì)查詢?cè)摻巧鶕碛械牟藛危煌臋?quán)限有不同的菜單選項(xiàng)的,最后就會(huì)在后臺(tái)首頁(yè)展示相應(yīng)的菜單列表進(jìn)行操作。
登錄流程如圖5.2所示:

圖5.2登錄流程圖
患者登錄界面如圖5.3所示:

圖5.3患者登錄界面
患者登錄界面如圖5.4所示:

圖5.4管理員/醫(yī)生登錄界面
5.3 注冊(cè)功能模塊實(shí)現(xiàn)
注冊(cè)功能也是分為兩套,患者和醫(yī)生注冊(cè)。當(dāng)患者第一次在本院就診時(shí)如果沒有用戶必須要注冊(cè)才能在線預(yù)約就診。如果醫(yī)生想在本社區(qū)平臺(tái)進(jìn)行坐診,也是要進(jìn)行注冊(cè)的注冊(cè)成功后管理員進(jìn)行分配科室即可。???
注冊(cè)流程如圖5.5所示:

圖5.5 注冊(cè)功能流程
注冊(cè)界面如圖5.6所示:

圖5.6 醫(yī)生注冊(cè)界面
居民注冊(cè)界面如圖5.7所示:

圖5.7 居民注冊(cè)界面
5.4 科室功能模塊實(shí)現(xiàn)
?? 科室管理功能對(duì)本社區(qū)醫(yī)院所有的科室進(jìn)行管理操作。如果科室類別中已分配醫(yī)生,那么該科室不能被刪除。
科室信息添加頁(yè)面如圖5.7所示:

圖5.7 科室添加界面

5.5 醫(yī)生功能模塊實(shí)現(xiàn)
在這個(gè)模塊中管理員可以通過修改功能給醫(yī)生分配科室及修改信息,通過醫(yī)生的唯一標(biāo)識(shí)id刪除醫(yī)生信息。也能通過多條件查詢進(jìn)行詳細(xì)查詢想要的信息并分頁(yè)展示。
醫(yī)生功能管理界面如圖5.9所示:

圖5.9 醫(yī)生功能管理界面
5.6 藥品功能模塊實(shí)現(xiàn)
藥品功能模塊主要實(shí)現(xiàn)的功能有藥品的多條件查詢并分頁(yè)展示、藥品信息的管理。修改藥品只能修改其名稱、藥品的類別、藥品功效、藥品價(jià)格、藥品說明等內(nèi)容。
藥品功能管理界面如圖5.10所示:
?

圖5.10 藥品功能管理界面
5.7 患者功能模塊實(shí)現(xiàn)
主要實(shí)現(xiàn)了對(duì)患者進(jìn)行多條件查詢并分頁(yè)展示、修改患者信息,當(dāng)然患者也可以對(duì)自己的信息進(jìn)行修改、刪除患者。在這里管理員不能添加患者的信息內(nèi)容。只有患者自己注冊(cè)才能添加患者的基本信息。因?yàn)榛颊卟豢赡苁锹?lián)系到管理員,讓管理員手動(dòng)添加患者的信息的。
患者功能管理界面如圖5.11所示:

圖5.11 患者功能管理界面
四,核心代碼展示
package com.zhang.hospital.web;import com.zhang.hospital.entity.*;import com.zhang.hospital.service.*;import com.zhang.hospital.util.EncryptUtil;import com.zhang.hospital.util.GsonUtil;import com.zhang.hospital.util.ResultUtil;import org.apache.commons.lang3.StringUtils;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.*;import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpSession;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;import java.util.List;public class AdminController { ? ?
? ?private AdminService adminService; ? ?
? ?private UserService userService; ? ?
? ?private DoctorService doctorService; ? ?
? ?private DepartService departService; ? ?
? ?private YaopinService yaopinService; ? ?
? ?
? ?public ResultUtil login(String username, String password, HttpServletRequest request, HttpSession session)
? ? ? ? ? ?throws ParseException { ? ? ? ?Admin admin = adminService.login(username, EncryptUtil.encrypt(password)); ? ? ? ?if (admin != null) {
? ? ? ? ? ?session.setAttribute("user", admin); //在攔截器中使用
? ? ? ? ? ?session.setAttribute("admin", admin); //在main.jsp中需要admin
? ? ? ? ? ?session.setAttribute("usertype", "1");//代表是管理員登錄
? ? ? ? ? ?// 還有修改密碼.jsp等都可以直接取出admin
? ? ? ? ? ?String loginIp = request.getHeader("x-forwarded-for"); ? ? ? ? ? ?if (loginIp == null || loginIp.length() == 0 || "unknown".equalsIgnoreCase(loginIp)) {
? ? ? ? ? ? ? ?loginIp = request.getHeader("Proxy-Client-IP");//獲取代理的IP
? ? ? ? ? ?} ? ? ? ? ? ?if (loginIp == null || loginIp.length() == 0 || "unknown".equalsIgnoreCase(loginIp)) {
? ? ? ? ? ? ? ?loginIp = request.getHeader("WL-Proxy-Client-IP");//獲取代理的IP
? ? ? ? ? ?} ? ? ? ? ? ?if (loginIp == null || loginIp.length() == 0 || "unknown".equalsIgnoreCase(loginIp)) {
? ? ? ? ? ? ? ?loginIp = request.getRemoteAddr();
? ? ? ? ? ?} ? ? ? ? ? ?Date date = new Date(); ? ? ? ? ? ?SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); ? ? ? ? ? ?String nowTime = simpleDateFormat.format(date); ? ? ? ? ? ?Date loginTime = simpleDateFormat.parse(nowTime); ? ? ? ? ? ?Date logoutTime = loginTime; ? ? ? ? ? ?Integer isSafeExit = 0;
? ? ? ? ? ?adminService.insAdminLog(username, loginIp, loginTime, logoutTime, isSafeExit);
? ? ? ? ? ?session.setAttribute("adminloginTime", loginTime); //點(diǎn)擊退出的時(shí)候用的到
? ? ? ? ? ?return ResultUtil.ok(admin.getId());
? ? ? ?} else
? ? ? ? ? ?return ResultUtil.error();
? ?} ? ?//獲取所有的登錄日志
? ?
? ?
? ?public ResultUtil getAdminLogList(Integer page, Integer limit, HttpSession session)
? ? ? ? ? ?throws ParseException { ? ? ? ?return adminService.getAdminLogList(page, limit);
? ?} ? ?
? ?public String userList() { ? ? ? ?return "/jsp/admin/userList";
? ?} ? ?
? ?public String yaopinList() { ? ? ? ?return "/jsp/admin/yaopinList";
? ?} ? ?
? ?public String doctorYaopinList() { ? ? ? ?return "/jsp/yaopin/yaopinList";
? ?} ? ?
? ?public String shebaoList() { ? ? ? ?return "/jsp/shebao/shebaoList";
? ?} ? ?
? ?
? ?public ResultUtil allSheBaoList(Integer page, Integer limit,ShebaoSearch shebaoSearch) { ? ? ? ?// System.out.println("yaopinSearch:" + yaopinSearch);
? ? ? ?return doctorService.allSheBaoList(page, limit,shebaoSearch);
? ?} ? ?
? ?
? ?public ResultUtil getAllUserList(Integer page, Integer limit, UserSearch search) { ? ? ? ?return userService.getAllUserList(page, limit, search);
? ?} ? ?
? ?public String bingliList() { ? ? ? ?return "/jsp/user/bingliList";
? ?} ? ?
? ?
? ?public ResultUtil getMyBingliList({ ? ? ? ? Integer page, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Integer limit,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?HttpSession session,BingliSearch bingliSearch)return userService.getMyBingliList(page, limit,session,bingliSearch);
? ?} ? ?
? ?
? ?public ResultUtil allYaopinList(Integer page, Integer limit,YaopinSearch yaopinSearch) {
? ? ? ?System.out.println("yaopinSearch:" + yaopinSearch); ? ? ? ?return yaopinService.allYaopinList(page, limit,yaopinSearch);
? ?} ? ?
? ?public String doctorList(HttpSession session) {
? ? ? ?List<Depart> departs = departService.getAllDeparts();
? ? ? ?session.setAttribute("departs", departs); ? ? ? ?return "/jsp/admin/doctorList";
? ?} ? ?
? ?
? ?public ResultUtil getAllDoctorList(Integer page, Integer limit, DoctorSearch search) { ? ? ? ?return doctorService.getAllDoctorList(page, limit, search);
? ?} ? ?
? ?
? ?public ResultUtil deleteDoctorById(int doctor_id) { ? ? ? ?return doctorService.deleteDoctorById(doctor_id);
? ?} ? ?
? ?
? ?public ResultUtil deleteYaoPinById(Integer id) { ? ? ? ?return yaopinService.deleteYaoPinById(id);
? ?} ? ?
? ?
? ?public ResultUtil deleteUserById(int user_id) { ? ? ? ?return userService.deleteUserById(user_id);
? ?} ? ?
? ?public String editStudent(int user_id, HttpSession session) { ? ? ? ? User user = userService.getUserById(user_id);
? ? ? ?session.setAttribute("hospital_user", user); ? ? ? ?return "/jsp/user/editUser";
? ?} ? ?
? ?public String editYaoPin( { ? ? ? ? Integer id, HttpSession session)YaoPin yaoPin = yaopinService.getYaoPinById(id);
? ? ? ?session.setAttribute("yaopin", yaoPin); ? ? ? ?return "/jsp/admin/editYaoPin";
? ?} ? ?
? ?public String editDoctor(int doctor_id, HttpSession session) { ? ? ? ? Doctor doctor = doctorService.getDoctorById(doctor_id);
? ? ? ?session.setAttribute("hospital_user", doctor); ? ? ? ?return "/jsp/admin/editDoctor";
? ?} ? ?/********Role相關(guān)*******/
? ?//獲取角色列表 帶分頁(yè)
? ?
? ?
? ?public ResultUtil getRoleList(Integer page, Integer limit) { ? ? ? ?return adminService.getRoles(page, limit);
? ?} ? ?//刪除一個(gè)角色
? ?
? ?
? ?public ResultUtil delRole( {
? ? ? ?adminService.delRole(roleId); ? ? ? ? Long roleId)return ResultUtil.ok();
? ?} ? ?//得到指定角色權(quán)限樹
? ?// 注解RequestMapping中produces屬性可以設(shè)置返回?cái)?shù)據(jù)的類型以及編碼,可以是json
? ?
? ?
? ?public String xtreeData( { ? ? ? ? Long roleId)return GsonUtil.entityToJson(adminService.getXtreeData(roleId));
? ?} ? ?// 檢查角色是否唯一
? ?
? ?
? ?public ResultUtil checkRoleName( { ? ? ? ? String roleName, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Long roleId)Role role = adminService.getRoleByRoleName(roleName); ? ? ? ?if (role == null)
? ? ? ?{ ? ? ? ? ? ?return new ResultUtil(0);
? ? ? ?} else if (role.getRoleId() == roleId) //已經(jīng)有這個(gè)角色名 并且就是這個(gè)id 也可以
? ? ? ?{ ? ? ? ? ? ?return new ResultUtil(0);
? ? ? ?} else ?//此角色名已存在 別的roleId
? ? ? ?{ ? ? ? ? ? ?return new ResultUtil(500, "已經(jīng)存在此角色名");
? ? ? ?}
? ?} ? ?// 檢查角色是否唯一 添加新角色的時(shí)候用這個(gè)函數(shù)
? ?
? ?
? ?public ResultUtil checkRoleName( { ? ? ? ? String roleName)Role role = adminService.getRoleByRoleName(roleName); ? ? ? ?if (role == null)//沒有這個(gè)角色名 可以
? ? ? ?{ ? ? ? ? ? ?return new ResultUtil(0);
? ? ? ?} else ?//此角色名已存在
? ? ? ?{ ? ? ? ? ? ?return new ResultUtil(500, "已經(jīng)存在此角色名");
? ? ? ?}
? ?} ? ?//更新角色
? ?
? ?
? ?public void updateRole(Role role, String m) { ? ? ? ?// System.out.println(role);
? ? ? ?// System.out.println(m);
? ? ? ?adminService.updRole(role, m);
? ?} ? ?//添加角色
? ?
? ?
? ?public ResultUtil insertRole(Role role, String m) {
? ? ? ?adminService.insRole(role, m); ? ? ? ?return ResultUtil.ok();
? ?} ? ?/*******管理員相關(guān)******/
? ?//查看管理員的個(gè)人信息
? ?
? ?public String personalDate(HttpSession session) { ? ? ? ?Admin admin = (Admin) session.getAttribute("admin"); ? ? ? ?Admin admin1 = adminService.getAdminById(admin.getId());
? ? ? ?session.setAttribute("admin1", admin1); ? ? ? ?return "/jsp/admin/personalInfo";
? ?} ? ?
? ?
? ?//獲取所有管理員列表 帶分頁(yè)
? ?public ResultUtil getAdminList(Integer page, Integer limit) { ? ? ? ?// Tomcat Localhost Log 會(huì)輸出錯(cuò)誤信息 如果下面的sql語句有問題
? ? ? ?ResultUtil admins = adminService.getAdminList(page, limit); ? ? ? ?return admins;
? ?} ? ?//獲取管理員對(duì)應(yīng)的菜單 用于加載后臺(tái)首頁(yè)
? ?
? ?
? ?public List<Menu> getMenus(HttpSession session) {
? ? ? ?List<Menu> menus = null; ? ? ? ?Admin admin = (Admin) session.getAttribute("admin"); ? ? ? ?Admin admin1 = adminService.getAdminById(admin.getId()); ? ? ? ?if (admin1 != null) {
? ? ? ? ? ?menus = adminService.getMenus(admin1);
? ? ? ?} ? ? ? ?return menus;
? ?} ? ?//編輯管理員
? ?
? ?public String editAdmin(HttpServletRequest request, int id) { ? ? ? ? Admin admin = adminService.getAdminById(id);
? ? ? ?List<Role> roles = adminService.getRoles();
? ? ? ?request.setAttribute("admin", admin);
? ? ? ?request.setAttribute("roles", roles); ? ? ? ?return "/jsp/admin/editAdmin";
? ?} ? ?//更新管理員
? ?
? ?
? ?public ResultUtil updateAdmin(Admin admin) { ? ? ? ?try {
? ? ? ? ? ?adminService.updAdmin(admin); ? ? ? ? ? ?return ResultUtil.ok();
? ? ? ?} catch (Exception e) {
? ? ? ? ? ?e.printStackTrace(); ? ? ? ? ? ?return ResultUtil.error();
? ? ? ?}
? ?} ? ?//更新管理員
? ?
? ?
? ?public ResultUtil updAdmin(Admin admin)
? ?{ ? ? ? ?if (admin != null && admin.getId() == 1) { ? ? ? ? ? ?return ResultUtil.error("不允許修改");
? ? ? ?} ? ? ? ?try
? ? ? ?{ ? ? ? ? ? ?//如果sql執(zhí)行失敗 會(huì)有捕獲異常輸出
? ? ? ? ? ?adminService.updAdmin(admin); ? ? ? ? ? ?return ResultUtil.ok();
? ? ? ?} catch (Exception e) {
? ? ? ? ? ?e.printStackTrace(); ? ? ? ? ? ?return ResultUtil.error();
? ? ? ?}
? ?} ? ?//修改密碼
? ?
? ?
? ?public ResultUtil changeAdminPassword(String oldPassword, String newPassword1, String username) { ? ? ? ?Admin admin = adminService.getAdminByUsername(username); ? ? ? ?if (admin != null) { ? ? ? ? ? ?if (admin.getPassword().equals(EncryptUtil.encrypt(oldPassword))) {
? ? ? ? ? ? ? ?admin.setPassword(EncryptUtil.encrypt(newPassword1));
? ? ? ? ? ? ? ?adminService.updAdmin(admin); ? ? ? ? ? ? ? ?return ResultUtil.ok();
? ? ? ? ? ?} else { ? ? ? ? ? ? ? ?return ResultUtil.error("舊密碼錯(cuò)誤,請(qǐng)重新填寫");
? ? ? ? ? ?}
? ? ? ?} ? ? ? ?return ResultUtil.error("請(qǐng)求出錯(cuò)?。?#34;);
? ?} ? ?//刪除一個(gè)管理員
? ?
? ?
? ?public ResultUtil delAdminById( { ? ? ? ? Long id)if (id == 1) { ? ? ? ? ? ?return ResultUtil.error();
? ? ? ?} ? ? ? ?try {
? ? ? ? ? ?adminService.delAdminById(id); ? ? ? ? ? ?return ResultUtil.ok();
? ? ? ?} catch (Exception e) {
? ? ? ? ? ?e.printStackTrace(); ? ? ? ? ? ?return ResultUtil.error();
? ? ? ?}
? ?} ? ?//檢查是否已經(jīng)存在此用戶名
? ?
? ?
? ?public ResultUtil checkAdminName( { ? ? ? ? String username)Admin admin = adminService.getAdminByUsername(username); ? ? ? ?if (admin != null) { ? ? ? ? ? ?return new ResultUtil(500, "管理員已存在!");
? ? ? ?} ? ? ? ?return new ResultUtil(0);
? ?} ? ?//添加新管理員
? ?
? ?
? ?public ResultUtil insAdmin(Admin admin) {
? ? ? ?adminService.insAdmin(admin); ? ? ? ?return ResultUtil.ok();
? ?} ? ?/****菜單相關(guān)******/
? ?//獲取所有菜單
? ?
? ?
? ?public ResultUtil menuData() {
? ? ? ?List<Menu> list = adminService.getAllMenus(); ? ? ? ?ResultUtil resultUtil = new ResultUtil();
? ? ? ?resultUtil.setCode(0);
? ? ? ?resultUtil.setCount(list.size() + 0L);
? ? ? ?resultUtil.setData(list); ? ? ? ?return resultUtil;
? ?} ? ?
? ?
? ?public ResultUtil updMenuSortingById(Long menuId, String sorting) { ? ? ? ?Menu menu = new Menu();
? ? ? ?menu.setMenuId(menuId);
? ? ? ?Long sortingL; ? ? ? ?try {
? ? ? ? ? ?sortingL = Long.parseLong(sorting); //將字符串變成Long
? ? ? ?} catch (Exception e) {
? ? ? ? ? ?e.printStackTrace(); ? ? ? ? ? ?return ResultUtil.error("修改失敗,只允許輸入整數(shù)");
? ? ? ?}
? ? ? ?menu.setSorting(sortingL);
? ? ? ?adminService.updMenuSortingById(menu); ? ? ? ?return ResultUtil.ok();
? ?} ? ?
? ?public String toSaveMenu( { ? ? ? ? Long menuId, ? ? ? ? ? ? ? ? ? ? ? ? ? ? Long menuLevel, Model model)if (menuId != null && menuId != 1) { ? ? ? ? ? ?Menu menus = new Menu();
? ? ? ? ? ?menus.setMenuId(menuId);
? ? ? ? ? ?model.addAttribute("menuLevel", menuLevel);
? ? ? ? ? ?model.addAttribute("menu", menus);
? ? ? ? ? ?model.addAttribute("flag", "1"); ? ? ? ? ? ?return "/jsp/menu/menuForm";
? ? ? ?} else {
? ? ? ? ? ?model.addAttribute("msg", "不允許操作!"); ? ? ? ? ? ?return "/jsp/active";
? ? ? ?}
? ?} ? ?
? ?public String toEditMenu( { ? ? ? ? Long menuId, Model model)if (menuId != null && menuId != 1) { ? ? ? ? ? ?Menu menus = adminService.getMenuById(menuId);
? ? ? ? ? ?model.addAttribute("menu", menus); ? ? ? ? ? ?return "/jsp/menu/menuForm";
? ? ? ?} else {
? ? ? ? ? ?model.addAttribute("msg", "不允許操作"); ? ? ? ? ? ?return "/jsp/active";
? ? ? ?}
? ?} ? ?
? ?
? ?public ResultUtil menuForm(Menu menus, String flag) { ? ? ? ?if (StringUtils.isBlank(flag))
? ? ? ?{
? ? ? ? ? ?menus.setSpread("false");
? ? ? ? ? ?adminService.updMenu(menus); ? ? ? ? ? ?return ResultUtil.ok("修改成功");
? ? ? ?} else if (menus.getMenuId() != 1)
? ? ? ?{
? ? ? ? ? ?menus.setParentId(menus.getMenuId()); //menuId parentId設(shè)成一樣 情況1: 0,0 ?情況2: 2,2 ?情況3:111,111
? ? ? ? ? ?Menu m = adminService.getMenuById(menus.getMenuId());// 情況1 m為空 情況2 讀出菜單 我的面板 情況3讀出菜單 測(cè)試菜單
? ? ? ? ? ?if (m != null && m.getParentId() != 0)//這就是 選中第三級(jí)菜單復(fù)選框或者選中第二級(jí)菜單復(fù)選框的情況
? ? ? ? ? ?{ ? ? ? ? ? ? ? ?Menu m1 = adminService.getMenuById(m.getParentId()); //獲取第二級(jí)菜單或者第三級(jí)菜單的上級(jí)菜單
? ? ? ? ? ? ? ?if (m1 != null && m1.getParentId() != 0)//說明是情況3
? ? ? ? ? ? ? ?{ ? ? ? ? ? ? ? ? ? ?return ResultUtil.error("此菜單不允許添加子菜單"); ?//固定最多三級(jí)菜單
? ? ? ? ? ? ? ?}
? ? ? ? ? ?}
? ? ? ? ? ?List<Menu> data = adminService.checkNameSameLevel(menus); // sql為select * from menu parentId = #{parentId} and name = #{name}
? ? ? ? ? ?//就是判斷頂級(jí)菜單 二級(jí)菜單下有沒有重名的菜單
? ? ? ? ? ?if (data.size() > 0) { ? ? ? ? ? ? ? ?return ResultUtil.error("同級(jí)菜單名稱不能相同");
? ? ? ? ? ?}
? ? ? ? ? ?menus.setMenuId(null);
? ? ? ? ? ?menus.setSpread("false"); //默認(rèn)不展開
? ? ? ? ? ?adminService.insMenu(menus); ? ? ? ? ? ?return ResultUtil.ok("添加成功");
? ? ? ?} else { ? ? ? ? ? ?return ResultUtil.error("此菜單不允許操作");
? ? ? ?}
? ?} ? ?
? ?
? ?public ResultUtil delMenuById( { ? ? ? ? Long menuId)try { ? ? ? ? ? ?if (menuId == 1) { ? ? ? ? ? ? ? ?return ResultUtil.error("此菜單不允許刪除!");
? ? ? ? ? ?}
? ? ? ? ? ?List<Menu> data = adminService.getMenusByParentId(menuId); ? ? ? ? ? ?if (data != null && data.size() > 0) { ? ? ? ? ? ? ? ?return ResultUtil.error("包含子菜單,不允許刪除!");
? ? ? ? ? ?}
? ? ? ? ? ?List<RoleMenu> roleMenus = adminService.getRoleMenuByMenuId(menuId); ? ? ? ? ? ?if (roleMenus != null && roleMenus.size() > 1) { ? ? ? ? ? ? ? ?return ResultUtil.error("此菜單已經(jīng)分配給此登錄角色,請(qǐng)先解除綁定,再嘗試刪除");
? ? ? ? ? ?}
? ? ? ? ? ?adminService.delMenuById(menuId); ? ? ? ? ? ?return ResultUtil.ok("刪除成功");
? ? ? ?} catch (Exception e) {
? ? ? ? ? ?e.printStackTrace(); ? ? ? ? ? ?return ResultUtil.error("數(shù)據(jù)庫(kù)sql有誤查看Log輸出");
? ? ? ?}
? ?} ? ?/********頁(yè)面跳轉(zhuǎn)*******/
? ?
? ?public ModelAndView loginout(ModelAndView modelAndView, HttpSession session)
? ? ? ? ? ?throws ParseException { ? ? ? ?Date loginTime = (Date) session.getAttribute("adminloginTime"); ? ? ? ?AdminLog adminLog = adminService.getAdminLogByLoginTime(loginTime);
? ? ? ?adminLog.setIsSafeExit(1); ? ? ? ?Date date = new Date(); ? ? ? ?SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); ? ? ? ?String nowTime = simpleDateFormat.format(date); ? ? ? ?Date logoutTime = simpleDateFormat.parse(nowTime);
? ? ? ?adminLog.setLogoutTime(logoutTime);
? ? ? ?adminService.updateAdminLog(adminLog);
? ? ? ?session.invalidate();
? ? ? ?modelAndView.setViewName("redirect:/adminindex.jsp"); ? ? ? ?return modelAndView;
? ?} ? ?
? ?public String index() { ? ? ? ?return "redirect:/admin/toallmain";
? ?} ? ?
? ?public String toallmain(ModelAndView modelAndView) { ? ? ? ?return "/jsp/allmain";
? ?} ? ?
? ?public String getMain() { ? ? ? ?return "/jsp/main";
? ?} ? ?
? ?public String adminList() { ? ? ? ?return "/jsp/admin/adminList";
? ?} ? ?
? ?public String addAdmin(HttpSession session) {
? ? ? ?List<Role> roles = adminService.getRoles();
? ? ? ?session.setAttribute("roles", roles); ? ? ? ?return "/jsp/admin/addAdmin";
? ?} ? ?
? ?public String roleList() { ? ? ? ?return "/jsp/role/roleList";
? ?} ? ?
? ?public String editRole(Role role, Model model) {
? ? ? ?role = adminService.getRoleById(role.getRoleId());
? ? ? ?model.addAttribute("role", role); ? ? ? ?return "/jsp/role/editRole";
? ?} ? ?
? ?public String addRole() { ? ? ? ?return "/jsp/role/addRole";
? ?} ? ?
? ?public String menuList() { ? ? ? ?return "/jsp/menu/menuList";
? ?} ? ?
? ?public String changePassword() { ? ? ? ?return "/jsp/admin/changePassword";
? ?} ? ?
? ?public String adminLoginLog() { ? ? ? ?return "/jsp/admin/adminLogList";
? ?} ? ?
? ?public String register() { ? ? ? ?return "/jsp/register/register";
? ?}
}
package com.zhang.hospital.web;import com.zhang.hospital.entity.Depart;import com.zhang.hospital.entity.Doctor;import com.zhang.hospital.service.DepartService;import com.zhang.hospital.service.DoctorService;import com.zhang.hospital.util.ResultUtil;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;import java.util.List;public class DepartController { ? ?
? ?private DepartService departService; ? ?
? ?private DoctorService doctorService; ? ?
? ?public String departList(){ ? ? ? ?return "/jsp/depart/departList";
? ?} ? ?
? ?
? ?public ResultUtil getDepartList(Integer page, Integer limit)
? ?{ ? ? ? ?return departService.getDepartList(page,limit);
? ?} ? ?
? ?public String ?addDepart()
? ?{ ? ? ? ?return "/jsp/depart/addDepart";
? ?} ? ?// 檢查角色是否唯一 添加新角色的時(shí)候用這個(gè)函數(shù)
? ?
? ?
? ?public ResultUtil checkDepartName(
? ?{
? ? ? ?Depart depart1=departService.getDepartByDepartName(depart); ? ? ? ? String depart)if(depart1==null)
? ? ? ?{ ? ? ? ? ? ?return new ResultUtil(0);
? ? ? ?} ? ? ? ?else ?//此角色名已存在
? ? ? ?{ ? ? ? ? ? ?return new ResultUtil(500,"已經(jīng)存在此科室名稱");
? ? ? ?}
? ?} ? ?
? ?
? ?public ResultUtil insDepart(Depart depart)
? ?{
? ? ? ?departService.addDepart(depart); ? ? ? ?return ResultUtil.ok();
? ?} ? ?
? ?public String editDepart(
? ?{
? ? ? ?Depart depart=departService.getDepartById(depart_id);
? ? ? ?model.addAttribute( Integer depart_id, Model model)"depart",depart); ? ? ? ?return "/jsp/depart/editDepart";
? ?} ? ?
? ?
? ?public void updateDepart(Depart depart)
? ?{
? ? ? ?departService.updateDepart(depart);
? ?} ? ?
? ?
? ?public ResultUtil delDepartById(
? ?{ ? ? ? ? Integer depart_id)//先檢查此科室下有沒有醫(yī)生
? ? ? ?List<Doctor> doctors=doctorService.getDoctorByDepartId(depart_id); ? ? ? ?if(doctors.size()==0)//此科室下沒有醫(yī)生可以刪除
? ? ? ?{
? ? ? ? ? ?departService.delDepartById(depart_id); ? ? ? ? ? ?return ResultUtil.ok("此科室刪除成功");
? ? ? ?} ? ? ? // departService.delDepartById(depart_id);
? ? ? ?return ResultUtil.error("此科室下有醫(yī)生,不可以刪除");
? ?}
}
五,項(xiàng)目總結(jié)
社區(qū)醫(yī)療系統(tǒng)平臺(tái)主要針對(duì)一些老社區(qū)或者醫(yī)療資源短缺的地方進(jìn)行提供方便、快捷看病的渠道。社區(qū)醫(yī)療平臺(tái)實(shí)現(xiàn)了醫(yī)生在線對(duì)預(yù)約的患者進(jìn)行診斷和添加病歷,而且還有社區(qū)基本信息管理的功能,比如發(fā)布社區(qū)公告信息等來提高社區(qū)醫(yī)療管理效率。優(yōu)化社區(qū)看病的管理流程、工作流程,幫助醫(yī)院解決患者掛號(hào)掛不上、交費(fèi)排隊(duì)時(shí)間長(zhǎng)、取藥不方便、看病時(shí)間短的“三長(zhǎng)一短”的問題;增加對(duì)患者的透明度,方便患者就診、提高服務(wù)水平、加強(qiáng)藥品管理;輔助社區(qū)醫(yī)療服務(wù)的行政管理與事務(wù)處理,實(shí)現(xiàn)社區(qū)信息的數(shù)字無紙化辦公,從而降低管理費(fèi)用,減輕門診工作人員勞動(dòng)強(qiáng)度;加快信息流通速度,輔助決策支持,提高工作效率,使社區(qū)能以較少的投入獲得更大的社會(huì)效益與經(jīng)濟(jì)效益。因此,開發(fā)一套能夠?yàn)橛脩籼峁┏渥愕男畔?、提供功能齊全易操作和快捷的查詢方式的社區(qū)醫(yī)療系統(tǒng)平臺(tái),將是非常必要及時(shí)的。