Просмотр исходного кода

企业云产业供地的剩余工作日去除节假日

huZhiHao 5 лет назад
Родитель
Сommit
6cf9062c03

+ 46 - 0
sql/20200506.sql

@@ -0,0 +1,46 @@
+/*
+ Navicat Premium Data Transfer
+
+ Source Server         : 47
+ Source Server Type    : MySQL
+ Source Server Version : 50725
+ Source Host           : 47.105.241.108:33060
+ Source Schema         : service_platform
+
+ Target Server Type    : MySQL
+ Target Server Version : 50725
+ File Encoding         : 65001
+
+ Date: 06/05/2020 17:24:45
+*/
+
+SET NAMES utf8mb4;
+SET FOREIGN_KEY_CHECKS = 0;
+
+-- ----------------------------
+-- Table structure for sys_config
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_config`;
+CREATE TABLE `sys_config`  (
+  `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID',
+  `config_name` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '名称',
+  `config_key` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '参数键',
+  `config_value` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '参数值',
+  `create_time` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建时间',
+  `update_time` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '更新时间',
+  `create_by` int(20) NULL DEFAULT NULL,
+  `update_by` int(20) NULL DEFAULT NULL,
+  `create_name` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+  `update_name` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+  `del_flag` tinyint(11) NULL DEFAULT NULL,
+  PRIMARY KEY (`id`) USING BTREE,
+  UNIQUE INDEX `uniq_key`(`config_key`) USING BTREE COMMENT 'key 唯一键'
+) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '系统参数表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of sys_config
+-- ----------------------------
+INSERT INTO `sys_config` VALUES (1, '2020年节假日数据信息', 'year_2020', '{\"0808\":1,\"0809\":1,\"0130\":1,\"1220\":1,\"0131\":1,\"0127\":2,\"0523\":1,\"0128\":1,\"0524\":1,\"0920\":1,\"0125\":2,\"0126\":2,\"1213\":1,\"0124\":1,\"1212\":1,\"0926\":1,\"0406\":1,\"0802\":1,\"0129\":1,\"0404\":2,\"1219\":1,\"0405\":1,\"0801\":1,\"1107\":1,\"1227\":1,\"0411\":1,\"1226\":1,\"0412\":1,\"0530\":1,\"0531\":1,\"1101\":1,\"0419\":1,\"0815\":1,\"0816\":1,\"0418\":1,\"1108\":1,\"1121\":1,\"0425\":1,\"0301\":1,\"1115\":1,\"1114\":1,\"0829\":1,\"0705\":1,\"0307\":1,\"0308\":1,\"0704\":1,\"0822\":1,\"0823\":1,\"1011\":1,\"0314\":1,\"1008\":1,\"1129\":1,\"0315\":1,\"0711\":1,\"1007\":1,\"1128\":1,\"1006\":1,\"0830\":1,\"1005\":1,\"1004\":1,\"1003\":2,\"1002\":2,\"1001\":2,\"1122\":1,\"0718\":1,\"0719\":1,\"0712\":1,\"1018\":1,\"0202\":1,\"1017\":1,\"0321\":1,\"0201\":1,\"0322\":1,\"0606\":1,\"0607\":1,\"0208\":1,\"0329\":1,\"0725\":1,\"0209\":1,\"0726\":1,\"0328\":1,\"1031\":1,\"0215\":1,\"0216\":1,\"1025\":1,\"1024\":1,\"0613\":1,\"0614\":1,\"0105\":1,\"0501\":2,\"0502\":1,\"0620\":1,\"0104\":1,\"0621\":1,\"0101\":2,\"0222\":1,\"0223\":1,\"0905\":1,\"0906\":1,\"0505\":1,\"0626\":1,\"0627\":1,\"0503\":1,\"0229\":1,\"0504\":1,\"0625\":2,\"0919\":1,\"1206\":1,\"1205\":1,\"0510\":1,\"0112\":1,\"0111\":1,\"0516\":1,\"0912\":1,\"0517\":1,\"0913\":1,\"0118\":1}', NULL, NULL, NULL, NULL, NULL, NULL, 0);
+INSERT INTO `sys_config` VALUES (2, '期望的工作日当日截止时间', 'expect_day_end', '17:00:00', NULL, NULL, NULL, NULL, NULL, NULL, 0);
+
+SET FOREIGN_KEY_CHECKS = 1;

+ 170 - 18
src/main/java/platform/common/util/DateUtil.java

@@ -1,15 +1,16 @@
 package platform.common.util;
 
 
-import java.sql.Timestamp;
 import java.text.DateFormat;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.TimeZone;
+import java.util.*;
 
 import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import platform.modules.sys.service.SysConfigService;
+
+import javax.annotation.PostConstruct;
 
 /**
  * Created by luohaifeng on 2017/8/9.
@@ -288,6 +289,47 @@ public class DateUtil {
         return false;
     }
 
+    public static String getDayStart(String datetime) throws ParseException {
+        if (CommonUtils.isNull(datetime)) {
+            return null;
+        } else {
+            Date date = parseTimeStringToDate(datetime.substring(0, 10), YYYY_MM_DD);
+            String dayStart = datetime.substring(0, 10) + " 00:00:00";
+            return dayStart;
+        }
+    }
+
+    public static String getDayEnd(String datetime) throws ParseException {
+        if (CommonUtils.isNull(datetime)) {
+            return null;
+        } else {
+            Date date = parseTimeStringToDate(datetime.substring(0, 10), YYYY_MM_DD);
+            String dayEnd = datetime.substring(0, 10) + " 23:59:59";
+            return dayEnd;
+        }
+    }
+
+    public static String getTomorrow() {
+        Date date = new Date();
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+        calendar.add(5, 1);
+        date = calendar.getTime();
+        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
+        String dateString = formatter.format(date);
+        return dateString;
+    }
+
+    public static String getAfterDayDate(int len) {
+        Date date = new Date();
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+        calendar.add(5, len);
+        date = calendar.getTime();
+        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
+        String dateString = formatter.format(date);
+        return dateString;
+    }
 
     // 获得当天0点时间
     public static Date getTimesmorning() {
@@ -402,32 +444,66 @@ public class DateUtil {
     }
 
     //
-    public static String getTimeDiff(String create_time, String deal_time, Integer overDay) throws ParseException {
+    public static String getTimeDiff(String create_time, String deal_time, Integer overDay, String holiday) throws ParseException {
 
         String overTimeStr = "";
         if (null == overDay) {
             overDay = 5;
         }
+
         if (deal_time != null && deal_time != "") {
 
             if (StringUtils.isNotBlank(create_time) && StringUtils.isNotBlank(deal_time)) {
                 Calendar overTime = Calendar.getInstance();
                 Calendar dealTime = Calendar.getInstance();
-                overTime.setTime(DateUtil.parseTimeStringToDate(create_time, "yyyy-MM-dd HH:mm:ss"));
-                overTime.add(Calendar.DATE, overDay);
-                dealTime.setTime(DateUtil.parseTimeStringToDate(deal_time, "yyyy-MM-dd HH:mm:ss"));
 
+//                overTime.setTime(DateUtil.parseTimeStringToDate(create_time, "yyyy-MM-dd HH:mm:ss"));
+//                overTime.add(Calendar.DATE, overDay);
+//                overTime.set(Calendar.MINUTE, 0);
+//                overTime.set(Calendar.SECOND, 0);
+                int i = 0, j = 0;
+                while (i < overDay) {
+                    j++;
+                    overTime.setTime(DateUtil.parseTimeStringToDate(create_time, "yyyy-MM-dd HH:mm:ss"));
+                    overTime.add(Calendar.DATE, j);
+
+                    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MMdd");
+                    String deadline = simpleDateFormat.format(overTime.getTime());
+                    if (!holiday.contains(deadline)) {
+                        i++;
+                    }
+                }
+                overTime.set(Calendar.HOUR_OF_DAY, 23);
                 overTime.set(Calendar.MINUTE, 0);
                 overTime.set(Calendar.SECOND, 0);
+
+                dealTime.setTime(DateUtil.parseTimeStringToDate(deal_time, "yyyy-MM-dd HH:mm:ss"));
                 dealTime.set(Calendar.MINUTE, 0);
                 dealTime.set(Calendar.SECOND, 0);
 
+                String deadline = getTimeString(overTime.getTime());
+                String dealDate = getTimeString(dealTime.getTime());
+
                 //得到两个日期相差的小时数
                 int hours = ((int) (overTime.getTime().getTime() / 1000) - (int) (dealTime.getTime().getTime() / 1000)) / 3600;
-                if (hours / 24 > 0) {
-                    overTimeStr = "提前" + String.valueOf((int) Math.floor(hours / 24)) + "个工作日完成";//+(hours%24)+"小时完成";
+                if (hours > 24) {
+                    int count = (int) Math.floor(hours / 24) - 1;
+                    List<String> days = getDays(dealDate, deadline, "yyyy-MM-dd HH:mm:ss", "MMdd");
+                    for (String day : days) {
+                        if (holiday.contains(day)) {
+                            count--;
+                        }
+                    }
+                    overTimeStr = "提前" + count + "个工作日完成";
                 } else {
-                    overTimeStr = "超出" + String.valueOf((-1) * (int) Math.floor(hours / 24)) + "个工作日完成";//+(hours%24)+"小时完成";
+                    int count =(int) Math.abs(Math.ceil(hours / 24) - 1);
+                    List<String> days = getDays(deadline, dealDate, "yyyy-MM-dd HH:mm:ss", "MMdd");
+                    for (String day : days) {
+                        if (holiday.contains(day)) {
+                            count--;
+                        }
+                    }
+                    overTimeStr = "超出" + count + "个工作日完成";
                 }
             }
             return overTimeStr;
@@ -435,24 +511,100 @@ public class DateUtil {
             if (StringUtils.isNotBlank(create_time)) {
                 Calendar overTime = Calendar.getInstance();
                 Calendar now = Calendar.getInstance();
-                overTime.setTime(DateUtil.parseTimeStringToDate(create_time, "yyyy-MM-dd HH:mm:ss"));
-                overTime.add(Calendar.DATE, overDay);
-                now.setTime(new Date());
-
+//                overTime.setTime(DateUtil.parseTimeStringToDate(create_time, "yyyy-MM-dd HH:mm:ss"));
+//                overTime.add(Calendar.DATE, overDay);
+//                overTime.set(Calendar.MINUTE, 0);
+//                overTime.set(Calendar.SECOND, 0);
+
+                int i = 0, j = 0;
+                while (i < overDay) {
+                    j++;
+                    overTime.setTime(DateUtil.parseTimeStringToDate(create_time, "yyyy-MM-dd HH:mm:ss"));
+                    overTime.add(Calendar.DATE, j);
+
+                    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MMdd");
+                    String deadline = simpleDateFormat.format(overTime.getTime());
+                    if (!holiday.contains(deadline)) {
+                        i++;
+                    }
+                }
+                overTime.set(Calendar.HOUR_OF_DAY, 23);
                 overTime.set(Calendar.MINUTE, 0);
                 overTime.set(Calendar.SECOND, 0);
+
+                now.setTime(new Date());
                 now.set(Calendar.MINUTE, 0);
                 now.set(Calendar.SECOND, 0);
 
+                String deadline = getTimeString(overTime.getTime());
+                String nowDate = getTimeString(new Date());
+
                 //得到两个日期相差的小时数
                 int hours = ((int) (overTime.getTime().getTime() / 1000) - (int) (now.getTime().getTime() / 1000)) / 3600;
-                if (hours / 24 > 0) {
-                    overTimeStr = "剩余" + String.valueOf((int) Math.floor(hours / 24)) + "个工作日";//+(hours%24)+"小时";
+                if (hours > 24) {
+                    int count = (int) Math.ceil(hours / 24) - 1;
+                    List<String> days = getDays(nowDate, deadline, "yyyy-MM-dd HH:mm:ss", "MMdd");
+                    for (String day : days) {
+                        if (holiday.contains(day)) {
+                            count--;
+                        }
+                    }
+                    overTimeStr = "剩余" + count + "个工作日";
                 } else {
-                    overTimeStr = "超出" + String.valueOf((-1) * (int) Math.floor(hours / 24)) + "个工作日";//+(hours%24)+"小时";
+                    int count = (int) Math.abs(Math.ceil(hours / 24) - 1);
+                    List<String> days = getDays(deadline, nowDate, "yyyy-MM-dd HH:mm:ss", "MMdd");
+                    for (String day : days) {
+                        if (holiday.contains(day)) {
+                            count--;
+                        }
+                    }
+                    overTimeStr = "超出" + count + "个工作日";
                 }
             }
             return overTimeStr;
         }
     }
+
+    /**
+     * 获取两个日期之间的所有日期
+     *
+     * @param startTime 开始日期
+     * @param endTime   结束日期
+     * @return
+     */
+    public static List<String> getDays(String startTime, String endTime, String pattern1, String pattern2) {
+
+        // 返回的日期集合
+        List<String> days = new ArrayList<String>();
+
+        if (pattern1 == null || pattern1 == "") {
+            pattern1 = "yyyy-MM-dd";
+        }
+        if (pattern2 == null || pattern2 == "") {
+            pattern2 = "yyyy-MM-dd";
+        }
+
+        DateFormat dateFormat1 = new SimpleDateFormat(pattern1);
+        DateFormat dateFormat2 = new SimpleDateFormat(pattern2);
+        try {
+            Date start = dateFormat1.parse(startTime);
+            Date end = dateFormat1.parse(endTime);
+
+            Calendar tempStart = Calendar.getInstance();
+            tempStart.setTime(start);
+
+            Calendar tempEnd = Calendar.getInstance();
+            tempEnd.setTime(end);
+            tempEnd.add(Calendar.DATE, +0);
+            while (tempStart.before(tempEnd)) {
+                days.add(dateFormat2.format(tempStart.getTime()));
+                tempStart.add(Calendar.DAY_OF_YEAR, 1);
+            }
+
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
+
+        return days;
+    }
 }

+ 125 - 0
src/main/java/platform/common/util/holiday/WorkDayHandler.java

@@ -0,0 +1,125 @@
+package platform.common.util.holiday;
+
+import com.alibaba.fastjson.JSONObject;
+import com.xiaoleilu.hutool.http.HttpUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import platform.common.exception.BaseException;
+import platform.common.util.DateUtil;
+
+import java.text.MessageFormat;
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * @description: 工作日处理类
+ * 使用api 文档地址 http://tool.bitefu.net/showdoc/web/?spm=a2c4e.10696291.0.0.317e19a4VS9JbO#/5?page_id=22
+ * @author: wangjiang
+ * @create: 2020-04-01 10:59
+ */
+public class WorkDayHandler {
+    private static final Logger logger = LoggerFactory.getLogger(WorkDayHandler.class);
+
+    private static final String apiUrl = "http://tool.bitefu.net/jiari/vip.php?d={0}&type=0&apikey=123456";
+
+    public static String getCurrentYearWorkDayString(String year) {
+        String httpUrl = MessageFormat.format(apiUrl, year);
+        String ret = HttpUtil.get(httpUrl);
+        JSONObject jsonObject = JSONObject.parseObject(ret);
+        Integer status = Integer.parseInt((String) jsonObject.get("status"));
+        if (status == 0) {
+//            throw new BaseException("获取年节假日列表错误");
+            return "";
+        }
+        List dayList = new ArrayList();
+        String dayString = jsonObject.getJSONObject("data").get(year).toString();
+//        for (String s : object.keySet()) {
+//            dayList.add(s);
+//        }
+
+        return dayString;
+    }
+
+    public static List<String> getCurrentYearWorkDayList(String year) {
+
+        String dayString = getCurrentYearWorkDayString(year);
+        return getDayStringList(year, dayString);
+    }
+
+    public static List<String> getDayStringList(String year, String dayString) {
+        List dayList = new ArrayList();
+        JSONObject jsonObject = JSONObject.parseObject(dayString);
+        for (String s : jsonObject.keySet()) {
+            String month = s.substring(0, 2);
+            String day = s.substring(2);
+            String conDay = MessageFormat.format("{0}-{1}-{2}", year, month, day);
+            dayList.add(conDay);
+        }
+
+        return dayList;
+    }
+
+    /**
+     * 获取某个日期的几个工作日后的日期 不算今天
+     *
+     * @param startDay 起始日期
+     * @param len      几个工作日
+     */
+    public static String getAfterWorkdayDate(Date startDay, Integer len, String year, String dayString) throws ParseException {
+        int count = 1;
+        String date = DateUtil.getTime(DateUtil.getNowDate());
+        while (len > 0) {
+            date = DateUtil.getAfterDayDate(count);
+            List<String> holidayList = getCurrentYearAndMonthWorkDayList(year, dayString);
+
+            if (!isHoliday(date, holidayList)) {
+                len--;
+            }
+            count++;
+        }
+        return date;
+    }
+
+    private static Boolean isHoliday(String date, List<String> holidayList) throws ParseException {
+
+        Boolean isHoliday = false;
+        for (String day : holidayList) {
+            if (Objects.equals(date, day)) {
+                isHoliday = true;
+                break;
+            }
+        }
+        return isHoliday;
+    }
+
+    public static List<String> getCurrentYearAndMonthWorkDayList(String currentYear, String dayString) throws ParseException {
+        String currentMonth = DateUtil.getCurrentMonth();
+        if (currentMonth.length() == 1) currentMonth = "0" + currentMonth;
+        JSONObject jsonObject = JSONObject.parseObject(dayString);
+
+        List dayList = new ArrayList();
+        for (String s : jsonObject.keySet()) {
+            String month = s.substring(0, 2);
+            if (Objects.equals(month, currentMonth)) {
+                String day = s.substring(2);
+                String conDay = MessageFormat.format("{0}-{1}-{2}", currentYear, month, day);
+                dayList.add(conDay);
+            }
+        }
+        return dayList;
+    }
+
+    public static void main(String[] args) {
+        String dayString = getCurrentYearWorkDayString("2020");
+        try {
+            // 7个工作日后的事件
+            String date = getAfterWorkdayDate(DateUtil.getNowDate(), 7, "2020", dayString);
+            System.out.println(date);
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
+    }
+}

+ 14 - 0
src/main/java/platform/common/util/holiday/WorkDayResult.java

@@ -0,0 +1,14 @@
+package platform.common.util.holiday;
+
+import lombok.Data;
+
+/**
+ * @description:
+ * @author: wangjiang
+ * @create: 2020-04-01 11:08
+ */
+@Data
+public class WorkDayResult {
+    private Boolean status; // 1 成功 0 失败
+    private String Data;
+}

+ 50 - 10
src/main/java/platform/modules/government/service/IndustrialLandSupplyDetailService.java

@@ -78,7 +78,7 @@ public class IndustrialLandSupplyDetailService extends BaseService<IndustrialLan
     private DictionaryItemService dictionaryItemService;
 
     @Autowired
-    private RoleService roleService;
+    private SysConfigService sysConfigService;
 
     private static String FEEDBACK_TIME = "1";
 
@@ -163,7 +163,12 @@ public class IndustrialLandSupplyDetailService extends BaseService<IndustrialLan
                                 }
                             }
                         }
-                        entity.setRemain_time(DateUtil.getTimeDiff(industrialLandSupplyConsultation.getConsultation_time(), dealTime, days));
+                        entity.setRemain_time(DateUtil.getTimeDiff(
+                                industrialLandSupplyConsultation.getConsultation_time(),
+                                dealTime,
+                                days,
+                                sysConfigService.getValueByKey("year_" + DateUtil.getCurrentDateString("yyyy"))
+                        ));
                     }
                 } else if (Objects.equals(Constant.LandSupplyApproveStatus.COMMERCE_PENDING_SUMMARY, entity.getApprove_status())) {
 
@@ -195,7 +200,12 @@ public class IndustrialLandSupplyDetailService extends BaseService<IndustrialLan
                                 }
                             }
                         }
-                        entity.setRemain_time(DateUtil.getTimeDiff(approve.getCreate_time(), dealTime, days));
+                        entity.setRemain_time(DateUtil.getTimeDiff(
+                                approve.getCreate_time(),
+                                dealTime,
+                                days,
+                                sysConfigService.getValueByKey("year_" + DateUtil.getCurrentDateString("yyyy"))
+                        ));
                     }
                 } else if (Objects.equals(Constant.LandSupplyApproveStatus.LAND_SUPPLY_PENDIND_FEEDBACK, entity.getApprove_status())
                         || Objects.equals("a", entity.getApprove_status())) {
@@ -230,7 +240,12 @@ public class IndustrialLandSupplyDetailService extends BaseService<IndustrialLan
                                 }
                             }
                         }
-                        entity.setRemain_time(DateUtil.getTimeDiff(industrialLandSupplyDistribution.getDistribute_time(), dealTime, days));
+                        entity.setRemain_time(DateUtil.getTimeDiff(
+                                industrialLandSupplyDistribution.getDistribute_time(),
+                                dealTime,
+                                days,
+                                sysConfigService.getValueByKey("year_" + DateUtil.getCurrentDateString("yyyy"))
+                        ));
                     }
                 } else if (Objects.equals(Constant.LandSupplyApproveStatus.LAND_SUPPLY_PENDIND_SUMMARY, entity.getApprove_status())) {
 
@@ -262,7 +277,12 @@ public class IndustrialLandSupplyDetailService extends BaseService<IndustrialLan
                                 }
                             }
                         }
-                        entity.setRemain_time(DateUtil.getTimeDiff(approve.getCreate_time(), dealTime, days));
+                        entity.setRemain_time(DateUtil.getTimeDiff(
+                                approve.getCreate_time(),
+                                dealTime,
+                                days,
+                                sysConfigService.getValueByKey("year_" + DateUtil.getCurrentDateString("yyyy"))
+                        ));
                     }
                 }
 
@@ -511,7 +531,7 @@ public class IndustrialLandSupplyDetailService extends BaseService<IndustrialLan
             if (!CollectionUtils.isEmpty(approvals)) {
                 dealTime = approvals.get(approvals.size() - 1).getCreate_time();
                 try {
-                    Date d1 = DateUtil.parseTimeStringToDate(entity.getUpdate_time(), "yyyy-MM-dd hh:mm:ss");
+                    Date d1 = DateUtil.parseTimeStringToDate(entity.getUpdate_time() == null ? "1970-01-01 00:00:00" : entity.getUpdate_time(), "yyyy-MM-dd hh:mm:ss");
                     Date d2 = DateUtil.parseTimeStringToDate(dealTime, "yyyy-MM-dd hh:mm:ss");
                     if (d2.before(d1)) {
                         dealTime = null;
@@ -521,7 +541,12 @@ public class IndustrialLandSupplyDetailService extends BaseService<IndustrialLan
                 }
             }
 //            landSupplyConsultation.setRemain_time(DateUtil.getTimeDiff(landSupplyConsultation.getCreate_time(), dealTime, days));
-            landSupplyConsultation.setRemain_time(DateUtil.getTimeDiff(landSupplyConsultation.getCreate_time(), landSupplyConsultation.getUpdate_time(), days));
+            landSupplyConsultation.setRemain_time(DateUtil.getTimeDiff(
+                    landSupplyConsultation.getCreate_time(),
+                    landSupplyConsultation.getUpdate_time(),
+                    days,
+                    sysConfigService.getValueByKey("year_" + DateUtil.getCurrentDateString("yyyy"))
+            ));
         }
         entity.setConsultationList(industrialLandSupplyConsultationList);
         //分发列表
@@ -578,7 +603,12 @@ public class IndustrialLandSupplyDetailService extends BaseService<IndustrialLan
                 }
             }
 //            landSupplyDistribution.setRemain_time(DateUtil.getTimeDiff(landSupplyDistribution.getCreate_time(), dealTime, days));
-            landSupplyDistribution.setRemain_time(DateUtil.getTimeDiff(landSupplyDistribution.getCreate_time(), landSupplyDistribution.getUpdate_time(), days));
+            landSupplyDistribution.setRemain_time(DateUtil.getTimeDiff(
+                    landSupplyDistribution.getCreate_time(),
+                    landSupplyDistribution.getUpdate_time(),
+                    days,
+                    sysConfigService.getValueByKey("year_" + DateUtil.getCurrentDateString("yyyy"))
+            ));
         }
         entity.setDistributionList(industrialLandSupplyDistributionList);
 
@@ -610,7 +640,12 @@ public class IndustrialLandSupplyDetailService extends BaseService<IndustrialLan
                     e.printStackTrace();
                 }
             }
-            entity.setSummary_remain_time(DateUtil.getTimeDiff(approve.getCreate_time(), dealTime, days));
+            entity.setSummary_remain_time(DateUtil.getTimeDiff(
+                    approve.getCreate_time(),
+                    dealTime,
+                    days,
+                    sysConfigService.getValueByKey("year_" + DateUtil.getCurrentDateString("yyyy"))
+            ));
         }
 
         //会审剩余时间
@@ -639,7 +674,12 @@ public class IndustrialLandSupplyDetailService extends BaseService<IndustrialLan
                     e.printStackTrace();
                 }
             }
-            entity.setSummary_remain_time(DateUtil.getTimeDiff(approve.getCreate_time(), dealTime, days));
+            entity.setSummary_remain_time(DateUtil.getTimeDiff(
+                    approve.getCreate_time(),
+                    dealTime,
+                    days,
+                    sysConfigService.getValueByKey("year_" + DateUtil.getCurrentDateString("yyyy"))
+            ));
         }
         List<DepartmentDto> consulDepartmentList = new ArrayList<>();
         List<Department> departmentList = consulDepartmentList();

+ 8 - 0
src/main/java/platform/modules/sys/dao/SysConfigDao.java

@@ -0,0 +1,8 @@
+package platform.modules.sys.dao;
+
+import platform.common.base.mapper.BaseMapper;
+import platform.modules.sys.entity.SysConfig;
+
+public interface SysConfigDao extends BaseMapper<SysConfig> {
+
+}

+ 20 - 0
src/main/java/platform/modules/sys/entity/SysConfig.java

@@ -0,0 +1,20 @@
+package platform.modules.sys.entity;
+
+import lombok.Data;
+import platform.common.base.model.BaseEntity;
+
+import javax.persistence.Table;
+
+@Data
+@Table(name = "sys_config")
+public class SysConfig extends BaseEntity {
+
+    //名称
+    private String configName;
+
+    //参数键
+    private String configKey;
+
+    //参数值
+    private String configValue;
+}

+ 78 - 0
src/main/java/platform/modules/sys/service/SysConfigService.java

@@ -0,0 +1,78 @@
+package platform.modules.sys.service;
+
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+import platform.common.base.service.BaseService;
+import platform.common.exception.BaseException;
+import platform.common.util.CommonUtils;
+import platform.common.util.holiday.WorkDayHandler;
+import platform.modules.sys.entity.SysConfig;
+
+import java.util.List;
+
+@Service
+public class SysConfigService extends BaseService<SysConfig> {
+
+    private static final String WORKDAY_PREFIX = "year_";
+
+    public boolean baseSave(SysConfig entity) {
+        return saveSelective(entity) > 0;
+    }
+
+    public Boolean addYearWorkDay(String year) {
+        SysConfig config;
+        if (existYearData(year)) {
+            config = getByYear(year);
+        } else {
+            config = new SysConfig();
+        }
+        config.setConfigKey(WORKDAY_PREFIX + year);
+        config.setConfigValue(WorkDayHandler.getCurrentYearWorkDayString(year));
+        config.setConfigName(year + "年节假日数据信息");
+        if(config.getConfigValue()==""){
+            return false;
+        }
+        if (config.getId() != null) {
+            return updateSelective(config) > 0;
+        }
+        return saveSelective(config) > 0;
+    }
+
+    private boolean existYearData(String year) {
+        SysConfig sysConfig = new SysConfig();
+        sysConfig.setConfigKey(WORKDAY_PREFIX + year);
+        List<SysConfig> list = this.findListByWhere(sysConfig);
+        if (CollectionUtils.isEmpty(list)) {
+            return false;
+        }
+        return true;
+    }
+
+    private SysConfig getByYear(String year) {
+        SysConfig sysConfig = new SysConfig();
+        sysConfig.setConfigKey(WORKDAY_PREFIX + year);
+        return this.findOne(sysConfig);
+    }
+
+    private SysConfig getByKey(String key) {
+        SysConfig sysConfig = new SysConfig();
+        sysConfig.setConfigKey(key);
+        return this.findOne(sysConfig);
+    }
+
+    public String getYearWorkDay(String year) {
+        SysConfig configEntity = getByYear(year);
+        if (CommonUtils.isNull(configEntity)) {
+            throw new BaseException("没有" + year + "年的节假日信息");
+        }
+        return configEntity.getConfigValue();
+    }
+
+    public String getValueByKey(String key) {
+        SysConfig configEntity = getByKey(key);
+        if (CommonUtils.isNull(configEntity)) {
+            throw new BaseException("没有key:" + key + " 的信息");
+        }
+        return configEntity.getConfigValue();
+    }
+}

+ 12 - 0
src/main/java/platform/modules/sys/task/Task.java

@@ -14,6 +14,8 @@ import platform.modules.build.entity.Company;
 import platform.modules.build.service.*;
 import platform.modules.government.entity.CompanyReport;
 import platform.modules.government.service.CompanyReportService;
+import platform.modules.sys.entity.SysConfig;
+import platform.modules.sys.service.SysConfigService;
 
 import java.util.Date;
 import java.util.List;
@@ -51,6 +53,9 @@ public class Task {
     @Autowired
     private Environment environment;
 
+    @Autowired
+    private SysConfigService sysConfigService;
+
     @Scheduled(cron = "0 0/1 * * * ?") // 每分钟执行一次
     public void generateMap() throws Exception {
         //内网
@@ -147,4 +152,11 @@ public class Task {
     public void work() throws Exception {
         System.out.println("执行调度任务:" + new Date());
     }
+
+    @Scheduled(cron = "0 0 12 * * ?") // 每分钟执行一次
+    public void getHoliday() {
+
+        String year = DateUtil.getCurrentDateString("yyyy");
+        sysConfigService.addYearWorkDay(year);
+    }
 }

+ 5 - 0
src/main/resources/mapper/sys/SysConfigDao.xml

@@ -0,0 +1,5 @@
+<?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="platform.modules.sys.dao.SysConfigDao">
+
+</mapper>

+ 28 - 0
src/test/java/com/Holiday.java

@@ -0,0 +1,28 @@
+package com;
+
+import com.alibaba.fastjson.JSONObject;
+import com.aliyuncs.exceptions.ClientException;
+import platform.common.Constant;
+import platform.common.util.AlibabaSMSUtil;
+import platform.common.util.holiday.WorkDayHandler;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Author :huZhiHao
+ * @Date :Created in 2020/4/7 16:46
+ * @Description: TODO
+ * @Modified By:
+ * @Version: v0.0.1
+ */
+public class Holiday {
+
+    public static void main(String[] args) {
+
+        List<String> list = WorkDayHandler.getCurrentYearWorkDayList("2020");
+        String str = WorkDayHandler.getCurrentYearWorkDayString("2020");
+    }
+}