上传文件

MultipartFile 流操作 flie.getInputStream()

  • 按照阿里云oss的上传文件的模板,采取流上传的方式,先创建oosclient实例,然后flie.getInputStream()
  • 为了保证上传文件不会重名,生成uuid和文件名进行拼接,
  • 按照当前日期,创建文件夹,上传到创建文件夹里面
// 创建OSSClient实例。OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);// 上传文件流。InputStream inputStream = file.getInputStream();String fileName = file.getOriginalFilename();//生成随机唯一值,使用uuid,添加到文件名称里面String uuid = UUID.randomUUID().toString().replaceAll("-","");fileName = uuid+fileName;//按照当前日期,创建文件夹,上传到创建文件夹里面//  2021/02/02/01.jpgString timeUrl = new DateTime().toString("yyyy/MM/dd");fileName = timeUrl+"/"+fileName;//调用方法实现上传ossClient.putObject(bucketName, fileName, inputStream);// 关闭OSSClient。ossClient.shutdown();//上传之后文件路径// https://yygh-atguigu.oss-cn-beijing.aliyuncs.com/01.jpgString url = "https://"+bucketName+"."+endpoint+"/"+fileName;//返回return url;

用户认证

在前端中写好阿里云oss的上传地址,用户认证的表单提交时,会将照片提交到阿里云oss中,表单提交时,调用saveUserAuah方法,将前端表单数据通过saveUserAuth接口调用后端userAuth方法将认证的信息存入本地。
具体的来说:

  • controller会通过request的token获取当前用户id
  • service层根据id查到对应的信息,然后设置用户的表单中的信息,最后更新到数据库中.
    //用户认证@Overridepublic void userAuth(Long userId, UserAuthVo userAuthVo) {//根据用户id查询用户信息UserInfo userInfo = baseMapper.selectById(userId);//设置认证信息//认证人姓名userInfo.setName(userAuthVo.getName());//其他认证信息userInfo.setCertificatesType(userAuthVo.getCertificatesType());userInfo.setCertificatesNo(userAuthVo.getCertificatesNo());userInfo.setCertificatesUrl(userAuthVo.getCertificatesUrl());userInfo.setAuthStatus(AuthStatusEnum.AUTH_RUN.getStatus());//进行信息更新baseMapper.updateById(userInfo);}


预约挂号页面调整(_hoscode.vue)

如果要预约挂号,我们必须要认证通过后才可以,所以我们在预约挂号前要做认证判断,如果没有认证通过,则跳转到认证页面。通过authStatus 属性进行判断,等于2就是认证通过。

      //判断用户是否完成认证userInfoApi.getUserInfo().then((response) => {let authStatus = response.data.authStatus;// 状态为2认证通过if (!authStatus || authStatus != 2) {window.location.href = "/user";return;}});

就诊人管理

需求分析

流程分析:假如我byy拿手机号或者微信扫码登录成功以后,然后通过实名认证,我byy也有许多patient,为了方便和byy相关的就诊人挂号,所以开发一个就诊人管理功能,实现查看认证用户所有就诊人,就诊人详情,增删改就诊人信息功能。
预约下单需要选择就诊人,因此我们要实现就诊人管理,前端就诊人管理其实就是要实现一个完整的增删改查

  • 获取就诊人列表 @GetMapping(“auth/findAll”) 这里的patient涉及到数据字典的信息,要想得到完整的信息,就要进行远程调用数据字典packPatient方法,获得本人和本人的认证用户的证件类型(身份证还是户口本),获得省市区信息
    @Overridepublic List<Patient> findAllUserId(Long userId) {//根据userid查询所有就诊人信息列表QueryWrapper<Patient> wrapper = new QueryWrapper<>();wrapper.eq("user_id",userId);List<Patient> patientList = baseMapper.selectList(wrapper);//通过远程调用,得到编码对应具体内容,查询数据字典表内容patientList.stream().forEach(item -> {//其他参数封装this.packPatient(item);});return patientList;}
    //Patient对象里面其他参数封装private Patient packPatient(Patient patient) {//根据证件类型编码,获取证件类型具体值String certificatesTypeString =dictFeignClient.getName(DictEnum.CERTIFICATES_TYPE.getDictCode(), patient.getCertificatesType());//联系人证件//联系人证件类型(非user本人)String contactsCertificatesTypeString =dictFeignClient.getName(DictEnum.CERTIFICATES_TYPE.getDictCode(),patient.getContactsCertificatesType());//省String provinceString = dictFeignClient.getName(patient.getProvinceCode());//市String cityString = dictFeignClient.getName(patient.getCityCode());//区String districtString = dictFeignClient.getName(patient.getDistrictCode());patient.getParam().put("certificatesTypeString", certificatesTypeString);patient.getParam().put("contactsCertificatesTypeString", contactsCertificatesTypeString);patient.getParam().put("provinceString", provinceString);patient.getParam().put("cityString", cityString);patient.getParam().put("districtString", districtString);patient.getParam().put("fullAddress", provinceString + cityString + districtString + patient.getAddress());return patient;}
  • 添加就诊人@PostMapping(“auth/save”)
  • 根据id获取就诊人信息 @GetMapping(“auth/get/{id}”),前端中做信息回显
  • 修改就诊人 @PostMapping(“auth/update”)
  • 删除就诊人 @DeleteMapping(“auth/remove/{id}”)

就诊人管理前端

  • 就诊人列表 index.vue
  • 添加就诊人 add.vue
  • 就诊人详情 show.vue

    在user/index.vue中,经过实名认证后会有就诊人管理的功能,点击会采用固定路由跳转到patient/index.vue中,在patient.vue中调用后端接口。

管理员对就诊人管理

后台管理员显示用户列表(条件查询带分页)

效果:

service-user的controller/UserController

//后台管理员显示用户列表(条件查询带分页)@GetMapping("{page}/{limit}")public Result list(@PathVariable Long page,@PathVariable Long limit,UserInfoQueryVo userInfoQueryVo) {Page<UserInfo> pageParam = new Page<>(page,limit);IPage<UserInfo> pageModel =userInfoService.selectPage(pageParam,userInfoQueryVo);return Result.ok(pageModel);}

前端部分:

  • 要对应到vue-admin-template-master先在src/api中新建userInfo.js,
  • 然后去router/index.js中添加路由,
  • 在views视图中新建user/userInfo/list.vue。

用户锁定和解锁

    @Overridepublic void lock(Long userId, Integer status) {if(status.intValue() == 0 || status.intValue() == 1) {UserInfo userInfo = this.getById(userId);userInfo.setStatus(status);this.updateById(userInfo);}}

管理员得到用户详情信息

根据id查到user的信息和所有patient信息,注意要调用packageUserInfo把状态数字转成对应的汉字
查询用户和认证信息时baseMapper.selectById,而查询认证用户的就诊人则是patientService.findAllUserId()方法

    @Overridepublic Map<String, Object> show(Long userId) {Map<String,Object> map = new HashMap<>();//根据userid查询用户信息UserInfo userInfo = this.packageUserInfo(baseMapper.selectById(userId));map.put("userInfo",userInfo);//根据userid查询就诊人信息List<Patient> patientList = patientService.findAllUserId(userId);map.put("patientList",patientList);return map;}

用户认证列表

authStatus 认证审批 2通过 -1不通过,根据id得到useInfo,然后传入authStatus更新

    //认证审批  2通过  -1不通过@Overridepublic void approval(Long userId, Integer authStatus) {if(authStatus.intValue()==2 || authStatus.intValue()==-1) {UserInfo userInfo = baseMapper.selectById(userId);userInfo.setAuthStatus(authStatus);baseMapper.updateById(userInfo);}}

按钮

     <el-buttontype="primary"size="mini"@click="approval(scope.row.id, 2)">通过</el-button><el-buttontype="danger"size="mini"@click="approval(scope.row.id, -1)">不通过</el-button>

审批方法

// 审批approval(id, authStatus) {// debuggerthis.$confirm("确定该操作吗?", "提示", {confirmButtonText: "确定",cancelButtonText: "取消",type: "warning",}).then(() => {// promise// 点击确定,远程调用ajaxreturn userInfoApi.approval(id, authStatus);}).then((response) => {this.fetchData(this.page);if (response.code) {this.$message({type: "success",message: "操作成功!",});}});},

审批逻辑

点击通过,authStatus状态变为2,并且会从认证用户列表中消失,这是因为在认证列表页面中,我们要获取待认证的用户进行显示,即authStatus==1的用户,所以提前给authStatus设默认值为1,调用getPageList:后台管理员显示用户列表(条件查询带分页),将authStatus=1作为UserInfoQueryVo查询的条件,查询符合要求的待认证数据回显

实名认证挂号订单就诊人管理管理员对就诊人管理相关推荐

  1. ZooKeeper管理员指南 部署和管理指南

    ZooKeeper管理员指南 部署和管理指南 PDF 部署 系统要求 支持的平台 必备软件 群集(多服务器)安装程序 单服务器和开发人员设置 管理 设计ZooKeeper部署 跨机器要求 单机要求 供 ...

  2. 虚拟机怎么查找服务器管理员,“你瞅瞅人王工家的VMware管理员~”

    原标题:"你瞅瞅人王工家的VMware管理员~" 你瞅瞅人王工家的VMware管理员,分分钟搞定工作负载管理,保护计划清晰,执行又到位.我就不明白,同样是九年义务教育,差距怎么这么 ...

  3. 无限制神器aria2懒人包及Aria2配置/Web管理面板教程

    Aria2是一款免费开源跨平台且不限速的多线程下载软件,Aria2的优点是速度快.体积小.资源占用少:支持 HTTP / FTP / BT / Magnet 磁力链接等类型的文件下载:支持 Win.M ...

  4. 59-硅谷课堂5-硅谷课堂-整合网关与订单 + 营销管理模块 + 公众号菜单管理

    59-硅谷课堂5-硅谷课堂-整合网关与订单和营销模块-- 笔记 笔记内容来源与尚硅谷教学视频 文章目录 59-硅谷课堂5-硅谷课堂-整合网关与订单和营销模块-- 笔记 笔记中涉及资源: 一.Sprin ...

  5. Swing+Mysql实现的学院管理系统(角色:学生、教师、管理员 功能包含学生管理、教师管理、班级管理、成绩管理、点名考勤系统、休闲游戏、校园通信、音乐系统、留言管理、专业管理等)

    博客目录 Swing+mysql的校园管理系统 实现功能截图 系统功能 使用技术 代码 写在最后 Swing+mysql的校园管理系统 本系统综合了校园管理的所有功能,一共分为三个角色:学生.教师.管 ...

  6. 从时间管理聊到技术人如何保持竞争力?

    最近时间管理这个词很火,想必大家瓜吃的也差不多,安琪拉吃瓜之余,也有所启发,思考总结了一下技术人如何做时间管理?如何在大环境恶劣的情况下依然保持竞争力?今天安琪拉和大家探讨如何才能在自己的专业领域做一 ...

  7. Axure高保真家政服务用户端app全局说明+家政服务员工移动端app+家政服务web端管理信息系统(订单管理+服务管理+报表统计+财务管理+营销管理+人员管理)

    作品介绍:把家政带入互联网,这也不算什么新鲜事了.这几年来,在手机下单,上门服务已经是常态.如今的消费已经是趋向于智能消费,例如不想做饭就可以叫外卖,出门不想开车就叫网约车.衣食住行可以靠一部智能手机 ...

  8. 百度万人协同规模下的代码管理架构演进

    互联网研发,唯快不破.为了提升公司整体研发效率,百度引入了业界的优秀工程实践,设计开发了一整套研发工具链.主要包括项目管理平台.代码开发协作平台和持续交付平台,分别针对需求.开发和交付场景,提供工具. ...

  9. 『征文精选』技术翻译与术语管理技术:专业人说专业话

    本文来自 SphereEx SIGs[Translation]组 XLM1226 同学在日常翻译工作中的心得体会,希望给大家带来启发. Technical Writing(技术写作)或称为 Techn ...

最新文章

  1. 安装VCenter提示数据库排序规则有问题
  2. 《NoSQL精粹》思维导图读书笔记
  3. eclipse 的快捷键
  4. webservice restful类型接口的调用实例
  5. Rhel7 设置目录权限,acl权限
  6. 热像仪 二次开发 c++_一种全新的红外热像仪——“可编程红外热像仪”
  7. Intellij IDEA 重置所有工具栏 Intellij IDEA 中的 Debug 控制台输出窗口不见了的解决办法
  8. Vue项目中遇到了大文件分片上传的问题
  9. 南京大学获赠1.2亿!
  10. linux 升级centos7,Linux之从Centos 6.x 升级Centos7
  11. DeepMind新突破:雷神之锤3战场AI夺旗,团战胜率超过人类
  12. document api java_GitHub - liuanxin/api-document: java spring-mvc document collect
  13. 使用Configuration Manager部署及管理软件更新(1)
  14. kotlin基本语法--kotlin官网文档学习
  15. FreeSWITCH之ESL接口
  16. 【转】常用单位换算表
  17. word文档中如何让正文分栏但是脚注不分栏
  18. java linest_不要再纠结in和exists——JAVA伪代码直白分析二者时间复杂度
  19. Unity事件分发器
  20. 在线支付支付宝(一)之开发者账号申请

热门文章

  1. 【Scala】学习笔记三——面向对象
  2. 基于路网和GeoPandas的高斯两步移动搜索法可达性分析
  3. 基于JAVAWeb好好吃查询系统计算机毕业设计源码+数据库+lw文档+系统+部署
  4. 0ctf2018_heapstorm2_reproduce
  5. Python对pkl读写操作
  6. K-hop消息传递图神经网络的表达能力有多强?
  7. 读书笔记《硬件十万个为什么——开发流程篇》
  8. 关于-3db截止频率
  9. SF21 | 利用PSY指标,我们来开发一个短线模型?
  10. 史上最全的应用市场联系人资料