Merge remote-tracking branch 'origin/dev' into dev

dev-chenwnj
howec 1 year ago
commit b6b2c37e1d

@ -21,6 +21,10 @@ import weaver.general.InitServer;
import weaver.general.Util;
import weaver.interfaces.sskj.comInfo.PropBean;
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@ -31,6 +35,7 @@ import java.util.regex.Pattern;
public class KQFormatData extends BaseBean {
private String today = DateUtil.getCurrentDate();
private KQLog kqLog = new KQLog();
BaseBean bb = new BaseBean();
private boolean writeLog = false;
private LinkedHashMap<String,Object> logInfo = new LinkedHashMap<>();
@ -704,12 +709,16 @@ public class KQFormatData extends BaseBean {
kqShiftRuleEntity.setEarlyInMins(earlyInMins);
kqShiftRuleEntity.setLateOutMins(lateOutMins);
kqLog.info("人性化规则处理前数据" + JSONObject.toJSONString(kqShiftRuleEntity));
bb.writeLog("人性化规则处理前数据" + JSONObject.toJSONString(kqShiftRuleEntity));
if(this.writeLog) {
logInfo.put(""+weaver.systeminfo.SystemEnv.getHtmlLabelName(10005301,weaver.general.ThreadVarLanguage.getLang())+"",kqShiftRuleEntity);
}
//人性化规则
kqShiftRuleEntity = kqFormatShiftRule.doShiftRule(workTime,kqShiftRuleEntity);
kqLog.info("人性化规则处理后数据" + JSONObject.toJSONString(kqShiftRuleEntity));
bb.writeLog("人性化规则处理后数据" + JSONObject.toJSONString(kqShiftRuleEntity));
if(this.writeLog) {
logInfo.put(""+weaver.systeminfo.SystemEnv.getHtmlLabelName(10005302,weaver.general.ThreadVarLanguage.getLang())+"",kqShiftRuleEntity);
}
@ -787,6 +796,71 @@ public class KQFormatData extends BaseBean {
forgotCheckMins = 0;
forgotBeginWorkCheckMins = 0;
}
/*考勤二开--值夜班班次的考勤人员第二天排了行政班在8:05之前打卡行政班就算正常考勤start*/
//首先获取当前班次,判断是否为行政岗这个班次
bb.writeLog("-----连班行政岗二开start-----");
String serialidKq = Util.null2String(workTime.getSerialId());
bb.writeLog("serialidKq: " + serialidKq);
String adminShift = Util.null2String(bb.getPropValue("project_sskj", "administrativeShift"));
bb.writeLog("adminShift: " + adminShift);
String nightShift = Util.null2String(bb.getPropValue("project_sskj", "nightShift"));
bb.writeLog("nightShift: " + nightShift);
if ( StringUtils.isNotBlank(adminShift) && serialidKq.equals(adminShift) ) {
//获取前一天的班次,判断是否为值夜班这个班次--因为肯定是排班制,所有只需要获取前一天排的班次就行了
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate date = LocalDate.parse(kqDate, formatter);
LocalDate yesterday = date.minusDays(1);
String yesterdayString = yesterday.format(formatter);
bb.writeLog("yesterdayString: " + yesterdayString);
KQShiftScheduleComInfo kq = new KQShiftScheduleComInfo();
String serialId = kq.getSerialId(userId, yesterdayString);
bb.writeLog("serialId: " + serialId);
if (serialId.equals(nightShift)) {
//根据今天的考勤开始时间,判断打卡是否在班次开始时间后的五分钟之内
//计算workBeginTime到worktime的时间差
String beginTime = workBeginTime;
bb.writeLog("beginTime: " + beginTime);
String endTime = "";
for (int j = 0; lsCheckInfo != null && j < lsCheckInfo.size(); j++) {
Map<String, Object> checkInfo = (Map<String, Object>) lsCheckInfo.get(j);
String signType = Util.null2String(checkInfo.get("signType"));
String signTime = Util.null2String(checkInfo.get("signTime"));
if (signType.equals("1")) {
endTime = signTime;
}
}
bb.writeLog("endTime: " + endTime);
if (StringUtils.isNotBlank(endTime)) {
if (beginTime.length() == 5) {
beginTime = beginTime + ":00";
}
LocalTime timeEnd = LocalTime.parse(endTime);
LocalTime timeStart = LocalTime.parse(beginTime);
long minutesDifference = ChronoUnit.MINUTES.between(timeStart, timeEnd);
bb.writeLog("minutesDifference: " + minutesDifference);
if (minutesDifference<=5) {
//获取迟到时长
if (beLateMins <= 5) {
beLateMins = 0;
}
}
}
}
}
bb.writeLog("attendanceMins: " + attendanceMins);
bb.writeLog("beLateMins: " + beLateMins);
bb.writeLog("leaveMins: " + leaveMins);
bb.writeLog("-----连班行政岗二开end-----");
/*考勤二开--值夜班班次的考勤人员第二天排了行政班在8:05之前打卡行政班就算正常考勤end*/
//考勤二开--取消漏签,改为旷工(规则工作时长就是480,直接全天旷工)start
if ( forgotCheckMins > 0) {
@ -879,11 +953,15 @@ public class KQFormatData extends BaseBean {
params.add(0);
params.add(0);
params.add(0);
params.add(new JSONObject());
Map<String,Object> leaveInfo_gx = new HashMap<>();//请假信息
Map<String,Object> otherinfo_gx = new HashMap<>();//存一些用得到的信息
params.add(JSONObject.toJSONString(leaveInfo_gx));
params.add(0);
params.add(0);
params.add(0);
params.add(new JSONObject());
params.add(JSONObject.toJSONString(otherinfo_gx));
}else{
params.add(signInDate);

@ -1368,6 +1368,20 @@ public class KQReportBiz extends BaseBean {
signStatusInfo.put("outMins",outMins);
signStatusInfo.put("isneedcal",isneedcal);
/*考勤二开--当前时间在当天班次下班点之前不显示旷工start*/
String nowDay = cn.hutool.core.date.DateUtil.format(new Date(), "yyyy-MM-dd");
String nowTime = cn.hutool.core.date.DateUtil.format(new Date(), "HH:mm");
basebean.writeLog("nowDay: " + nowDay);
basebean.writeLog("nowTime: " + nowTime);
basebean.writeLog("workenddate: " + workenddate);
basebean.writeLog("workendtime: " + kqTimesArrayComInfo.turn48to24Time(workendtime));
if (workenddate.equals(nowDay) && nowTime.compareTo(kqTimesArrayComInfo.turn48to24Time(workendtime)) < 0) {
signStatusInfo.put("isneedcal","1");
}
basebean.writeLog("signStatusInfo: " + signStatusInfo);
/*考勤二开--当前时间在当天班次下班点之前不显示旷工end*/
data.put(tmpkey+"signintime"+serialnumber, signintime.length()==0?SystemEnv.getHtmlLabelName(25994, user.getLanguage()):signintime);
data.put(tmpkey+"signinstatus"+serialnumber, KQReportBiz.getSignStatus(signStatusInfo,user,"on"));
}
@ -1387,6 +1401,20 @@ public class KQReportBiz extends BaseBean {
signStatusInfo.put("outMins",outMins);
signStatusInfo.put("isneedcal",isneedcal);
/*考勤二开--当前时间在当天班次下班点之前不显示旷工start*/
String nowDay = cn.hutool.core.date.DateUtil.format(new Date(), "yyyy-MM-dd");
String nowTime = cn.hutool.core.date.DateUtil.format(new Date(), "HH:mm");
basebean.writeLog("nowDay: " + nowDay);
basebean.writeLog("nowTime: " + nowTime);
basebean.writeLog("workenddate: " + workenddate);
basebean.writeLog("workendtime: " + kqTimesArrayComInfo.turn48to24Time(workendtime));
if (workenddate.equals(nowDay) && nowTime.compareTo(kqTimesArrayComInfo.turn48to24Time(workendtime)) < 0) {
signStatusInfo.put("isneedcal","1");
}
basebean.writeLog("signStatusInfo: " + signStatusInfo);
/*考勤二开--当前时间在当天班次下班点之前不显示旷工end*/
data.put(tmpkey+"signouttime"+serialnumber, signouttime.length()==0?SystemEnv.getHtmlLabelName(25994, user.getLanguage()):signouttime);
data.put(tmpkey+"signoutstatus"+serialnumber, KQReportBiz.getSignStatus(signStatusInfo,user,"off"));
}
@ -2282,11 +2310,19 @@ public class KQReportBiz extends BaseBean {
}
public static String getSignStatus(Map<String,Object> signInfo, User user,String onOrOff){
BaseBean bb = new BaseBean();
bb.writeLog("getSignStatus start");
KQLeaveRulesComInfo kqLeaveRulesComInfo = new KQLeaveRulesComInfo();
String text = "";
String isneedcal = Util.null2String(signInfo.get("isneedcal"));
bb.writeLog("isneedcal: " + isneedcal);
String workdate = Util.null2String(signInfo.get("workdate"));
bb.writeLog("workdate: " + workdate);
String worktime = Util.null2String(signInfo.get("worktime"));
bb.writeLog("worktime: " + worktime);
if(!new KQFormatBiz().needCal(workdate,worktime,isneedcal)) {//还未到时间无需计算
return text;
}

@ -1,5 +1,6 @@
package com.engine.kq.cmd.attendanceEvent;
import cn.hutool.core.date.DateUtil;
import com.engine.common.biz.AbstractCommonCommand;
import com.engine.common.entity.BizLogContext;
import com.engine.core.interceptor.CommandContext;
@ -14,208 +15,272 @@ import weaver.systeminfo.SystemEnv;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
/**
*
*/
public class GetAttendanceCardCmd extends AbstractCommonCommand<Map<String, Object>> {
public GetAttendanceCardCmd(Map<String, Object> params, User user) {
this.user = user;
this.params = params;
}
public GetAttendanceCardCmd(Map<String, Object> params, User user) {
this.user = user;
this.params = params;
}
BaseBean basebean = new BaseBean();
@Override
public Map<String, Object> execute(CommandContext commandContext) {
Map<String, Object> retmap = new HashMap<String, Object>();
RecordSet rs = new RecordSet();
@Override
public Map<String, Object> execute(CommandContext commandContext) {
Map<String, Object> retmap = new HashMap<String, Object>();
RecordSet rs = new RecordSet();
basebean.writeLog("-----------GetAttendanceCardCmd to do------------");
try{
String resourceId = Util.null2String(params.get("resourceId"));
String fromDate = Util.null2String(params.get("fromDate"));
String toDate = Util.null2String(params.get("toDate"));
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate fromLocalDate = LocalDate.parse(fromDate);
LocalDate toLocalDate = LocalDate.parse(toDate);
if(fromLocalDate.isAfter(toLocalDate)){
retmap.put("status", "-1");
return retmap;
}
KQTimesArrayComInfo kqTimesArrayComInfo = new KQTimesArrayComInfo();
List<Map<String,String>> cardList = new ArrayList<>();
Map<String,String> cardMap = new HashMap<>();
KQReportBiz kqReportBiz = new KQReportBiz();
List<Object> reporsts = kqReportBiz.getKqDateInfo(resourceId, fromDate, toDate, false);
basebean.writeLog("reporsts: " + reporsts);
for(int i = 0 ; i < reporsts.size() ; i++) {
Map<String, Object> kqdateMap = (Map<String, Object>) reporsts.get(i);
String kqdate = Util.null2String(kqdateMap.get("kqdate"));
List<Object> checkInfoList = (List<Object>) kqdateMap.get("checkInfo");
//每一个工作时段里的考勤状态
for (int j = 0; j < checkInfoList.size(); j++) {
Map<String, Object> data = (Map<String, Object>) checkInfoList.get(j);
String status = Util.null2String(data.get("status"));
String workbegindate = Util.null2String(data.get("workbegindate"));
String workenddate = Util.null2String(data.get("workenddate"));
String signintime = Util.null2String(data.get("signintime"));
String signouttime = Util.null2String(data.get("signouttime"));
String workbegintime = Util.null2String(data.get("workbegintime"));
String workendtime = Util.null2String(data.get("workendtime"));
String start = Util.null2String(data.get("start"));
String end = Util.null2String(data.get("end"));
int workbegintime_index = kqTimesArrayComInfo.getArrayindexByTimes(workbegintime);
int workbegintime_index_n = workbegintime_index > KQTimesArrayComInfo.getOneDayArraySize() ? workbegintime_index-KQTimesArrayComInfo.getOneDayArraySize() : workbegintime_index;
workbegintime = kqTimesArrayComInfo.getTimesByArrayindex(workbegintime_index_n);
int workendtime_index = kqTimesArrayComInfo.getArrayindexByTimes(workendtime);
int workendtime_index_n = workendtime_index > KQTimesArrayComInfo.getOneDayArraySize() ? workendtime_index-KQTimesArrayComInfo.getOneDayArraySize() : workendtime_index;
workendtime = kqTimesArrayComInfo.getTimesByArrayindex(workendtime_index_n);
String scheduletime = workbegintime + "-" + workendtime;
String[] status_s = status.split(",");
if(status_s != null && status.length() > 0){
for(int s = 0 ; s < status_s.length ; s++){
String tmp_status = status_s[s];
cardMap = new HashMap<>();
if (ButtonStatusEnum.BELATE.getStatusCode().equalsIgnoreCase(tmp_status)) {
//考勤二开--迟到早退不允许补卡start
continue;
//end
// //迟到
// cardMap = new HashMap<>();
// cardMap.put("signdate", workbegindate);
// cardMap.put("scheduletime", scheduletime);
// cardMap.put("atteStatus", SystemEnv.getHtmlLabelName(10000805, Util.getIntValue(user.getLanguage()))+signintime);
// //下拉框0是签到1是签退
// cardMap.put("signtype", "0");
// cardMap.put("signtime", workbegintime);
// cardList.add(cardMap);
}
if (ButtonStatusEnum.LEAVEERALY.getStatusCode().equalsIgnoreCase(tmp_status)) {
//考勤二开--迟到早退不允许补卡start
continue;
//end
// //早退
// cardMap = new HashMap<>();
// cardMap.put("signdate", workenddate);
// cardMap.put("scheduletime", scheduletime);
// cardMap.put("atteStatus", SystemEnv.getHtmlLabelName(10000806, Util.getIntValue(user.getLanguage()))+signouttime);
// //下拉框0是签到1是签退
// cardMap.put("signtype", "1");
// cardMap.put("signtime", workendtime);
// cardList.add(cardMap);
}
if (ButtonStatusEnum.ABSENT.getStatusCode().equalsIgnoreCase(tmp_status)) {
//旷工
if(!start.equals("1")) {
try{
String resourceId = Util.null2String(params.get("resourceId"));
String fromDate = Util.null2String(params.get("fromDate"));
String toDate = Util.null2String(params.get("toDate"));
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate fromLocalDate = LocalDate.parse(fromDate);
LocalDate toLocalDate = LocalDate.parse(toDate);
//考勤二开
String nowDay = DateUtil.format(new Date(),"yyyy-MM-dd");
String nowTime = DateUtil.format(new Date(),"HH:mm");
if(fromLocalDate.isAfter(toLocalDate)){
retmap.put("status", "-1");
return retmap;
}
KQTimesArrayComInfo kqTimesArrayComInfo = new KQTimesArrayComInfo();
List<Map<String,String>> cardList = new ArrayList<>();
Map<String,String> cardMap = new HashMap<>();
KQReportBiz kqReportBiz = new KQReportBiz();
List<Object> reporsts = kqReportBiz.getKqDateInfo(resourceId, fromDate, toDate, false);
basebean.writeLog("reporsts: " + reporsts);
for(int i = 0 ; i < reporsts.size() ; i++) {
Map<String, Object> kqdateMap = (Map<String, Object>) reporsts.get(i);
String kqdate = Util.null2String(kqdateMap.get("kqdate"));
List<Object> checkInfoList = (List<Object>) kqdateMap.get("checkInfo");
//每一个工作时段里的考勤状态
for (int j = 0; j < checkInfoList.size(); j++) {
Map<String, Object> data = (Map<String, Object>) checkInfoList.get(j);
String status = Util.null2String(data.get("status"));
String workbegindate = Util.null2String(data.get("workbegindate"));
String workenddate = Util.null2String(data.get("workenddate"));
String signintime = Util.null2String(data.get("signintime"));
String signouttime = Util.null2String(data.get("signouttime"));
String workbegintime = Util.null2String(data.get("workbegintime"));
String workendtime = Util.null2String(data.get("workendtime"));
String start = Util.null2String(data.get("start"));
String end = Util.null2String(data.get("end"));
int workbegintime_index = kqTimesArrayComInfo.getArrayindexByTimes(workbegintime);
int workbegintime_index_n = workbegintime_index > KQTimesArrayComInfo.getOneDayArraySize() ? workbegintime_index-KQTimesArrayComInfo.getOneDayArraySize() : workbegintime_index;
workbegintime = kqTimesArrayComInfo.getTimesByArrayindex(workbegintime_index_n);
int workendtime_index = kqTimesArrayComInfo.getArrayindexByTimes(workendtime);
int workendtime_index_n = workendtime_index > KQTimesArrayComInfo.getOneDayArraySize() ? workendtime_index-KQTimesArrayComInfo.getOneDayArraySize() : workendtime_index;
workendtime = kqTimesArrayComInfo.getTimesByArrayindex(workendtime_index_n);
String scheduletime = workbegintime + "-" + workendtime;
String[] status_s = status.split(",");
if(status_s != null && status.length() > 0){
for(int s = 0 ; s < status_s.length ; s++){
String tmp_status = status_s[s];
cardMap = new HashMap<>();
cardMap.put("signdate", workbegindate);
cardMap.put("scheduletime", scheduletime);
String atteStatus0 = SystemEnv.getHtmlLabelName(20085, Util.getIntValue(user.getLanguage()));
// if (signintime.length() > 0) {
// atteStatus0 += SystemEnv.getHtmlLabelName(10000807, Util.getIntValue(user.getLanguage())) + signintime;
// }
// cardMap.put("atteStatus", atteStatus0);
// //下拉框0是上班1是下班
// cardMap.put("signtype", "0");
// cardMap.put("signtime", workbegintime);
// cardList.add(cardMap);
//考勤二开--漏签转旷工start
if (signintime.length() > 0) {
} else {
cardMap.put("atteStatus", atteStatus0);
//下拉框0是上班1是下班
cardMap.put("signtype", "0");
cardMap.put("signtime", workbegintime);
cardList.add(cardMap);
if (ButtonStatusEnum.BELATE.getStatusCode().equalsIgnoreCase(tmp_status)) {
//考勤二开--迟到早退不允许补卡start
continue;
//end
// //迟到
// cardMap = new HashMap<>();
// cardMap.put("signdate", workbegindate);
// cardMap.put("scheduletime", scheduletime);
// cardMap.put("atteStatus", SystemEnv.getHtmlLabelName(10000805, Util.getIntValue(user.getLanguage()))+signintime);
// //下拉框0是签到1是签退
// cardMap.put("signtype", "0");
// cardMap.put("signtime", workbegintime);
// cardList.add(cardMap);
}
//end
if (ButtonStatusEnum.LEAVEERALY.getStatusCode().equalsIgnoreCase(tmp_status)) {
//考勤二开--迟到早退不允许补卡start
continue;
//end
// //早退
// cardMap = new HashMap<>();
// cardMap.put("signdate", workenddate);
// cardMap.put("scheduletime", scheduletime);
// cardMap.put("atteStatus", SystemEnv.getHtmlLabelName(10000806, Util.getIntValue(user.getLanguage()))+signouttime);
// //下拉框0是签到1是签退
// cardMap.put("signtype", "1");
// cardMap.put("signtime", workendtime);
// cardList.add(cardMap);
}
if (ButtonStatusEnum.ABSENT.getStatusCode().equalsIgnoreCase(tmp_status)) {
//旷工
/*考勤二开--当前时间在当前班次下班点之前不允许出现下班旷工补卡start*/
basebean.writeLog("workenddate: " + workenddate);
if (workenddate.equals(nowDay)) {//当天
basebean.writeLog("nowTime: " + nowTime);
basebean.writeLog("workendtime: " + workendtime);
if (nowTime.compareTo(workendtime) > 0) {
if(!start.equals("1")) {
cardMap = new HashMap<>();
cardMap.put("signdate", workbegindate);
cardMap.put("scheduletime", scheduletime);
String atteStatus0 = SystemEnv.getHtmlLabelName(20085, Util.getIntValue(user.getLanguage()));
// if (signintime.length() > 0) {
// atteStatus0 += SystemEnv.getHtmlLabelName(10000807, Util.getIntValue(user.getLanguage())) + signintime;
// }
// cardMap.put("atteStatus", atteStatus0);
// //下拉框0是上班1是下班
// cardMap.put("signtype", "0");
// cardMap.put("signtime", workbegintime);
// cardList.add(cardMap);
//考勤二开--漏签转旷工start
if (signintime.length() > 0) {
} else {
cardMap.put("atteStatus", atteStatus0);
//下拉框0是上班1是下班
cardMap.put("signtype", "0");
cardMap.put("signtime", workbegintime);
cardList.add(cardMap);
}
//end
}
if(!end.equals("1")) {
cardMap = new HashMap<>();
cardMap.put("signdate", workenddate);
cardMap.put("scheduletime", scheduletime);
String atteStatus1 = SystemEnv.getHtmlLabelName(20085, Util.getIntValue(user.getLanguage()));
// if (signouttime.length() > 0) {
// atteStatus1 += SystemEnv.getHtmlLabelName(10000808, Util.getIntValue(user.getLanguage())) + signouttime;
// }
// cardMap.put("atteStatus", atteStatus1);
// //下拉框0是上班1是下班
// cardMap.put("signtype", "1");
// cardMap.put("signtime", workendtime);
// cardList.add(cardMap);
//考勤二开--漏签转旷工start
if (signouttime.length() > 0) {
} else {
cardMap.put("atteStatus", atteStatus1);
}
if(!end.equals("1")) {
cardMap = new HashMap<>();
cardMap.put("signdate", workenddate);
cardMap.put("scheduletime", scheduletime);
String atteStatus1 = SystemEnv.getHtmlLabelName(20085, Util.getIntValue(user.getLanguage()));
// if (signouttime.length() > 0) {
// atteStatus1 += SystemEnv.getHtmlLabelName(10000808, Util.getIntValue(user.getLanguage())) + signouttime;
// }
// cardMap.put("atteStatus", atteStatus1);
// //下拉框0是上班1是下班
// cardMap.put("signtype", "1");
// cardMap.put("signtime", workendtime);
// cardList.add(cardMap);
//考勤二开--漏签转旷工start
if (signouttime.length() > 0) {
} else {
cardMap.put("atteStatus", atteStatus1);
//下拉框0是上班1是下班
cardMap.put("signtype", "1");
cardMap.put("signtime", workendtime);
cardList.add(cardMap);
}
//end
}
}
} else {
if(!start.equals("1")) {
cardMap = new HashMap<>();
cardMap.put("signdate", workbegindate);
cardMap.put("scheduletime", scheduletime);
String atteStatus0 = SystemEnv.getHtmlLabelName(20085, Util.getIntValue(user.getLanguage()));
// if (signintime.length() > 0) {
// atteStatus0 += SystemEnv.getHtmlLabelName(10000807, Util.getIntValue(user.getLanguage())) + signintime;
// }
// cardMap.put("atteStatus", atteStatus0);
// //下拉框0是上班1是下班
// cardMap.put("signtype", "0");
// cardMap.put("signtime", workbegintime);
// cardList.add(cardMap);
//考勤二开--漏签转旷工start
if (signintime.length() > 0) {
} else {
cardMap.put("atteStatus", atteStatus0);
//下拉框0是上班1是下班
cardMap.put("signtype", "0");
cardMap.put("signtime", workbegintime);
cardList.add(cardMap);
}
//end
}
if(!end.equals("1")) {
cardMap = new HashMap<>();
cardMap.put("signdate", workenddate);
cardMap.put("scheduletime", scheduletime);
String atteStatus1 = SystemEnv.getHtmlLabelName(20085, Util.getIntValue(user.getLanguage()));
// if (signouttime.length() > 0) {
// atteStatus1 += SystemEnv.getHtmlLabelName(10000808, Util.getIntValue(user.getLanguage())) + signouttime;
// }
// cardMap.put("atteStatus", atteStatus1);
// //下拉框0是上班1是下班
// cardMap.put("signtype", "1");
// cardMap.put("signtime", workendtime);
// cardList.add(cardMap);
//考勤二开--漏签转旷工start
if (signouttime.length() > 0) {
} else {
cardMap.put("atteStatus", atteStatus1);
//下拉框0是上班1是下班
cardMap.put("signtype", "1");
cardMap.put("signtime", workendtime);
cardList.add(cardMap);
}
//end
}
}
/*考勤二开--当前时间在当前班次下班点之前不允许出现下班旷工补卡end*/
}
if (ButtonStatusEnum.NOSIGN.getStatusCode().equalsIgnoreCase(tmp_status)) {
//漏签
cardMap = new HashMap<>();
cardMap.put("signdate", workenddate);
cardMap.put("scheduletime", scheduletime);
cardMap.put("atteStatus", SystemEnv.getHtmlLabelName(20086, Util.getIntValue(user.getLanguage())));
//下拉框0是上班1是下班
cardMap.put("signtype", "1");
cardMap.put("signtime", workendtime);
cardList.add(cardMap);
}
//end
if (ButtonStatusEnum.NOSIGN_ON.getStatusCode().equalsIgnoreCase(tmp_status)) {
//上班漏签
cardMap = new HashMap<>();
cardMap.put("signdate", workbegindate);
cardMap.put("scheduletime", scheduletime);
cardMap.put("atteStatus", SystemEnv.getHtmlLabelName(20086, Util.getIntValue(user.getLanguage())));
//下拉框0是上班1是下班
cardMap.put("signtype", "0");
cardMap.put("signtime", workbegintime);
cardList.add(cardMap);
}
}
}
if (ButtonStatusEnum.NOSIGN.getStatusCode().equalsIgnoreCase(tmp_status)) {
//漏签
cardMap = new HashMap<>();
cardMap.put("signdate", workenddate);
cardMap.put("scheduletime", scheduletime);
cardMap.put("atteStatus", SystemEnv.getHtmlLabelName(20086, Util.getIntValue(user.getLanguage())));
//下拉框0是上班1是下班
cardMap.put("signtype", "1");
cardMap.put("signtime", workendtime);
cardList.add(cardMap);
}
if (ButtonStatusEnum.NOSIGN_ON.getStatusCode().equalsIgnoreCase(tmp_status)) {
//上班漏签
cardMap = new HashMap<>();
cardMap.put("signdate", workbegindate);
cardMap.put("scheduletime", scheduletime);
cardMap.put("atteStatus", SystemEnv.getHtmlLabelName(20086, Util.getIntValue(user.getLanguage())));
//下拉框0是上班1是下班
cardMap.put("signtype", "0");
cardMap.put("signtime", workbegintime);
cardList.add(cardMap);
}
}
}
}
}
retmap.put("cardlist", cardList);
retmap.put("status", "1");
retmap.put("cardlist", cardList);
retmap.put("status", "1");
}catch (Exception e) {
retmap.put("status", "-1");
retmap.put("message", SystemEnv.getHtmlLabelName(382661,user.getLanguage()));
writeLog(e);
}
return retmap;
}
}catch (Exception e) {
retmap.put("status", "-1");
retmap.put("message", SystemEnv.getHtmlLabelName(382661,user.getLanguage()));
writeLog(e);
}
return retmap;
}
@Override
public BizLogContext getLogContext() {
return null;
}
public BizLogContext getLogContext() {
return null;
}
}

@ -1,5 +1,6 @@
package com.engine.kq.cmd.report;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.engine.common.biz.AbstractCommonCommand;
@ -12,6 +13,7 @@ import com.engine.kq.log.KQLog;
import com.engine.kq.util.KQDurationCalculatorUtil;
import com.engine.kq.util.PageUidFactory;
import weaver.conn.RecordSet;
import weaver.general.BaseBean;
import weaver.general.TimeUtil;
import weaver.general.Util;
import weaver.hrm.User;
@ -26,7 +28,8 @@ import java.util.*;
public class GetKQDailyReportCmd extends AbstractCommonCommand<Map<String, Object>> {
private KQLog kqLog = new KQLog();
private KQLog kqLog = new KQLog();
BaseBean bb = new BaseBean();
public GetKQDailyReportCmd(Map<String, Object> params, User user) {
this.user = user;
@ -42,7 +45,7 @@ public class GetKQDailyReportCmd extends AbstractCommonCommand<Map<String, Objec
String pageUid = PageUidFactory.getHrmPageUid("KQDailyReport");
SubCompanyComInfo subCompanyComInfo = new SubCompanyComInfo();
DepartmentComInfo departmentComInfo = new DepartmentComInfo();
DepartmentComInfo departmentComInfo = new DepartmentComInfo();
ResourceComInfo resourceComInfo = new ResourceComInfo();
JobTitlesComInfo jobTitlesComInfo = new JobTitlesComInfo();
KQWorkTime kqWorkTime = new KQWorkTime();
@ -66,8 +69,8 @@ public class GetKQDailyReportCmd extends AbstractCommonCommand<Map<String, Objec
toDate = TimeUtil.getDateByOption(typeselect,"1");
}
}
//人员状态
String status = Util.null2String(jsonObj.get("status"));
//人员状态
String status = Util.null2String(jsonObj.get("status"));
String subCompanyId = Util.null2String(jsonObj.get("subCompanyId"));
String departmentId = Util.null2String(jsonObj.get("departmentId"));
String resourceId = Util.null2String(jsonObj.get("resourceId"));
@ -113,8 +116,8 @@ public class GetKQDailyReportCmd extends AbstractCommonCommand<Map<String, Objec
column.put("width", Util.getIntValue(kqReportFieldComInfo.getWidth()));
}
if(kqReportFieldComInfo.getReportType1().equals("daily")){
column.put("isdaily", "1");
}
column.put("isdaily", "1");
}
column.put("showDetial",kqReportFieldComInfo.getShowDetial());
columns.add(column);
}
@ -127,21 +130,21 @@ public class GetKQDailyReportCmd extends AbstractCommonCommand<Map<String, Objec
// fromDate = today;
// }
// }
String forgotBeginWorkCheck_field = " b.forgotbeginworkcheck ";
if(rs.getDBType().equalsIgnoreCase("oracle")&&!Util.null2String(rs.getOrgindbtype()).equals("dm")&&!Util.null2String(rs.getOrgindbtype()).equals("st")&&!Util.null2String(rs.getOrgindbtype()).equals("jc")) {
forgotBeginWorkCheck_field = " nvl(b.forgotBeginWorkCheck,0) ";
}else if((rs.getDBType()).equalsIgnoreCase("mysql")){
forgotBeginWorkCheck_field = " ifnull(b.forgotBeginWorkCheck,0) ";
}else {
forgotBeginWorkCheck_field = " isnull(b.forgotBeginWorkCheck,0) ";
}
String forgotBeginWorkCheck_field = " b.forgotbeginworkcheck ";
if(rs.getDBType().equalsIgnoreCase("oracle")&&!Util.null2String(rs.getOrgindbtype()).equals("dm")&&!Util.null2String(rs.getOrgindbtype()).equals("st")&&!Util.null2String(rs.getOrgindbtype()).equals("jc")) {
forgotBeginWorkCheck_field = " nvl(b.forgotBeginWorkCheck,0) ";
}else if((rs.getDBType()).equalsIgnoreCase("mysql")){
forgotBeginWorkCheck_field = " ifnull(b.forgotBeginWorkCheck,0) ";
}else {
forgotBeginWorkCheck_field = " isnull(b.forgotBeginWorkCheck,0) ";
}
String backFields = " a.id,a.lastname,a.subcompanyid1 as subcompanyid,a.departmentid, a.workcode,b.jobtitle,a.dsporder," +
" b.kqdate, b.workdays,b.workMins,b.serialid, b.attendancedays,b.attendanceMins," +
" b.beLate,b.beLateMins,b.graveBeLate,b.graveBeLateMins,b.leaveEearly,b.leaveEarlyMins," +
" b.signdays,b.signmins, "+
" b.graveLeaveEarly,b.graveLeaveEarlyMins,b.absenteeism ,b.absenteeismMins ,(b.forgotCheck+"+forgotBeginWorkCheck_field+") forgotCheck ";
" b.kqdate, b.workdays,b.workMins,b.serialid, b.attendancedays,b.attendanceMins," +
" b.beLate,b.beLateMins,b.graveBeLate,b.graveBeLateMins,b.leaveEearly,b.leaveEarlyMins," +
" b.signdays,b.signmins, "+
" b.graveLeaveEarly,b.graveLeaveEarlyMins,b.absenteeism ,b.absenteeismMins ,(b.forgotCheck+"+forgotBeginWorkCheck_field+") forgotCheck ";
String sqlFrom = " from hrmresource a, kq_format_total b where a.id= b.resourceid and b.kqdate >='"+fromDate+"' and b.kqdate <='"+toDate+"'";
String sqlWhere = rightSql;
if(subCompanyId.length()>0){
@ -166,13 +169,13 @@ public class GetKQDailyReportCmd extends AbstractCommonCommand<Map<String, Objec
if (!"1".equals(isNoAccount)) {
sqlWhere += " and a.loginid is not null "+(rs.getDBType().equals("oracle")?"":" and a.loginid<>'' ");
}
if(status.length()>0){
if (!status.equals("8") && !status.equals("9")) {
sqlWhere += " and a.status = "+status+ "";
}else if (status.equals("8")) {
sqlWhere += " and (a.status = 0 or a.status = 1 or a.status = 2 or a.status = 3) ";
}
}
if(status.length()>0){
if (!status.equals("8") && !status.equals("9")) {
sqlWhere += " and a.status = "+status+ "";
}else if (status.equals("8")) {
sqlWhere += " and (a.status = 0 or a.status = 1 or a.status = 2 or a.status = 3) ";
}
}
sql = " select count(*) as c from ( select 1 as c "+sqlFrom+sqlWhere+") t";
rs.execute(sql);
@ -198,16 +201,14 @@ public class GetKQDailyReportCmd extends AbstractCommonCommand<Map<String, Objec
if (rs.getDBType().equals("oracle")) {
sql = " select " + sql;
sql = "select * from ( select row_.*, rownum rownum_ from ( " + sql + " ) row_ where rownum <= "
+ (pageIndex * pageSize) + ") where rownum_ > " + ((pageIndex - 1) * pageSize);
+ (pageIndex * pageSize) + ") where rownum_ > " + ((pageIndex - 1) * pageSize);
} else if (rs.getDBType().equals("mysql")) {
sql = " select " + sql;
sql = "select t1.* from (" + sql + ") t1 limit " + ((pageIndex - 1) * pageSize) + "," + pageSize;
}
else if (rs.getDBType().equals("postgresql")) {
} else if (rs.getDBType().equals("postgresql")) {
sql = " select " + sql;
sql = "select t1.* from (" + sql + ") t1 limit " + pageSize+ " offset " + ((pageIndex - 1) * pageSize);
}
else {
} else {
orderBy = " order by dsporder asc, lastname asc, kqdate asc ";
descOrderBy = " order by dsporder desc, lastname desc, kqdate desc ";
if (pageIndex > 1) {
@ -216,7 +217,7 @@ public class GetKQDailyReportCmd extends AbstractCommonCommand<Map<String, Objec
topSize = count - (pageSize * (pageIndex - 1));
}
sql = " select top " + topSize + " * from ( select top " + topSize + " * from ( select top "
+ (pageIndex * pageSize) + sql+" ) tbltemp1 " + descOrderBy + ") tbltemp2 " + orderBy;
+ (pageIndex * pageSize) + sql+" ) tbltemp1 " + descOrderBy + ") tbltemp2 " + orderBy;
} else {
sql = " select top " + pageSize + sql;
}
@ -224,7 +225,7 @@ public class GetKQDailyReportCmd extends AbstractCommonCommand<Map<String, Objec
} else {
sql = " select " + sql;
}
Map<String,Object> flowData = kqReportBiz.getDailyFlowData(params,user);
Map<String,Object> flowData = kqReportBiz.getDailyFlowData(params,user);
Map<String,String> serialdata = new HashMap<>();
// #1475814-概述:满足考勤报分部部门显示及导出时显示全路径
@ -293,7 +294,7 @@ public class GetKQDailyReportCmd extends AbstractCommonCommand<Map<String, Objec
data.put(fieldName + "Id", fieldValueID);
data.put(fieldName, fieldValue);
} else if (kqReportFieldComInfo.getParentid().equals("overtime") || kqReportFieldComInfo.getParentid().equals("overtime_nonleave")
|| kqReportFieldComInfo.getParentid().equals("overtime_4leave") || fieldName.equals("businessLeave") || fieldName.equals("officialBusiness")) {
|| kqReportFieldComInfo.getParentid().equals("overtime_4leave") || fieldName.equals("businessLeave") || fieldName.equals("officialBusiness")) {
if (fieldName.equals("overtimeTotal")) {
double workingDayOvertime_4leave = Util.getDoubleValue(Util.null2String(flowData.get(id + "|" + kqdate + "|workingDayOvertime_4leave")));
workingDayOvertime_4leave = workingDayOvertime_4leave < 0 ? 0 : workingDayOvertime_4leave;
@ -310,7 +311,7 @@ public class GetKQDailyReportCmd extends AbstractCommonCommand<Map<String, Objec
holidayOvertime_nonleave = holidayOvertime_nonleave < 0 ? 0 : holidayOvertime_nonleave;
fieldValue = KQDurationCalculatorUtil.getDurationRound(String.valueOf(workingDayOvertime_4leave + restDayOvertime_4leave + holidayOvertime_4leave +
workingDayOvertime_nonleave + restDayOvertime_nonleave + holidayOvertime_nonleave));
workingDayOvertime_nonleave + restDayOvertime_nonleave + holidayOvertime_nonleave));
} else {
fieldValue = KQDurationCalculatorUtil.getDurationRound(Util.null2String(flowData.get(id + "|" + kqdate + "|" + fieldName)));
}
@ -336,7 +337,7 @@ public class GetKQDailyReportCmd extends AbstractCommonCommand<Map<String, Objec
data.put(fieldName, fieldValue);
}
}
data.putAll(this.getSignDetailInfo(id, kqdate));
data.putAll(this.getSignDetailInfo(id, kqdate));
//请假
List<Map<String, Object>> allLeaveRules = KQLeaveRulesBiz.getAllLeaveRules();
@ -360,10 +361,10 @@ public class GetKQDailyReportCmd extends AbstractCommonCommand<Map<String, Objec
BigDecimal b_leaveData = new BigDecimal(leaveData);
BigDecimal b_leavebackData = new BigDecimal(leavebackData);
b_flowLeaveData = b_leaveData.subtract(b_leavebackData).toString();
if(Util.getDoubleValue(b_flowLeaveData, -1) < 0){
b_flowLeaveData = "0.0";
}
if(Util.getDoubleValue(b_flowLeaveData, -1) < 0){
b_flowLeaveData = "0.0";
}
} catch (Exception e) {
kqLog.info("GetKQReportCmd:leaveData" + leaveData + ":leavebackData:" + leavebackData + ":" + e);
}
@ -419,86 +420,86 @@ public class GetKQDailyReportCmd extends AbstractCommonCommand<Map<String, Objec
Map column = null;
int sumChildColumnWidth = 0;
if(parentid.equals("leave")){
KQLeaveRulesBiz kqLeaveRulesBiz = new KQLeaveRulesBiz();
List<Map<String, Object>> leaveRules = kqLeaveRulesBiz.getAllLeaveRules();
for(int i=0;leaveRules!=null&&i<leaveRules.size();i++){
Map<String, Object> leaveRule = leaveRules.get(i);
String id = "leaveType_"+Util.null2String(leaveRule.get("id"));
String name = Util.null2String(leaveRule.get("name"));
String unitType = Util.null2String(leaveRule.get("unitType"));
column = new HashMap();
column.put("title", name);
column.put("unit", KQUnitBiz.isLeaveHour(unitType) ?SystemEnv.getHtmlLabelName(391, user.getLanguage()):SystemEnv.getHtmlLabelName(1925, user.getLanguage()));
column.put("width", 65);
column.put("dataIndex", id);
column.put("key", id);
column.put("rowSpan", 2);
column.put("colSpan", 1);
column.put("showDetial","1");
sumChildColumnWidth+=65;
lsChildColumns.add(column);
}
}else if(parentid.equals("overtime")){
String[] overtimeChild = {"overtime_nonleave","overtime_4leave","overtimeTotal"};
for(int i=0;i<overtimeChild.length;i++){
String id = overtimeChild[i];
column = new HashMap();
String fieldlabel = "";
column.put("unit", "");
if("overtime_nonleave".equalsIgnoreCase(id)){
fieldlabel = "125805";
}else if("overtime_4leave".equalsIgnoreCase(id)){
fieldlabel = "125804";
}else{
fieldlabel = "523";
column.put("showDetial","1");
String unitType = (KQOvertimeRulesBiz.getMinimumUnit()==3 || KQOvertimeRulesBiz.getMinimumUnit()==5 ||KQOvertimeRulesBiz.getMinimumUnit()==6)?"2":"1";
String unitTypeName = "";
if(Util.null2String(unitType).length()>0){
if(unitType.equals("1")){
unitTypeName=SystemEnv.getHtmlLabelName(1925, user.getLanguage());
}else if(unitType.equals("2")){
unitTypeName=SystemEnv.getHtmlLabelName(391, user.getLanguage());
}else if(unitType.equals("3")){
unitTypeName=SystemEnv.getHtmlLabelName(18083, user.getLanguage());
}
}
column.put("unit", unitTypeName);
}
column.put("title", SystemEnv.getHtmlLabelNames(fieldlabel, user.getLanguage()));
column.put("dataIndex", id);
column.put("key", id);
column.put("rowSpan", 1);
Map<String,Object> mapChildColumnInfo = getChildColumnsInfo(id, user);
int childWidth = 65;
List<Object> childColumns = (List<Object>)mapChildColumnInfo.get("childColumns");
if(childColumns.size()>0) {//跨列width取子列的width
column.put("children", childColumns);
childWidth = Util.getIntValue(Util.null2String(mapChildColumnInfo.get("sumChildColumnWidth")),65);
}
column.put("width", childWidth+"");
sumChildColumnWidth+=childWidth;
lsChildColumns.add(column);
}
}else{
KQReportFieldComInfo kqReportFieldComInfo = new KQReportFieldComInfo();
while (kqReportFieldComInfo.next()){
if(kqReportFieldComInfo.getParentid().equals(parentid)) {
if(!kqReportFieldComInfo.getReportType().equals("daily"))continue;
column = new HashMap();
column.put("title", SystemEnv.getHtmlLabelNames(kqReportFieldComInfo.getFieldlabel(), user.getLanguage()));
column.put("unit", KQReportBiz.getUnitType(kqReportFieldComInfo, user));
column.put("width", Util.getIntValue(kqReportFieldComInfo.getWidth()));
column.put("dataIndex", kqReportFieldComInfo.getFieldname());
column.put("key", kqReportFieldComInfo.getFieldname());
column.put("rowSpan", 2);
column.put("colSpan", 1);
column.put("isdaily", kqReportFieldComInfo.getReportType1().equals("daily")?"1":"0");
sumChildColumnWidth+=Util.getIntValue(kqReportFieldComInfo.getWidth());
lsChildColumns.add(column);
}
}
}
KQLeaveRulesBiz kqLeaveRulesBiz = new KQLeaveRulesBiz();
List<Map<String, Object>> leaveRules = kqLeaveRulesBiz.getAllLeaveRules();
for(int i=0;leaveRules!=null&&i<leaveRules.size();i++){
Map<String, Object> leaveRule = leaveRules.get(i);
String id = "leaveType_"+Util.null2String(leaveRule.get("id"));
String name = Util.null2String(leaveRule.get("name"));
String unitType = Util.null2String(leaveRule.get("unitType"));
column = new HashMap();
column.put("title", name);
column.put("unit", KQUnitBiz.isLeaveHour(unitType) ?SystemEnv.getHtmlLabelName(391, user.getLanguage()):SystemEnv.getHtmlLabelName(1925, user.getLanguage()));
column.put("width", 65);
column.put("dataIndex", id);
column.put("key", id);
column.put("rowSpan", 2);
column.put("colSpan", 1);
column.put("showDetial","1");
sumChildColumnWidth+=65;
lsChildColumns.add(column);
}
}else if(parentid.equals("overtime")){
String[] overtimeChild = {"overtime_nonleave","overtime_4leave","overtimeTotal"};
for(int i=0;i<overtimeChild.length;i++){
String id = overtimeChild[i];
column = new HashMap();
String fieldlabel = "";
column.put("unit", "");
if("overtime_nonleave".equalsIgnoreCase(id)){
fieldlabel = "125805";
}else if("overtime_4leave".equalsIgnoreCase(id)){
fieldlabel = "125804";
}else{
fieldlabel = "523";
column.put("showDetial","1");
String unitType = (KQOvertimeRulesBiz.getMinimumUnit()==3 || KQOvertimeRulesBiz.getMinimumUnit()==5 ||KQOvertimeRulesBiz.getMinimumUnit()==6)?"2":"1";
String unitTypeName = "";
if(Util.null2String(unitType).length()>0){
if(unitType.equals("1")){
unitTypeName=SystemEnv.getHtmlLabelName(1925, user.getLanguage());
}else if(unitType.equals("2")){
unitTypeName=SystemEnv.getHtmlLabelName(391, user.getLanguage());
}else if(unitType.equals("3")){
unitTypeName=SystemEnv.getHtmlLabelName(18083, user.getLanguage());
}
}
column.put("unit", unitTypeName);
}
column.put("title", SystemEnv.getHtmlLabelNames(fieldlabel, user.getLanguage()));
column.put("dataIndex", id);
column.put("key", id);
column.put("rowSpan", 1);
Map<String,Object> mapChildColumnInfo = getChildColumnsInfo(id, user);
int childWidth = 65;
List<Object> childColumns = (List<Object>)mapChildColumnInfo.get("childColumns");
if(childColumns.size()>0) {//跨列width取子列的width
column.put("children", childColumns);
childWidth = Util.getIntValue(Util.null2String(mapChildColumnInfo.get("sumChildColumnWidth")),65);
}
column.put("width", childWidth+"");
sumChildColumnWidth+=childWidth;
lsChildColumns.add(column);
}
}else{
KQReportFieldComInfo kqReportFieldComInfo = new KQReportFieldComInfo();
while (kqReportFieldComInfo.next()){
if(kqReportFieldComInfo.getParentid().equals(parentid)) {
if(!kqReportFieldComInfo.getReportType().equals("daily"))continue;
column = new HashMap();
column.put("title", SystemEnv.getHtmlLabelNames(kqReportFieldComInfo.getFieldlabel(), user.getLanguage()));
column.put("unit", KQReportBiz.getUnitType(kqReportFieldComInfo, user));
column.put("width", Util.getIntValue(kqReportFieldComInfo.getWidth()));
column.put("dataIndex", kqReportFieldComInfo.getFieldname());
column.put("key", kqReportFieldComInfo.getFieldname());
column.put("rowSpan", 2);
column.put("colSpan", 1);
column.put("isdaily", kqReportFieldComInfo.getReportType1().equals("daily")?"1":"0");
sumChildColumnWidth+=Util.getIntValue(kqReportFieldComInfo.getWidth());
lsChildColumns.add(column);
}
}
}
returnMap.put("childColumns",lsChildColumns);
returnMap.put("sumChildColumnWidth",sumChildColumnWidth);
return returnMap;
@ -511,14 +512,16 @@ public class GetKQDailyReportCmd extends AbstractCommonCommand<Map<String, Objec
String sql = "";
KQTimesArrayComInfo kqTimesArrayComInfo = new KQTimesArrayComInfo();
try{
bb.writeLog("-----getSignDetailInfo start-----");
sql = " select kqdate,resourceid,serialid,serialnumber,workbegindate,workbegintime, " +
" workenddate,workendtime,workmins,signindate,signintime,signoutdate,signouttime, \n" +
" attendanceMins,belatemins,graveBeLateMins,leaveearlymins,graveLeaveEarlyMins,absenteeismmins,forgotcheckMins,forgotBeginWorkCheckMins," +
" leaveMins,leaveInfo,evectionMins,outMins,signinid,signoutid \n" +
" from kq_format_detail b \n" +
" where resourceid = " + resourceId + " and kqdate ='" + kqDate + "' \n" +
" order by serialnumber \n";
" workenddate,workendtime,workmins,signindate,signintime,signoutdate,signouttime, \n" +
" attendanceMins,belatemins,graveBeLateMins,leaveearlymins,graveLeaveEarlyMins,absenteeismmins,forgotcheckMins,forgotBeginWorkCheckMins," +
" leaveMins,leaveInfo,evectionMins,outMins,signinid,signoutid \n" +
" from kq_format_detail b \n" +
" where resourceid = " + resourceId + " and kqdate ='" + kqDate + "' \n" +
" order by serialnumber \n";
rs.execute(sql);
bb.writeLog("sql: " + sql);
while (rs.next()) {
String resourceid = Util.null2String(rs.getString("resourceid"));
String kqdate = Util.null2String(rs.getString("kqdate"));
@ -539,8 +542,8 @@ public class GetKQDailyReportCmd extends AbstractCommonCommand<Map<String, Objec
String absenteeismMins= Util.null2String(rs.getString("absenteeismMins")).trim();
String forgotCheckMins = Util.null2String(rs.getString("forgotcheckMins")).trim();
String forgotBeginWorkCheckMins = Util.null2String(rs.getString("forgotBeginWorkCheckMins")).trim();
String signinid = Util.null2String(rs.getString("signinid")).trim();
String signoutid = Util.null2String(rs.getString("signoutid")).trim();
String signinid = Util.null2String(rs.getString("signinid")).trim();
String signoutid = Util.null2String(rs.getString("signoutid")).trim();
int leaveMins = rs.getInt("leaveMins");
String leaveInfo = Util.null2String(rs.getString("leaveInfo"));
int evectionMins = rs.getInt("evectionMins");
@ -553,13 +556,26 @@ public class GetKQDailyReportCmd extends AbstractCommonCommand<Map<String, Objec
signStatusInfo.put("workdate",workbegindate);
signStatusInfo.put("worktime",workbegintime);
signStatusInfo.put("beLateMins",beLateMins);
signStatusInfo.put("forgotBeginWorkCheckMins",forgotBeginWorkCheckMins);
signStatusInfo.put("forgotBeginWorkCheckMins",forgotBeginWorkCheckMins);
signStatusInfo.put("graveBeLateMins",graveBeLateMins);
signStatusInfo.put("absenteeismMins",absenteeismMins);
signStatusInfo.put("leaveMins",leaveMins);
signStatusInfo.put("leaveInfo",leaveInfo);
signStatusInfo.put("evectionMins",evectionMins);
signStatusInfo.put("outMins",outMins);
/*考勤二开--当前时间在当天班次下班点之前不显示旷工start*/
String nowDay = DateUtil.format(new Date(), "yyyy-MM-dd");
String nowTime = DateUtil.format(new Date(), "HH:mm");
bb.writeLog("nowDay: " + nowDay);
bb.writeLog("nowTime: " + nowTime);
bb.writeLog("workenddate: " + workenddate);
bb.writeLog("workendtime: " + kqTimesArrayComInfo.turn48to24Time(workendtime));
if (workenddate.equals(nowDay) && nowTime.compareTo(kqTimesArrayComInfo.turn48to24Time(workendtime)) < 0) {
signStatusInfo.put("isneedcal","1");
}
bb.writeLog("signStatusInfo: " + signStatusInfo);
/*考勤二开--当前时间在当天班次下班点之前不显示旷工end*/
data.put("signintime"+serialnumber, signintime.length()==0?SystemEnv.getHtmlLabelName(25994, user.getLanguage()):signintime);
data.put("signinstatus"+serialnumber, KQReportBiz.getSignStatus(signStatusInfo,user,"on"));
@ -578,30 +594,43 @@ public class GetKQDailyReportCmd extends AbstractCommonCommand<Map<String, Objec
signStatusInfo.put("leaveInfo",leaveInfo);
signStatusInfo.put("evectionMins",evectionMins);
signStatusInfo.put("outMins",outMins);
/*考勤二开--当前时间在当天班次下班点之前不显示旷工start*/
String nowDay = DateUtil.format(new Date(), "yyyy-MM-dd");
String nowTime = DateUtil.format(new Date(), "HH:mm");
bb.writeLog("nowDay: " + nowDay);
bb.writeLog("nowTime: " + nowTime);
bb.writeLog("workenddate: " + workenddate);
bb.writeLog("workendtime: " + kqTimesArrayComInfo.turn48to24Time(workendtime));
if (workenddate.equals(nowDay) && nowTime.compareTo(kqTimesArrayComInfo.turn48to24Time(workendtime)) < 0) {
signStatusInfo.put("isneedcal","1");
}
bb.writeLog("signStatusInfo: " + signStatusInfo);
/*考勤二开--当前时间在当天班次下班点之前不显示旷工end*/
data.put("signouttime"+serialnumber, signouttime.length()==0?SystemEnv.getHtmlLabelName(25994, user.getLanguage()):signouttime);
data.put("signoutstatus"+serialnumber, KQReportBiz.getSignStatus(signStatusInfo,user,"off"));
}
}else{
if(workMins>0){
//弹性工时打卡时间取自签到签退数据
//弹性工时打卡时间取自签到签退数据
}
signStatusInfo = new HashMap();
signStatusInfo.put("leaveMins",leaveMins);
signStatusInfo.put("leaveInfo",leaveInfo);
signStatusInfo.put("evectionMins",evectionMins);
signStatusInfo.put("outMins",outMins);
if(signinid.length() > 0){
data.put("signintime"+serialnumber, signintime.length()==0?SystemEnv.getHtmlLabelName(25994, user.getLanguage()):signintime);
data.put("signinstatus"+serialnumber, KQReportBiz.getSignStatus(signStatusInfo,user,"on"));
if(signoutid.length() > 0){
data.put("signouttime"+serialnumber, signouttime.length()==0?SystemEnv.getHtmlLabelName(25994, user.getLanguage()):signouttime);
data.put("signoutstatus"+serialnumber, KQReportBiz.getSignStatus(signStatusInfo,user,"off"));
}
}else{
data.put("signinstatus"+serialnumber, KQReportBiz.getSignStatus(signStatusInfo,user,"on"));
}
signStatusInfo = new HashMap();
signStatusInfo.put("leaveMins",leaveMins);
signStatusInfo.put("leaveInfo",leaveInfo);
signStatusInfo.put("evectionMins",evectionMins);
signStatusInfo.put("outMins",outMins);
if(signinid.length() > 0){
data.put("signintime"+serialnumber, signintime.length()==0?SystemEnv.getHtmlLabelName(25994, user.getLanguage()):signintime);
data.put("signinstatus"+serialnumber, KQReportBiz.getSignStatus(signStatusInfo,user,"on"));
if(signoutid.length() > 0){
data.put("signouttime"+serialnumber, signouttime.length()==0?SystemEnv.getHtmlLabelName(25994, user.getLanguage()):signouttime);
data.put("signoutstatus"+serialnumber, KQReportBiz.getSignStatus(signStatusInfo,user,"off"));
}
}else{
data.put("signinstatus"+serialnumber, KQReportBiz.getSignStatus(signStatusInfo,user,"on"));
}
}
}
}catch (Exception e){

@ -35,5 +35,15 @@ public class KqWorkflowController {
return new Gson().toJson(resultDatas);
}
@POST
@Path("/checkConOverTime")
@Produces(MediaType.APPLICATION_JSON)
public String checkConOverTime(@Context HttpServletRequest request, @Context HttpServletResponse response) {
User user = HrmUserVarify.getUser(request, response);
Map<String, Object> params = ParamUtil.request2Map(request);
Map<String, Object> resultDatas = getKqWorkflowService(user).checkConOverTime(params);
return new Gson().toJson(resultDatas);
}
}

@ -8,5 +8,10 @@ public interface KqWorkflowService {
*/
Map<String, Object> calWorkTime(Map<String, Object> params);
/**
*
*/
Map<String, Object> checkConOverTime(Map<String, Object> params);
}

@ -2,6 +2,7 @@ package com.engine.sskj.service.impl;
import cn.hutool.core.date.DateUtil;
import com.engine.core.impl.Service;
import com.engine.kq.biz.KQTimesArrayComInfo;
import com.engine.kq.util.KQDurationCalculatorUtil;
import com.engine.sskj.service.KqWorkflowService;
import com.engine.sskj.util.SskjUtil;
@ -48,4 +49,192 @@ public class KqWorkflowServiceImpl extends Service implements KqWorkflowService
result.put("data",betweenHours);
return result;
}
@Override
public Map<String, Object> checkConOverTime(Map<String, Object> params) {
Map<String, Object> result = new HashMap<>();
BaseBean bb = new BaseBean();
bb.writeLog("checkConOverTime start");
try {
RecordSet rs = new RecordSet();
KQTimesArrayComInfo kqTimesArrayComInfo = new KQTimesArrayComInfo();
String overTimeInfo = Util.null2String(params.get("overtimeinfo"));
bb.writeLog("overTimeInfo: " + overTimeInfo);
if (StringUtils.isBlank(overTimeInfo)) {
result.put("code", 500);
result.put("msg", "请传入加班明细数据");
return result;
}
//resourceId=10_fromDate=2023-11-24_fromTime=12:00_toDate=2023-11-24_toTime=13:00|resourceId=10_fromDate=2023-11-24_fromTime=12:00_toDate=2023-11-24_toTime=13:00
String[] overTimeInfos = overTimeInfo.split("\\|");
/*同条流程间校验*/
if (overTimeInfos.length > 1) {
Map<String, int[]> resToOvInMap = new HashMap<>();
for (String oti : overTimeInfos) {
String resourceId = "";
String fromDate = "";
String fromTime = "";
String toDate = "";
String toTime = "";
String[] otiArray = oti.split("_");
for (String ot : otiArray) {
String[] split = ot.split("=");
if ("resourceId".equals(split[0])) {
resourceId = split[1];
}
if ("fromDate".equals(split[0])) {
fromDate = split[1];
}
if ("fromTime".equals(split[0])) {
fromTime = split[1];
}
if ("toDate".equals(split[0])) {
toDate = split[1];
}
if ("toTime".equals(split[0])) {
toTime = split[1];
}
bb.writeLog("ot: " + ot);
}
if (resToOvInMap.containsKey(resourceId)) {
bb.writeLog("containsKey" );
int[] dayMins = resToOvInMap.get(resourceId);
int fromTimeIdx = kqTimesArrayComInfo.getArrayindexByTimes(fromTime);
bb.writeLog("fromTimeIdx: " + fromTimeIdx );
int toTimeIdx = kqTimesArrayComInfo.getArrayindexByTimes(toTime);
bb.writeLog("toTimeIdx: " + toTimeIdx );
//先判断是否已经存在了
boolean isExist = false;
for (int i = fromTimeIdx; i <= toTimeIdx; i++) {
if (dayMins[i] == 1) {
isExist = true;
}
}
bb.writeLog("isExist: " + isExist );
if (!isExist) {
Arrays.fill(dayMins, fromTimeIdx, toTimeIdx, 1);//加班时段标识 1
} else {
String lastname = "";
String acqResLastNameSql = "select lastname from hrmresource where id = ? ";
rs.executeQuery(acqResLastNameSql, resourceId);
while (rs.next()) {
lastname = Util.null2String(rs.getString("lastname"));
}
bb.writeLog("lastname: " + lastname );
result.put("code", 500);
result.put("msg", "加班人员:" + lastname + " 的" + fromDate + " " + fromTime + "--" + toDate + " " + toTime + "在明细表中存在重复部分,请调整!");
return result;
}
resToOvInMap.put(resourceId, dayMins);
} else {
int[] dayMins = new int[1440];//一天所有分钟数
bb.writeLog("fromTime: " + fromTime );
int fromTimeIdx = kqTimesArrayComInfo.getArrayindexByTimes(fromTime);
bb.writeLog("fromTimeIdx: " + fromTimeIdx );
bb.writeLog("toTime: " + toTime );
int toTimeIdx = kqTimesArrayComInfo.getArrayindexByTimes(toTime);
bb.writeLog("toTimeIdx: " + toTimeIdx );
Arrays.fill(dayMins, fromTimeIdx, toTimeIdx, 1);//加班时段标识 1
resToOvInMap.put(resourceId, dayMins);
}
}
}
/*与历史数据校验*/
for (String oti : overTimeInfos) {
String[] otiArray = oti.split("_");
String resourceId = "";
String fromDate = "";
String fromTime = "";
String toDate = "";
String toTime = "";
//取出加班数据
for (String ot : otiArray) {
String[] split = ot.split("=");
if ("resourceId".equals(split[0])) {
resourceId = split[1];
}
if ("fromDate".equals(split[0])) {
fromDate = split[1];
}
if ("fromTime".equals(split[0])) {
fromTime = split[1];
}
if ("toDate".equals(split[0])) {
toDate = split[1];
}
if ("toTime".equals(split[0])) {
toTime = split[1];
}
}
//获取已有的连班加班的数据--(此处连班加班指班次的休息时间)
//设置一个时间轴数组,长度为一天的分钟数
int[] dayMins = new int[1440];//一天所有分钟数
Arrays.fill(dayMins, 0);
String acqConOverTimeSql = "select fromTime, toTime from uf_conOvertime where resourceId = ? and fromDate = ? and toDate = ?";
rs.executeQuery(acqConOverTimeSql, resourceId, fromDate, toDate);
while (rs.next()) {
String fTime = Util.null2String(rs.getString("fromTime"));
String tTime = Util.null2String(rs.getString("toTime"));
//将时间转成时间轴上对应的点
int fTimeIdx = kqTimesArrayComInfo.getArrayindexByTimes(fTime);
int tTimeIdx = kqTimesArrayComInfo.getArrayindexByTimes(tTime);
Arrays.fill(dayMins, fTimeIdx, tTimeIdx, 1);//加班时段标识 1
}
int fromTimeIdx = kqTimesArrayComInfo.getArrayindexByTimes(fromTime);
int toTimeIdx = kqTimesArrayComInfo.getArrayindexByTimes(toTime);
//确认fromTimeIdx-toTimeIdx在时间轴上是否有1
boolean isExist = false;
for (int i = fromTimeIdx; i <= toTimeIdx; i++) {
if (dayMins[i] == 1) {
isExist = true;
}
}
if (isExist) {
String lastname = "";
String acqResLastNameSql = "select lastname from hrmresource where id = ? ";
rs.executeQuery(acqResLastNameSql, resourceId);
while (rs.next()) {
lastname = Util.null2String(rs.getString("lastname"));
}
result.put("code", 500);
result.put("msg", "加班人员:" + lastname + " 的" + fromDate + " " + fromTime + "--" + toDate + " " + toTime + "已经申请过连班加班,不可重复申请!");
return result;
}
}
} catch (Exception e) {
bb.writeLog("checkConOverTime exception: " + e);
result.put("code",500);
result.put("msg","加班数据校验异常");
return result;
}
result.put("code",200);
result.put("msg","加班数据没有重复");
return result;
}
}

@ -1,5 +1,6 @@
package weaver.interfaces.sskj.action;
import cn.hutool.core.date.DateUtil;
import com.engine.kq.biz.*;
import com.engine.kq.entity.KQOvertimeRulesDetailEntity;
import com.engine.sskj.util.SskjUtil;
@ -13,7 +14,9 @@ import weaver.soa.workflow.request.MainTableInfo;
import weaver.soa.workflow.request.Property;
import weaver.soa.workflow.request.RequestInfo;
import java.util.Date;
import java.util.Map;
import java.util.UUID;
/**
*
@ -119,6 +122,32 @@ public class OverTimeAction implements Action {
boolean b = genOvertimeData(requestId, Util.null2String(resourceId), fromDate, toDate, belongTo, fromTime, toTime, String.valueOf(durationOfOvertime),
String.valueOf(changeType), "1", String.valueOf(paidLeaveEnable), String.valueOf(computingMode), null);
if (b) {
//将加班数据记录到连班加班建模表中
String syncConOverTimeSql = "insert into uf_conOvertime (resourceId, fromDate, fromTime, toDate, toTime, formmodeid, modedatacreater, modedatacreatertype, modedatacreatedate, modedatacreatetime, MODEUUID)" +
" values (?,?,?,?,?,?,?,?,?,?,?)";
String conOvertimeModeId = bb.getPropValue("project_sskj", "conOvertimeModeId");
Integer modedatacreater = 1;
Integer modedatacreatertype = 0;
String modedatacreatedate = DateUtil.format(new Date(), "yyyy-MM-dd");
String modedatacreatetime = DateUtil.format(new Date(), "HH:mm:ss");
String uuid = UUID.randomUUID().toString();
bb.writeLog("syncConOverTimeSql" + syncConOverTimeSql);
boolean addFlag = rs.executeUpdate(syncConOverTimeSql, resourceId, fromDate, fromTime, toDate, toTime, conOvertimeModeId, modedatacreater, modedatacreatertype, modedatacreatedate,
modedatacreatetime, uuid);
bb.writeLog("addFlag" + addFlag);
if (addFlag) {
String billid = "-1";
String acqModeIdSql = "select id from uf_conOvertime where MODEUUID = ?";
rs.executeQuery(acqModeIdSql, uuid);
while (rs.next()) {
billid = Util.null2String(rs.getString("id"));
}
bb.writeLog("billid" + billid);
sskjUtil.modePerRecon(modedatacreater, conOvertimeModeId, billid);
}
return Action.SUCCESS;
} else {
String error = "加班生成失败!";
@ -155,6 +184,31 @@ public class OverTimeAction implements Action {
boolean b = genOvertimeData(requestId, Util.null2String(resourceId), fromDate, toDate, belongTo, fromTime, toTime, String.valueOf(durationOfOvertime),
String.valueOf(changeType), "1", String.valueOf(paidLeaveEnable), String.valueOf(computingMode), tiaoxiuId);
if (b) {
//将加班数据记录到连班加班建模表中
String syncConOverTimeSql = "insert into uf_conOvertime (resourceId, fromDate, fromTime, toDate, toTime, formmodeid, modedatacreater, modedatacreatertype, modedatacreatedate, modedatacreatetime, MODEUUID)" +
" values (?,?,?,?,?,?,?,?,?,?,?)";
String conOvertimeModeId = bb.getPropValue("project_sskj", "conOvertimeModeId");
Integer modedatacreater = 1;
Integer modedatacreatertype = 0;
String modedatacreatedate = DateUtil.format(new Date(), "yyyy-MM-dd");
String modedatacreatetime = DateUtil.format(new Date(), "HH:mm:ss");
String uuid = UUID.randomUUID().toString();
bb.writeLog("syncConOverTimeSql" + syncConOverTimeSql);
boolean addFlag = rs.executeUpdate(syncConOverTimeSql, resourceId, fromDate, fromTime, toDate, toTime, conOvertimeModeId, modedatacreater, modedatacreatertype, modedatacreatedate,
modedatacreatetime, uuid);
bb.writeLog("addFlag" + addFlag);
if (addFlag) {
String billid = "-1";
String acqModeIdSql = "select id from uf_conOvertime where MODEUUID = ?";
rs.executeQuery(acqModeIdSql, uuid);
while (rs.next()) {
billid = Util.null2String(rs.getString("id"));
}
bb.writeLog("billid" + billid);
sskjUtil.modePerRecon(modedatacreater, conOvertimeModeId, billid);
}
return Action.SUCCESS;
} else {
String error = "加班生成失败!";
@ -174,9 +228,9 @@ public class OverTimeAction implements Action {
}catch(Exception e) {
bb.writeLog("OverTimeAction Exception: " + e);
return Action.FAILURE_AND_CONTINUE;
}
return Action.SUCCESS;
}
/**

@ -1,5 +1,6 @@
package weaver.interfaces.sskj.action;
import cn.hutool.core.date.DateUtil;
import com.engine.kq.biz.*;
import com.engine.kq.entity.KQOvertimeRulesDetailEntity;
import com.engine.sskj.util.SskjUtil;
@ -11,10 +12,7 @@ import weaver.general.Util;
import weaver.interfaces.workflow.action.Action;
import weaver.soa.workflow.request.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
/**
*
@ -159,6 +157,32 @@ public class OverTimeBatchAction implements Action {
boolean b = genOvertimeData(requestId, Util.null2String(resourceId), fromDate, toDate, belongTo, fromTime, toTime, String.valueOf(durationOfOvertime),
String.valueOf(changeType), "1", String.valueOf(paidLeaveEnable), String.valueOf(computingMode), null);
if (b) {
//将加班数据记录到连班加班建模表中
String syncConOverTimeSql = "insert into uf_conOvertime (resourceId, fromDate, fromTime, toDate, toTime, formmodeid, modedatacreater, modedatacreatertype, modedatacreatedate, modedatacreatetime, MODEUUID)" +
" values (?,?,?,?,?,?,?,?,?,?,?)";
String conOvertimeModeId = bb.getPropValue("project_sskj", "conOvertimeModeId");
Integer modedatacreater = 1;
Integer modedatacreatertype = 0;
String modedatacreatedate = DateUtil.format(new Date(), "yyyy-MM-dd");
String modedatacreatetime = DateUtil.format(new Date(), "HH:mm:ss");
String uuid = UUID.randomUUID().toString();
bb.writeLog("syncConOverTimeSql" + syncConOverTimeSql);
boolean addFlag = rs.executeUpdate(syncConOverTimeSql, resourceId, fromDate, fromTime, toDate, toTime, conOvertimeModeId, modedatacreater, modedatacreatertype, modedatacreatedate,
modedatacreatetime, uuid);
bb.writeLog("addFlag" + addFlag);
if (addFlag) {
String billid = "-1";
String acqModeIdSql = "select id from uf_conOvertime where MODEUUID = ?";
rs.executeQuery(acqModeIdSql, uuid);
while (rs.next()) {
billid = Util.null2String(rs.getString("id"));
}
bb.writeLog("billid" + billid);
sskjUtil.modePerRecon(modedatacreater, conOvertimeModeId, billid);
}
return Action.SUCCESS;
} else {
String error = "加班生成失败!";
@ -195,6 +219,32 @@ public class OverTimeBatchAction implements Action {
boolean b = genOvertimeData(requestId, Util.null2String(resourceId), fromDate, toDate, belongTo, fromTime, toTime, String.valueOf(durationOfOvertime),
String.valueOf(changeType), "1", String.valueOf(paidLeaveEnable), String.valueOf(computingMode), tiaoxiuId);
if (b) {
//将加班数据记录到连班加班建模表中
String syncConOverTimeSql = "insert into uf_conOvertime (resourceId, fromDate, fromTime, toDate, toTime, formmodeid, modedatacreater, modedatacreatertype, modedatacreatedate, modedatacreatetime, MODEUUID)" +
" values (?,?,?,?,?,?,?,?,?,?,?)";
String conOvertimeModeId = bb.getPropValue("project_sskj", "conOvertimeModeId");
Integer modedatacreater = 1;
Integer modedatacreatertype = 0;
String modedatacreatedate = DateUtil.format(new Date(), "yyyy-MM-dd");
String modedatacreatetime = DateUtil.format(new Date(), "HH:mm:ss");
String uuid = UUID.randomUUID().toString();
bb.writeLog("syncConOverTimeSql" + syncConOverTimeSql);
boolean addFlag = rs.executeUpdate(syncConOverTimeSql, resourceId, fromDate, fromTime, toDate, toTime, conOvertimeModeId, modedatacreater, modedatacreatertype, modedatacreatedate,
modedatacreatetime, uuid);
bb.writeLog("addFlag" + addFlag);
if (addFlag) {
String billid = "-1";
String acqModeIdSql = "select id from uf_conOvertime where MODEUUID = ?";
rs.executeQuery(acqModeIdSql, uuid);
while (rs.next()) {
billid = Util.null2String(rs.getString("id"));
}
bb.writeLog("billid" + billid);
sskjUtil.modePerRecon(modedatacreater, conOvertimeModeId, billid);
}
return Action.SUCCESS;
} else {
String error = "加班生成失败!";

Loading…
Cancel
Save