内容介绍
1、医院列表功能(接口) 4、医院列表功能(前端) 5、更新医院上线状态功能 6、医院详情 7、GateWay网关 8、医院排班管理需求分析 9、查看医院所有科室接口、前端 |
医院列表功能(接口)
(1)在service下添加依赖 (2)在hosp下添加依赖 <dependency>
<groupId>com.atguigu</groupId>
<artifactId>service_cmn_client</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency> (3)启动类添加注解 @EnableFeignClients(basePackages = "com.atguigu") (5)实现跨模块翻译 @Autowired
private DictFeignClient dictFeignClient; //带条件带分页查询医院列表
@Override
public Page<Hospital> selectPage(Integer page, Integer limit,
HospitalQueryVo hospitalQueryVo) {
//1创建分页对象
//1.1创建排序对象
Sort sort = Sort.by(Sort.Direction.ASC,"hoscode");
//1.2创建分页对象
Pageable pageable = PageRequest.of((page-1),limit,sort);
//2创建条件模板
//2.1封装查询条件
Hospital hospital = new Hospital();
BeanUtils.copyProperties(hospitalQueryVo,hospital);
//2.2模板构造器
ExampleMatcher matcher = ExampleMatcher.matching()
.withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING)
.withIgnoreCase(true);
//2.3创建模板
Example<Hospital> example = Example.of(hospital,matcher);
//3实现带条件带分页查询
Page<Hospital> pageModel = hospitalRepository.findAll(example, pageable);
//4 遍历集合翻译字段
pageModel.getContent().forEach(item->{
this.packHospital(item);
});
return pageModel;
}
//翻译医院信息
private Hospital packHospital(Hospital hospital) {
//1翻译医院等级
String hostypeString = dictFeignClient.getName(DictEnum.HOSTYPE.getDictCode(), hospital.getHostype());
//2翻译地址信息
String provinceString = dictFeignClient.getName(hospital.getProvinceCode());
String cityString = dictFeignClient.getName(hospital.getCityCode());
String districtString = dictFeignClient.getName(hospital.getDistrictCode());
//3封装数据返回
hospital.getParam().put("hostypeString", hostypeString);
hospital.getParam().put("fullAddress", provinceString + cityString + districtString + hospital.getAddress());
return hospital;
} (6)测试 4、创建cmn接口 (1)分析接口 *参数:dictCode *返回值:R(List<Dict>) (2)实现controller @ApiOperation(value = "根据dictCode获取下级节点")
@GetMapping(value = "/findByDictCode/{dictCode}")
public R findByDictCode(
@PathVariable String dictCode) {
List<Dict> list = dictService.findByDictCode(dictCode);
return R.ok().data("list",list);
} (3)实现service //根据dictCode获取下级节点
@Override
public List<Dict> findByDictCode(String dictCode) {
//1 根据dictCode查询字典信息
Dict parentDict = this.getByDictCode(dictCode);
//2 根据父id查询子数据
LambdaQueryWrapper<Dict> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(Dict::getParentId,parentDict.getId());
List<Dict> list = baseMapper.selectList(wrapper);
return list;
} (4)测试 |
医院列表功能(前端)
1、添加路由 2、添加页面保存路由 3、添加api接口方法 6、测试 |
更新医院上线状态功能
1、分析需求 医院排班管理需求分析
查看医院所有科室接口、前端
2、实现接口 (1)分析接口 *参数:id、status *返回值:R.ok() (2)实现controller 3、对接前端 (1)确认入口 (2)添加api (3)确认页面 (4)实现js (5)测试 |
医院详情查询实现
1、实现接口 (1)分析接口 *参数:id *返回值:R(map(医院基本信息、预约规则)) (2)实现controller @ApiOperation(value = "获取医院详情")
@GetMapping("show/{id}")
public R show(
@PathVariable String id) {
Map<String,Object> map = hospitalService.show(id);
return R.ok().data(map);
} (3)实现service //获取医院详情
@Override
public Map<String, Object> show(String id) {
Hospital hospital = this.packHospital(hospitalRepository.findById(id).get()) ;
BookingRule bookingRule = hospital.getBookingRule();
hospital.setBookingRule(null);
Map<String, Object> result = new HashMap<>();
result.put("hospital",hospital);
result.put("bookingRule",bookingRule);
return result;
} (4)测试 2、对接前端 (1)确认入口 (3)创建页面,保存路由 (7)添加css 第一、将show.css文件复制到src/styles目录 第二、在src/main.js文件添加引用 import '@/styles/show.css' |
Spring Cloud GateWay网关搭建
1、是什么 2 Spring Cloud Gateway (1)架构图 (2)核心概念 路由。路由是网关最基础的部分,路由信息有一个ID、一个目的URL、一组断言和一组Filter组成。如果断言路由为真,则说明请求的URL和配置匹配 断言。Java8中的断言函数。Spring Cloud Gateway中的断言函数输入类型是Spring5.0框架中的ServerWebExchange。Spring Cloud Gateway中的断言函数允许开发者去定义匹配来自于http request中的任何信息,比如请求头和参数等。 过滤器。一个标准的Spring webFilter。Spring cloud gateway中的filter分为两种类型的Filter,分别是Gateway Filter和Global Filter。过滤器Filter将会对请求和响应进行修改处理 3、创建service_gateway模块(网关服务) (1)创建模块 (2)导入依赖 <dependencies>
<dependency>
<groupId>com.atguigu</groupId>
<artifactId>common_utils</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!-- 服务注册 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies> (3)编写application.properties配置文件 # 服务端口
server.port=8200
# 服务名
spring.application.name=service-gateway
# nacos服务地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
#使用服务发现路由
spring.cloud.gateway.discovery.locator.enabled=true
#设置路由id
spring.cloud.gateway.routes[0].id=service-hosp
#设置路由的uri
spring.cloud.gateway.routes[0].uri=lb://service-hosp
#设置路由断言,代理servicerId为auth-service的/auth/路径
spring.cloud.gateway.routes[0].predicates= Path=/*/hosp/**
#设置路由id
spring.cloud.gateway.routes[1].id=service-cmn
#设置路由的uri
spring.cloud.gateway.routes[1].uri=lb://service-cmn
#设置路由断言,代理servicerId为auth-service的/auth/路径
spring.cloud.gateway.routes[1].predicates= Path=/*/cmn/** (4)添加主目录、启动类 @SpringBootApplication
public class ApiGatewayApplication {
public static void main(String[] args) {
SpringApplication.run(ApiGatewayApplication.class, args);
}
} (5)启动模块测试 (6)改造前端配置 重启生效 4、扩展功能 实现跨域功能 (1)添加配置类 @Configuration
public class CorsConfig {
@Bean
public CorsWebFilter corsFilter() {
CorsConfiguration config = new CorsConfiguration();
config.addAllowedMethod("*");
config.addAllowedOrigin("*");
config.addAllowedHeader("*");
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(new PathPatternParser());
source.registerCorsConfiguration("/**", config);
return new CorsWebFilter(source);
}
} (2)测试 |
医院排班管理需求分析
1、分析需求
(3)根据医院、科室、排班日期查询排班集合 2、实现方案 (1)使用el-tree展现树形科室信息 (2)根据hoscode、depcode筛选数据,根据排班日期进行带分页带排序的聚合查询。使用工具推算周几 (3)根据医院、科室、排班日期查询排班集合 3、实现步骤 虽然是一个页面展示所有内容,但是页面相对复杂,我们分步骤实现 第一,先实现左侧科室树形展示; 第二,其次排班日期分页展示 第三,最后根据排班日期获取排班详情数据 |
查看医院所有科室接口、前端
1、分析需求 2、实现接口 (1)分析接口 *参数:hoscode *返回值:R(树形结构展示科室集合List<DepartmentVo>) (2)创建controller (3)如果是mysql如何实现 #查询大科室集合 SELECT d.bigcode ,d.bigname,COUNT(d.id) FROM Department d GROUP BY d.bigcode ,d.bigname; #遍历大科室集合,根据bigcode查询小科室集合 SELECT * FROM Department d WHERE d.bigcode = '大科室编码'; (4)梳理实现步骤 (6)测试 3、对接前端 (1)确认入口 (3)创建页面 (7)测试 |
排班日期统计列表
1确认需求 (1)根据医院、科室、日期带分页聚合查询 (2)根据排班日期推算周几 2、实现接口 (1)分析接口 *参数:page、limit、hoscode、depcode *返回值:R(Map(total、List<BookingScheduleRuleVo>。。。)) (2)创建controller @Api(tags = "排班管理")
@RestController
@RequestMapping("/admin/hosp/schedule")
public class ScheduleController {
@Autowired
private ScheduleService scheduleService;
//根据医院编号 和 科室编号 ,查询排班规则数据
@ApiOperation(value ="查询排班规则统计数据")
@GetMapping("getScheduleRule/{page}/{limit}/{hoscode}/{depcode}")
public R getScheduleRule(@PathVariable long page,
@PathVariable long limit,
@PathVariable String hoscode,
@PathVariable String depcode) {
Map<String,Object> map = scheduleService.getScheduleRule(page,limit,hoscode,depcode);
return R.ok().data(map);
}
} (3)如果是mysql如何实现 #根据医院编号 和 科室编号 ,查询排班规则统计数据,带分页带排序 SELECT s.workDate,COUNT(id) AS docCount, SUM(s.reservedNumber) AS reservedNumber, SUM(s.availableNumber) AS availableNumber FROM SCHEDULE s WHERE s.hoscode = '医院编号' AND s.depcode = '科室编号' GROUP BY s.workDate ORDER BY s.workDate LIMIT XXXX; |