|
@ -1131,19 +1131,34 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
|
|
|
}
|
|
|
|
|
|
public List<WlyyDoctorWorkTimeVO> findDoctorWorkTime(String doctor, String hospital) {
|
|
|
|
|
|
List<WlyyHospitalWorkRuleDO> list = wlyyHospitalWorkRuleDao.findByHospital(hospital);
|
|
|
|
|
|
if (list != null && list.size() > 0) {
|
|
|
WlyyHospitalWorkRuleDO rule = list.get(0);
|
|
|
|
|
|
Date openTime = DateUtil.strToDate(DateUtil.dateToStr(new Date(), "yyyy-MM-dd") + " " + rule.getMaxDayOpenTime() + ":00", "yyyy-MM-dd HH:mm:ss");
|
|
|
String openTimeString = DateUtil.dateToStr(new Date(), "yyyy-MM-dd")+ " " + rule.getMaxDayOpenTime() + ":00";
|
|
|
logger.info("today openTimeString :"+openTimeString);
|
|
|
Date openTime = DateUtil.strToDate(openTimeString, "yyyy-MM-dd HH:mm:ss");
|
|
|
|
|
|
Integer openDay = rule.getMaxDay();
|
|
|
if (openTime.before(new Date())) {
|
|
|
openDay = openDay - 1;
|
|
|
}
|
|
|
Date endDate = DateUtil.stringToDate(DateUtil.dateToStr(DateUtil.getPreDays(new Date(), openDay), "yyyy-MM-dd") + "23:59:59", "yyyy-MM-dd HH:mm:ss");
|
|
|
Date preDate = DateUtil.getPreDays(new Date(), openDay);
|
|
|
String maxDateString = DateUtil.dateToStr(preDate,"yyyy-MM-dd")+" 23:59:59";
|
|
|
logger.info("maxDateString :"+maxDateString);
|
|
|
|
|
|
Date endDate = DateUtil.stringToDate(maxDateString, "yyyy-MM-dd HH:mm:ss");
|
|
|
List<WlyyDoctorWorkTimeVO> timeVOs = new ArrayList<>();
|
|
|
List<WlyyDoctorWorkTimeDO> timeDOs = doctorWorkTimeDao.findDoctorWorkTime(doctor, new Date(), endDate);
|
|
|
convertToModels(timeDOs, timeVOs, WlyyDoctorWorkTimeVO.class);
|
|
|
|
|
|
if (timeVOs != null && timeVOs.size() > 0) {
|
|
|
for (WlyyDoctorWorkTimeVO timeVO : timeVOs) {
|
|
|
timeVO.setCount(findWorkTimeInfoCout(timeVO.getId()));
|
|
|
}
|
|
|
}
|
|
|
return timeVOs;
|
|
|
}
|
|
|
return null;
|
|
@ -2281,114 +2296,115 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
|
|
|
}
|
|
|
|
|
|
|
|
|
public List<WlyyDoctorWorkTimeVO> findDoctorWorkTime(String doctor) {
|
|
|
//获取医生排班规则
|
|
|
List<WlyyHospitalSysDictDO> list = sysDictDao.findByDictName("Scheduling");
|
|
|
|
|
|
Calendar ncTime = Calendar.getInstance();
|
|
|
ncTime.setTime(new Date());
|
|
|
|
|
|
Calendar scTime = Calendar.getInstance();
|
|
|
scTime.setTime(new Date());
|
|
|
|
|
|
Calendar ecTime = Calendar.getInstance();
|
|
|
ecTime.setTime(new Date());
|
|
|
|
|
|
//设置几天号源,及最后天号源的开放时间
|
|
|
int days = Integer.parseInt(findHospitalSysDictValue(list, "OpenDays"));
|
|
|
String closeTime = findHospitalSysDictValue(list, "CloseTime");
|
|
|
|
|
|
//比较当前时间是否超过开放时间
|
|
|
if (DateUtil.strToDate(DateUtil.getTimeShort(), DateUtil.HH_MM_SS).after(DateUtil.strToDate(closeTime, DateUtil.HH_MM))) {
|
|
|
//当前时间超过开放时间,可以预约最后一天全部号源
|
|
|
ecTime.add(Calendar.DAY_OF_MONTH, days);
|
|
|
ecTime.set(ecTime.get(Calendar.YEAR), ecTime.get(Calendar.MONTH), ecTime.get(Calendar.DATE), 23, 59, 59);
|
|
|
} else {
|
|
|
//当前时间没超过开放时间,可以预约最后一天前一天全部号源
|
|
|
ecTime.add(Calendar.DAY_OF_MONTH, days > 1 ? days - 1 : 0);
|
|
|
ecTime.set(ecTime.get(Calendar.YEAR), ecTime.get(Calendar.MONTH), ecTime.get(Calendar.DATE), 23, 59, 59);
|
|
|
}
|
|
|
|
|
|
|
|
|
List<WlyyDoctorWorkTimeDO> times = doctorWorkTimeDao.findDoctorWorkTime(doctor, scTime.getTime(), ecTime.getTime());
|
|
|
|
|
|
workTimeFilter(list, times);
|
|
|
|
|
|
List<WlyyDoctorWorkTimeVO> timeVOs = new ArrayList<>();
|
|
|
|
|
|
convertToModels(times, timeVOs, WlyyDoctorWorkTimeVO.class);
|
|
|
|
|
|
if (timeVOs != null && timeVOs.size() > 0) {
|
|
|
for (WlyyDoctorWorkTimeVO timeVO : timeVOs) {
|
|
|
timeVO.setCount(findWorkTimeCount(timeVO.getId()));
|
|
|
}
|
|
|
}
|
|
|
return timeVOs;
|
|
|
}
|
|
|
|
|
|
public List<WlyyDoctorWorkTimeDO> workTimeFilter(List<WlyyHospitalSysDictDO> sys, List<WlyyDoctorWorkTimeDO> times) {
|
|
|
|
|
|
if (times != null && times.size() > 0) {
|
|
|
//上午号源开放的最早天数
|
|
|
int AMCloseDays = Integer.parseInt(findHospitalSysDictValue(sys, "AMCloseDays"));
|
|
|
//每一天上午的最早预约的过号时间
|
|
|
String AMCloseTime = findHospitalSysDictValue(sys, "AMCloseTime");
|
|
|
//下午号源开放的最早天数
|
|
|
int PMCloseDays = Integer.parseInt(findHospitalSysDictValue(sys, "PMCloseDays"));
|
|
|
//每一天下午的最早预约的过号时间
|
|
|
String PMCloseTime = findHospitalSysDictValue(sys, "PMCloseTime");
|
|
|
|
|
|
Iterator it = times.iterator();
|
|
|
while (it.hasNext()) {
|
|
|
//设置上午过号时间
|
|
|
Calendar scAMTime = Calendar.getInstance();
|
|
|
scAMTime.setTime(new Date());
|
|
|
scAMTime.add(Calendar.DAY_OF_MONTH, AMCloseDays);
|
|
|
|
|
|
//设置下午午过号时间
|
|
|
Calendar scPMTime = Calendar.getInstance();
|
|
|
scPMTime.setTime(new Date());
|
|
|
scPMTime.add(Calendar.DAY_OF_MONTH, PMCloseDays);
|
|
|
|
|
|
WlyyDoctorWorkTimeDO time = (WlyyDoctorWorkTimeDO) it.next();
|
|
|
|
|
|
Boolean filter = true;
|
|
|
|
|
|
//1.【上午的排班中】 且 【排班结束时间】如果在【开放时间】前,则移除
|
|
|
if (filter && "1".equals(time.getTimeType()) && time.getEndTime().before(scAMTime.getTime())) {
|
|
|
it.remove();
|
|
|
filter = false;
|
|
|
}
|
|
|
|
|
|
//2.【下午午的排班中】 且 【排班结束时间】如果在【开放时间】前,则移除该排班
|
|
|
if (filter && "2".equals(time.getTimeType()) && time.getEndTime().before(scPMTime.getTime())) {
|
|
|
it.remove();
|
|
|
filter = false;
|
|
|
}
|
|
|
|
|
|
//3.如果【当前时间】过了【上午放号时间】,则移除所有上午的排班
|
|
|
if (filter && "1".equals(time.getTimeType()) &&
|
|
|
DateUtil.strToDate(DateUtil.getTimeShort(), DateUtil.HH_MM_SS).after(DateUtil.strToDate(AMCloseTime, DateUtil.HH_MM))) {
|
|
|
scAMTime.set(scAMTime.get(Calendar.YEAR), scAMTime.get(Calendar.MONTH), scAMTime.get(Calendar.DATE), 12, 00, 00);
|
|
|
|
|
|
if (time.getEndTime().before(scAMTime.getTime())) {
|
|
|
it.remove();
|
|
|
filter = false;
|
|
|
}
|
|
|
}
|
|
|
//4.如果【当前时间】过了【下午午放号时间】,则移除所有下午的排班
|
|
|
if (filter && "2".equals(time.getTimeType()) &&
|
|
|
DateUtil.strToDate(DateUtil.getTimeShort(), DateUtil.HH_MM_SS).after(DateUtil.strToDate(PMCloseTime, DateUtil.HH_MM))) {
|
|
|
scPMTime.set(scAMTime.get(Calendar.YEAR), scAMTime.get(Calendar.MONTH), scAMTime.get(Calendar.DATE), 12, 00, 00);
|
|
|
// 过时
|
|
|
// public List<WlyyDoctorWorkTimeVO> findDoctorWorkTime(String doctor) {
|
|
|
// //获取医生排班规则
|
|
|
// List<WlyyHospitalSysDictDO> list = sysDictDao.findByDictName("Scheduling");
|
|
|
//
|
|
|
// Calendar ncTime = Calendar.getInstance();
|
|
|
// ncTime.setTime(new Date());
|
|
|
//
|
|
|
// Calendar scTime = Calendar.getInstance();
|
|
|
// scTime.setTime(new Date());
|
|
|
//
|
|
|
// Calendar ecTime = Calendar.getInstance();
|
|
|
// ecTime.setTime(new Date());
|
|
|
//
|
|
|
// //设置几天号源,及最后天号源的开放时间
|
|
|
// int days = Integer.parseInt(findHospitalSysDictValue(list, "OpenDays"));
|
|
|
// String closeTime = findHospitalSysDictValue(list, "CloseTime");
|
|
|
//
|
|
|
// //比较当前时间是否超过开放时间
|
|
|
// if (DateUtil.strToDate(DateUtil.getTimeShort(), DateUtil.HH_MM_SS).after(DateUtil.strToDate(closeTime, DateUtil.HH_MM))) {
|
|
|
// //当前时间超过开放时间,可以预约最后一天全部号源
|
|
|
// ecTime.add(Calendar.DAY_OF_MONTH, days);
|
|
|
// ecTime.set(ecTime.get(Calendar.YEAR), ecTime.get(Calendar.MONTH), ecTime.get(Calendar.DATE), 23, 59, 59);
|
|
|
// } else {
|
|
|
// //当前时间没超过开放时间,可以预约最后一天前一天全部号源
|
|
|
// ecTime.add(Calendar.DAY_OF_MONTH, days > 1 ? days - 1 : 0);
|
|
|
// ecTime.set(ecTime.get(Calendar.YEAR), ecTime.get(Calendar.MONTH), ecTime.get(Calendar.DATE), 23, 59, 59);
|
|
|
// }
|
|
|
//
|
|
|
//
|
|
|
// List<WlyyDoctorWorkTimeDO> times = doctorWorkTimeDao.findDoctorWorkTime(doctor, scTime.getTime(), ecTime.getTime());
|
|
|
//
|
|
|
// workTimeFilter(list, times);
|
|
|
//
|
|
|
// List<WlyyDoctorWorkTimeVO> timeVOs = new ArrayList<>();
|
|
|
//
|
|
|
// convertToModels(times, timeVOs, WlyyDoctorWorkTimeVO.class);
|
|
|
//
|
|
|
// if (timeVOs != null && timeVOs.size() > 0) {
|
|
|
// for (WlyyDoctorWorkTimeVO timeVO : timeVOs) {
|
|
|
// timeVO.setCount(findWorkTimeCount(timeVO.getId()));
|
|
|
// }
|
|
|
// }
|
|
|
// return timeVOs;
|
|
|
// }
|
|
|
|
|
|
if (time.getEndTime().before(scPMTime.getTime())) {
|
|
|
it.remove();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
return times;
|
|
|
}
|
|
|
// public List<WlyyDoctorWorkTimeDO> workTimeFilter(List<WlyyHospitalSysDictDO> sys, List<WlyyDoctorWorkTimeDO> times) {
|
|
|
//
|
|
|
// if (times != null && times.size() > 0) {
|
|
|
// //上午号源开放的最早天数
|
|
|
// int AMCloseDays = Integer.parseInt(findHospitalSysDictValue(sys, "AMCloseDays"));
|
|
|
// //每一天上午的最早预约的过号时间
|
|
|
// String AMCloseTime = findHospitalSysDictValue(sys, "AMCloseTime");
|
|
|
// //下午号源开放的最早天数
|
|
|
// int PMCloseDays = Integer.parseInt(findHospitalSysDictValue(sys, "PMCloseDays"));
|
|
|
// //每一天下午的最早预约的过号时间
|
|
|
// String PMCloseTime = findHospitalSysDictValue(sys, "PMCloseTime");
|
|
|
//
|
|
|
// Iterator it = times.iterator();
|
|
|
// while (it.hasNext()) {
|
|
|
// //设置上午过号时间
|
|
|
// Calendar scAMTime = Calendar.getInstance();
|
|
|
// scAMTime.setTime(new Date());
|
|
|
// scAMTime.add(Calendar.DAY_OF_MONTH, AMCloseDays);
|
|
|
//
|
|
|
// //设置下午午过号时间
|
|
|
// Calendar scPMTime = Calendar.getInstance();
|
|
|
// scPMTime.setTime(new Date());
|
|
|
// scPMTime.add(Calendar.DAY_OF_MONTH, PMCloseDays);
|
|
|
//
|
|
|
// WlyyDoctorWorkTimeDO time = (WlyyDoctorWorkTimeDO) it.next();
|
|
|
//
|
|
|
// Boolean filter = true;
|
|
|
//
|
|
|
// //1.【上午的排班中】 且 【排班结束时间】如果在【开放时间】前,则移除
|
|
|
// if (filter && "1".equals(time.getTimeType()) && time.getEndTime().before(scAMTime.getTime())) {
|
|
|
// it.remove();
|
|
|
// filter = false;
|
|
|
// }
|
|
|
//
|
|
|
// //2.【下午午的排班中】 且 【排班结束时间】如果在【开放时间】前,则移除该排班
|
|
|
// if (filter && "2".equals(time.getTimeType()) && time.getEndTime().before(scPMTime.getTime())) {
|
|
|
// it.remove();
|
|
|
// filter = false;
|
|
|
// }
|
|
|
//
|
|
|
// //3.如果【当前时间】过了【上午放号时间】,则移除所有上午的排班
|
|
|
// if (filter && "1".equals(time.getTimeType()) &&
|
|
|
// DateUtil.strToDate(DateUtil.getTimeShort(), DateUtil.HH_MM_SS).after(DateUtil.strToDate(AMCloseTime, DateUtil.HH_MM))) {
|
|
|
// scAMTime.set(scAMTime.get(Calendar.YEAR), scAMTime.get(Calendar.MONTH), scAMTime.get(Calendar.DATE), 12, 00, 00);
|
|
|
//
|
|
|
// if (time.getEndTime().before(scAMTime.getTime())) {
|
|
|
// it.remove();
|
|
|
// filter = false;
|
|
|
// }
|
|
|
// }
|
|
|
// //4.如果【当前时间】过了【下午午放号时间】,则移除所有下午的排班
|
|
|
// if (filter && "2".equals(time.getTimeType()) &&
|
|
|
// DateUtil.strToDate(DateUtil.getTimeShort(), DateUtil.HH_MM_SS).after(DateUtil.strToDate(PMCloseTime, DateUtil.HH_MM))) {
|
|
|
// scPMTime.set(scAMTime.get(Calendar.YEAR), scAMTime.get(Calendar.MONTH), scAMTime.get(Calendar.DATE), 12, 00, 00);
|
|
|
//
|
|
|
// if (time.getEndTime().before(scPMTime.getTime())) {
|
|
|
// it.remove();
|
|
|
// }
|
|
|
// }
|
|
|
// }
|
|
|
// }
|
|
|
// return times;
|
|
|
// }
|
|
|
|
|
|
|
|
|
public String findHospitalSysDictValue(List<WlyyHospitalSysDictDO> list, String dictCode) {
|
|
@ -2453,7 +2469,6 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
|
|
|
Date temp =new Date();
|
|
|
temp.setTime(sc.getTime().getTime()+s);
|
|
|
sc.setTime(temp);
|
|
|
// sc.add(Calendar.MINUTE,timeDO.getTimeInterval());
|
|
|
//如果结束时间大于排班时间则不再拆分号源
|
|
|
if(sc.getTime().after(timeDO.getEndTime())){
|
|
|
break;
|
|
@ -2476,6 +2491,66 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
|
|
|
return rs;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 计算号源数目
|
|
|
* @param id
|
|
|
* @return
|
|
|
*/
|
|
|
public Integer findWorkTimeInfoCout(String id){
|
|
|
WlyyDoctorWorkTimeDO timeDO = doctorWorkTimeDao.findOne(id);
|
|
|
|
|
|
Long ss = timeDO.getEndTime().getTime()-timeDO.getStartTime().getTime();
|
|
|
Long s = ss/timeDO.getSourceNumber();
|
|
|
|
|
|
Calendar sc = Calendar.getInstance();
|
|
|
sc.setTime(timeDO.getStartTime());
|
|
|
|
|
|
List<Map<String,Object>> rs = new ArrayList<>();
|
|
|
|
|
|
//1.根据当前时间,去取已过时间的号源
|
|
|
while (sc.getTime().before(timeDO.getEndTime())){
|
|
|
if(new Date().before(sc.getTime())){
|
|
|
break;
|
|
|
}
|
|
|
//加上时间间隔
|
|
|
Date temp =new Date();
|
|
|
temp.setTime(sc.getTime().getTime()+s);
|
|
|
sc.setTime(temp);
|
|
|
}
|
|
|
|
|
|
List<WlyyPatientRegisterTimeDO> registerTimeDOs = patientRegisterTimeDao.findByDoctorAndWorkId(timeDO.getDoctor(),id);
|
|
|
|
|
|
//2.根据时间间隔拆分号源
|
|
|
while (sc.getTime().before(timeDO.getEndTime())){
|
|
|
|
|
|
Map<String,Object> t = new HashedMap();
|
|
|
t.put("startTime",DateUtil.dateToStr(sc.getTime(),"yyyy-MM-dd HH:mm:ss"));
|
|
|
//加上时间间隔
|
|
|
Date temp =new Date();
|
|
|
temp.setTime(sc.getTime().getTime()+s);
|
|
|
sc.setTime(temp);
|
|
|
//如果结束时间大于排班时间则不再拆分号源
|
|
|
if(sc.getTime().after(timeDO.getEndTime())){
|
|
|
break;
|
|
|
}
|
|
|
t.put("endTime",DateUtil.dateToStr(sc.getTime(),"yyyy-MM-dd HH:mm:ss"));
|
|
|
|
|
|
//如果号源被预约了,标记为true
|
|
|
Boolean registered = false;
|
|
|
if(registerTimeDOs!=null&®isterTimeDOs.size()>0){
|
|
|
for(WlyyPatientRegisterTimeDO registerTimeDO : registerTimeDOs){
|
|
|
if(t.get("startTime").equals(DateUtil.dateToStr(registerTimeDO.getStartTime(),"yyyy-MM-dd HH:mm:ss"))){
|
|
|
registered = true;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
if(!registered){
|
|
|
rs.add(t);
|
|
|
}
|
|
|
}
|
|
|
return rs.size();
|
|
|
}
|
|
|
|
|
|
@Deprecated
|
|
|
public List<Map<String,Object>> findWorkTimeInfoOld(String id){
|
|
|
WlyyDoctorWorkTimeDO timeDO = doctorWorkTimeDao.findOne(id);
|
|
@ -2598,11 +2673,17 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
|
|
|
rs.put("winNo",org.getWinNo());
|
|
|
rs.put("deptName",hospitalDOs.get(0).getDeptName());
|
|
|
rs.put("dept",hospitalDOs.get(0).getDeptCode());
|
|
|
|
|
|
if(StringUtils.isNotBlank(withWork)&&"1".equals(withWork)){
|
|
|
List<WlyyDoctorWorkTimeVO> times = findDoctorWorkTime(doctor,hospitalDOs.get(0).getOrgCode());
|
|
|
rs.put("workTime",times);
|
|
|
}
|
|
|
}else{
|
|
|
rs.put("hospital",null);
|
|
|
rs.put("winNo",null);
|
|
|
rs.put("deptName",null);
|
|
|
rs.put("dept",null);
|
|
|
rs.put("workTime",null);
|
|
|
}
|
|
|
|
|
|
|
|
@ -2630,21 +2711,18 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
|
|
|
rs.put("registerCount",0);
|
|
|
}
|
|
|
//医生问诊量
|
|
|
// List<WlyyOutpatientDO> wlyyOutpatientDOs = outpatientDao.findByDoctorAndStatus(doctor,"2");
|
|
|
// if(wlyyOutpatientDOs!=null&&wlyyOutpatientDOs.size()>0){
|
|
|
// rs.put("outpatientCount",wlyyOutpatientDOs.size());
|
|
|
// }else{
|
|
|
// rs.put("outpatientCount",0);
|
|
|
// }
|
|
|
List<WlyyOutpatientDO> wlyyOutpatientDOs = outpatientDao.findByDoctorAndStatus(doctor,"2");
|
|
|
if(wlyyOutpatientDOs!=null&&wlyyOutpatientDOs.size()>0){
|
|
|
rs.put("outpatientCount",wlyyOutpatientDOs.size());
|
|
|
}else{
|
|
|
rs.put("outpatientCount",0);
|
|
|
}
|
|
|
|
|
|
//协同门诊量
|
|
|
// Integer coordinationCout = outpatientDao.countByDoctorAndStatusAndOutpatientType(doctor,"2","2");
|
|
|
// rs.put("coordinationCout",coordinationCout);
|
|
|
Integer coordinationCout = outpatientDao.countByDoctorAndStatusAndOutpatientType(doctor,"2","2");
|
|
|
rs.put("coordinationCout",coordinationCout);
|
|
|
|
|
|
|
|
|
// if(StringUtils.isNotBlank(withWork)&&"1".equals(withWork)){
|
|
|
// List<WlyyDoctorWorkTimeVO> times = findDoctorWorkTime(doctor);
|
|
|
// rs.put("workTime",times);
|
|
|
// }
|
|
|
|
|
|
//专家咨询
|
|
|
String zjCountsql = "SELECT id FROM wlyy_consult_team WHERE doctor='"+doctor+"' AND (type=1 OR type=15)";
|
|
@ -3453,7 +3531,7 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
|
|
|
List<Map<String,Object>> doctors = jdbcTemplate.queryForList(sql);
|
|
|
List<WlyyDoctorWorkTimeDO> workTimeDOs =makeDoctorWorkTimeDOList(doctors,wlyyDoctorWorkTimeDOs);
|
|
|
saveDoctorWorkTime(workTimeDOs,date,doctors);
|
|
|
//科室
|
|
|
//科室
|
|
|
}else if("2".equals(type)){
|
|
|
|
|
|
String sql ="SELECT " +
|