|  | @ -21,10 +21,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 | 
	
		
			
				|  |  | import org.springframework.stereotype.Service;
 | 
	
		
			
				|  |  | import org.springframework.transaction.annotation.Transactional;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | import java.util.ArrayList;
 | 
	
		
			
				|  |  | import java.util.Date;
 | 
	
		
			
				|  |  | import java.util.List;
 | 
	
		
			
				|  |  | import java.util.Map;
 | 
	
		
			
				|  |  | import java.util.*;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | /**
 | 
	
		
			
				|  |  |  * Created by Trick on 2020/3/24.
 | 
	
	
		
			
				|  | @ -111,12 +108,14 @@ public class WorkTimeService {
 | 
	
		
			
				|  |  |         return false;
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     public String saveWorkInfo(List<DoctorWorkTimeMainExcelDO> list,String date,String hospital){
 | 
	
		
			
				|  |  |         Map<String,Object> rs = new HashedMap();
 | 
	
		
			
				|  |  |     public Map<String,Object> getExcelWorkInfo(List<DoctorWorkTimeMainExcelDO> list,String date,String hospital){
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         Map<String,Object> rs = new HashedMap();
 | 
	
		
			
				|  |  |         List<DoctorWorkTimeMainExcelDO> error =new ArrayList<>();
 | 
	
		
			
				|  |  |         List<DoctorWorkTimeMainExcelDO> succ = new ArrayList<>();
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         List<WlyyDoctorWorkTimeDO> succ = new ArrayList<>();
 | 
	
		
			
				|  |  |         Integer total = 0;
 | 
	
		
			
				|  |  |         Integer errorTotal = 0;
 | 
	
		
			
				|  |  |         Integer succTotal =0;
 | 
	
		
			
				|  |  |         if(list!=null&&list.size()>0){
 | 
	
		
			
				|  |  |             for(DoctorWorkTimeMainExcelDO excelDO:list){
 | 
	
		
			
				|  |  |                 List<BaseDoctorDO> doctorDOs = baseDoctorDao.findByIdcard(excelDO.getIdCard());
 | 
	
	
		
			
				|  | @ -133,62 +132,166 @@ public class WorkTimeService {
 | 
	
		
			
				|  |  |                 //判断是否为本月
 | 
	
		
			
				|  |  |                 String dm = DateUtil.dateToStr(new Date(),"yyyy-MM");
 | 
	
		
			
				|  |  |                 if(dm.equals(date)){
 | 
	
		
			
				|  |  |                     //本月
 | 
	
		
			
				|  |  |                     Calendar calendar = Calendar.getInstance();
 | 
	
		
			
				|  |  |                     Date today = new Date();
 | 
	
		
			
				|  |  |                     calendar.setTime(today);
 | 
	
		
			
				|  |  |                     // 获取一月中第几天
 | 
	
		
			
				|  |  |                     int monthDay = calendar.get(Calendar.DAY_OF_MONTH);
 | 
	
		
			
				|  |  |                     //获取该月份一共几天
 | 
	
		
			
				|  |  |                     int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
 | 
	
		
			
				|  |  |                     calendar.add(1,Calendar.DATE);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |                     //更新时间范围
 | 
	
		
			
				|  |  |                     //开始时间
 | 
	
		
			
				|  |  |                     String st = DateUtil.dateToStr(calendar.getTime(),"yyyy-MM-dd");
 | 
	
		
			
				|  |  |                     Date startDate = DateUtil.strToDate(st+" 00:00:00");
 | 
	
		
			
				|  |  |                     //结束时间
 | 
	
		
			
				|  |  |                     String et = date+":"+maxDay+" 23:59:59";
 | 
	
		
			
				|  |  |                     Date endDate = DateUtil.strToDate(et);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |                     //删除明天开始的排班记录
 | 
	
		
			
				|  |  |                     List<WlyyDoctorWorkTimeDO> timeDOs = doctorWorkTimeDao.findDoctorWorkTimeByTime(doctorDO.getId(),startDate,endDate);
 | 
	
		
			
				|  |  |                     if(timeDOs!=null&&timeDOs.size()>0){
 | 
	
		
			
				|  |  |                         doctorWorkTimeDao.delete(timeDOs);
 | 
	
		
			
				|  |  |                     }
 | 
	
		
			
				|  |  |                     //解析具体排班
 | 
	
		
			
				|  |  |                     List<DoctorWorkTimeExcelDO> worktimes = excelDO.getWorkTime();
 | 
	
		
			
				|  |  |                     if(worktimes!=null&&worktimes.size()>0){
 | 
	
		
			
				|  |  |                         for(DoctorWorkTimeExcelDO worktime:worktimes){
 | 
	
		
			
				|  |  |                             //要排班的日期
 | 
	
		
			
				|  |  |                             String day = worktime.getDateOfMonth();
 | 
	
		
			
				|  |  |                             Integer dfm = Integer.parseInt(day);
 | 
	
		
			
				|  |  |                             //排班从明天开始
 | 
	
		
			
				|  |  |                             if(dfm >= (monthDay+1)){
 | 
	
		
			
				|  |  |                                 WlyyDoctorWorkTimeDO workTimeDO = getWorkTimeDO(date,worktime,ruleDO,orgDO,doctorDO);
 | 
	
		
			
				|  |  |                                 succ.add(workTimeDO);
 | 
	
		
			
				|  |  |                             }
 | 
	
		
			
				|  |  |                         }
 | 
	
		
			
				|  |  |                     }
 | 
	
		
			
				|  |  |                 }else{
 | 
	
		
			
				|  |  |                     //判断日期是否大于本月
 | 
	
		
			
				|  |  |                     Date now = DateUtil.strToDate(dm,"yyyy-MM");
 | 
	
		
			
				|  |  |                     Date work = DateUtil.strToDate(date,"yyyy-MM");
 | 
	
		
			
				|  |  |                     if(now.before(work)){
 | 
	
		
			
				|  |  |                         //
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |                         //导入的月份大于当前月份,删除导入月份所有历史排班记录
 | 
	
		
			
				|  |  |                         List<WlyyDoctorWorkTimeDO> timeDOs = doctorWorkTimeDao.findDoctorWorkTimeByMonth(doctorDO.getId(),"%"+date+"%");
 | 
	
		
			
				|  |  |                         if(timeDOs!=null&&timeDOs.size()>0){
 | 
	
		
			
				|  |  |                             doctorWorkTimeDao.delete(timeDOs);
 | 
	
		
			
				|  |  |                         }
 | 
	
		
			
				|  |  |                         //解析具体排班
 | 
	
		
			
				|  |  |                         List<DoctorWorkTimeExcelDO> worktimes = excelDO.getWorkTime();
 | 
	
		
			
				|  |  |                         if(worktimes!=null&&worktimes.size()>0){
 | 
	
		
			
				|  |  |                             for(DoctorWorkTimeExcelDO worktime:worktimes){
 | 
	
		
			
				|  |  |                                 WlyyDoctorWorkTimeDO workTimeDO = new WlyyDoctorWorkTimeDO();
 | 
	
		
			
				|  |  |                                 workTimeDO.setDoctor(doctorDO.getId());
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |                                 //上午
 | 
	
		
			
				|  |  |                                 if("1".equals(worktime.getType())){
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |                                 }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | //                                workTimeDO.setSourceNumber(ruleDO.);
 | 
	
		
			
				|  |  |                                 WlyyDoctorWorkTimeDO workTimeDO = getWorkTimeDO(date,worktime,ruleDO,orgDO,doctorDO);
 | 
	
		
			
				|  |  |                                 succ.add(workTimeDO);
 | 
	
		
			
				|  |  |                             }
 | 
	
		
			
				|  |  |                         }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |                     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |                 }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |             total = list.size();
 | 
	
		
			
				|  |  |             if(error!=null&&error.size()>0){
 | 
	
		
			
				|  |  |                 errorTotal = error.size();
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |             succTotal = total-errorTotal;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             if(succ!=null&&succ.size()>0){
 | 
	
		
			
				|  |  |                 //保存排班
 | 
	
		
			
				|  |  |                 doctorWorkTimeDao.save(succ);
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         return null;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         rs.put("error",error);
 | 
	
		
			
				|  |  |         rs.put("succ",succ);
 | 
	
		
			
				|  |  |         rs.put("total",total);
 | 
	
		
			
				|  |  |         rs.put("errorTotal",errorTotal);
 | 
	
		
			
				|  |  |         rs.put("succTotal",succTotal);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         return rs;
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     public WlyyDoctorWorkTimeDO getWorkTimeDO(String date,DoctorWorkTimeExcelDO worktime,WlyyHospitalWorkRuleDO ruleDO,BaseOrgDO orgDO,BaseDoctorDO doctorDO){
 | 
	
		
			
				|  |  |         WlyyDoctorWorkTimeDO workTimeDO = new WlyyDoctorWorkTimeDO();
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         workTimeDO.setDoctor(doctorDO.getId());
 | 
	
		
			
				|  |  |         workTimeDO.setDoctorName(doctorDO.getName());
 | 
	
		
			
				|  |  |         workTimeDO.setHospital(orgDO.getCode());
 | 
	
		
			
				|  |  |         workTimeDO.setHospitalName(orgDO.getName());
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         String day = worktime.getDateOfMonth();
 | 
	
		
			
				|  |  |         if(day.length()<2){
 | 
	
		
			
				|  |  |             day ="0"+day;
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         String workDate = date+"-"+day;
 | 
	
		
			
				|  |  |         logger.info("workDate:"+workDate);
 | 
	
		
			
				|  |  |         workTimeDO.setDate(workDate);
 | 
	
		
			
				|  |  |         workTimeDO.setCreateTime(new Date());
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         //上午
 | 
	
		
			
				|  |  |         if("1".equals(worktime.getType())){
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             workTimeDO.setTimeType("1");
 | 
	
		
			
				|  |  |             workTimeDO.setType("1");
 | 
	
		
			
				|  |  |             workTimeDO.setSourceNumber(ruleDO.getSwSourceNum());
 | 
	
		
			
				|  |  |             workTimeDO.setStartTime(DateUtil.strToDate(workDate+" "+ruleDO.getSwStartTime()+":00"));
 | 
	
		
			
				|  |  |             workTimeDO.setEndTime(DateUtil.strToDate(workDate+" "+ruleDO.getSwEndTime()+" :00"));
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         }else if("2".equals(worktime.getType())){
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             workTimeDO.setTimeType("2");
 | 
	
		
			
				|  |  |             workTimeDO.setType("1");
 | 
	
		
			
				|  |  |             workTimeDO.setSourceNumber(ruleDO.getXwSourceNum());
 | 
	
		
			
				|  |  |             workTimeDO.setStartTime(DateUtil.strToDate(workDate+" "+ruleDO.getXwStartTime()+":00"));
 | 
	
		
			
				|  |  |             workTimeDO.setEndTime(DateUtil.strToDate(workDate+" "+ruleDO.getXwEndTime()+" :00"));
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         }else if("3".equals(worktime.getType())){
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             workTimeDO.setTimeType("3");
 | 
	
		
			
				|  |  |             workTimeDO.setType("1");
 | 
	
		
			
				|  |  |             workTimeDO.setSourceNumber(ruleDO.getWsSourceNum());
 | 
	
		
			
				|  |  |             workTimeDO.setStartTime(DateUtil.strToDate(workDate+" "+ruleDO.getWsStartTime()+":00"));
 | 
	
		
			
				|  |  |             workTimeDO.setEndTime(DateUtil.strToDate(workDate+" "+ruleDO.getWsEndTime()+":00"));
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         return workTimeDO;
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | //    public String saveDoctorWorkTime(List<WlyyDoctorWorkTimeDO> workTimeDOs){
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //    }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     public static void main(String ag[]){
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | //        Date start = DateUtil.stringToDate("2020-03-24 08:00:00","yyyy-MM-dd HH:mm:ss");
 | 
	
		
			
				|  |  | //    public static void main(String ag[]){
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //        Date end = DateUtil.stringToDate("2020-03-24 12:00:00","yyyy-MM-dd HH:mm:ss");
 | 
	
		
			
				|  |  | ////        Date start = DateUtil.stringToDate("2020-03-24 08:00:00","yyyy-MM-dd HH:mm:ss");
 | 
	
		
			
				|  |  | ////
 | 
	
		
			
				|  |  | ////        Date end = DateUtil.stringToDate("2020-03-24 12:00:00","yyyy-MM-dd HH:mm:ss");
 | 
	
		
			
				|  |  | ////
 | 
	
		
			
				|  |  | ////        Long total =end.getTime()-start.getTime();
 | 
	
		
			
				|  |  | ////
 | 
	
		
			
				|  |  | ////        Long jg = total/100;
 | 
	
		
			
				|  |  | ////
 | 
	
		
			
				|  |  | ////        start.setTime(start.getTime()+jg);
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //        Long total =end.getTime()-start.getTime();
 | 
	
		
			
				|  |  | ////        Date now = DateUtil.strToDate("2020-04","yyyy-MM");
 | 
	
		
			
				|  |  | ////        Date work = DateUtil.strToDate("2020-04","yyyy-MM");
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //        Long jg = total/100;
 | 
	
		
			
				|  |  | //        Calendar calendar = Calendar.getInstance();
 | 
	
		
			
				|  |  | //        Date today = new Date();
 | 
	
		
			
				|  |  | //        calendar.setTime(today);// 此处可换为具体某一时间
 | 
	
		
			
				|  |  | //        int monthDay = calendar.get(Calendar.DAY_OF_MONTH);
 | 
	
		
			
				|  |  | //        int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
 | 
	
		
			
				|  |  | //
 | 
	
		
			
				|  |  | //        start.setTime(start.getTime()+jg);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         Date now = DateUtil.strToDate("2020-04","yyyy-MM");
 | 
	
		
			
				|  |  |         Date work = DateUtil.strToDate("2020-04","yyyy-MM");
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         System.out.println(now.before(work));
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | //        System.out.println(monthDay);
 | 
	
		
			
				|  |  | //    }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | }
 |