分布式醫療掛號系統(二) | 開發醫院設置微服務模塊

本系列文章介紹從0開始搭建一個基于分布式的醫療掛號系統。本次四篇文章完成了醫院設置微服務模塊的后端接口,為了方便開發,對接口的返回結果全局異常全局日志進行了統一處理。 同時,為了方便進行訪問測試,還整合了Swagger2工具,這些通用的模塊中,除了全局日志被放在醫院設置微服務模塊的配置資源中,其余都統一被抽取在common模塊中。具體實現可參考下面文章:

  • 醫院設置微服務 | 模塊搭建
  • 醫院設置微服務 | 接口開發
  • 通用模塊 | 整合Swagger2
  • 通用模塊 | 統一返回結果、統一異常處理、統一日志處理

作者:Hudie
微信公眾號/CSDN博客:編程一只蝶
項目已開源至gitee:https://gitee.com/guo-qianliang/yygh_parent
項目已開源至github:https://github.com/Guoqianliang/yygh_parent


一、框架調用流程

  • 從Controller層到Service層
    Controller層需要調用Service層的方法,我們在其中使用依賴注入(@Autowired注解)將Service的接口裝進Spring容器。

  • 從Service層到Mapper層
    Service層需要調用Mapper層,MyBatis-Plus框架已經將Mapper依賴注入進了Service層,我們只需要分別繼承IService<T>接口和ServiceImpl實現類即可。


    使用MyBatis-Plus后的三層調用關系

二、醫院設置表接口開發

1.增

(1)增加記錄

具體代碼說明:

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

        return Result.isOKorFail(flag);
    }
增加記錄測試

2.刪

(1)邏輯刪除記錄

    /**
     * 2.1 邏輯刪除記錄
     */
    @ApiOperation(value = "removeHospSer", notes = "邏輯刪除醫院設置")
    @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 = "獲取所有醫院設置信息")
    @GetMapping("findAll")
    public Result findAllHospitalSet() {
        List<HospitalSet> list = hospitalSetService.list();
        return Result.ok(list);
    }
查詢所有記錄測試

(2)條件查詢帶分頁

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

醫院設置表的分頁查詢vo對象:

查詢條件vo對象

具體代碼說明:

  • findPageHospSet方法傳入三個參數,①當前頁current ②每頁大小limit ③條件查詢的vo對象
  • 分頁步驟是:①創建page對象、②創建QueryWrapper對象、③調用方法執行分頁
  • 查詢條件是醫院名稱或醫院編號,對醫院名稱進行模糊查詢,對醫院編號進行等值查詢,需要注意對這兩個值進行判空處理。
  • @RequestBody(required = false)注解表示使用JSON格式傳遞參數,然后把JSON數據的值放到對象中去,required = false表示這個值可以為空。使用此參數要將提交方式改為POST,因為GET方式得不到值。
/**
     * 4.2 條件查詢帶分頁
     * 根據醫院名稱或編號查詢
     */
    @PostMapping("findPage/{current}/{limit}")
    public Result findPageHospSet(@PathVariable long current,
                                  @PathVariable long limit,
                                  @RequestBody(required = false) HospitalSetQueryVo hospitalSetQueryVo) {
        // 1. 創建page對象。傳遞當前頁、每頁記錄數
        Page<HospitalSet> page = new Page(current, limit);
        // 2. 創建QueryWrapper對象.
        QueryWrapper<HospitalSet> queryWrapper = new QueryWrapper<>();
        // 2.1 對醫院名稱和醫院編號進行判空
        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. 調用方法執行分頁。(參數是上面兩個對象)
        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);
    }
根據id獲取記錄

5.鎖定和解鎖表

針對表中的status字段:

  • status=1時表示解鎖
  • status=0時表示鎖定

只有醫院設置表的狀態為解鎖狀態時,才能進行和醫院系統的對接,從而進行數據的操作。

 /**
     * 醫院設置表鎖定和解鎖
     */
    @ApiOperation(value = "lockHospitalSet 醫院設置表鎖定和解鎖")
    @PutMapping("lockHospitalSet/{id}/{status}")
    public Result lockHospitalSet(@PathVariable Long id,
                                  @PathVariable Integer status) {
        // 根據id查詢醫院設置信息
        HospitalSet hospitalSet = hospitalSetService.getById(id);
        // 設置狀態
        hospitalSet.setStatus(status);
        // 調用更新方法
        hospitalSetService.updateById(hospitalSet);
        return Result.ok();
    }
鎖定和解鎖表醫院設置表

6.發送簽名密鑰

發送簽名密鑰,即短信接口,由于調用短信接口較為復雜,后面會有專門的文章進行介紹,這里暫時只寫好框架。具體開發流程可參考后續文章。

  /**
     * 發送簽名密鑰
     */
    @ApiOperation(value = "sendKeyHospitalSet 發送簽名密匙")
    @PutMapping("sendKey/{id}")
    public Result sendKeyHospitalSet(@PathVariable Long id) {
        HospitalSet hospitalSet = hospitalSetService.getById(id);
        // 簽名密鑰
        String signKey = hospitalSet.getSignKey();
        // 醫院編號
        String hoscode = hospitalSet.getHoscode();
        // TODO 發送短信
        
        return Result.ok();
    }

至此,醫院設置微服務后端接口開發已經完成了,通過swagger可以查看到我們開發的所有方法:

后臺管理系統-API文檔
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,030評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,310評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,951評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,796評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,566評論 6 407
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,055評論 1 322
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,142評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,303評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,799評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,683評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,899評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,409評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,135評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,520評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,757評論 1 282
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,528評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,844評論 2 372

推薦閱讀更多精彩內容