實(shí)戰(zhàn)分布式醫(yī)療掛號(hào)系統(tǒng)之設(shè)置微服務(wù)接口開(kāi)發(fā)模塊
文章導(dǎo)讀
本系列文章介紹從0開(kāi)始搭建一個(gè)基于分布式的醫(yī)療掛號(hào)系統(tǒng)。本次四篇文章完成了醫(yī)院設(shè)置微服務(wù)模塊的后端接口,為了方便開(kāi)發(fā),對(duì)接口的返回結(jié)果、全局異常、全局日志進(jìn)行了統(tǒng)一處理。 同時(shí),為了方便進(jìn)行訪問(wèn)測(cè)試,還整合了Swagger2工具,這些通用的模塊中,除了全局日志被放在醫(yī)院設(shè)置微服務(wù)模塊的配置資源中,其余都統(tǒng)一被抽取在common模塊中。具體實(shí)現(xiàn)可參考下面文章:
通用模塊 | 統(tǒng)一返回結(jié)果、統(tǒng)一異常處理、統(tǒng)一日志處理
項(xiàng)目已開(kāi)源至 https://github.com/Guoqianliang/yygh_parent
一、框架調(diào)用流程
- 從Controller層到Service層
Controller層需要調(diào)用Service層的方法,我們?cè)谄渲惺褂靡蕾囎⑷?@Autowired注解)將Service的接口裝進(jìn)Spring容器。
- 從Service層到Mapper層
Service層需要調(diào)用Mapper層,MyBatis-Plus框架已經(jīng)將Mapper依賴注入進(jìn)了Service層,我們只需要分別繼承IService接口和ServiceImpl實(shí)現(xiàn)類即可。
二、醫(yī)院設(shè)置表接口開(kāi)發(fā)
1.增
(1)增加記錄
具體代碼說(shuō)明:
- 參數(shù)中使用@RequestBody注解表示使用JSON格式傳遞參數(shù),默認(rèn)是required=true,表示不能為空。
- 代碼中首先將記錄的狀態(tài)設(shè)置為1表示該記錄可用,然后使用MD5加密算法設(shè)置簽名密鑰,關(guān)于MD5加密算法會(huì)在接下來(lái)的文章中詳細(xì)介紹。
/** * 1 增加記錄 */ @PostMapping("saveHospitalSet") public Result saveHospitalSet(@RequestBody HospitalSet hospitalSet) { // 設(shè)置狀態(tài)字段 (1:可以使用,0:不能使用) hospitalSet.setStatus(1); // 設(shè)置簽名密鑰字段(使用MD5加密) hospitalSet.setSignKey(MD5.encrypt(System.currentTimeMillis() + "" + new Random().nextInt(1000))); // 調(diào)用方法執(zhí)行添加 boolean flag = hospitalSetService.save(hospitalSet); return Result.isOKorFail(flag); }
2.刪
(1)邏輯刪除記錄
/** * 2.1 邏輯刪除記錄 */ @ApiOperation(value = "removeHospSer", notes = "邏輯刪除醫(yī)院設(shè)置") @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ī)院設(shè)置信息") @GetMapping("findAll") public Result findAllHospitalSet() { List<HospitalSet> list = hospitalSetService.list(); return Result.ok(list); }
(2)條件查詢帶分頁(yè)
查詢時(shí)需要傳遞參數(shù)作為查詢條件,可以使用vo對(duì)象將查詢條件進(jìn)行封裝。然后在Controller中獲取條件對(duì)象,由于帶有條件查詢帶有分頁(yè),還需獲取分頁(yè)數(shù)據(jù)(當(dāng)前頁(yè)current、每頁(yè)記錄數(shù)limit)
醫(yī)院設(shè)置表的分頁(yè)查詢vo對(duì)象:
具體代碼說(shuō)明:
- findPageHospSet方法傳入三個(gè)參數(shù),①當(dāng)前頁(yè)current ②每頁(yè)大小limit ③條件查詢的vo對(duì)象
- 分頁(yè)步驟是:①創(chuàng)建page對(duì)象、②創(chuàng)建QueryWrapper對(duì)象、③調(diào)用方法執(zhí)行分頁(yè)
- 查詢條件是醫(yī)院名稱或醫(yī)院編號(hào),對(duì)醫(yī)院名稱進(jìn)行模糊查詢,對(duì)醫(yī)院編號(hào)進(jìn)行等值查詢,需要注意對(duì)這兩個(gè)值進(jìn)行判空處理。
- @RequestBody(required = false)注解表示使用JSON格式傳遞參數(shù),然后把JSON數(shù)據(jù)的值放到對(duì)象中去,required = false表示這個(gè)值可以為空。使用此參數(shù)要將提交方式改為POST,因?yàn)镚ET方式得不到值。
/** * 4.2 條件查詢帶分頁(yè) * 根據(jù)醫(yī)院名稱或編號(hào)查詢 */ @PostMapping("findPage/{current}/{limit}") public Result findPageHospSet(@PathVariable long current, @PathVariable long limit, @RequestBody(required = false) HospitalSetQueryVo hospitalSetQueryVo) { // 1. 創(chuàng)建page對(duì)象。傳遞當(dāng)前頁(yè)、每頁(yè)記錄數(shù) Page<HospitalSet> page = new Page(current, limit); // 2. 創(chuàng)建QueryWrapper對(duì)象. QueryWrapper<HospitalSet> queryWrapper = new QueryWrapper<>(); // 2.1 對(duì)醫(yī)院名稱和醫(yī)院編號(hào)進(jìn)行判空 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. 調(diào)用方法執(zhí)行分頁(yè)。(參數(shù)是上面兩個(gè)對(duì)象) Page<HospitalSet> pageHospitalSet = hospitalSetService.page(page, queryWrapper); // 返回結(jié)果 return Result.ok(pageHospitalSet); }
(3)根據(jù)id獲取記錄
/** * 4.3根據(jù)id獲取記錄 */ @GetMapping("getHospSet/{id}") public Result getHospSet(@PathVariable Long id) { HospitalSet hospitalSet = hospitalSetService.getById(id); return Result.ok(hospitalSet); }
5.鎖定和解鎖表
針對(duì)表中的status字段:
- status=1時(shí)表示解鎖
- status=0時(shí)表示鎖定
只有醫(yī)院設(shè)置表的狀態(tài)為解鎖狀態(tài)時(shí),才能進(jìn)行和醫(yī)院系統(tǒng)的對(duì)接,從而進(jìn)行數(shù)據(jù)的操作。
/** * 醫(yī)院設(shè)置表鎖定和解鎖 */ @ApiOperation(value = "lockHospitalSet 醫(yī)院設(shè)置表鎖定和解鎖") @PutMapping("lockHospitalSet/{id}/{status}") public Result lockHospitalSet(@PathVariable Long id, @PathVariable Integer status) { // 根據(jù)id查詢醫(yī)院設(shè)置信息 HospitalSet hospitalSet = hospitalSetService.getById(id); // 設(shè)置狀態(tài) hospitalSet.setStatus(status); // 調(diào)用更新方法 hospitalSetService.updateById(hospitalSet); return Result.ok(); }
6.發(fā)送簽名密鑰
發(fā)送簽名密鑰,即短信接口,由于調(diào)用短信接口較為復(fù)雜,后面會(huì)有專門的文章進(jìn)行介紹,這里暫時(shí)只寫好框架。具體開(kāi)發(fā)流程可參考后續(xù)文章。
/** * 醫(yī)院設(shè)置表鎖定和解鎖 */ @ApiOperation(value = "lockHospitalSet 醫(yī)院設(shè)置表鎖定和解鎖") @PutMapping("lockHospitalSet/{id}/{status}") public Result lockHospitalSet(@PathVariable Long id, @PathVariable Integer status) { // 根據(jù)id查詢醫(yī)院設(shè)置信息 HospitalSet hospitalSet = hospitalSetService.getById(id); // 設(shè)置狀態(tài) hospitalSet.setStatus(status); // 調(diào)用更新方法 hospitalSetService.updateById(hospitalSet); return Result.ok(); }
至此,醫(yī)院設(shè)置微服務(wù)后端接口開(kāi)發(fā)已經(jīng)完成了,通過(guò)swagger可以查看到我們開(kāi)發(fā)的所有方法:
以上就是實(shí)戰(zhàn)分布式醫(yī)療掛號(hào)系統(tǒng)之接口開(kāi)發(fā)醫(yī)院設(shè)置微服務(wù)模塊的詳細(xì)內(nèi)容,更多關(guān)于分布式醫(yī)療掛號(hào)接口開(kāi)發(fā)設(shè)置微服務(wù)模塊的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- 實(shí)戰(zhàn)分布式醫(yī)療掛號(hào)系統(tǒng)開(kāi)發(fā)醫(yī)院科室及排班的接口
- 開(kāi)發(fā)分布式醫(yī)療掛號(hào)系統(tǒng)MongoDB集成實(shí)現(xiàn)上傳醫(yī)院接口
- 分布式醫(yī)療掛號(hào)系統(tǒng)SpringCache與Redis為數(shù)據(jù)字典添加緩存
- 分布式醫(yī)療掛號(hào)系統(tǒng)EasyExcel導(dǎo)入導(dǎo)出數(shù)據(jù)字典的使用
- 分布式開(kāi)發(fā)醫(yī)療掛號(hào)系統(tǒng)數(shù)據(jù)字典模塊前后端實(shí)現(xiàn)
- 實(shí)戰(zhàn)分布式醫(yī)療掛號(hào)系統(tǒng)之設(shè)置微服務(wù)搭建醫(yī)院模塊
- 分布式醫(yī)療掛號(hào)系統(tǒng)Nacos微服務(wù)Feign遠(yuǎn)程調(diào)用數(shù)據(jù)字典
相關(guān)文章
java教程散列表和樹(shù)所對(duì)應(yīng)容器類及HashMap解決沖突學(xué)習(xí)
本篇篇文章是java教程,主要介紹了java教程散列表,樹(shù)所對(duì)應(yīng)容器類及HashMap解決沖突的學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-10-10MyBatis在insert插入操作時(shí)返回主鍵ID的配置(推薦)
這篇文章主要介紹了MyBatis在insert插入操作時(shí)返回主鍵ID的配置的相關(guān)資料,需要的朋友可以參考下2017-10-10為什么不建議使用Java自定義Object作為HashMap的key
這篇文章主要介紹了為什么不建議使用Java自定義Object作為HashMap的key,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下2022-06-06詳解java數(shù)據(jù)結(jié)構(gòu)與算法之雙鏈表設(shè)計(jì)與實(shí)現(xiàn)
本篇文章主要介紹了詳解java數(shù)據(jù)結(jié)構(gòu)與算法之雙鏈表設(shè)計(jì)與實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06Java中String、StringBuffer和StringBuilder的區(qū)別
這篇文章主要介紹了Java中String、StringBuffer和StringBuilder的區(qū)別,StringBuilder與StringBuffer都繼承自AbstractStringBuilder類,在AbstractStringBuilder中也是使用字符數(shù)組保存字符串char[]value但是沒(méi)有final關(guān)鍵字修飾,所以這兩個(gè)可變,需要的朋友可以參考下2024-01-01java項(xiàng)目依賴包選擇具體實(shí)現(xiàn)類示例介紹
這篇文章主要為大家介紹了java項(xiàng)目依賴包選擇具體實(shí)現(xiàn)類示例介紹,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12Spring Security基于json登錄實(shí)現(xiàn)過(guò)程詳解
這篇文章主要介紹了Spring Security基于json登錄實(shí)現(xiàn)過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08