最全Day232&233(1),疯狂复习半个月

最后

对于很多Java工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。

整理的这些资料希望对Java开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。

再分享一波我的Java面试真题+视频学习详解+技能进阶书籍

美团二面惜败,我的凉经复盘(附学习笔记+面试整理+进阶书籍)

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

说明:底部style标签是为了控制树形展示数据选中效果的

2、排班日期分页列表


2.1 api接口

2.1.1 添加service接口与实现

在ScheduleService类添加接口

//根据【医院编号】 【科室编号】,【分页查询】排版规则数据

Map<String, Object> getScheduleRulePage(long page, long limit, String hoscode, String depcode);

在ScheduleServiceImpl类实现接口

package com.achang.yygh.hosp.service.impl;

import com.achang.exception.YyghException;

import com.achang.utils.DateUtil;

import com.achang.yygh.hosp.repository.ScheduleRepository;

import com.achang.yygh.hosp.service.HospitalService;

import com.achang.yygh.hosp.service.HospitalSetService;

import com.achang.yygh.hosp.service.ScheduleService;

import com.achang.yygh.model.hosp.Department;

import com.achang.yygh.model.hosp.Schedule;

import com.achang.yygh.vo.hosp.BookingScheduleRuleVo;

import com.achang.yygh.vo.hosp.ScheduleQueryVo;

import com.alibaba.fastjson.JSONObject;

import org.joda.time.DateTime;

import org.joda.time.DateTimeConstants;

import org.springframework.beans.BeanUtils;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.data.domain.*;

import org.springframework.data.mongodb.core.MongoTemplate;

import org.springframework.data.mongodb.core.aggregation.Aggregation;

import org.springframework.data.mongodb.core.aggregation.AggregationResults;

import org.springframework.data.mongodb.core.query.Criteria;

import org.springframework.data.mongodb.core.query.Query;

import org.springframework.stereotype.Service;

import java.util.Date;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

@Service

public class ScheduleServiceImpl implements ScheduleService {

@Autowired

private MongoTemplate mongoTemplate;

@Autowired

private HospitalService hospitalService;

//根据【医院编号】 【科室编号】,【分页查询】排版规则数据

@Override

public Map<String, Object> getScheduleRulePage(long page, long limit, String hoscode, String depcode) {

//根据医院编号、科室编号 查询对应数据

//封装查询条件

Criteria criteria = Criteria.where(“hoscode”).is(hoscode)

.and(“depcode”).is(depcode);

//根据工作日workDate期进行分组

Aggregation agg = Aggregation.newAggregation(

Aggregation.match(criteria),//条件匹配

Aggregation.group(“workDate”)//分组字段

.first(“workDate”).as(“workDate”)//设置分组后的别名

.count().as(“docCount”)//统计号源数量并设置名字

.sum(“reservedNumber”).as(“reservedNumber”)//求和reservedNumber字段

.sum(“availableNumber”).as(“availableNumber”),//求和availableNumber字段

Aggregation.sort(Sort.Direction.DESC,“workDate”),//指定是升序还是降序,指定哪个字段排序

//分页

Aggregation.skip((page-1)*limit),//(当前页-1)*每页记录数

Aggregation.limit(limit)//每页显示数

);

//得到分组查询后的总记录数

Aggregation totalAgg = Aggregation.newAggregation(

Aggregation.match(criteria),//条件查询

Aggregation.group(“workDate”)//分组)

);

AggregationResults totalAggResults = mongoTemplate.aggregate(totalAgg, Schedule.class, BookingScheduleRuleVo.class);

//获取总记录数

int total = totalAggResults.getMappedResults().size();

//调用方法最终执行

//参数1:上面封装的条件

//参数2:之前的实体类

//参数3:最后封装的尸体类

AggregationResults results = mongoTemplate.aggregate(agg, Schedule.class, BookingScheduleRuleVo.class);

//获取到最终的集合

List ruleVoList = results.getMappedResults();

//把日期对应的星期获取出来

for (BookingScheduleRuleVo bookingScheduleRuleVo:ruleVoList){

Date workDate = bookingScheduleRuleVo.getWorkDate();

//获取到星期几

String week = DateUtil.getDayOfWeek(new DateTime(workDate));

bookingScheduleRuleVo.setDayOfWeek(week);

}

//设置最终数据进行返回

HashMap<String, Object> resultMap = new HashMap<>();

resultMap.put(“list”,ruleVoList);

resultMap.put(“total”,total);

//根据医院编号,获取医院名称

String hospName = hospitalService.getHospName(hoscode);

//其他基础数据

HashMap<String, String> baseMap = new HashMap<>();

baseMap.put(“hospName”,hospName);

resultMap.put(“baseMap”,baseMap);

return resultMap;

}

/**

  • 根据日期获取周几数据

  • @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;

}

}

2.1.2 添加根据医院编号获取医院名称接口

在HospitalService类添加接口

//根据医院编号,获取医院名称

String getHospName(String hoscode);

在HospitalServiceImpl类实现接口

//根据医院编号,获取医院名称

@Override

public String getHospName(String hoscode) {

Hospital hospital = hospitalRepository.getHospitalByHoscode(hoscode);

if (hospital!=null){

return hospital.getHosname();

}

return null;

}

2.1.3 添加controller接口

添加com.atguigu.yygh.hosp.controller.ScheduleController类

import com.achang.result.Result;

import com.achang.yygh.hosp.service.ScheduleService;

import com.achang.yygh.model.hosp.Schedule;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.*;

import java.util.List;

import java.util.Map;

@RestController

@CrossOrigin

@RequestMapping(“/admin/hosp/Schedule”)

public class ScheduleController {

@Autowired

private ScheduleService scheduleService;

//根据【医院编号】 【科室编号】,【分页查询】排版规则数据

@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.getScheduleRulePage(page,limit,hoscode,depcode);

return Result.ok(map);

}

}

  • 测试

image-20210327225505883


2.2 排班日期前端

1.2.1封装api请求

创建/api/hosp/schedule.js

import request from ‘@/utils/request’

export default {

//根据【医院编号】 【科室编号】,【分页查询】排版规则数据

getScheduleRule(page,limit,hoscode,depcode) {

return request({

url: /admin/hosp/Schedule/getScheduleRule/${page}/${limit}/${hoscode}/${depcode},

method: ‘get’

})

}

}

1.2.2 页面展示

修改/views/hosp/schedule.vue组件

选择:{{ baseMap.hospName }} / {{ depname }} / {{ workDate }}

<el-tree

:data=“data”

:props=“defaultProps”

:default-expand-all=“true”

@node-click=“handleNodeClick”>

<el-tag v-for=“(item,index) in bookingScheduleList” :key=“item.id” @click=“selectDate(item.workDate, index)”

:type=“index == activeIndex ? ‘’ : ‘info’”

style=“height: 60px;margin-right: 5px;margin-right:15px;cursor:pointer;”>

{{ item.workDate }} {{ item.dayOfWeek }}

{{ item.availableNumber }} / {{ item.reservedNumber }}

<el-pagination

:current-page=“page”

:total=“total”

:page-size=“limit”

class=“pagination”

layout=“prev, pager, next”

@current-change=“getPage”>

  • 效果显示

image-20210328140825965


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


3.1 api接口

3.1.1 添加repository接口

在ScheduleRepository类添加接口

//根据医院编号、科室编号、工作日期,查询排版详细信息

List findScheduleByHoscodeAndDepcodeAndWorkDate(String hoscode, String depcode, Date toDate);

3.1.2 添加service接口与实现

在ScheduleService类添加接口

//根据医院编号、科室编号、工作日期,查询排版详细信息

List getScheduleDetail(String hoscode, String depcode, String workDate);

在ScheduleServiceImpl类实现接口

//根据医院编号、科室编号、工作日期,查询排版详细信息

@Override

public List getScheduleDetail(String hoscode, String depcode, String workDate) {

//根据参数,查询mongodb

List scheduleList = scheduleRepository.findScheduleByHoscodeAndDepcodeAndWorkDate(hoscode,depcode,new DateTime(workDate).toDate());

//遍历list集合,设置每个元素对应的属性

//使用stream流遍历

scheduleList.stream().forEach(item->{

this.packageSchedule(item);

});

return scheduleList;

}

//封装其他值:医院名称,科室名称,日期对应的星期

private void packageSchedule(Schedule item) {

Map<String, Object> map = item.getParam();

//获取医院名称

String hospName = hospitalService.getHospName(item.getHoscode());

//根据医院编号、科室编号,获取科室名称

String deptName = departmentService.getDeptName(item.getHoscode(),item.getDepcode());

//获取日期对应的星期

String week = DateUtil.getDayOfWeek(new DateTime(item.getWorkDate()));

map.put(“hospName”,hospName);

map.put(“deptName”,deptName);

map.put(“week”,week);

}


3.1.3 添加根据部门编码获取部门名称

1,在DepartmentService类添加接口

//根据医院编号、科室编号,获取科室名称

String getDeptName(String hoscode, String depcode);

2,在DepartmentService类添加接口实现

//根据医院编号、科室编号,获取科室名称

@Override

public String getDeptName(String hoscode, String depcode) {

Department department = departmentRepository.getDepartmentByHoscodeAndDepcode(hoscode,depcode);

if (department!=null){

return department.getDepname();

}

return null;

}

3.1.4 添加controller

//根据医院编号、科室编号、工作日期,查询排版详细信息

@GetMapping(“/getScheduleDetail/{hoscode}/{depcode}/{workDate}”)

public Result getScheduleDetail(@PathVariable String hoscode,

@PathVariable String depcode,

@PathVariable String workDate){

List list = scheduleService.getScheduleDetail(hoscode,depcode,workDate);

return Result.ok(list);

}


3.2 排班日期前端

3.2.1封装api请求

在/api/hosp/schedule.js文件添加方法

//根据医院编号、科室编号、工作日期,查询排版详细信息

getScheduleDetail(hoscode,depcode,workDate) {

return request({

url: /admin/hosp/Schedule/getScheduleDetail/${hoscode}/${depcode}/${workDate},

method: ‘get’

})

},

1.2.2 页面展示

修改/views/hosp/schedule.vue组件

选择:{{ baseMap.hospName }} / {{ depname }} / {{ workDate }}

<el-tree

:data=“data”

:props=“defaultProps”

:default-expand-all=“true”

@node-click=“handleNodeClick”>

<el-tag v-for=“(item,index) in bookingScheduleList” :key=“item.id” @click=“selectDate(item.workDate, index)”

:type=“index == activeIndex ? ‘’ : ‘info’”

style=“height: 60px;margin-right: 5px;margin-right:15px;cursor:pointer;”>

{{ item.workDate }} {{ item.dayOfWeek }}

{{ item.availableNumber }} / {{ item.reservedNumber }}

<el-pagination

:current-page=“page”

:total=“total”

:page-size=“limit”

class=“pagination”

layout=“prev, pager, next”

@current-change=“getPage”>

<el-table

v-loading=“listLoading”

:data=“scheduleList”

border

fit

highlight-current-row>

<el-table-column

label=“序号”

width=“60”

align=“center”>

{{ scope.$index + 1 }}

{{ scope.row.title }} | {{ scope.row.docname }}

{{ scope.row.workTime == 0 ? “上午” : “下午” }}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值