zm_dev
liuliang 2 years ago
parent d850d60447
commit fae56112e3

@ -774,3 +774,5 @@
2023-11-28 19:57:25,603 [main] [com.engine.common.util.Utils] [INFO] - 请假外出时间 右边 2023-11-28 19:57:25,603 [main] [com.engine.common.util.Utils] [INFO] - 请假外出时间 右边
2023-11-28 20:02:25,544 [Timer-0] [A2] [INFO] - rootPath == null 2023-11-28 20:02:25,544 [Timer-0] [A2] [INFO] - rootPath == null
2023-11-28 20:02:25,545 [Timer-0] [A2] [INFO] - filePath == nullWEB-INF\prop\isSyncLog4j.properties 2023-11-28 20:02:25,545 [Timer-0] [A2] [INFO] - filePath == nullWEB-INF\prop\isSyncLog4j.properties
2023-12-05 21:53:39,011 [Timer-0] [A2] [INFO] - rootPath == null
2023-12-05 21:53:39,021 [Timer-0] [A2] [INFO] - filePath == nullWEB-INF\prop\isSyncLog4j.properties

@ -14,6 +14,8 @@ import com.google.common.collect.Maps;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import weaver.general.Util; import weaver.general.Util;
import java.time.ZoneOffset;
import java.util.Comparator;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -22,10 +24,11 @@ import java.util.stream.Collectors;
* *
*/ */
@Slf4j @Slf4j
public class GetClockInPointCmd extends AbstractCommonCommand<Map<String,Object>> { public class GetClockInPointCmd extends AbstractCommonCommand<Map<String, Object>> {
public GetClockInPointCmd(Map<String,Object> params){ public GetClockInPointCmd(Map<String, Object> params) {
this.params=params; this.params = params;
} }
@Override @Override
public BizLogContext getLogContext() { public BizLogContext getLogContext() {
return null; return null;
@ -35,241 +38,417 @@ public class GetClockInPointCmd extends AbstractCommonCommand<Map<String,Object>
public Map<String, Object> execute(CommandContext commandContext) { public Map<String, Object> execute(CommandContext commandContext) {
Map<String, Object> resultMap = Maps.newHashMap(); Map<String, Object> resultMap = Maps.newHashMap();
String analysisDate = Util.null2String(params.get("analysisDate")); String analysisDate = Util.null2String(params.get("analysisDate"));
List<Map<String, Object>> needClockInSchedule = (List<Map<String, Object>>)params.get("needClockInSchedule"); List<Map<String, Object>> scheduleResult = (List<Map<String, Object>>) params.get("scheduleResult");
List<Map<String, Object>> clockInTimeList = (List<Map<String, Object>>)params.get("clockInTimeList"); List<Map<String, Object>> clockInTimeList = (List<Map<String, Object>>) params.get("clockInTimeList");
List<Map<String, Map<String,Object>>> clcokInTimeData = getClockInPoint(analysisDate,needClockInSchedule,clockInTimeList); List<Map<String, Object>> askForLeaveAndEvctionScheduleList = (List<Map<String, Object>>) params.get("askForLeaveAndEvctionSchedule");
resultMap.put("clcokInTimeData",clcokInTimeData); List<Map<String, Object>> needClockInList = scheduleResult.stream().filter(e -> !ClassSegmentTypeEnum.REST_AND_DINE.getKey().equals(e.get("bdlx")) && !ClassSegmentTypeEnum.REST_PERIOD.getKey().equals(e.get("bdlx")) &&
!ClassSegmentTypeEnum.DINING_PERIOD.getKey().equals(e.get("bdlx")) ).collect(Collectors.toList());
/**
*
*/
log.info("未重新计算卡点时 老的scheduleResult : [{}],askForLeaveAndEvctionScheduleList:[{}]",scheduleResult,askForLeaveAndEvctionScheduleList);
if (needClockInList.size() > 0 && askForLeaveAndEvctionScheduleList.size() > 0) {
String startTime = analysisDate + " " + needClockInList.get(0).get("dtkssj").toString();
String endStartTime = analysisDate + " " + needClockInList.get(needClockInList.size()-1).get("dtkssj").toString();
String endTime = analysisDate + " " + needClockInList.get(needClockInList.size()-1).get("dtjssj").toString();
if (DateUtil.getTime(endStartTime).compareTo(DateUtil.getTime(endTime)) > 0) {
endTime = DateUtil.AfterDay(analysisDate, 1) + " " + needClockInList.get(needClockInList.size()-1).get("dtjssj");
}
for (Map<String, Object> askForLeaveAndEvctionSchedule :askForLeaveAndEvctionScheduleList){
String dtkssj = analysisDate + " " + askForLeaveAndEvctionSchedule.get("dtkssj");
String dtjssj = analysisDate + " " + askForLeaveAndEvctionSchedule.get("dtjssj");
if (DateUtil.getTime(dtkssj).compareTo(DateUtil.getTime(dtjssj)) > 0) {
dtjssj = DateUtil.AfterDay(analysisDate, 1) + " " + askForLeaveAndEvctionSchedule.get("dtjssj");
}
if (DateUtil.getTime(dtkssj).compareTo(DateUtil.getTime(startTime))<0 || DateUtil.getTime(dtkssj).compareTo(DateUtil.getTime(endTime)) > 0){
askForLeaveAndEvctionSchedule.put("ksdk",CheckBoxEnum.UNCHECKED.getKey());
}
if (DateUtil.getTime(dtjssj).compareTo(DateUtil.getTime(endTime))>0 || DateUtil.getTime(dtjssj).compareTo(DateUtil.getTime(startTime))<0){
askForLeaveAndEvctionSchedule.put("jsdk",CheckBoxEnum.UNCHECKED.getKey());
}
}
}
/**
*
*/
for (Map<String, Object> askForLeaveAndEvctionMap :askForLeaveAndEvctionScheduleList){
String evctiondtkssj = analysisDate + " " +Util.null2String(askForLeaveAndEvctionMap.get("dtkssj"));
String evctionksdk = Util.null2String(askForLeaveAndEvctionMap.get("ksdk"));
String evctiondtjssj = analysisDate + " " +Util.null2String(askForLeaveAndEvctionMap.get("dtjssj"));
String evctionjsdk = Util.null2String(askForLeaveAndEvctionMap.get("jsdk"));
if (DateUtil.getTime(evctiondtkssj).compareTo(DateUtil.getTime(evctiondtjssj)) > 0) {
evctiondtjssj = DateUtil.AfterDay(analysisDate, 1) + " " + Util.null2String(askForLeaveAndEvctionMap.get("dtjssj"));
}
List<String> lists = Lists.newArrayList();
for (int i=0;i<scheduleResult.size();i++){
String dtkssj = analysisDate + " " +Util.null2String(scheduleResult.get(i).get("dtkssj"));
String dtjssj = analysisDate + " " +Util.null2String(scheduleResult.get(i).get("dtjssj"));
String bdlx = Util.null2String(scheduleResult.get(i).get("bdlx"));
if (DateUtil.getTime(dtkssj).compareTo(DateUtil.getTime(dtjssj)) > 0) {
dtjssj = DateUtil.AfterDay(analysisDate, 1) + " " + Util.null2String(scheduleResult.get(i).get("dtjssj"));
}
if (DateUtil.getTime(evctiondtkssj).compareTo(DateUtil.getTime(dtkssj)) <= 0 && DateUtil.getTime(evctiondtjssj).compareTo(DateUtil.getTime(dtkssj)) >=0
&& !ClassSegmentTypeEnum.REST_AND_DINE.getKey().equals(bdlx) && !ClassSegmentTypeEnum.REST_PERIOD.getKey().equals(bdlx) && !ClassSegmentTypeEnum.DINING_PERIOD.getKey().equals(bdlx)){
lists.add(scheduleResult.get(i).get("dtkssj")+"-"+ClockPointEnum.START.getKey()+"-"+Util.null2String(scheduleResult.get(i).get("ksdk")));
}
if (DateUtil.getTime(evctiondtkssj).compareTo(DateUtil.getTime(dtjssj)) <= 0 && DateUtil.getTime(evctiondtjssj).compareTo(DateUtil.getTime(dtjssj)) >=0
&& !ClassSegmentTypeEnum.REST_AND_DINE.getKey().equals(bdlx) && !ClassSegmentTypeEnum.REST_PERIOD.getKey().equals(bdlx) && !ClassSegmentTypeEnum.DINING_PERIOD.getKey().equals(bdlx)){
lists.add(scheduleResult.get(i).get("dtjssj")+"-"+ClockPointEnum.END.getKey()+"-"+Util.null2String(scheduleResult.get(i).get("jsdk")));
}
}
//新打卡
List<String> newNeedClockLists = Lists.newArrayList();
if (lists.size() == 1){
String str = lists.get(0);
if (ClockPointEnum.START.getKey().equals(str.split("-")[1]) && CheckBoxEnum.CHECKED.getKey().equals(evctionjsdk)){
newNeedClockLists.add(str.split("-")[0]+"-"+str.split("-")[1]+"-0");
}else if (ClockPointEnum.END.getKey().equals(str.split("-")[1]) && CheckBoxEnum.CHECKED.getKey().equals(evctionksdk)){
newNeedClockLists.add(str.split("-")[0]+"-"+str.split("-")[1]+"-0");
}
}else if (lists.size() > 1){
for(int i=0;i<lists.size();i++){
String str = lists.get(i);
if (i ==0){
if (CheckBoxEnum.CHECKED.getKey().equals(evctionksdk) || ClockPointEnum.START.getKey().equals(str.split("-")[1])){
newNeedClockLists.add(str.split("-")[0]+"-"+str.split("-")[1]+"-0");
}
}else if (i == lists.size()-1){
if (CheckBoxEnum.CHECKED.getKey().equals(evctionjsdk) || ClockPointEnum.END.getKey().equals(str.split("-")[1])){
newNeedClockLists.add(str.split("-")[0]+"-"+str.split("-")[1]+"-0");
}
}else {
newNeedClockLists.add(str.split("-")[0]+"-"+str.split("-")[1]+"-0");
}
}
}
for (int i=0;i<scheduleResult.size();i++){
String dtkssj = Util.null2String(scheduleResult.get(i).get("dtkssj"));
String dtjssj = Util.null2String(scheduleResult.get(i).get("dtjssj"));
for (String newNeedClock : newNeedClockLists){
if (ClockPointEnum.START.getKey().equals(newNeedClock.split("-")[1])){
if (newNeedClock.split("-")[0].equals(dtkssj)){
scheduleResult.get(i).put("ksdk",newNeedClock.split("-")[2]);
}
}else if (ClockPointEnum.END.getKey().equals(newNeedClock.split("-")[1])){
if (newNeedClock.split("-")[0].equals(dtjssj)){
scheduleResult.get(i).put("jsdk",newNeedClock.split("-")[2]);
}
}
}
}
}
log.info("经过重新计算卡点时 新的scheduleResult : [{}],askForLeaveAndEvctionScheduleList:[{}]",scheduleResult,askForLeaveAndEvctionScheduleList);
if (askForLeaveAndEvctionScheduleList.size() > 0){
scheduleResult.addAll(askForLeaveAndEvctionScheduleList);
scheduleResult = scheduleResult.stream().sorted(Comparator.comparing(e->DateUtil.getTime(analysisDate+" "+e.get("dtkssj")).toInstant(ZoneOffset.of("+8")).toEpochMilli())).collect(Collectors.toList());
}
List<Map<String, Map<String, Object>>> clcokInTimeData = getClockInPoint(analysisDate, scheduleResult, clockInTimeList);
resultMap.put("clcokInTimeData", clcokInTimeData);
return resultMap; return resultMap;
} }
/** /**
* *
* @param analysisDate *
* @param needClockInSchedule * @param analysisDate
* @param clockInTimeList * @param scheduleResult
* @return * @param clockInTimeList
* @return {2023-11-12 09:00|0|3|2023-11-12 09:15={signtime=09:11:00, id=48, userid=53, signdate=2023-11-12}}
* ||| = map
*/ */
public static List<Map<String, Map<String,Object>>> getClockInPoint(String analysisDate, List<Map<String, Object>> needClockInSchedule, List<Map<String, Object>> clockInTimeList){ public static List<Map<String, Map<String, Object>>> getClockInPoint(String analysisDate, List<Map<String, Object>> scheduleResult, List<Map<String, Object>> clockInTimeList) {
List<Map<String,Map<String,Object>>> clcokInTimeData = Lists.newArrayList();
for (Map<String, Object> needClockIn :needClockInSchedule){ /**
if (CheckBoxEnum.CHECKED.getKey().equals(needClockIn.get("ksdk"))){ *
String dtkssj = analysisDate+" "+needClockIn.get("dtkssj"); */
String dtjssj = analysisDate+" "+needClockIn.get("dtjssj"); List<Map<String, Map<String, Object>>> clcokInTimeData = Lists.newArrayList();
if (DateUtil.getTime(dtkssj).compareTo(DateUtil.getTime(dtjssj)) > 0){ for (Map<String, Object> needClockIn : scheduleResult) {
dtjssj = DateUtil.AfterDay(analysisDate,1) +" "+needClockIn.get("dtjssj"); 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"))); 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 = ClockPointEnum.EMPTY.getKey(); String timeType = ClockPointEnum.EMPTY.getKey();
Map<String,Map<String,Object>> clcokInTimeMap = Maps.newHashMap(); Map<String, Map<String, Object>> clcokInTimeMap = Maps.newHashMap();
if (ksdkNearestClcokInTime.get(ClockPointEnum.EQUAL.getKey()) != null){ if (ksdkNearestClcokInTime.get(ClockPointEnum.EQUAL.getKey()) != null) {
timeType=ClockPointEnum.EQUAL.getKey(); timeType = ClockPointEnum.EQUAL.getKey();
} }
if (ClockPointEnum.EMPTY.getKey().equals(timeType) && ksdkNearestClcokInTime.get(ClockPointEnum.BEFORE.getKey()) != null){ 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"); 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=ClockPointEnum.BEFORE.getKey(); timeType = ClockPointEnum.BEFORE.getKey();
} }
} }
if (ClockPointEnum.EMPTY.getKey().equals(timeType) && ksdkNearestClcokInTime.get(ClockPointEnum.AFTER.getKey()) != null){ 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"); 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=ClockPointEnum.AFTER.getKey(); timeType = ClockPointEnum.AFTER.getKey();
} }
} }
clcokInTimeMap.put(dtkssj+"|"+ClockPointEnum.START.getKey()+"|"+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"))) {
String dtkssj = analysisDate+" "+needClockIn.get("dtkssj"); String dtkssj = analysisDate + " " + needClockIn.get("dtkssj");
String dtjssj = analysisDate+" "+needClockIn.get("dtjssj"); String dtjssj = analysisDate + " " + needClockIn.get("dtjssj");
int thdkfzs = Integer.valueOf(Util.null2String(needClockIn.get("thdkfzs"))); int thdkfzs = Integer.valueOf(Util.null2String(needClockIn.get("thdkfzs")));
if (DateUtil.getTime(dtkssj).compareTo(DateUtil.getTime(dtjssj)) > 0){ if (DateUtil.getTime(dtkssj).compareTo(DateUtil.getTime(dtjssj)) > 0) {
dtjssj = DateUtil.AfterDay(analysisDate,1) +" "+needClockIn.get("dtjssj"); dtjssj = DateUtil.AfterDay(analysisDate, 1) + " " + needClockIn.get("dtjssj");
} }
Map<String,Map<String,Object>> jsdkNearestClcokInTime = Utils.getNearestClcokInTimeCmd(dtjssj,clockInTimeList); Map<String, Map<String, Object>> jsdkNearestClcokInTime = Utils.getNearestClcokInTimeCmd(dtjssj, clockInTimeList);
String timeType = ClockPointEnum.EMPTY.getKey(); String timeType = ClockPointEnum.EMPTY.getKey();
Map<String,Map<String,Object>> clcokInTimeMap = Maps.newHashMap(); Map<String, Map<String, Object>> clcokInTimeMap = Maps.newHashMap();
if (jsdkNearestClcokInTime.get(ClockPointEnum.EQUAL.getKey()) != null){ if (jsdkNearestClcokInTime.get(ClockPointEnum.EQUAL.getKey()) != null) {
timeType=ClockPointEnum.EQUAL.getKey(); timeType = ClockPointEnum.EQUAL.getKey();
} }
if (ClockPointEnum.EMPTY.getKey().equals(timeType) && jsdkNearestClcokInTime.get(ClockPointEnum.AFTER.getKey()) != null){ 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"); 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=ClockPointEnum.AFTER.getKey(); timeType = ClockPointEnum.AFTER.getKey();
} }
} }
if (ClockPointEnum.EMPTY.getKey().equals(timeType) && jsdkNearestClcokInTime.get(ClockPointEnum.BEFORE.getKey()) != null){ 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"); 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=ClockPointEnum.BEFORE.getKey(); timeType = ClockPointEnum.BEFORE.getKey();
} }
} }
clcokInTimeMap.put(dtjssj+"|"+ClockPointEnum.END.getKey()+"|"+timeType,jsdkNearestClcokInTime.get(timeType)); clcokInTimeMap.put(dtjssj + "|" + ClockPointEnum.END.getKey() + "|" + timeType, jsdkNearestClcokInTime.get(timeType));
clcokInTimeData.add(clcokInTimeMap); clcokInTimeData.add(clcokInTimeMap);
} }
} }
//当弹性上下班时 clcokInTimeData = clcokInTimeData.stream().sorted(Comparator.comparing(e->{
if (needClockInSchedule.size() > 0){ //卡点
String point = "";
//当天打卡数据
for (Map.Entry<String,Map<String,Object>> entry :e.entrySet()){
point = entry.getKey();
}
return DateUtil.getTime(point.split("\\|")[0]).toInstant(ZoneOffset.of("+8")).toEpochMilli();
})).collect(Collectors.toList());
/**
*
*/
if (scheduleResult.size() > 0) {
//上下班弹性,
List<Map<String, Object>> workScheduleList = scheduleResult.stream().filter(e -> ClassSegmentTypeEnum.WORK_TIME.getKey().equals(e.get("bdlx")) || ClassSegmentTypeEnum.EXTENDED_OVERTIME.getKey().equals(e.get("bdlx"))
|| ClassSegmentTypeEnum.EARLY_OVERTIME.getKey().equals(e.get("bdlx"))).collect(Collectors.toList());
//请假和外出集合
List<Map<String, Object>> leaveAndEvctionList = scheduleResult.stream().filter(e -> ClassSegmentTypeEnum.ASK_FOR_LEAVE.getKey().equals(e.get("bdlx")) ||
ClassSegmentTypeEnum.EVECTION.getKey().equals(e.get("bdlx"))).collect(Collectors.toList());
//是否弹性 //是否弹性
String sfdx = Util.null2String(needClockInSchedule.get(0).get("sfdx")); String sfdx = Util.null2String(workScheduleList.get(0).get("sfdx"));
//最大弹性分钟 //上班是否需要打卡
int zddxfz = Integer.valueOf(Util.null2String(needClockInSchedule.get(0).get("zddxfz"))); String ifToWorkClock = Util.null2String(workScheduleList.get(0).get("ksdk"));
//弹性核算 //下班是否需要打卡
int dxhs = Integer.valueOf(Util.null2String(needClockInSchedule.get(0).get("dxhs"))); String ifToCloseClock = Util.null2String(workScheduleList.get(workScheduleList.size()-1).get("jsdk"));
if (CheckBoxEnum.CHECKED.getKey().equals(sfdx)){ //第一条工作时段、早上加班必须要求打卡并且上班之前没有请假
//上下班弹性 if (workScheduleList.size() > 0 && CheckBoxEnum.CHECKED.getKey().equals(sfdx)) {
List<Map<String, Object>> needClockInStartList = needClockInSchedule.stream().filter(e -> ClassSegmentTypeEnum.WORK_TIME.getKey().equals(e.get("bdlx")) && CheckBoxEnum.CHECKED.getKey().equals(e.get("ksdk"))).collect(Collectors.toList()); //最大弹性分钟
int zddxfz = Integer.valueOf(Util.null2String(workScheduleList.get(0).get("zddxfz")));
//弹性核算
int dxhs = Integer.valueOf(Util.null2String(workScheduleList.get(0).get("dxhs")));
Map<String, Object> ksdkMap = workScheduleList.get(0);
String kssjStart = analysisDate + " " + Util.null2String(ksdkMap.get("dtkssj"));
String jssjStart = analysisDate + " " + Util.null2String(ksdkMap.get("dtjssj"));
List<Map<String, Object>> needClockInEndList = needClockInSchedule.stream().filter(e -> ClassSegmentTypeEnum.WORK_TIME.getKey().equals(e.get("bdlx")) && CheckBoxEnum.CHECKED.getKey().equals(e.get("jsdk"))).collect(Collectors.toList());
if (needClockInStartList.size()>0 && needClockInEndList.size()>0){
Map<String, Object> ksdkMap = needClockInStartList.get(0);
String kssjStart = analysisDate + " " +Util.null2String(ksdkMap.get("dtkssj"));
String jssjStart = analysisDate +" "+Util.null2String(ksdkMap.get("dtjssj"));
Map<String, Object> jsdkMap = workScheduleList.get(workScheduleList.size() - 1);
int thdkfzs = Integer.valueOf(Util.null2String(jsdkMap.get("thdkfzs")));
String kssjEnd = analysisDate + " " + Util.null2String(jsdkMap.get("dtkssj"));
String jssjEnd = analysisDate + " " + Util.null2String(jsdkMap.get("dtjssj"));
Map<String, Object> jsdkMap = needClockInEndList.get(needClockInEndList.size()-1); if (ksdkMap != jsdkMap) {
int thdkfzs = Integer.valueOf(Util.null2String(jsdkMap.get("thdkfzs"))); if (DateUtil.getTime(kssjStart).compareTo(DateUtil.getTime(jssjStart)) > 0) {
String kssjEnd = analysisDate + " " +Util.null2String(jsdkMap.get("dtkssj")); kssjStart = DateUtil.beforeDay(analysisDate, 1) + " " + Util.null2String(ksdkMap.get("dtkssj"));
String jssjEnd = analysisDate +" "+Util.null2String(jsdkMap.get("dtjssj")); }
if (DateUtil.getTime(kssjEnd).compareTo(DateUtil.getTime(jssjEnd)) > 0) {
jssjEnd = DateUtil.AfterDay(analysisDate, 1) + " " + Util.null2String(jsdkMap.get("dtjssj"));
}
} else {
jssjEnd = DateUtil.AfterDay(analysisDate, 1) + " " + Util.null2String(jsdkMap.get("dtjssj"));
}
if (ksdkMap != jsdkMap){ //弹性上班时间
if (DateUtil.getTime(kssjStart).compareTo(DateUtil.getTime(jssjStart)) > 0){ String flexibleWorkTime = "";
kssjStart = DateUtil.beforeDay(analysisDate,1)+" "+Util.null2String(ksdkMap.get("dtkssj")); //弹性下班时间
String flexibleOffWorkTime="";
if (leaveAndEvctionList.size() >0){
//第一笔请假、外出时间
Map<String, Object> leaveAndEvctionMap = leaveAndEvctionList.get(0);
String leaveAndEvctionkssj = analysisDate + " " + Util.null2String(leaveAndEvctionMap.get("dtkssj"));
//最大开始弹性时间
String minkssjStart = DateUtil.beforeMinutes(kssjStart,zddxfz);
String maxkssjStart = DateUtil.AfterMinutes(kssjStart,zddxfz);
//请假开始时间在最大开始弹性时间之内
if (DateUtil.getTime(leaveAndEvctionkssj).compareTo(DateUtil.getTime(maxkssjStart))<=0){
//弹性上班卡
flexibleWorkTime = leaveAndEvctionkssj;
if (DateUtil.getTime(leaveAndEvctionkssj).compareTo(DateUtil.getTime(minkssjStart)) <0){
flexibleWorkTime=minkssjStart;
} }
if (DateUtil.getTime(kssjEnd).compareTo(DateUtil.getTime(jssjEnd)) > 0){
jssjEnd = DateUtil.AfterDay(analysisDate,1)+" "+Util.null2String(jsdkMap.get("dtjssj")); //弹性下班时间点
int betweenToWorkTime = DateUtil.getBetWeenMinutes(flexibleWorkTime, kssjStart);
//弹性下班时间点
flexibleOffWorkTime = jssjEnd;
if (betweenToWorkTime >= 0) {
flexibleOffWorkTime = DateUtil.beforeMinutes(flexibleOffWorkTime, Math.abs(betweenToWorkTime));
} else if (betweenToWorkTime < 0) {
flexibleOffWorkTime = DateUtil.AfterMinutes(flexibleOffWorkTime, Math.abs(betweenToWorkTime));
} }
}else {
jssjEnd = DateUtil.AfterDay(analysisDate,1)+" "+Util.null2String(jsdkMap.get("dtjssj"));
} }
//弹性上班卡 }
String flexibleWork = ""; //弹性上班卡
for (int i=0;i<clcokInTimeData.size();i++){ for (int i = 0; i < clcokInTimeData.size(); i++) {
Map<String,Map<String,Object>> clcokInTimeMap = clcokInTimeData.get(i); Map<String, Map<String, Object>> clcokInTimeMap = clcokInTimeData.get(i);
//卡点 //卡点
String point = ""; String point = "";
//当天打卡数据 //当天打卡数据
Map<String,Object> clcokInTime = null; Map<String, Object> clcokInTime = null;
for (Map.Entry<String,Map<String,Object>> entry :clcokInTimeMap.entrySet()){ for (Map.Entry<String, Map<String, Object>> entry : clcokInTimeMap.entrySet()) {
point = entry.getKey(); point = entry.getKey();
clcokInTime = entry.getValue(); clcokInTime = entry.getValue();
} }
//需要计算的班次打卡时间点 //需要计算的班次打卡时间点
String pointTime = point.split("\\|")[0]; String pointTime = point.split("\\|")[0];
//start开始打卡时间点end结束打卡时间点 //start开始打卡时间点end结束打卡时间点
String pointType = point.split("\\|")[1]; String pointType = point.split("\\|")[1];
//empty:漏卡equal:打卡时间和班次时间相等before打卡时间在班次时间之前after打卡时间在班次时间之后 //empty:漏卡equal:打卡时间和班次时间相等before打卡时间在班次时间之前after打卡时间在班次时间之后
String timeType = point.split("\\|")[2]; String timeType = point.split("\\|")[2];
if (pointTime.equals(kssjStart) && ClockPointEnum.START.getKey().equals(pointType) && clcokInTime != null){ if (pointTime.equals(kssjStart) && ClockPointEnum.START.getKey().equals(pointType) && clcokInTime != null
String signTime = clcokInTime.get("signdate")+" "+clcokInTime.get("signtime"); && CheckBoxEnum.CHECKED.getKey().equals(ifToWorkClock)) {
//该卡点是弹性开始时间 String signTime = clcokInTime.get("signdate") + " " + clcokInTime.get("signtime");
if (ClockPointEnum.BEFORE.getKey().equals(timeType)){ //该卡点是弹性开始时间
int betWeenTime = DateUtil.getBetWeenMinutes(signTime,kssjStart); if ("".equals(flexibleWorkTime) ){
//弹性上班期间未被请假开始时间占据
if (ClockPointEnum.BEFORE.getKey().equals(timeType)) {
int betWeenTime = DateUtil.getBetWeenMinutes(signTime, kssjStart);
String newPonit = point; String newPonit = point;
if (betWeenTime <= zddxfz){ if (betWeenTime <= zddxfz) {
betWeenTime = Double.valueOf(Utils.getItemdurationDown(5.0, AccountingUnitEnum.MINUTES.getKey(),betWeenTime,AccountingUnitEnum.MINUTES)).intValue(); betWeenTime = Double.valueOf(Utils.getItemdurationDown(dxhs, AccountingUnitEnum.MINUTES.getKey(), betWeenTime, AccountingUnitEnum.MINUTES)).intValue();
flexibleWork = DateUtil.beforeMinutes(kssjStart,betWeenTime); flexibleWorkTime = DateUtil.beforeMinutes(kssjStart, betWeenTime);
newPonit = pointTime+"|"+pointType+"|"+ClockPointEnum.EQUAL.getKey()+"|"+flexibleWork; newPonit = pointTime + "|" + pointType + "|" + ClockPointEnum.EQUAL.getKey() + "|" + flexibleWorkTime;
}else if (betWeenTime > zddxfz){ } else if (betWeenTime > zddxfz) {
newPonit = point +"|"+DateUtil.beforeMinutes(kssjStart,zddxfz); flexibleWorkTime = DateUtil.beforeMinutes(kssjStart, zddxfz);
flexibleWork = DateUtil.beforeMinutes(kssjStart,zddxfz); newPonit = point + "|" + flexibleWorkTime;
} }
clcokInTimeMap.remove(point); clcokInTimeMap.remove(point);
clcokInTimeMap.put(newPonit,clcokInTime); clcokInTimeMap.put(newPonit, clcokInTime);
}else if (ClockPointEnum.AFTER.getKey().equals(timeType)){ } else if (ClockPointEnum.AFTER.getKey().equals(timeType)) {
//迟到 //迟到
String newPonit = point; String newPonit = point;
int betWeenTime = DateUtil.getBetWeenMinutes(kssjStart,signTime); int betWeenTime = DateUtil.getBetWeenMinutes(kssjStart, signTime);
if (betWeenTime <= zddxfz){ if (betWeenTime <= zddxfz) {
betWeenTime = Double.valueOf(Utils.getItemduration(5.0, AccountingUnitEnum.MINUTES.getKey(),betWeenTime,AccountingUnitEnum.MINUTES)).intValue(); betWeenTime = Double.valueOf(Utils.getItemduration(dxhs, AccountingUnitEnum.MINUTES.getKey(), betWeenTime, AccountingUnitEnum.MINUTES)).intValue();
flexibleWork = DateUtil.AfterMinutes(kssjStart,betWeenTime); flexibleWorkTime = DateUtil.AfterMinutes(kssjStart, betWeenTime);
newPonit = pointTime+"|"+pointType+"|"+ClockPointEnum.EQUAL.getKey()+"|"+flexibleWork; newPonit = pointTime + "|" + pointType + "|" + ClockPointEnum.EQUAL.getKey() + "|" + flexibleWorkTime;
}else if (betWeenTime > zddxfz){ } else if (betWeenTime > zddxfz) {
newPonit = point +"|"+DateUtil.AfterMinutes(kssjStart,zddxfz); flexibleWorkTime = DateUtil.AfterMinutes(kssjStart, zddxfz);
flexibleWork = DateUtil.AfterMinutes(kssjStart,zddxfz); newPonit = point + "|" + flexibleWorkTime;
} }
clcokInTimeMap.remove(point); clcokInTimeMap.remove(point);
clcokInTimeMap.put(newPonit,clcokInTime); clcokInTimeMap.put(newPonit, clcokInTime);
} }
}else if (pointTime.equals(jssjEnd) && ClockPointEnum.END.getKey().equals(pointType) && clcokInTime != null){ }else {
//该卡点是弹性下班点 //弹性上班期间被请假开始时间占据
String newPonit = point +"|"+flexibleWorkTime;
int betweenToWorkTime = DateUtil.getBetWeenMinutes(flexibleWork,kssjStart); clcokInTimeMap.remove(point);
clcokInTimeMap.put(newPonit, clcokInTime);
}
} else if (pointTime.equals(jssjEnd) && ClockPointEnum.END.getKey().equals(pointType) && CheckBoxEnum.CHECKED.getKey().equals(ifToCloseClock)) {
//该卡点是弹性下班点
if ("".equals(flexibleOffWorkTime) && !"".equals(flexibleWorkTime)){
int betweenToWorkTime = DateUtil.getBetWeenMinutes(flexibleWorkTime, kssjStart);
//弹性下班时间点 //弹性下班时间点
String flexibleOffWork = jssjEnd; flexibleOffWorkTime = jssjEnd;
if (betweenToWorkTime >=0){ if (betweenToWorkTime >= 0) {
flexibleOffWork = DateUtil.beforeMinutes(flexibleOffWork,Math.abs(betweenToWorkTime)); flexibleOffWorkTime = DateUtil.beforeMinutes(flexibleOffWorkTime, Math.abs(betweenToWorkTime));
}else if (betweenToWorkTime < 0){ } else if (betweenToWorkTime < 0) {
flexibleOffWork = DateUtil.AfterMinutes(flexibleOffWork,Math.abs(betweenToWorkTime)); flexibleOffWorkTime = DateUtil.AfterMinutes(flexibleOffWorkTime, Math.abs(betweenToWorkTime));
} }
}
if (!"".equals(flexibleOffWorkTime)){
//根据弹性下班时间点重新计算 //根据弹性下班时间点重新计算
Map<String,Map<String,Object>> jsdkNearestClcokInTime = Utils.getNearestClcokInTimeCmd(flexibleOffWork,clockInTimeList); Map<String, Map<String, Object>> jsdkNearestClcokInTime = Utils.getNearestClcokInTimeCmd(flexibleOffWorkTime, clockInTimeList);
String newtimeType = ClockPointEnum.EMPTY.getKey(); String newtimeType = ClockPointEnum.EMPTY.getKey();
if (jsdkNearestClcokInTime.get(ClockPointEnum.EQUAL.getKey()) != null){ if (jsdkNearestClcokInTime.get(ClockPointEnum.EQUAL.getKey()) != null) {
newtimeType=ClockPointEnum.EQUAL.getKey(); newtimeType = ClockPointEnum.EQUAL.getKey();
} }
if (ClockPointEnum.EMPTY.getKey().equals(newtimeType) && jsdkNearestClcokInTime.get(ClockPointEnum.AFTER.getKey()) != null){ if (ClockPointEnum.EMPTY.getKey().equals(newtimeType) && jsdkNearestClcokInTime.get(ClockPointEnum.AFTER.getKey()) != null) {
String clockInTime = jsdkNearestClcokInTime.get(ClockPointEnum.AFTER.getKey()).get("signdate") +" "+jsdkNearestClcokInTime.get(ClockPointEnum.AFTER.getKey()).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(flexibleOffWork,thdkfzs))) <=0){ if (DateUtil.getTime(clockInTime).compareTo(DateUtil.getTime(DateUtil.AfterMinutes(flexibleOffWorkTime, thdkfzs))) <= 0) {
newtimeType=ClockPointEnum.AFTER.getKey(); newtimeType = ClockPointEnum.AFTER.getKey();
} }
} }
if (ClockPointEnum.EMPTY.getKey().equals(newtimeType) && jsdkNearestClcokInTime.get(ClockPointEnum.BEFORE.getKey()) != null){ if (ClockPointEnum.EMPTY.getKey().equals(newtimeType) && jsdkNearestClcokInTime.get(ClockPointEnum.BEFORE.getKey()) != null) {
String clockInTime = jsdkNearestClcokInTime.get(ClockPointEnum.BEFORE.getKey()).get("signdate") +" "+jsdkNearestClcokInTime.get(ClockPointEnum.BEFORE.getKey()).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(kssjEnd)) >0){ if (DateUtil.getTime(clockInTime).compareTo(DateUtil.getTime(kssjEnd)) > 0) {
newtimeType=ClockPointEnum.BEFORE.getKey(); newtimeType = ClockPointEnum.BEFORE.getKey();
} }
} }
String newPonit = jssjEnd+"|"+ClockPointEnum.END.getKey()+"|"+newtimeType+"|"+flexibleOffWork; String newPonit = jssjEnd + "|" + ClockPointEnum.END.getKey() + "|" + newtimeType + "|" + flexibleOffWorkTime;
clcokInTimeMap.remove(point); clcokInTimeMap.remove(point);
clcokInTimeMap.put(newPonit,jsdkNearestClcokInTime.get(newtimeType)); clcokInTimeMap.put(newPonit, jsdkNearestClcokInTime.get(newtimeType));
} }
} }
} }
} }
} }
//当有2笔需要打卡时可能会有打卡歧义的情况歧义情况取2个时间点的中间值当打卡时间小于中间值归属前一个打卡大于则相反
if (clcokInTimeData.size() >1){ /**
for (int i=0;i<clcokInTimeData.size()-1;i++){ * 22
Map<String,Map<String,Object>> beforeClcokInTimeData = clcokInTimeData.get(i); */
Map<String,Map<String,Object>> afterClcokInTimeData = clcokInTimeData.get(i+1); if (clcokInTimeData.size() > 1) {
Map<String,Object> beforeClcokInTimeMap = null; for (int i = 0; i < clcokInTimeData.size() - 1; i++) {
Map<String, Map<String, Object>> beforeClcokInTimeData = clcokInTimeData.get(i);
Map<String, Map<String, Object>> afterClcokInTimeData = clcokInTimeData.get(i + 1);
Map<String, Object> beforeClcokInTimeMap = null;
String beforeClcokInTime = ""; String beforeClcokInTime = "";
String afterClcokInTime = ""; String afterClcokInTime = "";
Map<String,Object> afterClcokInTimeMap = null; Map<String, Object> afterClcokInTimeMap = null;
for (Map.Entry<String,Map<String,Object>> beforeEntry :beforeClcokInTimeData.entrySet()){ for (Map.Entry<String, Map<String, Object>> beforeEntry : beforeClcokInTimeData.entrySet()) {
beforeClcokInTimeMap = beforeEntry.getValue(); beforeClcokInTimeMap = beforeEntry.getValue();
beforeClcokInTime = beforeEntry.getKey(); beforeClcokInTime = beforeEntry.getKey();
} }
for (Map.Entry<String,Map<String,Object>> afterEntry :afterClcokInTimeData.entrySet()){ for (Map.Entry<String, Map<String, Object>> afterEntry : afterClcokInTimeData.entrySet()) {
afterClcokInTimeMap = afterEntry.getValue(); afterClcokInTimeMap = afterEntry.getValue();
afterClcokInTime = afterEntry.getKey(); afterClcokInTime = afterEntry.getKey();
} }
//重复 //重复
if (beforeClcokInTimeMap != null && beforeClcokInTimeMap == afterClcokInTimeMap ){ if (beforeClcokInTimeMap != null && beforeClcokInTimeMap == afterClcokInTimeMap) {
String beforeTime = beforeClcokInTime.split("\\|")[0]; String beforeTime = beforeClcokInTime.split("\\|")[0];
String afterTime = afterClcokInTime.split("\\|")[0]; String afterTime = afterClcokInTime.split("\\|")[0];
long betWeenMinutes = DateUtil.getBetWeenMinutes(beforeTime,afterTime); long betWeenMinutes = DateUtil.getBetWeenMinutes(beforeTime, afterTime);
String middileTime = DateUtil.AfterMinutes(beforeTime,betWeenMinutes/2); String middileTime = DateUtil.AfterMinutes(beforeTime, betWeenMinutes / 2);
String signdateTime = beforeClcokInTimeMap.get("signdate") +" "+beforeClcokInTimeMap.get("signtime"); String signdateTime = beforeClcokInTimeMap.get("signdate") + " " + beforeClcokInTimeMap.get("signtime");
if (DateUtil.getTime(signdateTime).compareTo(DateUtil.getTime(middileTime)) <=0){ if (DateUtil.getTime(signdateTime).compareTo(DateUtil.getTime(middileTime)) <= 0) {
//该打卡归属前一个打卡点 //该打卡归属前一个打卡点
afterClcokInTimeData.put(afterClcokInTime,null); afterClcokInTimeData.put(afterClcokInTime, null);
}else if (DateUtil.getTime(signdateTime).compareTo(DateUtil.getTime(middileTime)) >0){ } else if (DateUtil.getTime(signdateTime).compareTo(DateUtil.getTime(middileTime)) > 0) {
//该打卡归属后一个打卡点 //该打卡归属后一个打卡点
beforeClcokInTimeData.put(beforeClcokInTime,null); beforeClcokInTimeData.put(beforeClcokInTime, null);
} }
} }
} }

@ -9,6 +9,7 @@ import com.engine.common.util.DbTools;
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 lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import weaver.conn.RecordSetTrans;
import weaver.general.Util; import weaver.general.Util;
import java.util.List; import java.util.List;
@ -146,6 +147,32 @@ public class recordDataCmd extends AbstractCommonCommand<Map<String,Object>> {
DbTools.update(sql,insertDatas.toArray()); DbTools.update(sql,insertDatas.toArray());
} }
updateWorkOverTimeDate(userId,analysisDate);
return null; return null;
} }
public void updateWorkOverTimeDate(String userId,String date){
String sql = "select id from uf_jcl_kq_cqjg where ygid=? and rq=?";
List<Map<String,Object>> dataList = DbTools.getSqlToList(sql,userId,date);
if (dataList.size() > 0){
String id = Util.null2String(dataList.get(0).get("id"));
RecordSetTrans rst = new RecordSetTrans();
rst.setAutoCommit(false);
try {
sql = "delete from uf_jcl_kq_jbjg where lyid=?";
rst.executeUpdate(sql,id);
sql = "delete from uf_jcl_kq_jqye where lyid=?";
rst.executeUpdate(sql,id);
sql = "update uf_jcl_kq_jbjg set lyid =? where lyid=?";
rst.executeUpdate(sql,id,userId+"-"+DateUtil.getCurrentDate());
sql = "update uf_jcl_kq_jqye set lyid =? where lyid=?";
rst.executeUpdate(sql,id,userId+"-"+DateUtil.getCurrentDate());
rst.commit();
}catch (Exception e){
rst.rollback();
log.error("updateWorkOverTimeDate error :{}",e);
}
}
}
} }

@ -89,7 +89,10 @@ public class AbnormalAttendanceServiceImpl extends Service implements AbnormalAt
saveWorkTimeBeLateParam.put("betweenMinutes",between); saveWorkTimeBeLateParam.put("betweenMinutes",between);
saveWorkTimeBeLateParam.put("itemType", AttendanceItemTypeEnum.LATE); saveWorkTimeBeLateParam.put("itemType", AttendanceItemTypeEnum.LATE);
saveWorkTimeBeLateParam.put("hsdw",hsdw); saveWorkTimeBeLateParam.put("hsdw",hsdw);
saveWorkTimeBeLateParam.put("hsl",hsl);
saveWorkTimeBeLateParam.put("kczgsc",kczgsc); saveWorkTimeBeLateParam.put("kczgsc",kczgsc);
saveWorkTimeBeLateParam.put("classStartTime",classStartTime);
saveWorkTimeBeLateParam.put("classEndTime",clockInTime);
resultList.add(saveWorkTimeBeLateParam); resultList.add(saveWorkTimeBeLateParam);
} }
@ -133,7 +136,10 @@ public class AbnormalAttendanceServiceImpl extends Service implements AbnormalAt
saveWorkTimeBeLateParam.put("betweenMinutes",between); saveWorkTimeBeLateParam.put("betweenMinutes",between);
saveWorkTimeBeLateParam.put("itemType", AttendanceItemTypeEnum.LATE); saveWorkTimeBeLateParam.put("itemType", AttendanceItemTypeEnum.LATE);
saveWorkTimeBeLateParam.put("hsdw",hsdw); saveWorkTimeBeLateParam.put("hsdw",hsdw);
saveWorkTimeBeLateParam.put("hsl",hsl);
saveWorkTimeBeLateParam.put("kczgsc",kczgsc); saveWorkTimeBeLateParam.put("kczgsc",kczgsc);
saveWorkTimeBeLateParam.put("classStartTime",classStartTime);
saveWorkTimeBeLateParam.put("classEndTime",clockInTime);
resultList.add(saveWorkTimeBeLateParam); resultList.add(saveWorkTimeBeLateParam);
} }
@ -177,6 +183,9 @@ public class AbnormalAttendanceServiceImpl extends Service implements AbnormalAt
saveWorkTimeBeLateParam.put("itemType", AttendanceItemTypeEnum.LATE); saveWorkTimeBeLateParam.put("itemType", AttendanceItemTypeEnum.LATE);
saveWorkTimeBeLateParam.put("hsdw",hsdw); saveWorkTimeBeLateParam.put("hsdw",hsdw);
saveWorkTimeBeLateParam.put("kczgsc",kczgsc); saveWorkTimeBeLateParam.put("kczgsc",kczgsc);
saveWorkTimeBeLateParam.put("hsl",hsl);
saveWorkTimeBeLateParam.put("classStartTime",classStartTime);
saveWorkTimeBeLateParam.put("classEndTime",clockInTime);
resultList.add(saveWorkTimeBeLateParam); resultList.add(saveWorkTimeBeLateParam);
} }
@ -256,6 +265,9 @@ public class AbnormalAttendanceServiceImpl extends Service implements AbnormalAt
saveWorkTimeBeLateParam.put("itemType", AttendanceItemTypeEnum.LEAVE_EARLY); saveWorkTimeBeLateParam.put("itemType", AttendanceItemTypeEnum.LEAVE_EARLY);
saveWorkTimeBeLateParam.put("hsdw",hsdw); saveWorkTimeBeLateParam.put("hsdw",hsdw);
saveWorkTimeBeLateParam.put("kczgsc",kczgsc); saveWorkTimeBeLateParam.put("kczgsc",kczgsc);
saveWorkTimeBeLateParam.put("hsl",hsl);
saveWorkTimeBeLateParam.put("classStartTime",clockInTime);
saveWorkTimeBeLateParam.put("classEndTime",classEndTime);
resultList.add(saveWorkTimeBeLateParam); resultList.add(saveWorkTimeBeLateParam);
} }
@ -301,6 +313,9 @@ public class AbnormalAttendanceServiceImpl extends Service implements AbnormalAt
saveWorkTimeBeLateParam.put("itemType", AttendanceItemTypeEnum.LEAVE_EARLY); saveWorkTimeBeLateParam.put("itemType", AttendanceItemTypeEnum.LEAVE_EARLY);
saveWorkTimeBeLateParam.put("hsdw",hsdw); saveWorkTimeBeLateParam.put("hsdw",hsdw);
saveWorkTimeBeLateParam.put("kczgsc",kczgsc); saveWorkTimeBeLateParam.put("kczgsc",kczgsc);
saveWorkTimeBeLateParam.put("hsl",hsl);
saveWorkTimeBeLateParam.put("classStartTime",clockInTime);
saveWorkTimeBeLateParam.put("classEndTime",classEndTime);
resultList.add(saveWorkTimeBeLateParam); resultList.add(saveWorkTimeBeLateParam);
} }
@ -345,6 +360,9 @@ public class AbnormalAttendanceServiceImpl extends Service implements AbnormalAt
saveWorkTimeBeLateParam.put("itemType", AttendanceItemTypeEnum.LEAVE_EARLY); saveWorkTimeBeLateParam.put("itemType", AttendanceItemTypeEnum.LEAVE_EARLY);
saveWorkTimeBeLateParam.put("hsdw",hsdw); saveWorkTimeBeLateParam.put("hsdw",hsdw);
saveWorkTimeBeLateParam.put("kczgsc",kczgsc); saveWorkTimeBeLateParam.put("kczgsc",kczgsc);
saveWorkTimeBeLateParam.put("hsl",hsl);
saveWorkTimeBeLateParam.put("classStartTime",clockInTime);
saveWorkTimeBeLateParam.put("classEndTime",classEndTime);
resultList.add(saveWorkTimeBeLateParam); resultList.add(saveWorkTimeBeLateParam);
} }

@ -1,6 +1,8 @@
package com.engine.attendance.attendanceanalysis.service.impl; package com.engine.attendance.attendanceanalysis.service.impl;
import com.engine.attendance.attendanceanalysis.service.AskForLeaveService; import com.engine.attendance.attendanceanalysis.service.AskForLeaveService;
import com.engine.attendance.enums.AccountingUnitEnum;
import com.engine.attendance.enums.AttendanceItemTypeEnum;
import com.engine.attendance.enums.CheckBoxEnum; import com.engine.attendance.enums.CheckBoxEnum;
import com.engine.attendance.enums.WorkForTimeEnum; import com.engine.attendance.enums.WorkForTimeEnum;
import com.engine.common.util.DateUtil; import com.engine.common.util.DateUtil;
@ -31,13 +33,26 @@ public class AskForLeaveServiceImpl extends Service implements AskForLeaveServic
List<Map<String,Object>> offsetAskForLeaveAnomaly = Lists.newArrayList(); List<Map<String,Object>> offsetAskForLeaveAnomaly = Lists.newArrayList();
for (int i=0;i<abnormalClockInList.size();i++){ for (int i=0;i<abnormalClockInList.size();i++){
String pointTime = Util.null2String(abnormalClockInList.get(i).get("pointTime"));
String bdlx = Util.null2String(abnormalClockInList.get(i).get("bdlx")); String bdlx = Util.null2String(abnormalClockInList.get(i).get("bdlx"));
if (zysd.contains(Utils.getWorkFor(bdlx)) || zysd.contains(WorkForTimeEnum.ALL_TIME.getKey())){ AttendanceItemTypeEnum itemType = (AttendanceItemTypeEnum)abnormalClockInList.get(i).get("itemType");
if (DateUtil.getTime(kssj).compareTo(DateUtil.getTime(pointTime)) <=0 && String classStartTime = Util.null2String(abnormalClockInList.get(i).get("classStartTime"));
DateUtil.getTime(jssj).compareTo(DateUtil.getTime(pointTime)) >=0){ String classEndTime = Util.null2String(abnormalClockInList.get(i).get("classEndTime"));
if ((zysd.contains(Utils.getWorkFor(bdlx)) || zysd.contains(WorkForTimeEnum.ALL_TIME.getKey())) &&
!AttendanceItemTypeEnum.MISSE_CARD.equals(itemType)){
Map<String,Object> leaveMap = Maps.newHashMap();
leaveMap.put("kssj",kssj);
leaveMap.put("jssj",jssj);
int betweenTime = DateUtil.getBetWeenMinutes(classStartTime,classEndTime);
int intersectionTime = Utils.getIntersectionTime(classStartTime,classEndTime,leaveMap);
if (betweenTime == intersectionTime){
offsetAskForLeaveAnomaly.add(abnormalClockInList.get(i)); offsetAskForLeaveAnomaly.add(abnormalClockInList.get(i));
}else {
String hsdw = Util.null2String(abnormalClockInList.get(i).get("hsdw"));
int hsl = Integer.valueOf(Util.null2String(abnormalClockInList.get(i).get("hsl")));
double itemduration = Utils.getItemduration(hsl,hsdw,betweenTime-intersectionTime, AccountingUnitEnum.MINUTES);
abnormalClockInList.get(i).put("itemduration",itemduration);
} }
} }
} }
abnormalClockInList.removeAll(offsetAskForLeaveAnomaly); abnormalClockInList.removeAll(offsetAskForLeaveAnomaly);

@ -1,6 +1,8 @@
package com.engine.attendance.attendanceanalysis.service.impl; package com.engine.attendance.attendanceanalysis.service.impl;
import com.engine.attendance.attendanceanalysis.service.EvectionService; import com.engine.attendance.attendanceanalysis.service.EvectionService;
import com.engine.attendance.enums.AccountingUnitEnum;
import com.engine.attendance.enums.AttendanceItemTypeEnum;
import com.engine.attendance.enums.CheckBoxEnum; import com.engine.attendance.enums.CheckBoxEnum;
import com.engine.attendance.enums.WorkForTimeEnum; import com.engine.attendance.enums.WorkForTimeEnum;
import com.engine.common.util.DateUtil; import com.engine.common.util.DateUtil;
@ -29,12 +31,25 @@ public class EvectionServiceImpl extends Service implements EvectionService {
List<Map<String,Object>> offsetEvectionAnomaly = Lists.newArrayList(); List<Map<String,Object>> offsetEvectionAnomaly = Lists.newArrayList();
for (int i=0;i<abnormalClockInList.size();i++){ for (int i=0;i<abnormalClockInList.size();i++){
String pointTime = Util.null2String(abnormalClockInList.get(i).get("pointTime"));
String bdlx = Util.null2String(abnormalClockInList.get(i).get("bdlx")); String bdlx = Util.null2String(abnormalClockInList.get(i).get("bdlx"));
if (zysd.contains(Utils.getWorkFor(bdlx)) || zysd.contains(WorkForTimeEnum.ALL_TIME.getKey())) { AttendanceItemTypeEnum itemType = (AttendanceItemTypeEnum)abnormalClockInList.get(i).get("itemType");
if (DateUtil.getTime(kssj).compareTo(DateUtil.getTime(pointTime)) <= 0 && String classStartTime = Util.null2String(abnormalClockInList.get(i).get("classStartTime"));
DateUtil.getTime(jssj).compareTo(DateUtil.getTime(pointTime)) >= 0) { String classEndTime = Util.null2String(abnormalClockInList.get(i).get("classEndTime"));
if ((zysd.contains(Utils.getWorkFor(bdlx)) || zysd.contains(WorkForTimeEnum.ALL_TIME.getKey())) &&
!AttendanceItemTypeEnum.MISSE_CARD.equals(itemType)) {
Map<String,Object> leaveMap = Maps.newHashMap();
leaveMap.put("kssj",kssj);
leaveMap.put("jssj",jssj);
int betweenTime = DateUtil.getBetWeenMinutes(classStartTime,classEndTime);
int intersectionTime = Utils.getIntersectionTime(classStartTime,classEndTime,leaveMap);
if (betweenTime == intersectionTime){
offsetEvectionAnomaly.add(abnormalClockInList.get(i)); offsetEvectionAnomaly.add(abnormalClockInList.get(i));
}else {
String hsdw = Util.null2String(abnormalClockInList.get(i).get("hsdw"));
int hsl = Integer.valueOf(Util.null2String(abnormalClockInList.get(i).get("hsl")));
double itemduration = Utils.getItemduration(hsl,hsdw,betweenTime-intersectionTime, AccountingUnitEnum.MINUTES);
abnormalClockInList.get(i).put("itemduration",itemduration);
} }
} }
} }

@ -16,11 +16,9 @@ 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 lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import weaver.conn.RecordSet;
import weaver.general.Util; import weaver.general.Util;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.UUID;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Slf4j @Slf4j
@ -132,11 +130,11 @@ public class UtilServiceImpl extends Service implements UtilService {
map.put("dtjssj",overtimePlan.get("jssj")); map.put("dtjssj",overtimePlan.get("jssj"));
map.put("ksdk","0"); map.put("ksdk","0");
map.put("jsdk","0"); map.put("jsdk","0");
map.put("tqdkfzs","30"); map.put("tqdkfzs","60");
map.put("thdkfzs","30"); map.put("thdkfzs","60");
map.put("sfdx","0"); map.put("sfdx",Util.null2String(dataList.get(0).get("sfdx")));
map.put("zddxfz","0"); map.put("zddxfz",Util.null2String(dataList.get(0).get("zddxfz")));
map.put("dxhs","0"); map.put("dxhs",Util.null2String(dataList.get(0).get("dxhs")));
map.put("rqlx",dateMap.get(e.getKey())); map.put("rqlx",dateMap.get(e.getKey()));
map.put("edxss",overtimePlan.get("jbsc")); map.put("edxss",overtimePlan.get("jbsc"));
if (attendanceItems.size() >0){ if (attendanceItems.size() >0){

@ -3,7 +3,6 @@ package com.engine.attendance.attendanceanalysis.service.impl;
import com.engine.attendance.attendanceanalysis.cmd.item.WorkOvertimeItemCmd; import com.engine.attendance.attendanceanalysis.cmd.item.WorkOvertimeItemCmd;
import com.engine.attendance.attendanceanalysis.service.WorkOverTimeService; import com.engine.attendance.attendanceanalysis.service.WorkOverTimeService;
import com.engine.attendance.enums.*; import com.engine.attendance.enums.*;
import com.engine.common.util.CommonUtil;
import com.engine.common.util.DateUtil; import com.engine.common.util.DateUtil;
import com.engine.common.util.DbTools; import com.engine.common.util.DbTools;
import com.engine.common.util.Utils; import com.engine.common.util.Utils;
@ -380,6 +379,7 @@ public class WorkOverTimeServiceImpl extends Service implements WorkOverTimeServ
insertParam.put("sjjssj",realityEndime.split(" ")[1]); insertParam.put("sjjssj",realityEndime.split(" ")[1]);
insertParam.put("sjjbsc",itemduration); insertParam.put("sjjbsc",itemduration);
insertParam.put("jbjgly","4"); insertParam.put("jbjgly","4");
insertParam.put("lyid",userId+"-"+DateUtil.getCurrentDate());
insertParam.put("zt","1"); insertParam.put("zt","1");
Utils.InsertFormTable("uf_jcl_kq_jbjg",insertParam,(Map<String,String>)params.get("formmodeIdMap")); Utils.InsertFormTable("uf_jcl_kq_jbjg",insertParam,(Map<String,String>)params.get("formmodeIdMap"));
@ -391,6 +391,7 @@ public class WorkOverTimeServiceImpl extends Service implements WorkOverTimeServ
Map<String,Object> insertHoliDayParam = Maps.newHashMap(); Map<String,Object> insertHoliDayParam = Maps.newHashMap();
insertHoliDayParam.put("ygid",userId); insertHoliDayParam.put("ygid",userId);
insertHoliDayParam.put("jqid",workTimeBeLateItems.get(0).get("zrdjb")); insertHoliDayParam.put("jqid",workTimeBeLateItems.get(0).get("zrdjb"));
insertHoliDayParam.put("lyid",userId+"-"+DateUtil.getCurrentDate());
//转入的假期额度生效日期 //转入的假期额度生效日期
String yesxrq = Util.null2String(workTimeBeLateItems.get(0).get("yesxrq")); String yesxrq = Util.null2String(workTimeBeLateItems.get(0).get("yesxrq"));
if ("0".equals(yesxrq)){ if ("0".equals(yesxrq)){
@ -407,47 +408,47 @@ public class WorkOverTimeServiceImpl extends Service implements WorkOverTimeServ
String yekyzq = Util.null2String(workTimeBeLateItems.get(0).get("yekyzq")); String yekyzq = Util.null2String(workTimeBeLateItems.get(0).get("yekyzq"));
if ("0".equals(yekyzq)){ if ("0".equals(yekyzq)){
//一个月 //一个月
insertHoliDayParam.put("jzrq",DateUtil.nextMonth(analysisDate,1,DateUtil.yyyyMMdd)); insertHoliDayParam.put("jzrq",DateUtil.nextMonth(insertHoliDayParam.get("sxrq").toString(),1,DateUtil.yyyyMMdd));
}else if ("1".equals(yekyzq)){ }else if ("1".equals(yekyzq)){
//两个月 //两个月
insertHoliDayParam.put("jzrq",DateUtil.nextMonth(analysisDate,2,DateUtil.yyyyMMdd)); insertHoliDayParam.put("jzrq",DateUtil.nextMonth(insertHoliDayParam.get("sxrq").toString(),2,DateUtil.yyyyMMdd));
}else if ("2".equals(yekyzq)){ }else if ("2".equals(yekyzq)){
//三个月 //三个月
insertHoliDayParam.put("jzrq",DateUtil.nextMonth(analysisDate,3,DateUtil.yyyyMMdd)); insertHoliDayParam.put("jzrq",DateUtil.nextMonth(insertHoliDayParam.get("sxrq").toString(),3,DateUtil.yyyyMMdd));
}else if ("3".equals(yekyzq)){ }else if ("3".equals(yekyzq)){
//六个月 //六个月
insertHoliDayParam.put("jzrq",DateUtil.nextMonth(analysisDate,6,DateUtil.yyyyMMdd)); insertHoliDayParam.put("jzrq",DateUtil.nextMonth(insertHoliDayParam.get("sxrq").toString(),6,DateUtil.yyyyMMdd));
}else if ("4".equals(yekyzq)){ }else if ("4".equals(yekyzq)){
//十二个月 //十二个月
insertHoliDayParam.put("jzrq",DateUtil.nextMonth(analysisDate,12,DateUtil.yyyyMMdd)); insertHoliDayParam.put("jzrq",DateUtil.nextMonth(insertHoliDayParam.get("sxrq").toString(),12,DateUtil.yyyyMMdd));
}else if ("5".equals(yekyzq)){ }else if ("5".equals(yekyzq)){
//季度 //季度
insertHoliDayParam.put("jzrq",DateUtil.nextMonth(analysisDate,3,DateUtil.yyyyMMdd)); insertHoliDayParam.put("jzrq",DateUtil.nextMonth(insertHoliDayParam.get("sxrq").toString(),3,DateUtil.yyyyMMdd));
}else if ("6".equals(yekyzq)){ }else if ("6".equals(yekyzq)){
//半年 //半年
insertHoliDayParam.put("jzrq",DateUtil.nextMonth(analysisDate,6,DateUtil.yyyyMMdd)); insertHoliDayParam.put("jzrq",DateUtil.nextMonth(insertHoliDayParam.get("sxrq").toString(),6,DateUtil.yyyyMMdd));
}else if ("7".equals(yekyzq)){ }else if ("7".equals(yekyzq)){
//一年 //一年
insertHoliDayParam.put("jzrq",DateUtil.nextMonth(analysisDate,12,DateUtil.yyyyMMdd)); insertHoliDayParam.put("jzrq",DateUtil.nextMonth(insertHoliDayParam.get("sxrq").toString(),12,DateUtil.yyyyMMdd));
} }
insertHoliDayParam.put("ktsc",itemduration); insertHoliDayParam.put("ktsc",itemduration);
String zdyqsc = Util.null2String(workTimeBeLateItems.get(0).get("zdyqsc")); String zdyqsc = Util.null2String(workTimeBeLateItems.get(0).get("zdyqsc"));
if ("0".equals(zdyqsc)){ if ("0".equals(zdyqsc)){
//一个月 //一个月
insertHoliDayParam.put("yqsxrq",DateUtil.nextMonth(analysisDate,1,DateUtil.yyyyMMdd)); insertHoliDayParam.put("yqsxrq",DateUtil.nextMonth(insertHoliDayParam.get("jzrq").toString(),1,DateUtil.yyyyMMdd));
}else if ("1".equals(zdyqsc)){ }else if ("1".equals(zdyqsc)){
//两个月 //两个月
insertHoliDayParam.put("yqsxrq",DateUtil.nextMonth(analysisDate,2,DateUtil.yyyyMMdd)); insertHoliDayParam.put("yqsxrq",DateUtil.nextMonth(insertHoliDayParam.get("jzrq").toString(),2,DateUtil.yyyyMMdd));
}else if ("2".equals(zdyqsc)){ }else if ("2".equals(zdyqsc)){
//三个月 //三个月
insertHoliDayParam.put("yqsxrq",DateUtil.nextMonth(analysisDate,3,DateUtil.yyyyMMdd)); insertHoliDayParam.put("yqsxrq",DateUtil.nextMonth(insertHoliDayParam.get("jzrq").toString(),3,DateUtil.yyyyMMdd));
}else if ("3".equals(zdyqsc)){ }else if ("3".equals(zdyqsc)){
//半年 //半年
insertHoliDayParam.put("yqsxrq",DateUtil.nextMonth(analysisDate,6,DateUtil.yyyyMMdd)); insertHoliDayParam.put("yqsxrq",DateUtil.nextMonth(insertHoliDayParam.get("jzrq").toString(),6,DateUtil.yyyyMMdd));
}else if ("4".equals(zdyqsc)){ }else if ("4".equals(zdyqsc)){
//一年 //一年
insertHoliDayParam.put("yqsxrq",DateUtil.nextMonth(analysisDate,12,DateUtil.yyyyMMdd)); insertHoliDayParam.put("yqsxrq",DateUtil.nextMonth(insertHoliDayParam.get("jzrq").toString(),12,DateUtil.yyyyMMdd));
} }
Utils.InsertFormTable("uf_jcl_kq_jqye",insertHoliDayParam,(Map<String,String>)params.get("formmodeIdMap")); Utils.InsertFormTable("uf_jcl_kq_jqye",insertHoliDayParam,(Map<String,String>)params.get("formmodeIdMap"));

@ -1,14 +1,11 @@
package com.engine.attendance.attendanceanalysis.wrapper; package com.engine.attendance.attendanceanalysis.wrapper;
import com.engine.attendance.attendanceanalysis.cmd.GetClockInPointCmd;
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.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.enums.AccountingUnitEnum;
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.common.util.DateUtil; import com.engine.common.util.DateUtil;
import com.engine.common.util.DbTools; import com.engine.common.util.DbTools;
import com.engine.common.util.ServiceUtil; import com.engine.common.util.ServiceUtil;
@ -172,6 +169,7 @@ public class AttendanceAnalysisWrapper extends Service {
sql = "select hsl,hsdw,lgsbxydk,tqlghlfzs,fgsbxydk,thfghlfzs,tybcndbjlhbjs,zdycbcndfgzsd,zdycrqqjndxxb,zysd from uf_jcl_kq_kqxm where id=?"; sql = "select hsl,hsdw,lgsbxydk,tqlghlfzs,fgsbxydk,thfghlfzs,tybcndbjlhbjs,zdycbcndfgzsd,zdycrqqjndxxb,zysd from uf_jcl_kq_kqxm where id=?";
List<Map<String,Object>> askForLeaveAndEvctionSchedule = Lists.newArrayList();
for (Map<String,Object> askForLeaveData : askForLeaveList){ for (Map<String,Object> askForLeaveData : askForLeaveList){
Map<String,Object> askForLeaveItem = DbTools.getSqlToMap(sql,askForLeaveData.get("jqlx")); Map<String,Object> askForLeaveItem = DbTools.getSqlToMap(sql,askForLeaveData.get("jqlx"));
//全天请假 //全天请假
@ -188,10 +186,11 @@ public class AttendanceAnalysisWrapper extends Service {
} }
askForLeaveItems.put(askForLeaveData.get("jqlx").toString(),askForLeaveItem); askForLeaveItems.put(askForLeaveData.get("jqlx").toString(),askForLeaveItem);
List<Map<String, Object>> finalScheduleResult = scheduleResult;
Map<String,Object> askForLeaveMap = new HashMap(){{ Map<String,Object> askForLeaveMap = new HashMap(){{
put("bcxx",scheduleResult.get(0).get("bcxx")); put("bcxx", finalScheduleResult.get(0).get("bcxx"));
put("bcsdxx",scheduleResult.get(0).get("bcsdxx")); put("bcsdxx", finalScheduleResult.get(0).get("bcsdxx"));
put("edsc",scheduleResult.get(0).get("edsc")); put("edsc", finalScheduleResult.get(0).get("edsc"));
put("bdlx", ClassSegmentTypeEnum.EVECTION.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"));
@ -199,14 +198,13 @@ public class AttendanceAnalysisWrapper extends Service {
put("jsdk",askForLeaveItem.get("lgsbxydk")); put("jsdk",askForLeaveItem.get("lgsbxydk"));
put("tqdkfzs","60"); put("tqdkfzs","60");
put("thdkfzs","60"); put("thdkfzs","60");
put("sfdx","1"); put("tqlghlfzs",askForLeaveItem.get("tqlghlfzs"));
put("zddxfz",askForLeaveItem.get("tqlghlfzs")); put("thfghlfzs",askForLeaveItem.get("thfghlfzs"));
put("dxhs",askForLeaveItem.get("thfghlfzs"));
}}; }};
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")))){ if (!"".equals(Util.null2String(askForLeaveData.get("kssj"))) && !"".equals(Util.null2String(askForLeaveData.get("jssj")))){
needClockInSchedule.add(askForLeaveMap); //scheduleResult.add(askForLeaveMap);
scheduleResult.add(askForLeaveMap); askForLeaveAndEvctionSchedule.add(askForLeaveMap);
} }
} }
for (Map<String,Object> evectionData :evectionList){ for (Map<String,Object> evectionData :evectionList){
@ -224,10 +222,11 @@ public class AttendanceAnalysisWrapper extends Service {
return; return;
} }
evectionItems.put(evectionData.get("cclx").toString(),evectionItem); evectionItems.put(evectionData.get("cclx").toString(),evectionItem);
List<Map<String, Object>> finalScheduleResult1 = scheduleResult;
Map<String,Object> evectionMap = new HashMap(){{ Map<String,Object> evectionMap = new HashMap(){{
put("bcxx",scheduleResult.get(0).get("bcxx")); put("bcxx", finalScheduleResult1.get(0).get("bcxx"));
put("bcsdxx",scheduleResult.get(0).get("bcsdxx")); put("bcsdxx", finalScheduleResult1.get(0).get("bcsdxx"));
put("edsc",scheduleResult.get(0).get("edsc")); put("edsc", finalScheduleResult1.get(0).get("edsc"));
put("bdlx", ClassSegmentTypeEnum.ASK_FOR_LEAVE.getKey()); put("bdlx", ClassSegmentTypeEnum.ASK_FOR_LEAVE.getKey());
put("dtkssj",evectionData.get("kssj")); put("dtkssj",evectionData.get("kssj"));
put("dtjssj",evectionData.get("jssj")); put("dtjssj",evectionData.get("jssj"));
@ -235,22 +234,22 @@ public class AttendanceAnalysisWrapper extends Service {
put("jsdk",evectionItem.get("lgsbxydk")); put("jsdk",evectionItem.get("lgsbxydk"));
put("tqdkfzs","60"); put("tqdkfzs","60");
put("thdkfzs","60"); put("thdkfzs","60");
put("sfdx","1"); put("tqlghlfzs",evectionItem.get("tqlghlfzs"));
put("zddxfz",evectionItem.get("tqlghlfzs")); put("thfghlfzs",evectionItem.get("thfghlfzs"));
put("dxhs",evectionItem.get("thfghlfzs"));
}}; }};
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")))){ if (!"".equals(Util.null2String(evectionData.get("kssj"))) && !"".equals(Util.null2String(evectionData.get("jssj")))){
needClockInSchedule.add(evectionMap); //scheduleResult.add(evectionMap);
scheduleResult.add(evectionMap); askForLeaveAndEvctionSchedule.add(evectionMap);
} }
} }
needClockInSchedule = needClockInSchedule.stream().sorted(Comparator.comparing(e->DateUtil.getTime(analysisDate+" "+e.get("dtkssj")).toInstant(ZoneOffset.of("+8")).toEpochMilli())).collect(Collectors.toList()); scheduleResult = scheduleResult.stream().sorted(Comparator.comparing(e->DateUtil.getTime(analysisDate+" "+e.get("dtkssj")).toInstant(ZoneOffset.of("+8")).toEpochMilli())).collect(Collectors.toList());
Map<String,Object> clcokInTimeDataParam = Maps.newHashMap(); Map<String,Object> clcokInTimeDataParam = Maps.newHashMap();
clcokInTimeDataParam.put("analysisDate",analysisDate); clcokInTimeDataParam.put("analysisDate",analysisDate);
clcokInTimeDataParam.put("needClockInSchedule",needClockInSchedule); clcokInTimeDataParam.put("scheduleResult",scheduleResult);
clcokInTimeDataParam.put("clockInTimeList",clockInTimeList); clcokInTimeDataParam.put("clockInTimeList",clockInTimeList);
clcokInTimeDataParam.put("askForLeaveAndEvctionSchedule",askForLeaveAndEvctionSchedule);
List<Map<String,Map<String,Object>>> clcokInTimeData = utilService.getClockInPointCmd(clcokInTimeDataParam); List<Map<String,Map<String,Object>>> clcokInTimeData = utilService.getClockInPointCmd(clcokInTimeDataParam);
Map<String,Object> recordAbnormalParam = Maps.newHashMap(); Map<String,Object> recordAbnormalParam = Maps.newHashMap();

@ -428,12 +428,40 @@ public class Utils<T> {
log.info("请假外出时间 左边"); log.info("请假外出时间 左边");
}else if (DateUtil.getTime(kssj).compareTo(DateUtil.getTime(leavekssj)) >=0 && DateUtil.getTime(jssj).compareTo(DateUtil.getTime(leavejssj)) <=0){ }else if (DateUtil.getTime(kssj).compareTo(DateUtil.getTime(leavekssj)) >=0 && DateUtil.getTime(jssj).compareTo(DateUtil.getTime(leavejssj)) <=0){
//请假外出时间中间 //请假外出时间中间
betweenMinutes = 0; betweenMinutes = DateUtil.getBetWeenMinutes(kssj,jssj);
log.info("加班实际在请假外出时间中间"); log.info("加班实际在请假外出时间中间");
} }
return betweenMinutes; return betweenMinutes;
} }
/**
* mapkssjjssj
* @return
*/
public static int getIntersectionTime(String kssj,String jssj,Map<String, Object> map){
String leavekssj = map.get("kssj").toString();
String leavejssj = map.get("jssj").toString();
int betweenMinutes=0;
if (DateUtil.getTime(kssj).compareTo(DateUtil.getTime(leavekssj)) <=0 && DateUtil.getTime(jssj).compareTo(DateUtil.getTime(leavejssj)) >=0){
//时间在中间
betweenMinutes = DateUtil.getBetWeenMinutes(leavekssj,leavejssj);
log.info("时间在中间,被包含");
}else if (DateUtil.getTime(kssj).compareTo(DateUtil.getTime(leavekssj)) <=0 && DateUtil.getTime(jssj).compareTo(DateUtil.getTime(leavejssj)) <=0 && DateUtil.getTime(jssj).compareTo(DateUtil.getTime(leavekssj)) >=0){
//时间 右边
betweenMinutes = DateUtil.getBetWeenMinutes(leavekssj,jssj);
log.info("时间 右边");
}else if (DateUtil.getTime(kssj).compareTo(DateUtil.getTime(leavekssj)) >=0 && DateUtil.getTime(jssj).compareTo(DateUtil.getTime(leavejssj)) >=0 && DateUtil.getTime(kssj).compareTo(DateUtil.getTime(leavejssj)) <=0){
//时间 左边
betweenMinutes = DateUtil.getBetWeenMinutes(kssj,leavejssj);
log.info("时间 左边");
}else if (DateUtil.getTime(kssj).compareTo(DateUtil.getTime(leavekssj)) >=0 && DateUtil.getTime(jssj).compareTo(DateUtil.getTime(leavejssj)) <=0){
//请假外出时间中间
betweenMinutes = DateUtil.getBetWeenMinutes(kssj,jssj);
log.info("时间在中间,包含");
}
return betweenMinutes;
}
public static Map<String,String> getFormmodeIdMap(){ public static Map<String,String> getFormmodeIdMap(){
String sql = "select modeid,tablename from uf_jcl_form_table "; String sql = "select modeid,tablename from uf_jcl_form_table ";
List<Map<String,Object>> dataList = DbTools.getSqlToList(sql); List<Map<String,Object>> dataList = DbTools.getSqlToList(sql);

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

@ -1,6 +1,7 @@
import com.engine.attendance.attendanceanalysis.cmd.GetClockInTimeItemCmd; import com.engine.attendance.attendanceanalysis.cmd.GetClockInTimeItemCmd;
import com.engine.attendance.enums.AttendanceItemTypeEnum;
import com.engine.common.util.DateUtil; import com.engine.common.util.DateUtil;
import com.engine.common.util.Utils; import com.engine.common.util.Utils;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
@ -14,7 +15,9 @@ import java.util.stream.Collectors;
public class Test { public class Test {
public static void main(String[] args) { public static void main(String[] args) {
System.out.println("18:13:00".substring(0,5)); List<Integer> list = Lists.newArrayList();
aa(list);
System.out.println(list);
// Map<String,Object> params = Maps.newHashMap(); // Map<String,Object> params = Maps.newHashMap();
// List<Map<String,Object>> attendanceItems = new ArrayList<>(); // List<Map<String,Object>> attendanceItems = new ArrayList<>();
// Map<String,Object> map = new HashMap<>(); // Map<String,Object> map = new HashMap<>();
@ -60,7 +63,8 @@ public class Test {
// } // }
// System.out.println("aaaa"); // System.out.println("aaaa");
System.out.println(DateUtil.getBetWeenMinutes("2023-11-25 20:45:00","2023-11-25 21:00")); System.out.println(AttendanceItemTypeEnum.MISSE_CARD.equals(AttendanceItemTypeEnum.MISSE_CARD));
//System.out.println(Util.getIntValue("")); //System.out.println(Util.getIntValue(""));
// List<Map<String,Object>> beforeleaveDate = Lists.newArrayList(); // List<Map<String,Object>> beforeleaveDate = Lists.newArrayList();
// for (int i=beforeleaveDate.size()-1;i>=0;i--){ // for (int i=beforeleaveDate.size()-1;i>=0;i--){
@ -434,8 +438,13 @@ public class Test {
params.put("clockInTimeCollect",collect); params.put("clockInTimeCollect",collect);
params.put("schedulingResultCollect",schedulingResultsMap); params.put("schedulingResultCollect",schedulingResultsMap);
Map<String, Object> beforeOneDayClockInTimeList = new GetClockInTimeItemCmd(params).execute(null);
System.out.println(beforeOneDayClockInTimeList);
} }
public static void aa(List<Integer> list){
list.add(1);
list.add(5);
list.add(4);
list = list.stream().filter(e -> e <=4).collect(Collectors.toList());
}
} }

Loading…
Cancel
Save