HolidayUtil.java 4.6 KB
/**  
* <p>Title: DoublePublicityServiceImpl.java</p>  
* <p>Description: </p>  
* <p>Copyright: Copyright (c) 2017</p>  
* <p>Company: www.baidudu.com</p>  
* @author hanln  
* @date 2018年9月7日  
* @version 1.0  
*/ 
package com.lhcredit.project.webbusiness.controller;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.DayOfWeek;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import com.lhcredit.project.business.HolidayWorkday.domain.HolidayWorkday;
import org.springframework.stereotype.Component;

/**
 * Description:
 *
 * @author hanln
 * @date 2018年9月7日
 */
@Component
// 加载配置文件
public class HolidayUtil {

//    public static void main(String[] args) throws Exception{
//        HolidayUtil service = new HolidayUtil();
//        HolidayUtil doublePublicityService = new HolidayUtil();
//        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
//        String date1 = simpleDateFormat.format(new Date());
//        String workDay = doublePublicityService.getWorkDay(date1, "377");
//        System.out.println(workDay);
//    }

    public List<HolidayWorkday> getHolidayWorkdayList() {
        return holidayWorkdayList;
    }

    public void setHolidayWorkdayList(List<HolidayWorkday> holidayWorkdayList) {
        this.holidayWorkdayList = holidayWorkdayList;
    }

    public List<HolidayWorkday> holidayWorkdayList;

    public Boolean isWorkingDay(long time){
        List<String> holiday =new ArrayList<>();
        //节假日
        holidayWorkdayList.forEach(h->{
            holiday.add(h.getHoliday());
        });
        //额外工作日
        List<String> extraWorkDay =new ArrayList<>();
        holidayWorkdayList.forEach(h->{
            extraWorkDay.add(h.getWorkday());
        });
        LocalDateTime dateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(time), ZoneOffset.of("+8"));
        String formatTime = dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
        //是否加班日
        if (extraWorkDay.contains(formatTime)) {
            return true;
        }
        //是否节假日
        if (holiday.contains(formatTime)) {
            return false;
        }
        //如果是1-5表示周一到周五  是工作日
        DayOfWeek week = dateTime.getDayOfWeek();
        if (week == DayOfWeek.SATURDAY || week == DayOfWeek.SUNDAY) {
            return false;
        }
        return true;
    }

    public String getWorkDay(String date, String entrustType) throws ParseException {
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
        Date d=sdf.parse(date);
        Boolean workingDay = isWorkingDay(d.getTime());
        Integer deliveryDays = null;
        if (Integer.parseInt(entrustType)== 376){
            deliveryDays = 5;
        }
        if (Integer.parseInt(entrustType)== 377){
            deliveryDays = 3;
        }
        if (Integer.parseInt(entrustType)== 383){
            deliveryDays = 2;
        }
        Date sday=null;
        //判断行政决定日是否为工作日
        if(workingDay){
//            System.out.println("工作日");
            //行政决定日 + 5个工作日
            int k=1;
            int j=1;
            while(true){
                Calendar c = Calendar.getInstance();
                c.setTime(d);
                c.add(Calendar.DATE, j);
                Date day=c.getTime();
                Boolean b=isWorkingDay(day.getTime());
                //传工作日
                if(k==deliveryDays){
                    if(b){
                        sday=day;
                        break;
                    }
                }
                if(b){
                    k++;
                }
                j++;
            }
        }else {
//            System.out.println("开开心心过节!!!");
            // 计算工作日
            int k=1;
            int j=1;
            while(true){
                Calendar c = Calendar.getInstance();
                c.setTime(d);
                c.add(Calendar.DATE, j);
                Date day=c.getTime();
                Boolean b=isWorkingDay(day.getTime());
                //放入天数
                if(k==deliveryDays){
                    if(b){
                        sday=day;
                        break;
                    }
                }
                if(b){
                    k++;
                }
                j++;
            }
        }
        return sdf.format(sday);
    }

}