栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

尚医通项目笔记

尚医通项目笔记

废话不多说,直接上图
工程目录结构

yygh-parent根目录

	common公共模块父节点
		common-util公共工具类
		rabbit-util业务封装RabbitMQ
		service-util服务工具类
		
	hospital-manage医院接口模拟端(已开发,直接使用)
	
	model实体类
	
	service接口服务父节点
		service-hosp医院api接口服务
		service-cmn公共api接口服务
		service-user用户api接口服务
		service-order订单api接口服务
		service-oss文件api接口服务
		service-msm短信api接口服务
		service-statistics统计api接口服务
		
	service-client服务调用feign父节点
		service-cmn-client公共api接口
		service-hosp-client医院api接口
		service-order-client订单api接口
		service-user-client用户api接口
		
	service-gateway服务网关
1、common公共模块

common-util公共的工具类模块
工具类模块,所有模块都可以依赖于它
从课程资料文件夹直接粘贴工具类到project中

总共 5个工具类 包括:
YyghException 【自定义全局异常 】
Result 【API统一返回结果封装类】
ResultCodeEnum API统一返回结果状态信息
BeanUtils 实体bean copy工具类
MD5 MD5加密工具类

service-util service服务的工具类模块
service服务的工具类模块,包含service服务的公共配置类,所有service模块依赖于它

总共2个工具类 包括:
MybatisPlusConfig MybatisPlus配置类
CommonmetaObjectHandler Mybatis plus Handler配置类

其中MybatisPlusConfig.java配置了MybatisPlus的分页插件和乐观锁

package com.atguigu.yygh.common.config;


@EnableTransactionManagement //事务处理
@Configuration
@MapperScan("com.atguigu.yygh.*.mapper")
public class MybatisPlusConfig {


@Bean
public PaginationInterceptor paginationInterceptor() {
        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
// paginationInterceptor.setLimit(你的最大单页限制数量,默认 500 条,小于 0 如 -1 不受限制);
return paginationInterceptor;
    }


@Bean
public OptimisticLockerInterceptor optimisticLockerInterceptor() {
return new OptimisticLockerInterceptor();
    }
}

【CommonmetaObjectHandler配置了创建时间和修改时间字段的自动插入】

@Component
public class CommonmetaObjectHandler implements metaObjectHandler {

@Override
public void insertFill(metaObject metaObject) {
this.setFieldValByName("createTime", new Date(), metaObject);
this.setFieldValByName("updateTime", new Date(), metaObject);
    }
@Override
public void updateFill(metaObject metaObject) {
this.setFieldValByName("updateTime", new Date(), metaObject);
    }
}
2、model实体类模块

从课程资料文件夹直接复制到project中

3、service接口服务父模块

service-hosp医院服务接口模块

医院设置接口

需求:医院设置主要是用来保存开通医院的一些基本信息,每个医院一条信息,保存了医院编号(平台分配,全局唯一)和接口调用相关的签名key等信息,是整个流程的第一步,只有开通了医院设置信息,才可以上传医院相关信息。
我们所开发的功能就是基于单表的一个CRUD、锁定/解锁和发送签名信息这些基本功能。
表结构:
hosname:医院名称
hoscode:医院编号(平台分配,全局唯一,api接口必填信息)
api_url:医院回调的基础url(如:预约下单,我们要调用该地址去医院下单)
sign_key:双方api接口调用的签名key,有平台生成
contacts_name:医院联系人姓名
contacts_phone:医院联系人手机
status:状态(锁定/解锁)

【实际上为Mybatis Plus CRUD接口】
Mybatis的CRUD步骤为:

1、 添加配置文件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://192.168.44.163:3306/yygh_hosp?characterEncoding=utf-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=root

#返回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
 
#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

2、添加启动类:ServiceHospApplication
3、使用model:HospitalSet

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

}

【baseEntity:在此entity存储一些通用的字段,节省子类代码量】

@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 param = new HashMap<>();
}

4、添加mapper:
@Mapper
public interface HospitalSetMapper extends baseMapper
5、在mapper/xml下添加HospitalSetMapper.xml------->【说明一下:这里集成了Mybatis-Plus作为ORM框架,一般情况下是否创建xml文件都是可以的】





6、添加service接口及实现类

接口  com.atguigu.yygh.hosp.service.HospitalSetService
public interface HospitalSetService extends IService {
}

 
实现类  com.atguigu.yygh.hosp.service.impl.HospitalSetServiceImpl
@Service
public class HospitalSetServiceImpl extends ServiceImplimplements HospitalSetService {

@Autowired
private HospitalSetMapper hospitalSetMapper;

}

7、添加controller------->【说明一下:原项目中老师这样写是不符合规范的,业务逻辑代码应该尽量都放在Service层,不要放在Controller层,最好尽可能的把代码放在Service层,然后在Controller层调用Service层的方法实现功能】

Controller  com.atguigu.yygh.hosp.controller.HospitalSetController

@Api(tags = "医院设置管理")  //【Swagger2的注解】
@RestController   //【相当于@Controller + @ResponseBody】
@RequestMapping("/admin/hosp/hospitalSet")  //【用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径】
public class HospitalSetController {

    //注入service
    @Autowired
    private HospitalSetService hospitalSetService;

    //1 查询医院设置表所有信息
    @ApiOperation(value = "获取所有医院设置")
    @GetMapping("findAll")
    public Result findAllHospitalSet() {
        //调用service的方法
        List 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();
        }
    }

    //3 条件查询带分页
    @PostMapping("findPageHospSet/{current}/{limit}")
    public Result findPageHospSet(@PathVariable long current,
                                  @PathVariable long limit,
                                  @RequestBody
(required = false) HospitalSetQueryVo hospitalSetQueryVo) {
        //创建page对象,传递当前页,每页记录数
        Page page = new Page<>(current,limit);
        //构建条件
        QueryWrapper 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 pageHospitalSet = hospitalSetService.page(page, wrapper);
        //返回结果
        return Result.ok(pageHospitalSet);
    }

    //4 添加医院设置
    @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)));
        //调用service
        boolean save = hospitalSetService.save(hospitalSet);
        if(save) {
            return Result.ok();
        } else {
            return Result.fail();
        }
    }

    //5 根据id获取医院设置
    @GetMapping("getHospSet/{id}")
    public Result getHospSet(@PathVariable Long id) {
        HospitalSet hospitalSet = hospitalSetService.getById(id);
        return Result.ok(hospitalSet);
    }

    //6 修改医院设置
    @PostMapping("updateHospitalSet")
    public Result updateHospitalSet(@RequestBody HospitalSet hospitalSet) {
        boolean flag = hospitalSetService.updateById(hospitalSet);
        if(flag) {
            return Result.ok();
        } else {
            return Result.fail();
        }
    }

    //7 批量删除医院设置
    @DeleteMapping("batchRemove")
    public Result batchRemoveHospitalSet(@RequestBody List idList) {
        hospitalSetService.removeByIds(idList);
        return Result.ok();
    }
}

项目集成Swagger2
Swagger2可以帮助我们编写和维护的API接口文档
常用注解
swagger通过注解表明该接口会生成文档,包括接口名、请求方法、参数、返回信息的等等

@Api:修饰整个类,描述Controller的作用
@ApiOperation:描述一个类的一个方法,或者说一个接口
@ApiParam:单个参数描述
@ApiModel:用对象来接收参数
@ApiModelProperty:用对象接收参数时,描述对象的一个字段
@ApiImplicitParam:一个请求参数
@ApiImplicitParams:多个请求参数

1、引入依赖
在common公共模块pom.xml引入依赖


io.springfox
springfox-swagger2


io.springfox
springfox-swagger-ui

2、添加配置类
在service-util服务工具模块添加配置类:
com.atguigu.yygh.common.config.Swagger2Config类

@Configuration   //【Spring的配置类注释】
@EnableSwagger2  //【启用Swagger2】
public class Swagger2Config {   //【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();
    }
}

参考资料:B站-尚硅谷-尚医通项目 https://www.bilibili.com/video/BV1V5411K7rT?p=1

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/760898.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号