public with sharing class calendarUtil {
	//日期中间取日历Map
	public static Map<string,OlympusCalendar__c> getCalendarMap(Date beginDate,Date endDate){
		Map<string,OlympusCalendar__c> calendarMap = new Map<string,OlympusCalendar__c>();
		List<OlympusCalendar__c> calendarList = [select id,Date__c,IsWorkDay__c from OlympusCalendar__c where Date__c >= :beginDate and Date__c <= :endDate];
		for(OlympusCalendar__c cal : calendarList){
			Date datetemp = cal.Date__c;
			calendarMap.put(datetemp.format(),cal);
		}
		return calendarMap;
	}
	//获取两个日期间的工资日
	public static Integer getNumfromCalendarMap (Map<string,OlympusCalendar__c> calendarMap,Date beginDate,Date endDate){
		Integer num = 0;
		List<OlympusCalendar__c> calendarList = new List<OlympusCalendar__c>();
		Set<String> keys = calendarMap.keySet();
		for(String key : keys){
			Date keyDate = Date.valueOf(key.replace('/', '-'));
			if(beginDate<=keyDate && keyDate <= endDate){
				calendarList.add(calendarMap.get(key));
			}
		}
		for(OlympusCalendar__c oly : calendarList){
			if(oly.IsWorkDay__c == 1){
				system.debug(oly.Date__c+'   '+oly.IsWorkDay__c);
				num++;
			}
		}

		return num;
	}
	//获取日期num个工作日之后\之前的日期
	public static Date getCorrespondingDate(Map<String,OlympusCalendar__c> calendarMap,Date beginDate,Integer num){
		Integer count = 0;
		Date temp ;
		if(num > 0){
			for(Integer i = 1;;i++){
				temp = beginDate.addDays(i);
				String str = temp.format();
				OlympusCalendar__c oly = calendarMap.get(str);
				if(oly.IsWorkDay__c == 1){
					count++;
				}
				if(num == count){
					break;
				}
			}
		}else{
			for(Integer i = -1;;i--){
				temp = beginDate.addDays(i);
				String str = temp.format();
				OlympusCalendar__c oly = calendarMap.get(str);
				if(oly.IsWorkDay__c == 1){
					count--;
				}
				if(num == count){
					break;
				}
			}
		}
		return temp;
	}


	//获取两个日期间的工资日
	public static string getWorkDayNum (String beginStr,String endStr){

		Date beginDate = Date.valueOf(beginStr);
		Date endDate = Date.valueOf(endStr); 

		Map<String,OlympusCalendar__c> olmap = calendarUtil.getCalendarMap(beginDate.addDays(-1),endDate.addDays(1));

		Integer count = calendarUtil.getNumfromCalendarMap(olmap,beginDate,endDate);

		return String.valueOf(count);

	}
	//public static string getWorkDayNum (String beginStr,String endStr){

	//	Date beginDate = Date.valueOf(beginStr.replace('/', '-'));
	//	Date endDate = Date.valueOf(endStr.replace('/', '-')); 

	//	Map<String,OlympusCalendar__c> olmap = calendarUtil.getCalendarMap(beginDate.addDays(-1),endDate.addDays(1));

	//	Integer count = calendarUtil.getNumfromCalendarMap(olmap,beginDate,endDate);

	//	return String.valueOf(count);

	//}

	//获取days个工作日之前或之后的日期
	public static String getWorkDay(String beginStr,String days){

		Date beginDate = Date.valueOf(beginStr.replace('/', '-'));
		Integer num = Integer.valueOf(days);
		Map<String,OlympusCalendar__c> olmap = new Map<String,OlympusCalendar__c>();
		if(num<0){
			olmap = calendarUtil.getCalendarMap(beginDate.addDays(num-20),beginDate.addDays(1));
		}else{
			olmap = calendarUtil.getCalendarMap(beginDate.addDays(-1),beginDate.addDays(num+20));
		}

		Date newDate = calendarUtil.getCorrespondingDate(olmap,beginDate,num);

		return String.valueOf(newDate);
	}


}