Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >尚医通-后台系统

尚医通-后台系统

作者头像
用户9615083
发布于 2022-12-30 07:26:00
发布于 2022-12-30 07:26:00
2.1K00
代码可运行
举报
运行总次数:0
代码可运行

# 尚医通-后台系统

# 医院管理

目前我们把医院、科室和排班都上传到了平台,那么管理平台就应该把他们管理起来,在我们的管理平台能够直观的查看这些信息。

# 医院管理效果展示

  1. 列表
  1. 详情

# 注册中心与服务调用

目前在医院列表中需要医院的信息和等级信息,而两段信息属于不同的的模块,service-hosp和service-cmn,所以我们需要使用到远程调用。

# Nacos 概述

# 什么是Nacos

Nacos 是阿里巴巴推出来的一个新开源项目,这是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施

# 常见的注册中心
  1. Eureka(原生,2.0遇到瓶颈,停止维护)
  2. Zookeeper(支持,专业的独立产品。例如:dubbo)
  3. Consul(原生,GO语言开发)
  4. Nacos

相对于 Spring Cloud Eureka 来说,Nacos 更强大。

Nacos = Spring Cloud Eureka + Spring Cloud Config

Nacos 可以与 Spring, Spring Boot, Spring Cloud 集成,并能代替 Spring Cloud Eureka, Spring Cloud Config。

  • 通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-config 实现配置的动态变更。
  • 通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-discovery 实现服务的注册与发现。
# Nacos 下载与安装

# 注册服务

# Nacos注册service-hosp

第一步:在service模块pom文件引入依赖

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
       <!-- 服务注册 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

第二步:在service-hosp的配置文件添加nacos服务地址

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# nacos服务地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

第三步:在service-hosp的启动类添加注解

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@SpringBootApplication
@ComponentScan("com.frx01")
@EnableDiscoveryClient
public class ServiceHospApplication {
    public static void main(String[] args) {
        SpringApplication.run(ServiceHospApplication.class, args);
    }
}

启动service-hosp服务,在Nacos管理界面的服务列表中可以看到注册的服务

service-cmn注册过程和service-hosp相同(省略)

# 医院管理实现

# 医院列表 api 接口

# 添加service分页接口与实现
  1. 在HospitalService类添加分页接口
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    //条件查询分页
    Page<Hospital> selectHospPage(Integer page, Integer limit, HospitalQueryVo hospitalQueryVo);
  1. HospitalServiceImpl类实现分页
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    @Override
    public Page<Hospital> selectHospPage(Integer page, Integer limit, HospitalQueryVo hospitalQueryVo) {
        //创建Pageable对象
        Pageable pageable = PageRequest.of(page-1,limit);
        //创建条件匹配器
        ExampleMatcher matching = ExampleMatcher.matching()
                .withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING)
                .withIgnoreCase(true);
        //hospitalQueryVo转换成Hospital对象
        Hospital hospital = new Hospital();
        BeanUtils.copyProperties(hospitalQueryVo,hospital);
        //创建Example 对象
        Example<Hospital> example = Example.of(hospital);
        //调用方法来实现查询操作
        Page<Hospital> hospitalPage = hospitalRepository.findAll(example, pageable);
        return hospitalPage;

    }
# 添加 Controller 方法
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@RestController
@RequestMapping("/admin/hosp/hospital")
@CrossOrigin
public class HospitalController {

    @Autowired
    private HospitalService hospitalService;

    //医院的列表方法(条件查询分页)
    @GetMapping("/list/{page}/{limit}")
    public Result listHosp(@PathVariable Integer page,
                           @PathVariable Integer limit,
                           HospitalQueryVo hospitalQueryVo){
        Page<Hospital> pageModel = hospitalService.selectHospPage(page,limit,hospitalQueryVo);
        return Result.ok(pageModel);
    }
}

# service-cmn模块提供接口

由于我们的医院等级、省市区地址都是取的数据字典value值,因此我们在列表显示医院等级与医院地址时要根据数据字典value值获取数据字典名称

通过学习数据字典我们知道,根据上级编码与value值可以获取对应的数据字典名称,如果value值能够保持唯一(不一定唯一),我们也可以直接通过value值获取数据字典名称,目前省市区三级数据我们使用的是国家统计局的数据,数据编码我们就是数据字典的id与value,所以value能够唯一确定一条数据字典,如图:

# 添加service接口与实现

在DictService类添加接口

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    String getDictName(String dictCode, String value);

DictServiceImpl类实现

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    @Override
    public String getDictName(String dictCode, String value) {

        //如果dictCode为空,直接根据value查询
        if(StringUtils.isEmpty(dictCode)){
            QueryWrapper<Dict> queryWrapper = new QueryWrapper<>();
            queryWrapper.eq("value",value);
            Dict dict = baseMapper.selectOne(queryWrapper);
            return dict.getName();
        } else {
            //如果不为空,根据dictCode和value查询
            //根据dictcode查询dict的id值
            Dict codeDict = this.getDictByDictCode(dictCode);
            Long parentId = codeDict.getId();
            //根据parentId和value值进行查询
            Dict findDict = baseMapper.selectOne(new QueryWrapper<Dict>()
                    .eq("parent_id", parentId)
                    .eq("value", value));
            return findDict.getName();

        }

    }

    private Dict getDictByDictCode(String dictCode){
        QueryWrapper<Dict> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("dict_code",dictCode);
        Dict codeDict = baseMapper.selectOne(queryWrapper);
        return codeDict;
    }
# 添加 controller 方法
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    //根据dictcode和value查询
    @GetMapping("/getName/{dictCode}/{value}")
    public String getName(@PathVariable String dictCode,
                          @PathVariable String value){
        String dictName = dictService.getDictName(dictCode,value);
        return dictName;

    }
    //根据value查询
    @GetMapping("/getName/{value}")
    public String getName(@PathVariable String value){
        String dictName = dictService.getDictName("",value);
        return dictName;
    }

# 封装Feign服务调用

# 搭建service-client父模块

修改pom.xml文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.frx01</groupId>
        <artifactId>yygh_parent</artifactId>
        <version>0.0.1-SNAPSHOT</version>

        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.frx01</groupId>
    <artifactId>service_client</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>service_client</name>
    <packaging>pom</packaging>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>com.frx01</groupId>
            <artifactId>common-util</artifactId>
            <version>1.0</version>
            <scope>provided </scope>
        </dependency>

        <dependency>
            <groupId>com.frx01</groupId>
            <artifactId>model</artifactId>
            <version>1.0</version>
            <scope>provided </scope>
        </dependency>

        <dependency>
         <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <scope>provided </scope>
        </dependency>

        <!-- 服务调用feign -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
            <scope>provided </scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>
# 搭建service-cmn-client模块

修改pom.xml文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.frx01</groupId>
        <artifactId>service-client</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <groupId>com.frx01</groupId>
    <artifactId>service-cmn-client</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>service-cmn-client</name>
    <description>Demo project for Spring Boot</description>

</project>
# 添加Feign接口类
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@FeignClient("service_cmn")
@Service
public interface DictFeignClient {

    //根据dictcode和value查询
    @GetMapping("/admin/cmn/dict/getName/{dictCode}/{value}")
    public String getName(@PathVariable("dictCode") String dictCode,
                          @PathVariable("value") String value);


    //根据value查询
    @GetMapping("/admin/cmn/dict/getName/{value}")
    public String getName(@PathVariable("value") String value);
    
}

# 医院接口远程调用数据字典

# service模块引入依赖

在pom.xml添加依赖

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!-- 服务调用feign -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
# 在service-hosp添加依赖
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        <dependency>
            <groupId>com.frx01</groupId>
            <artifactId>service-cmn-client</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
# 启动类开启服务调用
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@SpringBootApplication
@ComponentScan("com.frx01")
@EnableDiscoveryClient
@EnableFeignClients("com.frx01")
public class ServiceHospApplication {
    public static void main(String[] args) {
        SpringApplication.run(ServiceHospApplication.class, args);
    }
}
# 调整 service 方法

修改HospitalServiceImpl类实现分页

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    @Autowired
    private DictFeignClient dictFeignClient;
	
    @Override
    public Page<Hospital> selectHospPage(Integer page, Integer limit, HospitalQueryVo hospitalQueryVo) {
        //创建Pageable对象
        Pageable pageable = PageRequest.of(page-1,limit);
        //创建条件匹配器
        ExampleMatcher matching = ExampleMatcher.matching()
                .withStringM
            atcher(ExampleMatcher.StringMatcher.CONTAINING)
                .withIgnoreCase(true);
        //hospitalQueryVo转换成Hospital对象
        Hospital hospital = new Hospital();
        BeanUtils.copyProperties(hospitalQueryVo,hospital);
        //创建Example 对象
        Example<Hospital> example = Example.of(hospital);
        //调用方法来实现查询操作
        Page<Hospital> hospitalPage = hospitalRepository.findAll(example, pageable);
        //获取查询list集合,遍历进行医院等级的封装
        hospitalPage.getContent().stream().forEach(item -> {
            this.setHospitalHosType(item);

        });
        return hospitalPage;

    }

	//获取查询list集合,遍历进行医院等级的封装
    private Hospital setHospitalHosType(Hospital hospital) {
        //根据 dictCode 和 value 获取医院等级的名称
        String hostypeString = dictFeignClient.getName("Hostype", hospital.getHostype());
        //查询省 市 地区
        String provinceString = dictFeignClient.getName(hospital.getProvinceCode());
        String cityString = dictFeignClient.getName(hospital.getCityCode());
        String districtString = dictFeignClient.getName(hospital.getDistrictCode());

        hospital.getParam().put("fullAddress",provinceString+cityString+districtString);
        hospital.getParam().put("hostypeString",hostypeString);
        return hospital;
    }

page为1,limit为3,测试

# 添加数据字典显示接口

# 编写 Controller

根据dicode查询下层节点

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    //根据dictCode获取下级节点
    @ApiOperation(value = "根据dictCode获取下级节点")
    @GetMapping("/findByDictCode/{dictCode}")
    public Result findByDictCode(@PathVariable String dictCode) {
        List<Dict> list = dictService.findByDictCode(dictCode);
        return Result.ok(list);

    }
# 编写 Service

Service

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    //根据dictCode获取下级节点
    List<Dict> findByDictCode(String dictCode);

ServiceImpl

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    @Override
    public List<Dict> findByDictCode(String dictCode) {

        //根据dictCode获取对应的Id
        Dict dict = this.getDictByDictCode(dictCode);
        //根据Id获取下层的子节点
        List<Dict> childData = this.findChildData(dict.getId());
        return childData;
    }

# 更新医院上线状态

# 添加service接口

在HospitalService类添加接口

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    //更新医院的上线状态
    void updateStatus(String id, Integer status);

HospitalServiceImpl类实现

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    @Override
    public void updateStatus(String id, Integer status) {
        //根据id查询医院信息
        Hospital hospital = hospitalRepository.findById(id).get();
        //设置修改的值
        hospital.setStatus(status);
        hospital.setUpdateTime(new Date());
        hospitalRepository.save(hospital);

    }
# 添加controller方法
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    //更新医院的上线状态
    @ApiOperation(value = "更新医院的上线状态")
    @GetMapping("/updateHospStatus/{id}/{status}")
    public Result updateHospStatus(@PathVariable String id,
                                   @PathVariable Integer status){
        hospitalService.updateStatus(id,status);
        return Result.ok();

    }
  • 测试,将协和医院上线
  • 结果

# 医院详情

# 添加 service 接口

在HospitalService类添加接口

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    //医院的详情信息
    Map<String,Object> getHospById(String id);

HospitalServiceImpl类实现

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    @Override
    public Map<String,Object> getHospById(String id) {
        Map<String, Object> map = new HashMap<>();
        Hospital hospital = this.setHospitalHosType(hospitalRepository.findById(id).get());
        //医院的基本信息 包含医院的等级
        map.put("hospital",hospital);
        map.put("bookingRule",hospital.getBookingRule());
        //不需要重复返回
        hospital.setBookingRule(null);
        return map;

    }
# 添加 controller 方法
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    //医院的详情信息
    @ApiOperation(value = "医院的详情信息")
    @GetMapping("/showHospDetail/{id}")
    public Result showHospDetail(@PathVariable String id){
        Map<String, Object> hospMap = hospitalService.getHospById(id);
        return Result.ok(hospMap);
    }
  • 测试,点击北京协和医院的查看按钮

# 医院排班

# 医院效果

排班分成三部分显示:

  1. 科室信息(大科室与小科室树形展示)
  2. 排班日期,分页显示,根据上传排班数据聚合统计产生
  3. 排班日期对应的就诊医生信息

# 接口分析

  1. 科室数据使用Element-ui el-tree组件渲染展示,需要将医院上传的科室数据封装成两层父子级数据;
  2. 聚合所有排班数据,按日期分页展示,并统计号源数据展示;
  3. 根据排班日期获取排班详情数据;

# 实现分析

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

  1. 先实现左侧科室树形展示;
  2. 其次排班日期分页展示
  3. 最后根据排班日期获取排班详情数据

# 排班管理实现

# 科室列表

# 添加 service 接口以及实现

在DepartmentService类添加接口

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    //根据医院的编号,查询医院科室的列表
    List<DepartmentVo> findDeptTree(String hoscode);

在DepartmentServiceImpl类实现接口

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    //根据医院的编号,查询医院科室的列表
    @Override
    public List<DepartmentVo> findDeptTree(String hoscode) {

        //创建List集合,用于最终数据封装
        List<DepartmentVo> result = new ArrayList<>();

        //根据医院编号,查询医院所有的科室的信息
        Department departmentQuery = new Department();
        departmentQuery.setHoscode(hoscode);
        Example<Department> example = Example.of(departmentQuery);
        List<Department> departmentList = departmentRepository.findAll(example);

        //根据大科室编号 bigcode 分组,获取大科室里面下级子科室
        Map<String, List<Department>> departmentMap =
                departmentList.stream().collect(Collectors.groupingBy(Department::getBigcode));
        //遍历map集合
        for(Map.Entry<String,List<Department>> entry : departmentMap.entrySet()){
            //大科室编号
            String bigCode = entry.getKey();
            //大科室编号对应的全部数据
            List<Department> departmentList1 = entry.getValue();

            //封装大科室
            DepartmentVo departmentVo1 = new DepartmentVo();
            departmentVo1.setDepcode(bigCode);
            departmentVo1.setDepname(departmentList1.get(0).getBigname());

            //封装小科室
            List<DepartmentVo> children = new ArrayList<>();
            for (Department department : departmentList1) {
                DepartmentVo departmentVo2 = new DepartmentVo();
                departmentVo2.setDepcode(department.getDepcode());
                departmentVo2.setDepname(department.getDepname());
                //封装到list集合
                children.add(departmentVo2);
            }

            //把小科室list集合放到大科室的children里面去
            departmentVo1.setChildren(children);

            //放到最终的result里面去
            result.add(departmentVo1);
        }
        //返回结果
        return result;
    }
# 添加 Controller 接口
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    //根据医院的编号,查询医院科室的列表
    @ApiOperation(value = "查询医院科室的列表")
    @GetMapping("/getDeptList/{hoscode}")
    public Result getDeptList(@PathVariable String hoscode){

       List<DepartmentVo> list = departmentService.findDeptTree(hoscode);
       return Result.ok(list);
    }
  • 使用Swagger测试

# 排班日期分页列表

# 添加service接口与实现

在ScheduleService类添加接口

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    //根据 医院编号和科室编号 查询排班规则数据
    Map<String, Object> getRlueSchedule(long page, long limit, String hoscode, String depcode);

在ScheduleServiceImpl类实现接口

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    @Autowired
    private ScheduleRepository scheduleRepository;

    @Autowired
    private MongoTemplate mongoTemplate;

    @Autowired
    private HospitalService hospitalService;
    //根据 医院编号和科室编号 查询排班规则数据
    @Override
    public Map<String, Object> getRlueSchedule(long page, long limit, String hoscode, String depcode) {

        //1.根据医院编号 和 科室编号 查询
        Criteria criteria = Criteria.where("hoscode").is(hoscode).and("depcode").is(depcode);

        //2.根据工作日期wordDate进行分组
        Aggregation aggregation = Aggregation.newAggregation(
                Aggregation.match(criteria),//匹配条件
                Aggregation.group("workDate") //分组字段
                        .first("workDate").as("workDate")
                        //3.统计号源数量
                        .count().as("docCount")
                        .sum("reservedNumber").as("reservedNumber")
                        .sum("availableNumber").as("availableNumber"),
                //排序
                Aggregation.sort(Sort.Direction.DESC, "workDate"),
                //4.实现分页
                Aggregation.skip((page - 1) * limit),
                Aggregation.limit(limit)

        );

        //调用方法 最终执行
        AggregationResults<BookingScheduleRuleVo> aggResults =
                mongoTemplate.aggregate(aggregation, Schedule.class, BookingScheduleRuleVo.class);
        List<BookingScheduleRuleVo> bookingScheduleRuleVoList = aggResults.getMappedResults();

        //分组查询之后总的记录数
        Aggregation totalAgg = Aggregation.newAggregation(
                Aggregation.match(criteria),
                Aggregation.group("workDate")
        );
        AggregationResults<BookingScheduleRuleVo> totalAggResults =
                mongoTemplate.aggregate(totalAgg, Schedule.class, BookingScheduleRuleVo.class);
        int total = totalAggResults.getMappedResults().size();

        //把日期对应的星期获取
        for (BookingScheduleRuleVo bookingScheduleRuleVo : bookingScheduleRuleVoList) {
            Date workDate = bookingScheduleRuleVo.getWorkDate();
            String dayOfWeek = this.getDayOfWeek(new DateTime(workDate));
            bookingScheduleRuleVo.setDayOfWeek(dayOfWeek);
        }

        //设置最终数据,返回
        HashMap<String, Object> result = new HashMap<>();
        result.put("bookingScheduleRuleVoList",bookingScheduleRuleVoList);
        result.put("total",total);

        //获取医院名称
        String hosName = hospitalService.getHospName(hoscode);
        //其他基础数据
        HashMap<String, String> baseMap = new HashMap<>();
        baseMap.put("hosname",hosName);
        result.put("baseMap",baseMap);
        return result;
    }

    /**
     * 根据日期获取周几数据
     *
     * @param dateTime
     * @return
     */
    private String getDayOfWeek(DateTime dateTime) {
        String dayOfWeek = "";
        switch (dateTime.getDayOfWeek()) {
            case DateTimeConstants.SUNDAY:
                dayOfWeek = "周日";
                break;
            case DateTimeConstants.MONDAY:
                dayOfWeek = "周一";
                break;
            case DateTimeConstants.TUESDAY:
                dayOfWeek = "周二";
                break;
            case DateTimeConstants.WEDNESDAY:
                dayOfWeek = "周三";
                break;
            case DateTimeConstants.THURSDAY:
                dayOfWeek = "周四";
                break;
            case DateTimeConstants.FRIDAY:
                dayOfWeek = "周五";
                break;
            case DateTimeConstants.SATURDAY:
                dayOfWeek = "周六";
            default:
                break;
        }
        return dayOfWeek;
    }
# 添加根据医院编号获取医院名称接口

在HospitalService类添加接口

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    //根据医院编号,获取医院名称
    String getHospName(String hoscode);

在HospitalServiceImpl类实现接口

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    //获取医院名称
    @Override
    public String getHospName(String hoscode) {
        Hospital hospital = hospitalRepository.getHospitalByHoscode(hoscode);
        if(hospital!=null){
            return hospital.getHosname();
        }
        return null;
    }
# 添加 Controller 接口
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    //根据 医院编号和科室编号 查询排班规则数据
    @ApiOperation(value = "查询排班规则数据")
    @GetMapping("/getScheduleRule/{page}/{limit}/{hoscode}/{depcode}")
    public Result getScheduleRule(@PathVariable long page,
                                  @PathVariable long limit,
                                  @PathVariable String hoscode,
                                  @PathVariable String depcode){
        Map<String,Object> map = scheduleService.getRlueSchedule(page,limit,hoscode,depcode);
        return Result.ok(map);
    }
  • 使用Swagger测试接口

# 根据排班日期获取排班详情列表

# 添加repository接口

在ScheduleRepository类添加接口

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    //根据医院编号、科室编号和工作日期,查询排班详细信息
    List<Schedule> findScheduleByHoscodeAndDepcodeAndWorkDate(String hoscode, String depcode, Date dateTime);

在ScheduleServiceImpl类实现接口

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    //根据医院编号、科室编号和工作日期,查询排班详细信息
    @Override
    public List<Schedule> getDetailSchedule(String hoscode, String depcode, String workDate) {
        List<Schedule> scheduleList =
                scheduleRepository.findScheduleByHoscodeAndDepcodeAndWorkDate(hoscode,depcode,new DateTime(workDate).toDate());
        //把得到list集合遍历,设置其他值,医院名称,科室名称,日期对应星期
        scheduleList.stream().forEach(item -> {
            this.packageSchedule(item);
        });
        return scheduleList;
    }

    //封装排班的详情里面其他的值  医院名称,科室名称,日期对应星期
    private void packageSchedule(Schedule schedule) {
        //设置医院的名称 根据医院编号 得到医院名称
        schedule.getParam().put("hosname",hospitalService.getHospName(schedule.getHoscode()));
        //设置科室名称
        schedule.getParam().put("depname",departmentService.getDepName(schedule.getHoscode(),schedule.getDepcode()));
        //设置日期对应星期
        schedule.getParam().put("dayOfWeek",this.getDayOfWeek(new DateTime(schedule.getWorkDate())));

    }
# 添加根据部门编码获取部门名称
  1. 在DepartmentService类添加接口
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    //根据科室的编号 医院的编号 查询科室的名称
    String getDepName(String hoscode, String depcode);
  1. 在DepartmentService类添加接口实现
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    @Override
    public String getDepName(String hoscode, String depcode) {
        Department departemnt =
                departmentRepository.getDepartemntByHoscodeAndDepcode(hoscode, depcode);
        if(departemnt != null){
            return departemnt.getDepname();
        }
        return null;
    }
# 添加controller
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    //根据医院编号、科室编号和工作日期,查询排班详细信息
    @ApiOperation(value = "查询排班详细信息")
    @GetMapping("getScheduleDetail/{hoscode}/{depcode}/{workDate}")
    public Result getScheduleDetail( @PathVariable String hoscode,
                                     @PathVariable String depcode,
                                     @PathVariable String workDate){
        List<Schedule> list = scheduleService.getDetailSchedule(hoscode,depcode,workDate);
        return Result.ok(list);
    }
  • 使用swagger测试
  • 前端访问
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-10-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
尚医通-预约挂号
添加com.frx01.yygh.order.mapper.OrderInfoMapper,添加配置类,扫描mapper包
用户9615083
2022/12/30
3.5K0
尚医通-预约挂号
尚医通-数据字典
何为数据字典?数据字典就是管理系统常用的分类数据或者一些固定数据,例如:省市区三级联动数据、民族数据、行业数据、学历数据等,由于该系统大量使用这种数据,所以我们要做一个数据管理方便管理系统数据,一般系统基本都会做数据管理。
用户9615083
2022/12/30
1K0
尚医通-数据字典
尚医通-数据接口
Map转换为Hospital对象时,预约规则bookingRule为一个对象属性,rule为一个数组属性,因此在转换时我们要重新对应的set方法,不然转换不会成功
用户9615083
2022/12/30
1.6K0
尚医通-数据接口
尚医通-后台接口
医院设置主要是用来保存开通医院的一些基本信息,每个医院一条信息,保存了医院编号(平台分配,全局唯一)和接口调用相关的签名key等信息,是整个流程的第一步,只有开通了医院设置信息,才可以上传医院相关信息。
用户9615083
2022/12/30
1.2K0
尚医通-后台接口
尚医通-搭建环境
打开项目并点击菜单栏上的【VCS】--》【Import into version control】--》【Create Git Repository】创建本地仓库
用户9615083
2022/12/30
6160
尚医通-搭建环境
尚医通-技术点-整合服务网关
API网关出现的原因是微服务架构的出现,不同的微服务一般会有不同的网络地址,而外部客户端可能需要调用多个服务的接口才能完成一个业务需求,如果让客户端直接与各个微服务通信,会有以下的问题:
用户9615083
2022/12/30
2860
尚医通-技术点-整合服务网关
尚医通-客户端平台
服务端渲染又称SSR (Server Side Render)是在服务端完成页面的内容,而不是在客户端通过AJAX获取数据。
用户9615083
2022/12/30
5.9K0
尚医通-客户端平台
微服务项目:尚融宝(33)(服务调用(1))
下载地址: https://github.com/alibaba/nacos/releases
一个风轻云淡
2022/11/15
2220
微服务项目:尚融宝(33)(服务调用(1))
element树形结构表格与懒加载
  如果完全用后端实现的话,那写个递归把所有数据按照层次结构查询完并封装好即可。但element的table组件给我们封装好了一些东西,我们只需要在这里根据上级id查询子数据列表即可。
别团等shy哥发育
2023/02/25
1.4K0
element树形结构表格与懒加载
微服务项目:尚融宝(17)(后端搭建:数据字典)
何为数据字典?数据字典负责管理系统常用的分类数据或者一些固定数据,例如:省市区三级联动数据、民族数据、行业数据、学历数据等,数据字典帮助我们方便的获取和适用这些通用数据。
一个风轻云淡
2022/11/15
8270
微服务项目:尚融宝(17)(后端搭建:数据字典)
就医保险管理系统 毕业设计 JAVA+Vue+SpringBoot+MySQL
基于JAVA+Vue+SpringBoot+MySQL的就医保险管理系统,包含了科室档案模块、医生档案模块、预约挂号模块、我的挂号模块,还包含系统自带的用户管理、部门管理、角色管理、菜单管理、日志管理、数据字典管理、文件管理、图表展示等基础模块,就医保险管理系统基于角色的访问控制,给挂号管理员、患者角色使用,可将权限精确到按钮级别,您可以自定义角色并分配权限,系统适合设计精确的权限约束需求。
Designer 小郑
2023/12/01
3200
就医保险管理系统 毕业设计 JAVA+Vue+SpringBoot+MySQL
微服务项目:尚融宝(38)(核心业务流程:申请借款额度(2))
一直在前端查找,但是一直找不到结果,前端也拿到了数据,但是一直弄不出来,我把注意力放在后端用户,单独拿起表单的数据可以跳转过去,最后才发现,原来是前端的数据是拿到了,但是后端的这个参数是不一样的,(key value)对不上号
一个风轻云淡
2022/11/15
2380
微服务项目:尚融宝(38)(核心业务流程:申请借款额度(2))
1-5 MyBatisPlus集成
  接下来我们完成一个品牌的CRUD操作、我们会集成MyBatisPlus来实现。
用户4919348
2021/01/14
1K0
1-5 MyBatisPlus集成
基于SpringCloudalibaba+SSM+Mybatisplus实现在线教育讲师管理后端
基于SpringCloudalibaba+SSM+Mybatisplus实现在线教育讲师管理后端
陶然同学
2023/02/27
5440
基于SpringCloudalibaba+SSM+Mybatisplus实现在线教育讲师管理后端
mybatis code helper安装与使用
注意: 这里使用的mybatisplus, mapper.xml无需更改, 简单的增删改查已经为我们自动生成, 如下代码
时间静止不是简史
2022/01/05
1.6K0
mybatis code helper安装与使用
SpringBoot入门建站全系列(三十四)使用Drools规则引擎做排班系统
Drools 是用 Java 语言编写的开放源码规则引擎,使用 Rete 算法对所编写的规则求值。Drools 允许使用声明方式表达业务逻辑。可以使用非 XML 的本地语言编写规则,从而便于学习和理解。并且,还可以将 Java 代码直接嵌入到规则文件中,这令 Drools 的学习更加吸引人。
品茗IT
2020/05/28
2.6K0
微服务项目:尚融宝(41)(核心业务流程:借款额度审批)
列表的结果需要关联查询,数据字典的数据也需要展示对应的文本内容而不是值,除了定义VO的方式,我们也可以使用扩展实体类的方式 
一个风轻云淡
2022/11/15
4090
微服务项目:尚融宝(41)(核心业务流程:借款额度审批)
我是如何替换Spring Cloud Netflix的?
如果你正在寻找一个Spring Cloud Netflix的替代方案,建议可以看下这篇和Spring Cloud Alibaba相关的文章。
养码场
2018/12/26
1.7K0
服务注册、发现和远程调用
本篇文章介绍如何完成一个简单的服务注册、发现和远程调用的 Demo,通过该 Demo 来学习和了解关于 Spring Cloud 相关的知识。
码农UP2U
2021/10/14
4810
服务注册、发现和远程调用
医疗项目中所用到的技术点——以MyBatis-Plus为技术案例
惠医疗即为网上预约挂号系统,网上预约挂号是近年来开展的一项便民就医服务,旨在缓解看病难、挂号难的就医难题,许多患者为看一次病要跑很多次医院,最终还不一定能保证看得上医生。网上预约挂号全面提供的预约挂号业务从根本上解决了这一就医难题。随时随地轻松挂号!不用排长队!
用户10196776
2023/10/17
5070
推荐阅读
相关推荐
尚医通-预约挂号
更多 >
LV.1
这个人很懒,什么都没有留下~
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验