上传医院接口
大致流程:hoscode,hosname,hostype,provinceCode,cityCode等等这些信息被撞到一个map集合中,然后JSONObject respone = HttpRequestHelper.sendRequest(paramMap,this.getApiUrl()+"/api/hosp/saveHospital");
的方式将数据传给我们要实现的saveHospital接口,在sendRequest中将paramMap通过StringBuilder封装,然后通过Post方式提交,saveHospital接口在接收参数的时候用HttpServletRequest request接收,然后将医院的数据通过mongodb保存。
- 在HospitalServiceImpl中写save方法用来将上传的医院信息保存到Mongo中
- 用JSONObject将paramMap解析成Josn,然后HospitalRepository判断数据是否存在,即执行的是修改还是更新操作。
Hospital hospital = JSONObject.parseObject(JSONObject.toJSONString(paramMap),Hospital.class);
//判断是否存在
Hospital targetHospital = hospitalRepository.getHospitalByHoscode(hospital.getHoscode());
- 注意HospitalRepository是继承MongoRepository,并且MongoRepository是有命名规范的,按照命名格式就不需要自己写方法。
- 在模拟医院的接口中模拟数据的上传,需要注意的是URl和Code的值
签名校验
比对医院系统经过加密的Sign和数据库中医院的Sign是否一致,一致则将医院的文档信息添加到Mongo的数据库中
//1 获取医院系统传递的签名
String hospSign=(String)paramMap.get("sign");
//2 根据传递过来的医院编码,查询数据库,查询签名
String hoscode=(String)paramMap.get("hoscode");
String signKey=hospitalSetService.getSignKey(hoscode);
//3 把数据库查询签名进行MD5加密
String signKeyMd5= MD5.encrypt(signKey);
//4 判断签名是否一致
if(!hospSign.equals(signKeyMd5)){
throw new YyghException(ResultCodeEnum.SIGN_ERROR);
}
科室上传接口
类似于医院信息上传接口,gethoscode获取医院编号,进行签名校验,交给service的save方法进行科室上传。
public void save(Map<String, Object> paramMap) {
Department department = JSONObject.parseObject(JSONObject.toJSONString(paramMap), Department.class);
Department targetDepartment = departmentRepository.getDepartmentByHoscodeAndDepcode(department.getHoscode(), department.getDepcode());
if (null != targetDepartment) {
//copy不为null的值,该方法为自定义方法
// BeanUtils.copyBean(department, targetDepartment, Department.class);
targetDepartment.setUpdateTime(new Date());
targetDepartment.setIsDeleted(0);
departmentRepository.save(targetDepartment);
} else {
department.setCreateTime(new Date());
department.setUpdateTime(new Date());
department.setIsDeleted(0);
departmentRepository.save(department);
}
}
科室查询(分页)
- 在模拟医院的接口中会传递分页参数pageNum和pageSzie,将这俩参数传给模拟医院的service中,将参数封装到ParamMap中交给request传给预约挂号平台的deparment接口。
- 然后和之前一样, 先获取hoscode,签名校验,将参数封装到Vo对象中交给service做查询处理。
- Service中,Mongo进行模糊查询,findAll方法中需要传一个匹配器Example和pageable对象。
- 注:deparmentVo是用来接收request参数的实体类,而deparment是用来查询的实体类
public Page<Department> selectPage(int page, int limit, DepartmentQueryVo departmentQueryVo) {
//创建pageable对象,设置当前页和每页记录数
//0为第一页
Pageable pageable = PageRequest.of(page-1, limit);
Department department = new Department();
BeanUtils.copyProperties(departmentQueryVo, department);
department.setIsDeleted(0);
//创建匹配器,即如何使用查询条件
ExampleMatcher matcher = ExampleMatcher.matching() //构建对象
.withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING) //改变默认字符串匹配方式:模糊查询
.withIgnoreCase(true); //改变默认大小写忽略方式:忽略大小写
//创建实例
Example<Department> example = Example.of(department, matcher);
Page<Department> pages = departmentRepository.findAll(example, pageable);
return pages;
}
删除科室
departmentRepository的getDepartmentByHoscodeAndDepcode方法先获取科室
public void remove(String hoscode, String depcode) {
//根据医院编号和科室编号查询科室存在否
Department department = departmentRepository.getDepartmentByHoscodeAndDepcode(hoscode, depcode);
if(null != department) {
//departmentRepository.delete(department);
departmentRepository.deleteById(department.getId());
}
}