尚医通P160遇到的问题解决

主要还是源代码中将scheduleId与hosScheduleId搞混。
这里简单整理一下,有些细节不太记得了。

解决方法:

在booking方法传多一个参数
在这里插入图片描述
在这里插入图片描述
之后在booking.vue页面分别取出这两个参数进行传递
在这里插入图片描述
在这里插入图片描述
后端也用三个参数接收
在这里插入图片描述
OrderServiceImpl的saveOrder方法再传对应的参数查询

	/**
     * 保存订单
     * @param id 这个id为mongodb中排班集合的主键id
     * @param scheduleId 这个scheduleId为mongodb中排班集合的hosScheduleId
     * @param patientId 就诊人id
     * @return
     */
    @Override
    public Long saveOrder(String id,String scheduleId, Long patientId) {
        // 1、远程调用得到订单相关信息
        // 就诊人信息
        Patient patientOrder = patientFeignClient.getPatientOrder(patientId);
        if(null == patientOrder) {
            throw new YyghException(ResultCodeEnum.PARAM_ERROR);
        }

        // 排班信息
        ScheduleOrderVo scheduleOrderVo = hospitalFeignClient.getScheduleOrderVo(id);  // 根据主键id查
        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);
        }

        // 获取医院签名信息,以调医院平台的接口
        SignInfoVo signInfo = hospitalFeignClient.getSignInfo(scheduleOrderVo.getHoscode());

        // 2、添加到订单表
        OrderInfo orderInfo = new OrderInfo();
        BeanUtils.copyProperties(scheduleOrderVo,orderInfo);
        // 向orderInfo设置其他数据
        String outTradeNo = System.currentTimeMillis() + ""+ new Random().nextInt(100);
        orderInfo.setOutTradeNo(outTradeNo);
        orderInfo.setScheduleId(scheduleId);
        orderInfo.setUserId(patientOrder.getUserId());
        orderInfo.setPatientId(patientId);
        orderInfo.setPatientName(patientOrder.getName());
        orderInfo.setPatientPhone(patientOrder.getPhone());
        orderInfo.setOrderStatus(OrderStatusEnum.UNPAID.getStatus());
        this.save(orderInfo);

        // 调用医院接口,实现预约挂号操作
        // 设置调用医院接口需要的参数,参数放到map中
        Map<String, Object> paramMap = new HashMap<>();
        paramMap.put("id",patientId);
        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", patientOrder.getName());
        paramMap.put("certificatesType",patientOrder.getCertificatesType());
        paramMap.put("certificatesNo", patientOrder.getCertificatesNo());
        paramMap.put("sex",patientOrder.getSex());
        paramMap.put("birthdate", new DateTime(patientOrder.getBirthdate()).toString("yyyy-MM-dd"));
        paramMap.put("phone",patientOrder.getPhone());
        paramMap.put("isMarry", patientOrder.getIsMarry());
        paramMap.put("provinceCode",patientOrder.getProvinceCode());
        paramMap.put("cityCode", patientOrder.getCityCode());
        paramMap.put("districtCode",patientOrder.getDistrictCode());
        paramMap.put("address",patientOrder.getAddress());
        //联系人
        paramMap.put("contactsName",patientOrder.getContactsName());
        paramMap.put("contactsCertificatesType", patientOrder.getContactsCertificatesType());
        paramMap.put("contactsCertificatesNo",patientOrder.getContactsCertificatesNo());
        paramMap.put("contactsPhone",patientOrder.getContactsPhone());
        paramMap.put("timestamp", HttpRequestHelper.getTimestamp());
        String sign = HttpRequestHelper.getSign(paramMap, signInfo.getSignKey());
        paramMap.put("sign", sign);

        // 3、请求医院系统接口
        JSONObject result = HttpRequestHelper.sendRequest(paramMap, signInfo.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");

            // 4、更新订单
            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");

            // 5、发送mq信息更新号源和短信通知
            OrderMqVo orderMqVo = new OrderMqVo();
            orderMqVo.setScheduleId(id);
            orderMqVo.setReservedNumber(reservedNumber);
            orderMqVo.setAvailableNumber(availableNumber);
            MsmVo msmVo = new MsmVo(); // 短信实体
            msmVo.setPhone(orderInfo.getPatientPhone());

            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);

            // 发送消息到mq
            rabbitService.sendMessage(MqConst.EXCHANGE_DIRECT_ORDER, MqConst.ROUTING_ORDER, orderMqVo);

        }else{
            throw new YyghException(result.getString("message"), ResultCodeEnum.FAIL.getCode());
        }
        // 返回订单id
        return orderInfo.getId();
    }

orderInfo数据表的hos_schedule_id字段问题可以直接修改实体类字段对应名称
在这里插入图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值