fengjin
2022-10-18 48a62ed1badc7b68a81e253240672b15d4c3d74a
修改获取节假日依赖及代码
4个文件已修改
25个文件已添加
1570 ■■■■■ 已修改文件
flower_city/pom.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
flower_city/src/main/java/com/dg/core/controller/CommonController.java 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
flower_city/src/main/java/com/dg/core/service/impl/GuideRepairOrderServiceImpl.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
flower_city/src/main/java/com/dg/core/util/TestDate.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
flower_city/src/main/java/com/dg/core/util/presence/Year2001.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
flower_city/src/main/java/com/dg/core/util/presence/Year2002.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
flower_city/src/main/java/com/dg/core/util/presence/Year2003.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
flower_city/src/main/java/com/dg/core/util/presence/Year2004.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
flower_city/src/main/java/com/dg/core/util/presence/Year2005.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
flower_city/src/main/java/com/dg/core/util/presence/Year2006.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
flower_city/src/main/java/com/dg/core/util/presence/Year2007.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
flower_city/src/main/java/com/dg/core/util/presence/Year2008.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
flower_city/src/main/java/com/dg/core/util/presence/Year2009.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
flower_city/src/main/java/com/dg/core/util/presence/Year2010.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
flower_city/src/main/java/com/dg/core/util/presence/Year2011.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
flower_city/src/main/java/com/dg/core/util/presence/Year2012.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
flower_city/src/main/java/com/dg/core/util/presence/Year2013.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
flower_city/src/main/java/com/dg/core/util/presence/Year2014.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
flower_city/src/main/java/com/dg/core/util/presence/Year2015.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
flower_city/src/main/java/com/dg/core/util/presence/Year2016.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
flower_city/src/main/java/com/dg/core/util/presence/Year2017.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
flower_city/src/main/java/com/dg/core/util/presence/Year2018.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
flower_city/src/main/java/com/dg/core/util/presence/Year2019.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
flower_city/src/main/java/com/dg/core/util/presence/Year2020.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
flower_city/src/main/java/com/dg/core/util/presence/Year20xx.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
flower_city/src/main/java/com/dg/core/util/presence/YearMap.java 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
flower_city/src/main/java/com/dg/core/util/workday/Data.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
flower_city/src/main/java/com/dg/core/util/workday/WorkUtils.java 699 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
flower_city/src/main/java/com/dg/core/util/workday/WorkdayGen.java 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
flower_city/pom.xml
@@ -92,6 +92,12 @@
            <version>2.7.1</version>
        </dependency>
        <dependency>
            <groupId>com.icexxx</groupId>
            <artifactId>iceworkday</artifactId>
            <version>2.0.2.0</version>
        </dependency>
        <dependency>
            <groupId>cn.afterturn</groupId>
flower_city/src/main/java/com/dg/core/controller/CommonController.java
@@ -9,6 +9,7 @@
import com.dg.core.file.MimeTypeUtils;
import com.dg.core.file.SFTPUtil;
import com.dg.core.util.TestDate;
import com.iceyyy.workday.WorkUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -22,7 +23,9 @@
import javax.annotation.Resource;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.UUID;
@@ -141,21 +144,19 @@
  /**
   * 判断当前时间是否是工作日,格式为“2022-10-16”,不传默认为今天
   */
  @ApiOperation("判断当前时间是否是工作日,格式为“2022-10-16”,不传默认为今天")
  @ApiOperation("判断当前时间是否是工作日,格式为“20221016”,不传默认为今天")
  @GetMapping("/isWeekday")
  public ResultData isWeekday(@RequestParam(value = "dateTime",required = false) String dateTime)
  {
      TestDate td=new TestDate();
      DateTime dateTimeUser;
      if (dateTime==null)
        dateTimeUser=DateTime.now();
      else{
        dateTimeUser=DateUtil.parse(dateTime);
      if (dateTime==null){
        Date date = new Date();
        SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMdd");
        dateTime = fmt.format(date);
      }
      if (td.isWeekday(dateTimeUser))
         return success("工作日");
      else
      if (WorkUtils.isWorkendDay(dateTime))
         return success("休息日或者周末");
      else
         return success("工作日");
  }
flower_city/src/main/java/com/dg/core/service/impl/GuideRepairOrderServiceImpl.java
@@ -12,6 +12,7 @@
import com.dg.core.util.Snowflake;
import com.dg.core.util.TestDate;
import com.dg.core.util.WxUtil;
import com.iceyyy.workday.WorkUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@@ -278,7 +279,9 @@
        LocalDateTime endTime = LocalDate.now().atTime(23, 59, 59);//今天结束时间
        TestDate td = new TestDate();
        DateTime dateTimeUser= DateTime.now();
        if (td.isWeekday(dateTimeUser)){
        String format="YYYYMMdd";
        String dateTimeToday=dateTimeUser.toString(format);
        if (!WorkUtils.isWorkendDay(dateTimeToday)){
            if ( LocalDateTime.now().isAfter(startTime)&&LocalDateTime.now().isBefore(morningStartTime)){//提交时间是上午上班前
                guideRepairOrder.setTimeoutTime(LocalDate.now().
                        atTime(9+automessageSysSettings.getTimeoutNotificationNum(),0,0));
flower_city/src/main/java/com/dg/core/util/TestDate.java
@@ -3,6 +3,7 @@
import cn.hutool.core.date.DateTime;
import com.alibaba.fastjson.JSONObject;
import com.iceyyy.workday.WorkUtils;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.Response;
@@ -137,12 +138,13 @@
     * @return
     */
    public  DateTime nextWeekDay(DateTime dateTime){
        TestDate td=new TestDate();
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(dateTime);
        while (true){
          calendar.add(calendar.DATE,1);
          if (td.isWeekday(new DateTime(calendar))){
          SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
          String dateTimeToday = sdf.format(calendar.getTime());
          if (!WorkUtils.isWorkendDay(dateTimeToday)){
              return new DateTime(calendar);//返回日期
          }
        }
flower_city/src/main/java/com/dg/core/util/presence/Year2001.java
New file
@@ -0,0 +1,31 @@
package com.dg.core.util.presence;
import com.iceyyy.icework.presence.Year20xx;
import java.util.HashMap;
import java.util.Map;
public class Year2001 implements Year20xx {
    @Override
    public Map<String, Boolean> getYearMap() {
        Map<String, Boolean> map = new HashMap<String, Boolean>();
        map.put("20010120", false); // 班
        map.put("20010121", false); // 班
        map.put("20010124", true); // 休
        map.put("20010125", true); // 休
        map.put("20010126", true); // 休
        map.put("20010129", true); // 休
        map.put("20010130", true); // 休
        map.put("20010428", false); // 班
        map.put("20010429", false); // 班
        map.put("20010501", true); // 休
        map.put("20010502", true); // 休
        map.put("20010503", true); // 休
        map.put("20010504", true); // 休
        map.put("20010507", true); // 休
        map.put("20010929", false); // 班
        map.put("20010930", false); // 班
        map.put("20011001", true); // 休
        return map;
    }
}
flower_city/src/main/java/com/dg/core/util/presence/Year2002.java
New file
@@ -0,0 +1,31 @@
package com.dg.core.util.presence;
import com.iceyyy.icework.presence.Year20xx;
import java.util.HashMap;
import java.util.Map;
public class Year2002 implements Year20xx {
    @Override
    public Map<String, Boolean> getYearMap() {
        Map<String, Boolean> map = new HashMap<String, Boolean>();
        map.put("20020101", true); // 休
        map.put("20020102", true); // 休
        map.put("20020103", true); // 休
        map.put("20020209", false); // 班
        map.put("20020210", false); // 班
        map.put("20020212", true); // 休
        map.put("20020213", true); // 休
        map.put("20020214", true); // 休
        map.put("20020215", true); // 休
        map.put("20020218", true); // 休
        map.put("20020427", false); // 班
        map.put("20020428", false); // 班
        map.put("20020501", true); // 休
        map.put("20020502", true); // 休
        map.put("20020503", true); // 休
        map.put("20020506", true); // 休
        map.put("20020507", true); // 休
        return map;
    }
}
flower_city/src/main/java/com/dg/core/util/presence/Year2003.java
New file
@@ -0,0 +1,31 @@
package com.dg.core.util.presence;
import com.iceyyy.icework.presence.Year20xx;
import java.util.HashMap;
import java.util.Map;
public class Year2003 implements Year20xx {
    @Override
    public Map<String, Boolean> getYearMap() {
        Map<String, Boolean> map = new HashMap<String, Boolean>();
        map.put("20030101", true); // 休
        map.put("20030203", true); // 休
        map.put("20030204", true); // 休
        map.put("20030205", true); // 休
        map.put("20030206", true); // 休
        map.put("20030207", true); // 休
        map.put("20030208", false); // 班
        map.put("20030209", false); // 班
        map.put("20030426", false); // 班
        map.put("20030427", false); // 班
        map.put("20030501", true); // 休
        map.put("20030502", true); // 休
        map.put("20030505", true); // 休
        map.put("20030506", true); // 休
        map.put("20030507", true); // 休
        map.put("20030927", false); // 班
        map.put("20030928", false); // 班
        return map;
    }
}
flower_city/src/main/java/com/dg/core/util/presence/Year2004.java
New file
@@ -0,0 +1,31 @@
package com.dg.core.util.presence;
import com.iceyyy.icework.presence.Year20xx;
import java.util.HashMap;
import java.util.Map;
public class Year2004 implements Year20xx {
    @Override
    public Map<String, Boolean> getYearMap() {
        Map<String, Boolean> map = new HashMap<String, Boolean>();
        map.put("20040101", true); // 休
        map.put("20040117", false); // 班
        map.put("20040118", false); // 班
        map.put("20040122", true); // 休
        map.put("20040123", true); // 休
        map.put("20040126", true); // 休
        map.put("20040127", true); // 休
        map.put("20040128", true); // 休
        map.put("20040503", true); // 休
        map.put("20040504", true); // 休
        map.put("20040505", true); // 休
        map.put("20040506", true); // 休
        map.put("20040507", true); // 休
        map.put("20040508", false); // 班
        map.put("20040509", false); // 班
        map.put("20041001", true); // 休
        map.put("20041003", true); // 休
        return map;
    }
}
flower_city/src/main/java/com/dg/core/util/presence/Year2005.java
New file
@@ -0,0 +1,31 @@
package com.dg.core.util.presence;
import com.iceyyy.icework.presence.Year20xx;
import java.util.HashMap;
import java.util.Map;
public class Year2005 implements Year20xx {
    @Override
    public Map<String, Boolean> getYearMap() {
        Map<String, Boolean> map = new HashMap<String, Boolean>();
        map.put("20050103", true); // 休
        map.put("20050205", false); // 班
        map.put("20050206", false); // 班
        map.put("20050209", true); // 休
        map.put("20050210", true); // 休
        map.put("20050211", true); // 休
        map.put("20050214", true); // 休
        map.put("20050215", true); // 休
        map.put("20050430", false); // 班
        map.put("20050502", true); // 休
        map.put("20050503", true); // 休
        map.put("20050504", true); // 休
        map.put("20050505", true); // 休
        map.put("20050506", true); // 休
        map.put("20050508", false); // 班
        map.put("20051003", true); // 休
        map.put("20051004", true); // 休
        return map;
    }
}
flower_city/src/main/java/com/dg/core/util/presence/Year2006.java
New file
@@ -0,0 +1,31 @@
package com.dg.core.util.presence;
import com.iceyyy.icework.presence.Year20xx;
import java.util.HashMap;
import java.util.Map;
public class Year2006 implements Year20xx {
    @Override
    public Map<String, Boolean> getYearMap() {
        Map<String, Boolean> map = new HashMap<String, Boolean>();
        map.put("20060102", true); // 休
        map.put("20060103", true); // 休
        map.put("20060128", false); // 班
        map.put("20060130", true); // 休
        map.put("20060131", true); // 休
        map.put("20060201", true); // 休
        map.put("20060202", true); // 休
        map.put("20060203", true); // 休
        map.put("20060205", false); // 班
        map.put("20060429", false); // 班
        map.put("20060430", false); // 班
        map.put("20060501", true); // 休
        map.put("20060502", true); // 休
        map.put("20060503", true); // 休
        map.put("20060504", true); // 休
        map.put("20060505", true); // 休
        map.put("20060930", false); // 班
        return map;
    }
}
flower_city/src/main/java/com/dg/core/util/presence/Year2007.java
New file
@@ -0,0 +1,31 @@
package com.dg.core.util.presence;
import com.iceyyy.icework.presence.Year20xx;
import java.util.HashMap;
import java.util.Map;
public class Year2007 implements Year20xx {
    @Override
    public Map<String, Boolean> getYearMap() {
        Map<String, Boolean> map = new HashMap<String, Boolean>();
        map.put("20070101", true); // 休
        map.put("20070102", true); // 休
        map.put("20070103", true); // 休
        map.put("20070217", false); // 班
        map.put("20070219", true); // 休
        map.put("20070220", true); // 休
        map.put("20070221", true); // 休
        map.put("20070222", true); // 休
        map.put("20070223", true); // 休
        map.put("20070225", false); // 班
        map.put("20070428", false); // 班
        map.put("20070429", false); // 班
        map.put("20070501", true); // 休
        map.put("20070502", true); // 休
        map.put("20070503", true); // 休
        map.put("20070504", true); // 休
        map.put("20070507", true); // 休
        return map;
    }
}
flower_city/src/main/java/com/dg/core/util/presence/Year2008.java
New file
@@ -0,0 +1,31 @@
package com.dg.core.util.presence;
import com.iceyyy.icework.presence.Year20xx;
import java.util.HashMap;
import java.util.Map;
public class Year2008 implements Year20xx {
    @Override
    public Map<String, Boolean> getYearMap() {
        Map<String, Boolean> map = new HashMap<String, Boolean>();
        map.put("20080101", true); // 休
        map.put("20080203", false); // 班
        map.put("20080206", true); // 休
        map.put("20080207", true); // 休
        map.put("20080208", true); // 休
        map.put("20080211", true); // 休
        map.put("20080212", true); // 休
        map.put("20080404", true); // 休
        map.put("20080501", true); // 休
        map.put("20080502", true); // 休
        map.put("20080504", false); // 班
        map.put("20080609", true); // 休
        map.put("20080915", true); // 休
        map.put("20080927", false); // 班
        map.put("20080928", false); // 班
        map.put("20080929", true); // 休
        map.put("20080930", true); // 休
        return map;
    }
}
flower_city/src/main/java/com/dg/core/util/presence/Year2009.java
New file
@@ -0,0 +1,31 @@
package com.dg.core.util.presence;
import com.iceyyy.icework.presence.Year20xx;
import java.util.HashMap;
import java.util.Map;
public class Year2009 implements Year20xx {
    @Override
    public Map<String, Boolean> getYearMap() {
        Map<String, Boolean> map = new HashMap<String, Boolean>();
        map.put("20090101", true); // 休
        map.put("20090102", true); // 休
        map.put("20090104", false); // 班
        map.put("20090124", false); // 班
        map.put("20090126", true); // 休
        map.put("20090127", true); // 休
        map.put("20090128", true); // 休
        map.put("20090129", true); // 休
        map.put("20090130", true); // 休
        map.put("20090201", false); // 班
        map.put("20090406", true); // 休
        map.put("20090501", true); // 休
        map.put("20090528", true); // 休
        map.put("20090529", true); // 休
        map.put("20090531", false); // 班
        map.put("20090927", false); // 班
        map.put("20091001", true); // 休
        return map;
    }
}
flower_city/src/main/java/com/dg/core/util/presence/Year2010.java
New file
@@ -0,0 +1,31 @@
package com.dg.core.util.presence;
import com.iceyyy.icework.presence.Year20xx;
import java.util.HashMap;
import java.util.Map;
public class Year2010 implements Year20xx {
    @Override
    public Map<String, Boolean> getYearMap() {
        Map<String, Boolean> map = new HashMap<String, Boolean>();
        map.put("20100101", true); // 休
        map.put("20100215", true); // 休
        map.put("20100216", true); // 休
        map.put("20100217", true); // 休
        map.put("20100218", true); // 休
        map.put("20100219", true); // 休
        map.put("20100220", false); // 班
        map.put("20100221", false); // 班
        map.put("20100405", true); // 休
        map.put("20100503", true); // 休
        map.put("20100612", false); // 班
        map.put("20100613", false); // 班
        map.put("20100614", true); // 休
        map.put("20100615", true); // 休
        map.put("20100616", true); // 休
        map.put("20100919", false); // 班
        map.put("20100922", true); // 休
        return map;
    }
}
flower_city/src/main/java/com/dg/core/util/presence/Year2011.java
New file
@@ -0,0 +1,31 @@
package com.dg.core.util.presence;
import com.iceyyy.icework.presence.Year20xx;
import java.util.HashMap;
import java.util.Map;
public class Year2011 implements Year20xx {
    @Override
    public Map<String, Boolean> getYearMap() {
        Map<String, Boolean> map = new HashMap<String, Boolean>();
        map.put("20110103", true); // 休
        map.put("20110130", false); // 班
        map.put("20110202", true); // 休
        map.put("20110203", true); // 休
        map.put("20110204", true); // 休
        map.put("20110207", true); // 休
        map.put("20110208", true); // 休
        map.put("20110212", false); // 班
        map.put("20110402", false); // 班
        map.put("20110404", true); // 休
        map.put("20110405", true); // 休
        map.put("20110502", true); // 休
        map.put("20110606", true); // 休
        map.put("20110912", true); // 休
        map.put("20111003", true); // 休
        map.put("20111004", true); // 休
        map.put("20111005", true); // 休
        return map;
    }
}
flower_city/src/main/java/com/dg/core/util/presence/Year2012.java
New file
@@ -0,0 +1,31 @@
package com.dg.core.util.presence;
import com.iceyyy.icework.presence.Year20xx;
import java.util.HashMap;
import java.util.Map;
public class Year2012 implements Year20xx {
    @Override
    public Map<String, Boolean> getYearMap() {
        Map<String, Boolean> map = new HashMap<String, Boolean>();
        map.put("20120102", true); // 休
        map.put("20120103", true); // 休
        map.put("20120121", false); // 班
        map.put("20120123", true); // 休
        map.put("20120124", true); // 休
        map.put("20120125", true); // 休
        map.put("20120126", true); // 休
        map.put("20120127", true); // 休
        map.put("20120129", false); // 班
        map.put("20120331", false); // 班
        map.put("20120401", false); // 班
        map.put("20120402", true); // 休
        map.put("20120403", true); // 休
        map.put("20120404", true); // 休
        map.put("20120428", false); // 班
        map.put("20120430", true); // 休
        map.put("20120501", true); // 休
        return map;
    }
}
flower_city/src/main/java/com/dg/core/util/presence/Year2013.java
New file
@@ -0,0 +1,31 @@
package com.dg.core.util.presence;
import com.iceyyy.icework.presence.Year20xx;
import java.util.HashMap;
import java.util.Map;
public class Year2013 implements Year20xx {
    @Override
    public Map<String, Boolean> getYearMap() {
        Map<String, Boolean> map = new HashMap<String, Boolean>();
        map.put("20130101", true); // 休
        map.put("20130102", true); // 休
        map.put("20130103", true); // 休
        map.put("20130105", false); // 班
        map.put("20130106", false); // 班
        map.put("20130211", true); // 休
        map.put("20130212", true); // 休
        map.put("20130213", true); // 休
        map.put("20130214", true); // 休
        map.put("20130215", true); // 休
        map.put("20130216", false); // 班
        map.put("20130217", false); // 班
        map.put("20130404", true); // 休
        map.put("20130405", true); // 休
        map.put("20130407", false); // 班
        map.put("20130427", false); // 班
        map.put("20130428", false); // 班
        return map;
    }
}
flower_city/src/main/java/com/dg/core/util/presence/Year2014.java
New file
@@ -0,0 +1,31 @@
package com.dg.core.util.presence;
import com.iceyyy.icework.presence.Year20xx;
import java.util.HashMap;
import java.util.Map;
public class Year2014 implements Year20xx {
    @Override
    public Map<String, Boolean> getYearMap() {
        Map<String, Boolean> map = new HashMap<String, Boolean>();
        map.put("20140101", true); // 休
        map.put("20140126", false); // 班
        map.put("20140131", true); // 休
        map.put("20140203", true); // 休
        map.put("20140204", true); // 休
        map.put("20140205", true); // 休
        map.put("20140206", true); // 休
        map.put("20140208", false); // 班
        map.put("20140407", true); // 休
        map.put("20140501", true); // 休
        map.put("20140502", true); // 休
        map.put("20140504", false); // 班
        map.put("20140602", true); // 休
        map.put("20140908", true); // 休
        map.put("20140928", false); // 班
        map.put("20141001", true); // 休
        map.put("20141002", true); // 休
        return map;
    }
}
flower_city/src/main/java/com/dg/core/util/presence/Year2015.java
New file
@@ -0,0 +1,31 @@
package com.dg.core.util.presence;
import com.iceyyy.icework.presence.Year20xx;
import java.util.HashMap;
import java.util.Map;
public class Year2015 implements Year20xx {
    @Override
    public Map<String, Boolean> getYearMap() {
        Map<String, Boolean> map = new HashMap<String, Boolean>();
        map.put("20150101", true); // 休
        map.put("20150102", true); // 休
        map.put("20150104", false); // 班
        map.put("20150215", false); // 班
        map.put("20150218", true); // 休
        map.put("20150219", true); // 休
        map.put("20150220", true); // 休
        map.put("20150223", true); // 休
        map.put("20150224", true); // 休
        map.put("20150228", false); // 班
        map.put("20150406", true); // 休
        map.put("20150501", true); // 休
        map.put("20150622", true); // 休
        map.put("20150903", true); // 休
        map.put("20150904", true); // 休
        map.put("20150906", false); // 班
        map.put("20151001", true); // 休
        return map;
    }
}
flower_city/src/main/java/com/dg/core/util/presence/Year2016.java
New file
@@ -0,0 +1,31 @@
package com.dg.core.util.presence;
import com.iceyyy.icework.presence.Year20xx;
import java.util.HashMap;
import java.util.Map;
public class Year2016 implements Year20xx {
    @Override
    public Map<String, Boolean> getYearMap() {
        Map<String, Boolean> map = new HashMap<String, Boolean>();
        map.put("20160101", true); // 休
        map.put("20160206", false); // 班
        map.put("20160208", true); // 休
        map.put("20160209", true); // 休
        map.put("20160210", true); // 休
        map.put("20160211", true); // 休
        map.put("20160212", true); // 休
        map.put("20160214", false); // 班
        map.put("20160404", true); // 休
        map.put("20160502", true); // 休
        map.put("20160609", true); // 休
        map.put("20160610", true); // 休
        map.put("20160612", false); // 班
        map.put("20160915", true); // 休
        map.put("20160916", true); // 休
        map.put("20160918", false); // 班
        map.put("20161003", true); // 休
        return map;
    }
}
flower_city/src/main/java/com/dg/core/util/presence/Year2017.java
New file
@@ -0,0 +1,31 @@
package com.dg.core.util.presence;
import com.iceyyy.icework.presence.Year20xx;
import java.util.HashMap;
import java.util.Map;
public class Year2017 implements Year20xx {
    @Override
    public Map<String, Boolean> getYearMap() {
        Map<String, Boolean> map = new HashMap<String, Boolean>();
        map.put("20170102", true); // 休
        map.put("20170122", false); // 班
        map.put("20170127", true); // 休
        map.put("20170130", true); // 休
        map.put("20170131", true); // 休
        map.put("20170201", true); // 休
        map.put("20170202", true); // 休
        map.put("20170204", false); // 班
        map.put("20170401", false); // 班
        map.put("20170403", true); // 休
        map.put("20170404", true); // 休
        map.put("20170501", true); // 休
        map.put("20170527", false); // 班
        map.put("20170529", true); // 休
        map.put("20170530", true); // 休
        map.put("20170930", false); // 班
        map.put("20171002", true); // 休
        return map;
    }
}
flower_city/src/main/java/com/dg/core/util/presence/Year2018.java
New file
@@ -0,0 +1,41 @@
package com.dg.core.util.presence;
import com.iceyyy.icework.presence.Year20xx;
import java.util.HashMap;
import java.util.Map;
public class Year2018 implements Year20xx {
    @Override
    public Map<String, Boolean> getYearMap() {
        Map<String, Boolean> map = new HashMap<String, Boolean>();
        map.put("20180101", true); // 休
        map.put("20180211", false); // 班
        map.put("20180215", true); // 休
        map.put("20180216", true); // 休
        map.put("20180219", true); // 休
        map.put("20180220", true); // 休
        map.put("20180221", true); // 休
        map.put("20180224", false); // 班
        map.put("20180405", true); // 休
        map.put("20180406", true); // 休
        map.put("20180408", false); // 班
        map.put("20180428", false); // 班
        map.put("20180430", true); // 休
        map.put("20180501", true); // 休
        map.put("20180618", true); // 休
        map.put("20180924", true); // 休
        map.put("20180929", false); // 班
        map.put("20180930", false); // 班
        map.put("20181001", true); // 休
        map.put("20181002", true); // 休
        map.put("20181003", true); // 休
        map.put("20181004", true); // 休
        map.put("20181005", true); // 休
        map.put("20181229", false); // 班
        map.put("20181231", true); // 休
        return map;
    }
}
flower_city/src/main/java/com/dg/core/util/presence/Year2019.java
New file
@@ -0,0 +1,39 @@
package com.dg.core.util.presence;
import com.iceyyy.icework.presence.Year20xx;
import java.util.HashMap;
import java.util.Map;
public class Year2019 implements Year20xx {
    @Override
    public Map<String, Boolean> getYearMap() {
        Map<String, Boolean> map = new HashMap<String, Boolean>();
        map.put("20190101", true); // 休
        map.put("20190202", false); // 班
        map.put("20190203", false); // 班
        map.put("20190204", true); // 休
        map.put("20190205", true); // 休
        map.put("20190206", true); // 休
        map.put("20190207", true); // 休
        map.put("20190208", true); // 休
        map.put("20190405", true); // 休
        map.put("20190428", false); // 班
        map.put("20190501", true); // 休
        map.put("20190502", true); // 休
        map.put("20190503", true); // 休
        map.put("20190505", false); // 班
        map.put("20190607", true); // 休
        map.put("20190913", true); // 休
        map.put("20190929", false); // 班
        map.put("20191001", true); // 休
        map.put("20191002", true); // 休
        map.put("20191003", true); // 休
        map.put("20191004", true); // 休
        map.put("20191007", true); // 休
        map.put("20191012", false); // 班
        return map;
    }
}
flower_city/src/main/java/com/dg/core/util/presence/Year2020.java
New file
@@ -0,0 +1,42 @@
package com.dg.core.util.presence;
import com.iceyyy.icework.presence.Year20xx;
import java.util.HashMap;
import java.util.Map;
public class Year2020 implements Year20xx {
    @Override
    public Map<String, Boolean> getYearMap() {
        Map<String, Boolean> map = new HashMap<String, Boolean>();
        map.put("20200101", true); // 休
        map.put("20200119", false); // 班
        map.put("20200124", true); // 休
        map.put("20200127", true); // 休
        map.put("20200128", true); // 休
        map.put("20200129", true); // 休
        map.put("20200130", true); // 休
        map.put("20200131", true); // 休(+)
        // map.put("20200201", false); // 班
        map.put("20200406", true); // 休
        map.put("20200426", false); // 班
        map.put("20200501", true); // 休
        map.put("20200504", true); // 休
        map.put("20200505", true); // 休
        map.put("20200509", false); // 班
        map.put("20200625", true); // 休
        map.put("20200626", true); // 休
        map.put("20200628", false); // 班
        map.put("20200927", false); // 班
        map.put("20201001", true); // 休
        map.put("20201002", true); // 休
        map.put("20201005", true); // 休
        map.put("20201006", true); // 休
        map.put("20201007", true); // 休
        map.put("20201008", true); // 休
        map.put("20201010", false); // 班
        return map;
    }
}
flower_city/src/main/java/com/dg/core/util/presence/Year20xx.java
New file
@@ -0,0 +1,7 @@
package com.dg.core.util.presence;
import java.util.Map;
public interface Year20xx {
    public Map<String, Boolean> getYearMap();
}
flower_city/src/main/java/com/dg/core/util/presence/YearMap.java
New file
@@ -0,0 +1,84 @@
package com.dg.core.util.presence;
import com.iceyyy.icework.presence.Year2001;
import com.iceyyy.icework.presence.Year2002;
import com.iceyyy.icework.presence.Year2003;
import com.iceyyy.icework.presence.Year2004;
import com.iceyyy.icework.presence.Year2005;
import com.iceyyy.icework.presence.Year2006;
import com.iceyyy.icework.presence.Year2007;
import com.iceyyy.icework.presence.Year2008;
import com.iceyyy.icework.presence.Year2009;
import com.iceyyy.icework.presence.Year2010;
import com.iceyyy.icework.presence.Year2011;
import com.iceyyy.icework.presence.Year2012;
import com.iceyyy.icework.presence.Year2013;
import com.iceyyy.icework.presence.Year2014;
import com.iceyyy.icework.presence.Year2015;
import com.iceyyy.icework.presence.Year2016;
import com.iceyyy.icework.presence.Year2017;
import com.iceyyy.icework.presence.Year2018;
import com.iceyyy.icework.presence.Year2019;
import com.iceyyy.icework.presence.Year2020;
import com.iceyyy.icework.presence.Year20xx;
import java.util.Map;
public class YearMap {
    public static void main(String[] args) {
        int year = 2001;
        System.out.println(YearMap.yearMap(year));
    }
    public static Map<String, Boolean> yearMap(int year) {
        com.iceyyy.icework.presence.Year20xx createMap = createMap(year);
        return createMap.getYearMap();
    }
    private static Year20xx createMap(int year) {
        if (year == 2001) {
            return new Year2001();
        } else if (year == 2002) {
            return new Year2002();
        } else if (year == 2003) {
            return new Year2003();
        } else if (year == 2004) {
            return new Year2004();
        } else if (year == 2005) {
            return new Year2005();
        } else if (year == 2006) {
            return new Year2006();
        } else if (year == 2007) {
            return new Year2007();
        } else if (year == 2008) {
            return new Year2008();
        } else if (year == 2009) {
            return new Year2009();
        } else if (year == 2010) {
            return new Year2010();
        } else if (year == 2011) {
            return new Year2011();
        } else if (year == 2012) {
            return new Year2012();
        } else if (year == 2013) {
            return new Year2013();
        } else if (year == 2014) {
            return new Year2014();
        } else if (year == 2015) {
            return new Year2015();
        } else if (year == 2016) {
            return new Year2016();
        } else if (year == 2017) {
            return new Year2017();
        } else if (year == 2018) {
            return new Year2018();
        } else if (year == 2019) {
            return new Year2019();
        } else if (year == 2020) {
            return new Year2020();
        }
        return null;
    }
}
flower_city/src/main/java/com/dg/core/util/workday/Data.java
New file
@@ -0,0 +1,19 @@
package com.dg.core.util.workday;
public class Data {
    private int date;
    private boolean repose;
    public Data(int date, boolean repose) {
        this.date = date;
        this.repose = repose;
    }
    public int getDate() {
        return date;
    }
    public boolean getRepose() {
        return repose;
    }
}
flower_city/src/main/java/com/dg/core/util/workday/WorkUtils.java
New file
@@ -0,0 +1,699 @@
package com.dg.core.util.workday;
import com.iceyyy.icework.presence.YearMap;
import com.iceyyy.nongli.NongLi;
import com.iceyyy.workday.Data;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.Map.Entry;
/**
 * iceworkday工作日算法
 * @author IceWater zxcyhn@126.com
 */
public class WorkUtils {
    public static Map<String, Boolean> weekendMap(String year) {
        if (year == null || "".equals(year.trim())) {
            throw new RuntimeException("传入的参数为空");
        }
        if (year.length() != 4) {
            throw new RuntimeException("传入的参数格式错误,应传入yyyyMMdd格式的日期");
        }
        int yearNum = Integer.parseInt(year.substring(0, 4));
        if (yearNum < 2001) {
            throw new RuntimeException("工作日计算年份需要大于等于2001");
        } else if (yearNum > 2017) {
            Map<String, Boolean> mapFromFile = weekMapFromFile();
            mapFromFile = filterMap(mapFromFile, yearNum);
            Map<String, Boolean> map = complexCalculate(yearNum);
            if (mapFromFile.size() != 0) {
                map.putAll(mapFromFile);
            }
            return map;
        } else {
            Map<String, Boolean> map = YearMap.yearMap(yearNum);
            return map;
        }
    }
    public static boolean isWorkendDay(String ymd) {
        if (ymd == null || "".equals(ymd)) {
            throw new RuntimeException("输入的日期不能为空");
        }
        ymd = convertDate(ymd);
        if("19991230".equals(ymd)) {
            return true;
        }
        if("19991231".equals(ymd)) {
            return true;
        }
        String yearStr = ymd.substring(0, 4);
        Map<String, Boolean> weekendMap = weekendMap(yearStr);
        Boolean isWeekend = weekendMap.get(ymd);
        if (isWeekend == null) {
            int day = getWeekDay(ymd);
            if (day == 0 || day == 6) {
                return true;
            } else {
                return false;
            }
        } else {
            return isWeekend;
        }
    }
    private static String convertDate(String dateStr) {
        String[] array = null;
        if (dateStr.contains("-")) {
            array = dateStr.split("-");
        } else if (dateStr.contains(".")) {
            array = dateStr.split("\\.");
        } else if (dateStr.contains("/")) {
            array = dateStr.split("/");
        } else if (dateStr.contains("_")) {
            array = dateStr.split("_");
        } else if (dateStr.contains("年")) {
            if (dateStr.endsWith("日")) {
                dateStr = dateStr.substring(0, dateStr.length() - 1);
            }
            array = dateStr.split("年|月");
        } else {
            if (dateStr.length() == 8) {
                return dateStr;
            }
        }
        String yearStr = array[0];
        String monthStr = array[1];
        String dayStr = array[2];
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 4 - yearStr.length(); i++) {
            sb.append("0");
        }
        sb.append(yearStr);
        if (monthStr.length() == 1) {
            sb.append("0");
        }
        sb.append(monthStr);
        if (dayStr.length() == 1) {
            sb.append("0");
        }
        sb.append(dayStr);
        return sb.toString();
    }
    private static Map<String, Boolean> complexCalculate(int yearNum) {
        Map<String, Boolean> map = new HashMap<String, Boolean>();
        String newYear = "0101";
        String chingming = "0405";
        String labor = "0501";
        String dragon = "0505L";
        String autumn = "0815L";
        Map<String, Boolean> newYearMap = gregorianNewYearMap(yearNum, newYear);
        Map<String, Boolean> nextYearMap = gregorianNewYearMap(yearNum + 1, newYear);
        map.putAll(currentYearMap(newYearMap, nextYearMap, yearNum));
        map.putAll(festivalMap(yearNum, chingming));
        map.putAll(newYearLunarMap(yearNum));
        map.putAll(festivalMap(yearNum, labor));
        map.putAll(festivalMap(yearNum, dragon));
        map.putAll(nationalAutumnMap(yearNum, autumn));
        return map;
    }
    private static Map<String, Boolean> nationalAutumnMap(int yearNum, String autumn) {
        Map<String, Boolean> map = new HashMap<String, Boolean>();
        String ymd = yearNum + "0815";// 中秋节
        String ymdNational = yearNum + "1001";// 国庆节
        String ymdAutumn = convertGregorian(ymd);
        int day = getWeekDay(ymdNational);
        Map<String, Boolean> mapHistory = getHistoryMap();
        String key = ymdAutumn.substring(4, 8) + "_" + day;
        if (mapHistory.get(key) != null) {
            // TODO 此处希望从近几年相似的月份中进行类比,是一种优化算法,暂未实现,但不影响算法使用。
        }
        String monthAutumn = ymdAutumn.substring(4, 6);
        String dateAutumn = ymdAutumn.substring(6, 8);
        int monthAutumnNum = Integer.parseInt(monthAutumn);
        int dateAutumnNum = Integer.parseInt(dateAutumn);
        if (dateAutumnNum < 25 && monthAutumnNum == 9) {// 中秋在9.25以前
            // 中秋最早9.7 最晚10.8
            map.putAll(festivalMap(yearNum, "0815L"));// 中秋
            map.putAll(nationalMap(yearNum));// 国庆
        } else if (monthAutumnNum == 10) {// 中秋节在10月份
            map.putAll(nationalOctMap(yearNum));// 国庆
        } else if (dateAutumnNum >= 25 && monthAutumnNum == 9) {// 中秋节在9.25 9.26
                                                                // 9.27 9.28
                                                                // 9.29 9.30
            // 1. 中秋 25 全部两段 周一~周日
            // 2. 中秋 26 全部两段 周二~周一
            // 3. 中秋 27 最复杂 周三~周二
            // 4. 中秋 28 全部休8天 周四~周三
            // 5. 中秋 29 全部休8天 周五~周四
            // 6. 中秋 30 全部休8天 周六~周五
            // 补班 最早 9.22 最迟 10.12
            int dayAutumn = getWeekDay(ymdAutumn);
            map.putAll(complexMap(yearNum, dateAutumnNum, dayAutumn));// 国庆
        } else {
            throw new RuntimeException("中秋日期格式错误");
        }
        return map;
    }
    private static Map<String, Boolean> complexMap(int yearNum, int dateAutumnNum, int dayAutumn) {
        com.iceyyy.workday.Data[][] table = getAutumnTable(dateAutumnNum);
        com.iceyyy.workday.Data[] row = getRow(table, dateAutumnNum, dayAutumn);
        return row2map(row, yearNum);
    }
    private static Map<String, Boolean> row2map(com.iceyyy.workday.Data[] row, int yearNum) {
        Map<String, Boolean> map = new HashMap<String, Boolean>();
        for (int i = 0; i < row.length; i++) {
            com.iceyyy.workday.Data data = row[i];
            int date = data.getDate();
            boolean repose = data.getRepose();
            String monthStr = "10";// 10月份
            if (date > 15) {
                monthStr = "09";// 9月份
            }
            String dateStr = date + "";
            if (date < 10) {
                dateStr = "0" + date;
            }
            String key = yearNum + monthStr + dateStr;
            map.put(key, repose);
        }
        return map;
    }
    /**
     * 根据中秋的星期获取具体的某一行的数据
     *
     * @param table
     * @param dayAutumn
     * @return
     */
    private static com.iceyyy.workday.Data[] getRow(com.iceyyy.workday.Data[][] table, int dateAutumnNum, int dayAutumn) {
        // 25 1 [0]
        // 25 2 [1]
        // 25 3 [2]
        // 26 1 [6]
        // 26 2 [0]
        // 26 3 [1]
        // 26 4 [2]
        // date+index-23=day
        // index=day+23-date
        int index = (dayAutumn + 31 - dateAutumnNum) % 7;
        return table[index];
    }
    private static com.iceyyy.workday.Data[][] getAutumnTable(int dateAutumnNum) {
        com.iceyyy.workday.Data[][] days1 = {
                { new com.iceyyy.workday.Data(25, true), new com.iceyyy.workday.Data(30, false), new com.iceyyy.workday.Data(2, true), new com.iceyyy.workday.Data(3, true), new com.iceyyy.workday.Data(4, true),
                        new com.iceyyy.workday.Data(5, true), new com.iceyyy.workday.Data(6, true), new com.iceyyy.workday.Data(8, false) },
                { new com.iceyyy.workday.Data(22, false), new com.iceyyy.workday.Data(24, true), new com.iceyyy.workday.Data(25, true), new com.iceyyy.workday.Data(29, false), new com.iceyyy.workday.Data(30, false),
                        new com.iceyyy.workday.Data(1, true), new com.iceyyy.workday.Data(2, true), new com.iceyyy.workday.Data(3, true), new com.iceyyy.workday.Data(4, true), new com.iceyyy.workday.Data(5, true) },
                { new com.iceyyy.workday.Data(25, true), new com.iceyyy.workday.Data(26, true), new com.iceyyy.workday.Data(27, true), new com.iceyyy.workday.Data(28, false), new com.iceyyy.workday.Data(29, false),
                        new com.iceyyy.workday.Data(1, true), new com.iceyyy.workday.Data(2, true), new com.iceyyy.workday.Data(3, true), new com.iceyyy.workday.Data(4, true), new com.iceyyy.workday.Data(7, true),
                        new com.iceyyy.workday.Data(12, false) },
                { new com.iceyyy.workday.Data(21, false), new com.iceyyy.workday.Data(25, true), new com.iceyyy.workday.Data(26, true), new com.iceyyy.workday.Data(28, false), new com.iceyyy.workday.Data(1, true),
                        new com.iceyyy.workday.Data(2, true), new com.iceyyy.workday.Data(3, true), new com.iceyyy.workday.Data(6, true), new com.iceyyy.workday.Data(7, true),
                        new com.iceyyy.workday.Data(11, false) },
                { new com.iceyyy.workday.Data(20, false), new com.iceyyy.workday.Data(25, true), new com.iceyyy.workday.Data(1, true), new com.iceyyy.workday.Data(2, true), new com.iceyyy.workday.Data(5, true),
                        new com.iceyyy.workday.Data(6, true), new com.iceyyy.workday.Data(7, true), new com.iceyyy.workday.Data(10, false) },
                { new com.iceyyy.workday.Data(27, true), new com.iceyyy.workday.Data(1, true), new com.iceyyy.workday.Data(4, true), new com.iceyyy.workday.Data(5, true), new com.iceyyy.workday.Data(6, true),
                        new com.iceyyy.workday.Data(7, true), new com.iceyyy.workday.Data(9, false), new com.iceyyy.workday.Data(10, false) },
                { new com.iceyyy.workday.Data(26, true), new com.iceyyy.workday.Data(3, true), new com.iceyyy.workday.Data(4, true), new com.iceyyy.workday.Data(5, true), new com.iceyyy.workday.Data(6, true),
                        new com.iceyyy.workday.Data(7, true), new com.iceyyy.workday.Data(8, false), new com.iceyyy.workday.Data(9, false) } };
        com.iceyyy.workday.Data[][] days2 = {
                { new com.iceyyy.workday.Data(23, false), new com.iceyyy.workday.Data(25, true), new com.iceyyy.workday.Data(26, true), new com.iceyyy.workday.Data(30, false), new com.iceyyy.workday.Data(2, true),
                        new com.iceyyy.workday.Data(3, true), new com.iceyyy.workday.Data(4, true), new com.iceyyy.workday.Data(5, true), new com.iceyyy.workday.Data(6, true),
                        new com.iceyyy.workday.Data(8, false) },
                { new com.iceyyy.workday.Data(23, false), new com.iceyyy.workday.Data(26, true), new com.iceyyy.workday.Data(27, true), new com.iceyyy.workday.Data(28, true), new com.iceyyy.workday.Data(29, false),
                        new com.iceyyy.workday.Data(30, false), new com.iceyyy.workday.Data(1, true), new com.iceyyy.workday.Data(2, true), new com.iceyyy.workday.Data(3, true), new com.iceyyy.workday.Data(4, true),
                        new com.iceyyy.workday.Data(5, true), new com.iceyyy.workday.Data(13, false) },
                { new com.iceyyy.workday.Data(22, false), new com.iceyyy.workday.Data(26, true), new com.iceyyy.workday.Data(27, true), new com.iceyyy.workday.Data(29, false), new com.iceyyy.workday.Data(1, true),
                        new com.iceyyy.workday.Data(2, true), new com.iceyyy.workday.Data(3, true), new com.iceyyy.workday.Data(4, true), new com.iceyyy.workday.Data(7, true) },
                { new com.iceyyy.workday.Data(21, false), new com.iceyyy.workday.Data(26, true), new com.iceyyy.workday.Data(1, true), new com.iceyyy.workday.Data(2, true), new com.iceyyy.workday.Data(3, true),
                        new com.iceyyy.workday.Data(6, true), new com.iceyyy.workday.Data(7, true) },
                { new com.iceyyy.workday.Data(1, true), new com.iceyyy.workday.Data(2, true), new com.iceyyy.workday.Data(5, true), new com.iceyyy.workday.Data(6, true), new com.iceyyy.workday.Data(7, true),
                        new com.iceyyy.workday.Data(10, false) },
                { new com.iceyyy.workday.Data(1, true), new com.iceyyy.workday.Data(4, true), new com.iceyyy.workday.Data(5, true), new com.iceyyy.workday.Data(6, true), new com.iceyyy.workday.Data(7, true),
                        new com.iceyyy.workday.Data(9, false) },
                { new com.iceyyy.workday.Data(26, true), new com.iceyyy.workday.Data(3, true), new com.iceyyy.workday.Data(4, true), new com.iceyyy.workday.Data(5, true), new com.iceyyy.workday.Data(6, true),
                        new com.iceyyy.workday.Data(7, true), new com.iceyyy.workday.Data(8, false), new com.iceyyy.workday.Data(9, false) } };
        com.iceyyy.workday.Data[][] days3 = {
                { new com.iceyyy.workday.Data(23, false), new com.iceyyy.workday.Data(24, false), new com.iceyyy.workday.Data(25, true), new com.iceyyy.workday.Data(26, true), new com.iceyyy.workday.Data(27, true),
                        new com.iceyyy.workday.Data(30, false), new com.iceyyy.workday.Data(2, true), new com.iceyyy.workday.Data(3, true), new com.iceyyy.workday.Data(4, true), new com.iceyyy.workday.Data(5, true),
                        new com.iceyyy.workday.Data(6, true), new com.iceyyy.workday.Data(8, false) },
                { new com.iceyyy.workday.Data(27, true), new com.iceyyy.workday.Data(28, true), new com.iceyyy.workday.Data(1, true), new com.iceyyy.workday.Data(2, true), new com.iceyyy.workday.Data(3, true),
                        new com.iceyyy.workday.Data(4, true), new com.iceyyy.workday.Data(6, false), new com.iceyyy.workday.Data(7, false) },
                { new com.iceyyy.workday.Data(27, true), new com.iceyyy.workday.Data(30, true), new com.iceyyy.workday.Data(1, true), new com.iceyyy.workday.Data(2, true), new com.iceyyy.workday.Data(3, true),
                        new com.iceyyy.workday.Data(4, true), new com.iceyyy.workday.Data(5, false), new com.iceyyy.workday.Data(6, false) },
                { new com.iceyyy.workday.Data(1, true), new com.iceyyy.workday.Data(2, true), new com.iceyyy.workday.Data(3, true), new com.iceyyy.workday.Data(6, true), new com.iceyyy.workday.Data(7, true),
                        new com.iceyyy.workday.Data(11, false) },
                { new com.iceyyy.workday.Data(1, true), new com.iceyyy.workday.Data(2, true), new com.iceyyy.workday.Data(5, true), new com.iceyyy.workday.Data(6, true), new com.iceyyy.workday.Data(7, true),
                        new com.iceyyy.workday.Data(10, false) },
                { new com.iceyyy.workday.Data(27, true), new com.iceyyy.workday.Data(1, true), new com.iceyyy.workday.Data(4, true), new com.iceyyy.workday.Data(5, true), new com.iceyyy.workday.Data(6, true),
                        new com.iceyyy.workday.Data(7, true), new com.iceyyy.workday.Data(9, false), new com.iceyyy.workday.Data(10, false) },
                { new com.iceyyy.workday.Data(24, false), new com.iceyyy.workday.Data(26, true), new com.iceyyy.workday.Data(27, true), new com.iceyyy.workday.Data(3, true), new com.iceyyy.workday.Data(4, true),
                        new com.iceyyy.workday.Data(5, true), new com.iceyyy.workday.Data(6, true), new com.iceyyy.workday.Data(7, true), new com.iceyyy.workday.Data(8, false),
                        new com.iceyyy.workday.Data(9, false) } };
        com.iceyyy.workday.Data[][] days4 = {
                { new com.iceyyy.workday.Data(28, true), new com.iceyyy.workday.Data(29, true), new com.iceyyy.workday.Data(2, true), new com.iceyyy.workday.Data(3, true), new com.iceyyy.workday.Data(4, true),
                        new com.iceyyy.workday.Data(5, true), new com.iceyyy.workday.Data(7, false), new com.iceyyy.workday.Data(8, false) },
                { new com.iceyyy.workday.Data(28, true), new com.iceyyy.workday.Data(1, true), new com.iceyyy.workday.Data(2, true), new com.iceyyy.workday.Data(3, true), new com.iceyyy.workday.Data(4, true),
                        new com.iceyyy.workday.Data(5, true), new com.iceyyy.workday.Data(6, false), new com.iceyyy.workday.Data(7, false) },
                { new com.iceyyy.workday.Data(30, true), new com.iceyyy.workday.Data(1, true), new com.iceyyy.workday.Data(2, true), new com.iceyyy.workday.Data(3, true), new com.iceyyy.workday.Data(4, true),
                        new com.iceyyy.workday.Data(6, false) },
                { new com.iceyyy.workday.Data(27, false), new com.iceyyy.workday.Data(29, true), new com.iceyyy.workday.Data(30, true), new com.iceyyy.workday.Data(1, true), new com.iceyyy.workday.Data(2, true),
                        new com.iceyyy.workday.Data(3, true) },
                { new com.iceyyy.workday.Data(26, false), new com.iceyyy.workday.Data(27, false), new com.iceyyy.workday.Data(28, true), new com.iceyyy.workday.Data(29, true), new com.iceyyy.workday.Data(30, true),
                        new com.iceyyy.workday.Data(1, true), new com.iceyyy.workday.Data(2, true), new com.iceyyy.workday.Data(5, true) },
                { new com.iceyyy.workday.Data(25, false), new com.iceyyy.workday.Data(26, false), new com.iceyyy.workday.Data(28, true), new com.iceyyy.workday.Data(29, true), new com.iceyyy.workday.Data(30, true),
                        new com.iceyyy.workday.Data(1, true), new com.iceyyy.workday.Data(4, true), new com.iceyyy.workday.Data(5, true) },
                { new com.iceyyy.workday.Data(25, false), new com.iceyyy.workday.Data(28, true), new com.iceyyy.workday.Data(29, true), new com.iceyyy.workday.Data(30, true), new com.iceyyy.workday.Data(3, true),
                        new com.iceyyy.workday.Data(4, true), new com.iceyyy.workday.Data(5, true), new com.iceyyy.workday.Data(8, false) } };
        com.iceyyy.workday.Data[][] days5 = {
                { new com.iceyyy.workday.Data(29, true), new com.iceyyy.workday.Data(2, true), new com.iceyyy.workday.Data(3, true), new com.iceyyy.workday.Data(4, true), new com.iceyyy.workday.Data(5, true),
                        new com.iceyyy.workday.Data(6, true), new com.iceyyy.workday.Data(7, false), new com.iceyyy.workday.Data(8, false) },
                { new com.iceyyy.workday.Data(1, true), new com.iceyyy.workday.Data(2, true), new com.iceyyy.workday.Data(3, true), new com.iceyyy.workday.Data(4, true), new com.iceyyy.workday.Data(5, true),
                        new com.iceyyy.workday.Data(7, false) },
                { new com.iceyyy.workday.Data(28, false), new com.iceyyy.workday.Data(30, true), new com.iceyyy.workday.Data(1, true), new com.iceyyy.workday.Data(2, true), new com.iceyyy.workday.Data(3, true),
                        new com.iceyyy.workday.Data(4, true) },
                { new com.iceyyy.workday.Data(27, false), new com.iceyyy.workday.Data(28, false), new com.iceyyy.workday.Data(29, true), new com.iceyyy.workday.Data(30, true), new com.iceyyy.workday.Data(1, true),
                        new com.iceyyy.workday.Data(2, true), new com.iceyyy.workday.Data(3, true), new com.iceyyy.workday.Data(6, true) },
                { new com.iceyyy.workday.Data(26, false), new com.iceyyy.workday.Data(27, false), new com.iceyyy.workday.Data(29, true), new com.iceyyy.workday.Data(30, true), new com.iceyyy.workday.Data(1, true),
                        new com.iceyyy.workday.Data(2, true), new com.iceyyy.workday.Data(5, true), new com.iceyyy.workday.Data(6, true) },
                { new com.iceyyy.workday.Data(26, false), new com.iceyyy.workday.Data(29, true), new com.iceyyy.workday.Data(30, true), new com.iceyyy.workday.Data(1, true), new com.iceyyy.workday.Data(4, true),
                        new com.iceyyy.workday.Data(5, true), new com.iceyyy.workday.Data(6, true), new com.iceyyy.workday.Data(9, false) },
                { new com.iceyyy.workday.Data(29, true), new com.iceyyy.workday.Data(30, true), new com.iceyyy.workday.Data(3, true), new com.iceyyy.workday.Data(4, true), new com.iceyyy.workday.Data(5, true),
                        new com.iceyyy.workday.Data(6, true), new com.iceyyy.workday.Data(8, false), new com.iceyyy.workday.Data(9, false) } };
        com.iceyyy.workday.Data[][] days6 = {
                { new com.iceyyy.workday.Data(2, true), new com.iceyyy.workday.Data(3, true), new com.iceyyy.workday.Data(4, true), new com.iceyyy.workday.Data(5, true), new com.iceyyy.workday.Data(6, true),
                        new com.iceyyy.workday.Data(8, false) },
                { new com.iceyyy.workday.Data(29, false), new com.iceyyy.workday.Data(1, true), new com.iceyyy.workday.Data(2, true), new com.iceyyy.workday.Data(3, true), new com.iceyyy.workday.Data(4, true),
                        new com.iceyyy.workday.Data(5, true) },
                { new com.iceyyy.workday.Data(28, false), new com.iceyyy.workday.Data(29, false), new com.iceyyy.workday.Data(30, true), new com.iceyyy.workday.Data(1, true), new com.iceyyy.workday.Data(2, true),
                        new com.iceyyy.workday.Data(3, true), new com.iceyyy.workday.Data(4, true), new com.iceyyy.workday.Data(7, true) },
                { new com.iceyyy.workday.Data(27, false), new com.iceyyy.workday.Data(28, false), new com.iceyyy.workday.Data(30, true), new com.iceyyy.workday.Data(1, true), new com.iceyyy.workday.Data(2, true),
                        new com.iceyyy.workday.Data(3, true), new com.iceyyy.workday.Data(6, true), new com.iceyyy.workday.Data(7, true) },
                { new com.iceyyy.workday.Data(27, false), new com.iceyyy.workday.Data(30, true), new com.iceyyy.workday.Data(1, true), new com.iceyyy.workday.Data(2, true), new com.iceyyy.workday.Data(5, true),
                        new com.iceyyy.workday.Data(6, true), new com.iceyyy.workday.Data(7, true), new com.iceyyy.workday.Data(10, false) },
                { new com.iceyyy.workday.Data(30, true), new com.iceyyy.workday.Data(1, true), new com.iceyyy.workday.Data(4, true), new com.iceyyy.workday.Data(5, true), new com.iceyyy.workday.Data(6, true),
                        new com.iceyyy.workday.Data(7, true), new com.iceyyy.workday.Data(9, false), new com.iceyyy.workday.Data(10, false) },
                { new com.iceyyy.workday.Data(30, true), new com.iceyyy.workday.Data(3, true), new com.iceyyy.workday.Data(4, true), new com.iceyyy.workday.Data(5, true), new com.iceyyy.workday.Data(6, true),
                        new com.iceyyy.workday.Data(7, true), new com.iceyyy.workday.Data(8, false), new Data(9, false) } };
        if (dateAutumnNum == 25) {
            return days1;
        } else if (dateAutumnNum == 26) {
            return days2;
        } else if (dateAutumnNum == 27) {
            return days3;
        } else if (dateAutumnNum == 28) {
            return days4;
        } else if (dateAutumnNum == 29) {
            return days5;
        } else if (dateAutumnNum == 30) {
            return days6;
        }
        throw new RuntimeException("中秋日期格式错误");
    }
    private static Map<String, Boolean> nationalOctMap(int yearNum) {
        String ymd = yearNum + "1001";
        int day = getWeekDay(ymd);
        Map<String, Boolean> map = new HashMap<String, Boolean>();
        int[][] correction = { { 30 }, { 29, 30 }, { 28, 29 }, { 28, 11 }, { 27, 10 }, { 9, 10 }, { 9 } };
        for (int i = 0; i < correction[day].length; i++) {
            int corr = correction[day][i];
            if (corr <= 15) {
                String key = yearNum + "10" + convertNum(corr);
                map.put(key, false);
            } else {
                String key = yearNum + "09" + convertNum(corr);
                map.put(key, false);
            }
        }
        int start = 0;
        if (day == 0 || day == 1) {
            start = -1;
        }
        int end = 0;
        if (day == 5) {
            end = 1;
        }
        for (int i = 0 + start; i < 8 + end; i++) {// 国庆节一般为7天
            String curDate = addDay(ymd, i);
            int curDay = getWeekDay(curDate);
            if (curDay > 0 && curDay < 6) {
                map.put(curDate, true);
            }
        }
        return map;
    }
    private static Map<String, Boolean> nationalMap(int yearNum) {
        String ymd = yearNum + "1001";
        int day = getWeekDay(ymd);
        Map<String, Boolean> map = new HashMap<String, Boolean>();
        int[][] correction = { { 30, 8 }, { 29, 14 }, { 29, 12 }, { 28, 11 }, { 10 }, { 26, 9 }, { 8, 9 } };
        if (day > 0 && day < 6) {
            map.put(ymd, true);
        }
        for (int i = 0; i < correction[day].length; i++) {
            int corr = correction[day][i];
            if (corr <= 15) {
                String key = yearNum + "10" + convertNum(corr);
                map.put(key, false);
            } else {
                String key = yearNum + "09" + convertNum(corr);
                map.put(key, false);
            }
        }
        for (int i = 0; i < 7; i++) {// 国庆节一般为7天
            String curDate = addDay(ymd, i);
            int curDay = getWeekDay(curDate);
            if (curDay > 0 && curDay < 6) {
                map.put(curDate, true);
            }
        }
        return map;
    }
    private static String convertNum(int num) {
        if (num < 10) {
            return "0" + num;
        } else {
            return num + "";
        }
    }
    private static Map<String, Boolean> getHistoryMap() {
        Map<String, Boolean> map = new HashMap<String, Boolean>();
        return map;
    }
    private static Map<String, Boolean> newYearLunarMap(int yearNum) {
        Map<String, Boolean> map = new HashMap<String, Boolean>();
        String ymd = yearNum + "0101";
        ymd = convertGregorian(ymd);
        int day = getWeekDay(ymd);
        int[][] correction = { { 6, 7 }, { -2, 6 }, { -3, 12 }, { -3, 10 }, { -4, 9 }, { -5, 8 }, { -6, 7 } };
        int correct = -1;
        if (yearNum == 2014 || yearNum <= 2007) {
            correction = new int[][] { { 6, 7 }, { -2, 6 }, { -3, 12 }, { -3, 10 }, { -4, 9 }, { -5, 8 }, { -6, 7 } };
            correct = 0;
        }
        for (int i = 0; i < correction[day].length; i++) {
            map.put(addDay(ymd, correction[day][i]), false);
        }
        for (int i = 0; i < 7; i++) {
            String curYmd = addDay(ymd, i + correct);
            int dayCur = getWeekDay(curYmd);
            if (dayCur > 0 && dayCur < 6) {
                map.put(curYmd, true);
            }
        }
        return map;
    }
    private static Map<String, Boolean> currentYearMap(Map<String, Boolean> newYearMap,
            Map<String, Boolean> nextYearMap, int yearNum) {
        String yearStr = yearNum + "";
        Set<String> setCur = newYearMap.keySet();
        Set<String> setNext = nextYearMap.keySet();
        Map<String, Boolean> map = new HashMap<String, Boolean>();
        for (String key : setCur) {
            if (key.startsWith(yearStr)) {
                map.put(key, newYearMap.get(key));
            }
        }
        for (String key : setNext) {
            if (key.startsWith(yearStr)) {
                map.put(key, nextYearMap.get(key));
            }
        }
        return map;
    }
    private static Map<String, Boolean> festivalMap(int yearNum, String festival) {
        String ymd = yearNum + festival;
        if (festival.endsWith("L")) {
            festival = festival.substring(0, festival.length() - 1);
            ymd = convertGregorian(ymd);
        } else if ("0405".equals(festival)) {
            ymd = chingming(yearNum);
        }
        return small(ymd);
    }
    private static Map<String, Boolean> gregorianNewYearMap(int yearNum, String festival) {
        String ymd = yearNum + festival;
        return gregorianNewYearSmall(ymd);
    }
    private static String chingming(int yearNum) {
        return yearNum + "040" + qing(yearNum);
    }
    /**
     * 计算清明节的日期(可计算范围: 1700-3100)
     *
     * @param year
     *            需要计算的年份
     * @return 清明节在公历中的日期
     */
    private static int qing(int year) {
        if (year == 2232) {
            return 4;
        }
        if (year < 1700) {
            throw new RuntimeException("1700年以前暂时不支持");
        }
        if (year >= 3100) {
            throw new RuntimeException("3100年以后暂时不支持");
        }
        double[] coefficient = { 5.15, 5.37, 5.59, 4.82, 5.02, 5.26, 5.48, 4.70, 4.92, 5.135, 5.36, 4.60, 4.81, 5.04,
                5.26 };
        int mod = year % 100;
        return (int) (mod * 0.2422 + coefficient[year / 100 - 17] - mod / 4);
    }
    private static Map<String, Boolean> small(String ymd) {
        int day = getWeekDay(ymd);
        Map<String, Boolean> map = new HashMap<String, Boolean>();
        int[][] correction = { { 1 }, {}, { -1, -3 }, { -1, -2, -3, -4 }, { 1, 3 }, {}, { 2 } };
        // 6.取-1 2014年清明 2015年端午 6. 取2 2012年端午
        if (day > 0 && day < 6) {
            map.put(ymd, true);
        }
        if (day == 3) {
            map.put(addDay(ymd, -1), true);
            map.put(addDay(ymd, -2), true);
            map.put(addDay(ymd, -3), false);
            map.put(addDay(ymd, -4), false);
        } else {
            boolean flag = true;
            for (int i = 0; i < correction[day].length; i++) {
                map.put(addDay(ymd, correction[day][i]), flag);
                flag = false;
            }
        }
        return map;
    }
    private static Map<String, Boolean> gregorianNewYearSmall(String ymd) {
        int day = getWeekDay(ymd);
        Map<String, Boolean> map = new HashMap<String, Boolean>();
        int[][] correction = { { 1 }, {}, { 1, 2, 4, 5 }, {}, { 1, 2, 3 }, {}, { 2 } };
        // 6.取-1 2014年清明 2015年端午 6. 取2 2012年端午 0{+1}1{} 2{+1+2 +4b+5b} 3{}
        // 4{+1,+2,+3b}5{}6{+2}
        if (day > 0 && day < 6) {
            map.put(ymd, true);
        }
        if (day == 2) {
            map.put(addDay(ymd, 1), true);
            map.put(addDay(ymd, 2), true);
            map.put(addDay(ymd, 4), false);
            map.put(addDay(ymd, 5), false);
        } else if (day == 3) {
        } else if (day == 4) {
            map.put(addDay(ymd, 1), true);
            map.put(addDay(ymd, 3), false);
        } else {
            boolean flag = true;
            for (int i = 0; i < correction[day].length; i++) {
                map.put(addDay(ymd, correction[day][i]), flag);
                flag = false;
            }
        }
        return map;
    }
    private static int getWeekDay(String ymd) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
        Date date = null;
        try {
            date = sdf.parse(ymd);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        int day = calendar.get(Calendar.DAY_OF_WEEK) - 1;
        return day;
    }
    private static String convertGregorian(String ymd) {// private
        String cnYmd = convertCnYmd(ymd);
        int start = 18;
        int len = 60;// 公历农历按最多相差60天计算。
        for (int i = start; i < start + len; i++) {
            String gregorianDate = addDay(ymd, i);
            String lunarDate = NongLi.getDate(gregorianDate);
            if (cnYmd.equals(lunarDate)) {
                return gregorianDate;
            }
        }
        return null;
    }
    private static String convertCnYmd(String ymd) {// private
        String numArray = "零一二三四五六七八九十";
        String m = ymd.substring(4, 6);
        String d = ymd.substring(6, 8);
        int month = Integer.parseInt(m);
        int day = Integer.parseInt(d);
        String yearStr = "";
        for (int i = 0; i < 4; i++) {
            yearStr += numArray.charAt(ymd.charAt(i) - '0') + "";
        }
        yearStr += "年";
        String monthStr = "";
        if ("11".equals(m)) {
            monthStr = "冬";
        } else if ("12".equals(m)) {
            monthStr = "腊";
        } else if ("01".equals(m)) {
            monthStr = "正";
        } else {
            monthStr = numArray.charAt(month) + "";
        }
        monthStr += "月";
        String dayStr = "";
        if (day <= 10) {
            dayStr = "初" + numArray.charAt(day);
        } else if (day < 20) {
            dayStr = "十" + numArray.charAt(day - 10);
        } else if (day == 20) {
            dayStr = "二十";
        } else if (day == 30) {
            dayStr = "三十";
        } else {
            dayStr = "廿" + numArray.charAt(day - 20);
        }
        return yearStr + monthStr + dayStr;
    }
    private static String addDay(String date, int dayLength) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
        Date dateSrc = null;
        try {
            dateSrc = sdf.parse(date);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        Calendar cal = Calendar.getInstance();
        cal.setTime(dateSrc);
        cal.set(Calendar.DAY_OF_MONTH, cal.get(Calendar.DAY_OF_MONTH) + dayLength);
        return sdf.format(cal.getTime());
    }
    private static String[] read(String fileName) {
        BufferedReader br = null;
        ArrayList<String> list = new ArrayList<String>();
        try {
            br = new BufferedReader(
                    new InputStreamReader(WorkUtils.class.getClassLoader().getResourceAsStream(fileName)));
            String every = null;
            while ((every = br.readLine()) != null) {
                if (!every.startsWith("#")) {
                    list.add(every);
                }
            }
            String[] datas = new String[list.size()];
            for (int i = 0; i < datas.length; i++) {
                datas[i] = list.get(i);
            }
            return datas;
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (br != null) {
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return null;
    }
    private static Map<String, Boolean> weekMapFromFile() {
        Map<String, Boolean> map = new HashMap<String, Boolean>();
        String fileName = "iceweek.txt";
        String[] lines = WorkUtils.read(fileName);
        for (String line : lines) {
            if (line == null || line.length() != 9) {
                continue;
            }
            String key = line.substring(0, 8);
            Boolean value = convertWork(line.substring(8));
            map.put(key, value);
        }
        return map;
    }
    private static Boolean convertWork(String str) {
        if ("b".equals(str)) {
            return false;
        } else if ("x".equals(str)) {
            return true;
        }
        return null;
    }
    private static Map<String, Boolean> filterMap(Map<String, Boolean> map, int year) {
        String yearStr = year + "";
        Map<String, Boolean> newMap = new HashMap<String, Boolean>();
        Set<Entry<String, Boolean>> entrySet = map.entrySet();
        for (Entry<String, Boolean> entry : entrySet) {
            String key = entry.getKey();
            Boolean value = entry.getValue();
            if (key != null && key.startsWith(yearStr)) {
                newMap.put(key, value);
            }
        }
        return newMap;
    }
    /**
     * 提示语
     * @return 提示语
     */
    protected static String warn() {
        return "注意:该算法对于将来的时间仅是预测,并不能完全精确。";
    }
}
flower_city/src/main/java/com/dg/core/util/workday/WorkdayGen.java
New file
@@ -0,0 +1,74 @@
package com.dg.core.util.workday;
import com.iceyyy.workday.WorkUtils;
import java.util.*;
public class WorkdayGen {
    public static void main(String[] args) {
        int year = 2021;
        String code = genYearCode(year);
        System.out.println(code);
    }
    protected static String gen(int year) {
        String yearStr = String.valueOf(year);
        Map<String, Boolean> weekendMap = WorkUtils.weekendMap(yearStr);
        Set<String> keySet = weekendMap.keySet();
        List<String> list = new ArrayList<>(keySet);
        Collections.sort(list);
        StringBuilder sb = new StringBuilder();
        for (String ymd : list) {
            boolean weekendDay = WorkUtils.isWorkendDay(ymd);
            String itemCode = genItemCode(ymd, weekendDay);
            sb.append(itemCode);
        }
        return sb.toString();
    }
    private static String genItemCode(String ymd, boolean weekendDay) {
        StringBuilder sb = new StringBuilder();
        String tab = "        ";
        String nl = "\r\n";
        sb.append(tab);
        sb.append("map.put(\"");
        sb.append(ymd);
        sb.append("\", ");
        sb.append(weekendDay);
        sb.append("); // ");
        sb.append(wordCode(weekendDay));
        sb.append(nl);
        return sb.toString();
    }
    private static String wordCode(boolean weekday) {
        if (weekday) {
            return "休";
        } else {
            return "班";
        }
    }
    private static String genYearCode(int year) {
        StringBuilder sb = new StringBuilder();
        String nl = "\r\n";
        sb.append("package com.iceyyy.icework.presence;" + nl);
        sb.append("" + nl);
        sb.append("import java.util.HashMap;" + nl);
        sb.append("import java.util.Map;" + nl);
        sb.append("");
        sb.append("public class Year" + year + " implements Year20xx {" + nl);
        sb.append("" + nl);
        sb.append("    @Override" + nl);
        sb.append("    public Map<String, Boolean> getYearMap() {" + nl);
        sb.append("        Map<String, Boolean> map = new HashMap<String, Boolean>();" + nl);
        String gen = gen(year);
        sb.append(gen);
        sb.append("        return map;" + nl);
        sb.append("    }" + nl);
        sb.append("" + nl);
        sb.append("}" + nl);
        return sb.toString();
    }
}