From 454f9c2c87a191e6e33453181e4aaf9fee2971f4 Mon Sep 17 00:00:00 2001 From: liuliang <401809302@qq.com> Date: Thu, 28 Nov 2024 11:08:54 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=A0=E7=8F=AD=E5=A2=9E=E5=8A=A0=E5=BD=93?= =?UTF-8?q?=E6=9C=88=E6=9C=88=E6=9C=AB=EF=BC=8C=E5=87=BA=E5=8B=A4=E5=88=86?= =?UTF-8?q?=E6=9E=90=E9=80=82=E9=85=8D=E5=87=BA=E5=B7=AE=E8=AF=B7=E5=81=87?= =?UTF-8?q?=E6=B5=81=E7=A8=8B=E5=8F=98=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cmd/GetEvectionCmd.java | 8 +- .../cmd/workovertime/SaveWorkOverTimeCmd.java | 3 + .../service/impl/AskForLeaveServiceImpl.java | 4 +- .../service/impl/EvectionServiceImpl.java | 4 +- .../impl/ForgetClockInServiceImpl.java | 7 +- .../web/AttendanceanalysisAction.java | 53 ++++- .../wrapper/AttendanceAnalysisWrapper.java | 210 +++++++++--------- .../UpdateAttendanceResultWrapper.java | 12 +- .../commonutil/PersongroupCommonUtil.java | 6 +- .../service/impl/VocationServiceImpl.java | 2 + .../jucailinkq/common/util/CommonUtil.java | 24 ++ 11 files changed, 204 insertions(+), 129 deletions(-) diff --git a/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/GetEvectionCmd.java b/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/GetEvectionCmd.java index 66d4f6b..3a68330 100644 --- a/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/GetEvectionCmd.java +++ b/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/GetEvectionCmd.java @@ -131,20 +131,20 @@ public class GetEvectionCmd extends AbstractCommonCommand> { evectionGroupMap.entrySet().forEach(e->{ if (e.getValue().size()>1){ Map beforeEvectionMap = e.getValue().get(0); - Map beforeEvectionItem = collect.get(beforeEvectionMap.get("jqlx")).get(0); + Map beforeEvectionItem = collect.get(beforeEvectionMap.get("cclx")).get(0); String beforeJcbyxsyqjb = Util.null2String(beforeEvectionItem.get("jcbyxsyqjb")); String beforeyxsydjb = Util.null2String(beforeEvectionItem.get("yxsydjb")); Map afterEvectionMap = e.getValue().get(1); - Map afterEvectionItem = collect.get(afterEvectionMap.get("jqlx")).get(0); + Map afterEvectionItem = collect.get(afterEvectionMap.get("cclx")).get(0); String afterJcbyxsyqjb = Util.null2String(afterEvectionItem.get("jcbyxsyqjb")); String afteryxsydjb = Util.null2String(afterEvectionItem.get("yxsydjb")); if (CheckBoxEnum.CHECKED.getKey().equals(beforeJcbyxsyqjb)){ - if (beforeyxsydjb.equals(afterEvectionMap.get("jqlx"))){ + if (beforeyxsydjb.equals(afterEvectionMap.get("cclx"))){ filterEvectionList.add(beforeEvectionMap); } }else if (CheckBoxEnum.CHECKED.getKey().equals(afterJcbyxsyqjb)){ - if (afteryxsydjb.equals(beforeEvectionMap.get("jqlx"))){ + if (afteryxsydjb.equals(beforeEvectionMap.get("cclx"))){ filterEvectionList.add(afterEvectionMap); } }else { diff --git a/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/workovertime/SaveWorkOverTimeCmd.java b/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/workovertime/SaveWorkOverTimeCmd.java index c7b2cf1..1eb3575 100644 --- a/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/workovertime/SaveWorkOverTimeCmd.java +++ b/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/workovertime/SaveWorkOverTimeCmd.java @@ -243,6 +243,9 @@ public class SaveWorkOverTimeCmd extends AbstractCommonCommand leaveMap = Maps.newHashMap(); leaveMap.put("kssj",kssj); leaveMap.put("jssj",jssj); - int betweenTime = Integer.valueOf(betweenMinutes); + int betweenTime = Double.valueOf(betweenMinutes).intValue(); int intersectionTime = Utils.getIntersectionTime(classStartTime,classEndTime,leaveMap,scheduleResult,analysisDate); if (betweenTime <= intersectionTime){ offsetAskForLeaveAnomaly.add(abnormalClockInList.get(i)); @@ -337,7 +337,7 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic AttendanceItemTypeEnum itemType = (AttendanceItemTypeEnum)offsetAbnormal.get("itemType"); String classStartTime = Util.null2String(offsetAbnormal.get("classStartTime")); String classEndTime = Util.null2String(offsetAbnormal.get("classEndTime")); - if (abnormalClockInList.size() > 0){ + if (abnormalClockInList.size() > 0 && !"".equals(classStartTime) && !"".equals(classEndTime)){ for (int i = abnormalClockInList.size()-1;i>=0;i--){ if (!(boolean)abnormalClockInList.get(i).get("record") && abnormalClockInList.get(i).get("itemType") == itemType && DateUtil.getTime(classStartTime).compareTo(DateUtil.getTime(abnormalClockInList.get(i).get("pointTime").toString())) <= 0 && diff --git a/src/com/engine/jucailinkq/attendance/attendanceanalysis/service/impl/EvectionServiceImpl.java b/src/com/engine/jucailinkq/attendance/attendanceanalysis/service/impl/EvectionServiceImpl.java index 2fd7b3e..dbc1c92 100644 --- a/src/com/engine/jucailinkq/attendance/attendanceanalysis/service/impl/EvectionServiceImpl.java +++ b/src/com/engine/jucailinkq/attendance/attendanceanalysis/service/impl/EvectionServiceImpl.java @@ -44,7 +44,7 @@ public class EvectionServiceImpl extends Service implements EvectionService { Map leaveMap = Maps.newHashMap(); leaveMap.put("kssj",kssj); leaveMap.put("jssj",jssj); - int betweenTime = Integer.valueOf(betweenMinutes); + int betweenTime = Double.valueOf(betweenMinutes).intValue(); int intersectionTime = Utils.getIntersectionTime(classStartTime,classEndTime,leaveMap,scheduleResult,analysisDate); if (betweenTime <= intersectionTime){ offsetEvectionAnomaly.add(abnormalClockInList.get(i)); @@ -328,7 +328,7 @@ public class EvectionServiceImpl extends Service implements EvectionService { AttendanceItemTypeEnum itemType = (AttendanceItemTypeEnum)offsetAbnormal.get("itemType"); String classStartTime = Util.null2String(offsetAbnormal.get("classStartTime")); String classEndTime = Util.null2String(offsetAbnormal.get("classEndTime")); - if (abnormalClockInList.size() > 0){ + if (abnormalClockInList.size() > 0 && !"".equals(classStartTime) && !"".equals(classEndTime)){ for (int i = abnormalClockInList.size()-1;i>=0;i--){ if (!(boolean)abnormalClockInList.get(i).get("record") && abnormalClockInList.get(i).get("itemType") == itemType && DateUtil.getTime(classStartTime).compareTo(DateUtil.getTime(abnormalClockInList.get(i).get("pointTime").toString())) <= 0 && diff --git a/src/com/engine/jucailinkq/attendance/attendanceanalysis/service/impl/ForgetClockInServiceImpl.java b/src/com/engine/jucailinkq/attendance/attendanceanalysis/service/impl/ForgetClockInServiceImpl.java index a2f755e..a5b024f 100644 --- a/src/com/engine/jucailinkq/attendance/attendanceanalysis/service/impl/ForgetClockInServiceImpl.java +++ b/src/com/engine/jucailinkq/attendance/attendanceanalysis/service/impl/ForgetClockInServiceImpl.java @@ -35,6 +35,7 @@ public class ForgetClockInServiceImpl extends Service implements ForgetClockInSe @Override public List> forgetClockIn(Map params) { Map classInfo = (Map)params.get("classInfo"); + String analysisDate = params.get("analysisDate").toString(); //班段类型 String bdlx = Util.null2String(classInfo.get("bdlx")); @@ -47,12 +48,16 @@ public class ForgetClockInServiceImpl extends Service implements ForgetClockInSe List> resultList = Lists.newArrayList(); attendanceItems = attendanceItems.stream().filter(e->e.get("key").equals(SystemItemEnum.MISSING_CLOCK_IN.getKey())).collect(Collectors.toList()); if (attendanceItems.size() > 0){ + Map forgetParam = Maps.newHashMap(); forgetParam.put("item", SystemItemEnum.MISSING_CLOCK_IN.getKey()); forgetParam.put("itemduration", 1); forgetParam.put("itemType", AttendanceItemTypeEnum.MISSE_CARD); forgetParam.put("zysd",attendanceItems.get(0).get("zysd")); forgetParam.put("kczgsc", CheckBoxEnum.CHECKED.getKey()); + // forgetParam.put("classStartTime",Utils.getkssjTime(classInfo,analysisDate)); + //forgetParam.put("classEndTime",Utils.getjssjTime(classInfo,analysisDate)); + //forgetParam.put("betweenMinutes",DateUtil.getBetWeenMinutes(forgetParam.get("classStartTime").toString(),forgetParam.get("classEndTime").toString())); resultList.add(forgetParam); } return resultList; @@ -119,7 +124,7 @@ public class ForgetClockInServiceImpl extends Service implements ForgetClockInSe forgotMap.put("bdlx",bdlx); forgotMap.put("hsdw",hsdw); forgotMap.put("kczgsc",items.get(0).get("kczgsc")); - forgotMap.put("betweenMinutes",edfzs); + forgotMap.put("betweenMinutes",Double.valueOf(edfzs).intValue()); forgotMap.put("hsl",items.get(0).get("hsl")); forgotMap.put("classStartTime",dtkssj); forgotMap.put("classEndTime",dtjssj); diff --git a/src/com/engine/jucailinkq/attendance/attendanceanalysis/web/AttendanceanalysisAction.java b/src/com/engine/jucailinkq/attendance/attendanceanalysis/web/AttendanceanalysisAction.java index c50a706..eabf6ff 100644 --- a/src/com/engine/jucailinkq/attendance/attendanceanalysis/web/AttendanceanalysisAction.java +++ b/src/com/engine/jucailinkq/attendance/attendanceanalysis/web/AttendanceanalysisAction.java @@ -8,6 +8,7 @@ import com.engine.jucailinkq.attendance.attendanceplan.service.impl.AttendancePl import com.engine.jucailinkq.attendance.workflow.service.AllowanceService; import com.engine.jucailinkq.attendance.workflow.service.impl.AllowanceServiceImpl; import com.engine.common.util.*; +import com.engine.jucailinkq.common.exception.AttendanceRunTimeException; import com.engine.jucailinkq.common.service.CommonService; import com.engine.jucailinkq.common.service.impl.CommonServiceImpl; import com.engine.jucailinkq.common.util.*; @@ -48,9 +49,9 @@ public class AttendanceanalysisAction { log.info("********AttendanceanalysisAction start********"); Map paramMap = ParamUtil.request2Map(request); // Map paramMap = Maps.newHashMap(); -// paramMap.put("startDate","2024-11-05"); -// paramMap.put("endDate","2024-11-05"); -// paramMap.put("userIds","82"); +// paramMap.put("startDate","2024-11-22"); +// paramMap.put("endDate","2024-11-22"); +// paramMap.put("userIds","22"); String startDate = Util.null2String(paramMap.get("startDate")); String startBeforeDate = DateUtil.beforeDay(startDate,2); @@ -90,6 +91,7 @@ public class AttendanceanalysisAction { if ("".equals(userIds)){ + log.info("********AttendanceanalysisAction prepare start******"); String queryDepartEmployeeSql = "select resourceid ,changedate,type_n from HRMSTATUSHISTORY where (type_n = 5 or type_n = 7) and changedate <> '' and changedate is not null"; //获取离职日期 List> departEmployeeList = DbTools.getSqlToList(queryDepartEmployeeSql); @@ -133,16 +135,17 @@ public class AttendanceanalysisAction { List> attendaceResult = DbTools.getSqlToList(sql,startBeforeDate,endAfterDate); Map>> attendaceGroupById = attendaceResult.stream().collect(Collectors.groupingBy(e->e.get("ygid").toString())); - + log.info("********AttendanceanalysisAction prepare end******"); + int anyslsSize = 0; for (Map userMap :userList){ - + anyslsSize++; String userId = userMap.get("id").toString(); //入职日期 String companystartDate = Util.null2String(userMap.get("companystartdate")); //离职日期 String terminationDate = Util.null2String(departEmployeeMap.get(userId)); - log.info("***********analysis userId:{} start***********", userId); + log.info("***********analysis userId:{},anyslsSize:{},allsize:{} start***********", userId,anyslsSize,userList.size()); //出勤结果,进出时间 Map> clockInTimeMap = Maps.newHashMap(); @@ -178,19 +181,30 @@ public class AttendanceanalysisAction { if (leaveAndEntry.equals("1")){ if (("".equals(companystartDate) || DateUtil.getTime(date).compareTo(DateUtil.getTime(companystartDate))>0) && ("".equals(terminationDate) || DateUtil.getTime(date).compareTo(DateUtil.getTime(terminationDate)) <0)){ + try { + attendanceAnalysisService.attendanceAnalysisForApi(userId,date,collect.get(userId),analysisParam,clockInTimeMap,attendaceResultMap); - attendanceAnalysisService.attendanceAnalysisForApi(userId,date,collect.get(userId),analysisParam,clockInTimeMap,attendaceResultMap); + }catch (Exception e){ + log.info("***********analysis userId:{} date: {} error ***********", userId,date); + log.error("execute fail,catch error: [{}]",e); + } } }else { if (("".equals(companystartDate) || DateUtil.getTime(date).compareTo(DateUtil.getTime(companystartDate))>=0) && ("".equals(terminationDate) || DateUtil.getTime(date).compareTo(DateUtil.getTime(terminationDate)) <=0)){ - attendanceAnalysisService.attendanceAnalysisForApi(userId,date,collect.get(userId),analysisParam,clockInTimeMap,attendaceResultMap); + try { + attendanceAnalysisService.attendanceAnalysisForApi(userId,date,collect.get(userId),analysisParam,clockInTimeMap,attendaceResultMap); + }catch (Exception e){ + log.info("***********analysis userId:{} date: {} error ***********", userId,date); + log.error("execute fail,catch error: [{}]",e); + } } } } allowanceService.addAllowanceRecords(paramMap); } }else { + log.info("********AttendanceanalysisAction prepare start******"); String queryDepartEmployeeSql = "select resourceid ,changedate,type_n from HRMSTATUSHISTORY where (type_n = 5 or type_n = 7) and changedate <> '' and changedate is not null and resourceid in ("+userIds+")"; //获取离职日期 List> departEmployeeList = DbTools.getSqlToList(queryDepartEmployeeSql); @@ -239,6 +253,7 @@ public class AttendanceanalysisAction { Map>> attendaceGroupById = attendaceResult.stream().collect(Collectors.groupingBy(e->e.get("ygid").toString())); + log.info("********AttendanceanalysisAction prepare end******"); for (String userId : userIds.split(",")){ //入职日期 String companystartDate = Util.null2String(userGroupMap.get(userId).get(0).get("companystartdate")); @@ -279,14 +294,30 @@ public class AttendanceanalysisAction { if (("".equals(companystartDate) || DateUtil.getTime(date).compareTo(DateUtil.getTime(companystartDate))>0) && ("".equals(terminationDate) || DateUtil.getTime(date).compareTo(DateUtil.getTime(terminationDate)) <0)){ log.info("***********analysis userId:{},analysisDate:{} start***********", userId, date); - attendanceAnalysisService.attendanceAnalysisForApi(userId,date,collect.get(userId),analysisParam,clockInTimeMap,attendaceResultMap); - + try { + attendanceAnalysisService.attendanceAnalysisForApi(userId,date,collect.get(userId),analysisParam,clockInTimeMap,attendaceResultMap); + + }catch (Exception e){ + log.info("***********analysis userId:{} date: {} error ***********", userId,date); + log.error("execute fail,catch error: [{}]",e); + if (userIds.split(",").length ==1 && startDate.equals(endDate)){ + throw new AttendanceRunTimeException("analysis error "); + } + } } }else { if (("".equals(companystartDate) || DateUtil.getTime(date).compareTo(DateUtil.getTime(companystartDate))>=0) && ("".equals(terminationDate) || DateUtil.getTime(date).compareTo(DateUtil.getTime(terminationDate)) <=0)){ log.info("***********analysis userId:{},analysisDate:{} start***********", userId, date); - attendanceAnalysisService.attendanceAnalysisForApi(userId,date,collect.get(userId),analysisParam,clockInTimeMap,attendaceResultMap); + try { + attendanceAnalysisService.attendanceAnalysisForApi(userId,date,collect.get(userId),analysisParam,clockInTimeMap,attendaceResultMap); + }catch (Exception e){ + log.info("***********analysis userId:{} date: {} error ***********", userId,date); + log.error("execute fail,catch error: [{}]",e); + if (userIds.split(",").length ==1 && startDate.equals(endDate)){ + throw new AttendanceRunTimeException("analysis error "); + } + } } } } diff --git a/src/com/engine/jucailinkq/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper.java b/src/com/engine/jucailinkq/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper.java index 4e22c55..06f2b8b 100644 --- a/src/com/engine/jucailinkq/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper.java +++ b/src/com/engine/jucailinkq/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper.java @@ -64,116 +64,122 @@ public class AttendanceAnalysisWrapper extends Service { for (String analysisDate :analysisDateList){ - /**获得人员考勤项目*/ - Map getAttendacneParamMap = Maps.newHashMap(); - getAttendacneParamMap.put("userId",userId); - getAttendacneParamMap.put("departmentId",departmentid); - getAttendacneParamMap.put("subCompanyId",subcompanyid1); - getAttendacneParamMap.put("anysisyDate",analysisDate); - getAttendacneParamMap.put("seclevel",analysisParam.get("seclevel")); - getAttendacneParamMap.putAll(attendancePlanMap); - - /** - * 获得综合工时 - */ - List> workHourItems = Lists.newArrayList(); - List> analysisDateWorkingHourList = comprehensiveWorkingHourList.stream().filter(e->{ - if ((!"".equals(Util.null2String(e.get("bdate"))) && DateUtil.getTime(analysisDate).compareTo(DateUtil.getTime(e.get("bdate"))) <0) || - (!"".equals(Util.null2String(e.get("edate"))) && DateUtil.getTime(analysisDate).compareTo(DateUtil.getTime(e.get("edate"))) > 0)){ - return false; - }else { - return true; - } - }).collect(Collectors.toList()); - if (analysisDateWorkingHourList.size() > 0){ - analysisDateWorkingHourList = analysisDateWorkingHourList.stream().sorted(Comparator.comparing(e->Integer.valueOf(e.get("priority")))).collect(Collectors.toList()); - if (workingHourGroupBy.get(analysisDateWorkingHourList.get(0).get("dataid")) != null && - workingHourGroupBy.get(analysisDateWorkingHourList.get(0).get("dataid")).size()>0){ - workHourItems.addAll(workingHourGroupBy.get(analysisDateWorkingHourList.get(0).get("dataid"))); + try { + /**获得人员考勤项目*/ + Map getAttendacneParamMap = Maps.newHashMap(); + getAttendacneParamMap.put("userId",userId); + getAttendacneParamMap.put("departmentId",departmentid); + getAttendacneParamMap.put("subCompanyId",subcompanyid1); + getAttendacneParamMap.put("anysisyDate",analysisDate); + getAttendacneParamMap.put("seclevel",analysisParam.get("seclevel")); + getAttendacneParamMap.putAll(attendancePlanMap); + + /** + * 获得综合工时 + */ + List> workHourItems = Lists.newArrayList(); + List> analysisDateWorkingHourList = comprehensiveWorkingHourList.stream().filter(e->{ + if ((!"".equals(Util.null2String(e.get("bdate"))) && DateUtil.getTime(analysisDate).compareTo(DateUtil.getTime(e.get("bdate"))) <0) || + (!"".equals(Util.null2String(e.get("edate"))) && DateUtil.getTime(analysisDate).compareTo(DateUtil.getTime(e.get("edate"))) > 0)){ + return false; + }else { + return true; + } + }).collect(Collectors.toList()); + if (analysisDateWorkingHourList.size() > 0){ + analysisDateWorkingHourList = analysisDateWorkingHourList.stream().sorted(Comparator.comparing(e->Integer.valueOf(e.get("priority")))).collect(Collectors.toList()); + if (workingHourGroupBy.get(analysisDateWorkingHourList.get(0).get("dataid")) != null && + workingHourGroupBy.get(analysisDateWorkingHourList.get(0).get("dataid")).size()>0){ + workHourItems.addAll(workingHourGroupBy.get(analysisDateWorkingHourList.get(0).get("dataid"))); + } } - } - /** 获取人员班次*/ - Map classesParamMap = Maps.newHashMap(); - classesParamMap.put("startDate", analysisDate); - classesParamMap.put("endDate", analysisDate); - classesParamMap.put("pbdx", userId); - classesParamMap.put("clockInTimeMap", clockInTimeMap); - classesParamMap.put("clockInData", dataList); - classesParamMap.put("allScheduleList",analysisParam.get("allScheduleList")); - classesParamMap.put("allClassInfoList",analysisParam.get("allClassInfoList")); - classesParamMap.put("allOverPlanList",analysisParam.get("allOverPlanList")); - classesParamMap.put("attendaceResultMap",attendaceResultMap); - classesParamMap.put("evectionList",analysisParam.get("evectionList")); - classesParamMap.put("askforList",analysisParam.get("askforList")); - classesParamMap.put("hxbzList",analysisParam.get("hxbzList")); - - List> analysisDateAttendaceResult = attendaceResultMap.get(analysisDate); - List> analysisDateAttendanceItems =Lists.newArrayList(); - Map schedulMap = null; - if (analysisDateAttendaceResult == null || analysisDateAttendaceResult.size() == 0 || (!CheckBoxEnum.CHECKED.getKey().equals(analysisDateAttendaceResult.get(0).get("sgsj")) && - !"3".equals(analysisDateAttendaceResult.get(0).get("sjzt")))) { + /** 获取人员班次*/ + Map classesParamMap = Maps.newHashMap(); + classesParamMap.put("startDate", analysisDate); + classesParamMap.put("endDate", analysisDate); + classesParamMap.put("pbdx", userId); + classesParamMap.put("clockInTimeMap", clockInTimeMap); + classesParamMap.put("clockInData", dataList); + classesParamMap.put("allScheduleList",analysisParam.get("allScheduleList")); + classesParamMap.put("allClassInfoList",analysisParam.get("allClassInfoList")); + classesParamMap.put("allOverPlanList",analysisParam.get("allOverPlanList")); + classesParamMap.put("attendaceResultMap",attendaceResultMap); + classesParamMap.put("evectionList",analysisParam.get("evectionList")); + classesParamMap.put("askforList",analysisParam.get("askforList")); + classesParamMap.put("hxbzList",analysisParam.get("hxbzList")); + + List> analysisDateAttendaceResult = attendaceResultMap.get(analysisDate); + List> analysisDateAttendanceItems =Lists.newArrayList(); + Map schedulMap = null; + if (analysisDateAttendaceResult == null || analysisDateAttendaceResult.size() == 0 || (!CheckBoxEnum.CHECKED.getKey().equals(analysisDateAttendaceResult.get(0).get("sgsj")) && + !"3".equals(analysisDateAttendaceResult.get(0).get("sjzt")))) { /**人员换了部门,需班次、分部、部门继续走老的*/ - if (analysisDateAttendaceResult!=null && analysisDateAttendaceResult.size() >0 && (!analysisDateAttendaceResult.get(0).get("fbid").equals(subcompanyid1) || !analysisDateAttendaceResult.get(0).get("bm").equals(departmentid))){ - String olddepartmentid = analysisDateAttendaceResult.get(0).get("bm").toString(); - String oldsubCompanyid = analysisDateAttendaceResult.get(0).get("fbid").toString(); - - //旧的考勤项目 - getAttendacneParamMap.put("departmentId",olddepartmentid); - getAttendacneParamMap.put("subCompanyId",oldsubCompanyid); - Map attendanceItemresultMap = utilService.getAttendanceItems(getAttendacneParamMap); - Set attendanceItems = (Set)attendanceItemresultMap.get("attendanceItems"); - for (String attendanceItemId:attendanceItems){ - if (attendanceItemGroupByPlan.get(attendanceItemId) != null && - attendanceItemGroupByPlan.get(attendanceItemId).size()>0){ - analysisDateAttendanceItems.addAll(attendanceItemGroupByPlan.get(attendanceItemId)); + + if (analysisDateAttendaceResult!=null && analysisDateAttendaceResult.size() >0 && (!analysisDateAttendaceResult.get(0).get("fbid").equals(subcompanyid1) || !analysisDateAttendaceResult.get(0).get("bm").equals(departmentid))){ + String olddepartmentid = analysisDateAttendaceResult.get(0).get("bm").toString(); + String oldsubCompanyid = analysisDateAttendaceResult.get(0).get("fbid").toString(); + + //旧的考勤项目 + getAttendacneParamMap.put("departmentId",olddepartmentid); + getAttendacneParamMap.put("subCompanyId",oldsubCompanyid); + Map attendanceItemresultMap = utilService.getAttendanceItems(getAttendacneParamMap); + Set attendanceItems = (Set)attendanceItemresultMap.get("attendanceItems"); + for (String attendanceItemId:attendanceItems){ + if (attendanceItemGroupByPlan.get(attendanceItemId) != null && + attendanceItemGroupByPlan.get(attendanceItemId).size()>0){ + analysisDateAttendanceItems.addAll(attendanceItemGroupByPlan.get(attendanceItemId)); + } } - } - analysisDateAttendanceItems.addAll(generalAttendanceItems); - - - //旧的综合工时 - Map workhourpersonOrganzationMap = (Map)analysisParam.get("workhourpersonOrganzationMap"); - Map workhourdepartMentMap = (Map)analysisParam.get("workhourdepartMentMap"); - Map workhoursubCompanyMap = (Map)analysisParam.get("workhoursubCompanyMap"); - - - //旧的班次 - classesParamMap.put("olddepartmentid",olddepartmentid); - classesParamMap.put("oldsubCompanyid",oldsubCompanyid); - classesParamMap.put("attendanceItems", analysisDateAttendanceItems); - schedulMap = utilService.getSchedulingInFormation(classesParamMap); - }else { - Map attendanceItemresultMap = utilService.getAttendanceItems(getAttendacneParamMap); - Set attendanceItems = (Set)attendanceItemresultMap.get("attendanceItems"); - for (String attendanceItemId:attendanceItems){ - if (attendanceItemGroupByPlan.get(attendanceItemId) != null && - attendanceItemGroupByPlan.get(attendanceItemId).size()>0){ - analysisDateAttendanceItems.addAll(attendanceItemGroupByPlan.get(attendanceItemId)); + analysisDateAttendanceItems.addAll(generalAttendanceItems); + + + //旧的综合工时 + Map workhourpersonOrganzationMap = (Map)analysisParam.get("workhourpersonOrganzationMap"); + Map workhourdepartMentMap = (Map)analysisParam.get("workhourdepartMentMap"); + Map workhoursubCompanyMap = (Map)analysisParam.get("workhoursubCompanyMap"); + + + //旧的班次 + classesParamMap.put("olddepartmentid",olddepartmentid); + classesParamMap.put("oldsubCompanyid",oldsubCompanyid); + classesParamMap.put("attendanceItems", analysisDateAttendanceItems); + schedulMap = utilService.getSchedulingInFormation(classesParamMap); + }else { + Map attendanceItemresultMap = utilService.getAttendanceItems(getAttendacneParamMap); + Set attendanceItems = (Set)attendanceItemresultMap.get("attendanceItems"); + for (String attendanceItemId:attendanceItems){ + if (attendanceItemGroupByPlan.get(attendanceItemId) != null && + attendanceItemGroupByPlan.get(attendanceItemId).size()>0){ + analysisDateAttendanceItems.addAll(attendanceItemGroupByPlan.get(attendanceItemId)); + } } + analysisDateAttendanceItems.addAll(generalAttendanceItems); + + classesParamMap.put("attendanceItems", analysisDateAttendanceItems); + schedulMap = utilService.getSchedulingInFormation(classesParamMap); } - analysisDateAttendanceItems.addAll(generalAttendanceItems); - classesParamMap.put("attendanceItems", analysisDateAttendanceItems); - schedulMap = utilService.getSchedulingInFormation(classesParamMap); + Map>> schedulingResultsMap = (Map>>) schedulMap.get("schedulingResultsMap"); + + Map getClockTimeParam = Maps.newHashMap(); + getClockTimeParam.put("date", analysisDate); + getClockTimeParam.put("clockInTimeList", dataList); + getClockTimeParam.put("clockInTimeCollect", collect); + getClockTimeParam.put("schedulingResultCollect", schedulingResultsMap); + getClockTimeParam.put("clockInTimeMap", clockInTimeMap); + getClockTimeParam.put("userId", userId); + + //打卡数据 + List> analysisDateClockInTimeList = utilService.getClockInTime(getClockTimeParam); + //分析考勤 + Map recordDataTime1 = analysis(userId, analysisDate, analysisDateClockInTimeList, schedulingResultsMap.get(analysisDate), analysisDateAttendanceItems, workHourItems,(Map)schedulMap.get("clockInTimeDataMap"), + (List>)analysisParam.get("evectionList"),(List>)analysisParam.get("askforList")); + clockInTimeMap.put(analysisDate, recordDataTime1); } - - Map>> schedulingResultsMap = (Map>>) schedulMap.get("schedulingResultsMap"); - - Map getClockTimeParam = Maps.newHashMap(); - getClockTimeParam.put("date", analysisDate); - getClockTimeParam.put("clockInTimeList", dataList); - getClockTimeParam.put("clockInTimeCollect", collect); - getClockTimeParam.put("schedulingResultCollect", schedulingResultsMap); - getClockTimeParam.put("clockInTimeMap", clockInTimeMap); - getClockTimeParam.put("userId", userId); - - //打卡数据 - List> analysisDateClockInTimeList = utilService.getClockInTime(getClockTimeParam); - //分析考勤 - Map recordDataTime1 = analysis(userId, analysisDate, analysisDateClockInTimeList, schedulingResultsMap.get(analysisDate), analysisDateAttendanceItems, workHourItems,(Map)schedulMap.get("clockInTimeDataMap"), - (List>)analysisParam.get("evectionList"),(List>)analysisParam.get("askforList")); - clockInTimeMap.put(analysisDate, recordDataTime1); + }catch (Exception e){ + log.error("AttendanceAnalysisJob userId:[{}],analysisDate: [{}]",userId,analysisDate); + log.error("AttendanceAnalysisJob error : [{}]",e); } } } diff --git a/src/com/engine/jucailinkq/attendance/attendanceanalysis/wrapper/UpdateAttendanceResultWrapper.java b/src/com/engine/jucailinkq/attendance/attendanceanalysis/wrapper/UpdateAttendanceResultWrapper.java index 78c0b79..a49da8c 100644 --- a/src/com/engine/jucailinkq/attendance/attendanceanalysis/wrapper/UpdateAttendanceResultWrapper.java +++ b/src/com/engine/jucailinkq/attendance/attendanceanalysis/wrapper/UpdateAttendanceResultWrapper.java @@ -225,8 +225,6 @@ public class UpdateAttendanceResultWrapper extends Service { String btj = Util.null2String(askForLeaveList.get(i).get("btj")); //请假时长 String qjsc = Util.null2String(askForLeaveList.get(i).get("qjsc")); - //请假时长分钟数 - int qjscMinute = "".equals(qjsc)?0:Double.valueOf(Math.ceil(Double.valueOf(qjsc)*60)).intValue(); //请假项目 Map askForLeaveItem = askForLeaveItems.get(askForLeaveList.get(i).get("jqlx")); //自动移除时间区间内的非工作时长 @@ -239,10 +237,14 @@ public class UpdateAttendanceResultWrapper extends Service { String zysd = Util.null2String(askForLeaveItem.get("zysd")); //核算量 double hsl = Double.valueOf(Util.null2String(askForLeaveItem.get("hsl"))); + //额定时长 + double edsc = Double.valueOf(scheduleResult.get(0).get("edsc").toString()); //核算单位 String hsdw = Util.null2String(askForLeaveItem.get("hsdw")); //是否分组呈现 String sffzcx = Util.null2String(askForLeaveItem.get("sffzcx")); + //请假时长分钟数 + int qjscMinute = "".equals(qjsc)?0:Double.valueOf(CommonUtil.convertToMinute(hsdw,qjsc,edsc)).intValue(); if (!sffzcx.equals(CheckBoxEnum.CHECKED.getKey())){ resultMap.put("item",askForLeaveList.get(i).get("jqlx")); @@ -421,8 +423,6 @@ public class UpdateAttendanceResultWrapper extends Service { String btj = Util.null2String(evectionList.get(i).get("btcc")); //出差时长 String ccsc = Util.null2String(evectionList.get(i).get("ccsc")); - //出差时长分钟数 - int ccscMinute = "".equals(ccsc)?0:Double.valueOf(Math.ceil(Double.valueOf(ccsc)*60)).intValue(); //请假项目 Map evectionItem = evectionItems.get(evectionList.get(i).get("cclx")); //自动移除时间区间内的非工作时长 @@ -439,6 +439,10 @@ public class UpdateAttendanceResultWrapper extends Service { String zysd = Util.null2String(evectionItem.get("zysd")); //是否分组呈现 String sffzcx = Util.null2String(evectionItem.get("sffzcx")); + //额定时长 + double edsc = Double.valueOf(scheduleResult.get(0).get("edsc").toString()); + //请假时长分钟数 + int ccscMinute = "".equals(ccsc)?0:Double.valueOf(CommonUtil.convertToMinute(hsdw,ccsc,edsc)).intValue(); if (!sffzcx.equals(CheckBoxEnum.CHECKED.getKey())){ resultList.add(resultMap); diff --git a/src/com/engine/jucailinkq/attendance/component/persongroup/commonutil/PersongroupCommonUtil.java b/src/com/engine/jucailinkq/attendance/component/persongroup/commonutil/PersongroupCommonUtil.java index 54dbc58..2e736e1 100644 --- a/src/com/engine/jucailinkq/attendance/component/persongroup/commonutil/PersongroupCommonUtil.java +++ b/src/com/engine/jucailinkq/attendance/component/persongroup/commonutil/PersongroupCommonUtil.java @@ -458,7 +458,7 @@ public class PersongroupCommonUtil { } }else if (PersonGroupListTypeEnum.SQLCONDITION.getKey().equals(list_type) && !"".equals(sqltj)){ sqltj = Utils.converSQL(sqltj); - log.info("getPersonnelGroupingByPerson sqltj : [{}]",sqltj); + log.info("getUserIdsByPersonnelGrouping sqltj : [{}]",sqltj); List> dataList = DbTools.getSqlToList(sqltj); for (Map dataMap :dataList){ String hrmId = Util.null2String(dataMap.get("id")); @@ -514,7 +514,7 @@ public class PersongroupCommonUtil { } }else if (PersonGroupListTypeEnum.SQLCONDITION.getKey().equals(list_type) && !"".equals(sqltj)){ sqltj = Utils.converSQL(sqltj); - log.info("getPersonnelGroupingByPerson sqltj : [{}]",sqltj); + log.info("getUserIdsByPersonnelGrouping sqltj : [{}]",sqltj); List> dataList = DbTools.getSqlToList(sqltj); for (Map dataMap :dataList){ String hrmId = Util.null2String(dataMap.get("id")); @@ -567,7 +567,7 @@ public class PersongroupCommonUtil { } }else if (PersonGroupListTypeEnum.SQLCONDITION.getKey().equals(list_type) && !"".equals(sqltj)){ sqltj = Utils.converSQL(sqltj); - log.info("getPersonnelGroupingByPerson sqltj : [{}]",sqltj); + log.info("getAllpersonBelongGroup sqltj : [{}]",sqltj); List> dataList = DbTools.getSqlToList(sqltj); for (Map dataMap :dataList){ String hrmId = Util.null2String(dataMap.get("id")); diff --git a/src/com/engine/jucailinkq/attendance/vacation/service/impl/VocationServiceImpl.java b/src/com/engine/jucailinkq/attendance/vacation/service/impl/VocationServiceImpl.java index a10a8ef..3a84058 100644 --- a/src/com/engine/jucailinkq/attendance/vacation/service/impl/VocationServiceImpl.java +++ b/src/com/engine/jucailinkq/attendance/vacation/service/impl/VocationServiceImpl.java @@ -66,6 +66,7 @@ public class VocationServiceImpl extends Service implements VocationService { paramMap.put("resourceId",userId); Map dataMap = basicsetService.getAttendanceItemsByPerson(paramMap); List> attendanceItems = (List>)dataMap.get("data"); + Map>> itemGroup = attendanceItems.stream().collect(Collectors.groupingBy(e->e.get("key").toString())); Map needGenerateVocationMap = Maps.newHashMap(); for (Map map : attendanceItems){ if (vocationMap.get(map.get("key")) != null){ @@ -79,6 +80,7 @@ public class VocationServiceImpl extends Service implements VocationService { vocationParam.put("userId",userId); vocationParam.put("vocationList",e.getValue()); vocationParam.put("userList",userIdMap.get(userId)); + vocationParam.put("yxyz",itemGroup.get(e.getKey()).get(0).get("yxyz")); vocationParam.put("releaseDate",params.get("releaseDate")); vocationParam.put("cover",params.get("cover")); vocationParam.put("leaveDate",departEmployeeMap.get(userId)); diff --git a/src/com/engine/jucailinkq/common/util/CommonUtil.java b/src/com/engine/jucailinkq/common/util/CommonUtil.java index 3858ea7..4e82460 100644 --- a/src/com/engine/jucailinkq/common/util/CommonUtil.java +++ b/src/com/engine/jucailinkq/common/util/CommonUtil.java @@ -2,6 +2,7 @@ package com.engine.jucailinkq.common.util; import com.engine.jucailinkq.attendance.attendanceanalysis.cmd.getclockInpoint.biz.AbstractAdjustClockPointAction; import com.engine.jucailinkq.attendance.component.persongroup.commonutil.PersongroupCommonUtil; +import com.engine.jucailinkq.attendance.enums.AccountingUnitEnum; import com.engine.jucailinkq.attendance.enums.ApplicableOrganizationEnum; import com.engine.jucailinkq.attendance.enums.CheckBoxEnum; import com.engine.jucailinkq.attendance.enums.PersonGroupListTypeEnum; @@ -1316,4 +1317,27 @@ public class CommonUtil { } return resultMap; } + + public static double convertTohour(String hsdw,String time){ + double hour = 0; + if (hsdw.equals(AccountingUnitEnum.DAY.getKey())){ + hour = Double.valueOf(time)*8; + }else if (hsdw.equals(AccountingUnitEnum.HOUR.getKey())){ + hour = Double.valueOf(time); + }else if (hsdw.equals(AccountingUnitEnum.MINUTES.getKey())){ + hour = Double.valueOf(String.format ("%.2f", Double.valueOf(time)/60)); + } + return hour; + } + public static double convertToMinute(String hsdw,String time,double edsc){ + double minute = 0; + if (hsdw.equals(AccountingUnitEnum.DAY.getKey())){ + minute = Double.valueOf(time)*edsc*60; + }else if (hsdw.equals(AccountingUnitEnum.HOUR.getKey())){ + minute = Double.valueOf(time)*60; + }else if (hsdw.equals(AccountingUnitEnum.MINUTES.getKey())){ + minute = Double.valueOf(time); + } + return minute; + } }