尚医通笔记-前台用户系统

1.首页

展示内容
(1)获取医院等级(根据数据字典编码获取),
(2)获取地区(根据数据字典编码获取)
(3)医院分页列表(后台已经做过 SelectHospList)
(4)根据医院名称关键字搜索医院列表
在这里插入图片描述
医院列表已经做过,直接调用即可。SelectHospList
根据医院名称模糊查询,直接调用mongorepostory的方法查询
在这里插入图片描述
另外两个根据数据字典查询,findByDictcode

2.医院详情 (HospitalApiController)

点击医院进到医院详情界面
1.获取医院预约规则
2.获取医院科室
controller
在这里插入图片描述
service
获取科室后台系统已经做过,直接调用 findDeptTree
获取医院的预约规则

    @Override
    public Map<String, Object> item(String hoscode) {
        Map<String, Object> result = new HashMap<>();
        //医院详情
        Hospital hospital = this.setHospitalHosType(this.getByHoscode(hoscode));
        result.put("hospital", hospital);
        //预约规则
        result.put("bookingRule", hospital.getBookingRule());
        //不需要重复返回
        hospital.setBookingRule(null);
        return result;
    }

3.用户登录

数据库 mysql yygh_user
模块 service_user
接口:userinfoApicontroller
方法:login

流程:查询传过来的手机号和验证码,进行校验,jwt生成token。
短信模块:service_msm.
点击获取验证码,发送短信,实际就是生成一个随机的6位数,存到redis,有效期为2分钟,校验的时候,从前端获取的和redis做对比,一样说明正确。

4.用户认证

模块:service_user
接口:UserInfoApiController
数据库:mysql user_info
前端填完认证信息,传给接口,根据传过来的用户id查找用户,将传过来的认证信息填加到用户信息中,然后更新数据库。

    //用户认证
    @Override
    public 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);
    }

5.就诊人管理

对就诊人的增删改查
数据库:yygh_user patient
模块: service-user
接口:PatientApiController
也要调用数据字典接口,封装就诊人信息,比如证件类型之类的。
(1)根据当前登录的用户id获取所有的就诊人列表

    //获取就诊人列表
    @Override
    public 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;
    }

packPatient方法

    //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;
    }

(2)添加就诊人
获取请求中的用户id

    //添加就诊人
    @PostMapping("auth/save")
    public Result savePatient(@RequestBody Patient patient,HttpServletRequest request) {
        //获取当前登录用户id
        Long userId = AuthContextHolder.getUserId(request);
        patient.setUserId(userId);
        patientService.save(patient);
        return Result.ok();
    }

(3)删除和修改就诊人

6.用户列表

属于后台系统
模块:service_user
接口:UserController

1.查询用户列表:方法 list
Mybatisplus的条件分页查询。
2.锁定,先根据传过来的id获取用户信息,再将传过来的状态更新,然后再更新数据库。
3.查看用户详情,需要用户信息和就诊人信息
4.用户认证列表,也是调用用户列表接口,要求authstatus值为1的用户。
5.认证审批,根据传过来的authstatus更新数据库。

7.预约挂号

模块:yygh_hosp
接口;HospitalApiController
后台系统已经做过,在医院详情页面,点击某个科室,跳转到预约挂号界面,展示可预约的日期,从当前日期延后10天

1.展示可预约的日期:方法:getbookingschedule
2.点击可预约的日期,展示预约详情 方法:findschedulelist
3.点击剩余号的数量,到预约确认界面,展示预约的信息 方法 getschedule
在这里插入图片描述

8.预约下单

点击剩余的号数,进行下单,获取就诊人的信息,展示预约的信息。
模块:service_order
接口:orderApiController
方法:submitorder
点击确认挂号,进行下单,传入就诊人id和排班id,调用servicemanage模块的方法,处理可预约数-1等操作,然后根据manage模块返回的数据,进行数据库更新。然后发送mq,更新mongodb中schedule表的数据(主要是预约数)。

在这里插入图片描述
service

    //保存订单
    @Override
    public Long saveOrder(String scheduleId, Long patientId) {
        //获取就诊人信息
        Patient patient = patientFeignClient.getPatient(patientId);
        if(null == patient) {
            throw new YyghException(ResultCodeEnum.PARAM_ERROR);
        }
        //获取排班信息
        ScheduleOrderVo scheduleOrderVo = hospitalFeignClient.getScheduleOrderVo(scheduleId);
        if(null == scheduleOrderVo) {
            throw new YyghException(ResultCodeEnum.PARAM_ERROR);
        }
        //当前时间不可以预约
        if(new DateTime(scheduleOrderVo.getStartTime()).isAfterNow()
                || new DateTime(scheduleOrderVo.getEndTime()).isBeforeNow()) {
            throw new YyghException(ResultCodeEnum.TIME_NO);
        }
        //获取下单引用签名 主要是apiurl和signkey
        SignInfoVo signInfoVo = hospitalFeignClient.getSignInfoVo(scheduleOrderVo.getHoscode());
        if(null == scheduleOrderVo) {
            throw new YyghException(ResultCodeEnum.PARAM_ERROR);
        }
        if(scheduleOrderVo.getAvailableNumber() <= 0) {
            throw new YyghException(ResultCodeEnum.NUMBER_NO);
        }
        OrderInfo orderInfo = new OrderInfo();
        BeanUtils.copyProperties(scheduleOrderVo, orderInfo);
        String outTradeNo = System.currentTimeMillis() + ""+ new Random().nextInt(100);
        orderInfo.setOutTradeNo(outTradeNo);
        orderInfo.setScheduleId(scheduleOrderVo.getHosScheduleId());
        orderInfo.setUserId(patient.getUserId());
        orderInfo.setPatientId(patientId);
        orderInfo.setPatientName(patient.getName());
        orderInfo.setPatientPhone(patient.getPhone());
        orderInfo.setOrderStatus(OrderStatusEnum.UNPAID.getStatus());
        this.save(orderInfo);

        Map<String, Object> paramMap = new HashMap<>();
        paramMap.put("hoscode",orderInfo.getHoscode());
        paramMap.put("depcode",orderInfo.getDepcode());
        paramMap.put("hosScheduleId",orderInfo.getScheduleId());
        paramMap.put("reserveDate",new DateTime(orderInfo.getReserveDate()).toString("yyyy-MM-dd"));
        paramMap.put("reserveTime", orderInfo.getReserveTime());
        paramMap.put("amount",orderInfo.getAmount());
        paramMap.put("name", patient.getName());
        paramMap.put("certificatesType",patient.getCertificatesType());
        paramMap.put("certificatesNo", patient.getCertificatesNo());
        paramMap.put("sex",patient.getSex());
        paramMap.put("birthdate", patient.getBirthdate());
        paramMap.put("phone",patient.getPhone());
        paramMap.put("isMarry", patient.getIsMarry());
        paramMap.put("provinceCode",patient.getProvinceCode());
        paramMap.put("cityCode", patient.getCityCode());
        paramMap.put("districtCode",patient.getDistrictCode());
        paramMap.put("address",patient.getAddress());
        //联系人
        paramMap.put("contactsName",patient.getContactsName());
        paramMap.put("contactsCertificatesType", patient.getContactsCertificatesType());
        paramMap.put("contactsCertificatesNo",patient.getContactsCertificatesNo());
        paramMap.put("contactsPhone",patient.getContactsPhone());
        paramMap.put("timestamp", HttpRequestHelper.getTimestamp());
        String sign = HttpRequestHelper.getSign(paramMap, signInfoVo.getSignKey());
        paramMap.put("sign", sign);
        //JSONObject result = HttpRequestHelper.sendRequest(paramMap, signInfoVo.getApiUrl()+"/order/submitOrder");

        //if(result.getInteger("code") == 200) {
        //    JSONObject jsonObject = result.getJSONObject("data");
        //    //预约记录唯一标识(医院预约记录主键)
        //    String hosRecordId = jsonObject.getString("hosRecordId");
        //    //预约序号
        //    Integer number = jsonObject.getInteger("number");;
        //    //取号时间
        //    String fetchTime = jsonObject.getString("fetchTime");;
        //    //取号地址
        //    String fetchAddress = jsonObject.getString("fetchAddress");;
        //    //更新订单
        //    orderInfo.setHosRecordId(hosRecordId);
        //    orderInfo.setNumber(number);
        //    orderInfo.setFetchTime(fetchTime);
        //    orderInfo.setFetchAddress(fetchAddress);
        //    baseMapper.updateById(orderInfo);
        //    //排班可预约数
        //    Integer reservedNumber = jsonObject.getInteger("reservedNumber");
        //    //排班剩余预约数
        //    Integer availableNumber = jsonObject.getInteger("availableNumber");
        //    //发送mq信息更新号源和短信通知
        //    //发送mq信息更新号源
        //    OrderMqVo orderMqVo = new OrderMqVo();
        //    orderMqVo.setScheduleId(scheduleId);
        //    orderMqVo.setReservedNumber(reservedNumber);
        //    orderMqVo.setAvailableNumber(availableNumber);
        //
        //    //短信提示
        //    MsmVo msmVo = new MsmVo();
        //    msmVo.setPhone(orderInfo.getPatientPhone());
        //    msmVo.setTemplateCode("SMS_194640721");
        //    String reserveDate =
        //            new DateTime(orderInfo.getReserveDate()).toString("yyyy-MM-dd")
        //                    + (orderInfo.getReserveTime()==0 ? "上午": "下午");
        //    Map<String,Object> param = new HashMap<String,Object>(){{
        //        put("title", orderInfo.getHosname()+"|"+orderInfo.getDepname()+"|"+orderInfo.getTitle());
        //        put("amount", orderInfo.getAmount());
        //        put("reserveDate", reserveDate);
        //        put("name", orderInfo.getPatientName());
        //        put("quitTime", new DateTime(orderInfo.getQuitTime()).toString("yyyy-MM-dd HH:mm"));
        //    }};
        //    msmVo.setParam(param);
        //    //orderMqVo.setMsmVo(msmVo);
        //    rabbitService.sendMessage(MqConst.EXCHANGE_DIRECT_ORDER, MqConst.ROUTING_ORDER, orderMqVo);
        //
        //} else {
        //    throw new YyghException(result.getString("message"), ResultCodeEnum.FAIL.getCode());
        //}
        return orderInfo.getId();
    }

9.订单列表

模块:service_order
接口:orderApiController
方法:list
Mybatisplus的条件查询。

10.订单详情

根据订单id查询订单详情
方法:Getorders

11.统计预约数量

后台系统
请求到service-statistics模块,远程调用order模块,实现统计查询。
在这里插入图片描述
service

    @Override
    public Map<String, Object> getCountMap(OrderCountQueryVo orderCountQueryVo) {
        Map<String, Object> map = new HashMap<>();

        List<OrderCountVo> orderCountVoList
                = baseMapper.selectOrderCount(orderCountQueryVo);
        //日期列表
        List<String> dateList
                =orderCountVoList.stream().map(OrderCountVo::getReserveDate).collect(Collectors.toList());
        //统计列表
        List<Integer> countList
                =orderCountVoList.stream().map(OrderCountVo::getCount).collect(Collectors.toList());
        map.put("dateList", dateList);
        map.put("countList", countList);
        return map;
    }
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值