|  | @ -34,6 +34,7 @@ import com.yihu.jw.patient.dao.BasePatientDao;
 | 
	
		
			
				|  |  | import com.yihu.jw.patient.dao.BasePatientMedicareCardDao;
 | 
	
		
			
				|  |  | import com.yihu.jw.restmodel.base.dict.DictHospitalDeptVO;
 | 
	
		
			
				|  |  | import com.yihu.jw.restmodel.base.org.BaseOrgVO;
 | 
	
		
			
				|  |  | import com.yihu.jw.restmodel.hospital.consult.WlyyHospitalSysDictVO;
 | 
	
		
			
				|  |  | import com.yihu.jw.restmodel.hospital.doctor.WlyyDoctorWorkTimeVO;
 | 
	
		
			
				|  |  | import com.yihu.jw.restmodel.hospital.prescription.*;
 | 
	
		
			
				|  |  | import com.yihu.jw.restmodel.web.MixEnvelop;
 | 
	
	
		
			
				|  | @ -547,7 +548,6 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
 | 
	
		
			
				|  |  |         waitingRoom.setHospital(outpatientDO.getHospital());
 | 
	
		
			
				|  |  |         waitingRoom.setHospitalName(outpatientDO.getHospitalName());
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         waitingRoom.setConsultType(1);
 | 
	
		
			
				|  |  |         waitingRoom.setPatientId(outpatientDO.getPatient());
 | 
	
		
			
				|  |  |         waitingRoom.setPatientName(outpatientDO.getPatientName());
 | 
	
		
			
				|  |  |         waitingRoom.setReservationTime(reservationTime);
 | 
	
	
		
			
				|  | @ -701,7 +701,7 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 获取医生列表
 | 
	
		
			
				|  |  |      * 获取医生列表带排班
 | 
	
		
			
				|  |  |      * @param orgCode
 | 
	
		
			
				|  |  |      * @param dept
 | 
	
		
			
				|  |  |      * @return
 | 
	
	
		
			
				|  | @ -734,7 +734,9 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
 | 
	
		
			
				|  |  |                 " d.introduce," +
 | 
	
		
			
				|  |  |                 " d.job_title_code AS jobTitleCode, " +
 | 
	
		
			
				|  |  |                 " d.job_title_name AS jobTitleName," +
 | 
	
		
			
				|  |  |                 " d.charge_type AS chargeType" +
 | 
	
		
			
				|  |  |                 " d.charge_type AS chargeType," +
 | 
	
		
			
				|  |  |                 " h.dept_code AS deptCode," +
 | 
	
		
			
				|  |  |                 " h.dept_Name AS deptName" +
 | 
	
		
			
				|  |  |                 " FROM " +
 | 
	
		
			
				|  |  |                 " base_doctor d " +
 | 
	
		
			
				|  |  |                 " JOIN base_doctor_hospital h ON h.doctor_code = d.id " +
 | 
	
	
		
			
				|  | @ -766,6 +768,77 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
 | 
	
		
			
				|  |  |         return MixEnvelop.getSuccessListWithPage(BaseHospitalRequestMapping.Prescription.api_success, list, page, size, count);
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 查询医生列表带月份排班状态
 | 
	
		
			
				|  |  |      * @param orgCode
 | 
	
		
			
				|  |  |      * @param dept
 | 
	
		
			
				|  |  |      * @param chargeType
 | 
	
		
			
				|  |  |      * @param date
 | 
	
		
			
				|  |  |      * @param page
 | 
	
		
			
				|  |  |      * @param size
 | 
	
		
			
				|  |  |      * @return
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     public MixEnvelop findDoctorWithMouthWork(String orgCode,String dept,String chargeType,String date,Integer page,Integer size){
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         String totalSql ="SELECT " +
 | 
	
		
			
				|  |  |                 " count(1) AS total " +
 | 
	
		
			
				|  |  |                 " FROM " +
 | 
	
		
			
				|  |  |                 " base_doctor d " +
 | 
	
		
			
				|  |  |                 " JOIN base_doctor_hospital h ON h.doctor_code = d.id " +
 | 
	
		
			
				|  |  |                 " WHERE  " +
 | 
	
		
			
				|  |  |                 " h.org_code = '"+orgCode+"'";
 | 
	
		
			
				|  |  |         if(StringUtils.isNotBlank(chargeType)){
 | 
	
		
			
				|  |  |             totalSql+=" AND d.charge_type ='"+chargeType+"'";
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         if(StringUtils.isNotBlank(dept)){
 | 
	
		
			
				|  |  |             totalSql+= " AND h.dept_code = '"+dept+"' " ;
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         List<Map<String, Object>> rstotal = jdbcTemplate.queryForList(totalSql);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         Long count = 0L;
 | 
	
		
			
				|  |  |         if (rstotal != null && rstotal.size() > 0) {
 | 
	
		
			
				|  |  |             count = (Long) rstotal.get(0).get("total");
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         String sql ="SELECT " +
 | 
	
		
			
				|  |  |                 " d.id, " +
 | 
	
		
			
				|  |  |                 " d.photo, " +
 | 
	
		
			
				|  |  |                 " d.`name`, " +
 | 
	
		
			
				|  |  |                 " d.expertise," +
 | 
	
		
			
				|  |  |                 " d.introduce," +
 | 
	
		
			
				|  |  |                 " d.job_title_code AS jobTitleCode, " +
 | 
	
		
			
				|  |  |                 " d.job_title_name AS jobTitleName," +
 | 
	
		
			
				|  |  |                 " d.charge_type AS chargeType," +
 | 
	
		
			
				|  |  |                 " h.dept_code AS deptCode," +
 | 
	
		
			
				|  |  |                 " h.dept_Name AS deptName" +
 | 
	
		
			
				|  |  |                 " FROM " +
 | 
	
		
			
				|  |  |                 " base_doctor d " +
 | 
	
		
			
				|  |  |                 " JOIN base_doctor_hospital h ON h.doctor_code = d.id " +
 | 
	
		
			
				|  |  |                 " WHERE  " +
 | 
	
		
			
				|  |  |                 " h.org_code = '"+orgCode+"'";
 | 
	
		
			
				|  |  |         if(StringUtils.isNotBlank(chargeType)){
 | 
	
		
			
				|  |  |             sql+=" AND d.charge_type ='"+chargeType+"'";
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         if(StringUtils.isNotBlank(dept)){
 | 
	
		
			
				|  |  |             sql+= " AND h.dept_code = '"+dept+"' " ;
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         sql += " LIMIT " + (page - 1) * size + "," + size + "";
 | 
	
		
			
				|  |  |         List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);
 | 
	
		
			
				|  |  |         if(list!=null&&list.size()>0){
 | 
	
		
			
				|  |  |             //获取排班
 | 
	
		
			
				|  |  |             for(Map<String,Object> doctor :list){
 | 
	
		
			
				|  |  |                 String id = (String)doctor.get("id");
 | 
	
		
			
				|  |  |                 List<WlyyDoctorWorkTimeDO> workTimeDOs = doctorWorkTimeDao.findDoctorWorkTimeByMonth(id,"%"+date+"%");
 | 
	
		
			
				|  |  |                 if(workTimeDOs!=null&&workTimeDOs.size()>0){
 | 
	
		
			
				|  |  |                     doctor.put("isScheduling",true);
 | 
	
		
			
				|  |  |                 }else{
 | 
	
		
			
				|  |  |                     doctor.put("isScheduling",false);
 | 
	
		
			
				|  |  |                 }
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         return MixEnvelop.getSuccessListWithPage(BaseHospitalRequestMapping.Prescription.api_success, list, page, size, count);
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 挂号
 | 
	
		
			
				|  |  |      * @return
 | 
	
	
		
			
				|  | @ -1753,4 +1826,165 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
 | 
	
		
			
				|  |  |         return  list;
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 查询排班规则
 | 
	
		
			
				|  |  |      * @return
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     public List<WlyyHospitalSysDictVO> findWorkRule(String dictName,String hospital){
 | 
	
		
			
				|  |  |         List<WlyyHospitalSysDictDO> list = sysDictDao.findByHospitalAndDictName(hospital,dictName);
 | 
	
		
			
				|  |  |         List<WlyyHospitalSysDictVO> vos = new ArrayList<>();
 | 
	
		
			
				|  |  |         return convertToModels(list,vos,WlyyHospitalSysDictVO.class);
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 保存排班规则
 | 
	
		
			
				|  |  |      * @param workRoleJsons
 | 
	
		
			
				|  |  |      * @return
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     public Boolean updateWorkRule(String workRoleJsons){
 | 
	
		
			
				|  |  |         List<WlyyHospitalSysDictDO> sysDicts = (List<WlyyHospitalSysDictDO>) com.alibaba.fastjson.JSONArray.parseArray(workRoleJsons, WlyyHospitalSysDictDO.class);
 | 
	
		
			
				|  |  |         List<WlyyHospitalSysDictDO> list = sysDictDao.findByHospitalAndDictName(sysDicts.get(0).getHospital(),sysDicts.get(0).getDictName());
 | 
	
		
			
				|  |  |         sysDictDao.delete(list);
 | 
	
		
			
				|  |  |         sysDictDao.save(sysDicts);
 | 
	
		
			
				|  |  |         return true;
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * @param type
 | 
	
		
			
				|  |  |      * @param codes
 | 
	
		
			
				|  |  |      * @param workTimeJson
 | 
	
		
			
				|  |  |      * @return
 | 
	
		
			
				|  |  |      * @throws Exception
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     public Boolean saveDoctorWorkTimeJson(String type,String codes,String workTimeJson)throws Exception{
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         List<WlyyDoctorWorkTimeDO> wlyyDoctorWorkTimeDOs = (List<WlyyDoctorWorkTimeDO>) com.alibaba.fastjson.JSONArray.parseArray(workTimeJson, WlyyDoctorWorkTimeDO.class);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         //全院医生
 | 
	
		
			
				|  |  |         if("1".equals(type)){
 | 
	
		
			
				|  |  |             String sql ="SELECT " +
 | 
	
		
			
				|  |  |                     " DISTINCT " +
 | 
	
		
			
				|  |  |                     " d.id, " +
 | 
	
		
			
				|  |  |                     " d.`name`, " +
 | 
	
		
			
				|  |  |                     " h.org_code, " +
 | 
	
		
			
				|  |  |                     " h.org_name, " +
 | 
	
		
			
				|  |  |                     " h.dept_code, " +
 | 
	
		
			
				|  |  |                     " h.dept_name " +
 | 
	
		
			
				|  |  |                     " FROM " +
 | 
	
		
			
				|  |  |                     " base_doctor d " +
 | 
	
		
			
				|  |  |                     " JOIN base_doctor_hospital h ON d.id= h.doctor_code " +
 | 
	
		
			
				|  |  |                     " WHERE  " +
 | 
	
		
			
				|  |  |                     " h.org_code ='"+codes+"'";
 | 
	
		
			
				|  |  |             List<Map<String,Object>> doctors = jdbcTemplate.queryForList(sql);
 | 
	
		
			
				|  |  |             List<WlyyDoctorWorkTimeDO> workTimeDOs =makeDoctorWorkTimeDOList(doctors,wlyyDoctorWorkTimeDOs);
 | 
	
		
			
				|  |  |             saveDoctorWorkTime(workTimeDOs);
 | 
	
		
			
				|  |  |             //科室
 | 
	
		
			
				|  |  |         }else if("2".equals(type)){
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             String sql ="SELECT " +
 | 
	
		
			
				|  |  |                     " DISTINCT " +
 | 
	
		
			
				|  |  |                     " d.id, " +
 | 
	
		
			
				|  |  |                     " d.`name`, " +
 | 
	
		
			
				|  |  |                     " h.org_code, " +
 | 
	
		
			
				|  |  |                     " h.org_name, " +
 | 
	
		
			
				|  |  |                     " h.dept_code, " +
 | 
	
		
			
				|  |  |                     " h.dept_name " +
 | 
	
		
			
				|  |  |                     " FROM " +
 | 
	
		
			
				|  |  |                     " base_doctor d " +
 | 
	
		
			
				|  |  |                     " JOIN base_doctor_hospital h ON d.id= h.doctor_code " +
 | 
	
		
			
				|  |  |                     " WHERE  " +
 | 
	
		
			
				|  |  |                     " h.dept_code in ("+sqlCode(codes)+")";
 | 
	
		
			
				|  |  |             List<Map<String,Object>> doctors = jdbcTemplate.queryForList(sql);
 | 
	
		
			
				|  |  |             List<WlyyDoctorWorkTimeDO> workTimeDOs =makeDoctorWorkTimeDOList(doctors,wlyyDoctorWorkTimeDOs);
 | 
	
		
			
				|  |  |             saveDoctorWorkTime(workTimeDOs);
 | 
	
		
			
				|  |  |             //医生批量
 | 
	
		
			
				|  |  |         }else if("3".equals(type)){
 | 
	
		
			
				|  |  |             String sql ="SELECT " +
 | 
	
		
			
				|  |  |                     " DISTINCT " +
 | 
	
		
			
				|  |  |                     " d.id, " +
 | 
	
		
			
				|  |  |                     " d.`name`, " +
 | 
	
		
			
				|  |  |                     " h.org_code, " +
 | 
	
		
			
				|  |  |                     " h.org_name, " +
 | 
	
		
			
				|  |  |                     " h.dept_code, " +
 | 
	
		
			
				|  |  |                     " h.dept_name " +
 | 
	
		
			
				|  |  |                     " FROM " +
 | 
	
		
			
				|  |  |                     " base_doctor d " +
 | 
	
		
			
				|  |  |                     " JOIN base_doctor_hospital h ON d.id= h.doctor_code " +
 | 
	
		
			
				|  |  |                     " WHERE  " +
 | 
	
		
			
				|  |  |                     " d.id in ("+sqlCode(codes)+")";
 | 
	
		
			
				|  |  |             List<Map<String,Object>> doctors = jdbcTemplate.queryForList(sql);
 | 
	
		
			
				|  |  |             List<WlyyDoctorWorkTimeDO> workTimeDOs =makeDoctorWorkTimeDOList(doctors,wlyyDoctorWorkTimeDOs);
 | 
	
		
			
				|  |  |             saveDoctorWorkTime(workTimeDOs);
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         return true;
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     public String sqlCode(String codes){
 | 
	
		
			
				|  |  |         String code[] = codes.split(",");
 | 
	
		
			
				|  |  |         String rs = "";
 | 
	
		
			
				|  |  |         for(String c:code){
 | 
	
		
			
				|  |  |             rs+="'"+c+"',";
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         rs = rs.substring(0,rs.length()-1);
 | 
	
		
			
				|  |  |         return rs;
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     public List<WlyyDoctorWorkTimeDO> makeDoctorWorkTimeDOList(List<Map<String,Object>> doctors,List<WlyyDoctorWorkTimeDO> wlyyDoctorWorkTimeDOs){
 | 
	
		
			
				|  |  |         List<WlyyDoctorWorkTimeDO> rs = new ArrayList<>();
 | 
	
		
			
				|  |  |         if(doctors!=null&&doctors.size()>0){
 | 
	
		
			
				|  |  |             //构建医生排班
 | 
	
		
			
				|  |  |             for(Map<String,Object> doctor:doctors){
 | 
	
		
			
				|  |  |                 for(WlyyDoctorWorkTimeDO time:wlyyDoctorWorkTimeDOs){
 | 
	
		
			
				|  |  |                     time.setDoctor((String)doctor.get("id"));
 | 
	
		
			
				|  |  |                     time.setDoctorName((String)doctor.get("name"));
 | 
	
		
			
				|  |  |                     time.setDept((String)doctor.get("dept_code"));
 | 
	
		
			
				|  |  |                     time.setDeptName((String)doctor.get("dept_name"));
 | 
	
		
			
				|  |  |                     time.setHospital((String)doctor.get("org_code"));
 | 
	
		
			
				|  |  |                     time.setHospitalName((String)doctor.get("org_name"));
 | 
	
		
			
				|  |  |                     time.setCreateTime(new Date());
 | 
	
		
			
				|  |  |                     rs.add(time);
 | 
	
		
			
				|  |  |                 }
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         return rs;
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 批量更新医生多月份排班数据
 | 
	
		
			
				|  |  |      * @param workTimeDOs
 | 
	
		
			
				|  |  |      * @return
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     public Boolean saveDoctorWorkTime(List<WlyyDoctorWorkTimeDO> workTimeDOs){
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         if(workTimeDOs!=null&&workTimeDOs.size()>0){
 | 
	
		
			
				|  |  |             //按月按医生分组标记排班数据
 | 
	
		
			
				|  |  |             List<String> workMonths = new ArrayList<>();
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             for(WlyyDoctorWorkTimeDO time : workTimeDOs){
 | 
	
		
			
				|  |  |                 //医生工作月份
 | 
	
		
			
				|  |  |                 String workMonth = time.getDoctor()+","+time.getDate().substring(0,6);
 | 
	
		
			
				|  |  |                 //判断是否是首次插入医生月份数据,如果是首次,则删除该医生当前月份排班数据数据
 | 
	
		
			
				|  |  |                 if(!workMonths.contains(workMonth)){
 | 
	
		
			
				|  |  |                     workMonths.add(workMonth);
 | 
	
		
			
				|  |  |                     List<WlyyDoctorWorkTimeDO> oldTimes = doctorWorkTimeDao.findDoctorWorkTimeByMonth(time.getDoctor(),"%"+time.getDate().substring(0,6)+"%");
 | 
	
		
			
				|  |  |                     doctorWorkTimeDao.delete(oldTimes);
 | 
	
		
			
				|  |  |                 }
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |             doctorWorkTimeDao.save(workTimeDOs);
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         return true;
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 查询某个医生某个月份排班记录
 | 
	
		
			
				|  |  |      * @param doctor
 | 
	
		
			
				|  |  |      * @param date
 | 
	
		
			
				|  |  |      * @return
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     public List<WlyyDoctorWorkTimeVO> findDoctorWorkTimeByMonth(String doctor,String date){
 | 
	
		
			
				|  |  |         List<WlyyDoctorWorkTimeDO> times = doctorWorkTimeDao.findDoctorWorkTimeByMonth(doctor,"%"+date+"%");
 | 
	
		
			
				|  |  |         List<WlyyDoctorWorkTimeVO> timeVOs = new ArrayList<>();
 | 
	
		
			
				|  |  |         return convertToModels(times,timeVOs,WlyyDoctorWorkTimeVO.class);
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | }
 |