我们先看看前端js
传过来的result里面包含两个成员变量 : times 和 booksDepartCounts。并且两个成员变量都是集合形式
而 booksDepartCounts 里面又包含两个成员变量 : countList 和 dename。并且 countList 是集合形式。
所以booksDepartCounts 应该是个pojo类
因此根据分析,返回的类型图应该如下所示:
Result : times(集合) , booksDepartCounts(类)
booksDepartCounts: dname , countList(集合)
好,我们再来看看静态模型:
这样,我们就大概分析完成了
我们先来建立返回的result类,我们命名为DepartBooks。他的属性是times集合和booksDepartCounts类
package com.yy.hospital.domain;
import java.io.Serializable;
import java.util.List;
public class DepartBooks implements Serializable{
private List<String> times; //时间段的名称集合--表头的今天,昨天,本周,本月,本季度
private List<BooksDepartCounts> booksDepartCounts; //所有科室对应挂号人数集合
//getter和setter省略
}
然后我们再来定义 BooksDepartCounts 类
package com.yy.hospital.domain;
import java.io.Serializable;
import java.util.List;
public class BooksDepartCounts implements Serializable {
private String dename; // 科室名字
private List<Integer> countList; // 每个时间段挂号人数集合(今天,昨天,本周,本月,本季度中的值)
//getter和setter省略
}
接下来,我们只要通过SQL语句把数据查出来封装到类里面然后传出来就行了;我还是把controller层的代码贴出来吧
package com.yy.hospital.controller;
import com.yy.hospital.Service.DepartsService;
import com.yy.hospital.Service.RegistrationService;
import com.yy.hospital.domain.BooksDepartCounts;
import com.yy.hospital.domain.DepartBooks;
import com.yy.hospital.domain.Departs;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@RestController
@RequestMapping("/api")
public class RegistrationController {
@Autowired
private DepartsService departsService;
@Autowired
private RegistrationService registrationService;
@RequestMapping(value = "booksdepart", method = RequestMethod.GET)
public ResponseEntity<?> booksdepart() {
//查询可用科室集合
List<Departs> departs = departsService.findList();
//所有科室挂号集合
List<BooksDepartCounts> list = new ArrayList<>();
//遍历科室集合
for (Departs departs1 : departs) {
BooksDepartCounts bdc = new BooksDepartCounts();
List<Integer> countList = new ArrayList<>();
countList.add(registrationService.getToday(departs1.getDeid()));
countList.add(registrationService.getYestoday(departs1.getDeid()));
countList.add(registrationService.getWeek(departs1.getDeid()));
countList.add(registrationService.getMonth(departs1.getDeid()));
countList.add(registrationService.getQuarter(departs1.getDeid()));
bdc.setDename(departs1.getDename());
bdc.setCountList(countList);
list.add(bdc);
}
DepartBooks books = new DepartBooks();
List<String> times = new ArrayList<>();
times.add("今天");
times.add("昨天");
times.add("本周");
times.add("本月");
times.add("本季度");
books.setTimes(times);
books.setBooksDepartCounts(list);
return new ResponseEntity<DepartBooks>(books, HttpStatus.OK);
}
}
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
我们再来看个,这个是我项目中医生排班查询的功能。终于知道了前后端设计不匹配是多么的坑,我们先来看下前端js需要的封装(只贴了部分)
// 查询指定日的排班
function loadBK() {
$.ajax({
url: HOST_URL + "bookabledepartdoctor",
data: {deid: $("#deid").val(), datetime: $("#datetime").val()},
type: "post",
dataType: "json",
headers: createAuthorizationTokenHeader(),
success: function (data) {
console.log(data)
if (data) {
$("thead").empty()
$("tfoot").empty()
$("tbody").empty()
}
$("#deid").val(data.deid)
$("#datetime").val(data.datetime)
var thText = `
<tr class="text-c">
<th width="40">ID</th>
<th width="60">医生姓名</th>
<th width="40">时段</th>
`
// 加载星期
$.each(data.weekList, (i, item) => {
thText += `
<th width="80">${item}</th>
`
})
$("thead").append(thText + `</tr>`)
$("tfoot").append(thText + `</tr>`)
var text = ``
// 加载医生排班
$.each(data.weekBeanList, (i, item) => {
// 上午
var amspanClass1 = `label label-defaunt radius`
if (item.areg1 == '值班坐诊') {
amspanClass1 = `label label-danger radius`
}
var amspanClass2 = `label label-defaunt radius`
if (item.areg2 == '值班坐诊') {
amspanClass2 = `label label-danger radius`
}
var amspanClass3 = `label label-defaunt radius`
if (item.areg3 == '值班坐诊') {
amspanClass3 = `label label-danger radius`
}
var amspanClass4 = `label label-defaunt radius`
if (item.areg4 == '值班坐诊') {
amspanClass4 = `label label-danger radius`
}
var amspanClass5 = `label label-defaunt radius`
if (item.areg5 == '值班坐诊') {
amspanClass5 = `label label-danger radius`
}
var amspanClass6 = `label label-defaunt radius`
if (item.areg6 == '值班坐诊') {
amspanClass6 = `label label-danger radius`
}
var amspanClass7 = `label label-defaunt radius`
if (item.areg7 == '值班坐诊') {
amspanClass7 = `label label-danger radius`
}
// 下午
var pmspanClass1 = `label label-defaunt radius`
if (item.preg1 == '值班坐诊') {
pmspanClass1 = `label label-danger radius`
}
var pmspanClass2 = `label label-defaunt radius`
if (item.preg2 == '值班坐诊') {
pmspanClass2 = `label label-danger radius`
}
var pmspanClass3 = `label label-defaunt radius`
if (item.preg3 == '值班坐诊') {
pmspanClass3 = `label label-danger radius`
}
var pmspanClass4 = `label label-defaunt radius`
if (item.preg4 == '值班坐诊') {
pmspanClass4 = `label label-danger radius`
}
var pmspanClass5 = `label label-defaunt radius`
if (item.preg5 == '值班坐诊') {
pmspanClass5 = `label label-danger radius`
}
var pmspanClass6 = `label label-defaunt radius`
if (item.preg6 == '值班坐诊') {
pmspanClass6 = `label label-danger radius`
}
var pmspanClass7 = `label label-defaunt radius`
if (item.preg7 == '值班坐诊') {
pmspanClass7 = `label label-danger radius`
}
text += `
<tr class="text-c">
<td rowspan=2>${item.doid}</td>
<td rowspan=2>${item.doname}</td>
<td>上午</td>
<td class="td-status"><span class="${amspanClass1}">${item.areg1 }</span></td>
<td class="td-status"><span class="${amspanClass2}">${item.areg2 }</span></td>
<td class="td-status"><span class="${amspanClass3}">${item.areg3 }</span></td>
<td class="td-status"><span class="${amspanClass4}">${item.areg4 }</span></td>
<td class="td-status"><span class="${amspanClass5}">${item.areg5 }</span></td>
<td class="td-status"><span class="${amspanClass6}">${item.areg6 }</span></td>
<td class="td-status"><span class="${amspanClass7}">${item.areg7 }</span></td>
</tr>
<tr class="text-c">
<td hidden>${item.doid}</td>
<td hidden>${item.doname}</td>
<td>下午</td>
<td class="td-status"><span class="${pmspanClass1}">${item.preg1 }</span></td>
<td class="td-status"><span class="${pmspanClass2}">${item.preg2 }</span></td>
<td class="td-status"><span class="${pmspanClass3}">${item.preg3 }</span></td>
<td class="td-status"><span class="${pmspanClass4}">${item.preg4 }</span></td>
<td class="td-status"><span class="${pmspanClass5}">${item.preg5 }</span></td>
<td class="td-status"><span class="${pmspanClass6}">${item.preg6 }</span></td>
<td class="td-status"><span class="${pmspanClass7}">${item.preg7 }</span></td>
</tr>
`
})
$("tbody").append(text)
$('.table-sort').DataTable({
language: {
url: "../js/zh_CN.txt"
},
retrieve: true, // Cannot reinitialise DataTable
})
}
})
}
传过来的result对象里面有两个List,一个是weekLIst,里面存星期的,这个不用说;主要是weekbeanList列表,这个列表里面封装的是一个对象,这个对象存的是doid,doname,areg1.....preg7。所以我们先根据前端所需要的数据对象类建pojo类。
首先建个WeekBean来封装每个医生的排班
package com.yy.hospital.domain;
public class WeekBean {
private Integer doid; //医生编号
private String doname; //医生姓名
private String areg1;
private String areg2;
private String areg3;
private String areg4;
private String areg5;
private String areg6;
private String areg7;
private String preg1;
private String preg2;
private String preg3;
private String preg4;
private String preg5;
private String preg6;
private String preg7;
//getter和setter省略
}
然后我们再建个WeekBookable(result)
package com.yy.hospital.domain;
import java.util.List;
public class WeekBookable {
private List<String> weekList; //放星期的
private List<WeekBean> weekBeanList; //放每个医生的排班
//getter和setter省略
}
好我们再来看看我们后台需要用的表
首先看看医生表
然后我们再看看最重要的表,即排班表
我们可以看到,排班表示按天来算的,如果这个医生这个星期上了5天班,我们就需要拿从这个表里面拿五条数据出来封到5个Bookable对象。再看下我们前端需要的的weekBan,每个医生一星期的排班对应一个weekBean对象,所以我们现在就需要把这五个Bookable的对象的信息封装到这一个weekBean中。
如果我们只要查看一个医生的排班那还是好办但是我们现在是要查一个科室里面所有医生的排班,而且每个医生每周的工作天数也不同,所以这里感觉前端的设计就有点不合理了。
但没办法,还是做吧。首先我们需要得到Bookable的对象的集合(List<Bookable>)
红线1是查找时间范围是传入的#{bdate}所在的那个星期(星期一到星期天)。红线2是第一排序是根据医生号,第二排序是日期,这样就方便接下来把数据封装的List<weekBean>中,我们可以测试下看看数据形式
最后我们再看看怎么封装的,代码里面有注释
package com.yy.hospital.controller;
import com.yy.hospital.Service.BookableService;
import com.yy.hospital.Service.DoctorsService;
import com.yy.hospital.domain.Bookable;
import com.yy.hospital.domain.Doctors;
import com.yy.hospital.domain.WeekBean;
import com.yy.hospital.domain.WeekBookable;
import com.yy.hospital.mapper.DoctorsMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.sql.Date;
import java.text.SimpleDateFormat;
import java.util.*;
@RestController
@RequestMapping("/api")
public class BookableController {
@Autowired
private BookableService bookableService;
@Autowired
private DoctorsMapper doctorsMapper;
@RequestMapping(value = "bookabledepartdoctor" , method = RequestMethod.POST)
public ResponseEntity<?> findBookableByBdateAdDoid(@RequestParam("datetime")Date bdate , @RequestParam("deid")Integer deid){
WeekBookable weekBookable = new WeekBookable();
Map<String,List<Bookable>> map = new HashMap<>();
List<Bookable> bookableList = new ArrayList<>();
// 1.从bookable中获取列表信息
bookableList = bookableService.findBookableByBdateAdDoid(bdate,deid);
// 2.把统计信息导入到WeekBean类中
LinkedHashSet<Integer> set = new LinkedHashSet<Integer>();
// 看有多少个医生,把每个医生的doid存入set中(因为bookableList中一个医生有多条数据,所以为了不重复用set)
for(int i=0;i<bookableList.size();i++){
set.add(bookableList.get(i).getDoid());
}
// 有少个医生,建多少个weekBean,并setDoid
WeekBean[] weekBeanArrays = new WeekBean[set.size()];
Iterator it = set.iterator();
int n = 0;
while(it.hasNext()){
weekBeanArrays[n] = new WeekBean();
weekBeanArrays[n].setDoid((Integer) it.next());
n++;
}
n=0;
// weekBean中setDoname和setAreg
// setDoname
weekBeanArrays[n].setDoname(doctorsMapper.findByDoid(bookableList.get(0).getDoid()).getDoname());
for(int j=0;j<bookableList.size();j++){
// 因为一个weekBean对应多个bookableList,所以当bookableList中的doid变了,weekBean才跟着变
if(!weekBeanArrays[n].getDoid().equals(bookableList.get(j).getDoid())){
n++;
weekBeanArrays[n].setDoname(doctorsMapper.findByDoid(bookableList.get(j).getDoid()).getDoname());
}
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("E");
String e = simpleDateFormat.format(bookableList.get(j).getBdate());
System.out.println(e);
if(e.equals("星期一")){
if(bookableList.get(j).getStarttime()==0){
weekBeanArrays[n].setAreg1("值班坐诊");
}else{
weekBeanArrays[n].setPreg1("值班坐诊");
}
System.out.println(weekBeanArrays[n].getAreg1()+","+weekBeanArrays[n].getPreg1());
}else if(e.equals("星期二")){
if(bookableList.get(j).getStarttime()==0){
weekBeanArrays[n].setAreg2("值班坐诊");
}else{
weekBeanArrays[n].setPreg2("值班坐诊");
}
}else if(e.equals("星期三")){
if(bookableList.get(j).getStarttime()==0){
weekBeanArrays[n].setAreg3("值班坐诊");
}else{
weekBeanArrays[n].setPreg3("值班坐诊");
}
}else if(e.equals("星期四")){
if(bookableList.get(j).getStarttime()==0){
weekBeanArrays[n].setAreg4("值班坐诊");
}else{
weekBeanArrays[n].setPreg4("值班坐诊");
}
}else if(e.equals("星期五")){
if(bookableList.get(j).getStarttime()==0){
weekBeanArrays[n].setAreg5("值班坐诊");
}else{
weekBeanArrays[n].setPreg5("值班坐诊");
}
}else if(e.equals("星期六")){
if(bookableList.get(j).getStarttime()==0){
weekBeanArrays[n].setAreg6("值班坐诊");
}else{
weekBeanArrays[n].setPreg6("值班坐诊");
}
}else if(e.equals("星期天")){
if(bookableList.get(j).getStarttime()==0){
weekBeanArrays[n].setAreg7("值班坐诊");
}else{
weekBeanArrays[n].setPreg7("值班坐诊");
}
}
}
//把weekBean数组的对象放但weeBean列表中(因为返回的参数是WeekBookable,WeekBookable里面的属性都是list)
List<WeekBean> weekBeanList = new ArrayList<>();
for(int h=0 ; h<weekBeanArrays.length;h++){
weekBeanList.add(weekBeanArrays[h]);
}
// 3.星期列表
List<String> weekList = new ArrayList<>();
weekList.add("星期一");
weekList.add("星期二");
weekList.add("星期三");
weekList.add("星期四");
weekList.add("星期五");
weekList.add("星期六");
weekList.add("星期日");
// 4 .将weekList和weekBeanList装入weekBookable(result)
weekBookable.setWeekList(weekList);
weekBookable.setWeekBeanList(weekBeanList);
return new ResponseEntity<WeekBookable>(weekBookable,HttpStatus.OK);
}
}