From a054cfc2a4b0fc8d0910151acdb24aee075aa604 Mon Sep 17 00:00:00 2001 From: sy Date: Mon, 29 Apr 2024 16:05:45 +0800 Subject: [PATCH] =?UTF-8?q?=E8=80=83=E5=8B=A4=EF=BC=8C=E4=BC=81=E4=B8=9A?= =?UTF-8?q?=E6=97=A5=E5=8E=86=E5=88=9D=E5=A7=8B=E5=8C=96=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E9=9C=80=E6=B1=82=E5=8F=98=E6=9B=B4=EF=BC=8C=E9=80=82=E9=85=8D?= =?UTF-8?q?=E5=8D=95=E5=8F=8C=E4=BC=91=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/EnterpriseCalendarServiceImpl.java | 87 +++++++++++++++++-- 1 file changed, 78 insertions(+), 9 deletions(-) diff --git a/src/com/engine/attendance/workflow/service/impl/EnterpriseCalendarServiceImpl.java b/src/com/engine/attendance/workflow/service/impl/EnterpriseCalendarServiceImpl.java index 9eab043..2102e42 100644 --- a/src/com/engine/attendance/workflow/service/impl/EnterpriseCalendarServiceImpl.java +++ b/src/com/engine/attendance/workflow/service/impl/EnterpriseCalendarServiceImpl.java @@ -25,7 +25,28 @@ public class EnterpriseCalendarServiceImpl extends Service implements Enterprise //查询所属机构 String sql = "select * from uf_jcl_kq_rlmc where id = " + calendarId; Map data = DbTools.getSqlToMap(sql); + //所属机构 String org = Util.null2String(data.get("szjg")); + //单双休设置相关信息 + //单双休设置,标准双休-0,单双休-1,单休-2 + String restDaySetting = Util.null2String(data.get("dxzsz")); + //双周休息日,周一-周日,0-6 + String doubleRestDays = Util.null2String(data.get("dzxxr")); + //单周休息日,周一-周日,0-6 + String singleRestDays = Util.null2String(data.get("xzxxr")); + //单双休轮转设置,先单后双-0,先双后单-1 + String restDayTransSetting = Util.null2String(data.get("dxzz")); + //是否按上一年继续轮转 + String transContinue= Util.null2String(data.get("asynjx")); + //在单双周轮换时,判断第一周的休息日情况 + boolean doubleRestSign = true; + if (restDaySetting.equals("1")) { + doubleRestSign = restDayTransSetting.equals("1"); + if (transContinue.equals("1")) { + doubleRestSign = checkFirstWeekRest(year, calendarId, doubleRestSign); + } + } + //查询formmodeid Map formModeIdMap = Utils.getFormmodeIdMap(); String formModeId = formModeIdMap.get("uf_jcl_kq_rlxx"); @@ -48,6 +69,27 @@ public class EnterpriseCalendarServiceImpl extends Service implements Enterprise dateInfo.put("rlmc", calendarId); dateInfo.put("nd", yearStr); dateInfo.put("szjg", org); + //判断日历设置是否有单双休相关数值,并修改日期类型 + //双休时,判断双休休息日是否包括当前日期的星期值,休息日类型低于节假日类型 + if ("0".equals(restDaySetting) && doubleRestDays.contains(dateInfo.get("xq").toString()) && !"1".equals(dateInfo.get("rqlx"))) { + dateInfo.put("rqlx", "2"); + } + //单休时,判断单休休息日是否包括当前日期的星期值,休息日类型低于节假日类型 + else if ("2".equals(restDaySetting) && singleRestDays.contains(dateInfo.get("xq").toString()) && !"1".equals(dateInfo.get("rqlx"))) { + dateInfo.put("rqlx", "2"); + } + //单双休时,判断当前周是单休还是双休,并在各自得情况下判断休息日是否包括当前日期的星期值,休息日类型低于节假日类型 + else if ("1".equals(restDaySetting)) { + if (doubleRestSign && doubleRestDays.contains(dateInfo.get("xq").toString()) && !"1".equals(dateInfo.get("rqlx"))) { + dateInfo.put("rqlx", "2"); + } else if (!doubleRestSign && singleRestDays.contains(dateInfo.get("xq").toString()) && !"1".equals(dateInfo.get("rqlx"))) { + dateInfo.put("rqlx", "2"); + } + //单双休时,每一周都要轮换单双休状态 + if ("6".equals(dateInfo.get("xq"))) { + doubleRestSign = !doubleRestSign; + } + } dateInfoList.add(dateInfo); calendar.add(Calendar.DAY_OF_MONTH, 1); } @@ -64,6 +106,34 @@ public class EnterpriseCalendarServiceImpl extends Service implements Enterprise return new HashMap<>(); } + private boolean checkFirstWeekRest(int year, String calendarId, boolean doubleRestSign) { + Calendar calendar =Calendar.getInstance(); + calendar.set(year, Calendar.JANUARY, 1); + String firstDayWeek = getWeek(calendar); + int lastYear = year -1; + int firstIndex = Integer.parseInt(firstDayWeek); + //获取目标年度第一天所在周的之前的一周日期 + List lastWeekDays = new ArrayList<>(); + for (int i = 1; i <= 7; i++) { + lastWeekDays.add(lastYear + "-12-" + (31 - firstIndex)); + firstIndex++; + } + //查询上一步中查询的日期中有几个公休日 + String sql = "select * from uf_jcl_kq_rlxx where rlmc = " + calendarId + " and nd =" + lastYear+ " and rq in ('"+String.join("','",lastWeekDays)+"')"; + List> data = DbTools.getSqlToList(sql); + int restDayNum = 0; + if (data.size() > 0) { + for (Map map : data) { + if (Util.null2String(map.get("rqlx")).equals("2")) { + restDayNum++; + } + } + return restDayNum < 2; + } else { + return doubleRestSign; + } + } + private Map createDateInfo(Calendar calendar) { Map dateInfo = new HashMap<>(); // 获取阳历年-月-日 @@ -73,7 +143,7 @@ public class EnterpriseCalendarServiceImpl extends Service implements Enterprise //获取农历日期 LunarCalendar lunarCalendar = new LunarCalendar(calendar); String lunarDate = lunarCalendar.traditionLunarDay(); - //获取目标日期是周几 + //获取目标日期是周几, 此功能中周一-周日为0-6 String weekIndex = getWeek(calendar); //获取日期特定名称,节气或节日 String specialDay = ""; @@ -114,11 +184,11 @@ public class EnterpriseCalendarServiceImpl extends Service implements Enterprise break; } } - if (!"1".equals(dayType)) { - if ("5".equals(weekIndex) || "6".equals(weekIndex)) { - dayType = "2"; - } - } +// if (!"1".equals(dayType)) { +// if ("5".equals(weekIndex) || "6".equals(weekIndex)) { +// dayType = "2"; +// } +// } return dayType; } @@ -195,14 +265,13 @@ public class EnterpriseCalendarServiceImpl extends Service implements Enterprise return holidayInfo; } - //根据日期取得星期几 + //根据日期取得星期几, public static String getWeek(Calendar cal){ -// String[] weeks = {"星期日","星期一","星期二","星期三","星期四","星期五","星期六"}; + //日历详细表中字段xq枚举值与该方法中的周几值存在差值,故存在相关处理逻辑 int weekIndex = cal.get(Calendar.DAY_OF_WEEK) - 2; if(weekIndex<0){ weekIndex = 6; } -// return weeks[weekIndex]; return String.valueOf(weekIndex); } }