(1)后台系统-医院设置接口-需求和准备
(2)后台系统-医院设置接口-创建基础类
(3)医院设置接口-查询和逻辑删除
(4)医院的设置接口-统一返回结果定义
(5)医院设置接口-分页条件查询
(1)后台系统-医院设置接口-需求和准备
- 需求
医院设置主要是用来保存开通医院的一些基本信息,每个医院一条信息,保存了医院编号(平台分配,全局唯一)和接口调用相关的签名key等信息,是整个流程的第一步,只有开通了医院设置信息,才可以上传医院相关信息。
我们所开发的功能就是基于单表的一个CRUD、锁定/解锁和发送签名信息这些基本功能。
医院设置是用来保存开通医院的一些基本信息(包括统一编号、接口调用的签名key)
预约挂号平台有很多的医院信息,比如协和医院、人民医院等等,每个医院在预约挂号平台上分了一个固定的编号,每个医院有它的信息,比如医院有不同的科室,每个科室有不同的排班信息,这些信息在平台上有一个显示,供患者查看,预约挂号平台跟医院建立一个接口的连接,医院跟平台约定好一个签名,让两个系统识别签名,建立连接之后,医院进行操作调用预约挂号平台的相关接口,比如说医院上传科室信息,调用科室的接口进行上传等等
让医院跟平台建立连接,只需要在医院这一端进行操作,对应调用平台中的接口完成,这就叫医院的设置,让他们建立连接,比如说设置医院的编号、医院系统的地址、相同的key等
接口需要再进行开发。
需要先建立一张表:
hosname:医院名称
hoscode:医院编号(平台分配,全局唯一,api接口必填信息)
api_url:医院回调的基础url(如:预约下单,我们要调用该地址去医院下单)
sign_key:双方api接口调用的签名key,有平台生成
contacts_name:医院联系人姓名
contacts_phone:医院联系人手机
status:状态(锁定/解锁)
在service下创建子模块:
创建配置文件:application.properties
有些配置用不到注释掉
# 服务端口
server.port=8201
# 服务名
spring.application.name=service-hosp
# 环境设置:dev、test、prod
spring.profiles.active=dev
# mysql数据库连接
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/yygh_hosp?characterEncoding=utf-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456
#返回json的全局时间格式
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=GMT+8
#配置mapper xml文件的路径
#mybatis-plus.mapper-locations=classpath:com/atguigu/yygh/mapper/xml/*.xml
#mybatis-plus.mapper-locations=classpath:com/atguigu/yygh/mapper/xml/*.xml
# nacos服务地址
#spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
#开启sentinel
#feign.sentinel.enabled=true
#设置sentinel地址
#spring.cloud.sentinel.transport.dashboard=http://127.0.0.1:8858
#mongodb地址
#spring.data.mongodb.host=192.168.44.163
#spring.data.mongodb.port=27017
#spring.data.mongodb.database=yygh_hosp
#rabbitmq地址
#spring.rabbitmq.host=127.0.0.1
#spring.rabbitmq.port=5672
#spring.rabbitmq.username=guest
#spring.rabbitmq.password=guest
创建包和启动类:
package com.atguigu.yygh.hosp;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class ServiceHospApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceHospApplication.class, args);
}
}
主要对医院设置表完成增删改查操作。
(2)后台系统-医院设置接口-创建基础类
把提前准备好的实体类,放到Model模块下:
HospitalSet:
package com.atguigu.yygh.model.hosp;
import com.atguigu.yygh.model.base.BaseEntity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* <p>
* HospitalSet
* </p>
*
* @author qy
*/
@Data
@ApiModel(description = "医院设置")
@TableName("hospital_set")
public class HospitalSet extends BaseEntity {
@ApiModelProperty(value = "医院名称")
@TableField("hosname")
private String hosname;
@ApiModelProperty(value = "医院编号")
@TableField("hoscode")
private String hoscode;
@ApiModelProperty(value = "api基础路径")
@TableField("api_url")
private String apiUrl;
@ApiModelProperty(value = "签名秘钥")
@TableField("sign_key")
private String signKey;
@ApiModelProperty(value = "联系人姓名")
@TableField("contacts_name")
private String contactsName;
@ApiModelProperty(value = "联系人手机")
@TableField("contacts_phone")
private String contactsPhone;
/**
* 状态 1:可用 0:不可用
*/
@ApiModelProperty(value = "状态")
@TableField("status")
private Integer status;
}
BaseEntity:
package com.atguigu.yygh.model.base;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
@Data
public class BaseEntity implements Serializable {
@ApiModelProperty(value = "id")
@TableId(type = IdType.AUTO)
private Long id;
@ApiModelProperty(value = "创建时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@TableField("create_time")
private Date createTime;
@ApiModelProperty(value = "更新时间")
@TableField("update_time")
private Date updateTime;
@ApiModelProperty(value = "逻辑删除(1:已删除,0:未删除)")
@TableLogic
@TableField("is_deleted")
private Integer isDeleted;
@ApiModelProperty(value = "其他参数")
@TableField(exist = false)
private Map<String,Object> param = new HashMap<>();
}
在service模块中的service-hosp模块创建HospitalSetMapper:
package com.atguigu.yygh.hosp.mapper;
import com.atguigu.yygh.model.hosp.HospitalSet;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface HospitalSetMapper extends BaseMapper<HospitalSet> {
}
HospitalSetMapper.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.atguigu.yygh.hosp.mapper.HospitalSetMapper">
</mapper>
创建Service:
HospitalSetService接口:
Service也继承一个类:IService
package com.atguigu.yygh.hosp.service;
import com.atguigu.yygh.model.hosp.HospitalSet;
import com.baomidou.mybatisplus.extension.service.IService;
public interface HospitalSetService extends IService<HospitalSet> {
}
实现类:让他继承ServiceImpl 并实现上面那个接口
package com.atguigu.yygh.hosp.service.impl;
import com.atguigu.yygh.hosp.mapper.HospitalSetMapper;
import com.atguigu.yygh.hosp.service.HospitalSetService;
import com.atguigu.yygh.model.hosp.HospitalSet;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
@Service
public class HospitalSetServiceImpl extends ServiceImpl<HospitalSetMapper, HospitalSet> implements HospitalSetService {
}
注意:原来service调用mappe需要把mapper注入到service,但是我们继承了ServiceImpl,里面已经帮助我们完成了注入,直接使用BaseMapper完成调用
写controller:
package com.atguigu.yygh.hosp.controller;
import com.atguigu.yygh.hosp.service.HospitalSetService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/admin/hosp/hospitalSet")
public class HospitalSetController {
@Autowired
private HospitalSetService hospitalSetService;
}
在MyBatis-Plus不仅在Mapper中给我们封装了方法,在Service也进行了封装,在写代码是会非常的方便,直接通过controller去掉service中的方法,很方便的实现对数据库的操作
(3)医院设置接口-查询和逻辑删除
创建配置类:
package com.atguigu.yygh.hosp.config;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@MapperScan("com.atguigu.yygh.hosp.mapper")
public class HospConfig {
}
在控制器里面写接口查询:
package com.atguigu.yygh.hosp.controller;
import com.atguigu.yygh.hosp.service.HospitalSetService;
import com.atguigu.yygh.model.hosp.HospitalSet;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
@RequestMapping("/admin/hosp/hospitalSet")
public class HospitalSetController {
@Autowired
private HospitalSetService hospitalSetService;
//http://localhost:8201/admin/hosp/hospitalSet/findAll
//1.查询医院设置表的所有信息
@GetMapping("findAll")
public List<HospitalSet> findAllHospitalSet(){
//调用service中的方法
List<HospitalSet> list = hospitalSetService.list();
return list;
}
}
启动项目运行:就可以查询到信息
逻辑删除:
package com.atguigu.yygh.hosp.controller;
import com.atguigu.yygh.hosp.service.HospitalSetService;
import com.atguigu.yygh.model.hosp.HospitalSet;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/admin/hosp/hospitalSet")
public class HospitalSetController {
@Autowired
private HospitalSetService hospitalSetService;
//http://localhost:8201/admin/hosp/hospitalSet/findAll
//1.查询医院设置表的所有信息
@GetMapping("findAll")
public List<HospitalSet> findAllHospitalSet(){
//调用service中的方法
List<HospitalSet> list = hospitalSetService.list();
return list;
}
//逻辑删除删除医院的设置 需要在实体类加上注解 @TableLogic //逻辑删除注解
@DeleteMapping("{id}")
public boolean removeHospSet(@PathVariable Long id){
boolean b = hospitalSetService.removeById(id);
return b;
}
}
@DeleteMapping测试不能再浏览器进行测试,需要使用特殊的工具:如Postman等,这里我们使用Swagger2,它是一个接口文档,方便我们各种提交方式的测试
(3)整合Swagger测试
Swagger2介绍与集成
swagger2介绍
什么是swagger2
编写和维护接口文档是每个程序员的职责,根据Swagger2可以快速帮助我们编写最新的API接口文档,再也不用担心开会前仍忙于整理各种资料了,间接提升了团队开发的沟通效率。
常用注解
swagger通过注解表明该接口会生成文档,包括接口名、请求方法、参数、返回信息的等等。
@Api:修饰整个类,描述Controller的作用
@ApiOperation:描述一个类的一个方法,或者说一个接口
@ApiParam:单个参数描述
@ApiModel:用对象来接收参数
@ApiModelProperty:用对象接收参数时,描述对象的一个字段
@ApiImplicitParam:一个请求参数
@ApiImplicitParams:多个请求参数
Swagger在后面微服务的多个地方会用到,把它整合到conmmon中来,让所有微服务都用到
项目整合swagger2
在common模块pom.xml引入依赖
<!--swagger-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
</dependency> |
说明:我们在yygh-parent中的pom.xml中添加了版本控制,这里不需要添加版本,已引入就忽略
3.2.2 添加swagger2配置类
在service-util模块添加配置类:
之前已经把swagger的依赖复制进去了
在service_util:创建包,把提前准备好的Swagger2Config配置类复制进去。这个类格式固定,不需要特殊记忆
package com.atguigu.yygh.common.config;
import com.google.common.base.Predicates;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
/**
* Swagger2配置信息
*/
@Configuration
@EnableSwagger2 //开启Swagger
public class Swagger2Config {
@Bean
public Docket webApiConfig(){
return new Docket(DocumentationType.SWAGGER_2)
.groupName("webApi")
.apiInfo(webApiInfo())
.select()
//只显示api路径下的页面
.paths(Predicates.and(PathSelectors.regex("/api/.*")))
.build();
}
@Bean
public Docket adminApiConfig(){
return new Docket(DocumentationType.SWAGGER_2)
.groupName("adminApi")
.apiInfo(adminApiInfo())
.select()
//只显示admin路径下的页面
.paths(Predicates.and(PathSelectors.regex("/admin/.*")))
.build();
}
private ApiInfo webApiInfo(){
return new ApiInfoBuilder()
.title("网站-API文档")
.description("本文档描述了网站微服务接口定义")
.version("1.0")
.contact(new Contact("atguigu", "http://atguigu.com", "493211102@qq.com"))
.build();
}
private ApiInfo adminApiInfo(){
return new ApiInfoBuilder()
.title("后台管理系统-API文档")
.description("本文档描述了后台管理系统微服务接口定义")
.version("1.0")
.contact(new Contact("atguigu", "http://atguigu.com", "49321112@qq.com"))
.build();
}
}
在service模块下引入上面那个模块:
在service_hosp模块的启动类上面,添加扫描
package com.atguigu.yygh.hosp;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
@SpringBootApplication
@ComponentScan(basePackages = "com.atguigu")
public class ServiceHospApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceHospApplication.class, args);
}
}
配置类所在的包前面com.atguigu是相同的, 让它扫描com.atguigu,他就可以扫描到了配置类了
使用swagger2测试 :启动项目:
使用注解,修改controller:
package com.atguigu.yygh.hosp.controller;
import com.atguigu.yygh.hosp.service.HospitalSetService;
import com.atguigu.yygh.model.hosp.HospitalSet;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@Api(tags = "医院设置管理") //swagger中的提示注解
@RestController
@RequestMapping("/admin/hosp/hospitalSet")
public class HospitalSetController {
@Autowired
private HospitalSetService hospitalSetService;
//http://localhost:8201/admin/hosp/hospitalSet/findAll
//1.查询医院设置表的所有信息
@ApiOperation(value = "获取所有医院设置") //swagger中的提示注解
@GetMapping("findAll")
public List<HospitalSet> findAllHospitalSet(){
//调用service中的方法
List<HospitalSet> list = hospitalSetService.list();
return list;
}
//逻辑删除删除医院的设置 需要在实体类加上注解 @TableLogic //逻辑删除注解
@ApiOperation(value = "逻辑删除医院设置") //swagger中的提示注解
@DeleteMapping("{id}")
public boolean removeHospSet(@PathVariable Long id){
boolean b = hospitalSetService.removeById(id);
return b;
}
}
就有了中文的提示:
点击try it out
删除:输入id:1
原始表:
逻辑删除后:
(4)医院的设置接口-统一返回结果定义
上面我们定义的接口,返回的数据类型是不一样的,在实际中我们是一个团队开发,每个人开发不同的模块,开发不同的接口,每个人的约定是不一样的,比如:删除:以false代表成功和true代表失败返回 以0和1返回 以100和200,每个人的开发习惯是不一样的,我们可以做一个约定,让所有接口返回相同的数据格式,有利于前端数据的显示和解析
在conmmon_util模块下:创建包和类:
枚举类:
package com.atguigu.yygh.common.result;
import lombok.Getter;
/**
* 统一返回结果状态信息类
*/
@Getter
public enum ResultCodeEnum {
SUCCESS(200,"成功"),
FAIL(201, "失败"),
PARAM_ERROR( 202, "参数不正确"),
SERVICE_ERROR(203, "服务异常"),
DATA_ERROR(204, "数据异常"),
DATA_UPDATE_ERROR(205, "数据版本异常"),
LOGIN_AUTH(208, "未登陆"),
PERMISSION(209, "没有权限"),
CODE_ERROR(210, "验证码错误"),
// LOGIN_MOBLE_ERROR(211, "账号不正确"),
LOGIN_DISABLED_ERROR(212, "改用户已被禁用"),
REGISTER_MOBLE_ERROR(213, "手机号已被使用"),
LOGIN_AURH(214, "需要登录"),
LOGIN_ACL(215, "没有权限"),
URL_ENCODE_ERROR( 216, "URL编码失败"),
ILLEGAL_CALLBACK_REQUEST_ERROR( 217, "非法回调请求"),
FETCH_ACCESSTOKEN_FAILD( 218, "获取accessToken失败"),
FETCH_USERINFO_ERROR( 219, "获取用户信息失败"),
//LOGIN_ERROR( 23005, "登录失败"),
PAY_RUN(220, "支付中"),
CANCEL_ORDER_FAIL(225, "取消订单失败"),
CANCEL_ORDER_NO(225, "不能取消预约"),
HOSCODE_EXIST(230, "医院编号已经存在"),
NUMBER_NO(240, "可预约号不足"),
TIME_NO(250, "当前时间不可以预约"),
SIGN_ERROR(300, "签名错误"),
HOSPITAL_OPEN(310, "医院未开通,暂时不能访问"),
HOSPITAL_LOCK(320, "医院被锁定,暂时不能访问"),
;
private Integer code;
private String message;
private ResultCodeEnum(Integer code, String message) {
this.code = code;
this.message = message;
}
}
Result类:
package com.atguigu.yygh.common.result;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 全局统一返回结果类
*/
@Data
@ApiModel(value = "全局统一返回结果")
public class Result<T> {
@ApiModelProperty(value = "返回码")
private Integer code;
@ApiModelProperty(value = "返回消息")
private String message;
@ApiModelProperty(value = "返回数据")
private T data;
public Result(){}
protected static <T> Result<T> build(T data) {
Result<T> result = new Result<T>();
if (data != null)
result.setData(data);
return result;
}
public static <T> Result<T> build(T body, ResultCodeEnum resultCodeEnum) {
Result<T> result = build(body);
result.setCode(resultCodeEnum.getCode());
result.setMessage(resultCodeEnum.getMessage());
return result;
}
public static <T> Result<T> build(Integer code, String message) {
Result<T> result = build(null);
result.setCode(code);
result.setMessage(message);
return result;
}
public static<T> Result<T> ok(){
return Result.ok(null);
}
/**
* 操作成功
* @param data
* @param <T>
* @return
*/
public static<T> Result<T> ok(T data){
Result<T> result = build(data);
return build(data, ResultCodeEnum.SUCCESS);
}
public static<T> Result<T> fail(){
return Result.fail(null);
}
/**
* 操作失败
* @param data
* @param <T>
* @return
*/
public static<T> Result<T> fail(T data){
Result<T> result = build(data);
return build(data, ResultCodeEnum.FAIL);
}
public Result<T> message(String msg){
this.setMessage(msg);
return this;
}
public Result<T> code(Integer code){
this.setCode(code);
return this;
}
public boolean isOk() {
if(this.getCode().intValue() == ResultCodeEnum.SUCCESS.getCode().intValue()) {
return true;
}
return false;
}
}
package com.atguigu.yygh.hosp.controller;
import com.atguigu.yygh.common.result.Result;
import com.atguigu.yygh.hosp.service.HospitalSetService;
import com.atguigu.yygh.model.hosp.HospitalSet;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@Api(tags = "医院设置管理") //swagger中的提示注解
@RestController
@RequestMapping("/admin/hosp/hospitalSet")
public class HospitalSetController {
@Autowired
private HospitalSetService hospitalSetService;
//http://localhost:8201/admin/hosp/hospitalSet/findAll
//1.查询医院设置表的所有信息
/* @ApiOperation(value = "获取所有医院设置") //swagger中的提示注解
@GetMapping("findAll")
public List<HospitalSet> findAllHospitalSet(){
//调用service中的方法
List<HospitalSet> list = hospitalSetService.list();
return list;
}*/
//逻辑删除删除医院的设置 需要在实体类加上注解 @TableLogic //逻辑删除注解
/* @ApiOperation(value = "逻辑删除医院设置") //swagger中的提示注解
@DeleteMapping("{id}")
public boolean removeHospSet(@PathVariable Long id){
boolean b = hospitalSetService.removeById(id);
return b;
}*/
//定义统一的返回结果Result
//1.查询医院设置表的所有信息
@ApiOperation(value = "获取所有医院设置") //swagger中的提示注解
@GetMapping("findAll")
public Result findAllHospitalSet(){
//调用service中的方法
List<HospitalSet> list = hospitalSetService.list();
return Result.ok(list);
}
//逻辑删除删除医院的设置
@ApiOperation(value = "逻辑删除医院设置") //swagger中的提示注解
@DeleteMapping("{id}")
public Result removeHospSet(@PathVariable Long id){
boolean b = hospitalSetService.removeById(id);
if (b){
return Result.ok();
}else{
return Result.fail();
}
}
}
删除:
(5)医院设置接口-分页条件查询
条件查询类:
//3.条件查询分页
@ApiOperation(value = "分页查询医院设置")
@GetMapping("findPage/{current}/{limit}")
public Result findPageHospSet(@PathVariable long current,
@PathVariable long limit,
HospitalSetQueryVo hospitalSetQueryVo){
//创建Page对象,传递当前页,每页记录数
Page<HospitalSet> page=new Page<>(current,limit);
//构造条件
QueryWrapper<HospitalSet> wrapper=new QueryWrapper<>();
String hosname=hospitalSetQueryVo.getHosname();//医院名称
String hoscode = hospitalSetQueryVo.getHoscode();//医院编号
if(!StringUtils.isEmpty(hosname)){
wrapper.like("hosname", hospitalSetQueryVo.getHosname());
}
if(!StringUtils.isEmpty(hoscode)){
wrapper.eq("hoscode",hospitalSetQueryVo.getHoscode());
}
//调用方法实现分页查询
Page<HospitalSet> pageHospitalSet = hospitalSetService.page(page, wrapper);
//返回结果
return Result.ok(pageHospitalSet);
}
点击查询:
//3.条件查询分页
@ApiOperation(value = "分页查询医院设置")
@PostMapping("findPage/{current}/{limit}")
public Result findPageHospSet(@PathVariable long current,
@PathVariable long limit,
@RequestBody(required = false) HospitalSetQueryVo hospitalSetQueryVo){// @RequestBody()":json格式的数据
//创建Page对象,传递当前页,每页记录数
Page<HospitalSet> page=new Page<>(current,limit);
//构造条件
QueryWrapper<HospitalSet> wrapper=new QueryWrapper<>();
String hosname=hospitalSetQueryVo.getHosname();//医院名称
String hoscode = hospitalSetQueryVo.getHoscode();//医院编号
if(!StringUtils.isEmpty(hosname)){
wrapper.like("hosname", hospitalSetQueryVo.getHosname());
}
if(!StringUtils.isEmpty(hoscode)){
wrapper.eq("hoscode",hospitalSetQueryVo.getHoscode());
}
//调用方法实现分页查询
Page<HospitalSet> pageHospitalSet = hospitalSetService.page(page, wrapper);
//返回结果
return Result.ok(pageHospitalSet);
}