本系列文章介紹從0開始搭建一個基于分布式的醫(yī)療掛號系統(tǒng)壁拉。本次四篇文章完成了
醫(yī)院設(shè)置微服務(wù)模塊
的后端接口,為了方便開發(fā)柏靶,對接口的返回結(jié)果
弃理、全局異常
、全局日志
進(jìn)行了統(tǒng)一處理屎蜓。 同時痘昌,為了方便進(jìn)行訪問測試,還整合了Swagger2工具
梆靖,這些通用的模塊中控汉,除了全局日志
被放在醫(yī)院設(shè)置微服務(wù)模塊的配置資源中,其余都統(tǒng)一被抽取在common模塊中返吻。具體實(shí)現(xiàn)可參考下面文章:
- 醫(yī)院設(shè)置微服務(wù) | 模塊搭建
- 醫(yī)院設(shè)置微服務(wù) | 接口開發(fā)
- 通用模塊 | 整合Swagger2
- 通用模塊 | 統(tǒng)一返回結(jié)果姑子、統(tǒng)一異常處理、統(tǒng)一日志處理
作者:Hudie
微信公眾號/CSDN博客:編程一只蝶
項(xiàng)目已開源至gitee:https://gitee.com/guo-qianliang/yygh_parent
項(xiàng)目已開源至github:https://github.com/Guoqianliang/yygh_parent
一测僵、框架調(diào)用流程
從Controller層到Service層
Controller層需要調(diào)用Service層的方法街佑,我們在其中使用依賴注入(@Autowired注解)將Service的接口裝進(jìn)Spring容器。-
從Service層到Mapper層
Service層需要調(diào)用Mapper層捍靠,MyBatis-Plus框架已經(jīng)將Mapper依賴注入進(jìn)了Service層沐旨,我們只需要分別繼承IService<T>接口和ServiceImpl實(shí)現(xiàn)類即可。
使用MyBatis-Plus后的三層調(diào)用關(guān)系
二榨婆、醫(yī)院設(shè)置表接口開發(fā)
1.增
(1)增加記錄
具體代碼說明:
- 參數(shù)中使用@RequestBody注解表示使用JSON格式傳遞參數(shù)磁携,默認(rèn)是required=true,表示不能為空良风。
- 代碼中首先將記錄的狀態(tài)設(shè)置為1表示該記錄可用谊迄,然后使用MD5加密算法設(shè)置簽名密鑰闷供,關(guān)于MD5加密算法會在接下來的文章中詳細(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)條件查詢帶分頁
查詢時需要傳遞參數(shù)作為查詢條件统诺,可以使用
vo對象
將查詢條件進(jìn)行封裝歪脏。然后在Controller中獲取條件對象,由于帶有條件查詢帶有分頁粮呢,還需獲取分頁數(shù)據(jù)(當(dāng)前頁current婿失、每頁記錄數(shù)limit)
醫(yī)院設(shè)置表的分頁查詢vo對象:
具體代碼說明:
- findPageHospSet方法傳入
三個參數(shù)
,①當(dāng)前頁current ②每頁大小limit ③條件查詢的vo對象分頁步驟
是:①創(chuàng)建page對象啄寡、②創(chuàng)建QueryWrapper對象豪硅、③調(diào)用方法執(zhí)行分頁查詢條件
是醫(yī)院名稱或醫(yī)院編號,對醫(yī)院名稱進(jìn)行模糊查詢这难,對醫(yī)院編號進(jìn)行等值查詢舟误,需要注意對這兩個值進(jìn)行判空處理葡秒。@RequestBody(required = false)
注解表示使用JSON格式傳遞參數(shù)姻乓,然后把JSON數(shù)據(jù)的值放到對象中去,required = false表示這個值可以為空眯牧。使用此參數(shù)要將提交方式改為POST蹋岩,因?yàn)镚ET方式得不到值。
/**
* 4.2 條件查詢帶分頁
* 根據(jù)醫(yī)院名稱或編號查詢
*/
@PostMapping("findPage/{current}/{limit}")
public Result findPageHospSet(@PathVariable long current,
@PathVariable long limit,
@RequestBody(required = false) HospitalSetQueryVo hospitalSetQueryVo) {
// 1. 創(chuàng)建page對象学少。傳遞當(dāng)前頁剪个、每頁記錄數(shù)
Page<HospitalSet> page = new Page(current, limit);
// 2. 創(chuàng)建QueryWrapper對象.
QueryWrapper<HospitalSet> queryWrapper = new QueryWrapper<>();
// 2.1 對醫(yī)院名稱和醫(yī)院編號進(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í)行分頁。(參數(shù)是上面兩個對象)
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.鎖定和解鎖表
針對表中的status字段:
- status=1時表示解鎖
- status=0時表示鎖定
只有醫(yī)院設(shè)置表的狀態(tài)為解鎖狀態(tài)時版确,才能進(jìn)行和醫(yī)院系統(tǒng)的對接扣囊,從而進(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ù)雜,后面會有專門的文章進(jìn)行介紹吓蘑,這里暫時只寫好框架惕虑。具體開發(fā)流程可參考后續(xù)文章。
/**
* 發(fā)送簽名密鑰
*/
@ApiOperation(value = "sendKeyHospitalSet 發(fā)送簽名密匙")
@PutMapping("sendKey/{id}")
public Result sendKeyHospitalSet(@PathVariable Long id) {
HospitalSet hospitalSet = hospitalSetService.getById(id);
// 簽名密鑰
String signKey = hospitalSet.getSignKey();
// 醫(yī)院編號
String hoscode = hospitalSet.getHoscode();
// TODO 發(fā)送短信
return Result.ok();
}
至此磨镶,醫(yī)院設(shè)置微服務(wù)后端接口開發(fā)已經(jīng)完成了溃蔫,通過swagger可以查看到我們開發(fā)的所有方法: