實戰(zhàn)分布式醫(yī)療掛號系統(tǒng)之設置微服務接口開發(fā)模塊
文章導讀
本系列文章介紹從0開始搭建一個基于分布式的醫(yī)療掛號系統(tǒng)。本次四篇文章完成了醫(yī)院設置微服務模塊的后端接口,為了方便開發(fā),對接口的返回結果、全局異常、全局日志進行了統(tǒng)一處理。 同時,為了方便進行訪問測試,還整合了Swagger2工具,這些通用的模塊中,除了全局日志被放在醫(yī)院設置微服務模塊的配置資源中,其余都統(tǒng)一被抽取在common模塊中。具體實現可參考下面文章:
通用模塊 | 統(tǒng)一返回結果、統(tǒng)一異常處理、統(tǒng)一日志處理
項目已開源至 https://github.com/Guoqianliang/yygh_parent
一、框架調用流程
- 從Controller層到Service層
Controller層需要調用Service層的方法,我們在其中使用依賴注入(@Autowired注解)將Service的接口裝進Spring容器。
- 從Service層到Mapper層
Service層需要調用Mapper層,MyBatis-Plus框架已經將Mapper依賴注入進了Service層,我們只需要分別繼承IService接口和ServiceImpl實現類即可。

二、醫(yī)院設置表接口開發(fā)
1.增
(1)增加記錄
具體代碼說明:
- 參數中使用@RequestBody注解表示使用JSON格式傳遞參數,默認是required=true,表示不能為空。
- 代碼中首先將記錄的狀態(tài)設置為1表示該記錄可用,然后使用MD5加密算法設置簽名密鑰,關于MD5加密算法會在接下來的文章中詳細介紹。
/**
* 1 增加記錄
*/
@PostMapping("saveHospitalSet")
public Result saveHospitalSet(@RequestBody HospitalSet hospitalSet) {
// 設置狀態(tài)字段 (1:可以使用,0:不能使用)
hospitalSet.setStatus(1);
// 設置簽名密鑰字段(使用MD5加密)
hospitalSet.setSignKey(MD5.encrypt(System.currentTimeMillis() + "" + new Random().nextInt(1000)));
// 調用方法執(zhí)行添加
boolean flag = hospitalSetService.save(hospitalSet);
return Result.isOKorFail(flag);
}

2.刪
(1)邏輯刪除記錄
/**
* 2.1 邏輯刪除記錄
*/
@ApiOperation(value = "removeHospSer", notes = "邏輯刪除醫(yī)院設置")
@DeleteMapping(value = "{id}")
public Result removeHospSer(@PathVariable Long id) {
boolean flag = hospitalSetService.removeById(id);
return Result.isOKorFail(flag);
}

(2)批量刪除記錄
/**
* 2.2 批量刪除記錄
*/
@DeleteMapping("batchRemove")
public Result batchRemoveHospitalSet(@RequestBody List<Long> idList) {
hospitalSetService.removeByIds(idList);
return Result.ok();
}

3.改
(1)修改記錄
/**
* 3 修改記錄
*/
@PostMapping("updateHospitalSet")
public Result updateHospitalSet(@RequestBody HospitalSet updateHospitalSet) {
boolean flag = hospitalSetService.updateById(updateHospitalSet);
return Result.isOKorFail(flag);
}

4.查
(1)查詢所有記錄
/**
* 4.1 查詢所有記錄
* @return list
*/
@ApiOperation(value = "findAllHospitalSet", notes = "獲取所有醫(yī)院設置信息")
@GetMapping("findAll")
public Result findAllHospitalSet() {
List<HospitalSet> list = hospitalSetService.list();
return Result.ok(list);
}

(2)條件查詢帶分頁
查詢時需要傳遞參數作為查詢條件,可以使用vo對象將查詢條件進行封裝。然后在Controller中獲取條件對象,由于帶有條件查詢帶有分頁,還需獲取分頁數據(當前頁current、每頁記錄數limit)
醫(yī)院設置表的分頁查詢vo對象:

具體代碼說明:
- findPageHospSet方法傳入三個參數,①當前頁current ②每頁大小limit ③條件查詢的vo對象
- 分頁步驟是:①創(chuàng)建page對象、②創(chuàng)建QueryWrapper對象、③調用方法執(zhí)行分頁
- 查詢條件是醫(yī)院名稱或醫(yī)院編號,對醫(yī)院名稱進行模糊查詢,對醫(yī)院編號進行等值查詢,需要注意對這兩個值進行判空處理。
- @RequestBody(required = false)注解表示使用JSON格式傳遞參數,然后把JSON數據的值放到對象中去,required = false表示這個值可以為空。使用此參數要將提交方式改為POST,因為GET方式得不到值。
/**
* 4.2 條件查詢帶分頁
* 根據醫(yī)院名稱或編號查詢
*/
@PostMapping("findPage/{current}/{limit}")
public Result findPageHospSet(@PathVariable long current,
@PathVariable long limit,
@RequestBody(required = false) HospitalSetQueryVo hospitalSetQueryVo) {
// 1. 創(chuàng)建page對象。傳遞當前頁、每頁記錄數
Page<HospitalSet> page = new Page(current, limit);
// 2. 創(chuàng)建QueryWrapper對象.
QueryWrapper<HospitalSet> queryWrapper = new QueryWrapper<>();
// 2.1 對醫(yī)院名稱和醫(yī)院編號進行判空
String hosname = hospitalSetQueryVo.getHosname();
String hoscode = hospitalSetQueryVo.getHoscode();
if (!StringUtils.isEmpty(hosname)) {
queryWrapper.like("hosname", hospitalSetQueryVo.getHosname());
}
if (!StringUtils.isEmpty(hoscode)) {
queryWrapper.eq("hoscode", hospitalSetQueryVo.getHoscode());
}
// 3. 調用方法執(zhí)行分頁。(參數是上面兩個對象)
Page<HospitalSet> pageHospitalSet = hospitalSetService.page(page, queryWrapper);
// 返回結果
return Result.ok(pageHospitalSet);
}

(3)根據id獲取記錄
/**
* 4.3根據id獲取記錄
*/
@GetMapping("getHospSet/{id}")
public Result getHospSet(@PathVariable Long id) {
HospitalSet hospitalSet = hospitalSetService.getById(id);
return Result.ok(hospitalSet);
}

5.鎖定和解鎖表
針對表中的status字段:
- status=1時表示解鎖
- status=0時表示鎖定
只有醫(yī)院設置表的狀態(tài)為解鎖狀態(tài)時,才能進行和醫(yī)院系統(tǒng)的對接,從而進行數據的操作。
/**
* 醫(yī)院設置表鎖定和解鎖
*/
@ApiOperation(value = "lockHospitalSet 醫(yī)院設置表鎖定和解鎖")
@PutMapping("lockHospitalSet/{id}/{status}")
public Result lockHospitalSet(@PathVariable Long id,
@PathVariable Integer status) {
// 根據id查詢醫(yī)院設置信息
HospitalSet hospitalSet = hospitalSetService.getById(id);
// 設置狀態(tài)
hospitalSet.setStatus(status);
// 調用更新方法
hospitalSetService.updateById(hospitalSet);
return Result.ok();
}

6.發(fā)送簽名密鑰
發(fā)送簽名密鑰,即短信接口,由于調用短信接口較為復雜,后面會有專門的文章進行介紹,這里暫時只寫好框架。具體開發(fā)流程可參考后續(xù)文章。
/**
* 醫(yī)院設置表鎖定和解鎖
*/
@ApiOperation(value = "lockHospitalSet 醫(yī)院設置表鎖定和解鎖")
@PutMapping("lockHospitalSet/{id}/{status}")
public Result lockHospitalSet(@PathVariable Long id,
@PathVariable Integer status) {
// 根據id查詢醫(yī)院設置信息
HospitalSet hospitalSet = hospitalSetService.getById(id);
// 設置狀態(tài)
hospitalSet.setStatus(status);
// 調用更新方法
hospitalSetService.updateById(hospitalSet);
return Result.ok();
}
至此,醫(yī)院設置微服務后端接口開發(fā)已經完成了,通過swagger可以查看到我們開發(fā)的所有方法:

以上就是實戰(zhàn)分布式醫(yī)療掛號系統(tǒng)之接口開發(fā)醫(yī)院設置微服務模塊的詳細內容,更多關于分布式醫(yī)療掛號接口開發(fā)設置微服務模塊的資料請關注腳本之家其它相關文章!
相關文章
解決springboot 連接 mysql 時報錯 using password: NO的方案
在本篇文章里小編給大家整理了關于解決springboot 連接 mysql 時報錯 using password: NO的方案,有需要的朋友們可以學習下。2020-01-01
Mybatis-Plus 條件構造器 QueryWrapper 的基本用法
這篇文章主要介紹了Mybatis-Plus - 條件構造器 QueryWrapper 的使用,通過實例代碼給大家介紹了查詢示例代碼及實現需求,代碼簡單易懂,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-09-09
責任鏈模式在spring security過濾器鏈中的應用小結
責任鏈模式在SpringSecurity過濾器鏈中的應用,通過一系列的過濾器按順序處理請求,每個過濾器負責特定的安全功能,實現靈活且可擴展的請求處理機制,感興趣的朋友跟隨小編一起看看吧2024-11-11
SpringBoot基于RabbitMQ實現消息可靠性的方法
RabbitMQ 提供了 publisher confirm 機制來避免消息發(fā)送到 MQ 過程中丟失,這種機制必須給每個消息指定一個唯一ID,消息發(fā)送到MQ以后,會返回一個結果給發(fā)送者,表示消息是否處理成功,本文給大家介紹了SpringBoot基于RabbitMQ實現消息可靠性的方法,需要的朋友可以參考下2024-04-04
利用idea生成webservice客戶端超詳解步驟(wsdl文件的使用)
這篇文章主要給大家介紹了關于利用idea生成webservice客戶端超詳解步驟,第一次接觸webservice,從采坑到采坑,算是了解了一些,明白了一些,文中通過代碼以及圖文介紹的非常詳細,需要的朋友可以參考下2023-12-12
Springboot使用Logback實現日志配置與異常記錄
默認情況下,SpringBoot內部使用logback作為系統(tǒng)日志實現的框架,將日志輸出到控制臺,不會寫到日志文件。本篇文章主要講解下如何自定義logabck.xml以及對logback文件中配置做一個詳解,需要的可以參考一下2022-11-11
Java創(chuàng)建圖形用戶界面(GUI)入門詳細指南(Swing庫JFrame類)
這篇文章主要介紹了使用Java?Swing庫的JFrame類創(chuàng)建基本的圖形用戶界面,包括窗口的創(chuàng)建、組件的添加和事件處理,通過代碼講解了如何設置窗口大小、添加按鈕及處理按鈕點擊事件,適合初學者學習和開發(fā)GUI應用程序,需要的朋友可以參考下2024-11-11

