diff --git a/log/sdk.log b/log/sdk.log index e69de29..4c057ee 100644 --- a/log/sdk.log +++ b/log/sdk.log @@ -0,0 +1,8 @@ +2023-10-24 00:28:21,221 [main] [com.engine.attendance.attendanceanalysis.cmd.AbsenteeismCmd] [INFO] - absenteeismCmd attendanceItems : [[{zdhsl=180, xmlx=2, zysd=1, zxhsl=60}, {zdhsl=180, xmlx=2, zysd=1, zxhsl=60}, {zdhsl=60, xmlx=1, zysd=1, zxhsl=0}]] +2023-10-24 00:29:46,847 [main] [com.engine.attendance.attendanceanalysis.cmd.AbsenteeismCmd] [INFO] - absenteeismCmd attendanceItems : [[{zdhsl=180, xmlx=1, zysd=1, zxhsl=60}, {zdhsl=180, xmlx=2, zysd=1, zxhsl=60}, {zdhsl=60, xmlx=2, zysd=1, zxhsl=0}]] +2023-10-24 00:33:14,365 [main] [com.engine.attendance.attendanceanalysis.cmd.AbsenteeismCmd] [INFO] - absenteeismCmd attendanceItems : [[{zdhsl=180, xmlx=2, zysd=1, zxhsl=60}]] +2023-10-24 00:33:33,275 [main] [com.engine.attendance.attendanceanalysis.cmd.AbsenteeismCmd] [INFO] - absenteeismCmd attendanceItems : [[{zdhsl=60, xmlx=2, zysd=1, zxhsl=0}]] +2023-10-26 17:08:22,114 [main] [com.engine.attendance.attendanceanalysis.cmd.AbsenteeismCmd] [INFO] - absenteeismCmd attendanceItems : [[{zdhsl=60, xmlx=2, zysd=1, zxhsl=0}]] +2023-10-26 17:09:45,677 [main] [com.engine.attendance.attendanceanalysis.cmd.AbsenteeismCmd] [INFO] - absenteeismCmd attendanceItems : [[{zdhsl=60, xmlx=2, zysd=1, zxhsl=0}]] +2023-10-26 17:10:16,663 [main] [com.engine.attendance.attendanceanalysis.cmd.AbsenteeismCmd] [INFO] - absenteeismCmd attendanceItems : [[{zdhsl=60, xmlx=2, zysd=1, zxhsl=0}]] +2023-10-27 16:45:00,661 [main] [com.engine.attendance.attendanceanalysis.cmd.AbsenteeismCmd] [INFO] - absenteeismCmd attendanceItems : [[{zdhsl=60, xmlx=2, zysd=1, zxhsl=0}]] diff --git a/out/artifacts/hrm_attendance/hrm-attendance.jar b/out/artifacts/hrm_attendance/hrm-attendance.jar index e157294..a81f53d 100644 Binary files a/out/artifacts/hrm_attendance/hrm-attendance.jar and b/out/artifacts/hrm_attendance/hrm-attendance.jar differ diff --git a/src/com/api/attendance/attendancePlan/web/AttendancePlanActionApi.java b/src/com/api/attendance/attendancePlan/AttendancePlanActionApi.java similarity index 84% rename from src/com/api/attendance/attendancePlan/web/AttendancePlanActionApi.java rename to src/com/api/attendance/attendancePlan/AttendancePlanActionApi.java index eb2d8ae..72c92fb 100644 --- a/src/com/api/attendance/attendancePlan/web/AttendancePlanActionApi.java +++ b/src/com/api/attendance/attendancePlan/AttendancePlanActionApi.java @@ -1,4 +1,4 @@ -package com.api.attendance.attendancePlan.web; +package com.api.attendance.attendancePlan; import com.engine.attendance.attendanceplan.web.AttendancePlanAction; diff --git a/src/com/api/attendance/persongroup/web/PersonGroupActionApi.java b/src/com/api/attendance/persongroup/PersonGroupActionApi.java similarity index 84% rename from src/com/api/attendance/persongroup/web/PersonGroupActionApi.java rename to src/com/api/attendance/persongroup/PersonGroupActionApi.java index d0313b2..61c7613 100644 --- a/src/com/api/attendance/persongroup/web/PersonGroupActionApi.java +++ b/src/com/api/attendance/persongroup/PersonGroupActionApi.java @@ -1,4 +1,4 @@ -package com.api.attendance.persongroup.web; +package com.api.attendance.persongroup; import com.engine.attendance.component.persongroup.web.PersonGroupAction; import lombok.extern.slf4j.Slf4j; diff --git a/src/com/api/attendance/persongroup/web/SchedulingResultsActionApi.java b/src/com/api/attendance/persongroup/SchedulingResultsActionApi.java similarity index 85% rename from src/com/api/attendance/persongroup/web/SchedulingResultsActionApi.java rename to src/com/api/attendance/persongroup/SchedulingResultsActionApi.java index 0dc45d4..5802030 100644 --- a/src/com/api/attendance/persongroup/web/SchedulingResultsActionApi.java +++ b/src/com/api/attendance/persongroup/SchedulingResultsActionApi.java @@ -1,4 +1,4 @@ -package com.api.attendance.persongroup.web; +package com.api.attendance.persongroup; import com.engine.attendance.component.persongroup.web.SchedulingResultsAction; import lombok.extern.slf4j.Slf4j; diff --git a/src/com/engine/attendance/attendanceanalysis/cmd/absenteeismCmd.java b/src/com/engine/attendance/attendanceanalysis/cmd/AbsenteeismCmd.java similarity index 50% rename from src/com/engine/attendance/attendanceanalysis/cmd/absenteeismCmd.java rename to src/com/engine/attendance/attendanceanalysis/cmd/AbsenteeismCmd.java index 79947fb..fdd5de9 100644 --- a/src/com/engine/attendance/attendanceanalysis/cmd/absenteeismCmd.java +++ b/src/com/engine/attendance/attendanceanalysis/cmd/AbsenteeismCmd.java @@ -1,23 +1,27 @@ package com.engine.attendance.attendanceanalysis.cmd; +import com.engine.attendance.enums.AttendanceItemTypeEnum; import com.engine.common.biz.AbstractCommonCommand; import com.engine.common.entity.BizLogContext; import com.engine.core.interceptor.CommandContext; +import lombok.extern.slf4j.Slf4j; import weaver.general.Util; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** - * 人员旷工 + * 人员旷工项目 */ -public class absenteeismCmd extends AbstractCommonCommand> { +@Slf4j +public class AbsenteeismCmd extends AbstractCommonCommand> { @Override public BizLogContext getLogContext() { return null; } - public absenteeismCmd(Map params){ + public AbsenteeismCmd(Map params){ this.params=params; } @@ -25,31 +29,29 @@ public class absenteeismCmd extends AbstractCommonCommand> { public Map execute(CommandContext commandContext) { //作用时段 String workfor = Util.null2String(params.get("workfor")); - String time = Util.null2String(params.get("time")); - String userId = Util.null2String(params.get("userId")); - String itemType = Util.null2String(params.get("itemType")); + int time = Util.null2String(params.get("time")).equals("")? 0:Util.getIntValue(Util.null2String(params.get("time"))); + Map resultMap = new HashMap<>(); + List> attendanceItems = (List>)params.get("attendanceItems"); - attendanceItems.stream().filter(e -> { + attendanceItems = attendanceItems.stream().filter(e -> { //项目类型 String xmlx = Util.null2String(e.get("xmlx")); //作用时段 String zysd = Util.null2String(e.get("zysd")); //最小核算分钟数(不包含) - String zxhsl = Util.null2String(e.get("zxhsl")); + int zxhsl = Util.null2String(e.get("zxhsl")).equals("")?0:Util.getIntValue(Util.null2String(e.get("zxhsl"))); //最大核算分钟数(包含) - String zdhsl = Util.null2String(e.get("zdhsl")); - if( .equals(xmlx) && workfor.equals(zysd)){ + int zdhsl = Util.null2String(e.get("zdhsl")).equals("")?0:Util.getIntValue(Util.null2String(e.get("zdhsl"))); + if(AttendanceItemTypeEnum.ABSENTEESIM.getKey().equals(xmlx) && workfor.equals(zysd) && time > zxhsl && time<=zdhsl) { + return true; } - - - - - return false; }).collect(Collectors.toList()); + log.info("absenteeismCmd attendanceItems : [{}]",attendanceItems); + resultMap.put("attendanceItems",attendanceItems); - return null; + return resultMap; } } diff --git a/src/com/engine/attendance/attendanceanalysis/cmd/GetClockInTimeCmd.java b/src/com/engine/attendance/attendanceanalysis/cmd/GetClockInTimeCmd.java new file mode 100644 index 0000000..f70f825 --- /dev/null +++ b/src/com/engine/attendance/attendanceanalysis/cmd/GetClockInTimeCmd.java @@ -0,0 +1,145 @@ +package com.engine.attendance.attendanceanalysis.cmd; + +import com.engine.attendance.enums.ClassSegmentTypeEnum; +import com.engine.common.biz.AbstractCommonCommand; +import com.engine.common.entity.BizLogContext; +import com.engine.common.util.DateUtil; +import com.engine.core.interceptor.CommandContext; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import weaver.general.Util; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +public class GetClockInTimeCmd extends AbstractCommonCommand> { + public GetClockInTimeCmd(Map params){ + this.params=params; + } + @Override + public BizLogContext getLogContext() { + return null; + } + + @Override + public Map execute(CommandContext commandContext) { + //打卡日期 + String needGetDate = Util.null2String(params.get("date")); + //打卡数据 + Map>> clockInTimeCollect = (Map>>)params.get("clockInTimeCollect"); + //班次数据 + Map>> schedulingResultCollect = (Map>>)params.get("schedulingResultCollect"); + + Map resultMap = Maps.newHashMap(); + List> resultList = Lists.newArrayList(); + + //当天打卡日期集合 + List> needGetDateList = clockInTimeCollect.get(needGetDate); + //当天班次 + List> needGetDateScheduling = schedulingResultCollect.get(needGetDate); + + //前一天的打卡集合 + List> beforeNeedGetDateList = clockInTimeCollect.get(DateUtil.beforeDay(needGetDate,1)); + //前一天班次 + List> beforeNeedGetDateScheduling = schedulingResultCollect.get(DateUtil.beforeDay(needGetDate,1)); + + //后一天的打卡集合 + List> afterNeedGetDateList = clockInTimeCollect.get(DateUtil.AfterDay(needGetDate,1)); + //后一天班次 + List> afterNeedGetDateScheduling = schedulingResultCollect.get(DateUtil.AfterDay(needGetDate,1)); + + + if (needGetDateList == null || needGetDateScheduling== null){ + return resultMap; + }else if (beforeNeedGetDateList == null && afterNeedGetDateList == null){ + resultList = needGetDateList; + }else if (beforeNeedGetDateList != null && afterNeedGetDateList == null){//前一天有打卡数据,后一天没有打卡数据 + if (beforeNeedGetDateScheduling == null){ + resultMap.put("resultList",needGetDateList); + return resultMap; + } + //前一天是否跨天 1:跨天 + String beforesfkt = Util.null2String(beforeNeedGetDateScheduling.get(0).get("sfkt")); + //当天是否跨天 1:跨天 + String nowsfkt = Util.null2String(beforeNeedGetDateScheduling.get(0).get("sfkt")); + if (!"1".equals(beforesfkt) && !"1".equals(nowsfkt)){ + resultList = needGetDateList; + }else if ("1".equals(beforesfkt) && !"1".equals(nowsfkt)){ + //前一天跨天,当天没有跨天 + + }else if (!"1".equals(beforesfkt) && "1".equals(nowsfkt)){ + //前一天没有跨天,当天跨天 + + }else if ("1".equals(beforesfkt) && "1".equals(nowsfkt)){ + //前一天跨天,当天也跨天 + + } + + }else if (beforeNeedGetDateList == null && afterNeedGetDateList != null){ //前一天没有打卡数据,后一天有打卡数据 + if (afterNeedGetDateList == null){ + resultMap.put("resultList",needGetDateList); + return resultMap; + } + + + + }else if (beforeNeedGetDateList !=null && afterNeedGetDateList != null){ + //前后一天都有打卡数据 + + } + resultMap.put("resultList",resultList); + return resultMap; + } + + + /** + * + * @param beforeNeedGetDateScheduling 前一天班次 + * @param beforeNeedGetDateList 前一天打卡日期 + * @param needGetDateScheduling 当天班次 + * @param needGetDateList 当天打卡日期 + * @return + */ + public List> computeStartTime(List> beforeNeedGetDateScheduling,List> beforeNeedGetDateList, + List> needGetDateScheduling,List> needGetDateList){ + //前一天是否跨天 1:跨天 + String beforesfkt = Util.null2String(beforeNeedGetDateScheduling.get(0).get("sfkt")); + //当天是否跨天 1:跨天 + String nowsfkt = Util.null2String(needGetDateScheduling.get(0).get("sfkt")); + if (!"1".equals(beforesfkt) && !"1".equals(nowsfkt)){ + return needGetDateList; + }else if ("1".equals(beforesfkt) && !"1".equals(nowsfkt)){ + //前一天跨天,当天没有跨天 + beforeNeedGetDateScheduling = beforeNeedGetDateScheduling.stream().filter(e -> { + if (ClassSegmentTypeEnum.WORK_TIME.getKey().equals(e.get("bdlx")) || + ClassSegmentTypeEnum.EARLY_OVERTIME.getKey().equals(e.get("bdlx")) || ClassSegmentTypeEnum.EXTENDED_OVERTIME.getKey().equals(e.get("bdlx"))){ + return true; + }else { + return false; + } + }).collect(Collectors.toList()); + Map lastDataMap = beforeNeedGetDateScheduling.get(beforeNeedGetDateScheduling.size()-1); + + + + }else if (!"1".equals(beforesfkt) && "1".equals(nowsfkt)){ + //前一天没有跨天,当天跨天 + + }else if ("1".equals(beforesfkt) && "1".equals(nowsfkt)){ + //前一天跨天,当天也跨天 + + } + return null; + } + + /** + * 计算当天的结束工作时间 + * @return + */ + public List> computeEndTime(List> beforeNeedGetDateScheduling,List> beforeNeedGetDateList, + List> needGetDateScheduling,List> needGetDateList){ + + return null; + } +} diff --git a/src/com/engine/attendance/attendanceanalysis/cmd/UpdateAttendanceResultsCmd.java b/src/com/engine/attendance/attendanceanalysis/cmd/UpdateAttendanceResultsCmd.java new file mode 100644 index 0000000..9098164 --- /dev/null +++ b/src/com/engine/attendance/attendanceanalysis/cmd/UpdateAttendanceResultsCmd.java @@ -0,0 +1,91 @@ +package com.engine.attendance.attendanceanalysis.cmd; + +import com.engine.attendance.enums.SystemItemEnum; +import com.engine.common.biz.AbstractCommonCommand; +import com.engine.common.entity.BizLogContext; +import com.engine.common.util.DbTools; +import com.engine.core.interceptor.CommandContext; +import com.google.common.collect.Maps; +import weaver.conn.RecordSet; +import weaver.general.Util; + +import java.util.List; +import java.util.Map; + +/** + * 更新人员当天出勤结果 + */ +public class UpdateAttendanceResultsCmd extends AbstractCommonCommand> { + + + @Override + public BizLogContext getLogContext() { + return null; + } + public UpdateAttendanceResultsCmd(Map params){ + this.params=params; + } + + @Override + public Map execute(CommandContext commandContext) { + String userId = Util.null2String(params.get("userId")); + String date = Util.null2String(params.get("date")); + //项目 + String item = Util.null2String(params.get("item")); + //项目时长 + String itemduration = Util.null2String(params.get("itemduration")); + Map resultMap = Maps.newHashMap(); + RecordSet rs = new RecordSet(); + //班次信息 + if (params.get("classInfo") == null){ + //当天没有排班,计入异常 + noScheduling(params,rs); + return resultMap; + } + List> classInfo = (List>)params.get("classInfo"); + + String sql = "select ygid,rq,bc,xm1,xm2,xm3,xm4,xm5,xm6,xm7,xm8,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=?"; + List> dataList = DbTools.getSqlToList(sql,userId,date); + if (dataList.size() >0){ + //有出勤结果 + int index = 0; + int i = 0; + while (index==0){ + i++; + if (dataList.get(0).get("xm"+i) != null || !"".equals(dataList.get(0).get("xm"+i))){ + index = i; + } + } + sql = "update uf_jcl_kq_cqjg set xm"+index+"=?,sc"+index+"=? where ygid=? and rq=?"; + DbTools.update(rs,sql,item,itemduration,userId,date); + + }else { + //没有出勤结果 + sql = "select subcompanyid1,departmentid,jobtitle from hrmresource where id=?"; + List> userList = DbTools.getSqlToList(sql,userId); + sql = "insert into uf_jcl_kq_cqjg (szjg,ygid,fbid,bm,zw,rq,bc,bcbdxx,cqzt,cqsc,xm1,sc1) values (?,?,?,?,?,?,?,?,?,?,?,?)"; + DbTools.update(rs,sql,userList.get(0).get("subcompanyid1"),userId,userList.get(0).get("subcompanyid1"),userList.get(0).get("departmentid"), + userList.get(0).get("jobtitle"),date,classInfo.get(0).get("bcxx"),classInfo.get(0).get("bcsdxx"),1,0,item,itemduration); + + + } + + return resultMap; + } + + /** + * 没有排班处理 + * @param params + */ + public void noScheduling(Map params, RecordSet rs){ + String userId = Util.null2String(params.get("userId")); + String date = Util.null2String(params.get("date")); + String sql = "select subcompanyid1,departmentid,jobtitle from hrmresource where id=?"; + List> userList = DbTools.getSqlToList(sql,userId); + sql = "insert into uf_jcl_kq_cqjg (szjg,ygid,fbid,bm,zw,rq,xm1,cqzt) values (?,?,?,?,?,?,?,?)"; + DbTools.update(rs,sql,userList.get(0).get("subcompanyid1"),userId,userList.get(0).get("subcompanyid1"), + userList.get(0).get("departmentid"),userList.get(0).get("jobtitle"),date, SystemItemEnum.NO_SCHEDULING.getKey(),1); + + + } +} diff --git a/src/com/engine/attendance/attendanceanalysis/job/AttendanceAnalysisJob.java b/src/com/engine/attendance/attendanceanalysis/job/AttendanceAnalysisJob.java index 08a9299..d850e93 100644 --- a/src/com/engine/attendance/attendanceanalysis/job/AttendanceAnalysisJob.java +++ b/src/com/engine/attendance/attendanceanalysis/job/AttendanceAnalysisJob.java @@ -32,7 +32,7 @@ public class AttendanceAnalysisJob extends BaseCronJob { Map>> collect = dataList.stream().collect(Collectors.groupingBy(e -> Util.null2String(e.get("userid")))); collect.entrySet().forEach(e -> { - + attendanceAnalysisService.attendanceAnalysis(e.getKey(),e.getValue()); }); log.info("********AttendanceAnalysisJob end********"); } diff --git a/src/com/engine/attendance/attendanceanalysis/service/BeLateService.java b/src/com/engine/attendance/attendanceanalysis/service/BeLateService.java new file mode 100644 index 0000000..841a25f --- /dev/null +++ b/src/com/engine/attendance/attendanceanalysis/service/BeLateService.java @@ -0,0 +1,15 @@ +package com.engine.attendance.attendanceanalysis.service; + +import java.util.Map; + +/** + * 旷工service + */ +public interface BeLateService { + /** + * 全天旷工 + * @param params + * @return + */ + Map fullDayAbsenteeism(Map params); +} diff --git a/src/com/engine/attendance/attendanceanalysis/service/ForgetClockInService.java b/src/com/engine/attendance/attendanceanalysis/service/ForgetClockInService.java new file mode 100644 index 0000000..e753511 --- /dev/null +++ b/src/com/engine/attendance/attendanceanalysis/service/ForgetClockInService.java @@ -0,0 +1,16 @@ +package com.engine.attendance.attendanceanalysis.service; + +import java.util.List; +import java.util.Map; + +/** + * 漏打卡service + */ +public interface ForgetClockInService { + /** + * 全天未打卡 + * @param params + * @return + */ + Map ForgetClockInAllDays(Map params); +} diff --git a/src/com/engine/attendance/attendanceanalysis/service/UtilService.java b/src/com/engine/attendance/attendanceanalysis/service/UtilService.java new file mode 100644 index 0000000..d9579a9 --- /dev/null +++ b/src/com/engine/attendance/attendanceanalysis/service/UtilService.java @@ -0,0 +1,23 @@ +package com.engine.attendance.attendanceanalysis.service; + +import java.util.List; +import java.util.Map; + +/** + * 工具service + */ +public interface UtilService { + /** + * 获得人员班次信息 + * @param params + * @return + */ + Map>> getSchedulingInFormation(Map params); + + /** + * 获得指定天数的打卡时间集合 + * @param params + * @return + */ + List> getClockInTime(Map params); +} diff --git a/src/com/engine/attendance/attendanceanalysis/service/impl/BeLateServiceImpl.java b/src/com/engine/attendance/attendanceanalysis/service/impl/BeLateServiceImpl.java new file mode 100644 index 0000000..f3cf6a4 --- /dev/null +++ b/src/com/engine/attendance/attendanceanalysis/service/impl/BeLateServiceImpl.java @@ -0,0 +1,15 @@ +package com.engine.attendance.attendanceanalysis.service.impl; + +import com.engine.attendance.attendanceanalysis.service.BeLateService; +import com.engine.core.impl.Service; + +import java.util.Map; + +public class BeLateServiceImpl extends Service implements BeLateService { + @Override + public Map fullDayAbsenteeism(Map params) { + + + return null; + } +} diff --git a/src/com/engine/attendance/attendanceanalysis/service/impl/ForgetClockInServiceImpl.java b/src/com/engine/attendance/attendanceanalysis/service/impl/ForgetClockInServiceImpl.java new file mode 100644 index 0000000..5a1ec25 --- /dev/null +++ b/src/com/engine/attendance/attendanceanalysis/service/impl/ForgetClockInServiceImpl.java @@ -0,0 +1,19 @@ +package com.engine.attendance.attendanceanalysis.service.impl; + +import com.engine.attendance.attendanceanalysis.cmd.UpdateAttendanceResultsCmd; +import com.engine.attendance.attendanceanalysis.service.ForgetClockInService; +import com.engine.attendance.enums.SystemItemEnum; +import com.engine.core.impl.Service; + +import java.util.Map; + +public class ForgetClockInServiceImpl extends Service implements ForgetClockInService { + + @Override + public Map ForgetClockInAllDays(Map params) { + params.put("item", SystemItemEnum.MISSING_CLOCK_IN); + params.put("itemduration", 1); + Map result = commandExecutor.execute(new UpdateAttendanceResultsCmd(params)); + return result; + } +} diff --git a/src/com/engine/attendance/attendanceanalysis/service/impl/UtilServiceImpl.java b/src/com/engine/attendance/attendanceanalysis/service/impl/UtilServiceImpl.java new file mode 100644 index 0000000..8637091 --- /dev/null +++ b/src/com/engine/attendance/attendanceanalysis/service/impl/UtilServiceImpl.java @@ -0,0 +1,56 @@ +package com.engine.attendance.attendanceanalysis.service.impl; + +import com.engine.attendance.attendanceanalysis.cmd.GetClockInTimeCmd; +import com.engine.attendance.attendanceanalysis.cmd.UpdateAttendanceResultsCmd; +import com.engine.attendance.attendanceanalysis.service.UtilService; +import com.engine.attendance.component.persongroup.service.SchedulingResultsService; +import com.engine.attendance.component.persongroup.service.impl.SchedulingResultsServiceImpl; +import com.engine.common.util.DateUtil; +import com.engine.common.util.DbTools; +import com.engine.common.util.ServiceUtil; +import com.engine.core.impl.Service; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import lombok.extern.slf4j.Slf4j; +import weaver.general.Util; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Slf4j +public class UtilServiceImpl extends Service implements UtilService { + private SchedulingResultsService schedulingResultsService = ServiceUtil.getService(SchedulingResultsServiceImpl.class); + @Override + public Map>> getSchedulingInFormation(Map params) { + + Map schedulingResultsMap = schedulingResultsService.queryDataTable(params); + List> schedulingResultsList = (List>)schedulingResultsMap.get("data"); + Map schedulingMap = schedulingResultsList.stream().collect(Collectors.toMap(e-> Util.null2String(e.get("bcxx")), e->Util.null2String(e.get("bcrq")))); + String sql = "select a.id bcxx,a.bcsdxx,a.sfkt,b.bdlx,b.kssj dtkssj,b.jssj dtjssj,b.ksdk,b.jsdk,b.tqdkfzs,b.thdkfzs from uf_jcl_kq_bcxx a left join uf_jcl_kq_bcxx_dt1 b on a.id=b.mainid where a.id in ("; + String bcxxIds = ""; + for (Map.Entry entry :schedulingMap.entrySet()){ + bcxxIds +=entry.getKey() +","; + } + bcxxIds = bcxxIds.substring(0,bcxxIds.length()-1); + sql = sql +bcxxIds+") order by b.kssj"; + List> dataList = DbTools.getSqlToList(sql); + Map>> dataMap = dataList.stream().collect(Collectors.groupingBy(e->Util.null2String(e.get("bcxx")))); + Map>> resultMap = Maps.newHashMap(); + dataMap.entrySet().forEach(e -> { + resultMap.put(schedulingMap.get(e.getKey()),e.getValue()); + }); + log.info("SchedulingResults : [{}]",resultMap); + return resultMap; + } + + + @Override + public List> getClockInTime(Map params) { + Map result = commandExecutor.execute(new GetClockInTimeCmd(params)); + List> resultList = (List>)result.get("resultList"); + return resultList; + } + + +} diff --git a/src/com/engine/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper.java b/src/com/engine/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper.java index ce53752..cefbfba 100644 --- a/src/com/engine/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper.java +++ b/src/com/engine/attendance/attendanceanalysis/wrapper/AttendanceAnalysisWrapper.java @@ -1,10 +1,21 @@ package com.engine.attendance.attendanceanalysis.wrapper; +import com.engine.attendance.attendanceanalysis.service.BeLateService; +import com.engine.attendance.attendanceanalysis.service.ForgetClockInService; +import com.engine.attendance.attendanceanalysis.service.UtilService; +import com.engine.attendance.attendanceanalysis.service.impl.BeLateServiceImpl; +import com.engine.attendance.attendanceanalysis.service.impl.ForgetClockInServiceImpl; +import com.engine.attendance.attendanceanalysis.service.impl.UtilServiceImpl; import com.engine.attendance.attendanceplan.service.AttendancePlanService; import com.engine.attendance.attendanceplan.service.impl.AttendancePlanServiceImpl; +import com.engine.attendance.component.persongroup.service.SchedulingResultsService; +import com.engine.attendance.component.persongroup.service.impl.SchedulingResultsServiceImpl; +import com.engine.attendance.enums.WorkForTimeEnum; import com.engine.common.util.DateUtil; +import com.engine.common.util.DbTools; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; +import com.google.common.collect.Maps; import weaver.general.Util; import java.util.HashMap; @@ -18,15 +29,18 @@ import java.util.stream.Collectors; public class AttendanceAnalysisWrapper extends Service { private AttendancePlanService basicsetService = ServiceUtil.getService(AttendancePlanServiceImpl.class); + private BeLateService beLateService = ServiceUtil.getService(BeLateServiceImpl.class); + private UtilService utilService = ServiceUtil.getService(UtilServiceImpl.class); + private ForgetClockInService forgetClockInService = ServiceUtil.getService(ForgetClockInServiceImpl.class); public void attendanceAnalysis(String userId, List> dataList){ String beforeThreeDayDate = DateUtil.getCurrentDateMinusDay(3); - String beforeTwoDayDate = DateUtil.getCurrentDateMinusDay(1); + String beforeTwoDayDate = DateUtil.getCurrentDateMinusDay(2); String beforeOneDayDate = DateUtil.getCurrentDateMinusDay(1); Map>> collect = dataList.stream().collect(Collectors.groupingBy(e -> Util.null2String(e.get("signdate")))); /**获得人员考勤项目*/ - Map paramMap = new HashMap<>(); + Map paramMap = Maps.newHashMap(); paramMap.put("startDate",""); paramMap.put("endDate",""); paramMap.put("resourceId","85"); @@ -34,39 +48,56 @@ public class AttendanceAnalysisWrapper extends Service { Map dataMap = basicsetService.getAttendanceItemsByPerson(paramMap); List> attendanceItems = (List>)dataMap.get("data"); - + /** 获取人员班次*/ + Map classesParamMap = Maps.newHashMap(); + classesParamMap.put("tableName","uf_pbjg"); + classesParamMap.put("startDate",beforeThreeDayDate); + classesParamMap.put("endDate",beforeOneDayDate); + classesParamMap.put("pblx","0"); + classesParamMap.put("pbdx",userId); + classesParamMap.put("current","1"); + classesParamMap.put("pageSize",1); + classesParamMap.put("recurrence",1); + Map>> schedulingResultsMap = utilService.getSchedulingInFormation(paramMap); + + /**获得人员加班计划*/ + String sql = "select jbry,ksrq,kssj,jsrq,jssj,jbsc, from uf_jcl_kq_jbjh_dt1 where jbry=? and ksrq>=? and ksrq<=? and jbcx=1"; + Map>> overtimePlanMap = DbTools.getSqlToList(sql,userId,beforeOneDayDate,beforeThreeDayDate).stream().collect(Collectors.groupingBy(e -> Util.null2String(e.get("ksrq")))); + Map forgetClockInParam = Maps.newHashMap(); + forgetClockInParam.put("classInfo",schedulingResultsMap.get(beforeOneDayDate)); + forgetClockInParam.put("userId",schedulingResultsMap.get(beforeOneDayDate)); + + + /**计算获取前一天和第二天打卡数据*/ if (collect.size() == 0){ - //没有打卡数据,前一天记为全天旷工 - + //没有打卡数据,漏打卡 + forgetClockInParam.put("date",beforeOneDayDate); + forgetClockInService.ForgetClockInAllDays(forgetClockInParam); }else if (collect.size() == 1){ //有1天有打卡数据 if (collect.get(beforeOneDayDate) != null){ - //打卡数据为前一天 + //前一天有打卡记录 }else { - //否则前一天记为全天旷工 + //否则前一天记为漏打卡 } - }else if (collect.size() == 2){ //有2天有打卡数据 - //计算前一天考勤 - if (collect.get(beforeOneDayDate) != null){ - //打卡数据为前一天 + if (collect.get(beforeOneDayDate) == null){ + //前一天漏打卡 - }else { - //否则前一天记为全天旷工 - + }else if(collect.get(beforeOneDayDate) != null && collect.get(beforeTwoDayDate) == null){ + //前一天有打卡记录,第二天没有打卡记录 - } - //计算第二天数据 - if (collect.get(beforeTwoDayDate) != null && collect.get(beforeOneDayDate) != null){ + }else if (collect.get(beforeTwoDayDate) != null && collect.get(beforeOneDayDate) != null){ + //前一天有打卡,第二天有打卡记录 } diff --git a/src/com/engine/attendance/component/persongroup/cmd/GetDatatableRecurrenceCmd.java b/src/com/engine/attendance/component/persongroup/cmd/GetDatatableRecurrenceCmd.java index 644a552..b10ab86 100644 --- a/src/com/engine/attendance/component/persongroup/cmd/GetDatatableRecurrenceCmd.java +++ b/src/com/engine/attendance/component/persongroup/cmd/GetDatatableRecurrenceCmd.java @@ -69,12 +69,13 @@ public class GetDatatableRecurrenceCmd extends AbstractCommonCommand> personGroupData = DbTools.getSqlToList(queryryfz); Set personnelGroupIds = PersongroupCommonUtil.getPersonnelGroupingByPerson(personGroupData,pbdx,null,null); - querySqlbyPbdx = sql +conditions + " and pbdxryfz in (?)"; + querySqlbyPbdx = sql +conditions + " and pbdxryfz in ("; log.info("递归查询人员-人员分组节点,sql:{},personnelGroupIds:{}",querySqlbyPbdx,personnelGroupIds); if(personnelGroupIds.size() > 0){ param.clear(); param.addAll(Dateparam); - param.add(String.join(",",personnelGroupIds)); + querySqlbyPbdx = querySqlbyPbdx + String.join(",",personnelGroupIds)+")"; + log.info("递归查询人员-人员分组节点,sql:{}",querySqlbyPbdx); dataList = DbTools.getSqlToList(querySqlbyPbdx,param.toArray()); } if (dataList.size() == 0){ @@ -85,11 +86,12 @@ public class GetDatatableRecurrenceCmd extends AbstractCommonCommand params = Maps.newHashMap(); +// List> attendanceItems = new ArrayList<>(); +// Map map = new HashMap<>(); +// map.put("xmlx","1"); +// map.put("zysd","1"); +// map.put("zxhsl","60"); +// map.put("zdhsl","180"); +// Map map2 = new HashMap<>(); +// map2.put("xmlx","2"); +// map2.put("zysd","1"); +// map2.put("zxhsl","60"); +// map2.put("zdhsl","180"); +// Map map3 = new HashMap<>(); +// map3.put("xmlx","2"); +// map3.put("zysd","1"); +// map3.put("zxhsl","0"); +// map3.put("zdhsl","60"); +// attendanceItems.add(map); +// attendanceItems.add(map2); +// attendanceItems.add(map3); +// params.put("attendanceItems",attendanceItems); +// params.put("workfor","1"); +// params.put("time","50"); +// new AbsenteeismCmd(params).execute(null); + + + System.out.println(DateUtil.AfterDay("2023-10-27",1)); // List> personGroupOrganizationList = Lists.newArrayList(); // personGroupOrganizationList.add(new HashMap(){{put("dx","4-夜班人员");}}); // personGroupOrganizationList.add(new HashMap(){{put("dx","8-测试条件录入");}});