zm_dev
liuliang 2 years ago
parent 860a825441
commit adf1d6ce86

@ -1,8 +1,10 @@
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:28:21,221 [main] [com.engine.attendance.attendanceanalysis.cmd.item.AbsenteeismItemCmd] [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:29:46,847 [main] [com.engine.attendance.attendanceanalysis.cmd.item.AbsenteeismItemCmd] [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:14,365 [main] [com.engine.attendance.attendanceanalysis.cmd.item.AbsenteeismItemCmd] [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-24 00:33:33,275 [main] [com.engine.attendance.attendanceanalysis.cmd.item.AbsenteeismItemCmd] [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:08:22,114 [main] [com.engine.attendance.attendanceanalysis.cmd.item.AbsenteeismItemCmd] [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:09:45,677 [main] [com.engine.attendance.attendanceanalysis.cmd.item.AbsenteeismItemCmd] [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-26 17:10:16,663 [main] [com.engine.attendance.attendanceanalysis.cmd.item.AbsenteeismItemCmd] [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}]] 2023-10-27 16:45:00,661 [main] [com.engine.attendance.attendanceanalysis.cmd.item.AbsenteeismItemCmd] [INFO] - absenteeismCmd attendanceItems : [[{zdhsl=60, xmlx=2, zysd=1, zxhsl=0}]]
2023-11-12 21:59:10,226 [Timer-0] [A2] [INFO] - rootPath == null
2023-11-12 21:59:10,226 [Timer-0] [A2] [INFO] - filePath == nullWEB-INF\prop\isSyncLog4j.properties

@ -1,37 +0,0 @@
package com.engine.attendance.attendanceanalysis.cmd;
import com.engine.common.biz.AbstractCommonCommand;
import com.engine.common.entity.BizLogContext;
import com.engine.core.interceptor.CommandContext;
import weaver.general.Util;
import java.util.List;
import java.util.Map;
public class BeLateCmd extends AbstractCommonCommand<Map<String,Object>> {
@Override
public BizLogContext getLogContext() {
return null;
}
public BeLateCmd(Map<String,Object> params){
this.params=params;
}
@Override
public Map<String, Object> execute(CommandContext commandContext) {
//分析人员
String userId = Util.null2String(params.get("userId"));
//分析日期
String analysisDate = Util.null2String(params.get("analysisDate"));
//打卡数据
List<Map<String, Object>> clockInTimeList = (List<Map<String, Object>>)params.get("analysisDate");
//班次
List<Map<String, Object>> scheduleResult = (List<Map<String, Object>>)params.get("scheduleResult");
//考勤项目
List<Map<String, Object>> attendanceItems = (List<Map<String, Object>>)params.get("attendanceItems");
return null;
}
}

@ -7,6 +7,7 @@ import com.engine.common.util.DateUtil;
import com.engine.core.interceptor.CommandContext; import com.engine.core.interceptor.CommandContext;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import lombok.extern.slf4j.Slf4j;
import weaver.general.Util; import weaver.general.Util;
import java.time.ZoneOffset; import java.time.ZoneOffset;
@ -15,8 +16,9 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
public class GetClockInTimeCmd extends AbstractCommonCommand<Map<String,Object>> { @Slf4j
public GetClockInTimeCmd(Map<String, Object> params){ public class GetClockInTimeItemCmd extends AbstractCommonCommand<Map<String,Object>> {
public GetClockInTimeItemCmd(Map<String, Object> params){
this.params=params; this.params=params;
} }
@Override @Override
@ -84,6 +86,8 @@ public class GetClockInTimeCmd extends AbstractCommonCommand<Map<String,Object>>
} }
resultList = resultList.stream().sorted(Comparator.comparing(e->DateUtil.getTime(e.get("signdate")+" "+e.get("signtime")).toInstant(ZoneOffset.of("+8")).toEpochMilli())).collect(Collectors.toList()); resultList = resultList.stream().sorted(Comparator.comparing(e->DateUtil.getTime(e.get("signdate")+" "+e.get("signtime")).toInstant(ZoneOffset.of("+8")).toEpochMilli())).collect(Collectors.toList());
log.info("needGetDate : [{}],resultList : [{}]",needGetDate,resultList);
resultMap.put("resultList",resultList); resultMap.put("resultList",resultList);
return resultMap; return resultMap;
} }

@ -1,23 +0,0 @@
package com.engine.attendance.attendanceanalysis.cmd;
import com.engine.common.biz.AbstractCommonCommand;
import com.engine.common.entity.BizLogContext;
import com.engine.core.interceptor.CommandContext;
import java.util.Map;
public class LeaveEarlyCmd extends AbstractCommonCommand<Map<String,Object>> {
public LeaveEarlyCmd(Map<String,Object> params){
this.params=params;
}
@Override
public BizLogContext getLogContext() {
return null;
}
@Override
public Map<String, Object> execute(CommandContext commandContext) {
return null;
}
}

@ -34,6 +34,8 @@ public class UpdateAttendanceResultsCmd extends AbstractCommonCommand<Map<String
String item = Util.null2String(params.get("item")); String item = Util.null2String(params.get("item"));
//项目时长 //项目时长
String itemduration = Util.null2String(params.get("itemduration")); String itemduration = Util.null2String(params.get("itemduration"));
//是否异常
String cqzt = params.get("cqzt") == null ? "0":Util.null2String(params.get("cqzt"));
Map<String,Object> resultMap = Maps.newHashMap(); Map<String,Object> resultMap = Maps.newHashMap();
RecordSet rs = new RecordSet(); RecordSet rs = new RecordSet();
//班次信息 //班次信息

@ -0,0 +1,61 @@
package com.engine.attendance.attendanceanalysis.cmd.item;
import com.engine.attendance.enums.AttendanceItemTypeEnum;
import com.engine.attendance.enums.WorkForTimeEnum;
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;
/**
*
*/
@Slf4j
public class AbsenteeismItemCmd extends AbstractCommonCommand<Map<String,Object>> {
@Override
public BizLogContext getLogContext() {
return null;
}
public AbsenteeismItemCmd(Map<String,Object> params){
this.params=params;
}
@Override
public Map<String, Object> execute(CommandContext commandContext) {
//作用时段
String workfor = Util.null2String(params.get("workfor"));
//旷工分钟数
int time = Util.null2String(params.get("time")).equals("")? 0:Util.getIntValue(Util.null2String(params.get("time")));
Map<String, Object> resultMap = new HashMap<>();
List<Map<String,Object>> attendanceItems = (List<Map<String,Object>>)params.get("attendanceItems");
attendanceItems = attendanceItems.stream().filter(e -> {
//项目类型
String xmlx = Util.null2String(e.get("xmlx"));
//作用时段
String zysd = Util.null2String(e.get("zysd"));
//最小核算分钟数(不包含)
int zxhsl = Util.null2String(e.get("zxhsl")).equals("")?0:Util.getIntValue(Util.null2String(e.get("zxhsl")));
//最大核算分钟数(包含)
int zdhsl = Util.null2String(e.get("zdhsl")).equals("")?0:Util.getIntValue(Util.null2String(e.get("zdhsl")));
if(AttendanceItemTypeEnum.ABSENTEESIM.getKey().equals(xmlx) && (zysd.contains(workfor) || WorkForTimeEnum.ALL_TIME.getKey().equals(zysd)) && time > zxhsl && time<=zdhsl) {
return true;
}else if (AttendanceItemTypeEnum.ABSENTEESIM.getKey().equals(xmlx) && (zysd.contains(workfor) || WorkForTimeEnum.ALL_TIME.getKey().equals(zysd)) && zxhsl==0 && zdhsl==0){
return true;
}else {
return false;
}
}).collect(Collectors.toList());
log.info("absenteeismCmd attendanceItems : [{}]",attendanceItems);
resultMap.put("attendanceItems",attendanceItems);
return resultMap;
}
}

@ -0,0 +1,54 @@
package com.engine.attendance.attendanceanalysis.cmd.item;
import com.engine.attendance.enums.AttendanceItemTypeEnum;
import com.engine.attendance.enums.WorkForTimeEnum;
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;
/**
*
*/
@Slf4j
public class BeAwayItemCmd extends AbstractCommonCommand<Map<String,Object>> {
@Override
public BizLogContext getLogContext() {
return null;
}
public BeAwayItemCmd(Map<String,Object> params){
this.params=params;
}
@Override
public Map<String, Object> execute(CommandContext commandContext) {
//作用时段
String workfor = Util.null2String(params.get("workfor"));
//考勤项目
List<Map<String,Object>> attendanceItems = (List<Map<String,Object>>)params.get("attendanceItems");
Map<String, Object> resultMap = new HashMap<>();
attendanceItems = attendanceItems.stream().filter(e -> {
//项目类型
String xmlx = Util.null2String(e.get("xmlx"));
//作用时段
String zysd = Util.null2String(e.get("zysd"));
if(AttendanceItemTypeEnum.EVECTION.getKey().equals(xmlx) && (zysd.contains(workfor) || WorkForTimeEnum.ALL_TIME.getKey().equals(zysd))) {
return true;
}else {
return false;
}
}).collect(Collectors.toList());
log.info("absenteeismCmd attendanceItems : [{}]",attendanceItems);
resultMap.put("attendanceItems",attendanceItems);
return resultMap;
}
}

@ -1,6 +1,7 @@
package com.engine.attendance.attendanceanalysis.cmd; package com.engine.attendance.attendanceanalysis.cmd.item;
import com.engine.attendance.enums.AttendanceItemTypeEnum; import com.engine.attendance.enums.AttendanceItemTypeEnum;
import com.engine.attendance.enums.WorkForTimeEnum;
import com.engine.common.biz.AbstractCommonCommand; import com.engine.common.biz.AbstractCommonCommand;
import com.engine.common.entity.BizLogContext; import com.engine.common.entity.BizLogContext;
import com.engine.core.interceptor.CommandContext; import com.engine.core.interceptor.CommandContext;
@ -13,15 +14,15 @@ import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
* *
*/ */
@Slf4j @Slf4j
public class AbsenteeismCmd extends AbstractCommonCommand<Map<String,Object>> { public class BeLateItemCmd extends AbstractCommonCommand<Map<String,Object>> {
@Override @Override
public BizLogContext getLogContext() { public BizLogContext getLogContext() {
return null; return null;
} }
public AbsenteeismCmd(Map<String,Object> params){ public BeLateItemCmd(Map<String,Object> params){
this.params=params; this.params=params;
} }
@ -29,6 +30,7 @@ public class AbsenteeismCmd extends AbstractCommonCommand<Map<String,Object>> {
public Map<String, Object> execute(CommandContext commandContext) { public Map<String, Object> execute(CommandContext commandContext) {
//作用时段 //作用时段
String workfor = Util.null2String(params.get("workfor")); String workfor = Util.null2String(params.get("workfor"));
//迟到分钟数
int time = Util.null2String(params.get("time")).equals("")? 0:Util.getIntValue(Util.null2String(params.get("time"))); int time = Util.null2String(params.get("time")).equals("")? 0:Util.getIntValue(Util.null2String(params.get("time")));
Map<String, Object> resultMap = new HashMap<>(); Map<String, Object> resultMap = new HashMap<>();
@ -43,11 +45,11 @@ public class AbsenteeismCmd extends AbstractCommonCommand<Map<String,Object>> {
//最大核算分钟数(包含) //最大核算分钟数(包含)
int zdhsl = Util.null2String(e.get("zdhsl")).equals("")?0:Util.getIntValue(Util.null2String(e.get("zdhsl"))); 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) { if(AttendanceItemTypeEnum.LATE.getKey().equals(xmlx) && (zysd.contains(workfor) || WorkForTimeEnum.ALL_TIME.getKey().equals(zysd)) && time > zxhsl && time<=zdhsl) {
return true; return true;
}else {
return false;
} }
return false;
}).collect(Collectors.toList()); }).collect(Collectors.toList());
log.info("absenteeismCmd attendanceItems : [{}]",attendanceItems); log.info("absenteeismCmd attendanceItems : [{}]",attendanceItems);
resultMap.put("attendanceItems",attendanceItems); resultMap.put("attendanceItems",attendanceItems);

@ -0,0 +1,60 @@
package com.engine.attendance.attendanceanalysis.cmd.item;
import com.engine.attendance.enums.AttendanceItemTypeEnum;
import com.engine.attendance.enums.WorkForTimeEnum;
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;
/**
* 退
*/
@Slf4j
public class LeaveEarlyItemCmd extends AbstractCommonCommand<Map<String,Object>> {
public LeaveEarlyItemCmd(Map<String,Object> params){
this.params=params;
}
@Override
public BizLogContext getLogContext() {
return null;
}
@Override
public Map<String, Object> execute(CommandContext commandContext) {
//作用时段
String workfor = Util.null2String(params.get("workfor"));
//早退分钟数
int time = Util.null2String(params.get("time")).equals("")? 0:Util.getIntValue(Util.null2String(params.get("time")));
Map<String, Object> resultMap = new HashMap<>();
List<Map<String,Object>> attendanceItems = (List<Map<String,Object>>)params.get("attendanceItems");
attendanceItems = attendanceItems.stream().filter(e -> {
//项目类型
String xmlx = Util.null2String(e.get("xmlx"));
//作用时段
String zysd = Util.null2String(e.get("zysd"));
//最小核算分钟数(不包含)
int zxhsl = Util.null2String(e.get("zxhsl")).equals("")?0:Util.getIntValue(Util.null2String(e.get("zxhsl")));
//最大核算分钟数(包含)
int zdhsl = Util.null2String(e.get("zdhsl")).equals("")?0:Util.getIntValue(Util.null2String(e.get("zdhsl")));
if(AttendanceItemTypeEnum.LEAVE_EARLY.getKey().equals(xmlx) && (zysd.contains(workfor) || WorkForTimeEnum.ALL_TIME.getKey().equals(zysd)) && time > zxhsl && time<=zdhsl) {
return true;
}else {
return false;
}
}).collect(Collectors.toList());
log.info("absenteeismCmd attendanceItems : [{}]",attendanceItems);
resultMap.put("attendanceItems",attendanceItems);
return resultMap;
}
}

@ -0,0 +1,54 @@
package com.engine.attendance.attendanceanalysis.cmd.item;
import com.engine.attendance.enums.AttendanceItemTypeEnum;
import com.engine.attendance.enums.WorkForTimeEnum;
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;
/**
*
*/
@Slf4j
public class VacationItemCmd extends AbstractCommonCommand<Map<String,Object>> {
@Override
public BizLogContext getLogContext() {
return null;
}
public VacationItemCmd(Map<String,Object> params){
this.params=params;
}
@Override
public Map<String, Object> execute(CommandContext commandContext) {
//作用时段
String workfor = Util.null2String(params.get("workfor"));
//考勤项目
List<Map<String,Object>> attendanceItems = (List<Map<String,Object>>)params.get("attendanceItems");
Map<String, Object> resultMap = new HashMap<>();
attendanceItems = attendanceItems.stream().filter(e -> {
//项目类型
String xmlx = Util.null2String(e.get("xmlx"));
//作用时段
String zysd = Util.null2String(e.get("zysd"));
if(AttendanceItemTypeEnum.HOLIDAY.getKey().equals(xmlx) && (zysd.contains(workfor) || WorkForTimeEnum.ALL_TIME.getKey().equals(zysd))) {
return true;
}else {
return false;
}
}).collect(Collectors.toList());
log.info("absenteeismCmd attendanceItems : [{}]",attendanceItems);
resultMap.put("attendanceItems",attendanceItems);
return resultMap;
}
}

@ -0,0 +1,58 @@
package com.engine.attendance.attendanceanalysis.cmd.item;
import com.engine.attendance.enums.AttendanceItemTypeEnum;
import com.engine.attendance.enums.WorkForTimeEnum;
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;
/**
*
*/
@Slf4j
public class WorkOvertimeItemCmd extends AbstractCommonCommand<Map<String,Object>> {
@Override
public BizLogContext getLogContext() {
return null;
}
public WorkOvertimeItemCmd(Map<String,Object> params){
this.params=params;
}
@Override
public Map<String, Object> execute(CommandContext commandContext) {
//作用时段
String workfor = Util.null2String(params.get("workfor"));
//日期类型
String rqlx = Util.null2String(params.get("rqlx"));
//考勤项目
List<Map<String,Object>> attendanceItems = (List<Map<String,Object>>)params.get("attendanceItems");
Map<String, Object> resultMap = new HashMap<>();
attendanceItems = attendanceItems.stream().filter(e -> {
//项目类型
String xmlx = Util.null2String(e.get("xmlx"));
//作用时段
String zysd = Util.null2String(e.get("zysd"));
//项目绑定的日期类型
String bddrqlx = Util.null2String(e.get("bddrqlx"));
if(AttendanceItemTypeEnum.WORK_OVERTIME.getKey().equals(xmlx) && (zysd.contains(workfor) || WorkForTimeEnum.ALL_TIME.getKey().equals(zysd)) && bddrqlx.contains(rqlx)) {
return true;
}else {
return false;
}
}).collect(Collectors.toList());
log.info("absenteeismCmd attendanceItems : [{}]",attendanceItems);
resultMap.put("attendanceItems",attendanceItems);
return resultMap;
}
}

@ -5,7 +5,7 @@ import java.util.Map;
/** /**
* 退service * 退service
*/ */
public interface BeLateService { public interface AbnormalAttendanceService {
/** /**
* *
* @param params * @param params

@ -12,11 +12,11 @@ public interface ForgetClockInService {
* @param params * @param params
* @return * @return
*/ */
Map<String, Object> ForgetClockInAllDays(Map<String,Object> params); boolean forgetClockInAllDays(Map<String,Object> params);
/** /**
* *
* @param params * @param params
* @return * @return
*/ */
Map<String, Object> ForgetClockIn(Map<String,Object> params); boolean forgetClockIn(Map<String,Object> params);
} }

@ -0,0 +1,279 @@
package com.engine.attendance.attendanceanalysis.service.impl;
import com.engine.attendance.attendanceanalysis.cmd.item.*;
import com.engine.attendance.attendanceanalysis.cmd.UpdateAttendanceResultsCmd;
import com.engine.attendance.attendanceanalysis.service.AbnormalAttendanceService;
import com.engine.attendance.enums.AccountingUnitEnum;
import com.engine.attendance.enums.ClassSegmentTypeEnum;
import com.engine.attendance.enums.WorkForTimeEnum;
import com.engine.common.util.DateUtil;
import com.engine.common.util.Utils;
import com.engine.core.impl.Service;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import weaver.general.Util;
import java.util.List;
import java.util.Map;
public class AbnormalAttendanceServiceImpl extends Service implements AbnormalAttendanceService {
@Override
public Map<String, Object> fullDayAbsenteeism(Map<String, Object> params) {
return null;
}
@Override
public boolean beLate(Map<String, Object> params) {
//当前单条明细班次
Map<String, Object> classInfo = (Map<String, Object>)params.get("classInfo");
//当前单个打卡数据
Map<String,Object> clcokInTimeData = (Map<String, Object>)params.get("clcokInTimeData");
//考勤项目
List<Map<String,Object>> attendanceItems = (List<Map<String,Object>>)params.get("attendanceItems");
//班段类型
String bdlx = Util.null2String(classInfo.get("bdlx"));
//分析日期
String analysisDate = Util.null2String(params.get("analysisDate"));
//人员
String userId = Util.null2String(params.get("userId"));
String clockInTime = clcokInTimeData.get("signdate")+" "+clcokInTimeData.get("signtime");
String classStartTime = analysisDate +" "+Util.null2String(classInfo.get("dtkssj"));
int between = DateUtil.getBetWeenMinutes(classStartTime,clockInTime);
Map<String,Object> lateParams = Maps.newHashMap();
lateParams.put("attendanceItems",attendanceItems);
lateParams.put("time",between);
lateParams.put("rqlx",classInfo.get("rqlx"));
boolean ifBeLate = false;
if (ClassSegmentTypeEnum.WORK_TIME.getKey().equals(bdlx)){
//工作时段
lateParams.put("workfor",WorkForTimeEnum.WORK_TIME.getKey());
Map<String,Object> result = commandExecutor.execute(new BeLateItemCmd(lateParams));
List<Map<String,Object>> workTimeBeLateItems = (List<Map<String,Object>>)result.get("attendanceItems");
if (workTimeBeLateItems.size() == 0){
workTimeBeLateItems = (List<Map<String,Object>>)commandExecutor.execute(new AbsenteeismItemCmd(lateParams)).get("attendanceItems");
}
if (workTimeBeLateItems.size() > 0){
Map<String,Object> saveWorkTimeBeLateParam = Maps.newHashMap();
double hsl = Float.valueOf(Util.null2String(workTimeBeLateItems.get(0).get("hsl")));
String hsdw = Util.null2String(workTimeBeLateItems.get(0).get("hsdw"));
double itemduration = Utils.getItemduration(hsl,hsdw,between,AccountingUnitEnum.MINUTES);
saveWorkTimeBeLateParam.put("userId",userId);
saveWorkTimeBeLateParam.put("date",analysisDate);
saveWorkTimeBeLateParam.put("item",workTimeBeLateItems.get(0).get("key"));
saveWorkTimeBeLateParam.put("itemduration",itemduration);
saveWorkTimeBeLateParam.put("classInfo", Lists.newArrayList().add(classInfo));
saveWorkTimeBeLateParam.put("cqzt","1");
commandExecutor.execute(new UpdateAttendanceResultsCmd(saveWorkTimeBeLateParam));
ifBeLate=true;
}
}else if (ClassSegmentTypeEnum.EXTENDED_OVERTIME.getKey().equals(bdlx) || ClassSegmentTypeEnum.EARLY_OVERTIME.getKey().equals(bdlx)
|| ClassSegmentTypeEnum.OVERTIME_PLAN.getKey().equals(bdlx)){
//加班
if (ClassSegmentTypeEnum.EXTENDED_OVERTIME.getKey().equals(bdlx)){
lateParams.put("workfor",WorkForTimeEnum.DELAY_TO_WORK_OVERTIME.getKey());
}else if (ClassSegmentTypeEnum.EARLY_OVERTIME.getKey().equals(bdlx)){
lateParams.put("workfor",WorkForTimeEnum.EARLY_TO_WORK_OVERTIME.getKey());
}else if (ClassSegmentTypeEnum.OVERTIME_PLAN.getKey().equals(bdlx)){
lateParams.put("workfor",WorkForTimeEnum.PLAN_WORK_OVERTIME.getKey());
}
Map<String,Object> result = commandExecutor.execute(new WorkOvertimeItemCmd(lateParams));
List<Map<String,Object>> workTimeBeLateItems = (List<Map<String,Object>>)result.get("attendanceItems");
if (workTimeBeLateItems.size() > 0){
double hsl = Float.valueOf(Util.null2String(workTimeBeLateItems.get(0).get("hsl")));
String hsdw = Util.null2String(workTimeBeLateItems.get(0).get("hsdw"));
String jbwdhlfzs = Util.null2String(workTimeBeLateItems.get(0).get("jbwdhlfzs"));
if (!"".equals(jbwdhlfzs) && between > Integer.valueOf(jbwdhlfzs)){
Map<String,Object> saveWorkTimeBeLateParam = Maps.newHashMap();
double itemduration = Utils.getItemduration(hsl,hsdw,between,AccountingUnitEnum.MINUTES);
saveWorkTimeBeLateParam.put("userId",userId);
saveWorkTimeBeLateParam.put("date",analysisDate);
saveWorkTimeBeLateParam.put("item",getBeLateItems(lateParams).get(0).get("key"));
saveWorkTimeBeLateParam.put("itemduration",itemduration);
saveWorkTimeBeLateParam.put("classInfo", Lists.newArrayList().add(classInfo));
saveWorkTimeBeLateParam.put("cqzt","1");
commandExecutor.execute(new UpdateAttendanceResultsCmd(saveWorkTimeBeLateParam));
ifBeLate=true;
}
}
}else if (ClassSegmentTypeEnum.ASK_FOR_LEAVE.getKey().equals(bdlx) || ClassSegmentTypeEnum.EVECTION.getKey().equals(bdlx)){
//请假、出差
Map<String,Object> result = null;
if (ClassSegmentTypeEnum.ASK_FOR_LEAVE.getKey().equals(bdlx)){
lateParams.put("workfor",WorkForTimeEnum.WORK_TIME.getKey());
result = commandExecutor.execute(new VacationItemCmd(lateParams));
}else if (ClassSegmentTypeEnum.EVECTION.getKey().equals(bdlx)){
lateParams.put("workfor",WorkForTimeEnum.WORK_TIME.getKey());
result = commandExecutor.execute(new BeAwayItemCmd(lateParams));
}
List<Map<String,Object>> workTimeBeLateItems = (List<Map<String,Object>>)result.get("attendanceItems");
double hsl = Float.valueOf(Util.null2String(workTimeBeLateItems.get(0).get("hsl")));
String hsdw = Util.null2String(workTimeBeLateItems.get(0).get("hsdw"));
String thfghlfzs = Util.null2String(workTimeBeLateItems.get(0).get("thfghlfzs"));
if (!"".equals(thfghlfzs) && between> Integer.valueOf(thfghlfzs)){
double itemduration = Utils.getItemduration(hsl,hsdw,between,AccountingUnitEnum.MINUTES);
Map<String,Object> saveWorkTimeBeLateParam = Maps.newHashMap();
saveWorkTimeBeLateParam.put("userId",userId);
saveWorkTimeBeLateParam.put("date",analysisDate);
saveWorkTimeBeLateParam.put("item",getBeLateItems(lateParams).get(0).get("key"));
saveWorkTimeBeLateParam.put("itemduration",itemduration);
saveWorkTimeBeLateParam.put("classInfo", Lists.newArrayList().add(classInfo));
saveWorkTimeBeLateParam.put("cqzt","1");
commandExecutor.execute(new UpdateAttendanceResultsCmd(saveWorkTimeBeLateParam));
ifBeLate=true;
}
}
return ifBeLate;
}
@Override
public boolean leaveEarly(Map<String, Object> params) {
//当前单条明细班次
Map<String, Object> classInfo = (Map<String, Object>)params.get("classInfo");
//当前单个打卡数据
Map<String,Object> clcokInTimeData = (Map<String, Object>)params.get("clcokInTimeData");
//考勤项目
List<Map<String,Object>> attendanceItems = (List<Map<String,Object>>)params.get("attendanceItems");
//班段类型
String bdlx = Util.null2String(classInfo.get("bdlx"));
//分析日期
String analysisDate = Util.null2String(params.get("analysisDate"));
//人员
String userId = Util.null2String(params.get("userId"));
String clockInTime = clcokInTimeData.get("signdate")+" "+clcokInTimeData.get("signtime");
String dtkssj = analysisDate+" "+classInfo.get("dtkssj");
String dtjssj = analysisDate+" "+classInfo.get("dtjssj");
if (DateUtil.getTime(dtkssj).compareTo(DateUtil.getTime(dtjssj)) > 0){
dtjssj = DateUtil.AfterDay(analysisDate,1) +" "+classInfo.get("dtjssj");
}
String classEndTime = dtjssj;
int between = DateUtil.getBetWeenMinutes(clockInTime,classEndTime);
Map<String,Object> earlyParams = Maps.newHashMap();
earlyParams.put("attendanceItems",attendanceItems);
earlyParams.put("time",between);
earlyParams.put("rqlx",classInfo.get("rqlx"));
boolean ifLeaveEarly = false;
if (ClassSegmentTypeEnum.WORK_TIME.getKey().equals(bdlx)){
//工作时段
earlyParams.put("workfor",WorkForTimeEnum.WORK_TIME.getKey());
Map<String,Object> result = commandExecutor.execute(new LeaveEarlyItemCmd(earlyParams));
List<Map<String,Object>> workTimeBeLateItems = (List<Map<String,Object>>)result.get("attendanceItems");
if (workTimeBeLateItems.size() == 0){
workTimeBeLateItems = (List<Map<String,Object>>)commandExecutor.execute(new AbsenteeismItemCmd(earlyParams)).get("attendanceItems");
}
if (workTimeBeLateItems.size() > 0){
Map<String,Object> saveWorkTimeBeLateParam = Maps.newHashMap();
double hsl = Float.valueOf(Util.null2String(workTimeBeLateItems.get(0).get("hsl")));
String hsdw = Util.null2String(workTimeBeLateItems.get(0).get("hsdw"));
double itemduration = Utils.getItemduration(hsl,hsdw,between,AccountingUnitEnum.MINUTES);
saveWorkTimeBeLateParam.put("userId",userId);
saveWorkTimeBeLateParam.put("date",analysisDate);
saveWorkTimeBeLateParam.put("item",getBeEarlyItems(earlyParams).get(0).get("key"));
saveWorkTimeBeLateParam.put("itemduration",itemduration);
saveWorkTimeBeLateParam.put("classInfo", Lists.newArrayList().add(classInfo));
saveWorkTimeBeLateParam.put("cqzt","1");
commandExecutor.execute(new UpdateAttendanceResultsCmd(saveWorkTimeBeLateParam));
ifLeaveEarly=true;
}
}else if (ClassSegmentTypeEnum.EXTENDED_OVERTIME.getKey().equals(bdlx) || ClassSegmentTypeEnum.EARLY_OVERTIME.getKey().equals(bdlx)
|| ClassSegmentTypeEnum.OVERTIME_PLAN.getKey().equals(bdlx)){
//加班
if (ClassSegmentTypeEnum.EXTENDED_OVERTIME.getKey().equals(bdlx)){
earlyParams.put("workfor",WorkForTimeEnum.DELAY_TO_WORK_OVERTIME.getKey());
}else if (ClassSegmentTypeEnum.EARLY_OVERTIME.getKey().equals(bdlx)){
earlyParams.put("workfor",WorkForTimeEnum.EARLY_TO_WORK_OVERTIME.getKey());
}else if (ClassSegmentTypeEnum.OVERTIME_PLAN.getKey().equals(bdlx)){
earlyParams.put("workfor",WorkForTimeEnum.PLAN_WORK_OVERTIME.getKey());
}
Map<String,Object> result = commandExecutor.execute(new WorkOvertimeItemCmd(earlyParams));
List<Map<String,Object>> workTimeBeLateItems = (List<Map<String,Object>>)result.get("attendanceItems");
if (workTimeBeLateItems.size() > 0){
double hsl = Float.valueOf(Util.null2String(workTimeBeLateItems.get(0).get("hsl")));
String hsdw = Util.null2String(workTimeBeLateItems.get(0).get("hsdw"));
String jbzzhlfzs = Util.null2String(workTimeBeLateItems.get(0).get("jbzzhlfzs"));
if (!"".equals(jbzzhlfzs) && between > Integer.valueOf(jbzzhlfzs)){
Map<String,Object> saveWorkTimeBeLateParam = Maps.newHashMap();
double itemduration = Utils.getItemduration(hsl,hsdw,between,AccountingUnitEnum.MINUTES);
saveWorkTimeBeLateParam.put("userId",userId);
saveWorkTimeBeLateParam.put("date",analysisDate);
saveWorkTimeBeLateParam.put("item",getBeEarlyItems(earlyParams).get(0).get("key"));
saveWorkTimeBeLateParam.put("itemduration",itemduration);
saveWorkTimeBeLateParam.put("classInfo", Lists.newArrayList().add(classInfo));
saveWorkTimeBeLateParam.put("cqzt","1");
commandExecutor.execute(new UpdateAttendanceResultsCmd(saveWorkTimeBeLateParam));
ifLeaveEarly=true;
}
}
}else if (ClassSegmentTypeEnum.ASK_FOR_LEAVE.getKey().equals(bdlx) || ClassSegmentTypeEnum.EVECTION.getKey().equals(bdlx)){
//请假、出差
Map<String,Object> result = null;
if (ClassSegmentTypeEnum.ASK_FOR_LEAVE.getKey().equals(bdlx)){
earlyParams.put("workfor",WorkForTimeEnum.WORK_TIME.getKey());
result = commandExecutor.execute(new VacationItemCmd(earlyParams));
}else if (ClassSegmentTypeEnum.EVECTION.getKey().equals(bdlx)){
earlyParams.put("workfor",WorkForTimeEnum.WORK_TIME.getKey());
result = commandExecutor.execute(new BeAwayItemCmd(earlyParams));
}
List<Map<String,Object>> workTimeBeLateItems = (List<Map<String,Object>>)result.get("attendanceItems");
double hsl = Float.valueOf(Util.null2String(workTimeBeLateItems.get(0).get("hsl")));
String hsdw = Util.null2String(workTimeBeLateItems.get(0).get("hsdw"));
String tqlghlfzs = Util.null2String(workTimeBeLateItems.get(0).get("tqlghlfzs"));
if (!"".equals(tqlghlfzs) && between> Integer.valueOf(tqlghlfzs)){
double itemduration = Utils.getItemduration(hsl,hsdw,between,AccountingUnitEnum.MINUTES);
Map<String,Object> saveWorkTimeBeLateParam = Maps.newHashMap();
saveWorkTimeBeLateParam.put("userId",userId);
saveWorkTimeBeLateParam.put("date",analysisDate);
saveWorkTimeBeLateParam.put("item",getBeEarlyItems(earlyParams).get(0).get("key"));
saveWorkTimeBeLateParam.put("itemduration",itemduration);
saveWorkTimeBeLateParam.put("classInfo", Lists.newArrayList().add(classInfo));
saveWorkTimeBeLateParam.put("cqzt","1");
commandExecutor.execute(new UpdateAttendanceResultsCmd(saveWorkTimeBeLateParam));
ifLeaveEarly=true;
}
}
return ifLeaveEarly;
}
/**
*
* @return
*/
public List<Map<String,Object>> getBeLateItems(Map<String,Object> lateParams){
Map<String,Object> result = commandExecutor.execute(new BeLateItemCmd(lateParams));
List<Map<String,Object>> workTimeBeLateItems = (List<Map<String,Object>>)result.get("attendanceItems");
if (workTimeBeLateItems.size() == 0){
workTimeBeLateItems = (List<Map<String,Object>>)commandExecutor.execute(new AbsenteeismItemCmd(lateParams)).get("attendanceItems");
}
return workTimeBeLateItems;
}
/**
* 退
* @return
*/
public List<Map<String,Object>> getBeEarlyItems(Map<String,Object> earlyParams){
Map<String,Object> result = commandExecutor.execute(new LeaveEarlyItemCmd(earlyParams));
List<Map<String,Object>> workTimeBeLateItems = (List<Map<String,Object>>)result.get("attendanceItems");
if (workTimeBeLateItems.size() == 0){
workTimeBeLateItems = (List<Map<String,Object>>)commandExecutor.execute(new AbsenteeismItemCmd(earlyParams)).get("attendanceItems");
}
return workTimeBeLateItems;
}
}

@ -1,27 +0,0 @@
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<String, Object> fullDayAbsenteeism(Map<String, Object> params) {
return null;
}
@Override
public boolean beLate(Map<String, Object> params) {
return false;
}
@Override
public boolean leaveEarly(Map<String, Object> params) {
return false;
}
}

@ -4,21 +4,34 @@ import com.engine.attendance.attendanceanalysis.cmd.UpdateAttendanceResultsCmd;
import com.engine.attendance.attendanceanalysis.service.ForgetClockInService; import com.engine.attendance.attendanceanalysis.service.ForgetClockInService;
import com.engine.attendance.enums.SystemItemEnum; import com.engine.attendance.enums.SystemItemEnum;
import com.engine.core.impl.Service; import com.engine.core.impl.Service;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import java.util.Map; import java.util.Map;
public class ForgetClockInServiceImpl extends Service implements ForgetClockInService { public class ForgetClockInServiceImpl extends Service implements ForgetClockInService {
@Override @Override
public Map<String, Object> ForgetClockInAllDays(Map<String, Object> params) { public boolean forgetClockInAllDays(Map<String, Object> params) {
params.put("item", SystemItemEnum.MISSING_CLOCK_IN); Map<String,Object> forgetParam = Maps.newHashMap();
params.put("itemduration", 1); forgetParam.put("item", SystemItemEnum.MISSING_CLOCK_IN);
Map<String,Object> result = commandExecutor.execute(new UpdateAttendanceResultsCmd(params)); forgetParam.put("itemduration", 1);
return result; forgetParam.put("classInfo", params.get("classInfo"));
forgetParam.put("userId",params.get("userId"));
forgetParam.put("date",params.get("analysisDate"));
Map<String,Object> result = commandExecutor.execute(new UpdateAttendanceResultsCmd(forgetParam));
return true;
} }
@Override @Override
public Map<String, Object> ForgetClockIn(Map<String, Object> params) { public boolean forgetClockIn(Map<String, Object> params) {
return null; Map<String,Object> forgetParam = Maps.newHashMap();
forgetParam.put("item", SystemItemEnum.MISSING_CLOCK_IN);
forgetParam.put("itemduration", 1);
forgetParam.put("classInfo", Lists.newArrayList().add(params.get("classInfo")));
forgetParam.put("userId",params.get("userId"));
forgetParam.put("date",params.get("analysisDate"));
Map<String,Object> result = commandExecutor.execute(new UpdateAttendanceResultsCmd(forgetParam));
return true;
} }
} }

@ -1,6 +1,6 @@
package com.engine.attendance.attendanceanalysis.service.impl; package com.engine.attendance.attendanceanalysis.service.impl;
import com.engine.attendance.attendanceanalysis.cmd.GetClockInTimeCmd; import com.engine.attendance.attendanceanalysis.cmd.GetClockInTimeItemCmd;
import com.engine.attendance.attendanceanalysis.service.UtilService; import com.engine.attendance.attendanceanalysis.service.UtilService;
import com.engine.attendance.attendanceplan.service.AttendancePlanService; import com.engine.attendance.attendanceplan.service.AttendancePlanService;
import com.engine.attendance.attendanceplan.service.impl.AttendancePlanServiceImpl; import com.engine.attendance.attendanceplan.service.impl.AttendancePlanServiceImpl;
@ -35,7 +35,7 @@ public class UtilServiceImpl extends Service implements UtilService {
Map<String,Object> schedulingResultsMap = schedulingResultsService.queryDataTable(params); Map<String,Object> schedulingResultsMap = schedulingResultsService.queryDataTable(params);
List<Map<String,Object>> schedulingResultsList = (List<Map<String,Object>>)schedulingResultsMap.get("data"); List<Map<String,Object>> schedulingResultsList = (List<Map<String,Object>>)schedulingResultsMap.get("data");
schedulingResultsList = schedulingResultsList.stream().filter(e -> !"1".equals(e.get("sfxx"))).collect(Collectors.toList()); schedulingResultsList = schedulingResultsList.stream().filter(e -> !"1".equals(e.get("sfxx"))).collect(Collectors.toList());
Map<String,String> schedulingMap = schedulingResultsList.stream().collect(Collectors.toMap(e-> Util.null2String(e.get("bcxx")), e->Util.null2String(e.get("bcrq")))); Map<String,String> schedulingMap = schedulingResultsList.stream().collect(Collectors.toMap(e-> Util.null2String(e.get("bcxx")), e->Util.null2String(e.get("bcrq"))+"-"+Util.null2String(e.get("rqlx"))));
String sql = "select a.id bcxx,a.edsc,a.bcsdxx,a.sfdx,a.sfkt,b.bdlx,b.zddxfz,b.dxhs,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 sql = "select a.id bcxx,a.edsc,a.bcsdxx,a.sfdx,a.sfkt,b.bdlx,b.zddxfz,b.dxhs,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 = ""; String bcxxIds = "";
for (Map.Entry<String,String> entry :schedulingMap.entrySet()){ for (Map.Entry<String,String> entry :schedulingMap.entrySet()){
@ -47,7 +47,13 @@ public class UtilServiceImpl extends Service implements UtilService {
Map<String,List<Map<String,Object>>> dataMap = dataList.stream().collect(Collectors.groupingBy(e->Util.null2String(e.get("bcxx")))); Map<String,List<Map<String,Object>>> dataMap = dataList.stream().collect(Collectors.groupingBy(e->Util.null2String(e.get("bcxx"))));
Map<String,List<Map<String,Object>>> resultMap = Maps.newHashMap(); Map<String,List<Map<String,Object>>> resultMap = Maps.newHashMap();
dataMap.entrySet().forEach(e -> { dataMap.entrySet().forEach(e -> {
resultMap.put(schedulingMap.get(e.getKey()),e.getValue()); String bcrq = schedulingMap.get(e.getKey()).split("-")[0];
String rqlx = schedulingMap.get(e.getKey()).split("-")[0];
List<Map<String,Object>> bcxxs = e.getValue();
for (Map<String,Object> map:bcxxs){
map.put("rqlx",rqlx);
}
resultMap.put(bcrq,bcxxs);
}); });
/** 加班计划*/ /** 加班计划*/
@ -95,7 +101,7 @@ public class UtilServiceImpl extends Service implements UtilService {
//日期类型 //日期类型
String dateType = dateMap.get(e.getKey()); String dateType = dateMap.get(e.getKey());
if (xmlx.equals(AttendanceItemTypeEnum.WORK_OVERTIME.getKey()) && (zysd.equals(WorkForTimeEnum.PLAN_WORK_OVERTIME.getKey()) || zysd.equals(WorkForTimeEnum.ALL_TIME.getKey())) && bddrqlx.contains(dateType)){ if (xmlx.equals(AttendanceItemTypeEnum.WORK_OVERTIME.getKey()) && (zysd.contains(WorkForTimeEnum.PLAN_WORK_OVERTIME.getKey()) || zysd.equals(WorkForTimeEnum.ALL_TIME.getKey())) && bddrqlx.contains(dateType)){
return true; return true;
} }
return false; return false;
@ -147,7 +153,7 @@ public class UtilServiceImpl extends Service implements UtilService {
@Override @Override
public List<Map<String, Object>> getClockInTime(Map<String, Object> params) { public List<Map<String, Object>> getClockInTime(Map<String, Object> params) {
Map<String,Object> result = commandExecutor.execute(new GetClockInTimeCmd(params)); Map<String,Object> result = commandExecutor.execute(new GetClockInTimeItemCmd(params));
List<Map<String, Object>> resultList = (List<Map<String, Object>>)result.get("resultList"); List<Map<String, Object>> resultList = (List<Map<String, Object>>)result.get("resultList");
return resultList; return resultList;
} }

@ -1,16 +1,17 @@
package com.engine.attendance.attendanceanalysis.wrapper; package com.engine.attendance.attendanceanalysis.wrapper;
import com.engine.attendance.attendanceanalysis.cmd.UpdateAttendanceResultsCmd; import com.engine.attendance.attendanceanalysis.cmd.UpdateAttendanceResultsCmd;
import com.engine.attendance.attendanceanalysis.service.BeLateService; import com.engine.attendance.attendanceanalysis.service.AbnormalAttendanceService;
import com.engine.attendance.attendanceanalysis.service.ForgetClockInService; import com.engine.attendance.attendanceanalysis.service.ForgetClockInService;
import com.engine.attendance.attendanceanalysis.service.UtilService; import com.engine.attendance.attendanceanalysis.service.UtilService;
import com.engine.attendance.attendanceanalysis.service.impl.BeLateServiceImpl; import com.engine.attendance.attendanceanalysis.service.impl.AbnormalAttendanceServiceImpl;
import com.engine.attendance.attendanceanalysis.service.impl.ForgetClockInServiceImpl; import com.engine.attendance.attendanceanalysis.service.impl.ForgetClockInServiceImpl;
import com.engine.attendance.attendanceanalysis.service.impl.UtilServiceImpl; import com.engine.attendance.attendanceanalysis.service.impl.UtilServiceImpl;
import com.engine.attendance.attendanceplan.service.AttendancePlanService; import com.engine.attendance.attendanceplan.service.AttendancePlanService;
import com.engine.attendance.attendanceplan.service.impl.AttendancePlanServiceImpl; import com.engine.attendance.attendanceplan.service.impl.AttendancePlanServiceImpl;
import com.engine.attendance.enums.CheckBoxEnum; import com.engine.attendance.enums.CheckBoxEnum;
import com.engine.attendance.enums.ClassSegmentTypeEnum; import com.engine.attendance.enums.ClassSegmentTypeEnum;
import com.engine.attendance.enums.ClockPointEnum;
import com.engine.attendance.enums.PeriodOfTime; import com.engine.attendance.enums.PeriodOfTime;
import com.engine.common.util.DateUtil; import com.engine.common.util.DateUtil;
import com.engine.common.util.DbTools; import com.engine.common.util.DbTools;
@ -19,7 +20,7 @@ import com.engine.common.util.Utils;
import com.engine.core.impl.Service; import com.engine.core.impl.Service;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import com.icbc.api.internal.apache.http.M; import lombok.extern.slf4j.Slf4j;
import weaver.general.Util; import weaver.general.Util;
import java.time.ZoneOffset; import java.time.ZoneOffset;
@ -32,12 +33,13 @@ import java.util.stream.Collectors;
/** /**
* *
*/ */
@Slf4j
public class AttendanceAnalysisWrapper extends Service { public class AttendanceAnalysisWrapper extends Service {
private AttendancePlanService basicsetService = ServiceUtil.getService(AttendancePlanServiceImpl.class); private AttendancePlanService basicsetService = ServiceUtil.getService(AttendancePlanServiceImpl.class);
private BeLateService beLateService = ServiceUtil.getService(BeLateServiceImpl.class);
private UtilService utilService = ServiceUtil.getService(UtilServiceImpl.class); private UtilService utilService = ServiceUtil.getService(UtilServiceImpl.class);
private ForgetClockInService forgetClockInService = ServiceUtil.getService(ForgetClockInServiceImpl.class); private ForgetClockInService forgetClockInService = ServiceUtil.getService(ForgetClockInServiceImpl.class);
private UpdateAttendanceResultWrapper updateAttendanceResultWrapper = ServiceUtil.getService(UpdateAttendanceResultWrapper.class);
public void attendanceAnalysis(String userId, List<Map<String,Object>> dataList){ public void attendanceAnalysis(String userId, List<Map<String,Object>> dataList){
String beforeThreeDayDate = DateUtil.getCurrentDateMinusDay(3); String beforeThreeDayDate = DateUtil.getCurrentDateMinusDay(3);
@ -82,54 +84,18 @@ public class AttendanceAnalysisWrapper extends Service {
getClockTimeParam.put("schedulingResultCollect",schedulingResultsMap); getClockTimeParam.put("schedulingResultCollect",schedulingResultsMap);
//前一天打卡数据 //前一天打卡数据
List<Map<String, Object>> beforeOneDayClockInTimeList = utilService.getClockInTime(getClockTimeParam); List<Map<String, Object>> beforeOneDayClockInTimeList = utilService.getClockInTime(getClockTimeParam);
log.info("beforeOneDayClockInTimeList : [{}]",beforeOneDayClockInTimeList);
//分析前一天考勤
analysis(userId,beforeOneDayDate,beforeOneDayClockInTimeList,schedulingResultsMap.get(beforeOneDayDate),attendanceItems);
getClockTimeParam.put("date",beforeTwoDayDate); getClockTimeParam.put("date",beforeTwoDayDate);
//前第二天打卡数据 //前第二天打卡数据
List<Map<String, Object>> beforeTwoDayClockInTimeList = utilService.getClockInTime(getClockTimeParam); List<Map<String, Object>> beforeTwoDayClockInTimeList = utilService.getClockInTime(getClockTimeParam);
log.info("beforeTwoDayClockInTimeList : [{}]",beforeTwoDayClockInTimeList);
//分析前第二天考勤
analysis(userId,beforeTwoDayDate,beforeOneDayClockInTimeList,schedulingResultsMap.get(beforeTwoDayDate),attendanceItems);
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){
//若为正常工作日,前一天漏打卡
}else if(collect.get(beforeOneDayDate) != null && collect.get(beforeTwoDayDate) == null){
//前一天有打卡记录,第二天没有打卡记录
}else if (collect.get(beforeTwoDayDate) != null && collect.get(beforeOneDayDate) != null){
//前一天有打卡,第二天有打卡记录
}
}else if (collect.size() == 3){
//连续3天打卡
}
} }
/** /**
@ -150,18 +116,25 @@ public class AttendanceAnalysisWrapper extends Service {
if(clockInTimeList == null || clockInTimeList.size() == 0){ if(clockInTimeList == null || clockInTimeList.size() == 0){
if (needClockInSchedule.size() > 0){ if (needClockInSchedule.size() > 0){
//全天漏打卡 //全天漏打卡
Map<String,Object> recordAbnormalParam = Maps.newHashMap();
recordAbnormalParam.put("analysisDate",analysisDate);
recordAbnormalParam.put("userId",userId);
recordAbnormalParam.put("classInfo",clockInTimeList);
forgetClockInService.forgetClockInAllDays(recordAbnormalParam);
return; return;
}else {
} }
} }
//请假记录 //请假记录
String sql = "select a.qjry,a.jqlx,a.cxjqj,b.ksrq,b.kssj,b.jsrq,b.jssj,b.qjsc,b.qtj,b.btj from uf_jcl_kq_qjjl a left join uf_jcl_kq_qjjl_dt1 b on a.id = b.mainid where a.qjry=? and b.ksrq=? and (b.cxqj=0 or b.cxqj is null)"; String sql = "select a.qjry,a.jqlx,a.cxjqj,b.ksrq,b.kssj,b.jsrq,b.jssj,b.qjsc,b.qtj,b.btj from uf_jcl_kq_qjjl a left join uf_jcl_kq_qjjl_dt1 b on a.id = b.mainid where a.qjry=? and b.ksrq=? and (b.cxqj=0 or b.cxqj is null)";
List<Map<String,Object>> askForLeaveList = DbTools.getSqlToList(sql,userId,analysisDate); List<Map<String,Object>> askForLeaveList = DbTools.getSqlToList(sql,userId,analysisDate);
//考勤项目
Map<String,Map<String,Object>> askForLeaveItems = Maps.newHashMap();
//出差记录 //出差记录
sql = "select a.ccr,a.cclx,a.ccsd,b.ksrq,b.jsrq,b.kssj,b.jssj,b.ccsc,b.qtcc,b.btcc,b.cxcc from uf_jcl_kq_ccjl a left join uf_jcl_kq_ccjl_dt1 b on a.id = b.mainid where a.ccr=? and a.ksrq=? and (b.cxcc=0 or b.cxcc is null)"; sql = "select a.ccr,a.cclx,a.ccsd,b.ksrq,b.jsrq,b.kssj,b.jssj,b.ccsc,b.qtcc,b.btcc,b.cxcc from uf_jcl_kq_ccjl a left join uf_jcl_kq_ccjl_dt1 b on a.id = b.mainid where a.ccr=? and a.ksrq=? and (b.cxcc=0 or b.cxcc is null)";
List<Map<String,Object>> evectionList = DbTools.getSqlToList(sql,userId,analysisDate); List<Map<String,Object>> evectionList = DbTools.getSqlToList(sql,userId,analysisDate);
//出差项目
Map<String,Map<String,Object>> evectionItems = Maps.newHashMap();
Map<String,Object> updateAttendacneParams = Maps.newHashMap(); Map<String,Object> updateAttendacneParams = Maps.newHashMap();
updateAttendacneParams.put("userId",userId); updateAttendacneParams.put("userId",userId);
@ -178,11 +151,12 @@ public class AttendanceAnalysisWrapper extends Service {
return; return;
} }
Map<String,Object> askForLeaveItem = DbTools.getSqlToMap(sql,askForLeaveData.get("jqlx")); Map<String,Object> askForLeaveItem = DbTools.getSqlToMap(sql,askForLeaveData.get("jqlx"));
askForLeaveItems.put(askForLeaveData.get("jqlx").toString(),askForLeaveItem);
Map<String,Object> askForLeaveMap = new HashMap(){{ Map<String,Object> askForLeaveMap = new HashMap(){{
put("bcxx",scheduleResult.get(0).get("bcxx")); put("bcxx",scheduleResult.get(0).get("bcxx"));
put("bcsdxx",scheduleResult.get(0).get("bcsdxx")); put("bcsdxx",scheduleResult.get(0).get("bcsdxx"));
put("edsc",scheduleResult.get(0).get("edsc")); put("edsc",scheduleResult.get(0).get("edsc"));
put("bdlx", ClassSegmentTypeEnum.ASK_FOR_LEAVE.getKey()); put("bdlx", ClassSegmentTypeEnum.EVECTION.getKey());
put("dtkssj",askForLeaveData.get("kssj")); put("dtkssj",askForLeaveData.get("kssj"));
put("dtjssj",askForLeaveData.get("jssj")); put("dtjssj",askForLeaveData.get("jssj"));
put("ksdk",askForLeaveItem.get("fgsbxydk")); put("ksdk",askForLeaveItem.get("fgsbxydk"));
@ -194,8 +168,8 @@ public class AttendanceAnalysisWrapper extends Service {
put("dxhs",askForLeaveItem.get("thfghlfzs")); put("dxhs",askForLeaveItem.get("thfghlfzs"));
}}; }};
scheduleResult.add(askForLeaveMap); //scheduleResult.add(askForLeaveMap);
if (CheckBoxEnum.CHECKED.getKey().equals(askForLeaveItem.get("lgsbxydk")) || CheckBoxEnum.CHECKED.getKey().equals(askForLeaveItem.get("fgsbxydk"))){ if (!"".equals(Util.null2String(askForLeaveData.get("kssj"))) && !"".equals(Util.null2String(askForLeaveData.get("jssj"))) &&(CheckBoxEnum.CHECKED.getKey().equals(askForLeaveItem.get("lgsbxydk")) || CheckBoxEnum.CHECKED.getKey().equals(askForLeaveItem.get("fgsbxydk")))){
needClockInSchedule.add(askForLeaveMap); needClockInSchedule.add(askForLeaveMap);
} }
} }
@ -208,6 +182,7 @@ public class AttendanceAnalysisWrapper extends Service {
return; return;
} }
Map<String,Object> evectionItem = DbTools.getSqlToMap(sql,evectionData.get("cclx")); Map<String,Object> evectionItem = DbTools.getSqlToMap(sql,evectionData.get("cclx"));
evectionItems.put(evectionData.get("cclx").toString(),evectionItem);
Map<String,Object> evectionMap = new HashMap(){{ Map<String,Object> evectionMap = new HashMap(){{
put("bcxx",scheduleResult.get(0).get("bcxx")); put("bcxx",scheduleResult.get(0).get("bcxx"));
put("bcsdxx",scheduleResult.get(0).get("bcsdxx")); put("bcsdxx",scheduleResult.get(0).get("bcsdxx"));
@ -223,8 +198,8 @@ public class AttendanceAnalysisWrapper extends Service {
put("zddxfz",evectionItem.get("tqlghlfzs")); put("zddxfz",evectionItem.get("tqlghlfzs"));
put("dxhs",evectionItem.get("thfghlfzs")); put("dxhs",evectionItem.get("thfghlfzs"));
}}; }};
scheduleResult.add(evectionMap); //scheduleResult.add(evectionMap);
if (CheckBoxEnum.CHECKED.getKey().equals(evectionItem.get("lgsbxydk")) || CheckBoxEnum.CHECKED.getKey().equals(evectionItem.get("fgsbxydk"))){ if (!"".equals(Util.null2String(evectionData.get("kssj"))) && !"".equals(Util.null2String(evectionData.get("jssj"))) && (CheckBoxEnum.CHECKED.getKey().equals(evectionItem.get("lgsbxydk")) || CheckBoxEnum.CHECKED.getKey().equals(evectionItem.get("fgsbxydk")))){
needClockInSchedule.add(evectionMap); needClockInSchedule.add(evectionMap);
} }
} }
@ -237,28 +212,31 @@ public class AttendanceAnalysisWrapper extends Service {
if (CheckBoxEnum.CHECKED.getKey().equals(needClockIn.get("ksdk"))){ if (CheckBoxEnum.CHECKED.getKey().equals(needClockIn.get("ksdk"))){
String dtkssj = analysisDate+" "+needClockIn.get("dtkssj"); String dtkssj = analysisDate+" "+needClockIn.get("dtkssj");
String dtjssj = analysisDate+" "+needClockIn.get("dtjssj"); String dtjssj = analysisDate+" "+needClockIn.get("dtjssj");
if (DateUtil.getTime(dtkssj).compareTo(DateUtil.getTime(dtjssj)) > 0){
dtjssj = DateUtil.AfterDay(analysisDate,1) +" "+needClockIn.get("dtjssj");
}
int tqdkfzs = Integer.valueOf(Util.null2String(needClockIn.get("tqdkfzs"))); int tqdkfzs = Integer.valueOf(Util.null2String(needClockIn.get("tqdkfzs")));
Map<String,Map<String,Object>> ksdkNearestClcokInTime = Utils.getNearestClcokInTimeCmd(dtkssj,clockInTimeList); Map<String,Map<String,Object>> ksdkNearestClcokInTime = Utils.getNearestClcokInTimeCmd(dtkssj,clockInTimeList);
String timeType = "empty"; String timeType = ClockPointEnum.EMPTY.getKey();
Map<String,Map<String,Object>> clcokInTimeMap = Maps.newHashMap(); Map<String,Map<String,Object>> clcokInTimeMap = Maps.newHashMap();
if (ksdkNearestClcokInTime.get("equal") != null){ if (ksdkNearestClcokInTime.get(ClockPointEnum.EQUAL.getKey()) != null){
timeType="equal"; timeType=ClockPointEnum.EQUAL.getKey();
} }
if ("empty".equals(timeType) && ksdkNearestClcokInTime.get("before") != null){ if (ClockPointEnum.EMPTY.getKey().equals(timeType) && ksdkNearestClcokInTime.get(ClockPointEnum.BEFORE.getKey()) != null){
String clockInTime = ksdkNearestClcokInTime.get("before").get("signdate") +" "+ksdkNearestClcokInTime.get("before").get("signtime"); String clockInTime = ksdkNearestClcokInTime.get(ClockPointEnum.BEFORE.getKey()).get("signdate") +" "+ksdkNearestClcokInTime.get(ClockPointEnum.BEFORE.getKey()).get("signtime");
if (DateUtil.getTime(clockInTime).compareTo(DateUtil.getTime(DateUtil.beforeMinutes(dtkssj,tqdkfzs))) >=0){ if (DateUtil.getTime(clockInTime).compareTo(DateUtil.getTime(DateUtil.beforeMinutes(dtkssj,tqdkfzs))) >=0){
//打卡时间大于等于最早打卡时间 //打卡时间大于等于最早打卡时间
timeType="before"; timeType=ClockPointEnum.BEFORE.getKey();
} }
} }
if ("empty".equals(timeType) && ksdkNearestClcokInTime.get("after") != null){ if (ClockPointEnum.EMPTY.getKey().equals(timeType) && ksdkNearestClcokInTime.get(ClockPointEnum.AFTER.getKey()) != null){
String clockInTime = ksdkNearestClcokInTime.get("after").get("signdate") +" "+ksdkNearestClcokInTime.get("after").get("signtime"); String clockInTime = ksdkNearestClcokInTime.get(ClockPointEnum.AFTER.getKey()).get("signdate") +" "+ksdkNearestClcokInTime.get(ClockPointEnum.AFTER.getKey()).get("signtime");
if (DateUtil.getTime(clockInTime).compareTo(DateUtil.getTime(dtjssj)) < 0){ if (DateUtil.getTime(clockInTime).compareTo(DateUtil.getTime(dtjssj)) < 0){
//打卡时间小于结束时间 //打卡时间小于结束时间
timeType="after"; timeType=ClockPointEnum.AFTER.getKey();
} }
} }
clcokInTimeMap.put(dtkssj+"|start|"+timeType,ksdkNearestClcokInTime.get(timeType)); clcokInTimeMap.put(dtkssj+"|"+ClockPointEnum.START.getKey()+"|"+timeType,ksdkNearestClcokInTime.get(timeType));
clcokInTimeData.add(clcokInTimeMap); clcokInTimeData.add(clcokInTimeMap);
} }
if (CheckBoxEnum.CHECKED.getKey().equals(needClockIn.get("jsdk"))){ if (CheckBoxEnum.CHECKED.getKey().equals(needClockIn.get("jsdk"))){
@ -270,24 +248,24 @@ public class AttendanceAnalysisWrapper extends Service {
} }
Map<String,Map<String,Object>> jsdkNearestClcokInTime = Utils.getNearestClcokInTimeCmd(dtjssj,clockInTimeList); Map<String,Map<String,Object>> jsdkNearestClcokInTime = Utils.getNearestClcokInTimeCmd(dtjssj,clockInTimeList);
String timeType = "empty"; String timeType = ClockPointEnum.EMPTY.getKey();
Map<String,Map<String,Object>> clcokInTimeMap = Maps.newHashMap(); Map<String,Map<String,Object>> clcokInTimeMap = Maps.newHashMap();
if (jsdkNearestClcokInTime.get("equal") != null){ if (jsdkNearestClcokInTime.get(ClockPointEnum.EQUAL.getKey()) != null){
timeType="equal"; timeType=ClockPointEnum.EQUAL.getKey();
} }
if ("empty".equals(timeType) && jsdkNearestClcokInTime.get("after") != null){ if (ClockPointEnum.EMPTY.getKey().equals(timeType) && jsdkNearestClcokInTime.get(ClockPointEnum.AFTER.getKey()) != null){
String clockInTime = jsdkNearestClcokInTime.get("after").get("signdate") +" "+jsdkNearestClcokInTime.get("after").get("signtime"); String clockInTime = jsdkNearestClcokInTime.get(ClockPointEnum.AFTER.getKey()).get("signdate") +" "+jsdkNearestClcokInTime.get(ClockPointEnum.AFTER.getKey()).get("signtime");
if (DateUtil.getTime(clockInTime).compareTo(DateUtil.getTime(DateUtil.AfterMinutes(dtjssj,thdkfzs))) <=0){ if (DateUtil.getTime(clockInTime).compareTo(DateUtil.getTime(DateUtil.AfterMinutes(dtjssj,thdkfzs))) <=0){
timeType="after"; timeType=ClockPointEnum.AFTER.getKey();
} }
} }
if ("empty".equals(timeType) && jsdkNearestClcokInTime.get("before") != null){ if (ClockPointEnum.EMPTY.getKey().equals(timeType) && jsdkNearestClcokInTime.get(ClockPointEnum.BEFORE.getKey()) != null){
String clockInTime = jsdkNearestClcokInTime.get("before").get("signdate") +" "+jsdkNearestClcokInTime.get("before").get("signtime"); String clockInTime = jsdkNearestClcokInTime.get(ClockPointEnum.BEFORE.getKey()).get("signdate") +" "+jsdkNearestClcokInTime.get(ClockPointEnum.BEFORE.getKey()).get("signtime");
if (DateUtil.getTime(clockInTime).compareTo(DateUtil.getTime(dtkssj)) >0){ if (DateUtil.getTime(clockInTime).compareTo(DateUtil.getTime(dtkssj)) >0){
timeType="before"; timeType=ClockPointEnum.BEFORE.getKey();
} }
} }
clcokInTimeMap.put(dtjssj+"|end|"+timeType,jsdkNearestClcokInTime.get(timeType)); clcokInTimeMap.put(dtjssj+"|"+ClockPointEnum.END.getKey()+"|"+timeType,jsdkNearestClcokInTime.get(timeType));
clcokInTimeData.add(clcokInTimeMap); clcokInTimeData.add(clcokInTimeMap);
} }
} }
@ -328,6 +306,36 @@ public class AttendanceAnalysisWrapper extends Service {
} }
} }
} }
/**
* ,退
* */
Map<String,Object> recordAbnormalParam = Maps.newHashMap();
recordAbnormalParam.put("clcokInTimeList",clcokInTimeData);
recordAbnormalParam.put("attendanceItems",attendanceItems);
recordAbnormalParam.put("scheduleResult",scheduleResult);
recordAbnormalParam.put("analysisDate",analysisDate);
recordAbnormalParam.put("userId",userId);
log.info("recordAbnormalParam : [{}]",recordAbnormalParam);
boolean recordAbnormalBoolean= updateAttendanceResultWrapper.recordAbnormalClockIn(recordAbnormalParam);
/**
*
*/
boolean recordWorkOverTime= updateAttendanceResultWrapper.recordWorkOverTime(recordAbnormalParam);
/**
*
*/
recordAbnormalParam.put("askForLeaveList",askForLeaveList);
recordAbnormalParam.put("askForLeaveItems",askForLeaveItems);
boolean recordVaction= updateAttendanceResultWrapper.recordVaction(recordAbnormalParam);
/**
*
*/
recordAbnormalParam.put("evectionList",evectionList);
recordAbnormalParam.put("evectionItems",evectionItems);
boolean recordAskForLeave= updateAttendanceResultWrapper.recordAskForLeave(recordAbnormalParam);
} }

@ -1,13 +1,27 @@
package com.engine.attendance.attendanceanalysis.wrapper; package com.engine.attendance.attendanceanalysis.wrapper;
import com.engine.attendance.attendanceanalysis.service.AbnormalAttendanceService;
import com.engine.attendance.attendanceanalysis.service.ForgetClockInService;
import com.engine.attendance.attendanceanalysis.service.impl.AbnormalAttendanceServiceImpl;
import com.engine.attendance.attendanceanalysis.service.impl.ForgetClockInServiceImpl;
import com.engine.attendance.enums.ClassSegmentTypeEnum;
import com.engine.attendance.enums.ClockPointEnum;
import com.engine.common.util.ServiceUtil;
import com.engine.core.impl.Service; import com.engine.core.impl.Service;
import com.google.common.collect.Maps;
import weaver.general.Util;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors;
public class UpdateAttendanceResultWrapper extends Service { public class UpdateAttendanceResultWrapper extends Service {
private AbnormalAttendanceService beLateService = ServiceUtil.getService(AbnormalAttendanceServiceImpl.class);
private ForgetClockInService forgetClockInService = ServiceUtil.getService(ForgetClockInServiceImpl.class);
/**
*
* */
public boolean recordAbnormalClockIn(Map<String,Object> params){ public boolean recordAbnormalClockIn(Map<String,Object> params){
//卡点 //卡点
List<Map<String,Map<String,Object>>> clcokInTimeList = (List<Map<String,Map<String,Object>>>)params.get("clcokInTimeList"); List<Map<String,Map<String,Object>>> clcokInTimeList = (List<Map<String,Map<String,Object>>>)params.get("clcokInTimeList");
@ -15,13 +29,154 @@ public class UpdateAttendanceResultWrapper extends Service {
List<Map<String,Object>> attendanceItems = (List<Map<String,Object>>)params.get("attendanceItems"); List<Map<String,Object>> attendanceItems = (List<Map<String,Object>>)params.get("attendanceItems");
//排班 //排班
List<Map<String, Object>> scheduleResult = (List<Map<String,Object>>)params.get("scheduleResult"); List<Map<String, Object>> scheduleResult = (List<Map<String,Object>>)params.get("scheduleResult");
//分析日期
String analysisDate = Util.null2String(params.get("analysisDate"));
//人员
String userId = Util.null2String(params.get("userId"));
//以开始时间分割班次
Map<String,List<Map<String, Object>>> startScheduleResult = scheduleResult.stream().collect(Collectors.groupingBy(e->e.get("dtkssj").toString()));
//以结束时间分割班次
Map<String,List<Map<String, Object>>> endScheduleResult = scheduleResult.stream().collect(Collectors.groupingBy(e->e.get("dtjssj").toString()));
boolean iforgetClockIn = false;
boolean ifBeLate = false;
boolean ifLeaveEarly = false;
for (Map<String,Map<String,Object>> clcokInTimeMap :clcokInTimeList){
//卡点
String point = "";
//当天打卡数据
Map<String,Object> clcokInTimeData = null;
for (Map.Entry<String,Map<String,Object>> entry :clcokInTimeMap.entrySet()){
point = entry.getKey();
clcokInTimeData = entry.getValue();
}
//需要计算的班次打卡时间点
String pointTime = point.split("\\|")[0];
//start开始打卡时间点end结束打卡时间点
String pointType = point.split("\\|")[1];
//empty:漏卡equal:打卡时间和班次时间相等before打卡时间在班次时间之前after打卡时间在班次时间之后
String timeType = point.split("\\|")[2];
//班次
Map<String, Object> classInfo = Maps.newHashMap();
if (ClockPointEnum.START.getKey().equals(pointType)){
classInfo = startScheduleResult.get(pointTime.split(" ")[1]).get(0);
}else if (ClockPointEnum.END.getKey().equals(pointType)){
classInfo = endScheduleResult.get(pointTime.split(" ")[1]).get(0);
}
if (ClockPointEnum.EMPTY.getKey().equals(timeType) || clcokInTimeData == null){
//漏卡
Map<String,Object> beLateParams = Maps.newHashMap();
beLateParams.put("classInfo",classInfo);
beLateParams.put("clcokInTimeData",clcokInTimeData);
beLateParams.put("attendanceItems",attendanceItems);
beLateParams.put("analysisDate",analysisDate);
beLateParams.put("userId",userId);
iforgetClockIn = forgetClockInService.forgetClockIn(beLateParams);
}else if (ClockPointEnum.START.getKey().equals(pointType) && ClockPointEnum.AFTER.getKey().equals(timeType)){
//迟到
Map<String,Object> beLateParams = Maps.newHashMap();
beLateParams.put("classInfo",classInfo);
beLateParams.put("clcokInTimeData",clcokInTimeData);
beLateParams.put("attendanceItems",attendanceItems);
beLateParams.put("analysisDate",analysisDate);
beLateParams.put("userId",userId);
ifBeLate = beLateService.beLate(beLateParams);
}else if (ClockPointEnum.END.getKey().equals(pointType) && ClockPointEnum.BEFORE.getKey().equals(timeType)){
//早退
Map<String,Object> leaveEarlyParams = Maps.newHashMap();
leaveEarlyParams.put("classInfo",classInfo);
leaveEarlyParams.put("clcokInTimeData",clcokInTimeData);
leaveEarlyParams.put("attendanceItems",attendanceItems);
leaveEarlyParams.put("analysisDate",analysisDate);
leaveEarlyParams.put("userId",userId);
ifLeaveEarly = beLateService.leaveEarly(leaveEarlyParams);
}
}
if (iforgetClockIn || ifBeLate ||ifLeaveEarly){
return true;
}
return false;
}
public boolean recordWorkOverTime(Map<String,Object> params){
//卡点
List<Map<String,Map<String,Object>>> clcokInTimeList = (List<Map<String,Map<String,Object>>>)params.get("clcokInTimeList");
//考勤项目
List<Map<String,Object>> attendanceItems = (List<Map<String,Object>>)params.get("attendanceItems");
//排班
List<Map<String, Object>> scheduleResult = (List<Map<String,Object>>)params.get("scheduleResult");
//分析日期
String analysisDate = Util.null2String(params.get("analysisDate"));
//人员
String userId = Util.null2String(params.get("userId"));
scheduleResult = scheduleResult.stream().filter(e -> {
String bdlx = Util.null2String(e.get("bdlx"));
if (ClassSegmentTypeEnum.EXTENDED_OVERTIME.getKey().equals(bdlx) || ClassSegmentTypeEnum.EARLY_OVERTIME.getKey().equals(bdlx)
|| ClassSegmentTypeEnum.OVERTIME_PLAN.getKey().equals(bdlx)){
return true;
}else {
return false;
}
}).collect(Collectors.toList());
return false;
}
/**
*
* @param params
* @return
*/
public boolean recordVaction(Map<String,Object> params){
//卡点
List<Map<String,Map<String,Object>>> clcokInTimeList = (List<Map<String,Map<String,Object>>>)params.get("clcokInTimeList");
//请假项目
Map<String,Map<String,Object>> askForLeaveItems = (Map<String,Map<String,Object>>)params.get("askForLeaveItems");
//排班
List<Map<String, Object>> scheduleResult = (List<Map<String,Object>>)params.get("scheduleResult");
//分析日期
String analysisDate = Util.null2String(params.get("analysisDate"));
//人员
String userId = Util.null2String(params.get("userId"));
//请假
List<Map<String, Object>> askForLeaveList = (List<Map<String,Object>>)params.get("askForLeaveList");
for (int i=0;i<clcokInTimeList.size();i++){ for (int i=0;i<askForLeaveList.size();i++){
String kssj = askForLeaveList.get(i).get("ksrq") + " "+askForLeaveList.get(i).get("kssj");
String jssj = askForLeaveList.get(i).get("jsrq")+ " "+askForLeaveList.get(i).get("jssj");
Map<String,Object> askForLeaveItem = askForLeaveItems.get(askForLeaveList.get(i).get("jqlx"));
} }
return false;
}
/**
*
* @param params
* @return
*/
public boolean recordAskForLeave(Map<String,Object> params){
//卡点
List<Map<String,Map<String,Object>>> clcokInTimeList = (List<Map<String,Map<String,Object>>>)params.get("clcokInTimeList");
//外出项目
Map<String,Map<String,Object>> evectionItems = (Map<String,Map<String,Object>>)params.get("evectionItems");
//排班
List<Map<String, Object>> scheduleResult = (List<Map<String,Object>>)params.get("scheduleResult");
//分析日期
String analysisDate = Util.null2String(params.get("analysisDate"));
//人员
String userId = Util.null2String(params.get("userId"));
return false; return false;
} }

@ -0,0 +1,29 @@
package com.engine.attendance.enums;
import com.finance.toolkit.BaseEnum;
/**
*
*/
public enum AccountingUnitEnum implements BaseEnum {
DAY("0","天"),
HOUR("1","小时"),
MINUTES("2","分钟"),
ONCE("3","次");
AccountingUnitEnum(String key, String value){
this.key=key;
this.value=value;
}
private String key;
private String value;
@Override
public String getKey() {
return this.key;
}
@Override
public String getValue() {
return this.value;
}
}

@ -0,0 +1,32 @@
package com.engine.attendance.enums;
import com.finance.toolkit.BaseEnum;
public enum ClockPointEnum implements BaseEnum {
START("0","开始打卡时间点"),
END("1","结束打卡时间点"),
EMPTY("2","漏卡"),
EQUAL("3","打卡时间和班次时间相等"),
BEFORE("4","打卡时间在班次时间之前"),
AFTER("5","打卡时间在班次时间之后");
private String key;
private String value;
ClockPointEnum(String key, String value){
this.key=key;
this.value=value;
}
@Override
public String getKey() {
return this.key;
}
@Override
public String getValue() {
return this.value;
}
}

@ -2,6 +2,9 @@ package com.engine.attendance.enums;
import com.finance.toolkit.BaseEnum; import com.finance.toolkit.BaseEnum;
/**
*
*/
public enum WorkForTimeEnum implements BaseEnum { public enum WorkForTimeEnum implements BaseEnum {
ALL_TIME("0","所有时段"), ALL_TIME("0","所有时段"),
WORK_TIME("1","工作时段"), WORK_TIME("1","工作时段"),

@ -1,5 +1,6 @@
package com.engine.common.util; package com.engine.common.util;
import com.engine.attendance.enums.AccountingUnitEnum;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import com.google.common.reflect.TypeToken; import com.google.common.reflect.TypeToken;
import com.google.gson.Gson; import com.google.gson.Gson;
@ -10,6 +11,8 @@ import java.io.File;
import java.io.FileFilter; import java.io.FileFilter;
import java.io.IOException; import java.io.IOException;
import java.lang.reflect.Type; import java.lang.reflect.Type;
import java.math.BigDecimal;
import java.math.MathContext;
import java.net.JarURLConnection; import java.net.JarURLConnection;
import java.net.URL; import java.net.URL;
import java.net.URLDecoder; import java.net.URLDecoder;
@ -235,4 +238,62 @@ public class Utils<T> {
} }
return resultMap; return resultMap;
} }
/**
*
* @param hsl
* @param hsdw
* @param duration
* @param unit
* @return
*/
public static double getItemduration(double hsl, String hsdw,int duration, AccountingUnitEnum unit){
double itemDuration = 0.0;
BigDecimal durationBig = new BigDecimal(duration);
BigDecimal hslBig = new BigDecimal(hsl);
if (AccountingUnitEnum.DAY.getKey().equals(hsdw) || AccountingUnitEnum.ONCE.getKey().equals(hsdw)){
itemDuration = hsl;
}else if (AccountingUnitEnum.HOUR.getKey().equals(hsdw)){
if (unit.equals(AccountingUnitEnum.MINUTES)){
double durationHour = duration/60.0;
if (duration%60 > 0){
durationHour = durationHour +1;
}
durationBig = new BigDecimal(durationHour);
if ((durationHour/hsl) > Math.floor(durationHour/hsl)){
itemDuration=durationBig.divide(hslBig,BigDecimal.ROUND_DOWN).multiply(hslBig).add(hslBig,new MathContext(BigDecimal.ROUND_HALF_DOWN)).doubleValue();
}else {
itemDuration = durationBig.divide(hslBig,BigDecimal.ROUND_DOWN).multiply(hslBig).doubleValue();
}
}else if (unit.equals(AccountingUnitEnum.HOUR)){
if ((duration/hsl) > Math.floor(duration/hsl)){
itemDuration=durationBig.divide(hslBig,BigDecimal.ROUND_DOWN).multiply(hslBig).add(hslBig,new MathContext(BigDecimal.ROUND_HALF_DOWN)).doubleValue();
}else {
itemDuration = durationBig.divide(hslBig,BigDecimal.ROUND_DOWN).multiply(hslBig).doubleValue();
}
}
}else if (AccountingUnitEnum.MINUTES.getKey().equals(hsdw)){
if (unit.equals(AccountingUnitEnum.MINUTES)){
if ((duration/hsl) > Math.floor(duration/hsl)){
itemDuration=durationBig.divide(hslBig,BigDecimal.ROUND_DOWN).multiply(hslBig).add(hslBig,new MathContext(BigDecimal.ROUND_HALF_DOWN)).doubleValue();
}else {
itemDuration = durationBig.divide(hslBig,BigDecimal.ROUND_DOWN).multiply(hslBig).doubleValue();
}
}else if (unit.equals(AccountingUnitEnum.HOUR)){
int durationMinute = duration*60;
durationBig = new BigDecimal(durationMinute);
if ((durationMinute/hsl) > Math.floor(durationMinute/hsl)){
itemDuration=durationBig.divide(hslBig,BigDecimal.ROUND_DOWN).multiply(hslBig).add(hslBig,new MathContext(BigDecimal.ROUND_HALF_DOWN)).doubleValue();
}else {
itemDuration = durationBig.divide(hslBig,BigDecimal.ROUND_DOWN).multiply(hslBig).doubleValue();
}
}
}
return itemDuration;
}
} }

Binary file not shown.

@ -1,17 +1,11 @@
import com.engine.attendance.attendanceanalysis.cmd.AbsenteeismCmd; import com.engine.attendance.enums.AccountingUnitEnum;
import com.engine.attendance.enums.SystemItemEnum; import com.engine.common.util.Utils;
import com.engine.common.util.DateUtil;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import weaver.general.Util; import weaver.general.Util;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.ZoneOffset;
import java.time.temporal.ChronoUnit; import java.time.temporal.ChronoUnit;
import java.util.*;
import java.util.stream.Collectors;
public class Test { public class Test {
@ -96,14 +90,40 @@ public class Test {
// if (lists2.get(0) == lists3.get(0)){ // if (lists2.get(0) == lists3.get(0)){
// System.out.println(1111); // System.out.println(1111);
// } // }
// System.out.println("aa|aa|ss".split("\\|")[2]); // System.out.println("aa|aa|ss".split("\\|")[2]);
// AccountingUnitEnum accountingUnitEnum = AccountingUnitEnum.HOUR;
// AccountingUnitEnum accountingUnitEnum2 = AccountingUnitEnum.HOUR;
//long numDays = DateUtil.getBetWeenMinutes("2023-11-08 17:40","2023-11-08 16:30");
// long numDays = DateUtil.getBetWeenMinutes("2023-11-08 15:40","2023-11-08 16:30"); // BigDecimal duration = new BigDecimal(5);
// System.out.println(numDays/2); // BigDecimal hsl = new BigDecimal(0.6);
// System.out.println(duration.divide(hsl,BigDecimal.ROUND_DOWN).multiply(hsl).add(hsl,new MathContext(BigDecimal.ROUND_HALF_DOWN)).doubleValue());
// System.out.println(DateUtil.AfterMinutes("2023-11-08 15:40:05",numDays/2)); // System.out.println(DateUtil.AfterMinutes("2023-11-08 15:40:05",numDays/2));
System.out.println(Integer.valueOf(Util.null2String(null)));
// List<Map<String, Object>> clockInTimeList = Lists.newArrayList();
// clockInTimeList.add(new HashMap(){{
// put("signdate","2023-11-12");
// put("signtime","08:47:43");
// }});
// clockInTimeList.add(new HashMap(){{
// put("signdate","2023-11-12");
// put("signtime","09:47:43");
// }});
// clockInTimeList.add(new HashMap(){{
// put("signdate","2023-11-12");
// put("signtime","10:47:43");
// }});
//
// clockInTimeList.add(new HashMap(){{
// put("signdate","2023-11-13");
// put("signtime","11:05:43");
// }});
// System.out.println(Utils.getNearestClcokInTimeCmd("2023-11-12 08:46:43",clockInTimeList));
System.out.println(DateUtil.getTime("2023-10-30 23:00").compareTo(DateUtil.getTime("2023-10-30 22:01"))); // System.out.println(DateUtil.getTime("2023-10-30 23:00").compareTo(DateUtil.getTime("2023-10-30 22:01")));
//System.out.println(DateUtil.beforeDay("2023-10-31",1)); //System.out.println(DateUtil.beforeDay("2023-10-31",1));
// List<Map<String,Object>> personGroupOrganizationList = Lists.newArrayList(); // List<Map<String,Object>> personGroupOrganizationList = Lists.newArrayList();
// personGroupOrganizationList.add(new HashMap(){{put("dx","4-夜班人员");}}); // personGroupOrganizationList.add(new HashMap(){{put("dx","4-夜班人员");}});

Loading…
Cancel
Save