oss 模块搭建与实现

这里采用的方式是通过后端传 oss,可以对比下 谷粒商城里面的,从后端拿上传凭证,然后前端直传的方式

<dependency><groupId>joda-time</groupId><artifactId>joda-time</artifactId>
</dependency><!-- 阿里云oss依赖 -->
<dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId>
</dependency>

配置文件

server.port=8207spring.application.name=service-ossspring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=GMT+8spring.cloud.nacos.discovery.server-addr=localhost:8848aliyun.oss.endpoint=oss-cn-hangzhou.aliyuncs.com
aliyun.oss.accessKeyId=LTAI5tCvwJjdKorLjaS9ynds
aliyun.oss.secret=xxxx
aliyun.oss.bucket=xxxx

配置常量读取

@Component
public class ConstantOssPropertiesUtils implements InitializingBean {@Value("${aliyun.oss.endpoint}")private String endpoint;@Value("${aliyun.oss.accessKeyId}")private String accessKeyId;@Value("${aliyun.oss.secret}")private String secret;@Value("${aliyun.oss.bucket}")private String bucket;public static String EDNPOINT;public static String ACCESS_KEY_ID;public static String SECRECT;public static String BUCKET;@Overridepublic void afterPropertiesSet() throws Exception {EDNPOINT = endpoint;ACCESS_KEY_ID = accessKeyId;SECRECT = secret;BUCKET = bucket;}
}

Service 核心实现

@Service
public class FileServiceImpl implements FileService {//获取上传文件@Overridepublic String upload(MultipartFile file) {// yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。String endpoint = ConstantOssPropertiesUtils.EDNPOINT;// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。String accessKeyId = ConstantOssPropertiesUtils.ACCESS_KEY_ID;String accessKeySecret = ConstantOssPropertiesUtils.SECRECT;String bucketName = ConstantOssPropertiesUtils.BUCKET;try {// 创建OSSClient实例。OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);// 获取文件流InputStream inputStream = file.getInputStream();String filename = file.getOriginalFilename();//为防止文件名重复造成文件覆盖,生成随机值,添加到文件中String uuid = UUID.randomUUID().toString().replaceAll("-","");filename = uuid + filename;//按照当前日期创建文件夹,上传到当前文件夹里面  /2021/02/01/01.jpgString timeUrl = new DateTime().toString("yyyy/MM/dd");filename = timeUrl + "/" + filename;// 调用方法,实现上传  参数2为上传文件(路径+)名称ossClient.putObject(bucketName, filename, inputStream);// 关闭OSSClient。ossClient.shutdown();// 返回上传后文件路径// 例:https://yygh-atguigu-li.oss-cn-beijing.aliyuncs.com/qq.jpgString url = "https://" + bucketName + "." + endpoint + "/" + filename;return url;} catch (IOException e) {e.printStackTrace();return null;}}
}

controller

@RestController
@RequestMapping("/api/oss/file")
public class FileApiController {@Autowiredprivate FileService fileService;//上传文件到阿里云@PostMapping("fileUpload")public Result fileUpload(MultipartFile file){  //通过MultipartFile可以得到上传文件//获取上传文件String url = fileService.upload(file);  //上传后得到路径return Result.ok(url);}
}

用户认证功能实现

用户登录成功后都要进行身份认证,认证通过后才可以预约挂号

认证过程:用户填写信息(姓名、证件类型、证件号码和证件照片)==> 平台审批

用户认证设计接口:

1、提交认证

2、上传证件图片

3、获取提交认证信息

后端实现

service

@Overridepublic void userAuth(Long userId, UserAuthVo userAuthVo) {//1.根据用户id查询用户信息UserInfo userInfo = baseMapper.selectById(userId);//2.设置认证信息//认证人姓名userInfo.setName(userAuthVo.getName());//其他认证信息userInfo.setCertificatesType(userAuthVo.getCertificatesType());userInfo.setCertificatesNo(userAuthVo.getCertificatesNo());userInfo.setCertificatesUrl(userAuthVo.getCertificatesUrl());userInfo.setAuthStatus(AuthStatusEnum.AUTH_RUN.getStatus());//3.进行信息更新baseMapper.updateById(userInfo);}

用户信息解析

public class AuthContextHolder {//获取当前用户idpublic static Long getUserId(HttpServletRequest request) {//从header中获取tokenString token = request.getHeader("token");//从token中获取useridLong userId = JwtHelper.getUserId(token);return userId;}//获取当前用户名称public static String getUserName(HttpServletRequest request) {//从header中获取tokenString token = request.getHeader("token");//从token中获取useridString userName = JwtHelper.getUserName(token);return userName;}
}

接口实现

@ApiOperation("用户认证接口")@PostMapping("auth/userAuth")public Result userAuth(@RequestBody UserAuthVo userAuthVo, HttpServletRequest request) {// 传递 用户id 和 认证数据vo对象userInfoService.userAuth(AuthContextHolder.getUserId(request), userAuthVo);return Result.ok();}@ApiOperation("获取用户id信息接口")@GetMapping("auth/getUserInfo")public Result getUserInfo(HttpServletRequest request) {Long userId = AuthContextHolder.getUserId(request);UserInfo userInfo = userInfoService.getById(userId);return Result.ok(userInfo);}

前端实现

//用户认证接口
saveUserAuth(userAuth) {return request({url: `${api_name}/auth/userAuth`,method: 'post',data: userAuth})
},
//根据userid获取用户信息
getUserInfo() {return request({url: `${api_name}/auth/getUserInfo`,method: `get`})
},
<template><!-- header --><div class="nav-container page-component"><!--左侧导航 #start --><div class="nav left-nav"><div class="nav-item selected"><spanclass="v-link selected dark"οnclick="javascript:window.location='/user'">实名认证</span></div><div class="nav-item"><spanclass="v-link selected dark"οnclick="javascript:window.location='/order'">挂号订单</span></div><div class="nav-item"><spanclass="v-link clickable dark"οnclick="javascript:window.location='/patient'">就诊人管理</span></div><div class="nav-item"><span class="v-link clickable dark"> 修改账号信息 </span></div><div class="nav-item"><span class="v-link clickable dark"> 意见反馈 </span></div></div><!-- 左侧导航 #end --><!-- 右侧内容 #start --><div class="page-container"><div><div class="title">实名认证</div><div class="status-bar"><div class="status-wrapper"><span class="iconfont"></span>{{ userInfo.param.authStatusString }}</div></div><div class="tips"><span class="iconfont"></span>完成实名认证后才能添加就诊人,正常进行挂号,为了不影响后续步骤,建议提前实名认证。</div><div class="form-wrapper" v-if="userInfo.authStatus == 0"><div><el-form:model="userAuah"label-width="110px"label-position="left"><el-form-item prop="name" label="姓名:" class="form-normal"><div class="name-input"><el-inputv-model="userAuah.name"placeholder="请输入联系人姓名全称"class="input v-input"/></div></el-form-item><el-form-item prop="certificatesType" label="证件类型:"><el-selectv-model="userAuah.certificatesType"placeholder="请选择证件类型"class="v-select patient-select"><el-optionv-for="item in certificatesTypeList":key="item.value":label="item.name":value="item.name"></el-option></el-select></el-form-item><el-form-item prop="certificatesNo" label="证件号码:"><el-inputv-model="userAuah.certificatesNo"placeholder="请输入联系人证件号码"class="input v-input"/></el-form-item><el-form-item prop="name" label="上传证件:"><div class="upload-wrapper"><div class="avatar-uploader"><el-uploadclass="avatar-uploader":action="fileUrl":show-file-list="false":on-success="onUploadSuccess"><div class="upload-inner-wrapper"><imgv-if="userAuah.certificatesUrl":src="userAuah.certificatesUrl"class="avatar"/><i v-else class="el-icon-plus avatar-uploader-icon"></i><div v-if="!userAuah.certificatesUrl" class="text">上传证件合照</div></div></el-upload></div><imgsrc="//img.114yygh.com/static/web/auth_example.png"class="example"/></div></el-form-item></el-form><div class="bottom-wrapper"><div class="button-wrapper"><div class="v-button" @click="saveUserAuah()">{{ submitBnt }}</div></div></div></div></div><div class="context-container" v-if="userInfo.authStatus != 0"><div><el-form:model="formData"label-width="110px"label-position="right"><el-form-item prop="name" label="姓名:" class="form-normal"><div class="name-input">{{ userInfo.name }}</div></el-form-item><el-form-item prop="name" label="证件类型:">{{ userInfo.certificatesType }}</el-form-item><el-form-item prop="name" label="证件号码:">{{ userInfo.certificatesNo }}</el-form-item></el-form></div></div></div></div><!-- 右侧内容 #end --><!-- 登录弹出框 --></div><!-- footer -->
</template><script>
import "~/assets/css/hospital_personal.css";
import "~/assets/css/hospital.css";
import "~/assets/css/personal.css";import dictApi from "@/api/dict";
import userInfoApi from "@/api/userInfo";const defaultForm = {name: "",certificatesType: "",certificatesNo: "",certificatesUrl: "",
};
export default {data() {return {userAuah: defaultForm,certificatesTypeList: [],fileUrl: "http://localhost:81/api/oss/file/fileUpload",userInfo: {param: {},},submitBnt: "提交",};},created() {this.init();},methods: {init() {this.getUserInfo();this.getDict();},getUserInfo() {userInfoApi.getUserInfo().then((response) => {this.userInfo = response.data;});},saveUserAuah() {if (this.submitBnt == "正在提交...") {this.$message.info("重复提交");return;}this.submitBnt = "正在提交...";userInfoApi.saveUserAuth(this.userAuah).then((response) => {this.$message.success("提交成功");window.location.reload();}).catch((e) => {this.submitBnt = "提交";});},getDict() {dictApi.findByDictCode("CertificatesType").then((response) => {this.certificatesTypeList = response.data;});},onUploadSuccess(response, file) {if (response.code !== 200) {this.$message.error("上传失败");return;}// 填充上传文件列表this.userAuah.certificatesUrl = file.response.data;},},
};
</script>
<style>
.header-wrapper .title {font-size: 16px;margin-top: 0;
}
.content-wrapper {margin-left: 0;
}
.patient-card .el-card__header .detail {font-size: 14px;
}
.page-container .title {letter-spacing: 1px;font-weight: 700;color: #333;font-size: 16px;margin-top: 0;margin-bottom: 20px;
}
.page-container .tips {width: 100%;padding-left: 0;
}
.page-container .form-wrapper {padding-left: 92px;width: 580px;
}
.form-normal {height: 40px;
}
.bottom-wrapper {width: 100%;padding: 0;margin-top: 0;
}
</style>

上传文件报错

oss模块添加配置

spring.servlet.multipart.max-file-size=500MB
spring.servlet.multipart.max-request-size=500MB

预约挂号页面调整

预约挂号前验证 是否实名认证

// 预约schedule(depcode) {// 登录判断let token = cookie.get("token");if (!token) {loginEvent.$emit("loginDialogEvent");return;} //判断认证userInfoApi.getUserInfo().then((response) => {let authStatus = response.data.authStatus; // 状态为2认证通过if (!authStatus || authStatus != 2) {window.location.href = "/user";return;}});window.location.href ="/hospital/schedule?hoscode=" +this.hospital.hoscode +"&depcode=" +depcode;},

就诊人管理

预约下单需要选择就诊人,因此我们要实现就诊人管理,前端就诊人管理其实就是要实现一个完整的增删改查

user 远程调用 cmn 模块,查看数据字典

这个功能需要提一下的这块的处理,对于数据的封装,所有的基础资料只存了 code, 剩余的信息远程调用 cmn 模块获取,重点注意下这里的

//根据登录用户id获取就诊列表@Overridepublic List<Patient> findAllUserId(Long userId) {//据登录用户id查询所有就诊人信息列表QueryWrapper<Patient> wrapper = new QueryWrapper<>();wrapper.eq("user_id", userId);List<Patient> patientList = baseMapper.selectList(wrapper);//通过远程调用得到部分编码对应的具体内容,查询数据字典表中的内容  例如 编号2000对应的是身份证方式patientList.stream().forEach(item -> {this.packPatient(item);  //将param中的一些属性封装进patient中});return patientList;}//将param中的一些属性封装进patient中private Patient packPatient(Patient patient) {//根据证件类型,获取证件类型名称String certificatesTypeString = dictFeignClient.getName(DictEnum.CERTIFICATES_TYPE.getDictCode(), patient.getCertificatesType());//联系人证件类型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;}

其他代码可自行参考资料中的代码

做完之后的效果

用户管理

前面我们做了用户登录、用户认证与就诊人,现在我们需要把这些信息在我们的平台管理系统做一个统一管理

除去增删查改还有 锁定,认证审批接口,也比较常规,简单看下效果,代码就不看了

尚医通-阿里云OSS、用户认证与就诊人相关推荐

  1. 尚医通-阿里云短信服务(二十九)

    目录: (1)前台用户系统-手机登录-阿里云短信服务介绍 (2)手机登录-整合短信服务 (3)整合短信发送服务测试 (1)前台用户系统-手机登录-阿里云短信服务介绍 现在使用阿里云完成短信服务:注册登 ...

  2. 07-整合阿里云oss用户认证就诊人CRUD平台统一管理用户

    文章目录 一.整合oss 1.注册开通阿里云oss 2.获取我们必须的参数 3.进入JavaSDK学习使用上传文件 (1)引入依赖 (3)文件上传(流式文件上传) 4.项目整合OSS (1)创建OSS ...

  3. 14 医疗挂号系统_【阿里云OSS、用户认证与就诊人】

    阿里云oss 用户认证需要上传证件图片.首页轮播也需要上传图片,因此我们要做文件服务,阿里云oss是一个很好的分布式文件服务系统,所以我们只需要集成阿里云oss即可 1.开通"对象存储OSS ...

  4. 尚医通 (二十)就诊人用户管理 | 平台用户管理

    目录 一.就诊人管理需求和接口开发 1.需求 2.就诊人管理接口 二.就诊人管理前端整合 1.封装api请求 2.就诊人列表 3.就诊人添加与修改 4.就诊人详情与删除 三.平台用户管理-用户列表 1 ...

  5. 尚医通项目笔记--包括每个接口对应页面的图片

    废话不多说,直接上图 博客目录结构 工程目录结构 yygh-parent根目录common公共模块父节点common-util公共工具类rabbit-util业务封装RabbitMQservice-u ...

  6. Day114.尚医通:用户认证、阿里云OSS、就诊人管理

    目录 一.阿里云对象存储OSS 二.整合对象存储OSS 1.项目搭建 2.接口开发 三.用户认证 1.接口实现 2.前端实现 四.就诊人管理-接口实现 五.就诊人管理-前端实现 1.实现查询页面 2. ...

  7. 尚医通项目124-149:微信登录以及阿里云OSS的使用

    开始时间:2022-06-17 课程链接:尚医通项目 微信登录 OAuth2 开放系统间授权 照片拥有者想要在云冲印服务上打印照片,云冲印服务需要访问云存储服务上的资源 方式一:用户名密码复制:将受保 ...

  8. 尚医通 (十九)用户认证

    目录 一.对象存储OSS 1.开通"对象存储OSS"服务 2.创建Bucket 3.上传默认头像 4.创建RAM用户 5.使用SDK 二.后端集成OSS 1.新建云存储微服务 2. ...

  9. 尚医通项目101-123:前台用户系统、登录注册、邮箱登录

    开始时间:2022-05-30 课程链接:课程链接:[尚医通] 前端页面 需要完成医院等级.地区查询.医院列表.医院名称模糊查询等功能 按等级查询 按地区查询 模糊查询 并能跳转到具体详情页面 跳转到 ...

最新文章

  1. Hyper-v Server重复数据删除技术
  2. Openstack 实现技术分解 (1) 开发环境 — Devstack 部署案例详解
  3. POJ1324贪吃蛇(状态压缩广搜)
  4. 华为手机asph啥机型_华为正式宣布!19款机型开启新系统内测,你的手机榜首有名吗?...
  5. yolov4Linux,基于Darknet的YOLOv4目标检测
  6. 小程序保存base64类型图片和普通图片实例
  7. 初中数学抽象教学的案例_初中数学课堂片段教学案例分析
  8. Web前端-JavaScript基础教程下
  9. Android 2.3 版本中链接边框问题解决
  10. mysql loader_Mysql的批量导入类 MySqlBulkLoader
  11. 斐波那契java_递归之斐波那契数列java的3种方法
  12. 设备划分冲突域和广播域
  13. 字道-最美中国字硬笔书法教学|培养孩子正确的执笔写字姿势有多重要?看完你就明白了!
  14. Golang语言移植-ARM开发环境搭建
  15. 完美解码播放器(PotPlayer)关闭自动播放下一首的方法(找了好久)
  16. JsDelivr CDN缓存刷新工具-缓存清除-缓存更新
  17. 用震盘实现中性笔这一大类笔的笔帽的定向上料设计(SolidWorks模型讲解)
  18. Java 爬取微信公众号文章(文字 + 图片)
  19. 网页成品——手表商城网站模板源码(17页) web期末作业设计网页_手表商城网页设计作业成品
  20. 2020年蓝旭工作室暑期前端培训班Day1——HTML5 CSS3

热门文章

  1. [其他] 如何在音乐网站下载音频,无需任何插件
  2. flickr php,6.4 使用PHP调用基本的Flickr API方法
  3. 网络购车平台“一成首付”又出新模式
  4. LeetCode 796. 旋转字符串
  5. Android 屏幕常亮 背景常亮
  6. CNN中为什么普遍使用小卷积核
  7. 201571030301/201571030302《小学生四则运算练习软件》结对项目报告
  8. 机器学习西瓜书学习——绪论
  9. Android studio 实现打电话发短信浏览网页功能 android开发小实验
  10. 初次使用PostgreSQL