尚医通-排班规则接口-排班详情接口-前端整合(二十五)

目录:

(1)医院排班-排班规则接口

(2)医院排班-排班规则-前端整合 

(3)医院排班-排班详情接口

(4)医院排班-排班详情前端整合


(1)医院排班-排班规则接口

创建排班的Controller:ScheduleController

尚医通-排班规则接口-排班详情接口-前端整合(二十五)_第1张图片

package com.atguigu.yygh.hosp.controller;

import com.atguigu.yygh.common.result.Result;
import com.atguigu.yygh.hosp.service.ScheduleService;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.Map;

@RestController
@RequestMapping("/admin/hosp/schedule")
@CrossOrigin   //跨域访问注解
public class ScheduleController {
    //注入
    @Autowired
    private ScheduleService scheduleService;

    //根据医院编号 和 科室编号 ,查询排班规则数据
    @ApiOperation(value ="查询排班规则数据")
    @GetMapping("getScheduleRule/{page}/{limit}/{hoscode}/{depcode}")
    public Result getScheduleRule(@PathVariable long page,
                                  @PathVariable long limit,
                                  @PathVariable String hoscode,
                                  @PathVariable String depcode) {
        Map map = scheduleService.getRuleSchedule(page,limit,hoscode,depcode);
        return Result.ok(map);
    }

}

 ScheduleService 接口:添加方法:

package com.atguigu.yygh.hosp.service;

import com.atguigu.yygh.model.hosp.Schedule;
import com.atguigu.yygh.vo.hosp.ScheduleQueryVo;
import org.springframework.data.domain.Page;

import java.util.Map;

public interface ScheduleService {
    //上传科室方法
    void save(Map paramMap);

    //查询排班的接口
    Page selectPageSchedule(int page, int limit, ScheduleQueryVo scheduleQueryVo);

    //删除排班接口
    void remove(String hoscode, String hosScheduleId);

    //根据医院编号 和 科室编号 ,查询排班规则数据
    Map getRuleSchedule(long page, long limit, String hoscode, String depcode);
}

基于mongodb中的 hospcode和depcode进行查询,workDate进行分组, 对servicedNumber和availableNumber分被进行求和

尚医通-排班规则接口-排班详情接口-前端整合(二十五)_第2张图片

 尚医通-排班规则接口-排班详情接口-前端整合(二十五)_第3张图片

预约规则数据实体类 

package com.atguigu.yygh.vo.hosp;

import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.util.Date;

/**
 * 

* RegisterRule *

* * @author qy */ @Data @ApiModel(description = "可预约排班规则数据") public class BookingScheduleRuleVo { @ApiModelProperty(value = "可预约日期") @JsonFormat(pattern = "yyyy-MM-dd") private Date workDate; @ApiModelProperty(value = "可预约日期") @JsonFormat(pattern = "MM月dd日") private Date workDateMd; //方便页面使用 @ApiModelProperty(value = "周几") private String dayOfWeek; @ApiModelProperty(value = "就诊医生人数") private Integer docCount; @ApiModelProperty(value = "科室可预约数") private Integer reservedNumber; @ApiModelProperty(value = "科室剩余预约数") private Integer availableNumber; @ApiModelProperty(value = "状态 0:正常 1:即将放号 -1:当天已停止挂号") private Integer status; }

 在:common_util模块引入依赖:尚医通-排班规则接口-排班详情接口-前端整合(二十五)_第4张图片

 实现类:ScheduleService Impl:首先注入MongoTemplate

尚医通-排班规则接口-排班详情接口-前端整合(二十五)_第5张图片

 //根据医院编号 和 科室编号 ,查询排班规则数据
    @Override
    public Map getRuleSchedule(long page, long limit, String hoscode, String depcode) {
        //1 根据医院编号 和 科室编号 查询
        Criteria criteria = Criteria.where("hoscode").is(hoscode).and("depcode").is(depcode);//条件的封装

        //2 根据工作日workDate期进行分组  创建Aggregation    聚合操作
        Aggregation agg = Aggregation.newAggregation(
                Aggregation.match(criteria),//匹配条件
                Aggregation.group("workDate")//分组字段
                        .first("workDate").as("workDate")  //first查询显示  as别名
                        //3 统计号源数量
                        .count().as("docCount")  //统计count  as别名
                        .sum("reservedNumber").as("reservedNumber")  //求和
                        .sum("availableNumber").as("availableNumber"),
                //排序
                Aggregation.sort(Sort.Direction.DESC,"workDate"),
                //4 实现分页
                Aggregation.skip((page-1)*limit),
                Aggregation.limit(limit)
        );
        //调用方法,最终执行
        AggregationResults aggResults =
                mongoTemplate.aggregate(agg, Schedule.class, BookingScheduleRuleVo.class);
        List bookingScheduleRuleVoList = aggResults.getMappedResults();

        //分组查询的总记录数
        Aggregation totalAgg = Aggregation.newAggregation(
                Aggregation.match(criteria),
                Aggregation.group("workDate")
        );
        AggregationResults 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);
        }

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

        //获取医院名称
        String hosName = hospitalService.getHospName(hoscode);
        //其他基础数据
        Map 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 :接口: 

 

package com.atguigu.yygh.hosp.service;

import com.atguigu.yygh.model.hosp.Hospital;
import com.atguigu.yygh.vo.hosp.HospitalQueryVo;
import org.springframework.data.domain.Page;

import java.util.Map;

public interface HospitalService {
    //上传医院接口的方法
    void save(Map paramMap);

    //根据医院编号进行查询
    Hospital getByHoscode(String hoscode);

    //医院列表(条件查询分页)
    Page selectHospPage(Integer page, Integer limit, HospitalQueryVo hospitalQueryVo);

    //更新医院的上线状态
    void updateStatus(String id, Integer status);

    //医院的详情信息
    Map getHospById(String id);

    //获取医院名称
    String getHospName(String hoscode);
}

 HospitalService Impl实现类:

尚医通-排班规则接口-排班详情接口-前端整合(二十五)_第6张图片

 //获取医院名称
    @Override
    public String getHospName(String hoscode) {
        Hospital hospital = hospitalRepository.getHospitalByHoscode(hoscode);
        if (hospital!=null){
            return hospital.getHosname();
        }
        return null;
    }

 尚医通-排班规则接口-排班详情接口-前端整合(二十五)_第7张图片

尚医通-排班规则接口-排班详情接口-前端整合(二十五)_第8张图片

尚医通-排班规则接口-排班详情接口-前端整合(二十五)_第9张图片 尚医通-排班规则接口-排班详情接口-前端整合(二十五)_第10张图片

(2)医院排班-排班规则-前端整合 

更改schedule.vue:

加入代码:尚医通-排班规则接口-排班详情接口-前端整合(二十五)_第11张图片 

添加初始值:

尚医通-排班规则接口-排班详情接口-前端整合(二十五)_第12张图片 

在hosp.js中添加接口访问:尚医通-排班规则接口-排班详情接口-前端整合(二十五)_第13张图片 

添加其他方法:

 




尚医通-排班规则接口-排班详情接口-前端整合(二十五)_第14张图片

 (3)医院排班-排班详情接口

ScheduleController:中添加方法:

尚医通-排班规则接口-排班详情接口-前端整合(二十五)_第15张图片


    //根据医院编号 、科室编号和工作日期,查询排班详细信息
    @ApiOperation(value = "查询排班详细信息")
    @GetMapping("getScheduleDetail/{hoscode}/{depcode}/{workDate}")
    public Result getScheduleDetail( @PathVariable String hoscode,
                                     @PathVariable String depcode,
                                     @PathVariable String workDate) {
        List list = scheduleService.getDetailSchedule(hoscode,depcode,workDate);
        return Result.ok(list);
    }

 ScheduleService :添加接口

package com.atguigu.yygh.hosp.service;

import com.atguigu.yygh.model.hosp.Schedule;
import com.atguigu.yygh.vo.hosp.ScheduleQueryVo;
import org.springframework.data.domain.Page;

import java.util.List;
import java.util.Map;

public interface ScheduleService {
    //上传科室方法
    void save(Map paramMap);

    //查询排班的接口
    Page selectPageSchedule(int page, int limit, ScheduleQueryVo scheduleQueryVo);

    //删除排班接口
    void remove(String hoscode, String hosScheduleId);

    //根据医院编号 和 科室编号 ,查询排班规则数据
    Map getRuleSchedule(long page, long limit, String hoscode, String depcode);

    //根据医院编号 、科室编号和工作日期,查询排班详细信息
    List getDetailSchedule(String hoscode, String depcode, String workDate);
}

 实现类ScheduleService Impl:注入departmentService

尚医通-排班规则接口-排班详情接口-前端整合(二十五)_第16张图片

 

 //根据医院编号 、科室编号和工作日期,查询排班详细信息
    @Override
    public List getDetailSchedule(String hoscode, String depcode, String workDate) {
        //根据参数查询mongodb
        List 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())));

    }

ScheduleRepository :添加方法

package com.atguigu.yygh.hosp.repository;

import com.atguigu.yygh.model.hosp.Schedule;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.stereotype.Repository;

import java.util.Date;
import java.util.List;

@Repository
public interface ScheduleRepository extends MongoRepository {
    //根据医院编号和排班编号进行查询 不需要我们自己实现 MongoRepository会帮祝我们实现
    Schedule getScheduleByHoscodeAndHosScheduleId(String hoscode, String hosScheduleId);

    //根据医院编号 、科室编号和工作日期,查询排班详细信息
    List findScheduleByHoscodeAndDepcodeAndWorkDate(String hoscode, String depcode, Date toDate);
}

DepartmentService 接口: 添加方法

 

package com.atguigu.yygh.hosp.service;

import com.atguigu.yygh.model.hosp.Department;
import com.atguigu.yygh.vo.hosp.DepartmentQueryVo;
import com.atguigu.yygh.vo.hosp.DepartmentVo;
import org.springframework.data.domain.Page;

import java.util.List;
import java.util.Map;

public interface DepartmentService {
    //上传科室的接口
    void save(Map paramMap);

    //查询科室的方法
    Page findPageDepartment(int page, int limit, DepartmentQueryVo departmentQueryVo);

    //删除科室的接口方法
    void remove(String hoscode, String depcode);

    //根据医院编号,查询医院所有科室列表
    List findDeptTree(String hoscode);

    //根据科室编号和医院编号查询科室名称
    String getDepName(String hoscode, String depcode);
}

 实现类:DepartmentServiceImpl

尚医通-排班规则接口-排班详情接口-前端整合(二十五)_第17张图片

 

 //根据科室编号和医院编号查询科室名称
    @Override
    public String getDepName(String hoscode, String depcode) {
        Department department = departmentRepository.getDepartmentByHoscodeAndDepcode(hoscode, depcode);
        if(department != null) {
            return department.getDepname();
        }
        return null;
    }

尚医通-排班规则接口-排班详情接口-前端整合(二十五)_第18张图片

查询排班详情信息:

尚医通-排班规则接口-排班详情接口-前端整合(二十五)_第19张图片 

尚医通-排班规则接口-排班详情接口-前端整合(二十五)_第20张图片尚医通-排班规则接口-排班详情接口-前端整合(二十五)_第21张图片 

(4)医院排班-排班详情前端整合

 在api下的hsop.js中添加访问接口:

尚医通-排班规则接口-排班详情接口-前端整合(二十五)_第22张图片

复制前端element-ui代码 

 




 尚医通-排班规则接口-排班详情接口-前端整合(二十五)_第23张图片

尚医通-排班规则接口-排班详情接口-前端整合(二十五)_第24张图片 

 

你可能感兴趣的:(#,尚医通项目,spring,java,前端)