diff --git a/src/com/engine/attendance/attendanceanalysis/service/impl/AttendanceSummaryServiceImpl.java b/src/com/engine/attendance/attendanceanalysis/service/impl/AttendanceSummaryServiceImpl.java index 0e2d974..8639c23 100644 --- a/src/com/engine/attendance/attendanceanalysis/service/impl/AttendanceSummaryServiceImpl.java +++ b/src/com/engine/attendance/attendanceanalysis/service/impl/AttendanceSummaryServiceImpl.java @@ -337,6 +337,8 @@ public class AttendanceSummaryServiceImpl extends Service implements AttendanceS }catch (Exception e){ bs.writeLog(e); + retmap.put("errorMessage", e.getMessage()); + return retmap; } return retmap; } diff --git a/src/com/engine/attendance/workflow/action/askforleave/AskForLeaveWorkFlowSubmitAction.java b/src/com/engine/attendance/workflow/action/askforleave/AskForLeaveWorkFlowSubmitAction.java index b7767db..e2f87da 100644 --- a/src/com/engine/attendance/workflow/action/askforleave/AskForLeaveWorkFlowSubmitAction.java +++ b/src/com/engine/attendance/workflow/action/askforleave/AskForLeaveWorkFlowSubmitAction.java @@ -13,6 +13,7 @@ import weaver.general.Util; import weaver.interfaces.workflow.action.Action; import weaver.soa.workflow.request.RequestInfo; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -89,10 +90,93 @@ public class AskForLeaveWorkFlowSubmitAction implements Action { return Action.FAILURE_AND_CONTINUE; } /** - * 假期校验及入库 + * 请假时长是否满足“请假类型”中单次最小休时长,由假期额度表和流程主表获取对比数据 + */ + String jqedSql = "select eddw, dczskxsc, edbxdcxw from uf_jcl_kq_jqed where jb = ?"; + Map jqedInfo = DbTools.getSqlToMap(jqedSql, jqlx); + //假期额度的额度单位,0-天、1-小时 + String eddw = Util.null2String(jqedInfo.get("eddw")); + String eddwValue = ""; + //单次最小休时长 + String minDuration = Util.null2String(jqedInfo.get("dczskxsc")); + //请假时长qjsc + String qjsc = Util.null2String(mainTableData.get("qjsc")); + //请假时长单位scdw,0-天、1-小时 + String scdw = Util.null2String(mainTableData.get("scdw")); + String scdwValue = ""; + if (!"".equals(eddw) && !"".equals(minDuration)) { + double minDurationValue = Double.parseDouble(minDuration); + if (eddw.equals(AccountingUnitEnum.DAY.getKey())) { + minDurationValue = minDurationValue * 8; + eddwValue = AccountingUnitEnum.DAY.getValue(); + } else { + eddwValue = AccountingUnitEnum.HOUR.getValue(); + } + double qjscValue = "".equals(qjsc) ? 0 : Double.parseDouble(qjsc); + if (scdw.equals(AccountingUnitEnum.DAY.getKey())) { + qjscValue = qjscValue * 8; + scdwValue = AccountingUnitEnum.DAY.getValue(); + } else { + scdwValue = AccountingUnitEnum.HOUR.getValue(); + } + + if (Double.compare(minDurationValue, qjscValue) > 0) { + String message = "请假时长" + qjsc + eddwValue + ",不能小于单次最小休时长" + minDuration + scdwValue; + log.error(message); + requestInfo.getRequestManager().setMessageid("11111" + requestid + "22222"); + requestInfo.getRequestManager().setMessagecontent(message); + return Action.FAILURE_AND_CONTINUE; + } + } + /** + * 请假是否满足“请假类型”中单条请假余额可休次数要求,由假期额度表、假期余额表、请假记录表和流程主表获取对比数据 */ + //先获取假期额度规则中指定假别的可休次数 + String allowLeaveNumStr = Util.null2String(jqedInfo.get("edbxdcxw")); String sql = "select id,jqid,sxrq,ktsc,yxsc,wxsc,yqsxrq,ztsc from uf_jcl_kq_jqye where ygid=? and jqid=? and sxrq<=? and yqsxrq>=? order by sxrq"; List> holidayBalanceList = DbTools.getSqlToList(sql, qjry, jqlx, firstStartDate, firstStartDate); + if (!allowLeaveNumStr.equals("") && holidayBalanceList.size() > 0) { + //查询请假记录中,人员id+假期类别id情况下的结果,遍历每条主表数据下的明细数据中使用了哪些假期余额id + sql = "select a.id,dt2.jqye from uf_jcl_kq_qjjl a left join uf_jcl_kq_qjjl_dt1 dt1 on dt1.mainid = a.id left join uf_jcl_kq_qjjl_dt2 dt2 on dt2.glmxid = dt1.glmxid " + + "where a.jqlx = " + jqlx + " and qjry = " + qjry + " and a.cxqj = 0 and dt1.cxqj = 0 and a.jlzt in (0, 1) and dt1.glmxid is not null"; + List> leaveList = DbTools.getSqlToList(sql); + Map jqyeUseNumInfo = new HashMap<>(); + List leaveUseList = new ArrayList<>(); + Integer useNum = 0; + for (Map leaveItem : leaveList) { + String jqyeId = Util.null2String(leaveItem.get("jqye")); + if (!"".equals(jqyeId)) { + String leaveInfo = leaveItem.get("id").toString() + "_" + jqyeId; + if (leaveUseList.size() == 0) { + leaveUseList.add(leaveInfo); + jqyeUseNumInfo.put(jqyeId, 1); + } else if (!leaveUseList.contains(leaveInfo)) { + leaveUseList.add(leaveInfo); + useNum = jqyeUseNumInfo.get(jqyeId); + jqyeUseNumInfo.put(jqyeId, useNum == null ? 1 : ++useNum); + } + } + } + //筛选次数未使用完的假期余额 + holidayBalanceList = holidayBalanceList.stream().filter(f -> { + int beforeUseNum = jqyeUseNumInfo.get(f.get("id").toString()) == null ? 0 : jqyeUseNumInfo.get(f.get("id").toString()); + return Integer.parseInt(allowLeaveNumStr) > beforeUseNum; + }).collect(Collectors.toList()); + + if (holidayBalanceList.size() == 0) { + String message = "本次使用的假期类型下的假期余额可休次数不足!"; + log.error(message); + requestInfo.getRequestManager().setMessageid("11111" + requestid + "22222"); + requestInfo.getRequestManager().setMessagecontent(message); + return Action.FAILURE_AND_CONTINUE; + } + + } + /** + * 假期校验及入库 + */ +// String sql = "select id,jqid,sxrq,ktsc,yxsc,wxsc,yqsxrq,ztsc from uf_jcl_kq_jqye where ygid=? and jqid=? and sxrq<=? and yqsxrq>=? order by sxrq"; +// List> holidayBalanceList = DbTools.getSqlToList(sql, qjry, jqlx, firstStartDate, firstStartDate); Map holidayBalanceMap = holidayBalanceList.stream().collect(Collectors.toMap(e -> e.get("id").toString(), e -> e)); sql = "select id,mc,hsdw,hsl,jcbyxsyqjb,yxsydjb,qzsyyxjb from uf_jcl_kq_kqxm where id=?"; Map holidayItem = DbTools.getSqlToMap(sql, jqlx); @@ -153,45 +237,6 @@ public class AskForLeaveWorkFlowSubmitAction implements Action { } log.info("detailTable2 : [{}]", detailTable2); - /** - * 请假时长是否满足“请假类型”中单次最小休时长,由假期额度表和流程主表获取对比数据 - */ - String jqedSql = "select eddw, dczskxsc from uf_jcl_kq_jqed where jb = ?"; - Map jqedInfo = DbTools.getSqlToMap(jqedSql, jqlx); - //假期额度的额度单位,0-天、1-小时 - String eddw = Util.null2String(jqedInfo.get("eddw")); - String eddwValue = ""; - //单次最小休时长 - String minDuration = Util.null2String(jqedInfo.get("dczskxsc")); - //请假时长qjsc - String qjsc = Util.null2String(mainTableData.get("qjsc")); - //请假时长单位scdw,0-天、1-小时 - String scdw = Util.null2String(mainTableData.get("scdw")); - String scdwValue = ""; - if (!"".equals(eddw) && !"".equals(minDuration)) { - double minDurationValue = Double.parseDouble(minDuration); - if (eddw.equals(AccountingUnitEnum.DAY.getKey())) { - minDurationValue = minDurationValue * 8; - eddwValue = AccountingUnitEnum.DAY.getValue(); - } else { - eddwValue = AccountingUnitEnum.HOUR.getValue(); - } - double qjscValue = "".equals(qjsc) ? 0 : Double.parseDouble(qjsc); - if (scdw.equals(AccountingUnitEnum.DAY.getKey())) { - qjscValue = qjscValue * 8; - scdwValue = AccountingUnitEnum.DAY.getValue(); - } else { - scdwValue = AccountingUnitEnum.HOUR.getValue(); - } - - if (Double.compare(minDurationValue, qjscValue) > 0) { - String message = "请假时长" + qjsc + eddwValue + ",不能小于单次最小休时长" + minDuration + scdwValue; - log.error(message); - requestInfo.getRequestManager().setMessageid("11111" + requestid + "22222"); - requestInfo.getRequestManager().setMessagecontent(message); - return Action.FAILURE_AND_CONTINUE; - } - } //更新流程明细表2 String delteSql = "delete from " + detail2TableName + " where mainid=?"; DbTools.update(delteSql, requestid);