|
|
|
@ -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);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|