zm_dev
liuliang 1 year 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: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}]]
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.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.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.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.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.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.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.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.google.common.collect.Lists;
import com.google.common.collect.Maps;
import lombok.extern.slf4j.Slf4j;
import weaver.general.Util;
import java.time.ZoneOffset;
@ -15,8 +16,9 @@ import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class GetClockInTimeCmd extends AbstractCommonCommand<Map<String,Object>> {
public GetClockInTimeCmd(Map<String, Object> params){
@Slf4j
public class GetClockInTimeItemCmd extends AbstractCommonCommand<Map<String,Object>> {
public GetClockInTimeItemCmd(Map<String, Object> params){
this.params=params;
}
@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());
log.info("needGetDate : [{}],resultList : [{}]",needGetDate,resultList);
resultMap.put("resultList",resultList);
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 itemduration = Util.null2String(params.get("itemduration"));
//是否异常
String cqzt = params.get("cqzt") == null ? "0":Util.null2String(params.get("cqzt"));
Map<String,Object> resultMap = Maps.newHashMap();
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.WorkForTimeEnum;
import com.engine.common.biz.AbstractCommonCommand;
import com.engine.common.entity.BizLogContext;
import com.engine.core.interceptor.CommandContext;
@ -13,15 +14,15 @@ import java.util.Map;
import java.util.stream.Collectors;
/**
*
*
*/
@Slf4j
public class AbsenteeismCmd extends AbstractCommonCommand<Map<String,Object>> {
public class BeLateItemCmd extends AbstractCommonCommand<Map<String,Object>> {
@Override
public BizLogContext getLogContext() {
return null;
}
public AbsenteeismCmd(Map<String,Object> params){
public BeLateItemCmd(Map<String,Object> params){
this.params=params;
}
@ -29,6 +30,7 @@ public class AbsenteeismCmd extends AbstractCommonCommand<Map<String,Object>> {
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<>();
@ -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")));
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;
}else {
return false;
}
return false;
}).collect(Collectors.toList());
log.info("absenteeismCmd 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
*/
public interface BeLateService {
public interface AbnormalAttendanceService {
/**
*
* @param params

@ -12,11 +12,11 @@ public interface ForgetClockInService {
* @param params
* @return
*/
Map<String, Object> ForgetClockInAllDays(Map<String,Object> params);
boolean forgetClockInAllDays(Map<String,Object> params);
/**
*
* @param params
* @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.enums.SystemItemEnum;
import com.engine.core.impl.Service;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import java.util.Map;
public class ForgetClockInServiceImpl extends Service implements ForgetClockInService {
@Override
public Map<String, Object> ForgetClockInAllDays(Map<String, Object> params) {
params.put("item", SystemItemEnum.MISSING_CLOCK_IN);
params.put("itemduration", 1);
Map<String,Object> result = commandExecutor.execute(new UpdateAttendanceResultsCmd(params));
return result;
public boolean forgetClockInAllDays(Map<String, Object> params) {
Map<String,Object> forgetParam = Maps.newHashMap();
forgetParam.put("item", SystemItemEnum.MISSING_CLOCK_IN);
forgetParam.put("itemduration", 1);
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
public Map<String, Object> ForgetClockIn(Map<String, Object> params) {
return null;
public boolean forgetClockIn(Map<String, Object> params) {
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;
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.attendanceplan.service.AttendancePlanService;
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);
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());
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 bcxxIds = "";
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>>> resultMap = Maps.newHashMap();
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());
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 false;
@ -147,7 +153,7 @@ public class UtilServiceImpl extends Service implements UtilService {
@Override
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");
return resultList;
}

@ -1,16 +1,17 @@
package com.engine.attendance.attendanceanalysis.wrapper;
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.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.UtilServiceImpl;
import com.engine.attendance.attendanceplan.service.AttendancePlanService;
import com.engine.attendance.attendanceplan.service.impl.AttendancePlanServiceImpl;
import com.engine.attendance.enums.CheckBoxEnum;
import com.engine.attendance.enums.ClassSegmentTypeEnum;
import com.engine.attendance.enums.ClockPointEnum;
import com.engine.attendance.enums.PeriodOfTime;
import com.engine.common.util.DateUtil;
import com.engine.common.util.DbTools;
@ -19,7 +20,7 @@ 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 com.icbc.api.internal.apache.http.M;
import lombok.extern.slf4j.Slf4j;
import weaver.general.Util;
import java.time.ZoneOffset;
@ -32,12 +33,13 @@ import java.util.stream.Collectors;
/**
*
*/
@Slf4j
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);
private UpdateAttendanceResultWrapper updateAttendanceResultWrapper = ServiceUtil.getService(UpdateAttendanceResultWrapper.class);
public void attendanceAnalysis(String userId, List<Map<String,Object>> dataList){
String beforeThreeDayDate = DateUtil.getCurrentDateMinusDay(3);
@ -82,54 +84,18 @@ public class AttendanceAnalysisWrapper extends Service {
getClockTimeParam.put("schedulingResultCollect",schedulingResultsMap);
//前一天打卡数据
List<Map<String, Object>> beforeOneDayClockInTimeList = utilService.getClockInTime(getClockTimeParam);
log.info("beforeOneDayClockInTimeList : [{}]",beforeOneDayClockInTimeList);
//分析前一天考勤
analysis(userId,beforeOneDayDate,beforeOneDayClockInTimeList,schedulingResultsMap.get(beforeOneDayDate),attendanceItems);
getClockTimeParam.put("date",beforeTwoDayDate);
//前第二天打卡数据
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 (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;
}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)";
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)";
List<Map<String,Object>> evectionList = DbTools.getSqlToList(sql,userId,analysisDate);
//出差项目
Map<String,Map<String,Object>> evectionItems = Maps.newHashMap();
Map<String,Object> updateAttendacneParams = Maps.newHashMap();
updateAttendacneParams.put("userId",userId);
@ -178,11 +151,12 @@ public class AttendanceAnalysisWrapper extends Service {
return;
}
Map<String,Object> askForLeaveItem = DbTools.getSqlToMap(sql,askForLeaveData.get("jqlx"));
askForLeaveItems.put(askForLeaveData.get("jqlx").toString(),askForLeaveItem);
Map<String,Object> askForLeaveMap = new HashMap(){{
put("bcxx",scheduleResult.get(0).get("bcxx"));
put("bcsdxx",scheduleResult.get(0).get("bcsdxx"));
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("dtjssj",askForLeaveData.get("jssj"));
put("ksdk",askForLeaveItem.get("fgsbxydk"));
@ -194,8 +168,8 @@ public class AttendanceAnalysisWrapper extends Service {
put("dxhs",askForLeaveItem.get("thfghlfzs"));
}};
scheduleResult.add(askForLeaveMap);
if (CheckBoxEnum.CHECKED.getKey().equals(askForLeaveItem.get("lgsbxydk")) || CheckBoxEnum.CHECKED.getKey().equals(askForLeaveItem.get("fgsbxydk"))){
//scheduleResult.add(askForLeaveMap);
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);
}
}
@ -208,6 +182,7 @@ public class AttendanceAnalysisWrapper extends Service {
return;
}
Map<String,Object> evectionItem = DbTools.getSqlToMap(sql,evectionData.get("cclx"));
evectionItems.put(evectionData.get("cclx").toString(),evectionItem);
Map<String,Object> evectionMap = new HashMap(){{
put("bcxx",scheduleResult.get(0).get("bcxx"));
put("bcsdxx",scheduleResult.get(0).get("bcsdxx"));
@ -223,8 +198,8 @@ public class AttendanceAnalysisWrapper extends Service {
put("zddxfz",evectionItem.get("tqlghlfzs"));
put("dxhs",evectionItem.get("thfghlfzs"));
}};
scheduleResult.add(evectionMap);
if (CheckBoxEnum.CHECKED.getKey().equals(evectionItem.get("lgsbxydk")) || CheckBoxEnum.CHECKED.getKey().equals(evectionItem.get("fgsbxydk"))){
//scheduleResult.add(evectionMap);
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);
}
}
@ -237,28 +212,31 @@ public class AttendanceAnalysisWrapper extends Service {
if (CheckBoxEnum.CHECKED.getKey().equals(needClockIn.get("ksdk"))){
String dtkssj = analysisDate+" "+needClockIn.get("dtkssj");
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")));
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();
if (ksdkNearestClcokInTime.get("equal") != null){
timeType="equal";
if (ksdkNearestClcokInTime.get(ClockPointEnum.EQUAL.getKey()) != null){
timeType=ClockPointEnum.EQUAL.getKey();
}
if ("empty".equals(timeType) && ksdkNearestClcokInTime.get("before") != null){
String clockInTime = ksdkNearestClcokInTime.get("before").get("signdate") +" "+ksdkNearestClcokInTime.get("before").get("signtime");
if (ClockPointEnum.EMPTY.getKey().equals(timeType) && ksdkNearestClcokInTime.get(ClockPointEnum.BEFORE.getKey()) != null){
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){
//打卡时间大于等于最早打卡时间
timeType="before";
timeType=ClockPointEnum.BEFORE.getKey();
}
}
if ("empty".equals(timeType) && ksdkNearestClcokInTime.get("after") != null){
String clockInTime = ksdkNearestClcokInTime.get("after").get("signdate") +" "+ksdkNearestClcokInTime.get("after").get("signtime");
if (ClockPointEnum.EMPTY.getKey().equals(timeType) && ksdkNearestClcokInTime.get(ClockPointEnum.AFTER.getKey()) != null){
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){
//打卡时间小于结束时间
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);
}
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);
String timeType = "empty";
String timeType = ClockPointEnum.EMPTY.getKey();
Map<String,Map<String,Object>> clcokInTimeMap = Maps.newHashMap();
if (jsdkNearestClcokInTime.get("equal") != null){
timeType="equal";
if (jsdkNearestClcokInTime.get(ClockPointEnum.EQUAL.getKey()) != null){
timeType=ClockPointEnum.EQUAL.getKey();
}
if ("empty".equals(timeType) && jsdkNearestClcokInTime.get("after") != null){
String clockInTime = jsdkNearestClcokInTime.get("after").get("signdate") +" "+jsdkNearestClcokInTime.get("after").get("signtime");
if (ClockPointEnum.EMPTY.getKey().equals(timeType) && jsdkNearestClcokInTime.get(ClockPointEnum.AFTER.getKey()) != null){
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){
timeType="after";
timeType=ClockPointEnum.AFTER.getKey();
}
}
if ("empty".equals(timeType) && jsdkNearestClcokInTime.get("before") != null){
String clockInTime = jsdkNearestClcokInTime.get("before").get("signdate") +" "+jsdkNearestClcokInTime.get("before").get("signtime");
if (ClockPointEnum.EMPTY.getKey().equals(timeType) && jsdkNearestClcokInTime.get(ClockPointEnum.BEFORE.getKey()) != null){
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){
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);
}
}
@ -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;
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.google.common.collect.Maps;
import weaver.general.Util;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
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){
//卡点
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>> 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;
}

@ -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;
/**
*
*/
public enum WorkForTimeEnum implements BaseEnum {
ALL_TIME("0","所有时段"),
WORK_TIME("1","工作时段"),

@ -1,5 +1,6 @@
package com.engine.common.util;
import com.engine.attendance.enums.AccountingUnitEnum;
import com.google.common.collect.Maps;
import com.google.common.reflect.TypeToken;
import com.google.gson.Gson;
@ -10,6 +11,8 @@ import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import java.lang.reflect.Type;
import java.math.BigDecimal;
import java.math.MathContext;
import java.net.JarURLConnection;
import java.net.URL;
import java.net.URLDecoder;
@ -235,4 +238,62 @@ public class Utils<T> {
}
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.SystemItemEnum;
import com.engine.common.util.DateUtil;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.engine.attendance.enums.AccountingUnitEnum;
import com.engine.common.util.Utils;
import weaver.general.Util;
import java.time.LocalDate;
import java.time.ZoneOffset;
import java.time.temporal.ChronoUnit;
import java.util.*;
import java.util.stream.Collectors;
public class Test {
@ -96,14 +90,40 @@ public class Test {
// if (lists2.get(0) == lists3.get(0)){
// 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 15:40","2023-11-08 16:30");
// System.out.println(numDays/2);
//long numDays = DateUtil.getBetWeenMinutes("2023-11-08 17:40","2023-11-08 16:30");
// BigDecimal duration = new BigDecimal(5);
// 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(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));
// List<Map<String,Object>> personGroupOrganizationList = Lists.newArrayList();
// personGroupOrganizationList.add(new HashMap(){{put("dx","4-夜班人员");}});

Loading…
Cancel
Save