尚医通9:医院列表功能+GateWay网关

news/2024/5/16 17:01:04/文章来源:https://blog.csdn.net/leader_song/article/details/131993398
内容介绍

1、医院列表功能(接口)

4、医院列表功能(前端)

5、更新医院上线状态功能

6、医院详情

7、GateWay网关

8、医院排班管理需求分析

9、查看医院所有科室接口、前端

医院列表功能(接口)
  1. 接口初步实现
  2. 跨模块接口
  3. 改造hosp实现跨模块调用

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

*返回值:RList<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、添加路由

{path: 'hospital/list',name: '医院列表',component: () => import('@/views/yygh/hosp/list'),meta: { title: '医院列表', icon: 'table' }}

2、添加页面保存路由

3、添加api接口方法

(1)在api/yygh目录下创建hosp.js文件import request from '@/utils/request'const api_name = '/admin/hosp/hospital'export default {//带条件带分页查询医院列表getHospPage(page, limit, searchObj) {return request({url: `${api_name}/getHospPage/${page}/${limit}`,method: 'get',params: searchObj})}}(2)在dict.js下添加新方法import request from '@/utils/request'const api_name = '/admin/cmn/dict'export default {dictList(id) {//数据字典列表return request ({url: `${api_name}/findChildData/${id}`,method: 'get'})},//根据dictCode获取下级节点findByDictCode(dictCode) {return request ({url: `${api_name}/findByDictCode/${dictCode}`,method: 'get'})}}4、添加页面元素<template><div class="app-container"><el-form :inline="true" class="demo-form-inline"><el-form-item><el-select v-model="searchObj.provinceCode" placeholder="请选择省" @change="provinceChanged"><el-optionv-for="item in provinceList":key="item.id":label="item.name":value="item.id"/></el-select></el-form-item><el-form-item><el-select v-model="searchObj.cityCode" placeholder="请选择市"><el-option v-for="item in cityList" :key="item.id" :label="item.name" :value="item.id"/></el-select></el-form-item><el-form-item><el-input v-model="searchObj.hosname" placeholder="医院名称"/></el-form-item><el-button type="primary" icon="el-icon-search" @click="fetchData()">查询</el-button><el-button type="default" @click="resetData()">清空</el-button></el-form><!-- banner列表 --><el-table v-loading="listLoading" :data="list" border fit highlight-current-row><el-table-column label="序号" width="60" align="center"><template slot-scope="scope">{{ (page - 1) * limit + scope.$index + 1 }}</template></el-table-column><el-table-column label="医院logo"><template slot-scope="scope"><img :src="'data:image/jpeg;base64,'+scope.row.logoData" width="80"></template></el-table-column><el-table-column prop="hosname" label="医院名称"/><el-table-column prop="param.hostypeString" label="等级" width="90"/><el-table-column prop="param.fullAddress" label="详情地址"/><el-table-column label="状态" width="80"><template slot-scope="scope">{{ scope.row.status === 0 ? '未上线' : '已上线' }}</template></el-table-column><el-table-column prop="createTime" label="创建时间"/><el-table-column label="操作" width="230" align="center"><template slot-scope="scope"><router-link :to="'/hospSet/hospital/show/'+scope.row.id"><el-button type="primary" size="mini">查看</el-button></router-link><router-link :to="'/hospSet/hospital/schedule/'+scope.row.hoscode"><el-button type="primary" size="mini">排班</el-button></router-link><el-buttonv-if="scope.row.status == 1"type="primary"size="mini"@click="updateStatus(scope.row.id, 0)">下线</el-button><el-buttonv-if="scope.row.status == 0"type="danger"size="mini"@click="updateStatus(scope.row.id, 1)">上线</el-button></template></el-table-column></el-table><!-- 分页组件 --><el-pagination:current-page="page":total="total":page-size="limit":page-sizes="[5, 10, 20, 30, 40, 50, 100]"style="padding: 30px 0; text-align: center;"layout="sizes, prev, pager, next, jumper, ->, total, slot"@current-change="fetchData"@size-change="changeSize"/></div></template>5、实现js<script>import hospApi from "@/api/yygh/hosp";import dictApi from "@/api/yygh/dict";export default {data() {return {listLoading: true, // 数据是否正在加载list: null, // 医院列表数据集合total: 0, // 数据库中的总记录数page: 1, // 默认页码limit: 10, // 每页记录数searchObj: {provinceCode: "",cityCode: ""}, // 查询表单对象provinceList: [], //所有省集合cityList: [] //所有市集合};},created() {//初始化查询医院列表this.fetchData();//初始化查询省信息this.getProvinceList();},methods: {//查询医院列表fetchData(page = 1) {this.page = page;hospApi.getHospPage(this.page, this.limit, this.searchObj).then(response => {this.list = response.data.pageModel.content;this.total = response.data.pageModel.totalElements;this.listLoading = false;});},//查询省信息getProvinceList() {dictApi.findByDictCode("Province").then(response => {this.provinceList = response.data.list;});},//选择省加载市信息provinceChanged() {//1清空市信息this.searchObj.cityCode = "";this.cityList = [];//2调用接口初始化市信息dictApi.dictList(this.searchObj.provinceCode).then(response => {this.cityList = response.data.list;});},//清空resetData() {this.searchObj = {provinceCode: "",cityCode: ""}this.fetchData();},//切换每页记录数changeSize(size){this.limit = sizethis.fetchData();}}};
</script>

6、测试

更新医院上线状态功能

1、分析需求

医院排班管理需求分析

1、分析需求

 

  1. 用树形结构展现科室信息
  2. 根据条件筛选带分页带排序统计分析(聚合查询)号源信息,推算周几

3)根据医院、科室、排班日期查询排班集合

2、实现方案

1)使用el-tree展现树形科室信息

2)根据hoscodedepcode筛选数据,根据排班日期进行带分页带排序的聚合查询。使用工具推算周几

3)根据医院、科室、排班日期查询排班集合

3、实现步骤

虽然是一个页面展示所有内容,但是页面相对复杂,我们分步骤实现

第一,先实现左侧科室树形展示;

第二,其次排班日期分页展示

第三,最后根据排班日期获取排班详情数据

查看医院所有科室接口、前端

1、分析需求

 

2、实现接口

1)分析接口

*参数:hoscode

*返回值:R(树形结构展示科室集合List<DepartmentVo>

 

2)创建controller

@Api(tags = "科室管理")@RestController@RequestMapping("/admin/hosp/department")public class DepartmentController {@Autowiredprivate DepartmentService departmentService;//根据医院编号,查询医院所有科室列表
@ApiOperation(value = "查询医院所有科室列表")@GetMapping("getDeptList/{hoscode}")public R getDeptList(@PathVariable String hoscode) {List<DepartmentVo> list = departmentService.getDeptListTree(hoscode);return R.ok().data("list",list);}}

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)梳理实现步骤

//根据医院编号,查询医院所有科室列表@Overridepublic List<DepartmentVo> getDeptListTree(String hoscode) {//1创建最终返回对象//2根据hoscode查询所有科室信息List<Department>//3根据集合数据进行分组//List<Department>=>Map( k:bigcode  v: List<Department>)//4遍历map,封装大科室信息DepartmentVo//5封装小科室信息List<DepartmentVo>//6小科室集合存入大科室vo//7大科室vo存入最终返回对象return null;}
(5)实现service//根据医院编号,查询医院所有科室列表@Overridepublic List<DepartmentVo> getDeptListTree(String hoscode) {//1创建最终返回对象List<DepartmentVo> result = new ArrayList<>();//2根据hoscode查询所有科室信息List<Department>List<Department> departmentList = departmentRepository.getByHoscode(hoscode);//3根据集合数据进行分组//List<Department>=>Map( k:bigcode  v: List<Department>)Map<String,List<Department>> departmentMap = departmentList.stream().collect(Collectors.groupingBy(Department::getBigcode));//4遍历map,封装大科室信息DepartmentVofor (Map.Entry<String, List<Department>> entry : departmentMap.entrySet()) {DepartmentVo deptBigVo = new DepartmentVo();deptBigVo.setDepcode(entry.getKey());List<Department> deptList = entry.getValue();deptBigVo.setDepname(deptList.get(0).getBigname());//5封装小科室信息List<DepartmentVo>List<DepartmentVo> children = new ArrayList<>();for (Department dept : deptList) {DepartmentVo departmentVo = new DepartmentVo();departmentVo.setDepcode(dept.getDepcode());departmentVo.setDepname(dept.getDepname());children.add(departmentVo);}//6小科室集合存入大科室vodeptBigVo.setChildren(children);//7大科室vo存入最终返回对象result.add(deptBigVo);}return result;}

6)测试

 

3、对接前端

1)确认入口

 

<router-link :to="'/yygh/hospSet/hospital/schedule/'+scope.row.hoscode"><el-button type="primary" size="mini">排班</el-button></router-link>(2)创建隐藏路由{path: 'hospital/schedule/:hoscode',name: '排班',component: () => import('@/views/yygh/hosp/schedule'),meta: { title: '排班', noCache: true },hidden: true}(3)创建页面(4)创建api在hosp.js中添加api方法//查看医院科室getDeptByHoscode(hoscode) {return request({url: `/admin/hosp/department/getDeptList/${hoscode}`,method: 'get'})}(5)添加页面元素<template><div class="app-container"><div style="margin-bottom: 10px;font-size: 10px;">选择:</div><el-container style="height: 100%"><el-aside width="200px" style="border: 1px silver solid"><!-- 部门 --><el-tree:data="data":props="defaultProps":default-expand-all="true"@node-click="handleNodeClick"></el-tree></el-aside><el-main style="padding: 0 0 0 20px;"><el-row style="width: 100%"><!-- 排班日期 分页 --></el-row><el-row style="margin-top: 20px;"><!-- 排班日期对应的排班医生 --></el-row></el-main></el-container></div></template>(6)实现js<script>import hospApi from "@/api/yygh/hosp";export default {data() {return {data: [], //科室集合defaultProps: {//默认支柱属性children: "children",label: "depname"},hoscode: ""//医院编码};},created() {this.hoscode = this.$route.params.hoscodethis.fetchData()},methods: {//查询科室数据fetchData(){hospApi.getDeptByHoscode(this.hoscode).then(response=>{this.data = response.data.list})}}};</script>

7)测试

 

2、实现接口

1)分析接口

*参数:idstatus

*返回值:R.ok()

2)实现controller

@ApiOperation(value = "更新上线状态")@GetMapping("updateStatus/{id}/{status}")public R updateStatus(@PathVariable("id") String id,@PathVariable("status") Integer status){hospitalService.updateStatus(id,status);return R.ok();}
(3)实现service//更新上线状态@Overridepublic void updateStatus(String id, Integer status) {if(status.intValue()==0||status.intValue()==1){Hospital hospital = hospitalRepository.findById(id).get();hospital.setStatus(status);hospitalRepository.save(hospital);}}

3、对接前端

1)确认入口

2)添加api

//上下线updateStatus(id, status) {return request({url: `${api_name}/updateStatus/${id}/${status}`,method: 'get'})}

3)确认页面

4)实现js

//上下线updateStatus(id, status) {hospApi.updateStatus(id, status).then(response => {this.$message({type: "success",message: "操作成功!"});this.fetchData();});}

5)测试

医院详情查询实现

1、实现接口

1)分析接口

*参数:id

*返回值:Rmap(医院基本信息、预约规则))

(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)确认入口

<router-link :to="'/yygh/hospset/hospital/show/'+scope.row.id"><el-button type="primary" size="mini">查看</el-button></router-link>(2)添加隐藏路由{path: 'hospital/show/:id',name: '查看',component: () => import('@/views/yygh/hosp/show'),meta: { title: '查看', noCache: true },hidden: true}

3)创建页面,保存路由

(4)添加api接口方法//查看医院详情getHospById(id) {return request({url: `${api_name}/show/${id}`,method: 'get'})}(5)添加页面元素<template><div class="app-container"><h4>基本信息</h4><table class="table table-striped table-condenseda table-bordered" width="100%"><tbody><tr><th width="15%">医院名称</th><td width="35%"><b style="font-size: 14px">{{ hospital.hosname }}</b>| {{ hospital.param.hostypeString }}</td><th width="15%">医院logo</th><td width="35%"><img :src="'data:image/jpeg;base64,'+hospital.logoData" width="80"></td></tr><tr><th>医院编码</th><td>{{ hospital.hoscode }}</td><th>地址</th><td>{{ hospital.param.fullAddress }}</td></tr><tr><th>坐车路线</th><td colspan="3">{{ hospital.route }}</td></tr><tr><th>医院简介</th><td colspan="3">{{ hospital.intro }}</td></tr></tbody></table><h4>预约规则信息</h4><table class="table table-striped table-condenseda table-bordered" width="100%"><tbody><tr><th width="15%">预约周期</th><td width="35%">{{ bookingRule.cycle }}天</td><th width="15%">放号时间</th><td width="35%">{{ bookingRule.releaseTime }}</td></tr><tr><th>停挂时间</th><td>{{ bookingRule.stopTime }}</td><th>退号时间</th><td>{{ bookingRule.quitDay == -1 ? '就诊前一工作日' : '就诊当日' }}{{ bookingRule.quitTime }} 前取消</td></tr><tr><th>预约规则</th><td colspan="3"><ol><li v-for="item in bookingRule.rule" :key="item">{{ item }}</li></ol></td></tr><br><el-row><el-button @click="back">返回</el-button></el-row></tbody></table></div></template>(6)实现js<script>import hospApi from "@/api/yygh/hosp";export default {data () {return {hospital:{},//医院基本信息bookingRule:{}//预约规则}},created () {let id = this.$route.params.idthis.init(id)},methods: {init(id){hospApi.getHospById(id).then(response=>{this.hospital = response.data.hospitalthis.bookingRule = response.data.bookingRule})},back(){this.$router.push({path:"/yygh/hospset/hospital/list"})}}}</script>

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#设置路由断言,代理servicerIdauth-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#设置路由断言,代理servicerIdauth-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、分析需求

  1. 用树形结构展现科室信息
  2. 根据条件筛选带分页带排序统计分析(聚合查询)号源信息,推算周几

3)根据医院、科室、排班日期查询排班集合

2、实现方案

1)使用el-tree展现树形科室信息

2)根据hoscodedepcode筛选数据,根据排班日期进行带分页带排序的聚合查询。使用工具推算周几

3)根据医院、科室、排班日期查询排班集合

3、实现步骤

虽然是一个页面展示所有内容,但是页面相对复杂,我们分步骤实现

第一,先实现左侧科室树形展示;

第二,其次排班日期分页展示

第三,最后根据排班日期获取排班详情数据

查看医院所有科室接口、前端

1、分析需求

2、实现接口

1)分析接口

*参数:hoscode

*返回值:R(树形结构展示科室集合List<DepartmentVo>

2)创建controller

@Api(tags = "科室管理")@RestController@RequestMapping("/admin/hosp/department")public class DepartmentController {@Autowiredprivate DepartmentService departmentService;//根据医院编号,查询医院所有科室列表@ApiOperation(value = "查询医院所有科室列表")@GetMapping("getDeptList/{hoscode}")public R getDeptList(@PathVariable String hoscode) {List<DepartmentVo> list = departmentService.getDeptListTree(hoscode);return R.ok().data("list",list);}}

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)梳理实现步骤

//根据医院编号,查询医院所有科室列表@Overridepublic List<DepartmentVo> getDeptListTree(String hoscode) {//1创建最终返回对象//2根据hoscode查询所有科室信息List<Department>//3根据集合数据进行分组//List<Department>=>Map( k:bigcode  v: List<Department>)//4遍历map,封装大科室信息DepartmentVo//5封装小科室信息List<DepartmentVo>//6小科室集合存入大科室vo//7大科室vo存入最终返回对象return null;}
(5)实现service//根据医院编号,查询医院所有科室列表@Overridepublic List<DepartmentVo> getDeptListTree(String hoscode) {//1创建最终返回对象List<DepartmentVo> result = new ArrayList<>();//2根据hoscode查询所有科室信息List<Department>List<Department> departmentList = departmentRepository.getByHoscode(hoscode);//3根据集合数据进行分组//List<Department>=>Map( k:bigcode  v: List<Department>)Map<String,List<Department>> departmentMap = departmentList.stream().collect(Collectors.groupingBy(Department::getBigcode));//4遍历map,封装大科室信息DepartmentVofor (Map.Entry<String, List<Department>> entry : departmentMap.entrySet()) {DepartmentVo deptBigVo = new DepartmentVo();deptBigVo.setDepcode(entry.getKey());List<Department> deptList = entry.getValue();deptBigVo.setDepname(deptList.get(0).getBigname());//5封装小科室信息List<DepartmentVo>List<DepartmentVo> children = new ArrayList<>();for (Department dept : deptList) {DepartmentVo departmentVo = new DepartmentVo();departmentVo.setDepcode(dept.getDepcode());departmentVo.setDepname(dept.getDepname());children.add(departmentVo);}//6小科室集合存入大科室vodeptBigVo.setChildren(children);//7大科室vo存入最终返回对象result.add(deptBigVo);}return result;}

6)测试

3、对接前端

1)确认入口

<router-link :to="'/yygh/hospSet/hospital/schedule/'+scope.row.hoscode"><el-button type="primary" size="mini">排班</el-button></router-link>(2)创建隐藏路由{path: 'hospital/schedule/:hoscode',name: '排班',component: () => import('@/views/yygh/hosp/schedule'),meta: { title: '排班', noCache: true },hidden: true}

3)创建页面

(4)创建api在hosp.js中添加api方法//查看医院科室getDeptByHoscode(hoscode) {return request({url: `/admin/hosp/department/getDeptList/${hoscode}`,method: 'get'})}(5)添加页面元素<template><div class="app-container"><div style="margin-bottom: 10px;font-size: 10px;">选择:</div><el-container style="height: 100%"><el-aside width="200px" style="border: 1px silver solid"><!-- 部门 --><el-tree:data="data":props="defaultProps":default-expand-all="true"@node-click="handleNodeClick"></el-tree></el-aside><el-main style="padding: 0 0 0 20px;"><el-row style="width: 100%"><!-- 排班日期 分页 --></el-row><el-row style="margin-top: 20px;"><!-- 排班日期对应的排班医生 --></el-row></el-main></el-container></div></template>(6)实现js<script>import hospApi from "@/api/yygh/hosp";export default {data() {return {data: [], //科室集合defaultProps: {//默认支柱属性children: "children",label: "depname"},hoscode: ""//医院编码};},created() {this.hoscode = this.$route.params.hoscodethis.fetchData()},methods: {//查询科室数据fetchData(){hospApi.getDeptByHoscode(this.hoscode).then(response=>{this.data = response.data.list})}}};</script>

7)测试

排班日期统计列表

1确认需求

1)根据医院、科室、日期带分页聚合查询

2)根据排班日期推算周几

2、实现接口

1)分析接口

*参数:pagelimithoscodedepcode

*返回值:RMaptotalList<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;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_337080.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

空中出租车运营公司【Flewber Global】申请纳斯达克IPO上市

猛兽财经获悉&#xff0c;总部位于美国纽约的空中出租车运营公司Flewber Global Inc&#xff0c;近期已向美国证券交易委员会&#xff08;SEC&#xff09;提交招股书&#xff0c;申请在纳斯达克IPO上市&#xff0c;股票代码为&#xff08;FLYF&#xff09;,Flewber Global计划通…

英伟达 H100 vs. 苹果M2,大模型训练,哪款性价比更高?

M1芯片 | Uitra | AMD | A100 M2芯片 | ARM | A800 | H100 关键词&#xff1a;M2芯片&#xff1b;Ultra&#xff1b;M1芯片&#xff1b;UltraFusion&#xff1b;ULTRAMAN&#xff1b;RTX4090、A800;A100&#xff1b;H100&#xff1b;LLAMA、LM、AIGC、CHATGLM、LLVM、LLM、LLM…

基于深度强化学习的DQN模型实现自动玩俄罗斯方块游戏(附详细代码讲解)

一、DQN&#xff08;Deep Q-Network&#xff09;方法概述 DQN&#xff08;Deep Q-Network&#xff09;是一种强化学习方法&#xff0c;通过结合Q-learning算法和深度神经网络来解决强化学习问题。它是深度强化学习的里程碑之一&#xff0c;由DeepMind在2013年提出&#xff0c;被…

AI绘画StableDiffusion实操教程:可爱头像奶茶小女孩(附高清图片)

本教程收集于&#xff1a;AIGC从入门到精通教程汇总 今天继续分享AI绘画实操教程&#xff0c;如何用lora包生成超可爱头像奶茶小女孩 放大高清图已放到教程包内&#xff0c;需要的可以自取。 欢迎来到我们这篇特别的文章——《AI绘画StableDiffusion实操教程&#xff1a;可爱…

FPGA2-采集OV5640乒乓缓存后经USB3.0发送到上位机显示

1.场景 基于特权A7系列开发板&#xff0c;采用OV5640摄像头实时采集图像数据&#xff0c;并将其经过USB3.0传输到上位机显示。这是验证数据流能力的很好的项目。其中&#xff0c;用到的软件版本&#xff0c;如下表所示&#xff0c;基本的硬件情况如下。该项目对应FPGA工程源码…

VMware虚拟机中配置静态IP

目录 环境原因基础概念VMnet网络IPV4网络私有地址范围Vmnet8的作用网路通信的过程解决方法1&#xff1a;修改k8s组件重新启动解决方法2&#xff1a;配置静态IP系统网卡设置设置虚拟机网关修改虚拟机网卡 环境 本机系统&#xff1a;windows11虚拟机系统&#xff1a;CentOS-7-x8…

iOS - Apple开发者账户添加新测试设备

获取UUID 首先将设备连接XCode&#xff0c;打开Window -> Devices and Simulators&#xff0c;通过下方位置查看 之后登录(苹果开发者网站)[https://developer.apple.com/account/] &#xff0c;点击设备 点击加号添加新设备 填写信息之后点击Continue&#xff0c;并一路继续…

【EI/SCOPUS会议征稿】第四届机器学习与计算机应用国际学术会议(ICMLCA 2023)

ICMLCA 2023 第四届机器学习与计算机应用国际学术会议 2023 4th International Conference on Machine Learning and Computer Application 第四届机器学习与计算机应用国际学术会议(ICMLCA 2023)定于2023年10月27-29日在中国杭州隆重举行。本届会议将主要关注机器学习和计算…

iOS开发-CAShapeLayer与UIBezierPath实现微信首页的下拉菜单效果

iOS开发-CAShapeLayer与UIBezierPath实现微信首页的下拉菜单效果 之前开发中遇到需要使用实现微信首页的下拉菜单效果。用到了CAShapeLayer与UIBezierPath绘制菜单外框。 一、效果图 二、CAShapeLayer与UIBezierPath 2.1、CAShapeLayer是什么&#xff1f; CAShapeLayer继承自…

《Elasticsearch 源码解析与优化实战》第5章:选主流程

《Elasticsearch 源码解析与优化实战》第5章&#xff1a;选主流程 - 墨天轮 一、简介 Discovery 模块负责发现集群中的节点&#xff0c;以及选择主节点。ES 支持多种不同 Discovery 类型选择&#xff0c;内置的实现称为Zen Discovery ,其他的包括公有云平台亚马逊的EC2、谷歌…

shell中按照特定字符分割字符串,并且在切分后的每段内容后加上特定字符(串),然后再用特定字符拼接起来

文件中的内容&#xff0c;可以这么写&#xff1a; awk -F, -v OFS, {for(i1;i<‌NF;i){$i$i"_suffix"}}1 input.txt-F,&#xff1a;设置输入字段分隔符为逗号&#xff08;,&#xff09;&#xff0c;这将使awk按照逗号分割输入文本。-v OFS‘,’&#xff1a;设置输…

Banana Pi BPI-CM4 评测(计算模块 4),更快性能,旨在替换树莓派CM4

如果您正在寻找可靠的单板计算机来提升您的下一个项目&#xff0c;但无法找到满足您需求的 Raspberry Pi&#xff0c;请看看我是否可以提供帮助。在这篇详细的评论中&#xff0c;我将向您介绍 Banana Pi CM4&#xff0c;这是一款适用于各种任务的多功能且强大的解决方案。从经验…

GitLab开启双端认证并登录GitLab

GitLab开启双端认证并登录GitLab 1.介绍双端认证 单重认证——密码验证&#xff0c;这极其容易出现密码被盗&#xff0c;密码泄露等危险事件。 于是为了提高安全性&#xff0c;就出现了双因素认证&#xff0c;多因素认证。登录的时候不仅要输入账号和密码还需要输入一个验证码…

使用mediapipe训练手指数字识别

mediapipe手指数字识别 本文是从0开始创建一个识别手势的机器学习模型&#xff0c;为了识别手势&#xff0c;采用mediapipe模型&#xff0c;这个模型会返回手指的位置&#xff0c;之后再通过训练一个模型将这些位置分类得到手势 一、导入依赖 import cv2 import numpy as np…

MD-MTSP:成长优化算法GO求解多仓库多旅行商问题MATLAB(可更改数据集,旅行商的数量和起点)

一、成长优化算法GO 成长优化算法&#xff08;Growth Optimizer&#xff0c;GO&#xff09;由Qingke Zhang等人于2023年提出&#xff0c;该算法的设计灵感来源于个人在成长过程中的学习和反思机制。学习是个人通过从外部世界获取知识而成长的过程&#xff0c;反思是检查个体自…

excel绘制折线图或者散点图

一、背景 假如现在通过代码处理了一批数据&#xff0c;想看数据的波动情况&#xff0c;是不是还需要写个pyhon代码&#xff0c;读取文件&#xff0c;绘制曲线&#xff0c;看起来也简单&#xff0c;但是还有更简单的方法&#xff0c;就是直接生成csv文件&#xff0c;csv文件就是…

【MyBatis】MyBatis 3.5+版本报错合集(持续更新)

报错&#xff1a;BindingException 1. org.apache.ibatis.binding.BindingException: Type interface xxx is not known to the MapperRegistry. 2. org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): xxx 解决方案 在pom.xml中添加如下代码…

python json保留汉字原始形式,而不是Unicode编码(Unicode码)(加ensure_ascii=False参数)

文章目录 问题解决办法测试 问题 如图&#xff0c;保存汉字的时候变成unicode码了。。。 代码是这样的&#xff1a; 解决办法 在Python中&#xff0c;可以使用json模块的ensure_ascii参数来控制是否将汉字转换为类似\u5730\u9707的Unicode编码。默认情况下&#xff0c;ensure…

SpringBoot整合第三方 Druid、MybatisPlus、Mybatis

整合第三方技术 整合JUnit Respostory 注解&#xff1a;数据类 1、导入测试对应的starter 2、测试类使用 SpringBootTest 修饰 3、使用自动装配的形式添加要测试的对象 classes的属性 其实主要找的是SpringBootApplication中的SpringBootConfiguration这个注解。也就是配置…

【Qt】QML-02:QQuickView用法

1、先看demo QtCreator自动生成的工程是使用QQmlApplicationEngine来加载qml文件&#xff0c;下面的demo将使用QQuickView来加载qml文件 #include <QGuiApplication> #include <QtQuick/QQuickView>int main(int argc, char *argv[]) {QGuiApplication app(argc,…