考勤-批量请假,明细表1数据生成按钮接口逻辑优化

zm_dev
sy 11 months ago
parent 9b526d31a7
commit 5c150fa3f1

@ -520,7 +520,7 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic
//优先使用的的请假项目是否已被编辑 //优先使用的的请假项目是否已被编辑
double firstItemEditedDetailSc = editedLeaveInfo.get(empId + "_" + firstItemId + "_" + ksrq) == null ? 0 : Double.parseDouble(editedLeaveInfo.get(empId + "_" + firstItemId + "_" + ksrq)); double firstItemEditedDetailSc = editedLeaveInfo.get(empId + "_" + firstItemId + "_" + ksrq) == null ? 0 : Double.parseDouble(editedLeaveInfo.get(empId + "_" + firstItemId + "_" + ksrq));
boolean firstItemEditedDetail = editedLeaveInfo.get(empId + "_" + firstItemId + "_" + ksrq) != null; boolean firstItemEditedDetail = editedLeaveInfo.get(empId + "_" + firstItemId + "_" + ksrq) != null;
//勾选的请假项目是否已被编辑 //勾选的请假项目是否已被编辑,此处判定包含了优先使用的请假项目编辑记录中的时长大于等于提交请假需求者的时长
double checkItemEditedDetailSc = editedLeaveInfo.get(empId + "_" + checkItemId + "_" + ksrq) == null ? 0 : Double.parseDouble(editedLeaveInfo.get(empId + "_" + checkItemId + "_" + ksrq)); double checkItemEditedDetailSc = editedLeaveInfo.get(empId + "_" + checkItemId + "_" + ksrq) == null ? 0 : Double.parseDouble(editedLeaveInfo.get(empId + "_" + checkItemId + "_" + ksrq));
boolean checkItemEditedDetail = editedLeaveInfo.get(empId + "_" + checkItemId + "_" + ksrq) != null || (firstItemEditedDetail && firstItemEditedDetailSc - leaveDuration >= 0); boolean checkItemEditedDetail = editedLeaveInfo.get(empId + "_" + checkItemId + "_" + ksrq) != null || (firstItemEditedDetail && firstItemEditedDetailSc - leaveDuration >= 0);
@ -589,7 +589,9 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic
String message = empName; String message = empName;
if (checkItemEditedDetail) { if (checkItemEditedDetail) {
//人员id+日期+假期类型三种条件约束唯一性 //人员id+日期+假期类型三种条件约束唯一性
message = message + "_" + ksrq + "在明细表1中已存在一笔该请假类型的请假明细"; message = message + "_" + ksrq + "已存在一笔该请假类型的请假明细!";
} else if(!checkItemNonCheck && canUseCheckJqyeInfo.size() == 0) {
message = message + "_" + ksrq + "不存在可使用的假期余额,请检查假期余额使用次数和最小使用时长设置!";
} else { } else {
//假期余额不足 //假期余额不足
message = message + "_" + ksrq + "假期余额不足!"; message = message + "_" + ksrq + "假期余额不足!";
@ -620,12 +622,12 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic
String eddw = Util.null2String(holidayBalancefilterList.get(0).get("eddw")); String eddw = Util.null2String(holidayBalancefilterList.get(0).get("eddw"));
int multipleNum = eddw.equals(AccountingUnitEnum.DAY.getKey()) ? 8 : 1; int multipleNum = eddw.equals(AccountingUnitEnum.DAY.getKey()) ? 8 : 1;
for (Map<String, Object> holidayBalance : holidayBalancefilterList) { for (Map<String, Object> holidayBalance : holidayBalancefilterList) {
//1-如果已编辑的请假明细中已有该假期余额id的记录则满足最小使用时长 //1-如果已编辑的请假明细中已有该假期余额id的记录则满足最小使用时长;如果result的请假明细中已有该假期余额id的记录则满足最小使用时长
boolean minLeaveDurationSign = editedUseJqed.get(holidayBalance.get("id").toString()) != null; boolean minLeaveDurationSign = editedUseJqed.get(holidayBalance.get("id").toString()) != null || result.stream().anyMatch(map -> itemId.equals(map.get("qjlx")));
//2-如果编辑记录中不存在,则需要判断是否满足最小使用时长 //2-如果编辑记录中不存在,则需要判断是否满足最小使用时长
if (!minLeaveDurationSign) { if (!minLeaveDurationSign) {
String minLeaveDuration = Util.null2String(holidayBalance.get("minLeaveDuration")); String minLeaveDuration = Util.null2String(holidayBalance.get("minLeaveDuration"));
minLeaveDurationSign = "".equals(minLeaveDuration) || totalLeaveDuration > Double.parseDouble(minLeaveDuration); minLeaveDurationSign = "".equals(minLeaveDuration) || totalLeaveDuration > Double.parseDouble(minLeaveDuration) * multipleNum;
} }
//不满足最小使用时长,直接执行下一条 //不满足最小使用时长,直接执行下一条
if (!minLeaveDurationSign) { if (!minLeaveDurationSign) {
@ -689,14 +691,15 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic
Map<String, Object> jqedInfo = DbTools.getSqlToMap(jqedSql, itemId); Map<String, Object> jqedInfo = DbTools.getSqlToMap(jqedSql, itemId);
//假期额度的额度单位0-天、1-小时 //假期额度的额度单位0-天、1-小时
String eddw = Util.null2String(jqedInfo.get("eddw")); String eddw = Util.null2String(jqedInfo.get("eddw"));
int multiple = 1;
if (eddw.equals(AccountingUnitEnum.DAY.getKey())) {
multiple = 8;
}
//单次最小休时长 //单次最小休时长
String minDuration = Util.null2String(jqedInfo.get("dczskxsc")); String minDuration = Util.null2String(jqedInfo.get("dczskxsc"));
Double minLeaveDuration = null; Double minLeaveDuration = null;
if (!"".equals(eddw) && !"".equals(minDuration)) { if (!"".equals(eddw) && !"".equals(minDuration)) {
minLeaveDuration = Double.parseDouble(minDuration); minLeaveDuration = Double.parseDouble(minDuration) * multiple;
if (eddw.equals(AccountingUnitEnum.DAY.getKey())) {
minLeaveDuration = minLeaveDuration * 8;
}
} }
//额度可修次数 //额度可修次数
String allowLeaveNumStr = Util.null2String(jqedInfo.get("edbxdcxw")); String allowLeaveNumStr = Util.null2String(jqedInfo.get("edbxdcxw"));
@ -733,13 +736,12 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic
for (Map<String, Object> holidayBalance : holidayBalanceList) { for (Map<String, Object> holidayBalance : holidayBalanceList) {
String jqyeId = Util.null2String(holidayBalance.get("id")); String jqyeId = Util.null2String(holidayBalance.get("id"));
if (!unableUseJqyeIdList.contains(jqyeId)) { if (!unableUseJqyeIdList.contains(jqyeId)) {
double wxsc = Utils.convertDouble(holidayBalance.get("wxsc")); double wxsc = Utils.convertDouble(holidayBalance.get("wxsc")) * multiple;
double editedUseSc = Utils.convertDouble(editedUseJqed.get(jqyeId)); double editedUseSc = Utils.convertDouble(editedUseJqed.get(jqyeId));
double realWxsc = wxsc - editedUseSc; double realWxsc = wxsc - editedUseSc;
if ((minLeaveDuration == null || wxsc >= minLeaveDuration) && realWxsc > 0) { if ((minLeaveDuration == null || wxsc >= minLeaveDuration) && realWxsc > 0) {
holidayBalance.put("wxsc", Utils.divide(realWxsc, multiple));
holidayBalance.put("wxsc", realWxsc); holidayBalance.put("minLeaveDuration", minLeaveDuration == null ? null : Utils.divide(minLeaveDuration, multiple));
holidayBalance.put("minLeaveDuration", minLeaveDuration);
holidayBalance.put("eddw", eddw); holidayBalance.put("eddw", eddw);
canUseHolidayBalanceList.add(holidayBalance); canUseHolidayBalanceList.add(holidayBalance);
} }

Loading…
Cancel
Save