|
@ -0,0 +1,306 @@
|
|
|
package com.yihu.wlyy.statistics.service;
|
|
|
|
|
|
import com.yihu.wlyy.statistics.dao.DoctorDao;
|
|
|
import com.yihu.wlyy.statistics.dao.DoctorWorkTimeDao;
|
|
|
import com.yihu.wlyy.statistics.dao.DoctorWorkWeekDao;
|
|
|
import com.yihu.wlyy.statistics.model.doctor.Doctor;
|
|
|
import com.yihu.wlyy.statistics.model.doctor.WlyyDoctorWorkTime;
|
|
|
import com.yihu.wlyy.statistics.model.doctor.WlyyDoctorWorkWeek;
|
|
|
import com.yihu.wlyy.statistics.util.DateUtil;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.json.JSONArray;
|
|
|
import org.json.JSONObject;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import javax.transaction.Transactional;
|
|
|
import java.text.SimpleDateFormat;
|
|
|
import java.util.*;
|
|
|
|
|
|
/**
|
|
|
* 医生工作排班
|
|
|
* <p>
|
|
|
* Created by lyr on 2016/08/19.
|
|
|
*/
|
|
|
@Service
|
|
|
@Transactional
|
|
|
public class DoctorWorkTimeService {
|
|
|
|
|
|
static Object obj = new Object();
|
|
|
@Autowired
|
|
|
private DoctorWorkTimeDao doctorWorkTimeDao;
|
|
|
@Autowired
|
|
|
private DoctorWorkWeekDao doctorWorkWeekDao;
|
|
|
@Autowired
|
|
|
private DoctorDao doctorDao;
|
|
|
|
|
|
/**
|
|
|
* 查询医生某天工作时间
|
|
|
*
|
|
|
* @param doctor 医生标识
|
|
|
* @param week 某天
|
|
|
* @return
|
|
|
*/
|
|
|
public JSONObject findDoctorWeekWorkTime(String doctor, String week) throws Exception {
|
|
|
JSONObject result = new JSONObject();
|
|
|
WlyyDoctorWorkTime workTime = doctorWorkTimeDao.findDoctorWorkTime(doctor);
|
|
|
WlyyDoctorWorkWeek workWeek = doctorWorkWeekDao.findDoctorWorkWeek(doctor, week);
|
|
|
|
|
|
result.put("workTime", workTime != null ? new JSONObject(workTime) : "");
|
|
|
result.put("workWeek", workWeek != null ? new JSONObject(workWeek) : "");
|
|
|
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 查询医生某天工作时间
|
|
|
*
|
|
|
* @param doctor 医生标识
|
|
|
* @param week 某天
|
|
|
* @return
|
|
|
*/
|
|
|
public Map<String, Object> findDoctorWeekWork(String doctor, String week) throws Exception {
|
|
|
Map<String, Object> map = new HashMap<>();
|
|
|
Doctor doc = doctorDao.findByCode(doctor);
|
|
|
if (doc == null) {
|
|
|
throw new Exception("doctor-worktime-error:doctor not exist");
|
|
|
}
|
|
|
WlyyDoctorWorkTime workTime = doctorWorkTimeDao.findDoctorWorkTime(doctor);
|
|
|
WlyyDoctorWorkWeek workWeek = doctorWorkWeekDao.findDoctorWorkWeek(doctor, week);
|
|
|
|
|
|
map.put("workTime", workTime);
|
|
|
map.put("workWeek", workWeek);
|
|
|
|
|
|
|
|
|
return map;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 医生是否在工作
|
|
|
*
|
|
|
* @param doctor 医生
|
|
|
* @return
|
|
|
*/
|
|
|
public JSONObject isDoctorWorking(String doctor, Integer week) throws Exception {
|
|
|
JSONObject json = new JSONObject();
|
|
|
Calendar calendar = Calendar.getInstance();
|
|
|
if (week < 0) {
|
|
|
week = calendar.get(Calendar.DAY_OF_WEEK) - 1;
|
|
|
|
|
|
if (week == 0) {
|
|
|
week = 7;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// 医生工作时间设置
|
|
|
Map<String, Object> result = findDoctorWeekWork(doctor, String.valueOf(week));
|
|
|
|
|
|
if (result.get("workTime") == null) {
|
|
|
// 医生未设置时,默认7*24小时工作
|
|
|
json.put("status", "1");
|
|
|
json.put("msg", "医生当前接受咨询");
|
|
|
} else {
|
|
|
WlyyDoctorWorkTime doctorWorkTime = (WlyyDoctorWorkTime) result.get("workTime");
|
|
|
|
|
|
if (doctorWorkTime.getReceiveConsult().equals("0")) {
|
|
|
// 医生设置不接受咨询
|
|
|
json.put("status", "0");
|
|
|
json.put("msg", "医生不接受咨询");
|
|
|
} else {
|
|
|
if (StringUtils.isEmpty(doctorWorkTime.getMorningBegin()) && StringUtils.isEmpty(doctorWorkTime.getMorningEnd())
|
|
|
&& StringUtils.isEmpty(doctorWorkTime.getAfternoonBegin()) && StringUtils.isEmpty(doctorWorkTime.getAfternoonEnd())
|
|
|
&& StringUtils.isEmpty(doctorWorkTime.getNightBegin()) && StringUtils.isEmpty(doctorWorkTime.getNightEnd())) {
|
|
|
// 医生未设置工作时间,默认7*24小时工作
|
|
|
json.put("status", "1");
|
|
|
json.put("msg", "医生当前接受咨询");
|
|
|
} else {
|
|
|
if (result.get("workWeek") != null) {
|
|
|
// 当前工作日已设置工作时间
|
|
|
int flag = 0;
|
|
|
WlyyDoctorWorkTime workTime = (WlyyDoctorWorkTime) result.get("workTime");
|
|
|
WlyyDoctorWorkWeek workWeek = (WlyyDoctorWorkWeek) result.get("workWeek");
|
|
|
int hour = calendar.get(Calendar.HOUR_OF_DAY);
|
|
|
int minute = calendar.get(Calendar.MINUTE);
|
|
|
String current = (hour < 10 ? ("0" + hour) : hour) + ":" + (hour < 10 ? ("0" + minute) : minute);
|
|
|
|
|
|
// 早上
|
|
|
if (workWeek.getMorning().equals("1")) {
|
|
|
String currentStart = workTime.getMorningBegin();
|
|
|
String currentEnd = workTime.getMorningEnd();
|
|
|
if (currentStart.length() == 4) {
|
|
|
currentStart = "0" + currentStart;
|
|
|
}
|
|
|
if (currentEnd.length() == 4) {
|
|
|
currentEnd = "0" + currentEnd;
|
|
|
}
|
|
|
if (current.compareTo(currentStart) >= 0 &&
|
|
|
current.compareTo(currentEnd) < 0) {
|
|
|
flag = 1;
|
|
|
}
|
|
|
}
|
|
|
// 下午
|
|
|
if (workWeek.getAfternoon().equals("1")) {
|
|
|
String currentStart = workTime.getAfternoonBegin();
|
|
|
String currentEnd = workTime.getAfternoonEnd();
|
|
|
if (currentStart.length() == 4) {
|
|
|
currentStart = "0" + currentStart;
|
|
|
}
|
|
|
if (currentEnd.length() == 4) {
|
|
|
currentEnd = "0" + currentEnd;
|
|
|
}
|
|
|
if (current.compareTo(currentStart) >= 0 &&
|
|
|
current.compareTo(currentEnd) < 0) {
|
|
|
flag = 1;
|
|
|
}
|
|
|
}
|
|
|
// 晚上
|
|
|
if (workWeek.getNight().equals("1")) {
|
|
|
String currentStart = workTime.getNightBegin();
|
|
|
String currentEnd = workTime.getNightEnd();
|
|
|
if (currentStart.length() == 4) {
|
|
|
currentStart = "0" + currentStart;
|
|
|
}
|
|
|
if (currentEnd.length() == 4) {
|
|
|
currentEnd = "0" + currentEnd;
|
|
|
}
|
|
|
if (current.compareTo(currentStart) >= 0 &&
|
|
|
current.compareTo(currentEnd) < 0) {
|
|
|
flag = 1;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (flag == 1) {
|
|
|
json.put("status", "1");
|
|
|
json.put("msg", "医生当前接受咨询");
|
|
|
} else {
|
|
|
json.put("status", "2");
|
|
|
json.put("msg", "医生当前不在工作时间");
|
|
|
}
|
|
|
} else {
|
|
|
json.put("status", "2");
|
|
|
json.put("msg", "医生当前不在工作时间");
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return json;
|
|
|
}
|
|
|
public Date getDoctorWeek(String doctor, Integer week) throws Exception {
|
|
|
Date json = new Date();
|
|
|
Calendar calendar = Calendar.getInstance();
|
|
|
|
|
|
// 医生工作时间设置
|
|
|
Map<String, Object> result = findDoctorWeekWork(doctor, String.valueOf(week));
|
|
|
|
|
|
if (result.get("workTime") == null) {
|
|
|
// 医生未设置时,默认7*24小时工作
|
|
|
return json;
|
|
|
} else {
|
|
|
WlyyDoctorWorkTime doctorWorkTime = (WlyyDoctorWorkTime) result.get("workTime");
|
|
|
|
|
|
if (doctorWorkTime.getReceiveConsult().equals("0")) {
|
|
|
return null;
|
|
|
} else {
|
|
|
if (StringUtils.isEmpty(doctorWorkTime.getMorningBegin()) && StringUtils.isEmpty(doctorWorkTime.getMorningEnd())
|
|
|
&& StringUtils.isEmpty(doctorWorkTime.getAfternoonBegin()) && StringUtils.isEmpty(doctorWorkTime.getAfternoonEnd())
|
|
|
&& StringUtils.isEmpty(doctorWorkTime.getNightBegin()) && StringUtils.isEmpty(doctorWorkTime.getNightEnd())) {
|
|
|
// 医生未设置工作时间,默认7*24小时工作
|
|
|
return json;
|
|
|
} else {
|
|
|
if (result.get("workWeek") != null) {
|
|
|
// 当前工作日已设置工作时间
|
|
|
int flag = 0;
|
|
|
WlyyDoctorWorkTime workTime = (WlyyDoctorWorkTime) result.get("workTime");
|
|
|
WlyyDoctorWorkWeek workWeek = (WlyyDoctorWorkWeek) result.get("workWeek");
|
|
|
int hour = calendar.get(Calendar.HOUR_OF_DAY);
|
|
|
int minute = calendar.get(Calendar.MINUTE);
|
|
|
String current = (hour < 10 ? ("0" + hour) : hour) + ":" + (hour < 10 ? ("0" + minute) : minute);
|
|
|
|
|
|
// 早上
|
|
|
if (workWeek.getMorning().equals("1")) {
|
|
|
String currentStart = workTime.getMorningBegin();
|
|
|
String currentEnd = workTime.getMorningEnd();
|
|
|
if (currentStart.length() == 4) {
|
|
|
currentStart = "0" + currentStart;
|
|
|
}
|
|
|
if (currentEnd.length() == 4) {
|
|
|
currentEnd = "0" + currentEnd;
|
|
|
}
|
|
|
if (current.compareTo(currentStart) >= 0 &&
|
|
|
current.compareTo(currentEnd) < 0) {
|
|
|
String preDate= DateUtil.dateToStr(json,"yyyy-MM-dd");
|
|
|
preDate=preDate+" "+currentStart;
|
|
|
return DateUtil.strToDate(preDate,"yyyy-MM-dd HH:mm");
|
|
|
}
|
|
|
}
|
|
|
// 下午
|
|
|
if (workWeek.getAfternoon().equals("1")) {
|
|
|
String currentStart = workTime.getAfternoonBegin();
|
|
|
String currentEnd = workTime.getAfternoonEnd();
|
|
|
if (currentStart.length() == 4) {
|
|
|
currentStart = "0" + currentStart;
|
|
|
}
|
|
|
if (currentEnd.length() == 4) {
|
|
|
currentEnd = "0" + currentEnd;
|
|
|
}
|
|
|
if (current.compareTo(currentStart) >= 0 &&
|
|
|
current.compareTo(currentEnd) < 0) {
|
|
|
String preDate= DateUtil.dateToStr(json,"yyyy-MM-dd");
|
|
|
preDate=preDate+" "+currentStart;
|
|
|
return DateUtil.strToDate(preDate,"yyyy-MM-dd HH:mm");
|
|
|
}
|
|
|
}
|
|
|
// 晚上
|
|
|
if (workWeek.getNight().equals("1")) {
|
|
|
String currentStart = workTime.getNightBegin();
|
|
|
String currentEnd = workTime.getNightEnd();
|
|
|
if (currentStart.length() == 4) {
|
|
|
currentStart = "0" + currentStart;
|
|
|
}
|
|
|
if (currentEnd.length() == 4) {
|
|
|
currentEnd = "0" + currentEnd;
|
|
|
}
|
|
|
if (current.compareTo(currentStart) >= 0 &&
|
|
|
current.compareTo(currentEnd) < 0) {
|
|
|
String preDate= DateUtil.dateToStr(json,"yyyy-MM-dd");
|
|
|
preDate=preDate+" "+currentStart;
|
|
|
return DateUtil.strToDate(preDate,"yyyy-MM-dd HH:mm");
|
|
|
}
|
|
|
}
|
|
|
} else {
|
|
|
return null;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
|
/**
|
|
|
* 得到医生的下次工作时间
|
|
|
*
|
|
|
* @param doctor
|
|
|
* @return
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
public Date getDoctorNextWork(String doctor) throws Exception {
|
|
|
Calendar calendar = Calendar.getInstance();
|
|
|
int week = calendar.get(Calendar.DAY_OF_WEEK) - 1;
|
|
|
if (week == 0) {
|
|
|
week = 7;
|
|
|
}
|
|
|
//得到今天的是否有工作
|
|
|
Date date=getDoctorWeek(doctor,week);
|
|
|
if(date==null){
|
|
|
//如果工作时间遍历得到最新的一天的时间
|
|
|
for(int i=1;i<8;i++){
|
|
|
int weekTemp=(i+week)%7;
|
|
|
if(weekTemp==0){
|
|
|
weekTemp=7;
|
|
|
}
|
|
|
date=getDoctorWeek(doctor,weekTemp);
|
|
|
}
|
|
|
}
|
|
|
return date;
|
|
|
}
|
|
|
}
|