考勤,企业日历初始化功能需求变更,适配单双休逻辑

zm_dev
sy 12 months ago
parent 4208d755ad
commit a054cfc2a4

@ -25,7 +25,28 @@ public class EnterpriseCalendarServiceImpl extends Service implements Enterprise
//查询所属机构
String sql = "select * from uf_jcl_kq_rlmc where id = " + calendarId;
Map<String,Object> 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<String,String> 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<String> 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<Map<String,Object>> data = DbTools.getSqlToList(sql);
int restDayNum = 0;
if (data.size() > 0) {
for (Map<String,Object> map : data) {
if (Util.null2String(map.get("rqlx")).equals("2")) {
restDayNum++;
}
}
return restDayNum < 2;
} else {
return doubleRestSign;
}
}
private Map<String, Object> createDateInfo(Calendar calendar) {
Map<String, Object> 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);
}
}

Loading…
Cancel
Save