From 3d82396dfe0443f850cefde8ba86875f6ffe803c Mon Sep 17 00:00:00 2001 From: sy Date: Mon, 29 Jul 2024 13:11:05 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E8=80=83=E5=8B=A4-=E5=8A=A0=E7=8F=AD?= =?UTF-8?q?=E8=AE=A1=E5=88=92=E6=B5=81=E7=A8=8B=EF=BC=8C=E5=8A=A0=E7=8F=AD?= =?UTF-8?q?=E8=AE=A1=E5=88=92=E6=98=8E=E7=BB=86=E4=B8=AD=E5=8A=A0=E7=8F=AD?= =?UTF-8?q?=E8=AE=A1=E5=88=92=E5=92=8C=E5=BD=92=E5=B1=9E=E6=97=A5=E6=9C=9F?= =?UTF-8?q?=E8=87=AA=E5=8A=A8=E5=8C=B9=E9=85=8D=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/OvertimePlanServiceImpl.java | 163 +++++++++++++----- .../jucailinkq/common/util/CommonUtil.java | 88 ++++++++++ 2 files changed, 208 insertions(+), 43 deletions(-) diff --git a/src/com/engine/jucailinkq/attendance/workflow/service/impl/OvertimePlanServiceImpl.java b/src/com/engine/jucailinkq/attendance/workflow/service/impl/OvertimePlanServiceImpl.java index 0b1f852..9f659f8 100644 --- a/src/com/engine/jucailinkq/attendance/workflow/service/impl/OvertimePlanServiceImpl.java +++ b/src/com/engine/jucailinkq/attendance/workflow/service/impl/OvertimePlanServiceImpl.java @@ -4,7 +4,10 @@ import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.jucailinkq.attendance.attendanceanalysis.service.UtilService; import com.engine.jucailinkq.attendance.attendanceanalysis.service.impl.UtilServiceImpl; +import com.engine.jucailinkq.attendance.enums.AttendanceItemTypeEnum; import com.engine.jucailinkq.attendance.enums.ClassSegmentTypeEnum; +import com.engine.jucailinkq.attendance.enums.DateTypeEnum; +import com.engine.jucailinkq.attendance.enums.WorkForTimeEnum; import com.engine.jucailinkq.attendance.workflow.service.OvertimePlanService; import com.engine.jucailinkq.common.util.CommonUtil; import com.engine.jucailinkq.common.util.DateUtil; @@ -28,13 +31,13 @@ public class OvertimePlanServiceImpl extends Service implements OvertimePlanServ @Override public Map generateOvertimePlanDetails(Map params) { Map resultMap = new HashMap<>(); + List errorMessage = new ArrayList<>(); try { // 流程表单主表数据 Map mainTableData = (Map)params.get("mainTableData"); log.info("mainTableData : {}", mainTableData); //加班人员、开始日期、结束日期、开始时间、结束时间 String jbry = Util.null2String(mainTableData.get("jbry")); - String jblx = Util.null2String(mainTableData.get("jblx")); String startDate = Util.null2String(mainTableData.get("ksrq")); String endDate = Util.null2String(mainTableData.get("jsrq")); String startTime = Util.null2String(mainTableData.get("kssj")); @@ -44,32 +47,34 @@ public class OvertimePlanServiceImpl extends Service implements OvertimePlanServ //获取加班日期集合 List dateList = DateUtil.getDatesBetween(startDate, endDate); //获取人员列表在日期区间的班次数据 - Map>> scheduleInfoMap = utilService.getScheduleInfoWithEmpId(empIdList, startDate, DateUtil.AfterDay(endDate,1)); + Map>> scheduleInfoMap = utilService.getScheduleInfoWithEmpId(empIdList, DateUtil.beforeDay(startDate, 1), DateUtil.AfterDay(endDate,1)); List> overtimePlanDetailList = new ArrayList<>(); List workBdlxList = new ArrayList<>(); workBdlxList.add(ClassSegmentTypeEnum.WORK_TIME.getKey());workBdlxList.add(ClassSegmentTypeEnum.EXTENDED_OVERTIME.getKey()); workBdlxList.add(ClassSegmentTypeEnum.EARLY_OVERTIME.getKey());workBdlxList.add(ClassSegmentTypeEnum.OVERTIME_IN_CLASS.getKey()); Map detailItem; String sql = ""; - //获取加班类型信息 - sql = "select id,mc from uf_jcl_kq_kqxm where id = " + jblx; - Map jblxData = DbTools.getSqlToMap(sql); - String jblxName = Util.null2String(jblxData.get("mc")); + //获取作用时段包含计划加班的加班类型的考勤项目集合 + sql = "select id,mc, bddrqlx from uf_jcl_kq_kqxm where xmlx = ? and zysd = ?"; + List> jblxAttendanceList = DbTools.getSqlToList(sql, AttendanceItemTypeEnum.WORK_OVERTIME.getKey(), WorkForTimeEnum.PLAN_WORK_OVERTIME.getKey()); + //获取人员id和姓名信息 Map empIdToNameInfo = CommonUtil.empIdToNameInfo(empIdList); - List> bcDetailData; + for (String empId : empIdList) { List> scheduleInfoList = scheduleInfoMap.get(empId); Map dateToBcxxMap = scheduleInfoList == null ? new HashMap<>() : scheduleInfoList.stream().collect(Collectors.toMap(e->Util.null2String(e.get("bcrq")), e->Util.null2String(e.get("bcxx")))); + Map dateTypeInfoFromBc = scheduleInfoList == null ? new HashMap<>() : scheduleInfoList.stream().collect(Collectors.toMap(e->Util.null2String(e.get("bcrq")), e->Util.null2String(e.get("rqlx")))); + for (String date : dateList) { String realEndDate = date; detailItem = new HashMap<>(); detailItem.put("jbry", empId); detailItem.put("jbryName", Util.null2String(empIdToNameInfo.get(empId))); - detailItem.put("jblx", jblx); - detailItem.put("jblxName", jblxName); detailItem.put("ksrq", date); detailItem.put("kssj", startTime); detailItem.put("jssj", endTime); + detailItem.put("jblx", null); + detailItem.put("jblxName", null); //开始时时和结束时间存在跨天情况时,即开始时间大于等于结束时间 if (startTime.compareTo(endTime) >= 0) { realEndDate = DateUtil.AfterDay(date,1); @@ -81,47 +86,95 @@ public class OvertimePlanServiceImpl extends Service implements OvertimePlanServ //根据班次数据,设置归属日期 //获取当天班次id String currentDayBcId = Util.null2String(dateToBcxxMap.get(date)).split("-")[0]; - //当天比较最晚工作时段/加班时段的结束时间点和加班计划明细的开始时间点的差值 - Integer currentDayDiffMinutes = 9999; - if (!"".equals(currentDayBcId)) { - //查询当天班次明细 - sql = "select id, bdlx, gsrq, kssj, jssj from uf_jcl_kq_bcxx_dt1 where mainid = " + currentDayBcId + " order by gsrq desc, kssj desc"; - bcDetailData = DbTools.getSqlToList(sql); - bcDetailData = bcDetailData.stream().filter(e -> workBdlxList.contains(Util.null2String(e.get("bdlx")))).collect(Collectors.toList()); - if (bcDetailData.size() > 0) { - String gsrqValue = Util.null2String(bcDetailData.get(0).get("gsrq")); - String jssj = Util.null2String(bcDetailData.get(0).get("jssj")); - String matchDate = "2".equals(gsrqValue) ? DateUtil.AfterDay(date,1) : ("0".equals(gsrqValue) ? DateUtil.beforeDay(date,1) : date); - currentDayDiffMinutes = (matchDate + jssj).compareTo(date + startTime) > 0 ? DateUtil.getBetWeenMinutes(date + " " + startTime, matchDate + " " + jssj) : DateUtil.getBetWeenMinutes(matchDate + " " + jssj, date + " " + startTime); - } - } + //获取当天班次开始时间和结束时间 + String currentDayStartToEnd = getBcStartAndEndTime(date, currentDayBcId, workBdlxList); + String currentDayStartTime = !"".equals(currentDayStartToEnd) ? currentDayStartToEnd.split(",")[0] : ""; + String currentDayEndTime = !"".equals(currentDayStartToEnd) ? currentDayStartToEnd.split(",")[1] : ""; + + //获取前1天班次id + String beforeDayBcId = Util.null2String(dateToBcxxMap.get(DateUtil.beforeDay(date, 1))).split("-")[0]; + //获取前1天班次开始时间和结束时间 + String beforeDayStartToEnd = getBcStartAndEndTime(DateUtil.beforeDay(date, 1), beforeDayBcId, workBdlxList); + String beforeDayStartTime = !"".equals(beforeDayStartToEnd) ? beforeDayStartToEnd.split(",")[0] : ""; + String beforeDayEndTime = !"".equals(beforeDayStartToEnd) ? beforeDayStartToEnd.split(",")[1] : ""; + //获取次日班次id - String nextDay = DateUtil.AfterDay(date,1); - String nextDayBcId = Util.null2String(dateToBcxxMap.get(nextDay)).split("-")[0]; - //次日比较最早工作时段/加班时段的开始时间点和加班计划明细的结束时间点的差值 - Integer nextDayDiffMinutes = 9999; - if (!"".equals(nextDayBcId)) { - //查次日班次明细 - sql = "select id, bdlx, gsrq, kssj, jssj from uf_jcl_kq_bcxx_dt1 where mainid = " + nextDayBcId + " order by gsrq, kssj"; - bcDetailData = DbTools.getSqlToList(sql); - bcDetailData = bcDetailData.stream().filter(e -> workBdlxList.contains(Util.null2String(e.get("bdlx")))).collect(Collectors.toList()); - if (bcDetailData.size() > 0) { - String gsrqValue = Util.null2String(bcDetailData.get(0).get("gsrq")); - String kssj = Util.null2String(bcDetailData.get(0).get("kssj")); - String matchDate = "2".equals(gsrqValue) ? DateUtil.AfterDay(nextDay,1) : ("0".equals(gsrqValue) ? DateUtil.beforeDay(nextDay,1) : nextDay); - nextDayDiffMinutes = (matchDate + kssj).compareTo(realEndDate + endTime) > 0 ? DateUtil.getBetWeenMinutes(realEndDate + " " + endTime, matchDate + " " + kssj) : DateUtil.getBetWeenMinutes(matchDate + " " + kssj, realEndDate + " " + endTime); - } + String nextDayBcId = Util.null2String(dateToBcxxMap.get(DateUtil.AfterDay(date, 1))).split("-")[0]; + //获取次日班次开始时间和结束时间 + String nextDayStartToEnd = getBcStartAndEndTime(DateUtil.AfterDay(date, 1), nextDayBcId, workBdlxList); + String nextDayStartTime = !"".equals(nextDayStartToEnd) ? nextDayStartToEnd.split(",")[0] : ""; + String nextDayEndTime = !"".equals(nextDayStartToEnd) ? nextDayStartToEnd.split(",")[1] : ""; + //梳理加班时间段和班段时间段合理的情况 + boolean beforeToCurrentDay = false; + boolean currentToNextDay = false; + boolean beforeToNextDay = false; + String belongDate = ""; + if (!"".equals(currentDayStartToEnd)) { + //1-加班时间段处于前一日下班后和当日上班前 + beforeToCurrentDay = ("".equals(beforeDayEndTime) || beforeDayEndTime.compareTo(date + " " + startTime) <= 0) && currentDayStartTime.compareTo(realEndDate + " " + endTime) >=0; + //2-加班时间段处于当日下班后和次日上班前 + currentToNextDay = ("".equals(nextDayStartTime) || nextDayStartTime.compareTo(realEndDate + " " + endTime) >= 0) && currentDayEndTime.compareTo(date + " " + startTime) <=0; + } else { + //3-加班时间段处于前一日下班后和次日上班前 + beforeToNextDay = ("".equals(beforeDayEndTime) || beforeDayEndTime.compareTo(date + " " + startTime) <= 0) + && ("".equals(nextDayStartTime) || nextDayStartTime.compareTo(realEndDate + " " + endTime) >= 0); } - if (currentDayDiffMinutes <= nextDayDiffMinutes) { - detailItem.put("gsrq", date); + if (beforeToCurrentDay) { + int beforeDayDiffMinutes = !"".equals(beforeDayEndTime) ? DateUtil.getBetWeenMinutes(beforeDayEndTime, date + " " + startTime) : 9999; + int currentDayDiffMinutes = DateUtil.getBetWeenMinutes(realEndDate + " " + endTime, currentDayStartTime); + belongDate = currentDayDiffMinutes < beforeDayDiffMinutes ? date : DateUtil.beforeDay(date, 1); + } else if (currentToNextDay) { + int nextDayDiffMinutes = !"".equals(nextDayStartTime) ? DateUtil.getBetWeenMinutes(realEndDate + " " + endTime, nextDayStartTime) : 9999; + int currentDayDiffMinutes = DateUtil.getBetWeenMinutes(currentDayEndTime, date + " " + startTime); + belongDate = currentDayDiffMinutes <= nextDayDiffMinutes ? date : DateUtil.AfterDay(date, 1); + } else if (beforeToNextDay) { + int beforeDayDiffMinutes = !"".equals(beforeDayEndTime) ? DateUtil.getBetWeenMinutes(beforeDayEndTime, date + " " + startTime) : 9999; + int nextDayDiffMinutes = !"".equals(nextDayStartTime) ? DateUtil.getBetWeenMinutes(realEndDate + " " + endTime, nextDayStartTime) : 9999; + if (beforeDayDiffMinutes > 120 && nextDayDiffMinutes > 120) { + //当天没班次时,前后两天班次班段与加班区间相隔超过120分钟时,则归属日为请假开始日期 + belongDate = date; + } else { + belongDate = beforeDayDiffMinutes <= nextDayDiffMinutes ? DateUtil.beforeDay(date, 1) : DateUtil.AfterDay(date, 1); + } } else { - detailItem.put("gsrq", nextDay); + //4-其他情况,属于不合理加班安排,返回报错 + errorMessage.add(Util.null2String(empIdToNameInfo.get(empId)) + "在日期" + date + "的加班计划区间和班次班段出现时间重叠,不允许申请加班!"); + continue; + } + //判断归属日的日期类型,首先从排班的信息来获取 + String belongDateType = dateTypeInfoFromBc.getOrDefault(belongDate, ""); + //排班信息无法获取日期类型时,从日历信息获取 + belongDateType = "".equals(belongDateType) ? CommonUtil.getRqlx(empId, belongDate) : belongDateType; + //排班和日历都无法获取时,默认为工作日 + belongDateType = "".equals(belongDateType) ? DateTypeEnum.WORK_DAY.getKey() : belongDateType; + + //通过人员id、归属日期、归属日期类型来自动匹配加班类型 + //获取人员在归属日被设置的考勤项目 + List> attendanceItemSetList = CommonUtil.getAttendanceItemsByEmpIdDate(empId, belongDate); + List kqxmSetIds = attendanceItemSetList.stream().map(f->f.get("keyid").toString()).collect(Collectors.toList()); + + for (Map attendanceItemInfo : jblxAttendanceList) { + //判断该加班类型考勤项目是否被该人员使用,且考勤项目的绑定的日期类型是否包含归属日期类型 + if (kqxmSetIds.contains(Util.null2String(attendanceItemInfo.get("id"))) + && Util.null2String(attendanceItemInfo.get("bddrqlx")).contains(belongDateType)) { + detailItem.put("jblx", Util.null2String(attendanceItemInfo.get("id"))); + detailItem.put("jblxName", Util.null2String(attendanceItemInfo.get("mc"))); + } } + detailItem.put("gsrq", belongDate); + overtimePlanDetailList.add(detailItem); } } - resultMap.put("status", true); - resultMap.put("data", overtimePlanDetailList); + if (errorMessage.size() == 0) { + resultMap.put("status", true); + resultMap.put("data", overtimePlanDetailList); + } else { + resultMap.put("status", false); + resultMap.put("errorInfo", errorMessage); + resultMap.put("data", null); + } + } catch (Exception e) { log.info(e.getMessage()); resultMap.put("status", false); @@ -130,4 +183,28 @@ public class OvertimePlanServiceImpl extends Service implements OvertimePlanServ } return resultMap; } + + public String getBcStartAndEndTime(String date, String currentDayBcId, List workBdlxList) { + String startToEnd = ""; + if (!"".equals(currentDayBcId)) { + //查询当天班次明细 + String sql = "select id, bdlx, gsrq, kssj, jssj from uf_jcl_kq_bcxx_dt1 where mainid = " + currentDayBcId + " order by gsrq desc, kssj desc"; + List> bcDetailData = DbTools.getSqlToList(sql); + bcDetailData = bcDetailData.stream().filter(e -> workBdlxList.contains(Util.null2String(e.get("bdlx")))).collect(Collectors.toList()); + if (bcDetailData.size() > 0) { + String endGsrqValue = Util.null2String(bcDetailData.get(0).get("gsrq")); + String lastJssj = Util.null2String(bcDetailData.get(0).get("jssj")); + String lastKssj = Util.null2String(bcDetailData.get(0).get("kssj")); + String bdEndDate = "2".equals(endGsrqValue) ? DateUtil.AfterDay(date,1) : ("0".equals(endGsrqValue) ? DateUtil.beforeDay(date,1) : date); + bdEndDate = lastKssj.compareTo(lastJssj) >= 0 ? DateUtil.AfterDay(bdEndDate,1) : bdEndDate; + + String startGsrqValue = Util.null2String(bcDetailData.get(bcDetailData.size() - 1).get("gsrq")); + String firstKssj = Util.null2String(bcDetailData.get(bcDetailData.size() - 1).get("kssj")); + String bdStartDate = "2".equals(startGsrqValue) ? DateUtil.AfterDay(date,1) : ("0".equals(startGsrqValue) ? DateUtil.beforeDay(date,1) : date); + + startToEnd = bdStartDate + " " + firstKssj + "," + bdEndDate + " " + lastJssj; + } + } + return startToEnd; + } } diff --git a/src/com/engine/jucailinkq/common/util/CommonUtil.java b/src/com/engine/jucailinkq/common/util/CommonUtil.java index e3e53bd..9732390 100644 --- a/src/com/engine/jucailinkq/common/util/CommonUtil.java +++ b/src/com/engine/jucailinkq/common/util/CommonUtil.java @@ -837,5 +837,93 @@ public class CommonUtil { return null; } + /** + * @param empId 人员id + * @param date 日期 + * @return 返回人员在指定日期在考勤方案和通用中被设置的考勤项目集合 + */ + public static List> getAttendanceItemsByEmpIdDate(String empId, String date) { + String modeId = Utils.getFormmodeIdMap().get("uf_jcl_kq_kqfa"); + Map resultMap = Maps.newHashMap(); + + String sql = "select dxlx,dataid,dx from uf_jcl_syzz where modeid=?"; + List> organizationList = DbTools.getSqlToList(sql,modeId); + sql = "select id,departmentid,subcompanyid1 from hrmresource where id =?"; + Map departMentMap = DbTools.getSqlToMap(sql, empId); + Set dataIds = Sets.newHashSet(); + Map>> organizationListGroupBydxlx = organizationList.stream().collect(Collectors.groupingBy(e ->e.get("dxlx").toString())); + //对象类型为人员 + List> personOrganizationList = organizationListGroupBydxlx.get("0"); + //对象类型为人员组织 + List> personGroupOrganizationList = organizationListGroupBydxlx.get("1"); + //对象类型为部门 + List> departmentOrganizationList = organizationListGroupBydxlx.get("2"); + //对象类型为分部 + List> subCompanyOrganizationList = organizationListGroupBydxlx.get("3"); + if (personOrganizationList != null){ + for (Map personOrganization :personOrganizationList){ + String dx = Util.null2String(personOrganization.get("dx")); + String ids = dx.split("-")[0]; + if (ids.equals(empId)){ + dataIds.add(Util.null2String(personOrganization.get("dataid"))); + } + } + } + try { + if (departmentOrganizationList != null){ + String deptid = Util.null2String(departMentMap.get("departmentid")); + String pdeptids = ""; + pdeptids = new DepartmentComInfo().getAllParentDepartId(Util.null2String(departMentMap.get("departmentid")), pdeptids); + pdeptids = deptid + pdeptids; + + for (Map departmentOrganization :departmentOrganizationList){ + String dx = Util.null2String(departmentOrganization.get("dx")); + String ids = dx.split("-")[0]; + for (String pdeptid : pdeptids.split(",")){ + if (pdeptid.equals(ids)){ + dataIds.add(Util.null2String(departmentOrganization.get("dataid"))); + } + } + } + } + }catch (Exception e){ + log.error("catch error :{}",e); + } + if (subCompanyOrganizationList != null){ + String subCompanyId = Util.null2String(departMentMap.get("subcompanyid1")); + for (Map subCompanyOrganization :subCompanyOrganizationList){ + String dx = Util.null2String(subCompanyOrganization.get("dx")); + String ids = dx.split("-")[0]; + if (ids.equals(subCompanyId)){ + dataIds.add(Util.null2String(subCompanyOrganization.get("dataid"))); + } + } + } + if (personGroupOrganizationList != null){ + Set personGroupIds = personGroupOrganizationList.stream().map(e -> Util.null2String(e.get("dx")).split("-")[0]).collect(Collectors.toSet()); + sql = "select mainid,empid,filters,sqltj,bdate,edate from uf_ryqz_dt1 where mainid in ("+String.join(",",personGroupIds)+")"; + + List> personGroupData = DbTools.getSqlToList(sql); + Set personnelGroupIds = PersongroupCommonUtil.getPersonnelGroupingByPerson(personGroupData, empId,date, date); + + for (Map personGroupOrganization :personGroupOrganizationList){ + String personnelGroupId = Util.null2String(personGroupOrganization.get("dx")).split("-")[0]; + if (personnelGroupIds.contains(personnelGroupId)){ + dataIds.add(Util.null2String(personGroupOrganization.get("dataid"))); + } + } + } + //收集通用考勤项目 + sql = "select id keyid,mc kqxm,a.* from uf_jcl_kq_kqxm a where tyxm=1 and (xmzt is null or xmzt <> '0')"; + List> attendanceItems = DbTools.getSqlToList(sql); + //收集目标人员适用考勤方案中的考勤项目 + if (dataIds.size() > 0){ + sql = "select b.id keyid,b.mc kqxm,c.mc famc,b.* from uf_jcl_kq_kqfa_dt1 a left join uf_jcl_kq_kqxm b on a.kqxm=b.id left join uf_jcl_kq_kqfa c on a.mainid=c.id " + + "where mainid in ("+String.join(",",dataIds)+") and (b.xmzt is null or b.xmzt <> '0') " + + "and c.zt = 0 and (c.sxrq0 is null or c.sxrq0 >= ?) and (c.sxrq1 is null or c.sxrq1 <= ?)"; + attendanceItems.addAll(DbTools.getSqlToList(sql, date, date)); + } + return attendanceItems; + } } From f8b8842c73b4ad1183bfd1ce440ce27b085e8a64 Mon Sep 17 00:00:00 2001 From: sy Date: Tue, 30 Jul 2024 16:36:47 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E8=80=83=E5=8B=A4-=E8=80=83=E5=8B=A4?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E6=B5=81=E7=A8=8B=EF=BC=8C=E5=BD=92=E6=A1=A3?= =?UTF-8?q?=E8=8A=82=E7=82=B9=E8=A7=A6=E5=8F=91=E5=87=BA=E5=8B=A4=E7=BB=93?= =?UTF-8?q?=E6=9E=9C=E6=95=B0=E6=8D=AE=E7=8A=B6=E6=80=81=E5=8F=98=E6=9B=B4?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../action/AllowanceConfirmAction.java | 41 +++++++++--- .../action/EvectionArchivingAction.java | 67 +++++++++++++++++++ .../action/MakeUpClockArchivingAction.java | 55 +++++++++++++++ .../action/OvertimePlanArchivingAction.java | 65 ++++++++++++++++++ .../action/OvertimePlanCheckAction.java | 2 +- .../RevokeEliminationsAskForLeaveAction.java | 30 +++++++++ .../workflow/action/RevokeLeaveAction.java | 41 +++++++++--- ...tchAskForLeaveWorkFlowArchivingAction.java | 26 +++++++ .../jucailinkq/common/util/CommonUtil.java | 25 +++++++ 9 files changed, 335 insertions(+), 17 deletions(-) create mode 100644 src/com/engine/jucailinkq/attendance/workflow/action/EvectionArchivingAction.java create mode 100644 src/com/engine/jucailinkq/attendance/workflow/action/MakeUpClockArchivingAction.java create mode 100644 src/com/engine/jucailinkq/attendance/workflow/action/OvertimePlanArchivingAction.java diff --git a/src/com/engine/jucailinkq/attendance/workflow/action/AllowanceConfirmAction.java b/src/com/engine/jucailinkq/attendance/workflow/action/AllowanceConfirmAction.java index 0e1188c..3d9f659 100644 --- a/src/com/engine/jucailinkq/attendance/workflow/action/AllowanceConfirmAction.java +++ b/src/com/engine/jucailinkq/attendance/workflow/action/AllowanceConfirmAction.java @@ -1,5 +1,6 @@ package com.engine.jucailinkq.attendance.workflow.action; +import com.engine.jucailinkq.common.util.CommonUtil; import com.engine.jucailinkq.common.util.DbTools; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; @@ -13,6 +14,7 @@ import weaver.soa.workflow.request.Row; import java.io.PrintWriter; import java.io.StringWriter; import java.util.*; +import java.util.stream.Collectors; /** * @Author: sy @@ -28,14 +30,10 @@ public class AllowanceConfirmAction implements Action { String requestid = requestInfo.getRequestid(); try { -// Property[] property = requestInfo.getMainTableInfo().getProperty(); -// User user = requestInfo.getRequestManager().getUser(); -// for (Property pro : property) { -// String name = Util.null2String(pro.getName()); -// if(name.equals("cxsm")){ -// -// } -// } + // 流程表单主表数据 + HashMap mainTableData = CommonUtil.getMainTableInfo(requestInfo); + String qrr = mainTableData.get("xjr"); + List jtIdList = new ArrayList<>(); DetailTable[] detailTable = requestInfo.getDetailTableInfo().getDetailTable(); log.debug("AllowanceConfirmAction detailTable : [{}], length : {}", Arrays.toString(detailTable), detailTable.length); @@ -57,10 +55,14 @@ public class AllowanceConfirmAction implements Action { } if ("jtid".equals(name)) { itemMap.put("jtid", Util.null2String(c.getValue())); + jtIdList.add(Util.null2String(c.getValue())); } if ("sm".equals(name)) { itemMap.put("sm", Util.null2String(c.getValue())); } + if ("rq".equals(name)) { + itemMap.put("rq", Util.null2String(c.getValue())); + } } log.debug("AllowanceConfirmAction itemMap : [{}]",itemMap); updateList.add(itemMap); @@ -68,6 +70,13 @@ public class AllowanceConfirmAction implements Action { } } log.debug("AllowanceConfirmAction updateList : [{}]",updateList); + + //遍历比较哪些津贴数据的状态改变了,并将状态发生改变的津贴数据认定为要更新出勤结果数据状态的津贴数据 + String jtSql = "select id, zt from uf_jcl_kq_cqjt where id in (" + String.join(",", jtIdList) + ")"; + List> jtDataList = DbTools.getSqlToList(jtSql); + Map jtStatusMap = jtDataList.stream().collect(Collectors.toMap(e->Util.null2String(e.get("id")), e->Util.null2String(e.get("zt")))); + List> empDateList = new ArrayList<>(); + if (updateList.size() > 0) { updateList.forEach(f -> { if (StringUtils.isNotBlank(f.get("jtid"))) { @@ -75,8 +84,24 @@ public class AllowanceConfirmAction implements Action { log.debug("AllowanceConfirmAction sql : [{}]",sql); DbTools.update(sql, Util.null2String(f.get("zt")), Util.null2String(f.get("sm")), f.get("jtid")); log.debug("AllowanceConfirmAction zt : {}, bz : {}, jtid : {}",Util.null2String(f.get("zt")), Util.null2String(f.get("sm")), f.get("jtid")); + //收集需要更改出勤结果数据状态的人员、日期信息 + if (!jtStatusMap.getOrDefault(f.get("jtid"), "").equals(Util.null2String(f.get("zt")))) { + Map empDateItem = new HashMap<>(); + empDateItem.put("empId", qrr); + empDateItem.put("cqDate", Util.null2String(f.get("rq"))); + empDateList.add(empDateItem); + } } }); + //更新出勤结果中的数据状态 + String sjztUpdateResult = CommonUtil.updateAttendanceResultInfoStatus(empDateList, "0"); + if (!"".equals(sjztUpdateResult)) { + log.error("更新出勤结果中的数据状态失败:" + sjztUpdateResult); + requestInfo.getRequestManager().setMessageid("11111" + requestInfo.getRequestid() + "22222"); + requestInfo.getRequestManager().setMessagecontent("更新出勤结果中的数据状态失败:" + sjztUpdateResult); + return Action.FAILURE_AND_CONTINUE; + } + } } catch (Exception e) { diff --git a/src/com/engine/jucailinkq/attendance/workflow/action/EvectionArchivingAction.java b/src/com/engine/jucailinkq/attendance/workflow/action/EvectionArchivingAction.java new file mode 100644 index 0000000..f10df4a --- /dev/null +++ b/src/com/engine/jucailinkq/attendance/workflow/action/EvectionArchivingAction.java @@ -0,0 +1,67 @@ +package com.engine.jucailinkq.attendance.workflow.action; + +import com.engine.common.util.ServiceUtil; +import com.engine.jucailinkq.attendance.workflow.service.MakeUpClockInService; +import com.engine.jucailinkq.attendance.workflow.service.impl.MakeUpClockInServiceImpl; +import com.engine.jucailinkq.common.util.CommonUtil; +import com.engine.jucailinkq.common.util.DateUtil; +import com.google.common.collect.Maps; +import lombok.extern.slf4j.Slf4j; +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; +import java.util.stream.Collectors; + +/** + * 出差流程归档action + */ +@Slf4j +public class EvectionArchivingAction implements Action { + + + @Override + public String execute(RequestInfo requestInfo) { + String requestid = requestInfo.getRequestid(); + // 流程表单主表数据 + HashMap mainTableData = CommonUtil.getMainTableInfo(requestInfo); + // 流程表单明细表数据 + List> detailTableData = CommonUtil.getDetailTableInfo(requestInfo,0); + //出差人员 + String ccr = mainTableData.get("ccr"); + try { + //记录需要更改出勤结果数据状态的人员、日期信息 + List> empDateList = new ArrayList<>(); + Map empDateItem; + List dateList = new ArrayList<>(); + //遍历明细表1 + for (Map data : detailTableData) { + dateList = DateUtil.getDatesBetween(data.get("ksrq"), "".equals(Util.null2String(data.get("jsrq"))) ? data.get("ksrq") : data.get("jsrq")); + for (String date : dateList) { + //收集需要更改出勤结果数据状态的人员、日期信息 + empDateItem = new HashMap<>(); + empDateItem.put("empId", data.getOrDefault("ccr", ccr)); + empDateItem.put("cqDate", date); + empDateList.add(empDateItem); + } + } + //更新出勤结果中的数据状态 + String sjztUpdateResult = CommonUtil.updateAttendanceResultInfoStatus(empDateList, "0"); + if (!"".equals(sjztUpdateResult)) { + log.error("更新出勤结果中的数据状态失败:" + sjztUpdateResult); + requestInfo.getRequestManager().setMessageid("11111" + requestInfo.getRequestid() + "22222"); + requestInfo.getRequestManager().setMessagecontent("更新出勤结果中的数据状态失败:" + sjztUpdateResult); + return Action.FAILURE_AND_CONTINUE; + } + + }catch (Exception e){ + log.error("EvectionArchivingAction error : [{}]",e); + return Action.FAILURE_AND_CONTINUE; + } + return Action.SUCCESS; + } +} diff --git a/src/com/engine/jucailinkq/attendance/workflow/action/MakeUpClockArchivingAction.java b/src/com/engine/jucailinkq/attendance/workflow/action/MakeUpClockArchivingAction.java new file mode 100644 index 0000000..a8b6827 --- /dev/null +++ b/src/com/engine/jucailinkq/attendance/workflow/action/MakeUpClockArchivingAction.java @@ -0,0 +1,55 @@ +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.Utils; +import com.google.common.collect.Lists; +import lombok.extern.slf4j.Slf4j; +import weaver.conn.RecordSet; +import weaver.interfaces.workflow.action.Action; +import weaver.soa.workflow.request.RequestInfo; + +import java.util.*; + +/** + * 补打卡流程归档action + */ +@Slf4j +public class MakeUpClockArchivingAction implements Action { + + @Override + public String execute(RequestInfo requestInfo) { + log.debug("**********MakeUpClockArchivingAction import data start**********"); + // 流程表单主表数据 + HashMap mainTableData = CommonUtil.getMainTableInfo(requestInfo); + // 流程表单明细表数据 + List> detailTableData = CommonUtil.getDetailTableInfo(requestInfo,0); + log.info("detailTableData : [{}]", detailTableData); + //补打卡人员 + String userId = mainTableData.get("bdkry"); + + List lists = Lists.newArrayList(); + //记录需要更改出勤结果数据状态的人员、日期信息 + List> empDateList = new ArrayList<>(); + Map empDateItem; + for (Map detailTable:detailTableData){ + //收集需要更改出勤结果数据状态的人员、日期信息 + empDateItem = new HashMap<>(); + empDateItem.put("empId", detailTable.get("bdkr")); + empDateItem.put("cqDate", detailTable.get("bdkrq")); + empDateList.add(empDateItem); + } + + //更新出勤结果中的数据状态 + String sjztUpdateResult = CommonUtil.updateAttendanceResultInfoStatus(empDateList, "0"); + if (!"".equals(sjztUpdateResult)) { + log.error("更新出勤结果中的数据状态失败:" + sjztUpdateResult); + requestInfo.getRequestManager().setMessageid("11111" + requestInfo.getRequestid() + "22222"); + requestInfo.getRequestManager().setMessagecontent("更新出勤结果中的数据状态失败:" + sjztUpdateResult); + return Action.FAILURE_AND_CONTINUE; + } + log.debug("**********MakeUpClockArchivingAction import data end**********"); + + return Action.SUCCESS; + } +} diff --git a/src/com/engine/jucailinkq/attendance/workflow/action/OvertimePlanArchivingAction.java b/src/com/engine/jucailinkq/attendance/workflow/action/OvertimePlanArchivingAction.java new file mode 100644 index 0000000..36cec6c --- /dev/null +++ b/src/com/engine/jucailinkq/attendance/workflow/action/OvertimePlanArchivingAction.java @@ -0,0 +1,65 @@ +package com.engine.jucailinkq.attendance.workflow.action; + +import com.engine.common.util.ServiceUtil; +import com.engine.jucailinkq.attendance.workflow.service.MakeUpClockInService; +import com.engine.jucailinkq.attendance.workflow.service.impl.MakeUpClockInServiceImpl; +import com.engine.jucailinkq.common.util.CommonUtil; +import com.engine.jucailinkq.common.util.DateUtil; +import com.google.common.collect.Maps; +import lombok.extern.slf4j.Slf4j; +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; +import java.util.stream.Collectors; + +/** + * 加班计划流程归档action + * @author sy + */ +@Slf4j +public class OvertimePlanArchivingAction implements Action { + + @Override + public String execute(RequestInfo requestInfo) { + String requestid = requestInfo.getRequestid(); + // 流程表单主表数据 + HashMap mainTableData = CommonUtil.getMainTableInfo(requestInfo); + // 流程表单明细表数据 + List> detailTableData = CommonUtil.getDetailTableInfo(requestInfo,0); + //加班人员 + String jbry = mainTableData.get("jbry"); + try { + + //记录需要更改出勤结果数据状态的人员、日期信息 + List> empDateList = new ArrayList<>(); + Map empDateItem; + List dateList = new ArrayList<>(); + //遍历明细表1 + for (Map data : detailTableData) { + //收集需要更改出勤结果数据状态的人员、日期信息 + empDateItem = new HashMap<>(); + empDateItem.put("empId", data.getOrDefault("jbry", jbry)); + empDateItem.put("cqDate", data.get("gsrq")); + empDateList.add(empDateItem); + } + //更新出勤结果中的数据状态 + String sjztUpdateResult = CommonUtil.updateAttendanceResultInfoStatus(empDateList, "0"); + if (!"".equals(sjztUpdateResult)) { + log.error("更新出勤结果中的数据状态失败:" + sjztUpdateResult); + requestInfo.getRequestManager().setMessageid("11111" + requestInfo.getRequestid() + "22222"); + requestInfo.getRequestManager().setMessagecontent("更新出勤结果中的数据状态失败:" + sjztUpdateResult); + return Action.FAILURE_AND_CONTINUE; + } + + }catch (Exception e){ + log.error("OvertimePlanArchivingAction error : [{}]",e); + return Action.FAILURE_AND_CONTINUE; + } + return Action.SUCCESS; + } +} diff --git a/src/com/engine/jucailinkq/attendance/workflow/action/OvertimePlanCheckAction.java b/src/com/engine/jucailinkq/attendance/workflow/action/OvertimePlanCheckAction.java index c225759..847c79e 100644 --- a/src/com/engine/jucailinkq/attendance/workflow/action/OvertimePlanCheckAction.java +++ b/src/com/engine/jucailinkq/attendance/workflow/action/OvertimePlanCheckAction.java @@ -34,7 +34,7 @@ public class OvertimePlanCheckAction implements Action { //加班人员 String jbry = mainTableData.get("jbry"); try { - Map>> detailGroupMap = detailTableData.stream().collect(Collectors.groupingBy(e->Util.null2String(e.get("bdkr")))); + Map>> detailGroupMap = detailTableData.stream().collect(Collectors.groupingBy(e->Util.null2String(e.get("jbry")))); for (Map.Entry>> tableEntry :detailGroupMap.entrySet()){ List> detailGroupByUserList = tableEntry.getValue(); diff --git a/src/com/engine/jucailinkq/attendance/workflow/action/RevokeEliminationsAskForLeaveAction.java b/src/com/engine/jucailinkq/attendance/workflow/action/RevokeEliminationsAskForLeaveAction.java index e687aa6..d2f3af2 100644 --- a/src/com/engine/jucailinkq/attendance/workflow/action/RevokeEliminationsAskForLeaveAction.java +++ b/src/com/engine/jucailinkq/attendance/workflow/action/RevokeEliminationsAskForLeaveAction.java @@ -4,6 +4,7 @@ import com.engine.jucailinkq.attendance.enums.AccountingUnitEnum; import com.engine.jucailinkq.attendance.workflow.service.MakeUpClockInService; import com.engine.jucailinkq.attendance.workflow.service.impl.MakeUpClockInServiceImpl; import com.engine.jucailinkq.common.util.CommonUtil; +import com.engine.jucailinkq.common.util.DateUtil; import com.engine.jucailinkq.common.util.DbTools; import com.engine.common.util.ServiceUtil; import lombok.extern.slf4j.Slf4j; @@ -37,6 +38,7 @@ public class RevokeEliminationsAskForLeaveAction implements Action { // 流程表单主表数据 HashMap mainTableData = CommonUtil.getMainTableInfo(requestInfo); String qjlx = mainTableData.get("qjlx"); + String xjr = mainTableData.get("xjr"); String queryItemsql = "select hsdw,hsl from uf_jcl_kq_kqxm where id=?"; Map holidayItem = DbTools.getSqlToMap(queryItemsql, qjlx); @@ -44,6 +46,10 @@ public class RevokeEliminationsAskForLeaveAction implements Action { DetailTable[] detailTable = requestInfo.getDetailTableInfo().getDetailTable(); log.debug("RevokeLeaveAction detailTable : [{}], length : {}", Arrays.toString(detailTable), detailTable.length); List> updateList = new ArrayList<>(); + //记录需要更改出勤结果数据状态的人员、日期信息 + List> empDateList = new ArrayList<>(); + Map empDateItem; + List dateList = new ArrayList<>(); if (detailTable.length > 0) { for (DetailTable dt : detailTable) { //明细表 @@ -65,10 +71,25 @@ public class RevokeEliminationsAskForLeaveAction implements Action { if ("cx".equals(name)) { itemMap.put("cx", Util.null2String(c.getValue())); } + if ("ksrq".equals(name)) { + itemMap.put("ksrq", Util.null2String(c.getValue())); + } + if ("jsrq".equals(name)) { + itemMap.put("jsrq", Util.null2String(c.getValue())); + } } log.debug("RevokeEliminationsAskForLeaveAction itemMap : [{}]",itemMap); if (Util.null2String(itemMap.get("cx")).equals("1")) { updateList.add(itemMap); + + dateList = DateUtil.getDatesBetween(itemMap.get("ksrq"), "".equals(Util.null2String(itemMap.get("jsrq"))) ? itemMap.get("ksrq") : itemMap.get("jsrq")); + for (String date : dateList) { + //收集需要更改出勤结果数据状态的人员、日期信息 + empDateItem = new HashMap<>(); + empDateItem.put("empId", xjr); + empDateItem.put("cqDate", date); + empDateList.add(empDateItem); + } } } } @@ -84,6 +105,15 @@ public class RevokeEliminationsAskForLeaveAction implements Action { updateHoliday(f.get("cxlyid"),holidayItem.get("hsdw").toString()); } }); + + //更新出勤结果中的数据状态 + String sjztUpdateResult = CommonUtil.updateAttendanceResultInfoStatus(empDateList, "0"); + if (!"".equals(sjztUpdateResult)) { + log.error("更新出勤结果中的数据状态失败:" + sjztUpdateResult); + requestInfo.getRequestManager().setMessageid("11111" + requestInfo.getRequestid() + "22222"); + requestInfo.getRequestManager().setMessagecontent("更新出勤结果中的数据状态失败:" + sjztUpdateResult); + return Action.FAILURE_AND_CONTINUE; + } } } catch (Exception e) { diff --git a/src/com/engine/jucailinkq/attendance/workflow/action/RevokeLeaveAction.java b/src/com/engine/jucailinkq/attendance/workflow/action/RevokeLeaveAction.java index b7a1421..30f3ee6 100644 --- a/src/com/engine/jucailinkq/attendance/workflow/action/RevokeLeaveAction.java +++ b/src/com/engine/jucailinkq/attendance/workflow/action/RevokeLeaveAction.java @@ -1,5 +1,7 @@ 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 org.apache.commons.lang3.StringUtils; @@ -25,18 +27,17 @@ public class RevokeLeaveAction implements Action { String requestid = requestInfo.getRequestid(); try { -// Property[] property = requestInfo.getMainTableInfo().getProperty(); -// User user = requestInfo.getRequestManager().getUser(); -// for (Property pro : property) { -// String name = Util.null2String(pro.getName()); -// if(name.equals("cxsm")){ -// -// } -// } + // 流程表单主表数据 + HashMap mainTableData = CommonUtil.getMainTableInfo(requestInfo); + String xcr = mainTableData.get("xjr"); DetailTable[] detailTable = requestInfo.getDetailTableInfo().getDetailTable(); log.debug("RevokeLeaveAction detailTable : [{}], length : {}", Arrays.toString(detailTable), detailTable.length); List> updateList = new ArrayList<>(); + //记录需要更改出勤结果数据状态的人员、日期信息 + List> empDateList = new ArrayList<>(); + Map empDateItem; + List dateList = new ArrayList<>(); if (detailTable.length > 0) { for (DetailTable dt : detailTable) { //明细表 @@ -58,10 +59,25 @@ public class RevokeLeaveAction implements Action { if ("cx".equals(name)) { itemMap.put("cx", Util.null2String(c.getValue())); } + if ("ksrq".equals(name)) { + itemMap.put("ksrq", Util.null2String(c.getValue())); + } + if ("jsrq".equals(name)) { + itemMap.put("jsrq", Util.null2String(c.getValue())); + } } log.debug("RevokeLeaveAction itemMap : [{}]",itemMap); if (Util.null2String(itemMap.get("cx")).equals("1")) { updateList.add(itemMap); + + dateList = DateUtil.getDatesBetween(itemMap.get("ksrq"), "".equals(Util.null2String(itemMap.get("jsrq"))) ? itemMap.get("ksrq") : itemMap.get("jsrq")); + for (String date : dateList) { + //收集需要更改出勤结果数据状态的人员、日期信息 + empDateItem = new HashMap<>(); + empDateItem.put("empId", xcr); + empDateItem.put("cqDate", date); + empDateList.add(empDateItem); + } } } } @@ -76,6 +92,15 @@ public class RevokeLeaveAction implements Action { log.debug("RevokeLeaveAction cxsm : {}, requestid : {}, cxlyid : {}",Util.null2String(f.get("cxsm")), requestid, f.get("cxlyid")); } }); + + //更新出勤结果中的数据状态 + String sjztUpdateResult = CommonUtil.updateAttendanceResultInfoStatus(empDateList, "0"); + if (!"".equals(sjztUpdateResult)) { + log.error("更新出勤结果中的数据状态失败:" + sjztUpdateResult); + requestInfo.getRequestManager().setMessageid("11111" + requestInfo.getRequestid() + "22222"); + requestInfo.getRequestManager().setMessagecontent("更新出勤结果中的数据状态失败:" + sjztUpdateResult); + return Action.FAILURE_AND_CONTINUE; + } } } catch (Exception e) { diff --git a/src/com/engine/jucailinkq/attendance/workflow/action/askforleave/BatchAskForLeaveWorkFlowArchivingAction.java b/src/com/engine/jucailinkq/attendance/workflow/action/askforleave/BatchAskForLeaveWorkFlowArchivingAction.java index 90059d3..a7af270 100644 --- a/src/com/engine/jucailinkq/attendance/workflow/action/askforleave/BatchAskForLeaveWorkFlowArchivingAction.java +++ b/src/com/engine/jucailinkq/attendance/workflow/action/askforleave/BatchAskForLeaveWorkFlowArchivingAction.java @@ -1,6 +1,7 @@ package com.engine.jucailinkq.attendance.workflow.action.askforleave; import com.engine.jucailinkq.common.util.CommonUtil; +import com.engine.jucailinkq.common.util.DateUtil; import com.engine.jucailinkq.common.util.DbTools; import com.engine.jucailinkq.common.util.Utils; import com.google.common.collect.Maps; @@ -9,6 +10,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; @@ -78,6 +80,30 @@ public class BatchAskForLeaveWorkFlowArchivingAction implements Action { } } + //记录需要更改出勤结果数据状态的人员、日期信息 + List> empDateList = new ArrayList<>(); + Map empDateItem; + List dateList = new ArrayList<>(); + //遍历明细表1 + for (Map data : detailTableData) { + dateList = DateUtil.getDatesBetween(data.get("ksrq"), data.get("jsrq")); + for (String date : dateList) { + //收集需要更改出勤结果数据状态的人员、日期信息 + empDateItem = new HashMap<>(); + empDateItem.put("empId", data.get("qjr")); + empDateItem.put("cqDate", date); + empDateList.add(empDateItem); + } + } + //更新出勤结果中的数据状态 + String sjztUpdateResult = CommonUtil.updateAttendanceResultInfoStatus(empDateList, "0"); + if (!"".equals(sjztUpdateResult)) { + log.error("更新出勤结果中的数据状态失败:" + sjztUpdateResult); + requestInfo.getRequestManager().setMessageid("11111" + requestInfo.getRequestid() + "22222"); + requestInfo.getRequestManager().setMessagecontent("更新出勤结果中的数据状态失败:" + sjztUpdateResult); + return Action.FAILURE_AND_CONTINUE; + } + }catch (Exception e){ log.error("BatchAskForLeaveWorkFlowArchivingAction error : [{}]",e); return Action.FAILURE_AND_CONTINUE; diff --git a/src/com/engine/jucailinkq/common/util/CommonUtil.java b/src/com/engine/jucailinkq/common/util/CommonUtil.java index 9732390..0ba46e1 100644 --- a/src/com/engine/jucailinkq/common/util/CommonUtil.java +++ b/src/com/engine/jucailinkq/common/util/CommonUtil.java @@ -926,4 +926,29 @@ public class CommonUtil { return attendanceItems; } + /** + * 批量更新出勤结果的数据状态 + * @param empDateList 人员id和对应日期信息集合 + * @param status 要更新到的状态值 + * @return + */ + public static String updateAttendanceResultInfoStatus(List> empDateList, String status) { + String errorMessage = ""; + + List empIdList = empDateList.stream().filter(f-> !"".equals(Util.null2String(f.get("empId")))).map(f->f.get("empId")).collect(Collectors.toList()); + Map empNameInfo = empIdToNameInfo(empIdList); + String empId = ""; + String cqDate = ""; + String sql = "update uf_jcl_kq_cqjg set sjzt = ? where ygid = ? and rq = ?"; + for (Map empDateInfo : empDateList) { + empId = Util.null2String(empDateInfo.get("empId")); + cqDate = Util.null2String(empDateInfo.get("cqDate")); + if (!"".equals(empId) && !"".equals(cqDate)) { + if (!DbTools.update(sql, status, empId, cqDate)) { + errorMessage = errorMessage + empNameInfo.getOrDefault(empId, empId) + "," + cqDate + "出勤结果数据状态更新失败;"; + } + } + } + return errorMessage; + } }