内容介绍
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)实现跨模块翻译 @Autowiredprivate DictFeignClient dictFeignClient; //带条件带分页查询医院列表
@Overridepublic 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获取下级节点
@Overridepublic 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 //获取医院详情
@Overridepublic 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#设置路由idspring.cloud.gateway.routes[0].id=service-hosp#设置路由的urispring.cloud.gateway.routes[0].uri=lb://service-hosp#设置路由断言,代理servicerId为auth-service的/auth/路径
spring.cloud.gateway.routes[0].predicates= Path=/*/hosp/**#设置路由idspring.cloud.gateway.routes[1].id=service-cmn#设置路由的urispring.cloud.gateway.routes[1].uri=lb://service-cmn#设置路由断言,代理servicerId为auth-service的/auth/路径
spring.cloud.gateway.routes[1].predicates= Path=/*/cmn/** (4)添加主目录、启动类 @SpringBootApplicationpublic class ApiGatewayApplication {public static void main(String[] args) {SpringApplication.run(ApiGatewayApplication.class, args);}} (5)启动模块测试 (6)改造前端配置 重启生效 4、扩展功能 实现跨域功能 (1)添加配置类 @Configurationpublic class CorsConfig {@Beanpublic 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 {@Autowiredprivate 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; |