尚医通项目总结

后台系统:

医院设置管理开发:
完成医院设置列表的,增加,删除,修改,查询功能(Mysql)
数字字典开发:
完成数据字典的展示,并且由于是不经常修改的数据(采用Spring Cache + Redis 缓存数据,提高查询速度),并且通过EasyExcel,进行导出导入数据。
医院管理开发:
列表功能 上线功能 详情功能 排版信息 分为以上四大块
1.列表功能开发
其中列表功能,需要调用远程服务(所以使用了Nacos方案,进行注册,然后将Hosp-Cmn模块在添加到Feign中,就可以实现远程调用Hosp-Cmn模块,比如在Hosp-Set模块中就可以调用Hosp-Cmn)其中医院基本信息是在MogoDB中的,所以使用的是MogoDB查询出基本数据,医院等级信息是在Cmn模块中,即数据字典模块中的,所以使用了远程调用。
其中Nacos,Fegin的使用可以去看看
2.上线功能开发,其实就是一个按钮,只需要根据id查询出医院,然后传入一个状态值就好了比较简单。
3.详情功能开发
直接根据传入一个id,查询出医院的详情信息,返回给前端即可,也比较简单。
4. 排版信息模块开发(一共三个小模块)
1、科室信息(大科室与小科室树形展示)
2、排班日期,分页显示,根据上传排班数据聚合统计产生
3、排班日期对应的就诊医生信息
首先是科室列表小模块开发根据医院编号,查询医院所有科室列表,按照树形结构显示。采取的方案是根据大科室编号,bigcode分组,获取每个大科室里面下的子分组。采用的是jdk1.8提供流的方式,先提取出大科室,在将小科室数据,封装在,大科室里面,具体可以看看这块的代码实现。
就是上述树形结构
接着是排班小版块开发,大概逻辑是,根据医院编号 和 科室编号 查询数据,然后根据workDate进行分组处理,最后得到相应数据。p95可以看看具体逻辑。
最后的效果图

最后是排班日期对应的就诊医生信息小模块的开发,大概逻辑是根据医院编号和科室编号,查询排班规则数据。p97	

完成后的效果可以看看

	开发完后的模版图片展示,不太齐全,勉强看看。

在这里插入图片描述
接下来是整合了服务网关,Spring Cloud Gateway,主要解决了两个问题,一个就是代替了Nginx,还有一个就是解决了跨域问题,不用在每个controller,接口加@CrossOrigin注解。

p101开始主要做的是前台用户系统。

前台用户系统

1,获取医院等级(根据数据字典编码获取)
2,获取地区(根据数据字典编码获取)
3,医院分页列表
4,根据医院名称关键字搜索医院列表

完成后功能类似如下
接下来就是点击某个医院进入,详情页面。完成了如下接口:
1.@ApiOperation(value = “根据医院编号获取科室”)
2.@ApiOperation(value = “根据医院编号获取医院预约挂号详情”)

完成之后图片如下
接下来做的是上图,医院详情,和预约须知,完成相应前端的实现。
其实很多接口的方法,在之前后台管理系统中的医院管理开发中已经实现,只需要在HospApiController在写一遍,或者稍做修改就好了。

接下来是,点击科室,进入到预约挂号功能,实现前提是需要实现登陆功能,不然不知道谁挂号之类的。
登陆功能
搭建service-hosp模块
手机号登陆
大概逻辑 :从loginVo获取输入的手机号,和验证码→ 判断手机号和验证码是否为空→判断手机验证码和输入的验证码是否一致→判断是否第一次登录:根据手机号查询数据库,如果不存在相同手机号就是第一次登录(就将信息插入到数据中去)存在则直接登陆→返回登录信息,返回登录用户名,返回Token信息
token大概意思就是,每次做操作就会进行判断,将token信息,存储到一个字符串中,看字符串中是否存在该信息,存在即可操作,可以设置一个token过期时间。当然也可以用session做这样的功能。当然token可以放在请求头中传递,cookie中传递,或者地址栏中传递都可以。
token大概逻辑搭建了service-msm模块
发送手机验证码接口开发
即阿里云短信服务,使用了redis来控制短信验证码的时间,大概逻辑是传入一个手机号,然后去redis中查看是否存在验证码,如果存在就返回ok。如果不存在,就生成验证码,通过整合短信服务进行发送,生成验证码放到redis里面,设置有效时间。
总结这登陆,和发送这两个模块,是先进行发送短信,然后进行登陆的,不要把顺序搞反了。
前端登陆模块系统:
==这时候前端要做的事
在这里插入图片描述
目前的问题是,我们在预约挂号页面,选择科室去挂号时我们需要判断当前是否登录,如果登录可以进入下一个页面;如果没有登录需要显示登录层,那么这个问题怎么解决呢,我们不能直接调用头部登录方法,我们目前的组件是包含在nuxt里面的
问题总是能够解决的,其实很简单,我们可以注册一个全局登录事件,当需要登录层是,我们发送一个登录事件,头部监听登录事件,然后我们触发登录按钮的点击事件即可打开登录层,下面我们来试试。
解决的方法是,引入一个全局登陆事件,来监听登陆事件。
解决全局登陆事件
用户认证与网关整合
这时候需要进行,网关整合,因为所有的需求都需要经过,网关。我们需要对一些接口,必须要登陆了才能访问。如果没有登陆,访问这个接口的时候就跳到登陆界面。
思路:
1.所有请求都会经过服务网关,服务网关对外暴露服务,在网关进行统一用户认证;
2.既然要在网关进行用户认证,网关得知道对哪些url进行认证,所以我们得对ur制定规则
3.Api接口异步请求的,我们采取url规则匹配,如:/api//auth/,如凡是满足该规则的都必须用户认证
微信登录被省去

阿里云oss
实际中我们登陆一个网站,但是想要完成某些操作,就必须进行实名认证信息。认证的信息,图片之类的就存在这个阿里云oss。
yygh-oss模块
其中开发了:上传文件到阿里云oss接口,通过MultipartFile file可以获得提取来的数据。
在这里插入图片描述
其中做了一些细节处理,通过生成uuid,加到文件名称中区,让文件名称不重复。并且按照当前日期,创建文件夹,上传到创建文件夹里面。

接下来完善开发了service_user模块
1.用户认证接口
/传递两个参数,第一个参数用户id,第二个参数认证数据vo对象大概逻辑
2.//获取用户id信息接口
比较简单,就是传个id,就能够获取到用户的所有信息既可。
接下来进行,就诊人模块开发。
就诊人管理模块
预约下单需要选择就诊人,因此我们要实现就诊人管理,前端就诊人管理其实就是要实现一个完整的增删改查。在yygh-user模块中开发,即PatientApiController。
主要做的就是就诊人的增删改查。
1.获取就诊人列表
其中用到了feign,要调用cmn中的接口,主要做的是根据证件类型编码,证件类型,获取证件类型具体值
2. 添加就诊人
比较简单,传入对象,和http请求。然后通过request获取当前登录用户id,然后将这个id设置到对象中去,然后插入数据库。
3. 根据id获取就诊人信息
4. 修改就诊人
5. 删除就诊人
都比较简单

后台系统-平台用户管理
前面我们做了用户登录、用户认证与就诊人,现在我们需要把这些信息在我们的平台管理系统做一个统一管理,这个是在后台管理系统中的。
操作模块:service-user UserController
1.//用户列表(条件查询带分页)
2.//用户锁定
3. //用户详情
4. //认证审批
完成用户列表功能展示

完成用户审批列表功能展示
整合完这些接下来就是核心的预约挂号模块了!

预约挂号模块-
hospapicontroller中完成
1、接口分析
(1)根据预约周期,展示可预约日期数据,按分页展示
(2)选择日期展示当天可预约列表(该接口后台已经实现过)
2、页面展示分析
(1)分页展示可预约日期,根据有号、无号、约满等状态展示不同颜色,以示区分
(2)可预约最后一个日期为即将放号日期,根据放号时间页面展示倒计时
完成后应该显示的效果图
需要完成如下接口:
1.获取可预约排班数据
大致逻辑就是,首先需要传递四个参数进接口(当前页码 page,每页记录数 limit,医院code hashcode,科室code depcode)→根据医院编号获取到医院数据(医院数据是在MongoDB中的)然后提取里面的预约数据→
将预约数据做一个分页处理。
其中获取可预约日志分页数据做了细节处理,首先获取到当天放号时间,年月日,小时分钟。→获取预约周期(比如说能预约3月1日到7日的号)如果当天放号时间已经过去了,预约周期从后一天开始计算,周期+1→获取可预约所有日期,最后一天显示即将放号(其中显示做了细节处理//因为预约周期不同的,每页显示日期最多7天数据,超过7天分页:如果可以显示数据小于7,直接显示,如果可以显示数据大于7,进行分页)→接下来获取可预约日期里面科室的剩余预约数(需要同时满足三个条件,hoscode,depcode,workDate 最后实现的事情就是根据workData分组,求和可预约数量和放号数量)→得到两处数据之后合并这两个数据(用一个map集合存储:合并数据 map集合 key日期 value预约规则和剩余数量等具体细节看接口)→最后将数据放入map集合,并且将其他基础数据放入map集合。
MongoDB数据
2.预约确认接口
1、根据排班id获取排班信息,在页面展示
2、选择就诊人
3、预约下单
要明白给谁预约,就是给就诊人
获取排班id获取排班数据
3.预约下单模块
service-order模块 OrderApiController
下单参数:就诊人id与排班id
1、下单我们要获取就诊人信息
2、获取排班下单信息与规则信息
3、获取医院签名信息,然后通过接口去医院预约下单
4、下单成功更新排班信息与发送短信
接口:
1.//生成挂号订单
首先在service-user里的PatientApiController根据id获取就诊人信息然后添加到feign中去→然后再OrderApiController远程调用→然后在service-hosp里的HospApiController根据排班id获取预约下单数据添加到feign中去→然后service-hosp里的HospApiController获取医院签名信息需要做个比对,这个数据是在hosptitalset里的sign_key,最后将数据封装在SignInfoVo(签名信息实体类)里面返回同样添加到feign。
下面正式开始生成挂号订单OrderApiController→//获取就诊人信息 //获取排班相关信息 //判断当前时间是否还可以预约 //获取签名信息 //添加到订单表(OrderInfo实体类 里面是具体订单信息) //scheduleOrderVo 数据复制到 orderInfo //向orderInfo设置其他数据 //调用医院接口,实现预约挂号操作 //设置调用医院接口需要参数,参数放到map集合 //请求医院系统接口(通过 HttpRequestHelper工具类来请求,此时可以立即更新消息预约数量等 但可能会有频繁变动交给mq比较好 //发送mq消息,号源更新和短信通知 //发送mq信息更新号源)
mq首先做了一个短信的封装,mq发送短信封装。然后创建短信监听器(在service_msm MsmReceiver模块),监听到相关信息后,就发送短信。然后做了一个更新排班数量的封装(在service_hosp HospitalReceiver模块),监听到相关信息后,就发送短信。
接下来继续,在OrderMqVo实体类设置 可预约数 剩余预约数 排班id→然后进行短信提示 在MsmVo实体类
设置就诊人手机号,短信模版参数。再将MsmVo实体设置到OrderMqVo里的MsmVo。然后发送消息。
总结逻辑就是,封装消息,发送到指定消息队列,等待监听器监听并消费消息,实现预约下单之后短信发送。
order是生产者,msm和hosptital模块是消费者,order发送到两个模块接受。
首先下单→预约下单mq监听器接受更新排版信息→在通过mq发送短信→短信mq监听器接收,做发送短信操作。

在这里插入图片描述
点击确认挂号后要显示订单详情数据
下面做这个接口开发 //根据订单id查询订单详情比较简单。
完成后跳转到待支付页面
下面做一个订单列表功能,参考用户列表带分页
订单列表功能完成
有了订单之后就需要支付,微信支付(WeiXinController)。首先生成微信支付二维码, //1 根据orderId获取订单信息,//2 向支付记录表添加信息→3.然后设置参数,调用微信生成二维码接口,把参数转化成xml格式,使用商户key进行加密→4 调用微信生成二维码接口,httpclient调用 设置map参数→5 返回相关数据 转换map集合→封装返回结果集 codeUrl是二维码地址(对返回结果加入到redis中去,做一个超时时间限制,就是二维码有效期)
调用查询支付状态,通过微信接口实现支付状态查询,支付成功则更新状态信息(//1 根据订单编号得到支付记录 //2 更新支付记录信息 //3 根据订单号得到订单信息 //4 更新订单信息 //5 调用医院接口,更新订单支付信息)整体流程
取消预约模块
取消订单分两种情况:
1、未支付取消订单,直接通知医院更新取消预约状态
2.已支付取消订单,先退款给用户,然后通知医院更新取消预约状态
退款我们是根据支付记录发起退款的→首先在接口传入一个orderId→然后获取支付记录信息需要两个参数分别是orderId和支付类型这里选择微信支付类型→然后添加退款信息到退款记录表去(会判断退款信息表是否重复,如果数据库有相同的则不添加)→判断当前订单数据是否已经退款 没有就调用微信接口实现退款 通过HttpClient发送(封装需要的参数)→然后接收返回回来的数据如果退款成功就更新退款状态之类的信息。
下面开始开发Controller部分 OrderApiController开发 //取消预约
在这里插入图片描述
首先是传入orderId即订单id→然后获取订单信息 判断是否可以取消因为有一个时间限制过了就不能取消如果过了就抛出异常→然后//调用医院接口实现预约取消 //根据医院接口返回数据→然后判断是否成功 如果成功 则判断当前订单是否可以取消 如果未支付就不用退钱 已支付就退钱→调用刚才写的退款方法 成功后→更新订单状态 将orderInfo里的状态信息 更新为取消状态→然后发送mq更新预约数量这时候需要+1了

就医提醒模块
我们通过定时任务,每天8点执行,提醒就诊 service_task模块 →
首先发送消息到相应的消息队列→然后在OrderReceiver添加一个监听 监听到就会调用监听器下面的方法来实现我们的功能→然后封装条件(当天的 然后消息未被取消的满足这两个)返回满足条件的订单信息集合→遍历他像通过rabbitservice 像每一个就诊人发送就医提醒
整体逻辑就是,每天八点会执行一个定时任务向rabbitmq对应队列(QUEUE_TASK_8)发送一个消息,然后在Order里面写上一个mq的监听器监听这个队列→队列中有消息之后然后封装条件(当天的 然后消息未被取消的满足这两个)返回满足条件的订单信息集合→遍历他像通过rabbitservice 像每一个就诊人发送就医提醒

  • 5
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值