小白一枚。欢迎讨论
一、首先:创建数据库,结构如下
解释:flag字段:0表示所有假日,1表示串休,所有falg=1的start_time都是周六或者周日
二、实体类
三、mapper
@Mapper
public interface DueDateMapper {
List<Duedate> getDueDateList();
List<Duedate> getList();
}
四、.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="net.aexit.construct.acceptance.websky.sysmgr.duedate.mapper.DueDateMapper">
<select id="getDueDateList" resultType="net.aexit.construct.acceptance.websky.sysmgr.duedate.model.Duedate">
SELECT a.start_time,a.flag FROM act_hi_duedate a
</select>
<select id="getList" resultType="net.aexit.construct.acceptance.websky.sysmgr.duedate.model.Duedate">
SELECT a.start_time,a.flag FROM act_hi_duedate a where a.flag='1'
</select>
</mapper>
五、service
@Service
public class DueDateService {
@Resource
private DueDateMapper dueDateMapper;
public List<Duedate> getDueDateList(){
return dueDateMapper.getDueDateList();
}
public List<Duedate> getList(){
return dueDateMapper.getList();
}
}
六、util
package net.aexit.construct.acceptance.websky.sysmgr.duedate.util;
import net.aexit.construct.acceptance.websky.sysmgr.duedate.model.Duedate;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
public class HolidayUtils {
private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
/**
* 获取计划激活日期
* @param today opening date
* @param list 假期
* @param listbyflag 串休
* @param holidayList 工作日
* @param num num个工作日后
* @return
* @throws
*/
public static List getScheduleActiveDate(Date today, List<Duedate> list,List<Duedate> listbyflag, int num) throws ParseException {
List<String> holidayList = new ArrayList();
Date tomorrow = null;
int delay = 1;
while(delay <= num){
tomorrow = getTomorrow(today);
//当前日期+1,判断是否是节假日,不是的同时要判断是否是周末,都不是则scheduleActiveDate日期+1
if((!isWeekend(sdf.format(tomorrow)) && !isHoliday(sdf.format(tomorrow),list)) || (isrest(sdf.format(tomorrow),listbyflag)) ){
delay++;
holidayList.add(sdf.format(tomorrow));
}
today = tomorrow;
}
return holidayList;
}
/**
* 获取tomorrow的日期
*
* @param date
* @return
*/
public static Date getTomorrow(Date date){
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.DAY_OF_MONTH, +1);
date = calendar.getTime();
return date;
}
/**
* 判断是否是weekend
*
* @param sdate
* @return
* @throws ParseException
*/
public static boolean isWeekend(String sdate) throws ParseException {
Date date = sdf.parse(sdate);
Calendar cal = Calendar.getInstance();
cal.setTime(date);
if(cal.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY || cal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY){
return true;
} else{
return false;
}
}
/**
* 判断是否是holiday
*
* @param sdate
* @param list
* @return
* @throws ParseException
*/
public static boolean isHoliday(String sdate, List<Duedate> list) throws ParseException {
if(list.size() > 0){
for(Duedate l:list){
if(sdate.equals(l.getStartTime()) && l.getFlag().equals("0")){
return true;
}
}
}
return false;
}
/**
* 判断是否是串休
*
* @param
* @param
* @return
* @throws ParseException
*/
public static boolean isrest(String sdate,List<Duedate> listbyflag) throws ParseException{
if(listbyflag.size() > 0){
for(Duedate l:listbyflag){
if(sdate.equals(l.getStartTime())){
return true;
}
}
}
return false;
}
/**
* 获取N个工作日后的日期
* @param today opening date
* @param list holidayList
* @param num num个工作日后
* @return
* @throws
*/
public static List getNWorkDate(Date today, List<Duedate> list,List<Duedate> listbyflag, int num) throws ParseException {
List<Date> holidayList = new ArrayList();
Date tomorrow = null;
int delay = 1;
while(delay <= num){
tomorrow = getTomorrow(today);
//当前日期+1,判断是否是节假日,不是的同时要判断是否是周末,都不是则scheduleActiveDate日期+1
if((!isWeekend(sdf.format(tomorrow)) && !isHoliday(sdf.format(tomorrow),list)) || (isrest(sdf.format(tomorrow),listbyflag)) ){
delay++;
holidayList.add(tomorrow);
}
today = tomorrow;
}
return holidayList;
}
}
七、controller
@Controller
@RequestMapping(value = "/getTime")
public class DueDateController {
@Resource
private DueDateService dueDateService;
@RequestMapping(value = "/time/{num}")
@ResponseBody
public List dueDateList(@PathVariable int num) throws ParseException {
List<Duedate> list = dueDateService.getDueDateList();
List<Duedate> listbyflag = dueDateService.getList();
Date date = new Date();
List datelist =HolidayUtils.getScheduleActiveDate(date,list,listbyflag,num);
return datelist;
}
}
参考:
http://www.cnblogs.com/yadongliang/p/9549349.html