From 7857e9f45b1f12381adca06160372a5cade1ae3b Mon Sep 17 00:00:00 2001 From: seaon Date: Wed, 8 Jan 2025 17:21:31 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E6=A0=B9=E6=8D=AE=E4=BC=81?= =?UTF-8?q?=E4=B8=9A=E6=97=A5=E5=8E=86=E5=88=9D=E5=A7=8B=E5=8C=96=E6=97=A5?= =?UTF-8?q?=E5=8E=86=E7=9A=84=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/EnterpriseCalendarServiceImpl.java | 105 ++++++++++++++++-- .../jucailinkq/common/util/LunarCalendar.java | 5 +- 2 files changed, 100 insertions(+), 10 deletions(-) diff --git a/src/com/engine/jucailinkq/attendance/workflow/service/impl/EnterpriseCalendarServiceImpl.java b/src/com/engine/jucailinkq/attendance/workflow/service/impl/EnterpriseCalendarServiceImpl.java index 595ec15..6707504 100644 --- a/src/com/engine/jucailinkq/attendance/workflow/service/impl/EnterpriseCalendarServiceImpl.java +++ b/src/com/engine/jucailinkq/attendance/workflow/service/impl/EnterpriseCalendarServiceImpl.java @@ -29,21 +29,24 @@ public class EnterpriseCalendarServiceImpl extends Service implements Enterprise int year = Integer.parseInt(yearStr); //查询所属机构 String sql = "select * from uf_jcl_kq_rlmc where id = " + calendarId; - Map data = DbTools.getSqlToMap(sql); - if (data.size() > 0) { + Map dataMain = DbTools.getSqlToMap(sql); + if (dataMain.size() > 0) { //所属机构 - String org = Util.null2String(data.get("szjg")); + String org = Util.null2String(dataMain.get("szjg")); //单双休设置相关信息 //单双休设置,标准双休-0,单双休-1,单休-2 - String restDaySetting = Util.null2String(data.get("dxzsz")); + String restDaySetting = Util.null2String(dataMain.get("dxzsz")); //双周休息日,周一-周日,0-6 - String doubleRestDays = Util.null2String(data.get("dzxxr")); + String doubleRestDays = Util.null2String(dataMain.get("dzxxr")); //单周休息日,周一-周日,0-6 - String singleRestDays = Util.null2String(data.get("xzxxr")); + String singleRestDays = Util.null2String(dataMain.get("xzxxr")); //单双休轮转设置,先单后双-0,先双后单-1 - String restDayTransSetting = Util.null2String(data.get("dxzz")); + String restDayTransSetting = Util.null2String(dataMain.get("dxzz")); //是否按上一年继续轮转 - String transContinue= Util.null2String(data.get("asynjx")); + String transContinue= Util.null2String(dataMain.get("asynjx")); + //是否使用农历且带入农历节气信息 + String lunarFlag= Util.null2String(dataMain.get("jqdrmc")); + Map> holidayMap = DealDetail(calendarId, yearStr, lunarFlag); //在单双周轮换时,判断第一周的休息日情况 boolean doubleRestSign = true; if (restDaySetting.equals("1")) { @@ -96,6 +99,16 @@ public class EnterpriseCalendarServiceImpl extends Service implements Enterprise doubleRestSign = !doubleRestSign; } } + if (holidayMap.containsKey(dateInfo.get("rq"))){ + dateInfo.put("mc", holidayMap.get(dateInfo.get("rq")).get("mc")); + dateInfo.put("rqlx", holidayMap.get(dateInfo.get("rq")).get("rqlx")); + dateInfo.put("bz", holidayMap.get(dateInfo.get("rq")).get("bz")); + } + if (holidayMap.containsKey(dateInfo.get("nlrq")) && !holidayMap.containsKey("闰"+dateInfo.get("nlrq"))){ + dateInfo.put("mc", holidayMap.get(dateInfo.get("nlrq")).get("mc")); + dateInfo.put("rqlx", holidayMap.get(dateInfo.get("nlrq")).get("rqlx")); + dateInfo.put("bz", holidayMap.get(dateInfo.get("nlrq")).get("bz")); + } dateInfoList.add(dateInfo); calendar.add(Calendar.DAY_OF_MONTH, 1); } @@ -152,6 +165,81 @@ public class EnterpriseCalendarServiceImpl extends Service implements Enterprise } } + /** + * 根据日历信息明细设置特定日期日历 + * @param pCalendarId 日历信息ID + * @param pYearStr 年度 + * @param pLunarFlag 是否农历检查 + * @return 各特定日期信息 + */ + private Map> DealDetail(String pCalendarId, String pYearStr, String pLunarFlag){ + String sql = "SELECT * FROM UF_JCL_KQ_RLMC_DT1 WHERE MAINID = " + pCalendarId; + List> dataDetail = DbTools.getSqlToList(sql); + String row_mc = "";//名称 + String row_rqlx = "";//日期类型:0:工作日;1:节假日;2:公休日;3:调休日;4:调班日 + String row_bzsm = "";//备注说明 + String row_lx = "";//类型:0:公历;1:农历 + String row_glrq = "";//公历日期 + String row_nlrq = "";//农历日期 + String row_rqczz = "";//日期参照值:0:年-月-日;1:月-日;2:月-周 + String row_dydjr = "";//当月第几日 + int row_dydjz = 0;//当月第几周 + int row_dzxqj = 0;//当周星期几 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + Calendar calendar = Calendar.getInstance(); + Map row_data = new HashMap<>(); + Map> rows = new HashMap<>(); + for (Map holidayMap :dataDetail) { + row_glrq = Util.null2String(holidayMap.get("glrq"));//公历日期 + row_mc = holidayMap.get("mc").toString(); + row_lx = holidayMap.get("lx").toString(); + row_rqlx = holidayMap.get("rqlx").toString(); + row_bzsm = Util.null2String(holidayMap.get("bzsm")); + row_nlrq = Util.null2String(holidayMap.get("nlrq")); + row_rqczz = Util.null2String(holidayMap.get("rqczz")); + row_data = new HashMap<>(); + row_data.put("mc", row_mc); + row_data.put("rqlx", row_rqlx); + row_data.put("bz", row_bzsm); + if (row_lx.equals("0")){ + //公历 + switch (row_rqczz) { + case "0": + //年-月-日 + break; + case "1": + //月-日 2024-12-13 + calendar = Calendar.getInstance(); + calendar.set(Integer.parseInt(pYearStr),Integer.parseInt(Util.null2String(holidayMap.get("glrq")).substring(5,7))-1,Integer.parseInt(holidayMap.get("dydjr").toString())); + row_glrq = sdf.format(calendar.getTime()); + break; + case "2": + //月-周 + calendar = Calendar.getInstance(); + calendar.set(Integer.parseInt(pYearStr),Integer.parseInt(Util.null2String(holidayMap.get("glrq")).substring(5,7))-1,1); + int dayOfWeek = Integer.parseInt(getWeek(calendar));//周一-周日为0-6 + row_dydjz = Integer.parseInt(holidayMap.get("dydjz").toString()); + row_dzxqj = Integer.parseInt(holidayMap.get("dzxqj").toString()); + if (row_dzxqj>dayOfWeek) { + calendar.add(Calendar.DATE, row_dzxqj - dayOfWeek); + }else{ + calendar.add(Calendar.DATE, row_dzxqj + 7 - dayOfWeek); + } + calendar.add(Calendar.DATE, (row_dydjz-1)*7); + row_glrq = sdf.format(calendar.getTime()); + break; + default: + break; + } + }else{ + row_glrq = row_nlrq; + } + row_data.put("rq", row_glrq); + rows.put(row_glrq,row_data); + } + return rows; + } + private Map createDateInfo(Calendar calendar) { Map dateInfo = new HashMap<>(); // 获取阳历年-月-日 @@ -183,6 +271,7 @@ public class EnterpriseCalendarServiceImpl extends Service implements Enterprise dateInfo.put("xq", weekIndex); dateInfo.put("mc", specialDay.equals("") ? null : specialDay); dateInfo.put("rqlx", dayType); + dateInfo.put("bz", ""); return dateInfo; } diff --git a/src/com/engine/jucailinkq/common/util/LunarCalendar.java b/src/com/engine/jucailinkq/common/util/LunarCalendar.java index c4f7e13..caab407 100644 --- a/src/com/engine/jucailinkq/common/util/LunarCalendar.java +++ b/src/com/engine/jucailinkq/common/util/LunarCalendar.java @@ -20,7 +20,7 @@ public class LunarCalendar { /** * 中文月名称 */ - final static String chineseNumber[] = { "一", "二", "三", "四", "五", "六", "七", "八", "九", "十", "十一", "十二" }; + final static String chineseNumber[] = { "正", "二", "三", "四", "五", "六", "七", "八", "九", "十", "冬", "腊" }; /** * 中文日期格式 */ @@ -236,7 +236,8 @@ public class LunarCalendar { } final public String traditionLunarDay() { - return cyclical() + animalsYear() + "年" + (leap ? "闰" : "") + chineseNumber[month - 1] + "月" + getChinaDayString(day); + //return cyclical() + animalsYear() + "年" + (leap ? "闰" : "") + chineseNumber[month - 1] + "月" + getChinaDayString(day); + return (leap ? "闰" : "") + chineseNumber[month - 1] + "月" + getChinaDayString(day);//暂时移除农历年的显示 } public int getYear() {