From bc69c9e7e90bf358a57272b798208cd742caf14a Mon Sep 17 00:00:00 2001 From: Chengliang <1546584672@qq.com> Date: Fri, 29 Nov 2024 18:01:01 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=A0=E7=8F=AD=E8=A7=84=E5=88=99=E6=A8=A1?= =?UTF-8?q?=E5=BC=8F5=20bug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/kq/biz/KQOverTimeRuleCalBiz.java | 44 ++++++++++++++++--- src/com/engine/kq/wfset/util/KQFlowUtil.java | 2 + .../engine/kq/wfset/util/SplitActionUtil.java | 29 +++++++++--- .../aisin/cron/KqConfirmWfCrob.java | 19 +++++--- 4 files changed, 74 insertions(+), 20 deletions(-) diff --git a/src/com/engine/kq/biz/KQOverTimeRuleCalBiz.java b/src/com/engine/kq/biz/KQOverTimeRuleCalBiz.java index ed646ca..c76677d 100644 --- a/src/com/engine/kq/biz/KQOverTimeRuleCalBiz.java +++ b/src/com/engine/kq/biz/KQOverTimeRuleCalBiz.java @@ -97,23 +97,52 @@ public class KQOverTimeRuleCalBiz { //获取加班打卡数据 getOverTimeCardDataMap(resourceid, splitDate, splitDate, dateFormatter,kqTimesArrayComInfo,overRulesDetailMap,changeTypeMap,lsCheckInfoMaps,eventMap); + //0.无加班打卡数据时候,只有加班流程数据直接走新方法 todo + if (lsCheckInfoMaps.isEmpty()) { + Map> splitBeanMaps = Maps.newHashMap(); + String change_key = fromDate+"_"+resourceid; + int changeType = Util.getIntValue(""+changeTypeMap.get(change_key),-1); + String changeType_key = fromDate+"_"+changeType; + int computingMode = Util.getIntValue(""+computingModeMap.get(changeType_key),-1); + kqLog.info("AISIN: " + changeType_key+"--"+computingMode); + //获取加班流程数据 + getOverTimeFlowData(resourceid,fromDate,toDate,splitBeanMaps,dateFormatter); + for (Map.Entry> entry : splitBeanMaps.entrySet()) { + String mapKey = entry.getKey(); + kqLog.info("加班流程是否存在 =>"+entry.getKey()+"=>"+splitBeanMaps.containsKey(mapKey)); + if(splitBeanMaps.containsKey(mapKey)) { + List splitBeans = splitBeanMaps.get(mapKey); + if (splitBeans == null || splitBeans.isEmpty()) { + continue; + } + for (int j = 0; j < splitBeans.size(); j++) { + SplitBean splitBean = splitBeans.get(j); + kqLog.info("直接通过加班流程生成加班数据:" + splitBean.getRequestId()); + SplitActionUtil.doComputingMode1_splitBean(computingMode,splitBean); + } + } + } + } + Iterator> iterator = lsCheckInfoMaps.entrySet().iterator(); while (iterator.hasNext()) { Entry next = iterator.next(); + kqLog.info("lsCheckInfoMaps next==>"+next.toString()); String mapKey = next.getKey(); + kqLog.info("lsCheckInfoMaps mapKey==>"+mapKey); KQOvertimeCardBean kqOvertimeCardBean = next.getValue(); String[] mapKeys = mapKey.split("_"); if (mapKeys.length != 2) { continue; } String realSplitDate = mapKeys[1]; + kqLog.info("realSplitDate ==>"+realSplitDate); String change_key = realSplitDate+"_"+resourceid; int changeType = Util.getIntValue(""+changeTypeMap.get(change_key),-1); String changeType_key = realSplitDate+"_"+changeType; int computingMode = Util.getIntValue(""+computingModeMap.get(changeType_key),-1); boolean isOk = true; - new BaseBean().writeLog("新加班规则5 ==>"+computingMode); //把原来下面一个方法里的内容要抽出来,是因为存在如下的问题,如果我是跨天打卡,次日3点,加班归属点设置的是次日2点,2-3这部分的是属于第二天的,需要判断下第二天的加班方式是不是doComputingMode2,如果不是就需要去走对应的doComputingMode方法 if(2 == computingMode){ isOk = doComputingMode2WithCard(kqOvertimeCardBean,mapKey,resourceid,changeTypeMap, @@ -128,6 +157,7 @@ public class KQOverTimeRuleCalBiz { dateFormatter,overtimeLogMap,splitDate,overRulesDetailMap,eventMap,kqTimesArrayComInfo, restTimeMap,kqEventLogBiz,uuid,realSplitDate); }else if(5 == computingMode){ + //进入该方法时有两种情况1.只有打卡数据没有加班流程;2.既有加班流程又有打卡数据 isOk = doComputingMode5WithCard(computingMode,kqOvertimeCardBean,mapKey,resourceid,changeTypeMap, dateFormatter,overtimeLogMap,splitDate,overRulesDetailMap,eventMap,kqTimesArrayComInfo, restTimeMap,kqEventLogBiz,uuid,realSplitDate); @@ -136,6 +166,8 @@ public class KQOverTimeRuleCalBiz { continue; } } + + }catch (Exception e){ kqLog.info("加班生成数据报错:KQOverTimeRuleCalBiz:"); StringWriter errorsWriter = new StringWriter(); @@ -339,26 +371,24 @@ public class KQOverTimeRuleCalBiz { private boolean doComputingMode5WithCard(int computingMode,KQOvertimeCardBean kqOvertimeCardBean, String mapKey, String resourceid, Map changeTypeMap, DateTimeFormatter dateFormatter, Map overtimeLogMap, String splitDate, Map overRulesDetailMap, Map eventMap, KQTimesArrayComInfo kqTimesArrayComInfo, Map> restTimeMap, KQOvertimeLogBiz kqEventLogBiz, String uuid, String realSplitDate) throws Exception{ - BaseBean bb = new BaseBean(); Map> splitBeanMaps = Maps.newHashMap(); //获取加班流程数据 getOverTimeFlowData(resourceid,realSplitDate,realSplitDate,splitBeanMaps,dateFormatter); - //有加班流程 以加班流程数据为准 - bb.writeLog("加班流程是否存在 =>"+splitBeanMaps.containsKey(mapKey)); + //1.有加班流程 以加班流程数据为准 + kqLog.info("加班流程是否存在 =>"+splitBeanMaps.containsKey(mapKey)); if(splitBeanMaps.containsKey(mapKey)) { List splitBeans = splitBeanMaps.get(mapKey); - bb.writeLog("splitBeans是否为空 =>"+splitBeans.toString()); + kqLog.info("splitBeans是否为空 =>"+splitBeans.toString()); if(splitBeans == null || splitBeans.isEmpty()){ return false; } for (int i = 0; i < splitBeans.size(); i++) { SplitBean splitBean = splitBeans.get(i); - bb.writeLog("生成加班数据 =>"+computingMode); SplitActionUtil.doComputingMode1_splitBean(computingMode,splitBean); } }else { - //没有加班流程 以打卡数据为准 直接走3 + //2.没有加班流程 以打卡数据为准 直接走3 doComputingMode3WithCard(computingMode,kqOvertimeCardBean,mapKey,resourceid,changeTypeMap, dateFormatter,overtimeLogMap,splitDate,overRulesDetailMap,eventMap,kqTimesArrayComInfo, restTimeMap,kqEventLogBiz,uuid,realSplitDate); diff --git a/src/com/engine/kq/wfset/util/KQFlowUtil.java b/src/com/engine/kq/wfset/util/KQFlowUtil.java index c423679..45cea24 100644 --- a/src/com/engine/kq/wfset/util/KQFlowUtil.java +++ b/src/com/engine/kq/wfset/util/KQFlowUtil.java @@ -405,6 +405,7 @@ public class KQFlowUtil { }else{ if(flowTypeEnum == KqSplitFlowTypeEnum.OVERTIME){ //正常归档的时候 单独针对加班规则的第一 第二种模式 生成加班数据 + kqLog.info("正常归档:"+requestId); SplitActionUtil.handleOverTimeActionMode2(splitBeans, ""+requestId); } } @@ -416,6 +417,7 @@ public class KQFlowUtil { rs.executeUpdate(sql, splitBean.getRequestId()); } } + kqLog.info("升级方向:"+requestId); SplitActionUtil.handleOverTimeActionMode2(splitBeans, ""+requestId); } } diff --git a/src/com/engine/kq/wfset/util/SplitActionUtil.java b/src/com/engine/kq/wfset/util/SplitActionUtil.java index dff98df..2a57ab4 100644 --- a/src/com/engine/kq/wfset/util/SplitActionUtil.java +++ b/src/com/engine/kq/wfset/util/SplitActionUtil.java @@ -70,15 +70,20 @@ public class SplitActionUtil extends BaseBean { public static void handleOverTimeActionMode2(List splitBeans, String requestid) { clearSameRequestTX(requestid); KQTimesArrayComInfo kqTimesArrayComInfo = new KQTimesArrayComInfo(); + KQOverTimeRuleCalBiz kqOvertimeCalBiz = new KQOverTimeRuleCalBiz(); List overKeys = new ArrayList<>(); + kqLog.info("加班流程个数:"+requestid +"=>"+ splitBeans.size()); for (int i = 0; i < splitBeans.size(); i++) { SplitBean splitBean = splitBeans.get(i); int computingMode = Util.getIntValue(splitBean.getComputingMode()); + kqLog.info("加班规则模式computingMode:" + computingMode); + //判断流程对应的日期下有没有打卡数据,如果有的话,需要生成相应的调休数据 + String belongDate = splitBean.getBelongDate(); + String resourceId = splitBean.getResourceId(); + String fromtime = splitBean.getFromTime(); + String belongToDate = DateUtil.addDate(belongDate, 1); + kqLog.info("AISIN参数:" + resourceId + "_" + belongDate + "_" + DateUtil.addDate(belongDate, 1)); if (computingMode == 2 || computingMode == 4) { - //判断流程对应的日期下有没有打卡数据,如果有的话,需要生成相应的调休数据 - String belongDate = splitBean.getBelongDate(); - String resourceId = splitBean.getResourceId(); - String fromtime = splitBean.getFromTime(); int fromtimeIndex = kqTimesArrayComInfo.getArrayindexByTimes(fromtime); String key = resourceId + "_" + belongDate + "_" + belongDate; if (fromtimeIndex > 1439) { @@ -92,9 +97,14 @@ public class SplitActionUtil extends BaseBean { if (computingMode == 1) { doComputingMode1_splitBean(computingMode,splitBean); } + if (computingMode == 5) { + kqLog.info("加班规则5直接进入计算并返回"); + kqOvertimeCalBiz.buildOvertime(resourceId, belongDate, belongToDate, "加班流程生成加班#flow,requestId:" + requestid); + return; + } } - KQOverTimeRuleCalBiz kqOvertimeCalBiz = new KQOverTimeRuleCalBiz(); - kqLog.info("加班生成调休:handleOverTimeActionMode2 overKeys:" + JSON.toJSONString(overKeys)); + + kqLog.info("加班生成调休:handleOverTimeActionMode2 overKeys:"+requestid+"=>"+ JSON.toJSONString(overKeys)); if (overKeys != null && !overKeys.isEmpty()) { for (String key : overKeys) { String[] keys = key.split("_", -1); @@ -243,6 +253,7 @@ public class SplitActionUtil extends BaseBean { clearSameRequestTX(requestid); } KQTimesArrayComInfo kqTimesArrayComInfo = new KQTimesArrayComInfo(); + KQOverTimeRuleCalBiz kqOvertimeCalBiz = new KQOverTimeRuleCalBiz(); RecordSet rs = new RecordSet(); List overKeys = new ArrayList<>(); for (int i = 0; i < splitBeans.size(); i++) { @@ -283,9 +294,13 @@ public class SplitActionUtil extends BaseBean { overKeys.add(key); } } + if (computingMode == 5) { + kqLog.info("加班规则5直接进入计算并返回"); + kqOvertimeCalBiz.buildOvertime(resourceId, belongDate, toDate, "加班流程生成加班#flow,requestId:" + requestid); + return; + } } } - KQOverTimeRuleCalBiz kqOvertimeCalBiz = new KQOverTimeRuleCalBiz(); kqLog.info("加班生成调休:handleOverTimeAction overKeys:" + JSON.toJSONString(overKeys)); if (overKeys != null && !overKeys.isEmpty()) { for (String key : overKeys) { diff --git a/src/weaver/interfaces/aisin/cron/KqConfirmWfCrob.java b/src/weaver/interfaces/aisin/cron/KqConfirmWfCrob.java index 4a24c8a..4a30ade 100644 --- a/src/weaver/interfaces/aisin/cron/KqConfirmWfCrob.java +++ b/src/weaver/interfaces/aisin/cron/KqConfirmWfCrob.java @@ -179,12 +179,19 @@ public class KqConfirmWfCrob extends BaseCronJob { leaveBackMins = leaveBack(leavebackrequestid, e.getResourceId(), belongDate); } String reduce = getReduce(d_mins, leaveBackMins); - leaveDetails.add(LeaveDetailTableInfo.builder() - .date(belongDate) - .serialId(serialId) - .leaveType(leaveType) - .hours(minutesToHours(reduce)) - .build()); + //test + if ("8595".equals(e.getResourceId())) { + bb.writeLog("测试请假仙女14 =>" +d_mins+","+leaveBackMins); + } + if (!d_mins.equals(leaveBackMins)) { + leaveDetails.add(LeaveDetailTableInfo.builder() + .date(belongDate) + .serialId(serialId) + .leaveType(leaveType) + .hours(minutesToHours(reduce)) + .build()); + } + } leaveDetails.forEach(leave -> rs.executeUpdate("insert into "+tableName+"_dt3 (mainid,qjrq,qjbc,qjlx,qjxs) values(?,?,?,?,?)",mainId,