1 搭建项目后端环境
1.1 微服务模块搭建
1.1.1 构建父工程
创建一个springboot项目,在pom文件中添加
<packaging>pom</packaging>
父工程主要放一些版本依赖和公共依赖
<properties>
<java.version>1.8</java.version>
<cloud.version>Hoxton.RELEASE</cloud.version>
<alibaba.version>2.2.0.RELEASE</alibaba.version>
<mybatis-plus.version>3.3.1</mybatis-plus.version>
<mysql.version>5.1.46</mysql.version>
<swagger.version>2.7.0</swagger.version>
<jwt.version>0.7.0</jwt.version>
<fastjson.version>1.2.29</fastjson.version>
<httpclient.version>4.5.1</httpclient.version>
<easyexcel.version>2.2.0-beta2</easyexcel.version>
<aliyun.version>4.1.1</aliyun.version>
<oss.version>3.9.1</oss.version>
<jodatime.version>2.10.1</jodatime.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--mybatis-plus 持久层-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<!--swagger-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>${swagger.version}</version>
</dependency>
<!--swagger ui-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${swagger.version}</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>${jwt.version}</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>${httpclient.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>${easyexcel.version}</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>${aliyun.version}</version>
</dependency>
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>${oss.version}</version>
</dependency>
<!--日期时间工具-->
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>${jodatime.version}</version>
</dependency>
<!-- springboot初始化 -->
<!-- <dependency>-->
<!-- <groupId>org.springframework.boot</groupId>-->
<!-- <artifactId>spring-boot-starter</artifactId>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>org.projectlombok</groupId>-->
<!-- <artifactId>lombok</artifactId>-->
<!-- <optional>true</optional>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>org.springframework.boot</groupId>-->
<!-- <artifactId>spring-boot-starter-test</artifactId>-->
<!-- <scope>test</scope>-->
<!-- </dependency>-->
</dependencies>
</dependencyManagement>
1.1.2 构建common父工程
common:公共模块父节点
common-util :工具类模块,所有模块都可以依赖于它
service-util : service服务的工具包,包含service服务的公共配置类,所有模块都可以依赖于它
目录结构如下
common模块在pom中添加依赖(common_util和service_util中用到什么再添加什么依赖)
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<scope>provided </scope>
</dependency>
<!--mybatis-plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<scope>provided </scope>
</dependency>
<!--lombok用来简化实体类:需要安装lombok插件-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!--swagger-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
</dependency>
</dependencies>
1.1.3 构建model工程
主要用于创建实体类
往pom中添加依赖
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!--mybatis-plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<scope>provided </scope>
</dependency>
<!--swagger-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<scope>provided </scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<scope>provided </scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
<scope>provided </scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<scope>provided </scope>
</dependency>
</dependencies>
1.1.4 构建service模块
用于添加各个微服务模块
往pom中添加依赖
<packaging>pom</packaging>
<dependencies>
<dependency>
<groupId>com.tjj</groupId>
<artifactId>service_util</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.tjj</groupId>
<artifactId>model</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<!--web-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--mybatis-plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
</dependency>
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--开发者工具-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
<!-- 服务调用feign -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!-- 服务注册 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- 流量控制 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.yml</include>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes> <include>**/*.yml</include>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
1.1.5 删掉多余的文件夹
guahao_parent和common两个模块中是不需要写代码的,删掉里面的src文件夹
service模块是添加子服务模块的,所以src文件夹也是可以删掉的,综上,删掉后的文件目录结构如下
1.2 提交代码到git仓库
为了方便管理,将代码提交到git仓库,在gitee中创建一个仓库,复制地址
在IDEA中创建一个本地仓库,VCS->create git repository 选择父工程级目录
然后在添加git->add
再选择 Git->Manage Remotes
再添加远程仓库的地址
1.3 需求
1.3.1 医院设置表数据的CRUD
根据需求创建数据库、接口等
1 在service模块中添加maven子模块–>service_hosp模块
2 service-hosp模块pom里的依赖,用到什么再加什么,先添加子模块的
3 service-hosp模块创建子模块的启动类
@SpringBootApplication
@ComponentScan(basePackages = "com.tjj")
@EnableDiscoveryClient
@EnableFeignClients(basePackages = "com.tjj")
public class ServiceHospApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceHospApplication.class, args);
}
}
4 model模块导入对应数据库表的实体类,例如
package com.tjj.model.hosp;
@Data
@ApiModel(description = "医院设置")
@TableName("hospital_set")
public class HospitalSet extends BaseEntity {
private static final long serialVersionUID = 1L;
@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;
@ApiModelProperty(value = "状态")
@TableField("status")
private Integer status;
}
5 service-hosp模块中添加Mapper文件
在mapper文件夹中创建HospitalSetMapper接口继承BaseMapper
package com.tjj.mapper;
@Mapper
public interface HospitalSetMapper extends BaseMapper<HospitalSet> {
}
在mapper/xml中添加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.tjj.hosp.mapper.HospitalSetMapper">
</mapper>
MP在mapper中为我们封装了BaseMapper,我们直接继承便可以使用。
MP在service中为我们封装了IService和ServiceImpl,我们也是直接继承便可以使用
在service文件夹中
package com.tjj.service;
public interface HospitalSetService extends IService<HospitalSet> {
}
package com.tjj.service.impl;
@Service
public class HospitalSetServiceImpl extends ServiceImpl<HospitalSetMapper, HospitalSet> implements HospitalSetService {
}
在service里面最终是要调用mapper的,我们需要把mapper注入到service中,以供后面使用。===》但是我们继承的ServiceImpl已经帮我们注入了,我们自己就不需要注入mapper。我们以后直接使用baseMapper就能调用了。
6 添加controller文件
6.1.添加RestController===》集成了@Controller和@RequestBody,其中@Controller表明把此类交给Spring管理,@RequestBody为返回数据
6.2.添加@RequestMapping,即访问路径
6.3.在Controller中注入Service
package com.tjj.controller;
@RestController
@RequestMapping("/admin/hosp/hospitalSet")
public class HospitalSetController {
@Autowired
private HospitalSetService hospitalSetService;
}
4.添加业务,查询医院设置表的所有信息
返回的一个list时,在@RestController中的@RequestBody会把list转换为json,然后返回
package com.tjj.controller;
@RestController
@RequestMapping("/admin/hosp/hospitalSet")
public class HospitalSetController {
@Autowired
private HospitalSetService hospitalSetService;
//1 查询医院设置表所有信息
@GetMapping("findAll")
public Result findAllHospitalSet() {
//调用service的方法
List<HospitalSet> list = hospitalSetService.list();
return list;
}
//2 逻辑删除医院设置
@DeleteMapping("{id}")
public Result removeHospSet(@PathVariable Long id) {
boolean flag = hospitalSetService.removeById(id);
return flag;
}
1.3.7 mapper是一个interface,mapper的interface实现类是动态创建的,所以需要在启动类上添加一个@MapperScan注解;不过这里创建一个config类,在config类上添加@MapperScan,效果相同,这样方便管理Mapper
package com.tjj.config;
@Configuration
@MapperScan("com.tjj.hosp.mapper")
public class HospConfig {
}
1.3.2 Swwager API接口文档引入
为了方便调试,引入Swwager2,方便各种提交方式的测试,可以看到接口名称,请求方法,请求参数,返回信息等。
1.添加依赖
考虑到其他模块也会使用,因此在common模块中添加swwager依赖,其他微服务模块也能够使用
<dependency><!--添加Swagger依赖 -->
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.7.0</version>
</dependency>
<dependency><!--添加Swagger-UI依赖 -->
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.7.0</version>
</dependency>
2.添加swwager的配置
2.1 在service-util模块中创建config文件夹,写上配置类,配置swagger的配置内容。该配置内容一般不变(套路,定式),直接复制粘贴。
package com.tjj.common.config;
@Configuration
@EnableSwagger2
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("c8a", "https://gitee.com/cao_jianhua/yygh-parent", "1912327276@qq.com"))
.build();
}
private ApiInfo adminApiInfo(){
return new ApiInfoBuilder()
.title("后台管理系统-API文档")
.description("本文档描述了后台管理系统微服务接口定义")
.version("1.0")
.contact(new Contact("c8a", "https://gitee.com/cao_jianhua/yygh-parent", "1912327276@qq.com"))
.build();
}
}
2.2 在service-hosp模块的启动类上设置一下扫描规则,@ComponentScan(basePackages = “com.tjj”),这样虽然配置文件的包结构不一样(service-util为com.tjj.common,service-hosp为com.tjj),但是仍然可以使用在service-util中的配置。
@SpringBootApplication
@ComponentScan(basePackages = "com.tjj")
public class ServiceHospApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceHospApplication.class, args);
}
}
2.3 访问 ;swageer-ui的界面,进行接口测试
http://server:port/swagger-ui.html 其中server是服务器地址,port是服务器的端口号,是多少对应多少。
这里服务器地址是本机,端口号是8201,即 http://localhost:8201/swagger-ui.html
2.4 添加swagger的中文注解(非必须)
@Api(tags = "医院设置管理")
@RestController
@RequestMapping("/admin/hosp/hospitalSet")
public class HospitalSetController {
@Autowired
private HospitalSetService hospitalSetService;
//1 查询医院设置表所有信息
@ApiOperation(value = "获取所有医院")
@GetMapping("findAll")
public Result findAllHospitalSet() {
//调用service的方法
List<HospitalSet> list = hospitalSetService.list();
return list;
}
//2 逻辑删除医院设置
@ApiOperation(value = "逻辑删除医院")
@DeleteMapping("{id}")
public Result removeHospSet(@PathVariable Long id) {
boolean flag = hospitalSetService.removeById(id);
return flag;
}
}
1.3.3 统一返回类型
在实际开发中,不可能是一个人开发,每个人有不同的返回习惯,(有人喜欢用true表示返回成功,有人喜欢用1表示返回成功)因此统一返回,然所有的返回数据都有相同的返回格式,为前端解析显示减轻负担。
1.在common-util模块中添加com.tjj.common.result包,然后添加统一的返回类型类
package com.tjj.common.result;
@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.tjj.common.result;
@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类里面的方法是静态的,可以直接用 类名.方法名去调用。以后的返回类型都返回一个result对象。比如
@Api(tags = "医院设置管理")
@RestController
@RequestMapping("/admin/hosp/hospitalSet")
public class HospitalSetController {
@Autowired
private HospitalSetService hospitalSetService;
//1 查询医院设置表所有信息
@ApiOperation(value = "获取所有医院")
@GetMapping("findAll")
public Result findAllHospitalSet() {
//调用service的方法
List<HospitalSet> list = hospitalSetService.list();
return Result.ok(list);
}
//2 逻辑删除医院设置
@ApiOperation(value = "逻辑删除医院")
@DeleteMapping("{id}")
public Result removeHospSet(@PathVariable Long id) {
boolean flag = hospitalSetService.removeById(id);
if (flag) {
return Result.ok();
} else {
return Result.fail();
}
}
}
1.3.4 条件查询
1.创建vo类(value object值对象),封装条件值
在model模块中创建条件查询的对象(model模块专门用来存放实体类的)
package com.tjj.vo.hosp;
@Data
public class HospitalSetQueryVo {
@ApiModelProperty(value = "医院名称")
private String hosname;
@ApiModelProperty(value = "医院编号")
private String hoscode;
}
2.编写controller,获取条件对象、分页数据(当前页、每页记录数)
post请求才能有@RequestBody===》封装成json字符串
//3 条件查询带分页
@ApiOperation(value = "条件查询医院带分页")
@PostMapping("findPageHospSet/{current}/{limit}")
public Result findPageHospSet(@PathVariable long current,
@PathVariable long limit,
@RequestBody(required = false) 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);
}
-
添加医院设置,MD加密
3.1 在service-util模块添加com.tjj.common.utils,添加MD5类
package com.tjj.common.utils;
public final class MD5 {
public static String encrypt(String strSrc) {
try {
char hexChars[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8',
'9', 'a', 'b', 'c', 'd', 'e', 'f' };
byte[] bytes = strSrc.getBytes();
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(bytes);
bytes = md.digest();
int j = bytes.length;
char[] chars = new char[j * 2];
int k = 0;
for (int i = 0; i < bytes.length; i++) {
byte b = bytes[i];
chars[k++] = hexChars[b >>> 4 & 0xf];
chars[k++] = hexChars[b & 0xf];
}
return new String(chars);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
throw new RuntimeException("MD5加密出错!!+" + e);
}
}
}
3.2 加密为:当前的时间+当前生成一个随机值,然后做MD5加密,注意逻辑值修改完全,如果和其他业务有关联,就会出错,添加的时候要尽可能把各种情况都考虑进去,那些值是需要修改的(CRUD都一样,尽可能考虑完全)。
//4 添加医院设置
@ApiOperation(value = "添加医院")
@PostMapping("saveHospitalSet")
public Result saveHospitalSet(@RequestBody HospitalSet hospitalSet) {
//设置状态 1 使用 0 不能使用
hospitalSet.setStatus(1);
//签名秘钥
Random random = new Random();
hospitalSet.setSignKey(MD5.encrypt(System.currentTimeMillis()+""+random.nextInt(1000)));
//逻辑删除
hospitalSet.setIsDeleted(0);·
//调用service
boolean save = hospitalSetService.save(hospitalSet);
if(save) {
return Result.ok();
} else {
return Result.fail();
}
}