考勤-调动分组流程,提交、归档action,考勤周期关账计划任务增加结账逻辑

zm_dev
sy 8 months ago
parent 6bab56ea62
commit 333bbf1ac4

@ -6,6 +6,8 @@ import lombok.extern.slf4j.Slf4j;
import weaver.general.Util; import weaver.general.Util;
import weaver.interfaces.schedule.BaseCronJob; import weaver.interfaces.schedule.BaseCronJob;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -24,14 +26,37 @@ public class AttendanceCycleCloseJob extends BaseCronJob {
String currentTime = DateUtil.getCurrentTime("yyyy-MM-dd HH:mm"); String currentTime = DateUtil.getCurrentTime("yyyy-MM-dd HH:mm");
//处理考勤周期主表 //处理考勤周期主表
String sql = "select id, gzrq, gzsj, zt from uf_jcl_kq_kqzq where zt = 0"; String sql = "select id, gzrq, gzsj, zt from uf_jcl_kq_kqzq where zt = 0";
List<Map<String, Object>> mainData = DbTools.getSqlToList(sql); List<Map<String, Object>> noCloseMainData = DbTools.getSqlToList(sql);
mainData = mainData.stream().filter(f -> (Util.null2String(f.get("gzrq")) + " " + Util.null2String(f.get("gzsj"))).compareTo(currentTime) <= 0).collect(Collectors.toList()); noCloseMainData = noCloseMainData.stream().filter(f -> (Util.null2String(f.get("gzrq")) + " " + Util.null2String(f.get("gzsj"))).compareTo(currentTime) <= 0).collect(Collectors.toList());
if (mainData.size() > 0) { if (noCloseMainData.size() > 0) {
List<String> ids = mainData.stream().map(e->e.get("id").toString()).collect(Collectors.toList()); List<String> 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) + ")"; sql = "update uf_jcl_kq_kqzq set zt = 1 where id in (" + String.join(",", ids) + ")";
boolean updateSign = DbTools.update(sql); 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<Map<String, Object>> closeMainData = DbTools.getSqlToList(sql).stream()
.filter(f -> (Util.null2String(f.get("gzrq")) + " " + Util.null2String(f.get("gzsj"))).compareTo(currentTime) <= 0).collect(Collectors.toList());
Map<String,List<Map<String,Object>>> groupByKqzqMc = closeMainData.stream().collect(Collectors.groupingBy(e->e.get("mc").toString()));
if (groupByKqzqMc.size() > 0) {
List<String> checkoutIdList = new ArrayList<>();
groupByKqzqMc.forEach((k, v) -> {
v.sort(Comparator.comparing((Map<String, Object> h) -> (String) h.get("nd"))
.thenComparing(h -> Integer.valueOf(h.get("yf").toString())));
List<String> 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"; sql = "select id, gzrq, gzsj, zt from uf_jcl_kq_kqzq_dt1 where zt != 1";

@ -24,6 +24,7 @@ public class AdjustPersonGroupArchivingAction implements Action {
@Override @Override
public String execute(RequestInfo requestInfo) { public String execute(RequestInfo requestInfo) {
log.info("**********AdjustPersonGroupArchivingAction start**********");
String requestid = requestInfo.getRequestid(); String requestid = requestInfo.getRequestid();
// 流程表单主表数据 // 流程表单主表数据
HashMap<String,String> mainTableData = CommonUtil.getMainTableInfo(requestInfo); HashMap<String,String> mainTableData = CommonUtil.getMainTableInfo(requestInfo);
@ -56,19 +57,56 @@ public class AdjustPersonGroupArchivingAction implements Action {
requestInfo.getRequestManager().setMessagecontent("更新人员分组数据失败: 调出分组中目标数据不唯一!"); requestInfo.getRequestManager().setMessagecontent("更新人员分组数据失败: 调出分组中目标数据不唯一!");
return Action.FAILURE_AND_CONTINUE; return Action.FAILURE_AND_CONTINUE;
} else if (data.size() == 1) { } 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) { } 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 { } 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;
}
} }

@ -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<String,String> 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<Map<String, Object>> data = DbTools.getSqlToList(sql);
List<Map<String, Object>> 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<String, Object> 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<Map<String, Object>> data = DbTools.getSqlToList(sql);
//收集一下,调入分组中目标人员的有效明细数据是否和新增数据有交集
List<Map<String, Object>> 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<String, Object> 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;
}
}
Loading…
Cancel
Save