最后
对于很多Java工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。
整理的这些资料希望对Java开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。
再分享一波我的Java面试真题+视频学习详解+技能进阶书籍
说明:底部style标签是为了控制树形展示数据选中效果的
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);
}
}
- 测试
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组件
<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”>
- 效果显示
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组件
<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 ? “上午” : “下午” }}