基于Java+SpringBoot+vue+element实现前后端分离牙科诊所管理系统详细设计
博主介紹:?公司項(xiàng)目主程、全網(wǎng)粉絲10W+,csdn特邀作者、博客專家、CSDN新星計(jì)劃導(dǎo)師、java領(lǐng)域優(yōu)質(zhì)創(chuàng)作者,CSDN博客之星TOP100、掘金/華為云/阿里云/InfoQ等平臺(tái)優(yōu)質(zhì)作者、專注于Java技術(shù)領(lǐng)域和畢業(yè)設(shè)計(jì)?
公眾號(hào):java李楊勇 簡(jiǎn)歷模板、學(xué)習(xí)資料、面試題庫(kù)等都給你💪
🍅文末獲取源碼聯(lián)系🍅
🍅CSDN官方推薦10W+JAVA技術(shù)人文章發(fā)布打卡社區(qū)🍅
前言介紹:
????????隨著社會(huì)的發(fā)展,社會(huì)的各行各業(yè)都在利用信息化時(shí)代的優(yōu)勢(shì)。計(jì)算機(jī)的優(yōu)勢(shì)和普及使得各種信息系統(tǒng)的開發(fā)成為必需。牙科診所信息化管理平臺(tái),主要的模塊包括首頁(yè)、個(gè)人中心、醫(yī)生管理、用戶管理、病歷信息管理、掛號(hào)信息管理、藥品信息管理、器械信息管理、藥單信息管理、器械單信息管理等功能。系統(tǒng)中管理員主要是為了安全有效地存儲(chǔ)和管理各類信息,還可以對(duì)系統(tǒng)進(jìn)行管理與更新維護(hù)等操作,并且對(duì)后臺(tái)有相應(yīng)的操作權(quán)限。
????????要想實(shí)現(xiàn)牙科診所信息化管理平臺(tái)的各項(xiàng)功能,需要后臺(tái)數(shù)據(jù)庫(kù)的大力支持。管理員驗(yàn)證注冊(cè)信息,收集的信息,并由此分析得出的關(guān)聯(lián)信息等大量的數(shù)據(jù)都由數(shù)據(jù)庫(kù)管理。本文中數(shù)據(jù)庫(kù)服務(wù)器端采用了Mysql作為后臺(tái)數(shù)據(jù)庫(kù),使Web與數(shù)據(jù)庫(kù)緊密聯(lián)系起來(lái)。在設(shè)計(jì)過(guò)程中,充分保證了系統(tǒng)代碼的良好可讀性、實(shí)用性、易擴(kuò)展性、通用性、便于后期維護(hù)、操作方便以及頁(yè)面簡(jiǎn)潔等特點(diǎn)。本系統(tǒng)的開發(fā)使獲取牙科診所信息化管理平臺(tái)信息能夠更加方便快捷,同時(shí)也使牙科診所信息化管理平臺(tái)管理信息變的更加系統(tǒng)化、有序化。系統(tǒng)界面較友好,易于操作。
系統(tǒng)設(shè)計(jì):
????????本牙科診所信息化管理平臺(tái)采用Java技術(shù),Mysql數(shù)據(jù)庫(kù)開發(fā),充分保證了系統(tǒng)穩(wěn)定性、完整性。 牙科診所信息化管理平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn)的設(shè)計(jì)思想如下:
1.操作簡(jiǎn)單方便、系統(tǒng)界面安全良好:簡(jiǎn)單明了的頁(yè)面布局,方便查詢牙科診所信息化管理平臺(tái)管理的相關(guān)信息。
2、即時(shí)可見(jiàn):對(duì)牙科診所信息化管理平臺(tái)信息的處理將立馬在對(duì)應(yīng)地點(diǎn)可以查詢到,從而實(shí)現(xiàn)“即時(shí)發(fā)布、即時(shí)見(jiàn)效”的系統(tǒng)功能。
3、功能的完善性:可以管理首頁(yè)、個(gè)人中心、醫(yī)生管理、用戶管理、病歷信息管理、掛號(hào)信息管理、藥品信息管理、器械信息管理、藥單信息管理、器械單信息管理模塊的修改和維護(hù)操作。??
系統(tǒng)架構(gòu)圖屬于系統(tǒng)設(shè)計(jì)階段,系統(tǒng)架構(gòu)圖只是這個(gè)階段一個(gè)產(chǎn)物,系統(tǒng)的總體架構(gòu)決定了整個(gè)系統(tǒng)的模式,是系統(tǒng)的基礎(chǔ)。牙科診所信息化管理平臺(tái)的整體結(jié)構(gòu)設(shè)計(jì)如圖所示。?
功能截圖:
登錄注冊(cè):管理員登錄進(jìn)入牙科診所信息化管理平臺(tái)之后,就可以對(duì)所有的信息進(jìn)行查看,可以查看到首頁(yè)、個(gè)人中心、醫(yī)生管理、用戶管理、病歷信息管理、掛號(hào)信息管理、藥品信息管理、器械信息管理、藥單信息管理、器械單信息管理等,并且還可以對(duì)其進(jìn)行相應(yīng)的操作管理
用戶注冊(cè):在注冊(cè)頁(yè)面中通過(guò)填寫用戶賬號(hào)、用戶姓名、密碼、年齡、聯(lián)系電話、身份證等信息完成用戶注冊(cè)。用戶登錄進(jìn)入牙科診所信息化管理平臺(tái)可以查看首頁(yè)、個(gè)人中心、醫(yī)生管理、病歷信息管理、掛號(hào)信息管理、藥單信息管理、器械單信息管理等信息進(jìn)行詳細(xì)操作
?牙醫(yī)管理:管理員可以查看修改刪除牙醫(yī)信息,牙醫(yī)可以修改自己的個(gè)人信息、普通用戶可以查看和掛號(hào)。
在醫(yī)生管理頁(yè)面中可以對(duì)索引、醫(yī)生工號(hào)、醫(yī)生姓名、職稱、性別、聯(lián)系電話、頭像、畢業(yè)院校、掛號(hào)費(fèi)、從醫(yī)時(shí)間等信息進(jìn)行詳情,修改或刪除等操作?
用戶管理:
病例管理:用戶掛號(hào)以后醫(yī)生可以添加和查看病例信息等
掛號(hào)管理:普通用戶登錄后可以選擇牙醫(yī)進(jìn)行掛號(hào)
在掛號(hào)信息管理頁(yè)面中可以對(duì)索引、掛號(hào)流水號(hào)、用戶賬號(hào)、用戶姓名、性別、年齡、身份證、聯(lián)系電話、醫(yī)生工號(hào)、醫(yī)生姓名、掛號(hào)費(fèi)、掛號(hào)時(shí)間、是否支付等信息進(jìn)行操作。
用戶掛號(hào)后支持掛號(hào)費(fèi)用以后醫(yī)生可以對(duì)用戶掛號(hào)進(jìn)行病例查看
開藥和醫(yī)囑等操作
管理員查看掛號(hào)詳情等數(shù)據(jù)?
藥品管理:在藥品信息管理頁(yè)面中可以對(duì)索引、藥品號(hào)、藥品名稱、數(shù)量、價(jià)格等信息進(jìn)行詳情,修改或刪除等操作
器械管理:在器械信息管理頁(yè)面中可以對(duì)索引、器械號(hào)、器械名稱、數(shù)量、價(jià)格等信息進(jìn)行詳情,修改或刪除等操作
藥單管理:在藥單信息管理頁(yè)面中可以對(duì)索引、藥單流水號(hào)、用戶賬號(hào)、用戶姓名、藥品號(hào)、藥品名稱、數(shù)量、價(jià)格、總金額、醫(yī)生工號(hào)、登記時(shí)間、是否支付等信息進(jìn)行詳情操作
器械單管理:
數(shù)據(jù)設(shè)計(jì):
管理員信息結(jié)構(gòu)圖,如圖所示?
掛號(hào)信息管理實(shí)體屬性圖,如圖所示
藥單信息管理實(shí)體屬性圖如圖所示
部分表設(shè)計(jì):
將數(shù)據(jù)庫(kù)概念設(shè)計(jì)的E-R圖轉(zhuǎn)換為關(guān)系數(shù)據(jù)庫(kù)。在關(guān)系數(shù)據(jù)庫(kù)中,數(shù)據(jù)關(guān)系由數(shù)據(jù)表組成,但是表的結(jié)構(gòu)表現(xiàn)在表的字段上。
表4-1:藥品信息
| 字段名稱 | 類型 | 長(zhǎng)度 | 字段說(shuō)明 |
| id | bigint | 主鍵 | |
| addtime | timestamp | 創(chuàng)建時(shí)間 | |
| yaopinhao | varchar | 200 | 藥品號(hào) |
| yaopinmingcheng | varchar | 200 | 藥品名稱 |
| shuliang | int | 數(shù)量 | |
| jiage | float | 價(jià)格 |
表4-2:藥單信息
| 字段名稱 | 類型 | 長(zhǎng)度 | 字段說(shuō)明 |
| id | bigint | 主鍵 | |
| addtime | timestamp | 創(chuàng)建時(shí)間 | |
| yaodanliushuihao | varchar | 200 | 藥單流水號(hào) |
| yonghuzhanghao | varchar | 200 | 用戶賬號(hào) |
| yonghuxingming | varchar | 200 | 用戶姓名 |
| huiyuandengji | varchar | 200 | 會(huì)員等級(jí) |
| zhekou | float | 折扣 | |
| yaopinhao | varchar | 200 | 藥品號(hào) |
| yaopinmingcheng | varchar | 200 | 藥品名稱 |
| shuliang | int | 數(shù)量 | |
| jiage | float | 價(jià)格 | |
| zongjine | varchar | 200 | 總金額 |
| yishenggonghao | varchar | 200 | 醫(yī)生工號(hào) |
| dengjishijian | date | 登記時(shí)間 | |
| ispay | varchar | 200 | 是否支付 |
表4-3:用戶表
| 字段名稱 | 類型 | 長(zhǎng)度 | 字段說(shuō)明 |
| id | bigint | 主鍵 | |
| username | varchar | 100 | 用戶名 |
| password | varchar | 100 | 密碼 |
| role | varchar | 100 | 角色 |
| addtime | timestamp | 新增時(shí)間 |
表4-4:token表
| 字段名稱 | 類型 | 長(zhǎng)度 | 字段說(shuō)明 |
| id | bigint | 主鍵 | |
| userid | bigint | 用戶id | |
| username | varchar | 100 | 用戶名 |
| tablename | varchar | 100 | 表名 |
| role | varchar | 100 | 角色 |
| token | varchar | 200 | 密碼 |
| addtime | timestamp | 新增時(shí)間 | |
| expiratedtime | timestamp | 過(guò)期時(shí)間 |
代碼實(shí)現(xiàn):
/*** 掛號(hào)信息* 后端接口* @author * @email * @date 2022-03-18 15:32:30*/ @RestController @RequestMapping("/guahaoxinxi") public class GuahaoxinxiController {@Autowiredprivate GuahaoxinxiService guahaoxinxiService;/*** 后端列表*/@RequestMapping("/page")public R page(@RequestParam Map<String, Object> params,GuahaoxinxiEntity guahaoxinxi,HttpServletRequest request){String tableName = request.getSession().getAttribute("tableName").toString();if(tableName.equals("yonghu")) {guahaoxinxi.setYonghuzhanghao((String)request.getSession().getAttribute("username"));}if(tableName.equals("yisheng")) {guahaoxinxi.setYishenggonghao((String)request.getSession().getAttribute("username"));}EntityWrapper<GuahaoxinxiEntity> ew = new EntityWrapper<GuahaoxinxiEntity>();PageUtils page = guahaoxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, guahaoxinxi), params), params));return R.ok().put("data", page);}/*** 前端列表*/@RequestMapping("/list")public R list(@RequestParam Map<String, Object> params,GuahaoxinxiEntity guahaoxinxi, HttpServletRequest request){EntityWrapper<GuahaoxinxiEntity> ew = new EntityWrapper<GuahaoxinxiEntity>();PageUtils page = guahaoxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, guahaoxinxi), params), params));return R.ok().put("data", page);}/*** 列表*/@RequestMapping("/lists")public R list( GuahaoxinxiEntity guahaoxinxi){EntityWrapper<GuahaoxinxiEntity> ew = new EntityWrapper<GuahaoxinxiEntity>();ew.allEq(MPUtil.allEQMapPre( guahaoxinxi, "guahaoxinxi")); return R.ok().put("data", guahaoxinxiService.selectListView(ew));}/*** 查詢*/@RequestMapping("/query")public R query(GuahaoxinxiEntity guahaoxinxi){EntityWrapper< GuahaoxinxiEntity> ew = new EntityWrapper< GuahaoxinxiEntity>();ew.allEq(MPUtil.allEQMapPre( guahaoxinxi, "guahaoxinxi")); GuahaoxinxiView guahaoxinxiView = guahaoxinxiService.selectView(ew);return R.ok("查詢掛號(hào)信息成功").put("data", guahaoxinxiView);}/*** 后端詳情*/@RequestMapping("/info/{id}")public R info(@PathVariable("id") Long id){GuahaoxinxiEntity guahaoxinxi = guahaoxinxiService.selectById(id);return R.ok().put("data", guahaoxinxi);}/*** 前端詳情*/@RequestMapping("/detail/{id}")public R detail(@PathVariable("id") Long id){GuahaoxinxiEntity guahaoxinxi = guahaoxinxiService.selectById(id);return R.ok().put("data", guahaoxinxi);}/*** 后端保存*/@RequestMapping("/save")public R save(@RequestBody GuahaoxinxiEntity guahaoxinxi, HttpServletRequest request){guahaoxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());//ValidatorUtils.validateEntity(guahaoxinxi);guahaoxinxiService.insert(guahaoxinxi);return R.ok();}/*** 前端保存*/@RequestMapping("/add")public R add(@RequestBody GuahaoxinxiEntity guahaoxinxi, HttpServletRequest request){guahaoxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());//ValidatorUtils.validateEntity(guahaoxinxi);guahaoxinxiService.insert(guahaoxinxi);return R.ok();}/*** 修改*/@RequestMapping("/update")public R update(@RequestBody GuahaoxinxiEntity guahaoxinxi, HttpServletRequest request){//ValidatorUtils.validateEntity(guahaoxinxi);guahaoxinxiService.updateById(guahaoxinxi);//全部更新return R.ok();}/*** 刪除*/@RequestMapping("/delete")public R delete(@RequestBody Long[] ids){guahaoxinxiService.deleteBatchIds(Arrays.asList(ids));return R.ok();}/*** 提醒接口*/@RequestMapping("/remind/{columnName}/{type}")public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request, @PathVariable("type") String type,@RequestParam Map<String, Object> map) {map.put("column", columnName);map.put("type", type);if(type.equals("2")) {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");Calendar c = Calendar.getInstance();Date remindStartDate = null;Date remindEndDate = null;if(map.get("remindstart")!=null) {Integer remindStart = Integer.parseInt(map.get("remindstart").toString());c.setTime(new Date()); c.add(Calendar.DAY_OF_MONTH,remindStart);remindStartDate = c.getTime();map.put("remindstart", sdf.format(remindStartDate));}if(map.get("remindend")!=null) {Integer remindEnd = Integer.parseInt(map.get("remindend").toString());c.setTime(new Date());c.add(Calendar.DAY_OF_MONTH,remindEnd);remindEndDate = c.getTime();map.put("remindend", sdf.format(remindEndDate));}}Wrapper<GuahaoxinxiEntity> wrapper = new EntityWrapper<GuahaoxinxiEntity>();if(map.get("remindstart")!=null) {wrapper.ge(columnName, map.get("remindstart"));}if(map.get("remindend")!=null) {wrapper.le(columnName, map.get("remindend"));}String tableName = request.getSession().getAttribute("tableName").toString();if(tableName.equals("yonghu")) {wrapper.eq("yonghuzhanghao", (String)request.getSession().getAttribute("username"));}if(tableName.equals("yisheng")) {wrapper.eq("yishenggonghao", (String)request.getSession().getAttribute("username"));}int count = guahaoxinxiService.selectCount(wrapper);return R.ok().put("count", count);}} /*** 上傳文件映射表*/ @RestController @RequestMapping("file") @SuppressWarnings({"unchecked","rawtypes"}) public class FileController{@Autowiredprivate ConfigService configService;/*** 上傳文件*/@Async@RequestMapping("/upload")public R upload(@RequestParam("file") MultipartFile file,String type) throws Exception {if (file.isEmpty()) {throw new EIException("上傳文件不能為空");}String fileExt = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")+1);File upload = new File("D:/work/");if(!upload.exists()) {upload.mkdirs();}String fileName = new Date().getTime()+"."+fileExt;File dest = new File(upload+"/"+fileName);file.transferTo(dest);if(StringUtils.isNotBlank(type) && type.equals("1")) {ConfigEntity configEntity = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "faceFile"));if(configEntity==null) {configEntity = new ConfigEntity();configEntity.setName("faceFile");configEntity.setValue(fileName);} else {configEntity.setValue(fileName);}configService.insertOrUpdate(configEntity);}return R.ok().put("file", fileName);}/*** 下載文件*/@IgnoreAuth@RequestMapping("/download")public ResponseEntity<byte[]> download(@RequestParam String fileName) {try {File path = new File(ResourceUtils.getURL("classpath:static").getPath());if(!path.exists()) {path = new File("");}File upload = new File(path.getAbsolutePath(),"/upload/");if(!upload.exists()) {upload.mkdirs();}File file = new File(upload.getAbsolutePath()+"/"+fileName);if(file.exists()){/*if(!fileService.canRead(file, SessionManager.getSessionUser())){getResponse().sendError(403);}*/HttpHeaders headers = new HttpHeaders();headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); headers.setContentDispositionFormData("attachment", fileName); return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),headers, HttpStatus.CREATED);}} catch (IOException e) {e.printStackTrace();}return new ResponseEntity<byte[]>(HttpStatus.INTERNAL_SERVER_ERROR);}}論文參考:
源碼獲取:
大家點(diǎn)贊、收藏、關(guān)注、評(píng)論啦 、查看👇🏻👇🏻👇🏻微信公眾號(hào)獲取聯(lián)系方式👇🏻👇🏻👇🏻
打卡 文章 更新?253/? 365天
?精彩專欄推薦訂閱:在下方專欄👇🏻👇🏻👇🏻👇🏻
Java項(xiàng)目精品實(shí)戰(zhàn)案例《100套》
web前端期末大作業(yè)網(wǎng)頁(yè)實(shí)戰(zhàn)《100套》
總結(jié)
以上是生活随笔為你收集整理的基于Java+SpringBoot+vue+element实现前后端分离牙科诊所管理系统详细设计的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: ❤️六W字《计算机基础知识》(七)(建议
- 下一篇: html5倒计时秒杀怎么做,vue 设