离职人员校验、弹性时段

zm_dev
liuliang 8 months ago
parent 333bbf1ac4
commit 697b9a4287

@ -6,10 +6,7 @@ import com.engine.jucailinkq.attendance.enums.ClassBelongToEnum;
import com.engine.jucailinkq.attendance.enums.ClassSegmentTypeEnum;
import com.engine.common.biz.AbstractCommonCommand;
import com.engine.common.entity.BizLogContext;
import com.engine.jucailinkq.common.util.CommonUtil;
import com.engine.jucailinkq.common.util.DateUtil;
import com.engine.jucailinkq.common.util.DbTools;
import com.engine.jucailinkq.common.util.Utils;
import com.engine.jucailinkq.common.util.*;
import com.engine.core.interceptor.CommandContext;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
@ -174,10 +171,11 @@ public class GetAskForLeaveCmd extends AbstractCommonCommand<Map<String,Object>>
put("dtjssj",askForLeaveData.get("jsrq")+" "+askForLeaveData.get("jssj"));
put("ksdk",askForLeaveItem.get("lgsbxydk"));
put("jsdk",askForLeaveItem.get("fgsbxydk"));
put("tqdkfzs","60");
put("thdkfzs","60");
put("tqdkfzs", ExtensionClassHolder.getGlobalSetMap().get("defaultClockRange") == null?"60":ExtensionClassHolder.getGlobalSetMap().get("defaultClockRange"));
put("thdkfzs", ExtensionClassHolder.getGlobalSetMap().get("defaultClockRange") == null?"60":ExtensionClassHolder.getGlobalSetMap().get("defaultClockRange"));
put("tqlghlfzs",askForLeaveItem.get("tqlghlfzs"));
put("thfghlfzs",askForLeaveItem.get("thfghlfzs"));
put("zysd",askForLeaveItem.get("zysd"));
}};
askForLeaveSchedule.add(askForLeaveMap);
}

@ -33,7 +33,7 @@ public class GetClockInTimeListCmd extends AbstractCommonCommand<Map<String,Obje
@Override
public Map<String, Object> execute(CommandContext commandContext) {
//打卡日期
//分析日期
String needGetDate = Util.null2String(params.get("date"));
//打卡数据
List<Map<String,Object>> clockInTimeList = (List<Map<String,Object>>)params.get("clockInTimeList");
@ -121,9 +121,9 @@ public class GetClockInTimeListCmd extends AbstractCommonCommand<Map<String,Obje
}
boolean mark = false;
if (DateUtil.getTime(earliestTime).compareTo(DateUtil.getTime(needGetDate+" 00:00:00")) < 0){
// if (DateUtil.getTime(earliestTime).compareTo(DateUtil.getTime(needGetDate+" 00:00:00")) < 0){
//当最早打卡时间点在前一天时,获取前一天的出勤结果打卡数据
String earliestDate = earliestTime.split(" ")[0];
String earliestDate = DateUtil.beforeDay(needGetDate,1);
Map<String,Object> clockIntime = clockInTimeMap.get(earliestDate);
if (clockIntime == null || clockIntime.size()==0){
String sql = "select rq,j1,c1,j2,c2,j3,c3,j4,c4,j5,c5,j6,c6,j7,c7,j8,c8 from uf_jcl_kq_cqjg where ygid=? and rq>=? and rq<=?";
@ -154,7 +154,7 @@ public class GetClockInTimeListCmd extends AbstractCommonCommand<Map<String,Obje
}
}
}
}
// }
if (mark){
earliestTime = DateUtil.AfterSeconds(earliestTime,1);
}

@ -6,10 +6,7 @@ import com.engine.jucailinkq.attendance.enums.ClassBelongToEnum;
import com.engine.jucailinkq.attendance.enums.ClassSegmentTypeEnum;
import com.engine.common.biz.AbstractCommonCommand;
import com.engine.common.entity.BizLogContext;
import com.engine.jucailinkq.common.util.CommonUtil;
import com.engine.jucailinkq.common.util.DateUtil;
import com.engine.jucailinkq.common.util.DbTools;
import com.engine.jucailinkq.common.util.Utils;
import com.engine.jucailinkq.common.util.*;
import com.engine.core.interceptor.CommandContext;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
@ -171,10 +168,11 @@ public class GetEvectionCmd extends AbstractCommonCommand<Map<String,Object>> {
put("dtjssj",evectionData.get("jsrq")+" "+evectionData.get("jssj"));
put("ksdk",evectionItem.get("lgsbxydk"));
put("jsdk",evectionItem.get("fgsbxydk"));
put("tqdkfzs","60");
put("thdkfzs","60");
put("tqdkfzs", ExtensionClassHolder.getGlobalSetMap().get("defaultClockRange") == null?"60":ExtensionClassHolder.getGlobalSetMap().get("defaultClockRange"));
put("thdkfzs", ExtensionClassHolder.getGlobalSetMap().get("defaultClockRange")== null?"60":ExtensionClassHolder.getGlobalSetMap().get("defaultClockRange"));
put("tqlghlfzs",evectionItem.get("tqlghlfzs"));
put("thfghlfzs",evectionItem.get("thfghlfzs"));
put("zysd",evectionItem.get("zysd"));
}};
evectionSchedule.add(evectioneMap);
}

@ -11,6 +11,7 @@ import com.engine.common.entity.BizLogContext;
import com.engine.jucailinkq.common.util.DateUtil;
import com.engine.jucailinkq.common.util.DbTools;
import com.engine.common.util.ServiceUtil;
import com.engine.jucailinkq.common.util.ExtensionClassHolder;
import com.engine.jucailinkq.common.util.Utils;
import com.engine.core.interceptor.CommandContext;
import com.google.common.collect.Lists;
@ -93,7 +94,9 @@ public class GetScheduleResultListCmd extends AbstractCommonCommand<Map<String,O
Map<String,Object> newMap = Maps.newHashMap();
newMap.putAll(map);
newMap.put("rqlx",rqlx);
newMap.put("sfxx",sfxx);
if (!newMap.get("sfxx").equals(CheckBoxEnum.CHECKED.getKey())){
newMap.put("sfxx",sfxx);
}
adjustWorkOverTimeClass(newMap, finalAttendanceItems,commandContext);
classs.add(newMap);
}
@ -116,7 +119,7 @@ public class GetScheduleResultListCmd extends AbstractCommonCommand<Map<String,O
}
/** 加班计划*/
sql = "select b.jbry,b.ksrq,b.kssj,b.jblx,b.jsrq,b.jssj,b.jbsc,b.gsrq from uf_jcl_kq_jbjh a left join uf_jcl_kq_jbjh_dt1 b on a.id=b.mainid where b.jbry =? and b.gsrq>=? and b.gsrq<=? and (b.jbcx=0 or b.jbcx is null) and a.jlzt=1";
sql = "select a.id,b.jbry,b.ksrq,b.kssj,b.jblx,b.jsrq,b.jssj,b.jbsc,b.gsrq from uf_jcl_kq_jbjh a left join uf_jcl_kq_jbjh_dt1 b on a.id=b.mainid where b.jbry =? and b.gsrq>=? and b.gsrq<=? and (b.jbcx=0 or b.jbcx is null) and a.jlzt=1";
Map<String,List<Map<String,Object>>> overtimePlanMap = DbTools.getSqlToList(sql,params.get("pbdx"),params.get("startDate"),params.get("endDate")).stream().collect(Collectors.groupingBy(e -> Util.null2String(e.get("gsrq"))));
//考勤项目
@ -143,8 +146,12 @@ public class GetScheduleResultListCmd extends AbstractCommonCommand<Map<String,O
map.put("bcsdxx",resultList == null || resultList.size()==0 || resultList.get(0) ==null ? "":resultList.get(0).get("bcsdxx"));
if (resultList.size()>0){
map.putAll(resultList.get(0));
map.put("sfxx",Util.null2String(resultList.get(0).get("sfxx")));
}else {
map.put("edsc","0");
if (schedulingdateMap != null && schedulingdateMap.size()>0){
map.put("sfxx",Util.null2String(schedulingdateMap.get(0).get("sfxx")));
}
}
map.put("edts","0");
map.put("bdlx", ClassSegmentTypeEnum.OVERTIME_PLAN.getKey());
@ -152,11 +159,9 @@ public class GetScheduleResultListCmd extends AbstractCommonCommand<Map<String,O
map.put("dtjssj",overtimePlan.get("jssj"));
map.put("ksdk","0");
map.put("jsdk","0");
if (schedulingdateMap != null && schedulingdateMap.size()>0){
map.put("sfxx",Util.null2String(schedulingdateMap.get(0).get("sfxx")));
}
map.put("tqdkfzs","60");
map.put("thdkfzs","60");
map.put("overtimePlanId",overtimePlan.get("id"));
map.put("tqdkfzs", ExtensionClassHolder.getGlobalSetMap().get("defaultClockRange") == null?"60":ExtensionClassHolder.getGlobalSetMap().get("defaultClockRange"));
map.put("thdkfzs",ExtensionClassHolder.getGlobalSetMap().get("defaultClockRange") == null?"60":ExtensionClassHolder.getGlobalSetMap().get("defaultClockRange"));
map.put("rqlx",dateMap.get(e.getKey()));
map.put("edxss",overtimePlan.get("jbsc"));
map.put("edfzs",Double.valueOf(overtimePlan.get("jbsc").toString())*60);

@ -123,20 +123,22 @@ public class GetClockInPointCmd extends AbstractCommonCommand<Map<String, Object
String evctionksdk = Util.null2String(askForLeaveAndEvctionMap.get("ksdk"));
String evctiondtjssj = Utils.getjssjTime(askForLeaveAndEvctionMap,analysisDate);
String evctionjsdk = Util.null2String(askForLeaveAndEvctionMap.get("jsdk"));
String zysd = Util.null2String(askForLeaveAndEvctionMap.get("zysd"));
List<String> lists = Lists.newArrayList();
for (int i=0;i<scheduleResult.size();i++){
String dtkssj = Utils.getkssjTime(scheduleResult.get(i),analysisDate);
String dtjssj = Utils.getjssjTime(scheduleResult.get(i),analysisDate);
String bdlx = Util.null2String(scheduleResult.get(i).get("bdlx"));
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(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(dtjssj+"&"+ClockPointEnum.END.getKey()+"&"+Util.null2String(scheduleResult.get(i).get("jsdk")));
if (zysd.contains(Utils.getWorkFor(bdlx))){
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(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(dtjssj+"&"+ClockPointEnum.END.getKey()+"&"+Util.null2String(scheduleResult.get(i).get("jsdk")));
}
}
}
//新打卡
@ -561,46 +563,71 @@ public class GetClockInPointCmd extends AbstractCommonCommand<Map<String, Object
* @return
*/
public List<Map<String, Object>> adjustWorkOverTimeClock(List<Map<String, Object>> scheduleResult,String analysisDate){
scheduleResult = scheduleResult.stream().sorted(Comparator.comparing(e->DateUtil.getTime(Utils.getkssjTime(e,analysisDate)).toInstant(ZoneOffset.of("+8")).toEpochMilli())).collect(Collectors.toList());
for (int i=0;i<scheduleResult.size();i++){
Map<String, Object> scheduleMap = scheduleResult.get(i);
List<Map<String, Object>> workscheduleList = scheduleResult.stream().filter(e->!Utils.ifRestClassSegment(e.get("bdlx").toString())).collect(Collectors.toList());
List<Map<String, Object>> restscheduleList = scheduleResult.stream().filter(e->Utils.ifRestClassSegment(e.get("bdlx").toString())).collect(Collectors.toList());
workscheduleList = workscheduleList.stream().sorted(Comparator.comparing(e->DateUtil.getTime(Utils.getkssjTime(e,analysisDate)).toInstant(ZoneOffset.of("+8")).toEpochMilli())).collect(Collectors.toList());
for (int i=0;i<workscheduleList.size();i++){
Map<String, Object> scheduleMap = workscheduleList.get(i);
if (scheduleMap.get("bdlx").equals(ClassSegmentTypeEnum.OVERTIME_PLAN.getKey())){
String kssj = Utils.getkssjTime(scheduleMap,analysisDate);
String jssj = Utils.getjssjTime(scheduleMap,analysisDate);
Map<String, Object> beforeScheduleMap = i-1 >=0?scheduleResult.get(i-1):null;
Map<String, Object> afterScheduleMap = i+1 <=scheduleResult.size()-1?scheduleResult.get(i+1):null;
if (beforeScheduleMap != null){
Map<String, Object> beforeScheduleMap = i-1 >=0?workscheduleList.get(i-1):null;
Map<String, Object> afterScheduleMap = i+1 <=workscheduleList.size()-1?workscheduleList.get(i+1):null;
if (beforeScheduleMap != null && afterScheduleMap != null && ifWorkClassSegment(beforeScheduleMap.get("bdlx").toString()) &&
ifWorkClassSegment(afterScheduleMap.get("bdlx").toString())){
//加班计划处在工作中间,休息时段加班
String beforejssj = Utils.getjssjTime(beforeScheduleMap,analysisDate);
if (DateUtil.getTime(kssj).compareTo(DateUtil.getTime(beforejssj)) == 0 && ifWorkClassSegment(beforeScheduleMap.get("bdlx").toString()) &&
scheduleMap.get("jsdk").equals(CheckBoxEnum.CHECKED.getKey())){
scheduleMap.put("ksdk",CheckBoxEnum.UNCHECKED.getKey());
String afterkssj = Utils.getkssjTime(afterScheduleMap,analysisDate);
if (DateUtil.getTime(kssj).compareTo(DateUtil.getTime(beforejssj)) == 0){
beforeScheduleMap.put("jsdk",CheckBoxEnum.UNCHECKED.getKey());
}
if (DateUtil.getTime(kssj).compareTo(DateUtil.getTime(beforejssj)) == 0 && ifWorkClassSegment(beforeScheduleMap.get("bdlx").toString()) &&
scheduleMap.get("jsdk").equals(CheckBoxEnum.UNCHECKED.getKey()) && scheduleMap.get("ksdk").equals(CheckBoxEnum.CHECKED.getKey()) &&
beforeScheduleMap.get("jsdk").equals(CheckBoxEnum.CHECKED.getKey())){
scheduleMap.put("ksdk",CheckBoxEnum.UNCHECKED.getKey());
beforeScheduleMap.put("jsdk",CheckBoxEnum.UNCHECKED.getKey());
}
}
if (afterScheduleMap != null){
String afterkssj = Utils.getkssjTime(afterScheduleMap,analysisDate);
if (DateUtil.getTime(jssj).compareTo(DateUtil.getTime(afterkssj)) == 0 && ifWorkClassSegment(afterScheduleMap.get("bdlx").toString()) &&
scheduleMap.get("ksdk").equals(CheckBoxEnum.CHECKED.getKey())){
if (DateUtil.getTime(jssj).compareTo(DateUtil.getTime(afterkssj)) == 0){
scheduleMap.put("jsdk",CheckBoxEnum.UNCHECKED.getKey());
afterScheduleMap.put("ksdk",CheckBoxEnum.UNCHECKED.getKey());
}
if (DateUtil.getTime(jssj).compareTo(DateUtil.getTime(afterkssj)) == 0 && ifWorkClassSegment(afterScheduleMap.get("bdlx").toString()) &&
scheduleMap.get("ksdk").equals(CheckBoxEnum.UNCHECKED.getKey()) &&scheduleMap.get("jsdk").equals(CheckBoxEnum.CHECKED.getKey()) &&
afterScheduleMap.get("ksdk").equals(CheckBoxEnum.CHECKED.getKey())){
scheduleMap.put("jsdk",CheckBoxEnum.UNCHECKED.getKey());
}else {
if (beforeScheduleMap != null){
String beforejssj = Utils.getjssjTime(beforeScheduleMap,analysisDate);
if (DateUtil.getTime(kssj).compareTo(DateUtil.getTime(beforejssj)) == 0 && ifWorkClassSegment(beforeScheduleMap.get("bdlx").toString()) &&
scheduleMap.get("jsdk").equals(CheckBoxEnum.CHECKED.getKey())){
scheduleMap.put("ksdk",CheckBoxEnum.UNCHECKED.getKey());
beforeScheduleMap.put("jsdk",CheckBoxEnum.UNCHECKED.getKey());
}
if (DateUtil.getTime(kssj).compareTo(DateUtil.getTime(beforejssj)) == 0 && ifWorkClassSegment(beforeScheduleMap.get("bdlx").toString()) &&
scheduleMap.get("jsdk").equals(CheckBoxEnum.UNCHECKED.getKey()) && scheduleMap.get("ksdk").equals(CheckBoxEnum.CHECKED.getKey()) &&
beforeScheduleMap.get("jsdk").equals(CheckBoxEnum.CHECKED.getKey())){
scheduleMap.put("ksdk",CheckBoxEnum.UNCHECKED.getKey());
}
}
if (afterScheduleMap != null){
String afterkssj = Utils.getkssjTime(afterScheduleMap,analysisDate);
if (DateUtil.getTime(jssj).compareTo(DateUtil.getTime(afterkssj)) == 0 && ifWorkClassSegment(afterScheduleMap.get("bdlx").toString()) &&
scheduleMap.get("ksdk").equals(CheckBoxEnum.CHECKED.getKey())){
scheduleMap.put("jsdk",CheckBoxEnum.UNCHECKED.getKey());
afterScheduleMap.put("ksdk",CheckBoxEnum.UNCHECKED.getKey());
}
if (DateUtil.getTime(jssj).compareTo(DateUtil.getTime(afterkssj)) == 0 && ifWorkClassSegment(afterScheduleMap.get("bdlx").toString()) &&
scheduleMap.get("ksdk").equals(CheckBoxEnum.UNCHECKED.getKey()) &&scheduleMap.get("jsdk").equals(CheckBoxEnum.CHECKED.getKey()) &&
afterScheduleMap.get("ksdk").equals(CheckBoxEnum.CHECKED.getKey())){
scheduleMap.put("jsdk",CheckBoxEnum.UNCHECKED.getKey());
}
}
}
}
}
List<Map<String, Object>> newList = Lists.newArrayList();
newList.addAll(workscheduleList);
newList.addAll(restscheduleList);
newList = newList.stream().sorted(Comparator.comparing(e->DateUtil.getTime(Utils.getkssjTime(e,analysisDate)).toInstant(ZoneOffset.of("+8")).toEpochMilli())).collect(Collectors.toList());
return scheduleResult;
return newList;
}
/**
*
@ -791,7 +818,7 @@ public class GetClockInPointCmd extends AbstractCommonCommand<Map<String, Object
/**
*
*/
if (toRestClockPointDTO != null && endRestClockPointDTO != null){
if (toRestClockPointDTO != null && endRestClockPointDTO != null && toRestClockPointDTO.getClockTime() != null && endRestClockPointDTO.getClockTime() != null){
String toRestClassTime = toRestClockPointDTO.getClassTime();
String endRestClassTime = endRestClockPointDTO.getClassTime();
Map<ClockPointEnum, Map<String, Object>> toRestNearestClcokInTime = Utils.getNearestClcokInTimeCmd(DateUtil.beforeMinutes(dtkssj,dtzddxfz), clockInTimeList);

@ -81,12 +81,12 @@ public class GetOvertimeDurationCmd extends AbstractCommonCommand<Map<String, Ob
Map<String, Object> getWorkOverTimeParam = Maps.newHashMap();
//加班开始时间
String kssj = Utils.getkssjTime(scheduleMap, analysisDate);
ClockPointDTO startClockPointDTO = clcokInTimeDataList.stream().filter(e->e.getPointType() == ClockPointEnum.START &&
DateUtil.getTime(kssj).compareTo(DateUtil.getTime(e.getClassTime())) == 0).collect(Collectors.toList()).get(0);
List<ClockPointDTO> startClockPointDTO = clcokInTimeDataList.stream().filter(e->e.getPointType() == ClockPointEnum.START &&
DateUtil.getTime(kssj).compareTo(DateUtil.getTime(e.getClassTime())) == 0).collect(Collectors.toList());
//加班结束时间
String jssj = Utils.getjssjTime(scheduleMap, analysisDate);
ClockPointDTO endClockPointDTO = clcokInTimeDataList.stream().filter(e->e.getPointType() == ClockPointEnum.END &&
DateUtil.getTime(jssj).compareTo(DateUtil.getTime(e.getClassTime())) == 0).collect(Collectors.toList()).get(0);
List<ClockPointDTO> endClockPointDTO = clcokInTimeDataList.stream().filter(e->e.getPointType() == ClockPointEnum.END &&
DateUtil.getTime(jssj).compareTo(DateUtil.getTime(e.getClassTime())) == 0).collect(Collectors.toList());
//加班实际开始时间
String realityStartTime = "";
//加班实际结束时间
@ -191,8 +191,8 @@ public class GetOvertimeDurationCmd extends AbstractCommonCommand<Map<String, Ob
}
} else {
String kssjTime = kssj;
if (startClockPointDTO.getElasticTime() != null && !startClockPointDTO.getElasticTime().equals("")){
kssjTime = startClockPointDTO.getElasticTime();
if (startClockPointDTO.size()>0 && startClockPointDTO.get(0).getElasticTime() != null && !startClockPointDTO.get(0).getElasticTime().equals("")){
kssjTime = startClockPointDTO.get(0).getElasticTime();
}
if (DateUtil.getTime(realityStartTime).compareTo(DateUtil.getTime(kssjTime)) > 0) {
beLateTime = DateUtil.getBetWeenMinutes(kssjTime, realityStartTime);
@ -234,8 +234,9 @@ public class GetOvertimeDurationCmd extends AbstractCommonCommand<Map<String, Ob
}
} else {
String jssjTime = jssj;
if (endClockPointDTO.getElasticTime() != null && !endClockPointDTO.getElasticTime().equals("")){
jssjTime = endClockPointDTO.getElasticTime();
if (endClockPointDTO.size()>0 && endClockPointDTO.get(0).getElasticTime() != null && !endClockPointDTO.get(0).getElasticTime().equals("")){
jssjTime = endClockPointDTO.get(0).getElasticTime();
}
if (DateUtil.getTime(realityEndime).compareTo(DateUtil.getTime(jssjTime)) < 0) {
leaveElaryTime = DateUtil.getBetWeenMinutes(realityEndime, jssjTime);

@ -173,6 +173,9 @@ public class SaveWorkOverTimeCmd extends AbstractCommonCommand<Map<String,Object
insertParam.put("sjkssj",realityStartTime.split(" ")[1]);
insertParam.put("sjjsrq",realityEndime.split(" ")[0]);
insertParam.put("sjjssj",realityEndime.split(" ")[1]);
if (scheduleMap.get("overtimePlanId") != null){
insertParam.put("jbjhid",scheduleMap.get("overtimePlanId"));
}
insertParam.put("sjjbsc",itemduration);
insertParam.put("jbjgly","4");
insertParam.put("jblx",workTimeBeLateItems.get(0).get("key"));
@ -182,6 +185,7 @@ public class SaveWorkOverTimeCmd extends AbstractCommonCommand<Map<String,Object
insertParam.put("edjxsc",0);
insertParam.put("ydxsc",0);
insertParam.put("wdxsc",0);
insertParam.put("jbgzrq",params.get("jbgzrq"));
/**
*
*/

@ -41,79 +41,123 @@ public class AttendanceAnalysisJob extends BaseCronJob {
@Override
public void execute() {
log.info("********AttendanceAnalysisJob start********");
log.info("********AttendanceAnalysisJob executeDate :[{}]********",executeDate);
if (executeDate == null || "".equals(executeDate)){
String useDate = com.time.util.DateUtil.getCurrentTime("yyyy-MM-dd");
// if (executeDate != null && !"".equals(executeDate)){
// useDate = executeDate;
// }
log.info("********AttendanceAnalysisJob executeDate :[{}]********",useDate);
executeDate = com.time.util.DateUtil.getCurrentTime("yyyy-MM-dd");
}
String queryUserSql = "select id,departmentid,subcompanyid1 from hrmresource where status <> '5' and status <> '4' and status <> '7'";
String queryDepartEmployeeSql = "select resourceid ,changedate from HRMSTATUSHISTORY where type_n = 5 and changedate='"+DateUtil.beforeDay(useDate,1)+"'";
List<String> departEmployeeList = Lists.newArrayList(DbTools.getSqlToList(queryDepartEmployeeSql).stream().map(e->e.get("resourceid").toString()).collect(Collectors.toSet()));
List<List<String>> departEmployeePartition = Lists.partition(departEmployeeList,200);
String queryUserSql = "select id,departmentid,subcompanyid1,companystartdate from hrmresource where status <> '5' and status <> '4' and status <> '7'";
List<Map<String,Object>> userList = DbTools.getSqlToList(queryUserSql);
for (List<String> userIdPartition :departEmployeePartition){
String sql = "select id,departmentid,subcompanyid1,companystartdate from hrmresource where id ("+String.join(",",userIdPartition)+")";
userList.addAll(DbTools.getSqlToList(sql));
}
Map<String, Object> getAttendanceparam = Maps.newHashMap();
getAttendanceparam.put("userList",userList);
getAttendanceparam.put("executeDate",executeDate);
getAttendanceparam.put("executeDate",useDate);
Map<String, Object> attendanceCycle = utilService.getAttendanceCycle(getAttendanceparam);
Set<String> allDates = Sets.newHashSet();
for (Map.Entry<String, Object> entry : attendanceCycle.entrySet()){
allDates.addAll((Set<String>)entry.getValue());
Set<String> sets = (Set<String>)entry.getValue();
for (String date :sets){
if (DateUtil.getTime(date).compareTo(DateUtil.getTime(DateUtil.beforeDay(useDate,1))) != 0){
allDates.add(date);
allDates.add(DateUtil.beforeDay(date,1));
allDates.add(DateUtil.AfterDay(date,1));
}
}
}
List<String> allDateList = Lists.newArrayList(allDates);
allDateList = allDateList.stream().sorted(Comparator.comparing(e -> DateUtil.getTime(e).toInstant(ZoneOffset.of("+8")).toEpochMilli())).collect(Collectors.toList());
allDateList = allDateList.stream().map(e->"'"+e+"'").collect(Collectors.toList());
List<List<String>> needAnalysisDateList = Lists.partition(allDateList,200);
List<Map<String,Object>> dataList = Lists.newArrayList();
List<Map<String,Object>> attendaceResult = Lists.newArrayList();
for (List<String> list:needAnalysisDateList){
String dateStrs = String.join(",",list);
String sql = "select id,userid,signdate,signtime from hrmschedulesign where isincom=1 and signdate in ("+dateStrs+") order by signdate,signtime";
List<Map<String,Object>> hrmschedulesignList = DbTools.getSqlToList(sql);
if (hrmschedulesignList.size() > 0){
dataList.addAll(hrmschedulesignList);
}
//补打卡记录
sql = "select id,bdkry userid,dkrq signdate,dksj signtime from uf_jcl_kq_bdkjl where dkrq in ("+dateStrs+") and jlzt=1 order by dkrq,dksj";
List<Map<String,Object>> makeUpList = DbTools.getSqlToList(sql);
if (makeUpList.size() > 0){
dataList.addAll(makeUpList);
}
String sql = "select id,userid,signdate,signtime from hrmschedulesign where isincom=1 and signdate >= ? and signdate <= ? order by signdate,signtime";
List<Map<String,Object>> dataList = DbTools.getSqlToList(sql,DateUtil.beforeDay(allDateList.get(0),2),executeDate);
//补打卡记录
sql = "select id,bdkry userid,dkrq signdate,dksj signtime from uf_jcl_kq_bdkjl where dkrq >= ? and dkrq <= ? and jlzt=1 order by dkrq,dksj";
List<Map<String,Object>> makeUpList = DbTools.getSqlToList(sql,DateUtil.beforeDay(allDateList.get(0),2),executeDate);
if (makeUpList.size() > 0){
dataList.addAll(makeUpList);
sql = "select sjzt,sgsj,ygid,rq from uf_jcl_kq_cqjg where rq in ("+dateStrs+")";
List<Map<String,Object>> resultList = DbTools.getSqlToList(sql);
if (resultList.size() > 0){
attendaceResult.addAll(resultList);
}
}
dataList = dataList.stream().sorted(Comparator.comparing(e->DateUtil.getTime(e.get("signdate")+" "+e.get("signtime")).toInstant(ZoneOffset.of("+8")).toEpochMilli())).collect(Collectors.toList());
Map<String, List<Map<String,Object>>> collect = dataList.stream().collect(Collectors.groupingBy(e -> Util.null2String(e.get("userid"))));
sql = "select sjzt,sgsj,ygid,rq from uf_jcl_kq_cqjg where rq in ("+String.join(",",allDateList)+")";
List<Map<String,Object>> attendaceResult = DbTools.getSqlToList(sql);
Map<String,List<Map<String,Object>>> attendaceGroupById = attendaceResult.stream().collect(Collectors.groupingBy(e->e.get("ygid").toString()));
Map<String,List<Map<String,Object>>> attendaceGroupById = attendaceResult.stream().collect(Collectors.groupingBy(e->e.get("ygid").toString()));
//初始化扩展类
CommonUtil.initExtensionClassHolder();
for (Map<String,Object> userMap:userList){
String userId = Util.null2String(userMap.get("id"));
//入职日期
String companystartDate = Util.null2String(userMap.get("companystartdate"));
List<String> analysisDateList = Lists.newArrayList((Set<String>)attendanceCycle.get(userId));
analysisDateList = analysisDateList.stream().sorted(Comparator.comparing(e -> DateUtil.getTime(e).toInstant(ZoneOffset.of("+8")).toEpochMilli())).collect(Collectors.toList());
//日期对应的打卡数据
Map<String,Map<String,Object>> clockInTimeMap = Maps.newHashMap();
/**获得人员考勤项目*/
Map<String,Object> paramMap = Maps.newHashMap();
paramMap.put("startDate",executeDate);
paramMap.put("endDate",executeDate);
paramMap.put("resourceId",userId);
Map<String,Object> dataMap = basicsetService.getAttendanceItemsByPerson(paramMap);
List<Map<String,Object>> attendanceItems = (List<Map<String,Object>>)dataMap.get("data");
/**
*
*/
Map<String,Object> workHourdataMap = basicsetService.getWorkHoursItemByPerson(paramMap);
List<Map<String,Object>> workHourItems = (List<Map<String,Object>>)workHourdataMap.get("data");
Map<String, List<Map<String, Object>>> attendaceResultMap = Maps.newHashMap();
List<Map<String, Object>> attendaceResultByUser = attendaceGroupById.get(userId);
if (attendaceResultByUser != null && attendaceResultByUser.size() > 0) {
attendaceResultMap = attendaceResultByUser.stream().collect(Collectors.groupingBy(e -> e.get("rq").toString()));
try {
analysisDateList = analysisDateList.stream().filter(e->"".equals(companystartDate) || DateUtil.getTime(e).compareTo(DateUtil.getTime(companystartDate)) >=0).sorted(Comparator.comparing(e -> DateUtil.getTime(e).toInstant(ZoneOffset.of("+8")).toEpochMilli())).collect(Collectors.toList());
//日期对应的打卡数据
Map<String,Map<String,Object>> clockInTimeMap = Maps.newHashMap();
/**获得人员考勤项目*/
Map<String,Object> paramMap = Maps.newHashMap();
paramMap.put("startDate",DateUtil.beforeDay(useDate,1));
paramMap.put("endDate",DateUtil.beforeDay(useDate,1));
paramMap.put("resourceId",userId);
Map<String,Object> dataMap = basicsetService.getAttendanceItemsByPerson(paramMap);
List<Map<String,Object>> attendanceItems = (List<Map<String,Object>>)dataMap.get("data");
/**
*
*/
Map<String,Object> workHourdataMap = basicsetService.getWorkHoursItemByPerson(paramMap);
List<Map<String,Object>> workHourItems = (List<Map<String,Object>>)workHourdataMap.get("data");
Map<String, List<Map<String, Object>>> attendaceResultMap = Maps.newHashMap();
List<Map<String, Object>> attendaceResultByUser = attendaceGroupById.get(userId);
if (attendaceResultByUser != null && attendaceResultByUser.size() > 0) {
attendaceResultMap = attendaceResultByUser.stream().collect(Collectors.groupingBy(e -> e.get("rq").toString()));
}
attendanceAnalysisService.attendanceAnalysis(userId,analysisDateList,collect.get(userMap.get("id")),attendanceItems,workHourItems,clockInTimeMap,attendaceResultMap);
}catch (Exception e){
log.error("AttendanceAnalysisJob userId:[{}],analysisDateList: [{}]",userId,analysisDateList);
log.error("AttendanceAnalysisJob error : [{}]",e);
}
attendanceAnalysisService.attendanceAnalysis(userId,analysisDateList,collect.get(userMap.get("id")),attendanceItems,workHourItems,clockInTimeMap,attendaceResultMap);
}
Map<String,Object> param = Maps.newHashMap();
param.put("startDate",DateUtil.beforeDay(allDateList.get(0),2));
param.put("endDate",executeDate);
param.put("startDate",DateUtil.beforeDay(useDate,3));
param.put("endDate",useDate);
allowanceService.addAllowanceRecords(param);
log.info("********AttendanceAnalysisJob end********");
}
}

@ -13,6 +13,7 @@ import com.engine.jucailinkq.attendance.enums.ClockPointEnum;
import com.engine.jucailinkq.common.util.DateUtil;
import com.engine.jucailinkq.common.util.DbTools;
import com.engine.common.util.ServiceUtil;
import com.engine.jucailinkq.common.util.ExtensionClassHolder;
import com.engine.jucailinkq.common.util.Utils;
import com.engine.core.impl.Service;
import com.google.common.collect.Lists;
@ -354,7 +355,7 @@ public class ShiftServiceImpl extends Service implements ShiftService {
resultMap.put(punchDate,classs);
/** 加班计划*/
sql = "select b.jbry,b.ksrq,b.kssj,b.jblx,b.jsrq,b.jssj,b.jbsc,b.gsrq from uf_jcl_kq_jbjh a left join uf_jcl_kq_jbjh_dt1 b on a.id=b.mainid where b.jbry =? and b.gsrq>=? and b.gsrq<=? and (b.jbcx=0 or b.jbcx is null) and a.jlzt=1";
sql = "select a.id,b.jbry,b.ksrq,b.kssj,b.jblx,b.jsrq,b.jssj,b.jbsc,b.gsrq from uf_jcl_kq_jbjh a left join uf_jcl_kq_jbjh_dt1 b on a.id=b.mainid where b.jbry =? and b.gsrq>=? and b.gsrq<=? and (b.jbcx=0 or b.jbcx is null) and a.jlzt=1";
Map<String,List<Map<String,Object>>> overtimePlanMap = DbTools.getSqlToList(sql,params.get("pbdx"),punchDate,punchDate).stream().collect(Collectors.groupingBy(e -> Util.null2String(e.get("gsrq"))));
//考勤项目
@ -407,11 +408,12 @@ public class ShiftServiceImpl extends Service implements ShiftService {
map.put("dtjssj",overtimePlan.get("jssj"));
map.put("ksdk","0");
map.put("jsdk","0");
map.put("overtimePlanId",overtimePlan.get("id"));
if (punchDate.compareTo(e.getKey()) == 0){
map.put("sfxx", restSign);
}
map.put("tqdkfzs","60");
map.put("thdkfzs","60");
map.put("tqdkfzs", ExtensionClassHolder.getGlobalSetMap().get("defaultClockRange") == null?"60":ExtensionClassHolder.getGlobalSetMap().get("defaultClockRange"));
map.put("thdkfzs",ExtensionClassHolder.getGlobalSetMap().get("defaultClockRange") == null?"60":ExtensionClassHolder.getGlobalSetMap().get("defaultClockRange"));
map.put("rqlx",dateType);
map.put("edxss",overtimePlan.get("jbsc"));
map.put("edfzs",Double.valueOf(overtimePlan.get("jbsc").toString())*60);

@ -87,6 +87,8 @@ public class WorkOverTimeServiceImpl extends Service implements WorkOverTimeServ
}
//获得加班时长以及加班开始时间和结束时间
params.putAll(overTimeDuraionMap);
//加班结果归属日期
params.put("jbgzrq",analysisDate);
//获得加班项目
Map<String,Object> fatherSaveWorkOverTimeMap = commandExecutor.execute(new SaveWorkOverTimeCmd(params));
@ -130,6 +132,7 @@ public class WorkOverTimeServiceImpl extends Service implements WorkOverTimeServ
if (beforeschedule.get("gsrq").equals(ClassBelongToEnum.NOWDAY.getKey())){
beforeschedule.put("overTimeItem",getWorkOvertimeItems(beforeschedule,attendanceItems,false));
}else {
//归属日期不属于当日,重新查找对应的考勤项目
beforeschedule.put("overTimeItem",getWorkOvertimeItems(beforeschedule,attendanceItems,true));
}
@ -150,6 +153,7 @@ public class WorkOverTimeServiceImpl extends Service implements WorkOverTimeServ
if (afterschedule.get("gsrq").equals(ClassBelongToEnum.NOWDAY.getKey())){
afterschedule.put("overTimeItem",getWorkOvertimeItems(afterschedule,attendanceItems,false));
}else {
//归属日期不属于当日,重新查找对应的考勤项目
afterschedule.put("overTimeItem",getWorkOvertimeItems(afterschedule,attendanceItems,true));
}
scheduleMapList.add(afterschedule);
@ -165,7 +169,11 @@ public class WorkOverTimeServiceImpl extends Service implements WorkOverTimeServ
if (CheckBoxEnum.CHECKED.getKey().equals(tqdkjrjb) && CheckBoxEnum.CHECKED.getKey().equals(scheduleMapList.get(0).get("ksdk"))) {
jbsc = DateUtil.getBetWeenMinutes(realityStartTime,scheduleMapList.get(0).get("dtjssj").toString());
}else {
jbsc = DateUtil.getBetWeenMinutes(Utils.getkssjTime(scheduleMapList.get(0),analysisDate),Utils.getjssjTime(scheduleMapList.get(0),analysisDate));
if (scheduleMapList.get(0).get("dtkssj").equals(scheduleMapList.get(0).get("dtjssj"))){
jbsc=0;
}else {
jbsc = DateUtil.getBetWeenMinutes(Utils.getkssjTime(scheduleMapList.get(0),analysisDate),Utils.getjssjTime(scheduleMapList.get(0),analysisDate));
}
}
if (fatherSaveWorkOverTimeMap.get("workOverTimeItems") != null){
@ -189,13 +197,24 @@ public class WorkOverTimeServiceImpl extends Service implements WorkOverTimeServ
beforeParam.put("realityEndime",Utils.getjssjTime(scheduleMapList.get(0),analysisDate));
beforeParam.put("beSplit",true);
beforeParam.put("jbsc",jbsc);
beforeParam.put("jbgzrq",realityStartTime.split(" ")[0]);
if (DateUtil.getTime(realityStartTime.split(" ")[0]).compareTo(DateUtil.getTime(analysisDate)) == 0 &&
DateUtil.getTime(realityEndime.split(" ")[0]).compareTo(DateUtil.getTime(analysisDate)) == 0){
//加班开始和结束都在当天
if (DateUtil.getTime(beforeParam.get("realityEndime").toString()).compareTo(DateUtil.getTime(analysisDate+" 12:00:00")) <0){
//拆分时间在分析日期12点之前归属于上一天
beforeParam.put("jbgzrq",DateUtil.beforeDay(analysisDate,1));
}
Map<String,Object> beforeSaveWorkOverTimeMap = commandExecutor.execute(new SaveWorkOverTimeCmd(beforeParam));
if (beforeSaveWorkOverTimeMap.get("overTimeHoliday") != null){
overTimeHolidayList.add((Map<String,Object>)beforeSaveWorkOverTimeMap.get("overTimeHoliday"));
}
if (beforeSaveWorkOverTimeMap.get("overTimeResult") != null){
overTimeResultList.add((Map<String,Object>)beforeSaveWorkOverTimeMap.get("overTimeResult"));
if (jbsc != 0){
Map<String,Object> beforeSaveWorkOverTimeMap = commandExecutor.execute(new SaveWorkOverTimeCmd(beforeParam));
if (beforeSaveWorkOverTimeMap.get("overTimeHoliday") != null){
overTimeHolidayList.add((Map<String,Object>)beforeSaveWorkOverTimeMap.get("overTimeHoliday"));
}
if (beforeSaveWorkOverTimeMap.get("overTimeResult") != null){
overTimeResultList.add((Map<String,Object>)beforeSaveWorkOverTimeMap.get("overTimeResult"));
}
}
Map<String,Object> afterParam = Maps.newHashMap();
@ -206,14 +225,25 @@ public class WorkOverTimeServiceImpl extends Service implements WorkOverTimeServ
afterParam.put("beSplit",true);
afterParam.put("realityStartTime",Utils.getkssjTime(scheduleMapList.get(1),analysisDate));
afterParam.put("realityEndime",realityEndime);
Map<String,Object> afterSaveWorkOverTimeMap = commandExecutor.execute(new SaveWorkOverTimeCmd(afterParam));
if (afterSaveWorkOverTimeMap.get("overTimeHoliday") != null){
overTimeHolidayList.add((Map<String,Object>)afterSaveWorkOverTimeMap.get("overTimeHoliday"));
afterParam.put("jbgzrq",realityEndime.split(" ")[0]);
if (DateUtil.getTime(realityStartTime.split(" ")[0]).compareTo(DateUtil.getTime(analysisDate)) == 0 &&
DateUtil.getTime(realityEndime.split(" ")[0]).compareTo(DateUtil.getTime(analysisDate)) == 0){
//加班开始和结束都在当天
if (DateUtil.getTime(afterParam.get("realityStartTime").toString()).compareTo(DateUtil.getTime(analysisDate+" 12:00:00")) >=0){
//拆分时间在分析日期12点之后归属于后一天
afterParam.put("jbgzrq",DateUtil.AfterDay(analysisDate,1));
}
}
if (afterSaveWorkOverTimeMap.get("overTimeResult") != null){
overTimeResultList.add((Map<String,Object>)afterSaveWorkOverTimeMap.get("overTimeResult"));
if (afterjbsc != 0){
Map<String,Object> afterSaveWorkOverTimeMap = commandExecutor.execute(new SaveWorkOverTimeCmd(afterParam));
if (afterSaveWorkOverTimeMap.get("overTimeHoliday") != null){
overTimeHolidayList.add((Map<String,Object>)afterSaveWorkOverTimeMap.get("overTimeHoliday"));
}
if (afterSaveWorkOverTimeMap.get("overTimeResult") != null){
overTimeResultList.add((Map<String,Object>)afterSaveWorkOverTimeMap.get("overTimeResult"));
}
}
}
@ -278,6 +308,8 @@ public class WorkOverTimeServiceImpl extends Service implements WorkOverTimeServ
String realityEndime = restOverTimeDuraion.stream().max(Comparator.comparing(e->DateUtil.getTime(e.get("realityEndime").toString()).toInstant(ZoneOffset.of("+8")).toEpochMilli())).get().get("realityEndime").toString();
params.put("realityStartTime",realityStartTime);
params.put("realityEndime",realityEndime);
//加班结果归属日期
params.put("jbgzrq",analysisDate);
Map<String,Object> saveWorkOverTimeMap = commandExecutor.execute(new SaveWorkOverTimeCmd(params));
if (saveWorkOverTimeMap.get("workOverTimeItems") != null){
workOverTimeItemList.add((Map<String,Object>)saveWorkOverTimeMap.get("workOverTimeItems"));

@ -49,8 +49,8 @@ public class AttendanceanalysisAction {
log.info("********AttendanceAnalysisJob start********");
Map<String,Object> paramMap = ParamUtil.request2Map(request);
// Map<String,Object> paramMap = Maps.newHashMap();
// paramMap.put("startDate","2024-08-21");
// paramMap.put("endDate","2024-08-21");
// paramMap.put("startDate","2024-08-16");
// paramMap.put("endDate","2024-08-16");
// paramMap.put("userIds","81");
String startDate = Util.null2String(paramMap.get("startDate"));
@ -59,10 +59,15 @@ public class AttendanceanalysisAction {
String endAfterDate = DateUtil.AfterDay(endDate,2);
String userIds = Util.null2String(paramMap.get("userIds"));
int betweenDays = DateUtil.getBetWeenDays(startDate,endDate);
String queryDepartEmployeeSql = "select resourceid id,changedate name from HRMSTATUSHISTORY where type_n = 5";
//获取离职日期
Map<String,Object> departEmployeeMap = DbTools.getSqlToMapList(queryDepartEmployeeSql);
//初始化扩展类
CommonUtil.initExtensionClassHolder();
if ("".equals(userIds)){
String queryUserSql = "select id from hrmresource where status <> '5' and status <> '4' and status <> '7'";
String queryUserSql = "select id,companystartdate from hrmresource where status <> '5' and status <> '4' and status <> '7'";
List<Map<String,Object>> userList = DbTools.getSqlToList(queryUserSql);
String sql = "select id,userid,signdate,signtime from hrmschedulesign where isincom=1 and signdate >= ? and signdate <= ? order by signdate,signtime";
List<Map<String,Object>> dataList = DbTools.getSqlToList(sql,startBeforeDate,endAfterDate);
@ -83,6 +88,11 @@ public class AttendanceanalysisAction {
for (Map<String,Object> userMap :userList){
String userId = userMap.get("id").toString();
//入职日期
String companystartDate = Util.null2String(userMap.get("companystartdate"));
//离职日期
String terminationDate = Util.null2String(departEmployeeMap.get(userId));
log.info("***********analysis userId:{} start***********", userId);
//出勤结果,进出时间
Map<String,Map<String,Object>> clockInTimeMap = Maps.newHashMap();
@ -123,13 +133,21 @@ public class AttendanceanalysisAction {
for (int i=0; i<=betweenDays;i++){
String date = DateUtil.AfterDay(startDate,i);
attendanceAnalysisService.attendanceAnalysisForApi(userId,date,collect.get(userId),attendanceItems,schedulMap,workHourItems,clockInTimeMap,attendaceResultMap.get(date));
if (("".equals(companystartDate) || DateUtil.getTime(date).compareTo(DateUtil.getTime(companystartDate))>=0)
&& ("".equals(terminationDate) || DateUtil.getTime(date).compareTo(DateUtil.getTime(terminationDate)) <=0)){
attendanceAnalysisService.attendanceAnalysisForApi(userId,date,collect.get(userId),attendanceItems,schedulMap,workHourItems,clockInTimeMap,attendaceResultMap.get(date));
}
}
allowanceService.addAllowanceRecords(paramMap);
}
}else {
String sql = "select id,userid,signdate,signtime from hrmschedulesign where isincom=1 and userid in ("+userIds+") and signdate >= ? and signdate <= ? order by signdate,signtime";
List<Map<String,Object>> dataList = DbTools.getSqlToList(sql,startBeforeDate,endAfterDate);
String queryUserSql = "select id,companystartdate from hrmresource where id in ("+userIds+")";
List<Map<String,Object>> userList = DbTools.getSqlToList(queryUserSql);
Map<String,List<Map<String,Object>>> userGroupMap = userList.stream().collect(Collectors.groupingBy(e->e.get("id").toString()));
//补打卡记录
sql = "select id,bdkry userid,dkrq signdate,dksj signtime from uf_jcl_kq_bdkjl where bdkry in ("+userIds+") and dkrq >= ? and dkrq <= ? and jlzt=1 order by dkrq,dksj";
List<Map<String,Object>> makeUpList = DbTools.getSqlToList(sql,startBeforeDate,endAfterDate);
@ -149,6 +167,11 @@ public class AttendanceanalysisAction {
for (String userId : userIds.split(",")){
/**获得人员考勤项目*/
Map<String,Object> param = Maps.newHashMap();
//入职日期
String companystartDate = Util.null2String(userGroupMap.get(userId).get(0).get("companystartdate"));
//离职日期
String terminationDate = Util.null2String(departEmployeeMap.get(userId));
//出勤结果,进出时间
Map<String,Map<String,Object>> clockInTimeMap = Maps.newHashMap();
param.put("startDate",startBeforeDate);
@ -186,7 +209,11 @@ public class AttendanceanalysisAction {
}
for (int i=0; i<=betweenDays;i++){
String date = DateUtil.AfterDay(startDate,i);
attendanceAnalysisService.attendanceAnalysisForApi(userId,date,collect.get(userId),attendanceItems,schedulMap,workHourItems,clockInTimeMap,attendaceResultMap.get(date));
if (("".equals(companystartDate) || DateUtil.getTime(date).compareTo(DateUtil.getTime(companystartDate))>=0)
&& ("".equals(terminationDate) || DateUtil.getTime(date).compareTo(DateUtil.getTime(terminationDate)) <=0)){
attendanceAnalysisService.attendanceAnalysisForApi(userId,date,collect.get(userId),attendanceItems,schedulMap,workHourItems,clockInTimeMap,attendaceResultMap.get(date));
}
}
}
paramMap.put("empIds",paramMap.get("userIds"));

@ -229,6 +229,7 @@ public class AttendanceAnalysisWrapper extends Service {
clcokInTimeDataParam.put("scheduleResult", scheduleResult);
clcokInTimeDataParam.put("clockInTimeList", clockInTimeList);
clcokInTimeDataParam.put("askForLeaveAndEvctionSchedule", askForLeaveAndEvctionSchedule);
//打卡卡点以及匹配的打卡时间
List<ClockPointDTO> clcokInTimeData = null;
if (clockInTimeDataMap.get(analysisDate) != null){

@ -108,7 +108,7 @@ public class UpdateAttendanceResultWrapper extends Service {
iforgetClockIn.get(0).put("pointType",clcokInTimedto.getPointType());
iforgetClockIn.get(0).put("bdlx",classInfo.get("bdlx"));
iforgetClockIn.get(0).put("clcokInTimeData",clcokInTimeData);
String workfor = Util.null2String(classInfo.get("bdlx"));
String workfor = Utils.getWorkFor(Util.null2String(classInfo.get("bdlx")));
String zysd = Util.null2String(iforgetClockIn.get(0).get("zysd"));
if (zysd.contains(workfor) || zysd.contains(WorkForTimeEnum.ALL_TIME.getKey())){
iforgetClockIn.get(0).put("record",clcokInTimedto.isRecord());
@ -676,7 +676,7 @@ public class UpdateAttendanceResultWrapper extends Service {
}
public int getTimeByWorkFor(String zysd,String zdycbcndfgzsd,List<Map<String, Object>> scheduleResult,String kssj,String jssj,String analysisDate){
List<Map<String, Object>> reusltList = scheduleResult.stream().filter(e->(zysd.contains(Utils.getWorkFor(e.get("bdlx").toString())) && !Utils.ifRestClassSegment(e.get("bdlx").toString())) ||
List<Map<String, Object>> reusltList = scheduleResult.stream().filter(e->(zysd.contains(Utils.getWorkFor(e.get("bdlx").toString())) && !Utils.ifRestClassSegment(e.get("bdlx").toString()) && !Utils.ifAskforOrEvctionClassSegment(e.get("bdlx").toString())) ||
(!CheckBoxEnum.CHECKED.getKey().equals(zdycbcndfgzsd) && Utils.ifRestClassSegment(e.get("bdlx").toString()))).collect(Collectors.toList());
return Utils.removeTime(kssj,jssj,reusltList,analysisDate);

@ -1,11 +1,11 @@
package com.engine.jucailinkq.attendance.component.persongroup.job.scheduling;
import com.engine.jucailinkq.attendance.component.persongroup.job.scheduling.tactics.RegularScheduling;
import com.engine.jucailinkq.common.util.DateUtil;
import com.engine.jucailinkq.common.util.DbTools;
import com.engine.jucailinkq.common.util.Utils;
import lombok.extern.slf4j.Slf4j;
import weaver.common.DateUtil;
import weaver.general.Util;
import weaver.interfaces.schedule.BaseCronJob;
@ -15,10 +15,6 @@ import java.util.Map;
@Slf4j
public class SchedulingJob extends BaseCronJob {
/**
*
*/
String executeDate;
/**
*
*/
@ -30,11 +26,9 @@ public class SchedulingJob extends BaseCronJob {
}
@Override
public void execute() {
if (executeDate == null || "".equals(executeDate)){
executeDate = DateUtil.getCurrentDate();
}
String useDate = com.time.util.DateUtil.getCurrentTime("yyyy-MM-dd");
String sql = "select * from uf_jcl_kq_glpb where edate > ? and bdate<=?";
List<Map<String,Object>> dataList = DbTools.getSqlToList(sql,executeDate,executeDate);
List<Map<String,Object>> dataList = DbTools.getSqlToList(sql,useDate,useDate);
Map<String,String> formmodeIdMap = Utils.getFormmodeIdMap();
//规律排班模块id
String modeId = formmodeIdMap.get("uf_jcl_kq_glpb");
@ -46,7 +40,7 @@ public class SchedulingJob extends BaseCronJob {
e.put("modeId",modeId);
e.put("day",day);
e.put("formmodeid",formmodeid);
e.put("executeDate",executeDate);
e.put("executeDate", DateUtil.getCurrentDate());
String zzqlx = Util.null2String(e.get("zzqlx"));
for (RegularScheduling workOverTimeComputeRuler :rulers){
if (workOverTimeComputeRuler.support(Integer.valueOf(zzqlx))){

@ -56,6 +56,8 @@ public class DayRegularScheduling implements RegularScheduling{
String gbbc = Util.null2String(data.get("gbbc"));
//改班班次是否休息
String gbbcIfRest = CommonUtil.ifrestByClass(gbbc);
//改班候选班组
String gbhxbz = Util.null2String(data.get("gbhxbz"));
//执行日期
String executeDate = Util.null2String(data.get("executeDate"));
@ -139,13 +141,23 @@ public class DayRegularScheduling implements RegularScheduling{
//当为节假日时
if ("0".equals(jjrcl)){
//改班
if ("".equals(gbbc)){
if (("".equals(gbbc) && "0".equals(pbfs)) || ("".equals(gbhxbz) && "1".equals(pbfs))){
//休息
dataMap.put("sfxx","1");
dataMap.put("bcxx",null);
dataMap.put("hxbz",null);
}else {
dataMap.put("bcxx",gbbc);
dataMap.put("sfxx",gbbcIfRest);
if ("0".equals(pbfs)){
//固定班次
dataMap.put("bcxx",gbbc);
dataMap.put("hxbz",null);
dataMap.put("sfxx",gbbcIfRest);
}else {
//打卡匹配
dataMap.put("hxbz",gbhxbz);
dataMap.put("bcxx",null);
dataMap.put("sfxx",gbbcIfRest);
}
}
insertDataList.add(dataMap);
}else if ("1".equals(jjrcl)){
@ -160,13 +172,23 @@ public class DayRegularScheduling implements RegularScheduling{
}else if ("2".equals(rqlx) || "3".equals(rqlx)){
if ("0".equals(gxrcl)){
//改班
if ("".equals(gbbc)){
if (("".equals(gbbc) && "0".equals(pbfs)) || ("".equals(gbhxbz) && "1".equals(pbfs))){
//休息
dataMap.put("sfxx","1");
dataMap.put("bcxx",null);
dataMap.put("hxbz",null);
}else {
dataMap.put("bcxx",gbbc);
dataMap.put("sfxx",gbbcIfRest);
if ("0".equals(pbfs)){
//固定班次
dataMap.put("bcxx",gbbc);
dataMap.put("hxbz",null);
dataMap.put("sfxx",gbbcIfRest);
}else {
//打卡匹配
dataMap.put("hxbz",gbhxbz);
dataMap.put("bcxx",null);
dataMap.put("sfxx",gbbcIfRest);
}
}
insertDataList.add(dataMap);
}else if ("1".equals(gxrcl)){

@ -58,6 +58,8 @@ public class MonthRegularScheduling implements RegularScheduling{
String gbbcIfRest = CommonUtil.ifrestByClass(gbbc);
//执行日期
String executeDate = Util.null2String(data.get("executeDate"));
//改班候选班组
String gbhxbz = Util.null2String(data.get("gbhxbz"));
//规律排班明细表数据
@ -130,13 +132,23 @@ public class MonthRegularScheduling implements RegularScheduling{
//当为节假日时
if ("0".equals(jjrcl)){
//改班
if ("".equals(gbbc)){
if (("".equals(gbbc) && "0".equals(pbfs)) || ("".equals(gbhxbz) && "1".equals(pbfs))){
//休息
dataMap.put("sfxx","1");
dataMap.put("bcxx",null);
dataMap.put("hxbz",null);
}else {
dataMap.put("bcxx",gbbc);
dataMap.put("sfxx",gbbcIfRest);
if ("0".equals(pbfs)){
//固定班次
dataMap.put("bcxx",gbbc);
dataMap.put("hxbz",null);
dataMap.put("sfxx",gbbcIfRest);
}else {
//打卡匹配
dataMap.put("hxbz",gbhxbz);
dataMap.put("bcxx",null);
dataMap.put("sfxx",gbbcIfRest);
}
}
insertDataList.add(dataMap);
}else if ("1".equals(jjrcl)){
@ -151,13 +163,23 @@ public class MonthRegularScheduling implements RegularScheduling{
}else if ("2".equals(rqlx) || "3".equals(rqlx)){
if ("0".equals(gxrcl)){
//改班
if ("".equals(gbbc)){
if (("".equals(gbbc) && "0".equals(pbfs)) || ("".equals(gbhxbz) && "1".equals(pbfs))){
//休息
dataMap.put("sfxx","1");
dataMap.put("bcxx",null);
dataMap.put("hxbz",null);
}else {
dataMap.put("bcxx",gbbc);
dataMap.put("sfxx",gbbcIfRest);
if ("0".equals(pbfs)){
//固定班次
dataMap.put("bcxx",gbbc);
dataMap.put("hxbz",null);
dataMap.put("sfxx",gbbcIfRest);
}else {
//打卡匹配
dataMap.put("hxbz",gbhxbz);
dataMap.put("bcxx",null);
dataMap.put("sfxx",gbbcIfRest);
}
}
insertDataList.add(dataMap);
}else if ("1".equals(gxrcl)){

@ -59,6 +59,8 @@ public class WeekRegularScheduling implements RegularScheduling{
String edate = Util.null2String(data.get("edate"));
//执行日期
String executeDate = Util.null2String(data.get("executeDate"));
//改班候选班组
String gbhxbz = Util.null2String(data.get("gbhxbz"));
//规律排班明细表数据
@ -135,13 +137,23 @@ public class WeekRegularScheduling implements RegularScheduling{
//当为节假日时
if ("0".equals(jjrcl)){
//改班
if ("".equals(gbbc)){
if (("".equals(gbbc) && "0".equals(pbfs)) || ("".equals(gbhxbz) && "1".equals(pbfs))){
//休息
dataMap.put("sfxx","1");
dataMap.put("bcxx",null);
dataMap.put("hxbz",null);
}else {
dataMap.put("bcxx",gbbc);
dataMap.put("sfxx",gbbcIfRest);
if ("0".equals(pbfs)){
//固定班次
dataMap.put("bcxx",gbbc);
dataMap.put("hxbz",null);
dataMap.put("sfxx",gbbcIfRest);
}else {
//打卡匹配
dataMap.put("hxbz",gbhxbz);
dataMap.put("bcxx",null);
dataMap.put("sfxx",gbbcIfRest);
}
}
insertDataList.add(dataMap);
}else if ("1".equals(jjrcl)){
@ -156,13 +168,23 @@ public class WeekRegularScheduling implements RegularScheduling{
}else if ("2".equals(rqlx) || "3".equals(rqlx)){
if ("0".equals(gxrcl)){
//改班
if ("".equals(gbbc)){
if (("".equals(gbbc) && "0".equals(pbfs)) || ("".equals(gbhxbz) && "1".equals(pbfs))){
//休息
dataMap.put("sfxx","1");
dataMap.put("bcxx",null);
dataMap.put("hxbz",null);
}else {
dataMap.put("bcxx",gbbc);
dataMap.put("sfxx",gbbcIfRest);
if ("0".equals(pbfs)){
//固定班次
dataMap.put("bcxx",gbbc);
dataMap.put("hxbz",null);
dataMap.put("sfxx",gbbcIfRest);
}else {
//打卡匹配
dataMap.put("hxbz",gbhxbz);
dataMap.put("bcxx",null);
dataMap.put("sfxx",gbbcIfRest);
}
}
insertDataList.add(dataMap);
}else if ("1".equals(gxrcl)){

@ -59,6 +59,8 @@ public class YearRegularScheduling implements RegularScheduling{
String edate = Util.null2String(data.get("edate"));
//执行日期
String executeDate = Util.null2String(data.get("executeDate"));
//改班候选班组
String gbhxbz = Util.null2String(data.get("gbhxbz"));
//规律排班明细表数据
@ -139,13 +141,23 @@ public class YearRegularScheduling implements RegularScheduling{
//当为节假日时
if ("0".equals(jjrcl)){
//改班
if ("".equals(gbbc)){
if (("".equals(gbbc) && "0".equals(pbfs)) || ("".equals(gbhxbz) && "1".equals(pbfs))){
//休息
dataMap.put("sfxx","1");
dataMap.put("bcxx",null);
dataMap.put("hxbz",null);
}else {
dataMap.put("bcxx",gbbc);
dataMap.put("sfxx",gbbcIfRest);
if ("0".equals(pbfs)){
//固定班次
dataMap.put("bcxx",gbbc);
dataMap.put("hxbz",null);
dataMap.put("sfxx",gbbcIfRest);
}else {
//打卡匹配
dataMap.put("hxbz",gbhxbz);
dataMap.put("bcxx",null);
dataMap.put("sfxx",gbbcIfRest);
}
}
insertDataList.add(dataMap);
}else if ("1".equals(jjrcl)){
@ -160,13 +172,23 @@ public class YearRegularScheduling implements RegularScheduling{
}else if ("2".equals(rqlx) || "3".equals(rqlx)){
if ("0".equals(gxrcl)){
//改班
if ("".equals(gbbc)){
if (("".equals(gbbc) && "0".equals(pbfs)) || ("".equals(gbhxbz) && "1".equals(pbfs))){
//休息
dataMap.put("sfxx","1");
dataMap.put("bcxx",null);
dataMap.put("hxbz",null);
}else {
dataMap.put("bcxx",gbbc);
dataMap.put("sfxx",gbbcIfRest);
if ("0".equals(pbfs)){
//固定班次
dataMap.put("bcxx",gbbc);
dataMap.put("hxbz",null);
dataMap.put("sfxx",gbbcIfRest);
}else {
//打卡匹配
dataMap.put("hxbz",gbhxbz);
dataMap.put("bcxx",null);
dataMap.put("sfxx",gbbcIfRest);
}
}
insertDataList.add(dataMap);
}else if ("1".equals(gxrcl)){

@ -76,7 +76,7 @@ public class VocationCmd extends AbstractCommonCommand<Map<String,Object>> {
vocation.put("ljcrglyfslwzValue",ljcrglyfslwzValue);
vocation.put("zyzValue",getUserIds(vocation));
}
log.info("VocationCmd params: [{}]",params);
log.debug("VocationCmd params: [{}]",params);
String edfffs = Util.null2String(vocationList.get(0).get("edfffs"));
for (HolidayGenerationWay holidayGenerationWay :rulers){
if (holidayGenerationWay.support(Integer.valueOf(edfffs))){

@ -5,10 +5,12 @@ import com.engine.jucailinkq.attendance.vacation.service.impl.VocationServiceImp
import com.engine.common.util.ServiceUtil;
import com.engine.jucailinkq.common.util.Utils;
import com.google.common.collect.Maps;
import lombok.extern.slf4j.Slf4j;
import weaver.interfaces.schedule.BaseCronJob;
import java.util.Map;
@Slf4j
public class HolidayGenerationJob extends BaseCronJob {
private VocationService basicsetService = ServiceUtil.getService(VocationServiceImpl.class);
@ -24,6 +26,8 @@ public class HolidayGenerationJob extends BaseCronJob {
private String executeDate;
@Override
public void execute() {
log.info("**********HolidayGenerationJob start ************");
log.info("**********HolidayGenerationJob executeDate :[{}]********",executeDate);
Map<String,String> formmodeIdMap = Utils.getFormmodeIdMap();
//假期额度模块id
String modeId = formmodeIdMap.get("uf_jcl_kq_jqed");

@ -547,7 +547,7 @@ public class Utils<T> {
* @return
*/
public static int dinnerTime(String kssj,String jssj,List<Map<String, Object>> scheduleResult,String analysisDate){
scheduleResult = scheduleResult.stream().filter(e ->ClassSegmentTypeEnum.DINING_PERIOD.getKey().equals(e.get("bdlx"))).collect(Collectors.toList());
scheduleResult = scheduleResult.stream().filter(e ->Utils.ifRestClassSegment(e.get("bdlx").toString())).collect(Collectors.toList());
int dinnerTime = removeTime(kssj,jssj,scheduleResult,analysisDate);
return dinnerTime;
}

@ -0,0 +1,2 @@
package TestAttendanceAllowance;public class TestScheduleJob {
}
Loading…
Cancel
Save