当前位置:   article > 正文

Java项目:181Springboot Vue牙科诊所管理系统(含论文)_牙科挂号springboot

牙科挂号springboot
作者主页:源码空间站2022 ​​​​​​​

 简介:Java领域优质创作者、Java项目、学习资料、技术互助

文末获取源码

项目介绍

基于Springboot Vue牙科诊所管理系统(含论文)

角色:管理员、医生、用户三种角色,分为前后台;

用户:用户在前台可以查看首页、公告、医生等信息;用户登录后,可进行医生预约、查看我的病例、预约记录等信息;

管理员:管理员登录成功后进入到系统操作界面,可以对个人中心、管理员管理、基础数据管理、公告管理、医生管理、医生预约管理、病例管理、用户管理、轮播图信息等功能模块进行相对应操作。

医生:医生登录成功后进入到系统操作界面,可以对个人中心、公告管理、医生预约管理、病例管理、用户管理等功能模块进行相应操作。

使用人群:
正在做毕设的学生,或者需要项目实战练习的Java学习者

由于本程序规模不大,可供课程设计,毕业设计学习演示之用

环境需要

1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。
2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;
3.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS; 
4.数据库:MySql 5.7/8.0版本均可;

5.是否Maven项目:是;

技术栈

后端:SpringBoot+Mybaits

前端:Vue +ElementUI +Layui +HTML+CSS+JS

使用说明

项目运行:
1. 使用Navicat或者其它工具,在mysql中创建对应sql文件名称的数据库,并导入项目的sql文件;
2. 使用IDEA/Eclipse/MyEclipse导入项目,导入成功后请执行maven clean;maven install命令;
3. 将项目中application.yml配置文件中的数据库配置改为自己的配置;
4.运行项目,在浏览器中输入地址:
前台地址:http://localhost:8080/yakezhensuo/front/index.html
用户:a1/123456

后台地址:http://localhost:8080/yakezhensuo/admin/dist/index.html#/login
管理员:admin/admin

医生:a3/123456

运行截图

代码结构及功能列表

前台界面

后台界面

相关代码

BingliController

  1. package com.controller;
  2. import java.io.File;
  3. import java.math.BigDecimal;
  4. import java.net.URL;
  5. import java.text.SimpleDateFormat;
  6. import com.alibaba.fastjson.JSONObject;
  7. import java.util.*;
  8. import org.springframework.beans.BeanUtils;
  9. import javax.servlet.http.HttpServletRequest;
  10. import org.springframework.web.context.ContextLoader;
  11. import javax.servlet.ServletContext;
  12. import com.service.TokenService;
  13. import com.utils.*;
  14. import java.lang.reflect.InvocationTargetException;
  15. import com.service.DictionaryService;
  16. import org.apache.commons.lang3.StringUtils;
  17. import com.annotation.IgnoreAuth;
  18. import org.slf4j.Logger;
  19. import org.slf4j.LoggerFactory;
  20. import org.springframework.beans.factory.annotation.Autowired;
  21. import org.springframework.stereotype.Controller;
  22. import org.springframework.web.bind.annotation.*;
  23. import com.baomidou.mybatisplus.mapper.EntityWrapper;
  24. import com.baomidou.mybatisplus.mapper.Wrapper;
  25. import com.entity.*;
  26. import com.entity.view.*;
  27. import com.service.*;
  28. import com.utils.PageUtils;
  29. import com.utils.R;
  30. import com.alibaba.fastjson.*;
  31. /**
  32. * 病例
  33. * 后端接口
  34. * @author
  35. * @email
  36. */
  37. @RestController
  38. @Controller
  39. @RequestMapping("/bingli")
  40. public class BingliController {
  41. private static final Logger logger = LoggerFactory.getLogger(BingliController.class);
  42. private static final String TABLE_NAME = "bingli";
  43. @Autowired
  44. private BingliService bingliService;
  45. @Autowired
  46. private TokenService tokenService;
  47. @Autowired
  48. private DictionaryService dictionaryService;//字典
  49. @Autowired
  50. private GonggaoService gonggaoService;//公告
  51. @Autowired
  52. private YishengService yishengService;//医生
  53. @Autowired
  54. private YishengYuyueService yishengYuyueService;//医生预约
  55. @Autowired
  56. private YonghuService yonghuService;//用户
  57. @Autowired
  58. private UsersService usersService;//管理员
  59. /**
  60. * 后端列表
  61. */
  62. @RequestMapping("/page")
  63. public R page(@RequestParam Map<String, Object> params, HttpServletRequest request){
  64. logger.debug("page方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
  65. String role = String.valueOf(request.getSession().getAttribute("role"));
  66. if(false)
  67. return R.error(511,"永不会进入");
  68. else if("用户".equals(role))
  69. params.put("yonghuId",request.getSession().getAttribute("userId"));
  70. else if("医生".equals(role))
  71. params.put("yishengId",request.getSession().getAttribute("userId"));
  72. CommonUtil.checkMap(params);
  73. PageUtils page = bingliService.queryPage(params);
  74. //字典表数据转换
  75. List<BingliView> list =(List<BingliView>)page.getList();
  76. for(BingliView c:list){
  77. //修改对应字典表字段
  78. dictionaryService.dictionaryConvert(c, request);
  79. }
  80. return R.ok().put("data", page);
  81. }
  82. /**
  83. * 后端详情
  84. */
  85. @RequestMapping("/info/{id}")
  86. public R info(@PathVariable("id") Long id, HttpServletRequest request){
  87. logger.debug("info方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
  88. BingliEntity bingli = bingliService.selectById(id);
  89. if(bingli !=null){
  90. //entity转view
  91. BingliView view = new BingliView();
  92. BeanUtils.copyProperties( bingli , view );//把实体数据重构到view中
  93. //级联表 用户
  94. //级联表
  95. YonghuEntity yonghu = yonghuService.selectById(bingli.getYonghuId());
  96. if(yonghu != null){
  97. BeanUtils.copyProperties( yonghu , view ,new String[]{ "id", "createTime", "insertTime", "updateTime", "yishengId"
  98. , "yonghuId"});//把级联的数据添加到view中,并排除id和创建时间字段,当前表的级联注册表
  99. view.setYonghuId(yonghu.getId());
  100. }
  101. //级联表 医生
  102. //级联表
  103. YishengEntity yisheng = yishengService.selectById(bingli.getYishengId());
  104. if(yisheng != null){
  105. BeanUtils.copyProperties( yisheng , view ,new String[]{ "id", "createTime", "insertTime", "updateTime", "yishengId"
  106. , "yonghuId"});//把级联的数据添加到view中,并排除id和创建时间字段,当前表的级联注册表
  107. view.setYishengId(yisheng.getId());
  108. }
  109. //修改对应字典表字段
  110. dictionaryService.dictionaryConvert(view, request);
  111. return R.ok().put("data", view);
  112. }else {
  113. return R.error(511,"查不到数据");
  114. }
  115. }
  116. /**
  117. * 缴费
  118. */
  119. @RequestMapping("/jiaofei")
  120. public R jiaofei(Integer id, HttpServletRequest request){
  121. BingliEntity bingli = bingliService.selectById(id);
  122. YonghuEntity yonghuEntity = yonghuService.selectById(bingli.getYonghuId());
  123. if(yonghuEntity == null)
  124. return R.error("查不到用户");
  125. double balance = yonghuEntity.getNewMoney() - bingli.getBingliHuafei();
  126. if(balance<0)
  127. return R.error("余额不够支付,请充值后再缴费");
  128. yonghuEntity.setNewMoney(balance);
  129. yonghuService.updateById(yonghuEntity);
  130. bingli.setJiaofeiTypes(2);
  131. bingliService.updateById(bingli);
  132. return R.ok();
  133. }
  134. /**
  135. * 后端保存
  136. */
  137. @RequestMapping("/save")
  138. public R save(@RequestBody BingliEntity bingli, HttpServletRequest request){
  139. logger.debug("save方法:,,Controller:{},,bingli:{}",this.getClass().getName(),bingli.toString());
  140. String role = String.valueOf(request.getSession().getAttribute("role"));
  141. if(false)
  142. return R.error(511,"永远不会进入");
  143. else if("医生".equals(role))
  144. bingli.setYishengId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));
  145. else if("用户".equals(role))
  146. bingli.setYonghuId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));
  147. Wrapper<BingliEntity> queryWrapper = new EntityWrapper<BingliEntity>()
  148. .eq("yonghu_id", bingli.getYonghuId())
  149. .eq("yisheng_id", bingli.getYishengId())
  150. .eq("bingli_name", bingli.getBingliName())
  151. .eq("bingli_types", bingli.getBingliTypes())
  152. .eq("jiaofei_types", bingli.getJiaofeiTypes())
  153. ;
  154. logger.info("sql语句:"+queryWrapper.getSqlSegment());
  155. BingliEntity bingliEntity = bingliService.selectOne(queryWrapper);
  156. if(bingliEntity==null){
  157. bingli.setInsertTime(new Date());
  158. bingli.setCreateTime(new Date());
  159. bingliService.insert(bingli);
  160. return R.ok();
  161. }else {
  162. return R.error(511,"表中有相同数据");
  163. }
  164. }
  165. /**
  166. * 后端修改
  167. */
  168. @RequestMapping("/update")
  169. public R update(@RequestBody BingliEntity bingli, HttpServletRequest request) throws NoSuchFieldException, ClassNotFoundException, IllegalAccessException, InstantiationException {
  170. logger.debug("update方法:,,Controller:{},,bingli:{}",this.getClass().getName(),bingli.toString());
  171. BingliEntity oldBingliEntity = bingliService.selectById(bingli.getId());//查询原先数据
  172. String role = String.valueOf(request.getSession().getAttribute("role"));
  173. // if(false)
  174. // return R.error(511,"永远不会进入");
  175. // else if("医生".equals(role))
  176. // bingli.setYishengId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));
  177. // else if("用户".equals(role))
  178. // bingli.setYonghuId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));
  179. bingliService.updateById(bingli);//根据id更新
  180. return R.ok();
  181. }
  182. /**
  183. * 删除
  184. */
  185. @RequestMapping("/delete")
  186. public R delete(@RequestBody Integer[] ids, HttpServletRequest request){
  187. logger.debug("delete:,,Controller:{},,ids:{}",this.getClass().getName(),ids.toString());
  188. List<BingliEntity> oldBingliList =bingliService.selectBatchIds(Arrays.asList(ids));//要删除的数据
  189. bingliService.deleteBatchIds(Arrays.asList(ids));
  190. return R.ok();
  191. }
  192. /**
  193. * 批量上传
  194. */
  195. @RequestMapping("/batchInsert")
  196. public R save( String fileName, HttpServletRequest request){
  197. logger.debug("batchInsert方法:,,Controller:{},,fileName:{}",this.getClass().getName(),fileName);
  198. Integer yonghuId = Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId")));
  199. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  200. try {
  201. List<BingliEntity> bingliList = new ArrayList<>();//上传的东西
  202. Map<String, List<String>> seachFields= new HashMap<>();//要查询的字段
  203. Date date = new Date();
  204. int lastIndexOf = fileName.lastIndexOf(".");
  205. if(lastIndexOf == -1){
  206. return R.error(511,"该文件没有后缀");
  207. }else{
  208. String suffix = fileName.substring(lastIndexOf);
  209. if(!".xls".equals(suffix)){
  210. return R.error(511,"只支持后缀为xls的excel文件");
  211. }else{
  212. URL resource = this.getClass().getClassLoader().getResource("static/upload/" + fileName);//获取文件路径
  213. File file = new File(resource.getFile());
  214. if(!file.exists()){
  215. return R.error(511,"找不到上传文件,请联系管理员");
  216. }else{
  217. List<List<String>> dataList = PoiUtil.poiImport(file.getPath());//读取xls文件
  218. dataList.remove(0);//删除第一行,因为第一行是提示
  219. for(List<String> data:dataList){
  220. //循环
  221. BingliEntity bingliEntity = new BingliEntity();
  222. // bingliEntity.setYonghuId(Integer.valueOf(data.get(0))); //用户 要改的
  223. // bingliEntity.setYishengId(Integer.valueOf(data.get(0))); //医生 要改的
  224. // bingliEntity.setBingliUuidNumber(data.get(0)); //病例编号 要改的
  225. // bingliEntity.setBingliName(data.get(0)); //病例名称 要改的
  226. // bingliEntity.setBingliTypes(Integer.valueOf(data.get(0))); //病例类型 要改的
  227. // bingliEntity.setKanbingTime(sdf.parse(data.get(0))); //看病时间 要改的
  228. // bingliEntity.setBingliZishuText(data.get(0)); //病人自述 要改的
  229. // bingliEntity.setBingliZhenduanText(data.get(0)); //诊断结果 要改的
  230. // bingliEntity.setBingliYaofangText(data.get(0)); //药方 要改的
  231. // bingliEntity.setBingliHuafei(data.get(0)); //花费金额 要改的
  232. // bingliEntity.setJiaofeiTypes(Integer.valueOf(data.get(0))); //是否缴费 要改的
  233. // bingliEntity.setInsertTime(date);//时间
  234. // bingliEntity.setCreateTime(date);//时间
  235. bingliList.add(bingliEntity);
  236. //把要查询是否重复的字段放入map中
  237. //病例编号
  238. if(seachFields.containsKey("bingliUuidNumber")){
  239. List<String> bingliUuidNumber = seachFields.get("bingliUuidNumber");
  240. bingliUuidNumber.add(data.get(0));//要改的
  241. }else{
  242. List<String> bingliUuidNumber = new ArrayList<>();
  243. bingliUuidNumber.add(data.get(0));//要改的
  244. seachFields.put("bingliUuidNumber",bingliUuidNumber);
  245. }
  246. }
  247. //查询是否重复
  248. //病例编号
  249. List<BingliEntity> bingliEntities_bingliUuidNumber = bingliService.selectList(new EntityWrapper<BingliEntity>().in("bingli_uuid_number", seachFields.get("bingliUuidNumber")));
  250. if(bingliEntities_bingliUuidNumber.size() >0 ){
  251. ArrayList<String> repeatFields = new ArrayList<>();
  252. for(BingliEntity s:bingliEntities_bingliUuidNumber){
  253. repeatFields.add(s.getBingliUuidNumber());
  254. }
  255. return R.error(511,"数据库的该表中的 [病例编号] 字段已经存在 存在数据为:"+repeatFields.toString());
  256. }
  257. bingliService.insertBatch(bingliList);
  258. return R.ok();
  259. }
  260. }
  261. }
  262. }catch (Exception e){
  263. e.printStackTrace();
  264. return R.error(511,"批量插入数据异常,请联系管理员");
  265. }
  266. }
  267. /**
  268. * 前端列表
  269. */
  270. @IgnoreAuth
  271. @RequestMapping("/list")
  272. public R list(@RequestParam Map<String, Object> params, HttpServletRequest request){
  273. logger.debug("list方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
  274. CommonUtil.checkMap(params);
  275. PageUtils page = bingliService.queryPage(params);
  276. //字典表数据转换
  277. List<BingliView> list =(List<BingliView>)page.getList();
  278. for(BingliView c:list)
  279. dictionaryService.dictionaryConvert(c, request); //修改对应字典表字段
  280. return R.ok().put("data", page);
  281. }
  282. /**
  283. * 前端详情
  284. */
  285. @RequestMapping("/detail/{id}")
  286. public R detail(@PathVariable("id") Long id, HttpServletRequest request){
  287. logger.debug("detail方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
  288. BingliEntity bingli = bingliService.selectById(id);
  289. if(bingli !=null){
  290. //entity转view
  291. BingliView view = new BingliView();
  292. BeanUtils.copyProperties( bingli , view );//把实体数据重构到view中
  293. //级联表
  294. YonghuEntity yonghu = yonghuService.selectById(bingli.getYonghuId());
  295. if(yonghu != null){
  296. BeanUtils.copyProperties( yonghu , view ,new String[]{ "id", "createDate"});//把级联的数据添加到view中,并排除id和创建时间字段
  297. view.setYonghuId(yonghu.getId());
  298. }
  299. //级联表
  300. YishengEntity yisheng = yishengService.selectById(bingli.getYishengId());
  301. if(yisheng != null){
  302. BeanUtils.copyProperties( yisheng , view ,new String[]{ "id", "createDate"});//把级联的数据添加到view中,并排除id和创建时间字段
  303. view.setYishengId(yisheng.getId());
  304. }
  305. //修改对应字典表字段
  306. dictionaryService.dictionaryConvert(view, request);
  307. return R.ok().put("data", view);
  308. }else {
  309. return R.error(511,"查不到数据");
  310. }
  311. }
  312. /**
  313. * 前端保存
  314. */
  315. @RequestMapping("/add")
  316. public R add(@RequestBody BingliEntity bingli, HttpServletRequest request){
  317. logger.debug("add方法:,,Controller:{},,bingli:{}",this.getClass().getName(),bingli.toString());
  318. Wrapper<BingliEntity> queryWrapper = new EntityWrapper<BingliEntity>()
  319. .eq("yonghu_id", bingli.getYonghuId())
  320. .eq("yisheng_id", bingli.getYishengId())
  321. .eq("bingli_uuid_number", bingli.getBingliUuidNumber())
  322. .eq("bingli_name", bingli.getBingliName())
  323. .eq("bingli_types", bingli.getBingliTypes())
  324. .eq("bingli_zishu_text", bingli.getBingliZishuText())
  325. .eq("bingli_zhenduan_text", bingli.getBingliZhenduanText())
  326. .eq("bingli_yaofang_text", bingli.getBingliYaofangText())
  327. .eq("jiaofei_types", bingli.getJiaofeiTypes())
  328. // .notIn("bingli_types", new Integer[]{102})
  329. ;
  330. logger.info("sql语句:"+queryWrapper.getSqlSegment());
  331. BingliEntity bingliEntity = bingliService.selectOne(queryWrapper);
  332. if(bingliEntity==null){
  333. bingli.setInsertTime(new Date());
  334. bingli.setCreateTime(new Date());
  335. bingliService.insert(bingli);
  336. return R.ok();
  337. }else {
  338. return R.error(511,"表中有相同数据");
  339. }
  340. }
  341. }

如果也想学习本系统,下面领取。关注并回复:181springboot 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/599610
推荐阅读
相关标签
  

闽ICP备14008679号