【无标题】

                                              ## 尚医通

尚医通医院接口开发**

引言:
假期开始学习尚硅谷的尚医通项目,前边的代码还是比较简单的,主要是对医院的crud,但到了医院接口开发部分就感觉难度增加了,在此记录一下。

1.上传医院接口:
详细的接口文档就看尚硅谷的资料。
1.1上传医院:上传医院的信息和规则然后存储在数据库中(mongo,关于mongo非关系型数据库就不多做解释了,我也是以前没学过,做这个项目才学的.
在这里插入图片描述
上图就是医院管理的界面,里边是输入json数据传递到后端然后存储到数据库中.
json:

{
  "hoscode": "1000_0",
  "hosname": "北京协和医院",
  "hostype": "1",
  "provinceCode": "110000",
  "cityCode": "110100",
  "districtCode": "110102",
  "address": "大望路",
  "intro": "北京协和医院是集医疗、教学、科研于一体的大型三级甲等综合医院,是国家卫生计生委指定的全国疑难重症诊治指导中心,也是最早承担高干保健和外宾医疗任务的医院之一,以学科齐全、技术力量雄厚、特色专科突出、多学科综合优势强大享誉海内外。在2010、2011、2012、2013、2014年复旦大学医院管理研究所公布的“中国最佳医院排行榜”中连续五年名列榜首。\n\n医院建成于1921年,由洛克菲勒基金会创办。建院之初,就志在“建成亚洲最好的医学中心”。90余年来,医院形成了“严谨、求精、勤奋、奉献”的协和精神和兼容并蓄的特色文化风格,创立了“三基”、“三严”的现代医学教育理念,形成了以“教授、病案、图书馆”著称的协和“三宝”,培养造就了张孝骞、林巧稚等一代医学大师和多位中国现代医学的领军人物,并向全国输送了大批的医学管理人才,创建了当今知名的10余家大型综合及专科医院。2011年在总结90年发展经验的基础上,创新性提出了“待病人如亲人,提高病人满意度;待同事如家人,提高员工幸福感”新办院理念。\n\n目前,医院共有2个院区、总建筑面积53万平方米,在职职工4000余名、两院院士5人、临床和医技科室53个、国家级重点学科20个、国家临床重点专科29个、博士点16个、硕士点29个、国家级继续医学教育基地6个、二级学科住院医师培养基地18个、三级学科专科医师培养基地15个。开放住院床位2000余张,单日最高门诊量约1.5万人次、年出院病人约8万余人次。被评为“全国文明单位”、“全国创先争优先进基层党组织”、“全国卫生系统先进集体”、“首都卫生系统文明单位”、“最受欢迎三甲医院”,荣获全国五一劳动奖章。同时,医院还承担着支援老少边穷地区、国家重要活动和突发事件主力医疗队的重任,在2008年北京奥运工作中荣获“特别贡献奖”。\n\n90多年来,协和人以执着的医志、高尚的医德、精湛的医术和严谨的学风书写了辉煌的历史,今天的协和人正为打造“国际知名、国内一流”医院的目标而继续努力。",
  "route": "东院区乘车路线:106、108、110、111、116、684、685路到东单路口北;41、104快、814路到东单路口南;1、52、802路到东单路口西;20、25、37、39路到东单路口东;103、104、420、803路到新东安市场;地铁1、5号线到东单。\n西院区乘车路线:68路到辟才胡同东口;更多乘车路线详见须知。",
  "logoData": "iVBORw0KGgoAAAANSUhEUgAAASwAAAEsCAMAAABOo35HAAADAFBMVEUAAAD///79/v3///0BTyP8
  "bookingRule": {
    "cycle": "10",
    "releaseTime": "08:30",
    "stopTime": "11:30",
    "quitDay": "-1",
    "quitTime": "15:30",
    "rule": [
      "西院区预约号取号地点:西院区门诊楼一层大厅挂号窗口取号",
      "东院区预约号取号地点:东院区老门诊楼一层大厅挂号窗口或新门诊楼各楼层挂号/收费窗口取号"
    ]
  }
}

然后就根据开发文档提供的地址进行编码:
1.1controller:

 @PostMapping("saveHospital")
    public Result saveHosp(HttpServletRequest request){
        //获取到传递过来的医院信息
        Map<String, String[]> parameterMap = `request.getParameterMap();`
        Map<String, Object> map = HttpRequestHelper.switchMap(parameterMap);
        //存到mong中
        hospitalService.save(map);
        return Result.ok();


    }

:
因为前端是把json数据以表单的形式发送到后端,这里就直接用:

request.getParameterMap();

来直接取到前段传递的参数。同时为了以后操作数据方便就直接把 Map<String, String[]>转化为Map<String, Object> map。

1.2:Mongodb整合:
Spring Data提供了对mongodb数据访问的支持,我们只需要继承MongoRepository类,按照Spring Data规范就可以了,就和mybatis-plus差不多.

package com.tan.yygh.hosp.reposity;

import com.atguigu.yygh.model.hosp.Hospital;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface HospitalReposity extends MongoRepository<Hospital,String> {
    //mong自动查询,不用写具体
//判断是否存在数据
    Hospital getHospitalByHoscode(String hoscode);
}

这个神奇的是不需要写具体的实现,它底层会自动帮助你根据你的方法名字来实现,虽然这样变简单了,但是得起对方法名,我由于没有弄正确方法名很长一段时间里找不到哪里出错.方法名的规范去看一下官网就行.
1.3:service

package com.tan.yygh.hosp.service;

import java.util.Map;

public interface HospitalService {
    //上传医院
    void save(Map<String, Object> map);
}

package com.tan.yygh.hosp.service.impl;

import com.alibaba.fastjson.JSONObject;
import com.atguigu.yygh.model.hosp.Hospital;
import com.tan.yygh.hosp.reposity.HospitalReposity;
import com.tan.yygh.hosp.service.HospitalService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.Map;

@Service
public class HospitalServalImpl implements HospitalService {
    @Autowired
    private HospitalReposity hospitalReposity;

    @Override
    public void save(Map<String, Object> map) {
        //先判断是否存在相同的数据,存在就修改,不存在就添加
        //1.map变成字符串
        String s = JSONObject.toJSONString(map);
        //然后把字符串转化为对象
        Hospital hospital = JSONObject.parseObject(s, Hospital.class);
        //判断数据是否存在,取对象中的一个属性查询
        String hoscode = hospital.getHoscode();
        //判断数据是否存在
       Hospital Exithospital= hospitalReposity.getHospitalByHoscode(hoscode);
       if (null != Exithospital) {
           //存在就修改:感觉直接进行有好提示会好一点
           hospital.setStatus(Exithospital.getStatus());
           hospital.setCreateTime(Exithospital.getCreateTime());
           hospital.setUpdateTime(Exithospital.getUpdateTime());
           hospital.setIsDeleted(0);
           hospitalReposity.save(hospital);

       }else{
           //存在就修改:感觉直接进行有好提示会好一点
           hospital.setStatus(0);
           hospital.setCreateTime(new Date());
           hospital.setUpdateTime(new Date());
           hospital.setIsDeleted(0);
           hospitalReposity.save(hospital);

       }

    }
}

注:
service层的方法就是把前端返回的json数据封装变成一个对象:

//1.map变成字符串
        String s = JSONObject.toJSONString(map);
        //然后把字符串转化为对象
        Hospital hospital = JSONObject.parseObject(s, Hospital.class);

这是JSONObject的两个方法.
然后下边的流程就是:
先判断数据是否存在,就随便从这个对象中取一个属性的值,然后从数据库中条件查询是否存在,
这个属性值也取的比较特殊:是医院的ID,每个都不同,所以不会冲突.
如果存在的话就执行更新操作,不存在就保存:
save()方法的特性就是如果数据存在就更新,不存在就保存,但我觉得如果存在的话就直接提示就行,再保存一个感觉没有必要。
在这里插入图片描述

从图中我们可以看到,单击保存的时候会执行/hospital/save的方法,我们看一下这个方法:

@RequestMapping(value="/hospital/save",method=RequestMethod.POST)
	public String saveHospital(String data, HttpServletRequest request) {
		try {
			apiService.saveHospital(data);
		} catch (YyghException e) {
			return this.failurePage(e.getMessage(),request);
		} catch (Exception e) {
			return this.failurePage("数据异常",request);
		}
		return this.successPage(null,request);
	}

以及service对应的方法:

 @Override
    public boolean saveHospital(String data) {
        JSONObject jsonObject = JSONObject.parseObject(data);

        Map<String, Object> paramMap = new HashMap<>();
        System.out.println(this);
        System.out.println(this.getApiUrl());
        paramMap.put("hoscode",this.getHoscode());
        paramMap.put("hosname",jsonObject.getString("hosname"));
        paramMap.put("hostype",jsonObject.getString("hostype"));
        paramMap.put("provinceCode",jsonObject.getString("provinceCode"));
        paramMap.put("cityCode", jsonObject.getString("cityCode"));
        paramMap.put("districtCode",jsonObject.getString("districtCode"));
        paramMap.put("address",jsonObject.getString("address"));
        paramMap.put("intro",jsonObject.getString("intro"));
        paramMap.put("route",jsonObject.getString("route"));
        //图片
        paramMap.put("logoData", jsonObject.getString("logoData"));

        JSONObject bookingRule = jsonObject.getJSONObject("bookingRule");
        paramMap.put("bookingRule",bookingRule.toJSONString());

        paramMap.put("timestamp", HttpRequestHelper.getTimestamp());
        paramMap.put("sign", MD5.encrypt(this.getSignKey()));
        JSONObject respone =
                HttpRequestHelper.sendRequest(paramMap,this.getApiUrl()+"/api/hosp/saveHospital");
        System.out.println(respone.toJSONString());

        if(null != respone && 200 == respone.getIntValue("code")) {
            return true;
        } else {
            throw new YyghException(respone.getString("message"), 201);
        }
    }

APIService:saveHospital(String data):

从里边可以看出把前端数据封装到map中去,然后再向服务层的模块发送请求去保存数据:

 JSONObject respone =
                HttpRequestHelper.sendRequest(paramMap,this.getApiUrl()+"/api/hosp/saveHospital");

这行代码是关键,其中的this.getApiUrl()如下:

 private String getApiUrl() {
        HospitalSet hospitalSet = hospitalSetMapper.selectById(1);
        return hospitalSet.getApiUrl();
    }

也就是从数据库中取出第一条数据的url作为路径
在这里插入图片描述
在这个项目中因为对应的服务端接口的编写都在8201这个端口上,所以才会把这个url给拼接上去,其实不管取数据库中的第几条数据,对应的url都会是这个,后边的地址就是接口文档中要规范的地址。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值