From a327327ebbcdb44b46ed4314c3198b2f8f749de8 Mon Sep 17 00:00:00 2001 From: liuliang <401809302@qq.com> Date: Wed, 19 Feb 2025 18:25:57 +0800 Subject: [PATCH] =?UTF-8?q?=E7=8F=AD=E5=90=8E=E5=8A=A0=E7=8F=AD=E8=AE=A1?= =?UTF-8?q?=E5=88=92=E8=B0=83=E6=95=B4=EF=BC=8C=E5=80=99=E9=80=89=E7=8F=AD?= =?UTF-8?q?=E7=BB=84=E8=B0=83=E6=95=B4=EF=BC=8C=E5=BC=B9=E6=80=A7=E5=90=83?= =?UTF-8?q?=E9=A5=AD=E7=AE=97=E5=8A=A0=E7=8F=AD=E6=97=B6=E9=95=BF=E8=B0=83?= =?UTF-8?q?=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cmd/GetClockInTimeListCmd.java | 2 +- .../getclockInpoint/GetClockInPointCmd.java | 30 ++++++++ .../workovertime/GetOvertimeDurationCmd.java | 21 ++++++ .../service/impl/ShiftServiceImpl.java | 7 ++ .../wrapper/AttendaceActionWrapper.java | 9 ++- .../wrapper/AttendanceAnalysisWrapper.java | 13 +++- .../tactics/SinglePaymentInFullWay.java | 69 +++++++++---------- .../vacation/util/VocationCommonUtil.java | 15 ++-- .../service/impl/AskForLeaveServiceImpl.java | 15 ++-- .../service/impl/OvertimePlanServiceImpl.java | 9 +++ .../jucailinkq/common/util/CommonUtil.java | 17 +++++ .../hrmattendance/HrmjucailAskForLeave_e9.jsp | 3 +- .../HrmjucailBatchAskForLeave_e9.jsp | 3 +- .../HrmjucailWorkOvertimePlan_e9.jsp | 12 ++++ .../request/hrmattendance/UpdateErrorData.jsp | 12 +++- .../hrmattendance/createTableByView.jsp | 20 ++++++ 16 files changed, 203 insertions(+), 54 deletions(-) create mode 100644 workflow/request/hrmattendance/createTableByView.jsp diff --git a/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/GetClockInTimeListCmd.java b/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/GetClockInTimeListCmd.java index 78dc7b5..90d0ce1 100644 --- a/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/GetClockInTimeListCmd.java +++ b/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/GetClockInTimeListCmd.java @@ -205,7 +205,7 @@ public class GetClockInTimeListCmd extends AbstractCommonCommand clockIntime = clockInTimeMap.get(date); + Map clockIntime = clockInTimeMap.get(DateUtil.beforeDay(date,1)); // if (clockIntime == null || clockIntime.size() == 0){ // String sql = "select rq,j1,c1,j2,c2,j3,c3,j4,c4,j5,c5,j6,c6,j7,c7,j8,c8 from uf_jcl_kq_cqjg where ygid=? and rq>=? and rq<=?"; // List> attendanceResult = DbTools.getSqlToList(sql,userId,DateUtil.beforeDay(beforeOneDay,1),beforeOneDay); diff --git a/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/getclockInpoint/GetClockInPointCmd.java b/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/getclockInpoint/GetClockInPointCmd.java index 582bcd8..93f50df 100644 --- a/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/getclockInpoint/GetClockInPointCmd.java +++ b/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/getclockInpoint/GetClockInPointCmd.java @@ -60,6 +60,8 @@ public class GetClockInPointCmd extends AbstractCommonCommand> adjustOverTimePlanAfterWorkTimeClock(List> scheduleResult,String analysisDate){ + List> workscheduleList = scheduleResult.stream().filter(e->!Utils.ifRestClassSegment(e.get("bdlx").toString())).collect(Collectors.toList()); + List> restscheduleList = scheduleResult.stream().filter(e->Utils.ifRestClassSegment(e.get("bdlx").toString())).collect(Collectors.toList()); + + workscheduleList = workscheduleList.stream().sorted(Comparator.comparing(e->DateUtil.getTime(Utils.getkssjTime(e,analysisDate)).toInstant(ZoneOffset.of("+8")).toEpochMilli())).collect(Collectors.toList()); + + if (workscheduleList.size() >1 && ClassSegmentTypeEnum.OVERTIME_PLAN.getKey().equals(workscheduleList.get(workscheduleList.size()-1).get("bdlx")) + && !ClassSegmentTypeEnum.WORK_TIME.getKey().equals(workscheduleList.get(workscheduleList.size()-1).get("beforeClassSegment"))){ + Map lastClassScheduleMap = workscheduleList.get(workscheduleList.size()-2); + Map overTimeScheduleMap = workscheduleList.get(workscheduleList.size()-1); + + if (CheckBoxEnum.CHECKED.getKey().equals(overTimeScheduleMap.get("jsdk")) && !ClassSegmentTypeEnum.OVERTIME_PLAN.getKey().equals(lastClassScheduleMap.get("bdlx"))){ + overTimeScheduleMap.put("ksdk",CheckBoxEnum.UNCHECKED.getKey()); + lastClassScheduleMap.put("jsdk",CheckBoxEnum.UNCHECKED.getKey()); + } + } + List> newList = Lists.newArrayList(); + newList.addAll(workscheduleList); + newList.addAll(restscheduleList); + return newList; + } + /** * 请假出差碰到休息时段时调整打卡 * @param scheduleResult diff --git a/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/workovertime/GetOvertimeDurationCmd.java b/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/workovertime/GetOvertimeDurationCmd.java index a9106eb..73c93cb 100644 --- a/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/workovertime/GetOvertimeDurationCmd.java +++ b/src/com/engine/jucailinkq/attendance/attendanceanalysis/cmd/workovertime/GetOvertimeDurationCmd.java @@ -83,6 +83,7 @@ public class GetOvertimeDurationCmd extends AbstractCommonCommand startClockPointDTO = clcokInTimeDataList.stream().filter(e->e.getPointType() == ClockPointEnum.START && DateUtil.getTime(kssj).compareTo(DateUtil.getTime(e.getClassTime())) == 0).collect(Collectors.toList()); + //加班结束时间 String jssj = Utils.getjssjTime(scheduleMap, analysisDate); List endClockPointDTO = clcokInTimeDataList.stream().filter(e->e.getPointType() == ClockPointEnum.END && @@ -274,6 +275,16 @@ public class GetOvertimeDurationCmd extends AbstractCommonCommand0 && startClockPointDTO.get(0).getElasticTime() != null && !startClockPointDTO.get(0).getElasticTime().equals("")){ + forComputeStartTime = startClockPointDTO.get(0).getElasticTime(); + }else { + forComputeStartTime = kssj; + } + } + }else { + if (startClockPointDTO.size()>0 && startClockPointDTO.get(0).getElasticTime() != null && !startClockPointDTO.get(0).getElasticTime().equals("")){ + forComputeStartTime = startClockPointDTO.get(0).getElasticTime(); }else { forComputeStartTime = kssj; } @@ -284,6 +295,16 @@ public class GetOvertimeDurationCmd extends AbstractCommonCommand0 && endClockPointDTO.get(0).getElasticTime() != null && !endClockPointDTO.get(0).getElasticTime().equals("")){ + forComputeEndTime = endClockPointDTO.get(0).getElasticTime(); + }else { + forComputeEndTime = jssj; + } + } + }else { + if (endClockPointDTO.size()>0 && endClockPointDTO.get(0).getElasticTime() != null && !endClockPointDTO.get(0).getElasticTime().equals("")){ + forComputeEndTime = endClockPointDTO.get(0).getElasticTime(); }else { forComputeEndTime = jssj; } diff --git a/src/com/engine/jucailinkq/attendance/attendanceanalysis/service/impl/ShiftServiceImpl.java b/src/com/engine/jucailinkq/attendance/attendanceanalysis/service/impl/ShiftServiceImpl.java index 95d7906..89b0bc3 100644 --- a/src/com/engine/jucailinkq/attendance/attendanceanalysis/service/impl/ShiftServiceImpl.java +++ b/src/com/engine/jucailinkq/attendance/attendanceanalysis/service/impl/ShiftServiceImpl.java @@ -236,6 +236,13 @@ public class ShiftServiceImpl extends Service implements ShiftService { compareMap.put("judgePartD", String.valueOf(redundantMinutes)); compareMap.put("judgePartE", compareMap.get("priorityValue")); + List emptyClockPointDTO = clockInTimeData.stream().filter(e->e.getTimeType()==ClockPointEnum.EMPTY).collect(Collectors.toList()); + if (emptyClockPointDTO.size() == clockInTimeData.size()){ + //当全为漏打卡时 + compareMap.put("judgePartC","0"); + } + + return compareMap; } diff --git a/src/com/engine/jucailinkq/attendance/attendanceanalysis/wrapper/AttendaceActionWrapper.java b/src/com/engine/jucailinkq/attendance/attendanceanalysis/wrapper/AttendaceActionWrapper.java index 45d5097..cf4896a 100644 --- a/src/com/engine/jucailinkq/attendance/attendanceanalysis/wrapper/AttendaceActionWrapper.java +++ b/src/com/engine/jucailinkq/attendance/attendanceanalysis/wrapper/AttendaceActionWrapper.java @@ -73,10 +73,12 @@ public class AttendaceActionWrapper extends Service { CommonUtil.checkHavePermission(); if ("".equals(userIds)){ log.info("********AttendanceanalysisAction prepare start******"); - String queryDepartEmployeeSql = "select resourceid ,changedate,type_n from HRMSTATUSHISTORY where changedate is not null"; + String queryDepartEmployeeSql = "select resourceid ,changedate,type_n,newdepartmentid from HRMSTATUSHISTORY where changedate is not null"; //获取离职日期 List> departEmployeeList = DbTools.getSqlToList(queryDepartEmployeeSql); Map departEmployeeMap = CommonUtil.getDepartEmployeeMap(departEmployeeList); + Map transferDepartmenteeMap = CommonUtil.getTransferDepartment(departEmployeeList); + /**排班结果*/ String querySchedulesql = "select a.id as keyid,a.* from uf_pbjg a where bcrq >=? and bcrq<=? order by bcrq"; @@ -156,6 +158,7 @@ public class AttendaceActionWrapper extends Service { analysisParam.put("seclevel",Util.null2String(userMap.get("seclevel"))); analysisParam.put("departmentId",Util.null2String(userMap.get("departmentid"))); analysisParam.put("subCompanyId",Util.null2String(userMap.get("subcompanyid1"))); + analysisParam.put("transferDepartmenteeMap",transferDepartmenteeMap.get(userId)); @@ -189,10 +192,11 @@ public class AttendaceActionWrapper extends Service { } }else { log.info("********AttendanceanalysisAction prepare start******"); - String queryDepartEmployeeSql = "select resourceid ,changedate,type_n from HRMSTATUSHISTORY where changedate is not null and resourceid in ("+userIds+")"; + String queryDepartEmployeeSql = "select resourceid ,changedate,type_n,newdepartmentid from HRMSTATUSHISTORY where changedate is not null and resourceid in ("+userIds+")"; //获取离职日期 List> departEmployeeList = DbTools.getSqlToList(queryDepartEmployeeSql); Map departEmployeeMap = CommonUtil.getDepartEmployeeMap(departEmployeeList); + Map transferDepartmenteeMap = CommonUtil.getTransferDepartment(departEmployeeList); /**排班结果*/ String querySchedulesql = "select a.id as keyid,a.* from uf_pbjg a where bcrq >=? and bcrq<=? order by bcrq"; @@ -266,6 +270,7 @@ public class AttendaceActionWrapper extends Service { analysisParam.put("seclevel",userGroupMap.get(userId).get(0).get("seclevel")); analysisParam.put("departmentId",userGroupMap.get(userId).get(0).get("departmentid")); analysisParam.put("subCompanyId",userGroupMap.get(userId).get(0).get("subcompanyid1")); + analysisParam.put("transferDepartmenteeMap",transferDepartmenteeMap.get(userId)); Map>> attendaceResultMap = Maps.newHashMap(); diff --git a/src/com/engine/jucailinkq/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper.java b/src/com/engine/jucailinkq/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper.java index 4f620bd..eb8fc0c 100644 --- a/src/com/engine/jucailinkq/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper.java +++ b/src/com/engine/jucailinkq/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper.java @@ -8,6 +8,7 @@ import com.engine.jucailinkq.attendance.attendanceanalysis.service.impl.UtilServ import com.engine.jucailinkq.attendance.enums.CheckBoxEnum; import com.engine.jucailinkq.attendance.enums.ClassSegmentTypeEnum; import com.engine.jucailinkq.attendance.enums.ClockPointEnum; +import com.engine.jucailinkq.attendance.enums.SystemItemEnum; import com.engine.jucailinkq.common.util.CommonUtil; import com.engine.jucailinkq.common.util.DateUtil; import com.engine.common.util.ServiceUtil; @@ -55,6 +56,7 @@ public class AttendanceAnalysisWrapper extends Service { String departmentid = Util.null2String(analysisParam.get("departmentId")); String subcompanyid1 = Util.null2String(analysisParam.get("subCompanyId")); + Map attendancePlanMap = (Map)analysisParam.get("attendancePlanMap"); List> generalAttendanceItems = (List>)analysisParam.get("generalAttendanceItems"); Map>> attendanceItemGroupByPlan = (Map>>)analysisParam.get("attendanceItemGroupByPlan"); @@ -117,7 +119,7 @@ public class AttendanceAnalysisWrapper extends Service { !"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)) + if (analysisDateAttendaceResult!=null && analysisDateAttendaceResult.size() >0 && !analysisDateAttendaceResult.get(0).get("bm").equals(departmentid) && DateUtil.getTime(analysisDate).compareTo(DateUtil.getTime(DateUtil.beforeDay(DateUtil.getCurrentDate(),1))) <0){ String olddepartmentid = analysisDateAttendaceResult.get(0).get("bm").toString(); String oldsubCompanyid = analysisDateAttendaceResult.get(0).get("fbid").toString(); @@ -170,6 +172,7 @@ public class AttendanceAnalysisWrapper extends Service { getClockTimeParam.put("clockInTimeCollect", collect); getClockTimeParam.put("schedulingResultCollect", schedulingResultsMap); getClockTimeParam.put("clockInTimeMap", clockInTimeMap); + getClockTimeParam.put("workHourItems",workHourItems); getClockTimeParam.put("userId", userId); //打卡数据 @@ -217,6 +220,10 @@ public class AttendanceAnalysisWrapper extends Service { String departmentid = Util.null2String(analysisParam.get("departmentId")); String subcompanyid1 = Util.null2String(analysisParam.get("subCompanyId")); + List> transferDepartmenteelist = analysisParam.get("transferDepartmenteeMap")==null?Lists.newArrayList():(List>)analysisParam.get("transferDepartmenteeMap"); + transferDepartmenteelist = transferDepartmenteelist.stream().filter(e->departmentid.equals(e.get("newdepartmentid"))).sorted(Comparator.comparing(e->DateUtil.getTime(e.get("changedate").toString()).toInstant(ZoneOffset.of("+8")).toEpochMilli())).collect(Collectors.toList()); + String changeDate = transferDepartmenteelist.size()>0?transferDepartmenteelist.get(transferDepartmenteelist.size()-1).get("changedate").toString():DateUtil.getCurrentDate(); + /**获得人员考勤项目*/ @@ -266,7 +273,7 @@ public class AttendanceAnalysisWrapper extends Service { List> analysisDateAttendanceItems =Lists.newArrayList(); /**人员换了部门,需班次、分部、部门继续走老的*/ if (attendaceResult!=null && attendaceResult.size() >0 && (!attendaceResult.get(0).get("fbid").equals(subcompanyid1) || !attendaceResult.get(0).get("bm").equals(departmentid)) && - DateUtil.getTime(analysisDate).compareTo(DateUtil.getTime(DateUtil.getCurrentDate())) <0){ + DateUtil.getTime(analysisDate).compareTo(DateUtil.getTime(changeDate)) <0){ String olddepartmentid = attendaceResult.get(0).get("bm").toString(); String oldsubCompanyid = attendaceResult.get(0).get("fbid").toString(); @@ -546,6 +553,8 @@ public class AttendanceAnalysisWrapper extends Service { } //recordData.addAll(needRecordAbnormalList); + //消除非工作班段的record为false的漏卡 + abnormalClockInListByEvction = abnormalClockInListByEvction.stream().filter(e->!(!(boolean) e.get("record") && SystemItemEnum.MISSING_CLOCK_IN.getKey().equals(e.get("item")) && !ClassSegmentTypeEnum.WORK_TIME.getKey().equals(e.get("bdlx")))).collect(Collectors.toList()); recordData.addAll(abnormalClockInListByEvction); List> workOverTimeItemList = (List>)recordWorkOverTime.get("workOverTimeItemList"); if (workOverTimeItemList.size() > 0){ diff --git a/src/com/engine/jucailinkq/attendance/vacation/job/holidaygeneration/tactics/SinglePaymentInFullWay.java b/src/com/engine/jucailinkq/attendance/vacation/job/holidaygeneration/tactics/SinglePaymentInFullWay.java index 47c35b0..874c75d 100644 --- a/src/com/engine/jucailinkq/attendance/vacation/job/holidaygeneration/tactics/SinglePaymentInFullWay.java +++ b/src/com/engine/jucailinkq/attendance/vacation/job/holidaygeneration/tactics/SinglePaymentInFullWay.java @@ -5,13 +5,12 @@ import com.engine.jucailinkq.attendance.enums.CheckBoxEnum; import com.engine.jucailinkq.attendance.enums.QuotaChangeMethodEnum; import com.engine.jucailinkq.attendance.enums.StartingUnitEnum; import com.engine.jucailinkq.attendance.vacation.util.VocationCommonUtil; +import com.engine.jucailinkq.common.exception.AttendanceRunTimeException; import com.engine.jucailinkq.common.util.DateUtil; import com.google.common.collect.Maps; import lombok.extern.slf4j.Slf4j; import weaver.general.Util; -import javax.swing.text.DateFormatter; -import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.Calendar; import java.util.List; @@ -70,8 +69,6 @@ public class SinglePaymentInFullWay implements HolidayGenerationWay { String schdedkzsxrq = Util.null2String(vocationList.get(0).get("schdedkzsxrq")); //间隔时长算法 String jgscsf = Util.null2String(vocationList.get(0).get("jgsc")); - //累计时长单位:0:年;1:月 - String ljgldw = Util.null2String(vocationList.get(0).get("lsgldw")); if ("".equals(qsrq)){ return Maps.newHashMap(); @@ -100,7 +97,7 @@ public class SinglePaymentInFullWay implements HolidayGenerationWay { Map insertHoliDayParam = VocationCommonUtil.getInsertHoliDayParam(vocationList.get(0), userId, qsrq, releaseDate); List> dataList = VocationCommonUtil.ifexist("uf_jcl_kq_jqye", insertHoliDayParam); - // List> dataList = new ArrayList<>(); + // List> dataList = new ArrayList<>(); //已存在数据且不覆盖 if (dataList.size()>0 && !"1".equals(cover)) { @@ -251,44 +248,43 @@ public class SinglePaymentInFullWay implements HolidayGenerationWay { String wscl = Util.null2String(vocationList.get(0).get("wscl")); //间隔时长算法 String jgscsf = Util.null2String(vocationList.get(0).get("jgsc")); - //累计工龄数或者直取工龄数 - int seniority = 0; - //累计时长单位:0:年;1:月 - String ljgldw = Util.null2String(vocationList.get(0).get("lsgldw")); - if(!"2".equals(jgscsf)) { - //间隔时长不为直取工龄时,进行取整处理 todo:实际上累计工龄为年时 基本上都是有小数的 ,都不应该取整 ,这里的逻辑有待优化 - seniority = "".equals(ljcrglyfslwz) ? 0 : Double.valueOf(ljcrglyfslwz).intValue(); - } + + int seniority = "".equals(ljcrglyfslwz)?0:Double.valueOf(ljcrglyfslwz).intValue(); + double restTime=0.0; //折算 if (changeMethodEnum == QuotaChangeMethodEnum.CONVERT){ - int beginYear = 0; - int endYear = 0; - String divideTime = ""; - if("2".equals(jgscsf)) { + int beginYearMonth = DateUtil.getBetWeenMonths(qsrq,sxrq); + if (beginYearMonth < 0){ + beginYearMonth = 0; + } + beginYearMonth = beginYearMonth+seniority; + int endYearMonth = DateUtil.getBetWeenMonths(qsrq,nextSxrq); + endYearMonth = endYearMonth+seniority; + int beginYear = beginYearMonth/12; + int endYear = endYearMonth/12; + + //残年分割日期 + String divideTime = DateUtil.beforeMonth(qsrq,seniority); + //divideTime = sxrq.split("-")[0]+"-"+divideTime.split("-")[1]+"-"+divideTime.split("-")[2]; + divideTime = DateUtil.nextYear(divideTime,endYear,DateUtil.yyyyMMdd); + if (jgscsf.equals("2")){ //直接取工龄字段 - beginYear = Double.valueOf(ljcrglyfslwz).intValue(); + beginYear = seniority/12; endYear = beginYear+1; - DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); - double divdemonths = Double.valueOf(ljcrglyfslwz) - Double.valueOf(ljcrglyfslwz).intValue(); - divideTime = DateUtil.nextMonth(sxrq,(int)Math.ceil(divdemonths*12),dateTimeFormatter); - //LocalDateTime localDateTime = DateUtil.getTime(sxrq); - //localDateTime = localDateTime.plusMonths((int)Math.ceil(divdemonths*12)); - //divideTime = localDateTime.format(dateTimeFormatter); - }else { - int beginYearMonth = DateUtil.getBetWeenMonths(qsrq, sxrq); - if (beginYearMonth < 0) { - beginYearMonth = 0; + + //分割日期 + int month = DateUtil.getBetWeenMonths(qsrq,sxrq); + if (month < 0){ + month = 0; } - beginYearMonth = beginYearMonth + seniority; - int endYearMonth = DateUtil.getBetWeenMonths(qsrq, nextSxrq); - endYearMonth = endYearMonth + seniority; - beginYear = beginYearMonth / 12; - endYear = endYearMonth / 12; - //残年分割日期 - divideTime = DateUtil.beforeMonth(qsrq,seniority); + int historySeniority = seniority-month<0?0:seniority-month; + + divideTime = DateUtil.beforeMonth(qsrq,historySeniority); divideTime = sxrq.split("-")[0]+"-"+divideTime.split("-")[1]+"-"+divideTime.split("-")[2]; } + + Map beginYearmap = VocationCommonUtil.getVocationMap(vocationList, beginYear, yjzd,userId); Map endYearmap = VocationCommonUtil.getVocationMap(vocationList, endYear, yjzd,userId); double beginEdktsc = Double.valueOf(beginYearmap.get("edktsc") == null? "0" :Util.null2String(beginYearmap.get("edktsc"))); @@ -328,12 +324,13 @@ public class SinglePaymentInFullWay implements HolidayGenerationWay { restTime = VocationCommonUtil.handleRestDays(beforeRestTime+afterRestTime,wscl); } } + }else { //不折算 int beginYear = 0; if (jgscsf.equals("2")){ //直接取工龄字段 - beginYear = Double.valueOf(ljcrglyfslwz).intValue(); + beginYear = seniority/12; }else { //起算日期与当前日期间隔+工龄字段 int beginYearMonth = DateUtil.getBetWeenMonths(qsrq,sxrq); diff --git a/src/com/engine/jucailinkq/attendance/vacation/util/VocationCommonUtil.java b/src/com/engine/jucailinkq/attendance/vacation/util/VocationCommonUtil.java index a2f1915..bcaa26e 100644 --- a/src/com/engine/jucailinkq/attendance/vacation/util/VocationCommonUtil.java +++ b/src/com/engine/jucailinkq/attendance/vacation/util/VocationCommonUtil.java @@ -1,10 +1,7 @@ package com.engine.jucailinkq.attendance.vacation.util; import com.engine.jucailinkq.attendance.enums.*; -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.engine.jucailinkq.common.util.*; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import lombok.extern.slf4j.Slf4j; @@ -567,8 +564,16 @@ public class VocationCommonUtil { String jqid = Util.null2String(dataMap.get("jqid")); String sxrq = Util.null2String(dataMap.get("sxrq")); String jzrq = Util.null2String(dataMap.get("jzrq")); + String vacationRepeat = Util.null2String(ExtensionClassHolder.getGlobalSetMap().get("vacationRepeat")); String sql = "select id,ffsj,ktsc,yxsc,wxsc,ztsc,zfsc,yqsc,yqyxsc,yqsxrq from "+tableName +" where lyid=? and ygid=? and jqid=? and sxrq<=? and jzrq>=?"; - List> dataList = DbTools.getSqlToList(sql,lyid,ygid,jqid,jzrq,sxrq); + List> dataList = null; + if (vacationRepeat.equals("1")){ + sql = "select id,ffsj,ktsc,yxsc,wxsc,ztsc,zfsc,yqsc,yqyxsc,yqsxrq from "+tableName +" where ygid=? and jqid=? and sxrq<=? and jzrq>=?"; + dataList = DbTools.getSqlToList(sql,ygid,jqid,jzrq,sxrq); + }else { + dataList = DbTools.getSqlToList(sql,lyid,ygid,jqid,jzrq,sxrq); + } + return dataList; } diff --git a/src/com/engine/jucailinkq/attendance/workflow/service/impl/AskForLeaveServiceImpl.java b/src/com/engine/jucailinkq/attendance/workflow/service/impl/AskForLeaveServiceImpl.java index 8763379..f8b3832 100644 --- a/src/com/engine/jucailinkq/attendance/workflow/service/impl/AskForLeaveServiceImpl.java +++ b/src/com/engine/jucailinkq/attendance/workflow/service/impl/AskForLeaveServiceImpl.java @@ -155,6 +155,7 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic String leaveMode = Util.null2String(mainTableData.get("cxjqj")); String leaveType = Util.null2String(mainTableData.get("jqlx")); String dailyRepeat = Util.null2String(mainTableData.get("mtcfsdjq")); + String bcxx = Util.null2String(mainTableData.get("bcxx")); //假期余额使用规则,0-假别优先,1-失效日期优先,默认0 String jqyeUsePriority = Util.null2String(mainTableData.get("yesygz")); if ("".equals(jqyeUsePriority)) { @@ -250,10 +251,10 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic Map> empIdToDateRatedHours = new HashMap<>(); if (leaveMode.equals(AskAndEvctionWayEnum.TIME_INTERVAL.getKey()) && !"1".equals(dailyRepeat)) { simpleLeaveDetailList = createSimpleLeaveDetailListWithNoDaily(leaveEmpIdList, leaveDateList, removeNonWorkDayRange, scheduleInfoMap, - restDayInfo, countBdlxList, hsdw, hsl, shiftInfoMap, mainTableData, empIdToDateRatedHours); + restDayInfo, countBdlxList, hsdw, hsl, shiftInfoMap, mainTableData, empIdToDateRatedHours,bcxx); } else { simpleLeaveDetailList = createSimpleLeaveDetailList(leaveEmpIdList, leaveDateList, removeNonWorkDayRange, scheduleInfoMap, - restDayInfo, countBdlxList, hsdw, hsl, shiftInfoMap, mainTableData, empIdToDateRatedHours); + restDayInfo, countBdlxList, hsdw, hsl, shiftInfoMap, mainTableData, empIdToDateRatedHours,bcxx); } //收集已关联假期余额的请假明细数据 List> completeLeaveDetailList = new ArrayList<>(); @@ -438,7 +439,7 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic */ private List> createSimpleLeaveDetailList(List leaveEmpIdList, List leaveDateList, boolean removeNonWorkDayRange, Map>> scheduleInfoMap, Map> restDayInfo, List countBdlxList, String hsdw, double hsl, Map> shiftInfoMap, - Map mainTableData, Map> empIdToDateRatedHours) { + Map mainTableData, Map> empIdToDateRatedHours,String bcxx) { //开始时间、结束时间、请假方式、请假时长、上下午选择、开始时段、结束时段 String startTime = Util.null2String(mainTableData.get("kssj")); String endTime = Util.null2String(mainTableData.get("jssj")); @@ -478,6 +479,9 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic for (String leaveDate : leaveDateList) { //获取当天班次id String currentDayBcId = restDateList.contains(leaveDate) ? "" : Util.null2String(dateToBcxxMap.get(leaveDate)).split("-")[0]; + if ("".equals(currentDayBcId) && !"".equals(bcxx)){ + currentDayBcId = bcxx; + } if (!"".equals(currentDayBcId)) { Map shiftInfo = shiftInfoMap.get(currentDayBcId); qjscHours = shiftInfo == null ? "8" : shiftInfo.get("edsc").toString(); @@ -627,7 +631,7 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic */ private List> createSimpleLeaveDetailListWithNoDaily(List leaveEmpIdList, List leaveDateList, boolean removeNonWorkDayRange, Map>> scheduleInfoMap, Map> restDayInfo, List countBdlxList, String hsdw, double hsl, Map> shiftInfoMap, - Map mainTableData, Map> empIdToDateRatedHours) { + Map mainTableData, Map> empIdToDateRatedHours,String bcxx) { //开始日期、结束日期、开始时间、结束时间、请假方式、请假时长、上下午选择、开始时段、结束时段 String startDate = Util.null2String(mainTableData.get("ksrq")); String endDate = Util.null2String(mainTableData.get("jsrq")); @@ -701,6 +705,9 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic simpleLeaveDetailItem.put("jssj", realEndTime); for (String date : leaveDateList) { targetDateBcId = restDateList.contains(date) ? "" : Util.null2String(dateToBcxxMap.get(date)).split("-")[0]; + if ("".equals(targetDateBcId) && !"".equals(bcxx)){ + targetDateBcId = bcxx; + } if (!"".equals(targetDateBcId)) { Map shiftInfo = shiftInfoMap.get(targetDateBcId); dateToRatedHours.put(date, Double.parseDouble(shiftInfo == null ? "8" : shiftInfo.get("edsc").toString())); 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 728193f..7af535a 100644 --- a/src/com/engine/jucailinkq/attendance/workflow/service/impl/OvertimePlanServiceImpl.java +++ b/src/com/engine/jucailinkq/attendance/workflow/service/impl/OvertimePlanServiceImpl.java @@ -42,6 +42,7 @@ public class OvertimePlanServiceImpl extends Service implements OvertimePlanServ String endDate = Util.null2String(mainTableData.get("jsrq")); String startTime = Util.null2String(mainTableData.get("kssj")); String endTime = Util.null2String(mainTableData.get("jssj")); + String jblx = Util.null2String(mainTableData.get("jblx")); //获取加班人员列表 List empIdList = "".equals(jbry) ? new ArrayList<>() : Arrays.asList(jbry.split(",")); //获取加班日期集合 @@ -295,6 +296,14 @@ public class OvertimePlanServiceImpl extends Service implements OvertimePlanServ matchItemInfo = attendanceItemInfo; } } + if (!"".equals(jblx)){ + List> jblxList = jblxAttendanceList.stream().filter(e->e.get("id").equals(jblx)).collect(Collectors.toList()); + if (jblxList.size()>0){ + matchItemInfo = jblxList.get(0); + detailItem.put("jblx", Util.null2String(matchItemInfo.get("id"))); + detailItem.put("jblxName", Util.null2String(matchItemInfo.get("mc"))); + } + } detailItem.put("gsrq", belongDate); //20240814需求变更。增加单条明细的最小加班分钟数校验,工作日加班最大小时数、周加班最大小时数、月加班最大小时数 if (matchItemInfo.size() == 0) { diff --git a/src/com/engine/jucailinkq/common/util/CommonUtil.java b/src/com/engine/jucailinkq/common/util/CommonUtil.java index 55f3764..bf1ce58 100644 --- a/src/com/engine/jucailinkq/common/util/CommonUtil.java +++ b/src/com/engine/jucailinkq/common/util/CommonUtil.java @@ -1321,6 +1321,23 @@ public class CommonUtil { } return resultMap; } + /** + * 转岗部门 + * @param departEmployeeList + * @return + */ + public static Map getTransferDepartment(List> departEmployeeList){ + departEmployeeList = departEmployeeList.stream().filter(e->!Util.null2String(e.get("changedate")).equals("")).collect(Collectors.toList()); + Map>> group = departEmployeeList.stream().collect(Collectors.groupingBy(e -> Util.null2String(e.get("resourceid")))); + Map resultMap = Maps.newHashMap(); + for (Map.Entry>> entry: group.entrySet()){ + String userid = entry.getKey(); + List> list = entry.getValue(); + list = list.stream().filter(e->e.get("type_n").equals("4")).collect(Collectors.toList()); + resultMap.put(userid,list); + } + return resultMap; + } public static double convertTohour(String hsdw,String time){ double hour = 0; diff --git a/workflow/request/hrmattendance/HrmjucailAskForLeave_e9.jsp b/workflow/request/hrmattendance/HrmjucailAskForLeave_e9.jsp index bc6c2ac..4c32860 100644 --- a/workflow/request/hrmattendance/HrmjucailAskForLeave_e9.jsp +++ b/workflow/request/hrmattendance/HrmjucailAskForLeave_e9.jsp @@ -23,7 +23,8 @@ sxwxz: WfForm.getFieldValue(WfForm.convertFieldNameToId("sxwxz")), kssd: WfForm.getFieldValue(WfForm.convertFieldNameToId("kssd")), jssd: WfForm.getFieldValue(WfForm.convertFieldNameToId("jssd")), - qjsc: WfForm.getFieldValue(WfForm.convertFieldNameToId("qjsc")) + qjsc: WfForm.getFieldValue(WfForm.convertFieldNameToId("qjsc")), + bcxx:WfForm.getFieldValue(WfForm.convertFieldNameToId("bcxx")) } generateHoliday(mainTableData); }) diff --git a/workflow/request/hrmattendance/HrmjucailBatchAskForLeave_e9.jsp b/workflow/request/hrmattendance/HrmjucailBatchAskForLeave_e9.jsp index 33ba1b9..e4ef51f 100644 --- a/workflow/request/hrmattendance/HrmjucailBatchAskForLeave_e9.jsp +++ b/workflow/request/hrmattendance/HrmjucailBatchAskForLeave_e9.jsp @@ -23,7 +23,8 @@ sxwxz: WfForm.getFieldValue(WfForm.convertFieldNameToId("sxwxz")), kssd: WfForm.getFieldValue(WfForm.convertFieldNameToId("kssd")), jssd: WfForm.getFieldValue(WfForm.convertFieldNameToId("jssd")), - qjsc: WfForm.getFieldValue(WfForm.convertFieldNameToId("qjsc")) + qjsc: WfForm.getFieldValue(WfForm.convertFieldNameToId("qjsc")), + bcxx:WfForm.getFieldValue(WfForm.convertFieldNameToId("bcxx")) } let detailTableData=[]; diff --git a/workflow/request/hrmattendance/HrmjucailWorkOvertimePlan_e9.jsp b/workflow/request/hrmattendance/HrmjucailWorkOvertimePlan_e9.jsp index 0211597..95da958 100644 --- a/workflow/request/hrmattendance/HrmjucailWorkOvertimePlan_e9.jsp +++ b/workflow/request/hrmattendance/HrmjucailWorkOvertimePlan_e9.jsp @@ -134,6 +134,12 @@ WfForm.changeFieldValue(WfForm.convertFieldNameToId("jbsc"), {value:totalsc}); } + + WfForm.registerAction(WfForm.ACTION_DELROW+"1", function(arg){ + var totalsc = getTotalsc(); + WfForm.changeFieldValue(WfForm.convertFieldNameToId("jbsc"), {value:totalsc}); + }); + WfForm.bindDetailFieldChangeEvent(WfForm.convertFieldNameToId("kssj","detail_1"), function(id,rowIndex,value) { console.log("WfForm.bindDetailFieldChangeEvent--",id,rowIndex,value); @@ -145,6 +151,12 @@ console.log("WfForm.bindDetailFieldChangeEvent--",id,rowIndex,value); updateDetail(rowIndex); + }); + WfForm.bindDetailFieldChangeEvent(WfForm.convertFieldNameToId("jblx","detail_1"), + function(id,rowIndex,value) { + console.log("WfForm.bindDetailFieldChangeEvent--",id,rowIndex,value); + updateDetail(rowIndex); + }); WfForm.bindDetailFieldChangeEvent(WfForm.convertFieldNameToId("jsrq","detail_1"), diff --git a/workflow/request/hrmattendance/UpdateErrorData.jsp b/workflow/request/hrmattendance/UpdateErrorData.jsp index 3e4836a..34e75a2 100644 --- a/workflow/request/hrmattendance/UpdateErrorData.jsp +++ b/workflow/request/hrmattendance/UpdateErrorData.jsp @@ -27,7 +27,7 @@ if (userIds.equals("")){ - String queryDepartEmployeeSql = "select resourceid ,changedate,type_n from HRMSTATUSHISTORY where (type_n = 5 or type_n = 7)"; + String queryDepartEmployeeSql = "select resourceid ,changedate,type_n from HRMSTATUSHISTORY "; //获取离职日期 List> departEmployeeList = DbTools.getSqlToList(queryDepartEmployeeSql); Map departEmployeeMap = CommonUtil.getDepartEmployeeMap(departEmployeeList); @@ -49,6 +49,8 @@ DbTools.update(updateSql,user,startDate,beforeCompanystartdateDay); } } + }else if (!"".equals(companystartdate) && DateUtil.getTime(companystartdate).compareTo(DateUtil.getTime(endDate))>0){ + DbTools.update(updateSql,user,startDate,endDate); } if (!"".equals(terminationDate) && DateUtil.getTime(terminationDate).compareTo(DateUtil.getTime(endDate))<=0 && DateUtil.getTime(terminationDate).compareTo(DateUtil.getTime(startDate))>=0){ @@ -60,11 +62,13 @@ DbTools.update(updateSql,user,AfterDay,endDate); } } + }else if (!"".equals(terminationDate) && DateUtil.getTime(terminationDate).compareTo(DateUtil.getTime(startDate))<0 ){ + DbTools.update(updateSql,user,startDate,endDate); } } }else { - String queryDepartEmployeeSql = "select resourceid ,changedate,type_n from HRMSTATUSHISTORY where resourceid in ("+userIds+") and (type_n = 5 or type_n = 7)"; + String queryDepartEmployeeSql = "select resourceid ,changedate,type_n from HRMSTATUSHISTORY where resourceid in ("+userIds+")"; //获取离职日期 List> departEmployeeList = DbTools.getSqlToList(queryDepartEmployeeSql); Map departEmployeeMap = CommonUtil.getDepartEmployeeMap(departEmployeeList); @@ -86,6 +90,8 @@ DbTools.update(updateSql,user,startDate,beforeCompanystartdateDay); } } + }else if (!"".equals(companystartdate) && DateUtil.getTime(companystartdate).compareTo(DateUtil.getTime(endDate))>0){ + DbTools.update(updateSql,user,startDate,endDate); } if (!"".equals(terminationDate) && DateUtil.getTime(terminationDate).compareTo(DateUtil.getTime(endDate))<=0 && DateUtil.getTime(terminationDate).compareTo(DateUtil.getTime(startDate))>=0){ @@ -97,6 +103,8 @@ DbTools.update(updateSql,user,AfterDay,endDate); } } + }else if (!"".equals(terminationDate) && DateUtil.getTime(terminationDate).compareTo(DateUtil.getTime(startDate))<0 ){ + DbTools.update(updateSql,user,startDate,endDate); } } diff --git a/workflow/request/hrmattendance/createTableByView.jsp b/workflow/request/hrmattendance/createTableByView.jsp new file mode 100644 index 0000000..39a5a7d --- /dev/null +++ b/workflow/request/hrmattendance/createTableByView.jsp @@ -0,0 +1,20 @@ +<%@ page import="weaver.general.Util" %> +<%@ page import="com.engine.jucailinkq.common.util.DbTools" %> +<%@ page import="java.util.List" %> +<%@ page import="java.util.Map" %> +<%@ page import="weaver.conn.RecordSet" %> + + +<% + String tableName = Util.null2String(request.getParameter("tableName")); + String sql = "select * from "+tableName; + RecordSet rs = new RecordSet(); + rs.executeQuery(sql); + String newTableName = "uf_"+tableName; + if (rs.next()){ + String[] columns = rs.getColumnName(); + + + } + +%> \ No newline at end of file