diff --git a/src/com/engine/jucailinkq/attendance/component/AttendanceCycle/job/AttendanceCycleCloseJob.java b/src/com/engine/jucailinkq/attendance/component/AttendanceCycle/job/AttendanceCycleCloseJob.java index 042ab90..2e8055b 100644 --- a/src/com/engine/jucailinkq/attendance/component/AttendanceCycle/job/AttendanceCycleCloseJob.java +++ b/src/com/engine/jucailinkq/attendance/component/AttendanceCycle/job/AttendanceCycleCloseJob.java @@ -6,6 +6,8 @@ import lombok.extern.slf4j.Slf4j; import weaver.general.Util; import weaver.interfaces.schedule.BaseCronJob; +import java.util.ArrayList; +import java.util.Comparator; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -24,14 +26,37 @@ public class AttendanceCycleCloseJob extends BaseCronJob { String currentTime = DateUtil.getCurrentTime("yyyy-MM-dd HH:mm"); //处理考勤周期主表 String sql = "select id, gzrq, gzsj, zt from uf_jcl_kq_kqzq where zt = 0"; - List> mainData = DbTools.getSqlToList(sql); - mainData = mainData.stream().filter(f -> (Util.null2String(f.get("gzrq")) + " " + Util.null2String(f.get("gzsj"))).compareTo(currentTime) <= 0).collect(Collectors.toList()); - if (mainData.size() > 0) { - List ids = mainData.stream().map(e->e.get("id").toString()).collect(Collectors.toList()); + List> noCloseMainData = DbTools.getSqlToList(sql); + noCloseMainData = noCloseMainData.stream().filter(f -> (Util.null2String(f.get("gzrq")) + " " + Util.null2String(f.get("gzsj"))).compareTo(currentTime) <= 0).collect(Collectors.toList()); + if (noCloseMainData.size() > 0) { + List ids = noCloseMainData.stream().map(e->e.get("id").toString()).collect(Collectors.toList()); //更新考勤周期的状态为已关账 sql = "update uf_jcl_kq_kqzq set zt = 1 where id in (" + String.join(",", ids) + ")"; boolean updateSign = DbTools.update(sql); - log.info("AttendanceCycleCloseJob-考勤周期主表更新状态结果:" + updateSign); + log.info("AttendanceCycleCloseJob-考勤周期主表更新到已关账状态结果:" + updateSign); + } + //收集主表id, 以考勤周期名称分组,各组年月最新的一条已关账数据外,其余置为已结账 + sql = "select id, gzrq, gzsj, zt, mc, nd, yf from uf_jcl_kq_kqzq where zt = 1"; + List> closeMainData = DbTools.getSqlToList(sql).stream() + .filter(f -> (Util.null2String(f.get("gzrq")) + " " + Util.null2String(f.get("gzsj"))).compareTo(currentTime) <= 0).collect(Collectors.toList()); + Map>> groupByKqzqMc = closeMainData.stream().collect(Collectors.groupingBy(e->e.get("mc").toString())); + if (groupByKqzqMc.size() > 0) { + List checkoutIdList = new ArrayList<>(); + groupByKqzqMc.forEach((k, v) -> { + v.sort(Comparator.comparing((Map h) -> (String) h.get("nd")) + .thenComparing(h -> Integer.valueOf(h.get("yf").toString()))); + List checkoutIdListItem = v.stream().map(e->e.get("id").toString()).collect(Collectors.toList()); + checkoutIdListItem.remove(checkoutIdListItem.size() - 1); + if (checkoutIdListItem.size() > 0) { + checkoutIdList.addAll(checkoutIdListItem); + } + }); + if (checkoutIdList.size() > 0) { + //更新考勤周期的状态为已结账 + sql = "update uf_jcl_kq_kqzq set zt = 2 where id in (" + String.join(",", checkoutIdList) + ")"; + boolean updateSign = DbTools.update(sql); + log.info("AttendanceCycleCloseJob-考勤周期主表更新到已结账状态结果:" + updateSign); + } } //处理考勤周期明细表 sql = "select id, gzrq, gzsj, zt from uf_jcl_kq_kqzq_dt1 where zt != 1"; diff --git a/src/com/engine/jucailinkq/attendance/workflow/action/AdjustPersonGroupArchivingAction.java b/src/com/engine/jucailinkq/attendance/workflow/action/AdjustPersonGroupArchivingAction.java index 8d3fab4..15c8bf5 100644 --- a/src/com/engine/jucailinkq/attendance/workflow/action/AdjustPersonGroupArchivingAction.java +++ b/src/com/engine/jucailinkq/attendance/workflow/action/AdjustPersonGroupArchivingAction.java @@ -24,6 +24,7 @@ public class AdjustPersonGroupArchivingAction implements Action { @Override public String execute(RequestInfo requestInfo) { + log.info("**********AdjustPersonGroupArchivingAction start**********"); String requestid = requestInfo.getRequestid(); // 流程表单主表数据 HashMap mainTableData = CommonUtil.getMainTableInfo(requestInfo); @@ -56,19 +57,56 @@ public class AdjustPersonGroupArchivingAction implements Action { requestInfo.getRequestManager().setMessagecontent("更新人员分组数据失败: 调出分组中目标数据不唯一!"); return Action.FAILURE_AND_CONTINUE; } else if (data.size() == 1) { - //修改调出分组中目标数据的失效日期为调入日期前一天,todo - - //新增一条数据在调入分组中。生效日期为调入日期,失效日期为调回日期 - - //新增一条数据在调出分组中。生效日期为调回日期,失效日期为调回日期 + //修改调出分组中目标数据的失效日期为调入日期前一天 + sql = "update uf_ryqz_dt1 set edate = '" + DateUtil.beforeDay(adjustDate, 1) + "' where id = " + Util.null2String(data.get(0).get("id")); + boolean updateAdjustFromGroupSign = DbTools.update(sql); + if (!updateAdjustFromGroupSign) { + log.error("更新人员分组数据失败: 修改调出分组中目标数据的失效日期为调入日期前一天未成功!"); + requestInfo.getRequestManager().setMessageid("11111" + requestInfo.getRequestid() + "22222"); + requestInfo.getRequestManager().setMessagecontent("更新人员分组数据失败: 修改调出分组中目标数据的失效日期为调入日期前一天未成功!"); + return Action.FAILURE_AND_CONTINUE; + } + //新增一条数据在调入分组中。生效日期为调入日期,失效日期为调回日期前一天 + sql = "insert into uf_ryqz_dt1 (mainid, empid, bdate, edate, create_time, update_time, creator, delete_type) values (?,?,?,?,?,?,?,?)"; + boolean insertAdjustToGroupSign = DbTools.update(sql, adjustToGroup, ddry, adjustDate, + "".equals(adjustBackDate) ? null : DateUtil.beforeDay(adjustBackDate, 1), + DateUtil.getCurrentDate(), DateUtil.getCurrentDate(), "1", "0"); + if (!insertAdjustToGroupSign) { + log.error("更新人员分组数据失败: 新增一条数据在调入分组未成功!"); + requestInfo.getRequestManager().setMessageid("11111" + requestInfo.getRequestid() + "22222"); + requestInfo.getRequestManager().setMessagecontent("更新人员分组数据失败: 新增一条数据在调入分组未成功!"); + return Action.FAILURE_AND_CONTINUE; + } + //新增一条数据在调出分组中。生效日期为调回日期 + if (!"".equals(adjustBackDate)) { + sql = "insert into uf_ryqz_dt1 (mainid, empid, bdate, create_time, update_time, creator, delete_type) values (?,?,?,?,?,?,?)"; + boolean insertBackAdjustFromGroupSign = DbTools.update(sql, adjustFromGroup, ddry, adjustBackDate, + DateUtil.getCurrentDate(), DateUtil.getCurrentDate(), "1", "0"); + if (!insertBackAdjustFromGroupSign) { + log.error("更新人员分组数据失败: 新增一条数据在调出分组中(生效日期为调回日期)未成功!"); + requestInfo.getRequestManager().setMessageid("11111" + requestInfo.getRequestid() + "22222"); + requestInfo.getRequestManager().setMessagecontent("更新人员分组数据失败: 新增一条数据在调出分组中(生效日期为调回日期)未成功!"); + return Action.FAILURE_AND_CONTINUE; + } + } } else if (data.size() == 0) { - + log.error("更新人员分组数据失败: 调出分组中目标数据不存在!"); + requestInfo.getRequestManager().setMessageid("11111" + requestInfo.getRequestid() + "22222"); + requestInfo.getRequestManager().setMessagecontent("更新人员分组数据失败: 调出分组中目标数据不存在!"); + return Action.FAILURE_AND_CONTINUE; } - } - if ("".equals(adjustBackDate)) { - } else { - + //新增一条数据在调入分组中。生效日期为调入日期,失效日期为调回日期前一天 + sql = "insert into uf_ryqz_dt1 (mainid, empid, bdate, edate, create_time, update_time, creator, delete_type) values (?,?,?,?,?,?,?,?)"; + boolean insertAdjustToGroupSign = DbTools.update(sql, adjustToGroup, ddry, adjustDate, + "".equals(adjustBackDate) ? null : DateUtil.beforeDay(adjustBackDate, 1), + DateUtil.getCurrentDate(), DateUtil.getCurrentDate(), "1", "0"); + if (!insertAdjustToGroupSign) { + log.error("更新人员分组数据失败: 新增一条数据在调入分组未成功!"); + requestInfo.getRequestManager().setMessageid("11111" + requestInfo.getRequestid() + "22222"); + requestInfo.getRequestManager().setMessagecontent("更新人员分组数据失败: 新增一条数据在调入分组未成功!"); + return Action.FAILURE_AND_CONTINUE; + } } diff --git a/src/com/engine/jucailinkq/attendance/workflow/action/AdjustPersonGroupCheckAction.java b/src/com/engine/jucailinkq/attendance/workflow/action/AdjustPersonGroupCheckAction.java new file mode 100644 index 0000000..9e11270 --- /dev/null +++ b/src/com/engine/jucailinkq/attendance/workflow/action/AdjustPersonGroupCheckAction.java @@ -0,0 +1,145 @@ +package com.engine.jucailinkq.attendance.workflow.action; + +import com.engine.jucailinkq.common.util.CommonUtil; +import com.engine.jucailinkq.common.util.DateUtil; +import com.engine.jucailinkq.common.util.DbTools; +import lombok.extern.slf4j.Slf4j; +import weaver.general.Util; +import weaver.interfaces.workflow.action.Action; +import weaver.soa.workflow.request.RequestInfo; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 调动分组流程提交action + * @author sy + */ +@Slf4j +public class AdjustPersonGroupCheckAction implements Action { + + + @Override + public String execute(RequestInfo requestInfo) { + log.info("**********AdjustPersonGroupCheckAction start**********"); + String requestid = requestInfo.getRequestid(); + // 流程表单主表数据 + HashMap mainTableData = CommonUtil.getMainTableInfo(requestInfo); + log.info("mainTableData : [{}]",mainTableData); + //调动人员 + String ddry = Util.null2String(mainTableData.get("ddry")); + //调入日期 + String adjustDate = Util.null2String(mainTableData.get("drrq")); + //调入分组 + String adjustToGroup = Util.null2String(mainTableData.get("drfz")); + //调出分组 + String adjustFromGroup = Util.null2String(mainTableData.get("dcfz")); + //调回日期 + String adjustBackDate = Util.null2String(mainTableData.get("dhrq")); + //调动说明 + String ddsm = Util.null2String(mainTableData.get("ddsm")); + + try { + String sql = ""; + if (!"".equals(adjustFromGroup)) { + sql = "select id, bdate, edate from uf_ryqz_dt1 where mainid = " + adjustFromGroup + " and empid = " + ddry + " and delete_type = 0"; + List> data = DbTools.getSqlToList(sql); + List> targetData = data.stream(). + filter(f -> Util.null2String(f.get("bdate")).compareTo(adjustDate) < 0 + && ("".equals(Util.null2String(f.get("edate"))) || Util.null2String(f.get("edate")).compareTo(adjustDate) >= 0)) + .collect(Collectors.toList()); + if (targetData.size() > 2) { + log.error("调出分组中目标人员有效的数据不唯一!"); + requestInfo.getRequestManager().setMessageid("11111" + requestInfo.getRequestid() + "22222"); + requestInfo.getRequestManager().setMessagecontent("调出分组中目标人员有效的数据不唯一!"); + return Action.FAILURE_AND_CONTINUE; + } else if (targetData.size() == 0) { + log.error("调出分组中目标数据不存在!"); + requestInfo.getRequestManager().setMessageid("11111" + requestInfo.getRequestid() + "22222"); + requestInfo.getRequestManager().setMessagecontent("调出分组中目标数据不存在!"); + return Action.FAILURE_AND_CONTINUE; + } + //调回日期不为空时,需要晚于调入日期 + if (!"".equals(adjustBackDate)) { + if(adjustBackDate.compareTo(adjustDate) <= 0) { + log.error("调回日期不为空时,需要晚于调入日期!"); + requestInfo.getRequestManager().setMessageid("11111" + requestInfo.getRequestid() + "22222"); + requestInfo.getRequestManager().setMessagecontent("调回日期不为空时,需要晚于调入日期!"); + return Action.FAILURE_AND_CONTINUE; + } + //判断调入分组中新增的调回数据,会不会出现交集有效时段 + String targetDataId = targetData.get(0).get("id").toString(); + String endDate = ""; + //去除被调出的目标数据 + data = data.stream().filter(f -> !f.get("id").toString().equals(targetDataId)).collect(Collectors.toList()); + //遍历判断剩余数据 + for(Map dataItem : data) { + endDate = Util.null2String(dataItem.get("edate")); + //判断是否不存在交集 + boolean noOverlapSign = !"".equals(endDate) && adjustDate.compareTo(endDate) > 0; + if (!noOverlapSign) { + log.error("调出分组新增调回明细数据与未来生效的原有明细数据存在交集,不可提交!"); + requestInfo.getRequestManager().setMessageid("11111" + requestInfo.getRequestid() + "22222"); + requestInfo.getRequestManager().setMessagecontent("调出分组新增调回明细数据与未来生效的原有明细数据存在交集,不可提交!"); + return Action.FAILURE_AND_CONTINUE; + } + } + } + } else { + //调出分组为空时,不允许设置调回日期 + if (!"".equals(adjustBackDate)) { + log.error("调出分组为空时,不允许设置调回日期!"); + requestInfo.getRequestManager().setMessageid("11111" + requestInfo.getRequestid() + "22222"); + requestInfo.getRequestManager().setMessagecontent("调出分组为空时,不允许设置调回日期!"); + return Action.FAILURE_AND_CONTINUE; + } + } + if (!"".equals(adjustToGroup)) { + sql = "select id, bdate, edate from uf_ryqz_dt1 where mainid = " + adjustToGroup + " and empid = " + ddry + " and delete_type = 0"; + List> data = DbTools.getSqlToList(sql); + //收集一下,调入分组中目标人员的有效明细数据是否和新增数据有交集 + List> targetData = data.stream(). + filter(f -> Util.null2String(f.get("bdate")).compareTo(adjustDate) <= 0 + && ("".equals(Util.null2String(f.get("edate"))) || Util.null2String(f.get("edate")).compareTo(adjustDate) >= 0)) + .collect(Collectors.toList()); + if (targetData.size() > 0) { + log.error("调入分组中已存在目标人员在调入日期的有效数据,不允许调入!"); + requestInfo.getRequestManager().setMessageid("11111" + requestInfo.getRequestid() + "22222"); + requestInfo.getRequestManager().setMessagecontent("调入分组中已存在目标人员在调入日期的有效数据,不允许调入!"); + return Action.FAILURE_AND_CONTINUE; + } + //判定插入新数据后,是否有还未生效的数据和插入数据存在交集 + String startDate = ""; + String endDate = ""; + for(Map dataItem : data) { + startDate = Util.null2String(dataItem.get("bdate")); + endDate = Util.null2String(dataItem.get("edate")); + //判断是否不存在交集 + boolean noOverlapSign = ("".equals(endDate) && !"".equals(adjustBackDate) && adjustBackDate.compareTo(startDate) < 0) + || (!"".equals(endDate) && !"".equals(adjustBackDate) && adjustBackDate.compareTo(startDate) < 0) + || (!"".equals(endDate) && !"".equals(adjustBackDate) && adjustDate.compareTo(endDate) > 0) + || (!"".equals(endDate) && "".equals(adjustBackDate) && adjustDate.compareTo(endDate) > 0); + if (!noOverlapSign) { + log.error("调入分组新增明细数据与未来生效的原有明细数据存在交集,不可提交!"); + requestInfo.getRequestManager().setMessageid("11111" + requestInfo.getRequestid() + "22222"); + requestInfo.getRequestManager().setMessagecontent("调入分组新增明细数据与未来生效的原有明细数据存在交集,不可提交!"); + return Action.FAILURE_AND_CONTINUE; + } + } + + } else { + log.error("调入分组不可为空!"); + requestInfo.getRequestManager().setMessageid("11111" + requestInfo.getRequestid() + "22222"); + requestInfo.getRequestManager().setMessagecontent("调入分组不可为空!"); + return Action.FAILURE_AND_CONTINUE; + } + + }catch (Exception e){ + log.error("AdjustPersonGroupCheckAction error : [{}]",e); + return Action.FAILURE_AND_CONTINUE; + } + return Action.SUCCESS; + } +}