com.engine.kq 无需提交备案 属于编译文件

一次性需求 补充考勤异常提醒2024.12.01 - 2024.12.08 之间未开启开关丢失的提醒
武汉联特科技股份有限公司
Chengliang 4 months ago
parent 3349b6a2e4
commit 3e5b0e0b08

@ -0,0 +1,74 @@
package com.engine.kq.bean;
/**
* ----
*/
public class KqLockAttenda {
private String LOCK_COM;
private String LOCK_SUBCOM;
private String LOCK_DEPT;
private String LOCK_RESOURCE;
private String LOCK_FROMDATE;
private String LOCK_TODATE;
private String LOCK_LOCK;
public String getLOCK_COM() {
return LOCK_COM;
}
public void setLOCK_COM(String LOCK_COM) {
this.LOCK_COM = LOCK_COM;
}
public String getLOCK_SUBCOM() {
return LOCK_SUBCOM;
}
public void setLOCK_SUBCOM(String LOCK_SUBCOM) {
this.LOCK_SUBCOM = LOCK_SUBCOM;
}
public String getLOCK_DEPT() {
return LOCK_DEPT;
}
public void setLOCK_DEPT(String LOCK_DEPT) {
this.LOCK_DEPT = LOCK_DEPT;
}
public String getLOCK_RESOURCE() {
return LOCK_RESOURCE;
}
public void setLOCK_RESOURCE(String LOCK_RESOURCE) {
this.LOCK_RESOURCE = LOCK_RESOURCE;
}
public String getLOCK_FROMDATE() {
return LOCK_FROMDATE;
}
public void setLOCK_FROMDATE(String LOCK_FROMDATE) {
this.LOCK_FROMDATE = LOCK_FROMDATE;
}
public String getLOCK_TODATE() {
return LOCK_TODATE;
}
public void setLOCK_TODATE(String LOCK_TODATE) {
this.LOCK_TODATE = LOCK_TODATE;
}
public String getLOCK_LOCK() {
return LOCK_LOCK;
}
public void setLOCK_LOCK(String LOCK_LOCK) {
this.LOCK_LOCK = LOCK_LOCK;
}
}

File diff suppressed because it is too large Load Diff

@ -0,0 +1,860 @@
package com.engine.kq.biz;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.engine.kq.cmd.attendanceButton.ButtonStatusEnum;
import com.engine.kq.entity.TimeScopeEntity;
import com.engine.kq.entity.TimeSignScopeEntity;
import com.engine.kq.entity.WorkTimeEntity;
import com.engine.kq.log.KQLog;
import com.engine.kq.util.UtilKQ;
import com.engine.kq.wfset.util.KQSignUtil;
import com.google.common.collect.Lists;
import java.io.PrintWriter;
import java.io.StringWriter;
import weaver.common.DateUtil;
import weaver.conn.RecordSet;
import weaver.general.BaseBean;
import weaver.general.Util;
import java.util.*;
/**
*
*/
public class KQFormatSignData extends BaseBean {
private KQLog kqLog = new KQLog();
public List<Object> getSignInfo(String userId, TimeScopeEntity signTimeScope,
TimeScopeEntity workTimeScope, String kqDate, String preDate,
String nextDate, KQTimesArrayComInfo kqTimesArrayComInfo) {
return getSignInfo(userId, signTimeScope, workTimeScope, kqDate, preDate, nextDate, kqTimesArrayComInfo,
Lists.newArrayList(), "");
}
public List<Object> getSignInfo(String userId, TimeScopeEntity signTimeScope,
TimeScopeEntity workTimeScope, String kqDate, String preDate,
String nextDate, KQTimesArrayComInfo kqTimesArrayComInfo, ArrayList<String> hostIps, String uuid) {
return getSignInfo(userId, signTimeScope, workTimeScope, kqDate, preDate, nextDate, kqTimesArrayComInfo, hostIps, uuid, 0, 0);
}
public List<Object> getSignInfo(String userId, TimeScopeEntity signTimeScope,
TimeScopeEntity workTimeScope, String kqDate, String preDate,
String nextDate, KQTimesArrayComInfo kqTimesArrayComInfo, ArrayList<String> hostIps, String uuid, int shiftCount, int shiftI) {
return getSignInfo(userId, signTimeScope, workTimeScope, kqDate, preDate, nextDate, kqTimesArrayComInfo, hostIps, uuid, shiftCount, shiftI, 0);
}
/***
*
* @param userId
* @param signTimeScope
* @param workTimeScope
* @param kqDate
* @param preDate
* @param nextDate
* @param kqTimesArrayComInfo
* @return
*/
public List<Object> getSignInfo(String userId, TimeScopeEntity signTimeScope,
TimeScopeEntity workTimeScope, String kqDate, String preDate,
String nextDate, KQTimesArrayComInfo kqTimesArrayComInfo, ArrayList<String> hostIps, String uuid, int shiftCount, int shiftI, int signoutOnlyoff) {
kqLog.info("in getSignInfo ::userId" + userId + "kqDate==" + kqDate + ":hostIps:" + hostIps + ":uuid::" + uuid + " in ");
List<Object> lsCheckInfo = new ArrayList<>();
String count4NoonStartDateTime = "";
String count4NoonEndDateTime = "";
try {
Map<String, Object> checkInfo = null;
String base_sql = "";
RecordSet rs = new RecordSet();
String dbtype = rs.getDBType();
//获取工作上下班时间
String workBeginDateTime = workTimeScope.getBeginTimeAcross() ? nextDate : kqDate;
workBeginDateTime += " " + kqTimesArrayComInfo.turn48to24Time(workTimeScope.getBeginTime()) + ":00";
kqLog.info("in getSignInfo ::userId" + userId + "kqDate==" + kqDate + ":hostIps:" + hostIps + ":uuid::" + uuid + "::workBeginDateTime::" + workBeginDateTime);
//获取工作上下班时间
String workEndDateTime = workTimeScope.getEndTimeAcross() ? nextDate : kqDate;
workEndDateTime += " " + kqTimesArrayComInfo.turn48to24Time(workTimeScope.getEndTime()) + ":00";
kqLog.info("in getSignInfo ::userId" + userId + "kqDate==" + kqDate + ":hostIps:" + hostIps + ":uuid::" + uuid + "::workEndDateTime::" + workEndDateTime);
Map<String, String> flow_deduct_card_map = getflowDeductCardSql(userId, kqDate, workTimeScope.getBeginTime(), workTimeScope.getEndTime());
kqLog.info("in getSignInfo ::userId" + userId + "kqDate==" + kqDate + ":hostIps:" + hostIps + ":uuid::" + uuid + "::flow_deduct_card_map::" + flow_deduct_card_map);
kqLog.info("in getSignInfo ::userId" + userId + "kqDate==" + kqDate + ":hostIps:" + hostIps + ":uuid::" + uuid + "::signTimeScope::" + JSON.toJSONString(signTimeScope));
List<Map<String, String>> sqlConditions = getCanSignInfo(signTimeScope, kqDate, preDate, nextDate, kqTimesArrayComInfo, workTimeScope, shiftCount, shiftI, signoutOnlyoff);
base_sql = signSignSql(rs);
new KQLog().info("sqlConditions:(userId:" + userId + ":base_sql" + base_sql + ":::userId" + userId + "kqDate==" + kqDate + ":hostIps:" + hostIps + ":uuid::" + uuid + "::flow_deduct_card_map::" + flow_deduct_card_map + "::sqlConditions::" + JSONObject.toJSONString(sqlConditions));
if (sqlConditions != null && !sqlConditions.isEmpty()) {
kqLog.info("userId="+userId + ",kqDate="+kqDate+":sqlConditions:"+ JSONObject.toJSONString(sqlConditions));
if(shiftCount == 2) {
String fieldName = "";
if(shiftI == 0) {
fieldName = "signEndDateTime";
/*
1sqlConditions
sqlConditions:[
{"signEndDateTime":"2024-08-28 10:00:59","signBeginDateTime":"2024-08-28 06:00:00","type":"signin"},
{"signEndDateTime":"2024-08-28 12:40:59","signBeginDateTime":"2024-08-28 11:40:00","type":"signoff"}
]
2sqlConditions
sqlConditions:[
{"signEndDateTime":"2024-08-28 12:40:59","signBeginDateTime":"2024-08-28 06:00:00"}
]
*/
Map<String, String> sqlMap = sqlConditions.get((null!=sqlConditions && sqlConditions.size()>0)?(sqlConditions.size()-1):0);
String type = Util.null2String(sqlMap.get("type"));
if(type.length() > 0){
if("signoff".equalsIgnoreCase(type)){
count4NoonEndDateTime = Util.null2String(sqlMap.get(fieldName));
if (sqlConditions.size() >= 2) {
sqlMap = sqlConditions.get(1);
count4NoonStartDateTime = workEndDateTime;
count4NoonEndDateTime = Util.null2String(sqlMap.get("signEndDateTime"));
}
}else if("signin".equalsIgnoreCase(type)){
//暂不处理
}
}else{
count4NoonStartDateTime = workEndDateTime;
count4NoonEndDateTime = Util.null2String(sqlMap.get(fieldName));
}
} else if(shiftI == 1) {
fieldName = "signBeginDateTime";
Map<String, String> sqlMap = sqlConditions.get(0);
String type = Util.null2String(sqlMap.get("type"));
if(type.length() > 0){
if("signoff".equalsIgnoreCase(type)){
//暂不处理
}else if("signin".equalsIgnoreCase(type)){
count4NoonStartDateTime = Util.null2String(sqlMap.get("signBeginDateTime"));
if (count4NoonStartDateTime.length() == 19) {
count4NoonStartDateTime = count4NoonStartDateTime.substring(0, 17) + "00";
}
count4NoonEndDateTime = workBeginDateTime;
}
}else{
count4NoonStartDateTime = Util.null2String(sqlMap.get(fieldName));
if (count4NoonStartDateTime.length() == 19) {
count4NoonStartDateTime = count4NoonStartDateTime.substring(0, 17) + "00";
}
count4NoonEndDateTime = workBeginDateTime;
}
}
// Map<String, String> sqlMap = sqlConditions.get(0);
// count4NoonStartDateTime = Util.null2String(sqlMap.get(fieldName));
// if (count4NoonStartDateTime.length() == 19) {
// count4NoonStartDateTime = count4NoonStartDateTime.substring(0, 17) + "00";
// }
// sqlMap = sqlConditions.get(0);
// count4NoonEndDateTime = Util.null2String(sqlMap.get(fieldName));
// if (sqlConditions.size() >= 2) {
// sqlMap = sqlConditions.get(1);
// count4NoonEndDateTime = Util.null2String(sqlMap.get(fieldName));
// }
}
boolean hasSignIn = false;
for (Map<String, String> sqlMap : sqlConditions) {
String sql = "";
String orderSql = "";
int idx = 0;
String signBeginDateTime = Util.null2String(sqlMap.get("signBeginDateTime"));
String signEndDateTime = Util.null2String(sqlMap.get("signEndDateTime"));
String type = Util.null2String(sqlMap.get("type"));
String signoutOnlyoff_flag = Util.null2String(sqlMap.get("signoutOnlyoff"));
if (type.length() > 0) {
if ("signoff".equalsIgnoreCase(type)) {
orderSql = " order by signdate desc, signtime desc ";
} else if ("signin".equalsIgnoreCase(type)) {
orderSql = " order by signdate asc, signtime asc ";
}
if ("oracle".equalsIgnoreCase(dbtype)) {
sql = "select * from (" + base_sql + " " + orderSql + ") a where rownum=1";
} else if ("mysql".equalsIgnoreCase(dbtype)) {
sql = "select * from (" + base_sql + " " + orderSql + ") a limit 0,1";
} else if ("postgresql".equalsIgnoreCase(dbtype)) {
sql = "select * from (" + base_sql + " " + orderSql + ") a limit 1 offset 0";
} else if ("sqlserver".equalsIgnoreCase(dbtype)) {
sql = "select top 1 * from (" + base_sql + ") a " + " " + orderSql;
} else {
sql = "select * from (" + base_sql + " " + orderSql + ") a where rownum=1";
}
} else {
orderSql = " order by signdate asc, signtime asc ";
sql = base_sql + " " + orderSql;
}
rs.executeQuery(sql, userId, signBeginDateTime, signEndDateTime);
new KQLog().info("getSignInfo:(userId:" + userId + ":signBeginDateTime:" +
signBeginDateTime + ":signEndDateTime:" + signEndDateTime + "):sql" + sql + ":counts:" + rs.getCounts() + ":::userId" + userId + "kqDate==" + kqDate + ":hostIps:" + hostIps + ":uuid::" + uuid + "::flow_deduct_card_map::" + flow_deduct_card_map);
while (rs.next()) {
String signId = Util.null2String(rs.getString("id"));
String signdate = Util.null2String(rs.getString("signdate"));
String signtime = Util.null2String(rs.getString("signtime"));
checkInfo = new HashMap<>();
checkInfo.put("signId", signId);//签到签退标识
checkInfo.put("signDate", signdate);//签到签退日期
checkInfo.put("signTime", signtime);//签到签退时间
String signDateTime = signdate + " " + signtime;
idx++;
if (type.length() > 0) {
if ("signin".equalsIgnoreCase(type)) {
checkInfo.put("signType", "1");
if (workBeginDateTime.length() > 0) {
checkInfo.put("signStatus", UtilKQ.getSignStatus("1", signDateTime, workBeginDateTime));
}
if (!Util.null2String(checkInfo.get("signStatus")).equalsIgnoreCase(ButtonStatusEnum.NORMAL.getStatusCode())) {
if (flow_deduct_card_map.containsKey("signin")) {
String deduct_signintime = Util.null2String(flow_deduct_card_map.get("signin"));
if (deduct_signintime.length() > 0) {
signDateTime = signdate + " " + deduct_signintime;
checkInfo.put("deduct_signintime", deduct_signintime);//流程抵扣作为打卡时间
checkInfo.put("signStatus", UtilKQ.getSignStatus("1", signDateTime, workBeginDateTime));
}
}
}
lsCheckInfo.add(checkInfo);
} else {
checkInfo.put("signType", "2");
if (workEndDateTime.length() > 0) {
checkInfo.put("signStatus", UtilKQ.getSignStatus("2", signDateTime, workEndDateTime));
}
if (!Util.null2String(checkInfo.get("signStatus")).equalsIgnoreCase(ButtonStatusEnum.NORMAL.getStatusCode())) {
if (flow_deduct_card_map.containsKey("signoff")) {
String deduct_signofftime = Util.null2String(flow_deduct_card_map.get("signoff"));
if (deduct_signofftime.length() > 0) {
signDateTime = signdate + " " + deduct_signofftime;
checkInfo.put("deduct_signofftime", deduct_signofftime);//流程抵扣作为打卡时间
checkInfo.put("signStatus", UtilKQ.getSignStatus("2", signDateTime, workEndDateTime));
}
}
}
lsCheckInfo.add(checkInfo);
}
} else {
if (signoutOnlyoff_flag.length()>0) {
if("signin".equals(signoutOnlyoff_flag) && idx == 1){
checkInfo.put("signType", "1");
if (workBeginDateTime.length() > 0) {
checkInfo.put("signStatus", UtilKQ.getSignStatus("1", signDateTime, workBeginDateTime));
}
if (!Util.null2String(checkInfo.get("signStatus")).equalsIgnoreCase(ButtonStatusEnum.NORMAL.getStatusCode())) {
if (flow_deduct_card_map.containsKey("signin")) {
String deduct_signintime = Util.null2String(flow_deduct_card_map.get("signin"));
if (deduct_signintime.length() > 0) {
signDateTime = signdate + " " + deduct_signintime;
checkInfo.put("deduct_signintime", deduct_signintime);//流程抵扣作为打卡时间
checkInfo.put("signStatus", UtilKQ.getSignStatus("1", signDateTime, workBeginDateTime));
}
}
}
lsCheckInfo.add(checkInfo);
hasSignIn = true;
}
if("signoff".equals(signoutOnlyoff_flag)){
if ((hasSignIn && idx == rs.getCounts() && idx > 1) || (!hasSignIn && idx == rs.getCounts())) {//第一条可能是签到卡需要处理下,否则可能会导致一条上班卡同时识别为上班卡和下班卡
checkInfo.put("signType", "2");
if (workEndDateTime.length() > 0) {
checkInfo.put("signStatus", UtilKQ.getSignStatus("2", signDateTime, workEndDateTime));
}
if (!Util.null2String(checkInfo.get("signStatus")).equalsIgnoreCase(ButtonStatusEnum.NORMAL.getStatusCode())) {
if (flow_deduct_card_map.containsKey("signoff")) {
String deduct_signofftime = Util.null2String(flow_deduct_card_map.get("signoff"));
if (deduct_signofftime.length() > 0) {
signDateTime = signdate + " " + deduct_signofftime;
checkInfo.put("deduct_signofftime", deduct_signofftime);//流程抵扣作为打卡时间
checkInfo.put("signStatus", UtilKQ.getSignStatus("2", signDateTime, workEndDateTime));
}
}
}
lsCheckInfo.add(checkInfo);
}
}
} else {
if (idx == 1) {//第一条算签到
checkInfo.put("signType", "1");
if (workBeginDateTime.length() > 0) {
checkInfo.put("signStatus", UtilKQ.getSignStatus("1", signDateTime, workBeginDateTime));
}
if (!Util.null2String(checkInfo.get("signStatus")).equalsIgnoreCase(ButtonStatusEnum.NORMAL.getStatusCode())) {
if (flow_deduct_card_map.containsKey("signin")) {
String deduct_signintime = Util.null2String(flow_deduct_card_map.get("signin"));
if (deduct_signintime.length() > 0) {
signDateTime = signdate + " " + deduct_signintime;
checkInfo.put("deduct_signintime", deduct_signintime);//流程抵扣作为打卡时间
checkInfo.put("signStatus", UtilKQ.getSignStatus("1", signDateTime, workBeginDateTime));
}
}
}
lsCheckInfo.add(checkInfo);
hasSignIn = true;
} else if (idx == rs.getCounts()) {//最后一条算签退
checkInfo.put("signType", "2");
if (workEndDateTime.length() > 0) {
checkInfo.put("signStatus", UtilKQ.getSignStatus("2", signDateTime, workEndDateTime));
}
if (!Util.null2String(checkInfo.get("signStatus")).equalsIgnoreCase(ButtonStatusEnum.NORMAL.getStatusCode())) {
if (flow_deduct_card_map.containsKey("signoff")) {
String deduct_signofftime = Util.null2String(flow_deduct_card_map.get("signoff"));
if (deduct_signofftime.length() > 0) {
signDateTime = signdate + " " + deduct_signofftime;
checkInfo.put("deduct_signofftime", deduct_signofftime);//流程抵扣作为打卡时间
checkInfo.put("signStatus", UtilKQ.getSignStatus("2", signDateTime, workEndDateTime));
}
}
}
lsCheckInfo.add(checkInfo);
}
}
}
}
}
}
//如果签到,签退不成对,流程抵扣异常存在,那么需要判断下是不是可以补足
if (lsCheckInfo.size() < 2 && !flow_deduct_card_map.isEmpty()) {
if (lsCheckInfo.isEmpty()) {
if (flow_deduct_card_map.containsKey("signin")) {
String deduct_signintime = Util.null2String(flow_deduct_card_map.get("signin"));
if (deduct_signintime.length() > 0) {
checkInfo = new HashMap<>();
String[] workBeginDateTimes = workBeginDateTime.split(" ");
String tmp_workBeginDate = workBeginDateTimes[0];
String tmp_workBeginTime = workBeginDateTimes[1];
checkInfo.put("signType", "1");
checkInfo.put("signDate", tmp_workBeginDate);//签到签退日期
checkInfo.put("signTime", "");//签到签退时间
checkInfo.put("deduct_signintime", tmp_workBeginTime);//流程抵扣作为打卡时间
checkInfo.put("signStatus", ButtonStatusEnum.NORMAL.getStatusCode());
lsCheckInfo.add(checkInfo);
}
}
if (flow_deduct_card_map.containsKey("signoff")) {
String deduct_signofftime = Util.null2String(flow_deduct_card_map.get("signoff"));
if (deduct_signofftime.length() > 0) {
checkInfo = new HashMap<>();
String[] workEndDateTimes = workEndDateTime.split(" ");
String tmp_workEndDate = workEndDateTimes[0];
String tmp_workEndTime = workEndDateTimes[1];
checkInfo.put("signType", "2");
checkInfo.put("signDate", tmp_workEndDate);//签到签退日期
checkInfo.put("signTime", "");//签到签退时间
checkInfo.put("deduct_signofftime", tmp_workEndTime);//流程抵扣作为打卡时间
checkInfo.put("signStatus", ButtonStatusEnum.NORMAL.getStatusCode());
lsCheckInfo.add(checkInfo);
}
}
} else {
Map<String, Object> checkCardMap = (Map<String, Object>) lsCheckInfo.get(0);
if (!checkCardMap.isEmpty()) {
String signType = Util.null2String(checkCardMap.get("signType"));
if ("1".equalsIgnoreCase(signType)) {
//如果签到数据有了,检测下是不是有签退的流程抵扣打卡
if (flow_deduct_card_map.containsKey("signoff")) {
String deduct_signofftime = Util.null2String(flow_deduct_card_map.get("signoff"));
if (deduct_signofftime.length() > 0) {
checkInfo = new HashMap<>();
String[] workEndDateTimes = workEndDateTime.split(" ");
String tmp_workEndDate = workEndDateTimes[0];
String tmp_workEndTime = workEndDateTimes[1];
checkInfo.put("signType", "2");
checkInfo.put("signDate", tmp_workEndDate);//签到签退日期
checkInfo.put("signTime", "");//签到签退时间
checkInfo.put("deduct_signofftime", tmp_workEndTime);//流程抵扣作为打卡时间
checkInfo.put("signStatus", ButtonStatusEnum.NORMAL.getStatusCode());
lsCheckInfo.add(checkInfo);
}
}
} else {
if (flow_deduct_card_map.containsKey("signin")) {
String deduct_signintime = Util.null2String(flow_deduct_card_map.get("signin"));
if (deduct_signintime.length() > 0) {
checkInfo = new HashMap<>();
String[] workBeginDateTimes = workBeginDateTime.split(" ");
String tmp_workBeginDate = workBeginDateTimes[0];
String tmp_workBeginTime = workBeginDateTimes[1];
checkInfo.put("signType", "1");
checkInfo.put("signDate", tmp_workBeginDate);//签到签退日期
checkInfo.put("signTime", "");//签到签退时间
checkInfo.put("deduct_signintime", tmp_workBeginTime);//流程抵扣作为打卡时间
checkInfo.put("signStatus", ButtonStatusEnum.NORMAL.getStatusCode());
lsCheckInfo.add(checkInfo);
}
}
}
}
}
}
// 上午的签退取中间时段的第一次打卡
if (shiftCount == 2 && shiftI == 0) {
String noonSignTimeSql = KQSignUtil.buildSignSql(count4NoonStartDateTime, count4NoonEndDateTime);
String baseSql = "select * from hrmschedulesign where 1=1 and isInCom='1' and userid=" + userId + " ";
String sql = baseSql;
sql += " and " + noonSignTimeSql + " order by signdate, signtime";
rs.executeQuery(sql);
if (rs.next()) {
String signId = Util.null2String(rs.getString("id"));
String signDate = Util.null2String(rs.getString("signdate"));
String signTime = Util.null2String(rs.getString("signtime"));
String signDateTime = signDate + " " + signTime;
for (int j = 0; lsCheckInfo != null && j < lsCheckInfo.size(); j++) {
Map<String, Object> checkInfoInner = (Map<String, Object>) lsCheckInfo.get(j);
if (checkInfoInner.get("signType").equals("2")) {//签退
String signDateInner = Util.null2String(checkInfoInner.get("signDate"));
String signTimeInner = Util.null2String(checkInfoInner.get("signTime"));
String deduct_signofftime = Util.null2String(checkInfoInner.get("deduct_signofftime"));
if (!"".equals(signTimeInner)) {
String signDateTimeInner = signDateInner + " " + signTimeInner;
if (signDateTime.compareTo(signDateTimeInner) < 0) {
checkInfoInner.put("signId", signId);//签到签退标识
checkInfoInner.put("signType", "2");
checkInfoInner.put("signDate", signDateInner);//签到签退日期
checkInfoInner.put("signTime", signTime);//签到签退时间
checkInfoInner.put("deduct_signofftime", deduct_signofftime);//流程抵扣作为打卡时间
checkInfoInner.put("signStatus", ButtonStatusEnum.NORMAL.getStatusCode());
}
}
}
}
}
} else if (shiftCount == 2 && shiftI == 1) { // 下午的签到取中间时段的第二次打卡
String noonSignTimeSql = KQSignUtil.buildSignSql(count4NoonStartDateTime, count4NoonEndDateTime);
String baseSql = "select * from hrmschedulesign where 1=1 and isInCom='1' and userid=" + userId + " ";
String sql = baseSql;
sql += " and " + noonSignTimeSql + " order by signdate, signtime";
rs.executeQuery(sql);
int count = 0;
int counts = rs.getCounts();
if (counts == 1) {
// lsCheckInfo.clear();
}
while (rs.next()) {
if (count == 0) {
count++;
continue;
}
String signId = Util.null2String(rs.getString("id"));
String signTime = Util.null2String(rs.getString("signtime"));
for (int j = 0; lsCheckInfo != null && j < lsCheckInfo.size(); j++) {
Map<String, Object> checkInfoInner = (Map<String, Object>) lsCheckInfo.get(j);
if (checkInfoInner.get("signType").equals("1")) {//签退
String signDateInner = Util.null2String(checkInfoInner.get("signDate"));
String signTimeInner = Util.null2String(checkInfoInner.get("signTime"));
String deduct_signofftime = Util.null2String(checkInfoInner.get("deduct_signofftime"));
checkInfoInner.put("signId", signId);//签到签退标识
checkInfoInner.put("signType", "1");
checkInfoInner.put("signDate", signDateInner);//签到签退日期
checkInfoInner.put("signTime", signTime);//签到签退时间
checkInfoInner.put("deduct_signofftime", deduct_signofftime);//流程抵扣作为打卡时间
checkInfoInner.put("signStatus", ButtonStatusEnum.NORMAL.getStatusCode());
}
}
break;
}
}
} catch (Exception e) {
kqLog.info("报表错:getSignInfo:");
StringWriter errorsWriter = new StringWriter();
e.printStackTrace(new PrintWriter(errorsWriter));
kqLog.info(errorsWriter.toString());
}
//writeLog(sql,userId +"=="+ signBeginDateTime+"=="+signEndDateTime);
return lsCheckInfo;
}
/**
*
*
* @param userId
* @param kqDate
* @param workBeginDateTime
* @param workEndDateTime
*/
public Map<String, String> getflowDeductCardSql(String userId, String kqDate, String workBeginDateTime, String workEndDateTime) {
Map<String, String> flow_deduct_card_map = new HashMap<>();
RecordSet rs = new RecordSet();
String flow_deduct_card_sql = "select * from kq_flow_deduct_card where 1=1 and (isclear is null or isclear<>1) ";
if (userId.length() > 0) {
flow_deduct_card_sql += " and resourceid=" + userId;
}
if (kqDate.length() > 0) {
flow_deduct_card_sql += " and belongDate='" + kqDate + "'";
}
if (workBeginDateTime.length() > 0) {
flow_deduct_card_sql += " and workBeginTime='" + workBeginDateTime + "'";
}
if (workEndDateTime.length() > 0) {
flow_deduct_card_sql += " and workEndTime='" + workEndDateTime + "'";
}
rs.executeQuery(flow_deduct_card_sql);
while (rs.next()) {
String signtype = rs.getString("signtype");
if ("1".equalsIgnoreCase(signtype)) {
flow_deduct_card_map.put("signin", workBeginDateTime);
}
if ("2".equalsIgnoreCase(signtype)) {
flow_deduct_card_map.put("signoff", workEndDateTime);
}
}
return flow_deduct_card_map;
}
/**
* sql
*
* @param signTimeScope
* @param kqDate
* @param preDate
* @param nextDate
* @param kqTimesArrayComInfo
* @return
*/
public List<Map<String, String>> getCanSignInfo(TimeScopeEntity signTimeScope, String kqDate, String preDate, String nextDate, KQTimesArrayComInfo kqTimesArrayComInfo) {
return getCanSignInfo(signTimeScope, kqDate, preDate, nextDate, kqTimesArrayComInfo, null);
}
public List<Map<String, String>> getCanSignInfo(TimeScopeEntity signTimeScope, String kqDate, String preDate, String nextDate, KQTimesArrayComInfo kqTimesArrayComInfo,TimeScopeEntity workTimeScope,int signoutOnlyoff) {
return getCanSignInfo(signTimeScope, kqDate, preDate, nextDate, kqTimesArrayComInfo, workTimeScope, 0, 0, signoutOnlyoff);
}
public List<Map<String, String>> getCanSignInfo(TimeScopeEntity signTimeScope, String kqDate, String preDate, String nextDate, KQTimesArrayComInfo kqTimesArrayComInfo, TimeScopeEntity workTimeScope) {
return getCanSignInfo(signTimeScope, kqDate, preDate, nextDate, kqTimesArrayComInfo, workTimeScope, 0, 0);
}
public List<Map<String, String>> getCanSignInfo(TimeScopeEntity signTimeScope, String kqDate, String preDate, String nextDate, KQTimesArrayComInfo kqTimesArrayComInfo, TimeScopeEntity workTimeScope, int shiftCount, int shiftI) {
return getCanSignInfo(signTimeScope, kqDate, preDate, nextDate, kqTimesArrayComInfo, workTimeScope, shiftCount, shiftI, 0);
}
public List<Map<String, String>> getCanSignInfo(TimeScopeEntity signTimeScope, String kqDate, String preDate, String nextDate, KQTimesArrayComInfo kqTimesArrayComInfo, TimeScopeEntity workTimeScope, int shiftCount, int shiftI, int signoutOnlyoff) {
List<Map<String, String>> sqlConditions = new ArrayList<>();
Map<String, String> conditionMap = new HashMap<>();
TimeSignScopeEntity timeSignScopeEntity = signTimeScope.getTimeSignScopeEntity();
String signBeginDateTime = "";
String signEndDateTime = "";
signBeginDateTime = signTimeScope.getBeginTimeAcross() ? nextDate : kqDate;
if (signTimeScope.isBeginTimePreAcross()) {
signBeginDateTime = preDate;
}
signBeginDateTime += " " + kqTimesArrayComInfo.turn48to24Time(signTimeScope.getBeginTime()) + ":00";
signEndDateTime = signTimeScope.getEndTimeAcross() ? nextDate : kqDate;
// if (workTimeScope != null && workTimeScope.getEndTimeAcross() && signTimeScope.getEndTimeAcross() ) {
// if(workTimeScope.getEndTime().compareTo(signTimeScope.getEndTime())>=0){
// signEndDateTime = DateUtil.addDate(kqDate, 2);//下下一天日期;
// }
// }
signEndDateTime += " " + kqTimesArrayComInfo.turn48to24Time(signTimeScope.getEndTime()) + ":59";
if (timeSignScopeEntity == null) {
//没有设置 签到最晚时间和签退最早时间比如是09:00-18:00打卡范围是【08:00---19:00】
if (signoutOnlyoff == 1 && workTimeScope != null) {//开启了下班后只能签退的按钮,那么考勤格式化的打卡数据查询范围也搞一下
String signBeginDateEndTime = "";
String signEndDateStartTime = "";
String workEndTime = workTimeScope.getEndTime();
boolean workEndTimeAcross = workTimeScope.getEndTimeAcross();
String workEndTimeNew = kqTimesArrayComInfo.getTimesByArrayindex(kqTimesArrayComInfo.getArrayindexByTimes(workEndTime) - 1);//17:59
signBeginDateEndTime = workEndTimeAcross ? nextDate : kqDate;
signBeginDateEndTime += " " + kqTimesArrayComInfo.turn48to24Time(workEndTimeNew) + ":59";//17:59:59
conditionMap = new HashMap<>();
conditionMap.put("signBeginDateTime", signBeginDateTime);//08:00:00
conditionMap.put("signEndDateTime", signBeginDateEndTime);//17:59:59
// conditionMap.put("type", "signin");
conditionMap.put("signoutOnlyoff", "signin");
sqlConditions.add(conditionMap);
conditionMap = new HashMap<>();
conditionMap.put("signBeginDateTime", signBeginDateTime);//08:00:00这里为什么从上班开始打卡时间起算因为存在上班有打卡连续打卡的情况那么需要将除上班卡之后的打卡都识别为下班卡
conditionMap.put("signEndDateTime", signEndDateTime);//19:00:59
//这里不能传type=signoff否则上班打卡可能会同时识别为上班卡和下班卡
conditionMap.put("signoutOnlyoff", "signoff");
sqlConditions.add(conditionMap);
} else {//走标准原逻辑
conditionMap = new HashMap<>();
conditionMap.put("signBeginDateTime", signBeginDateTime);
conditionMap.put("signEndDateTime", signEndDateTime);
sqlConditions.add(conditionMap);
}
} else {
String beginTimeEnd = timeSignScopeEntity.getBeginTimeEnd();
boolean beginTimeEndAcross = timeSignScopeEntity.isBeginTimeEndAcross();
String endTimeStart = timeSignScopeEntity.getEndTimeStart();
boolean endTimeStartAcross = timeSignScopeEntity.isEndTimeStartAcross();
if (beginTimeEnd.length() > 0) {
//如果设置了 上班结束时间
if (endTimeStart.length() > 0) {
//设置了下班开始时间
String signBeginDateEndTime = "";
String signEndDateStartTime = "";
signBeginDateEndTime = beginTimeEndAcross ? nextDate : kqDate;
signBeginDateEndTime += " " + kqTimesArrayComInfo.turn48to24Time(beginTimeEnd) + ":59";
//张总表示设了打卡归属,以设置的为准,这个开关相当于不起作用,代码含泪注释
// if(signoutOnlyoff == 1 && workTimeScope != null){//开启了下班后只能签退的按钮,那么考勤格式化的打卡数据查询范围也搞一下
// String workEndTime = workTimeScope.getEndTime();
// boolean workEndTimeAcross = workTimeScope.getEndTimeAcross();
// signBeginDateEndTime = workEndTimeAcross ? nextDate : kqDate;
// signBeginDateEndTime+=" "+kqTimesArrayComInfo.turn48to24Time(workEndTime)+":59";
// conditionMap = new HashMap<>();
// conditionMap.put("signBeginDateTime", signBeginDateTime);
// conditionMap.put("signEndDateTime", signBeginDateEndTime);
// conditionMap.put("type", "signin");
// sqlConditions.add(conditionMap);
//
// conditionMap = new HashMap<>();
// conditionMap.put("signBeginDateTime", signBeginDateEndTime);
// conditionMap.put("signEndDateTime", signEndDateTime);
// conditionMap.put("type", "signoff");
// sqlConditions.add(conditionMap);
//
// }else{
conditionMap = new HashMap<>();
conditionMap.put("signBeginDateTime", signBeginDateTime);
conditionMap.put("signEndDateTime", signBeginDateEndTime);
conditionMap.put("type", "signin");
sqlConditions.add(conditionMap);
signEndDateStartTime = endTimeStartAcross ? nextDate : kqDate;
signEndDateStartTime += " " + kqTimesArrayComInfo.turn48to24Time(endTimeStart) + ":00";
conditionMap = new HashMap<>();
conditionMap.put("signBeginDateTime", signEndDateStartTime);
conditionMap.put("signEndDateTime", signEndDateTime);
conditionMap.put("type", "signoff");
sqlConditions.add(conditionMap);
// }
} else {
//没有设置下班开始时间
String signBeginDateEndTime = "";
String signEndDateStartTime = "";
signBeginDateEndTime = beginTimeEndAcross ? nextDate : kqDate;
signBeginDateEndTime += " " + kqTimesArrayComInfo.turn48to24Time(beginTimeEnd) + ":59";
conditionMap = new HashMap<>();
conditionMap.put("signBeginDateTime", signBeginDateTime);
conditionMap.put("signEndDateTime", signBeginDateEndTime);
conditionMap.put("type", "signin");
sqlConditions.add(conditionMap);
//如果设置了上班结束时间,相当于下班开始时间也被限定了
String endTimeByBeginTime = kqTimesArrayComInfo.getTimesByArrayindex(kqTimesArrayComInfo.getArrayindexByTimes(beginTimeEnd) + 1);
signEndDateStartTime = beginTimeEndAcross ? nextDate : kqDate;
signEndDateStartTime += " " + kqTimesArrayComInfo.turn48to24Time(endTimeByBeginTime) + ":00";
conditionMap = new HashMap<>();
conditionMap.put("signBeginDateTime", signEndDateStartTime);
conditionMap.put("signEndDateTime", signEndDateTime);
conditionMap.put("type", "signoff");
sqlConditions.add(conditionMap);
}
} else if (endTimeStart.length() > 0) {
//如果没有设置上班结束时间,设置了下班开始时间
String signBeginDateEndTime = "";
String signEndDateStartTime = "";
//如果设置了下班开始时间,相当于上班结束时间也被限定了
String BeginTimeByendTime = kqTimesArrayComInfo.getTimesByArrayindex(kqTimesArrayComInfo.getArrayindexByTimes(endTimeStart) - 1);
signBeginDateEndTime = endTimeStartAcross ? nextDate : kqDate;
signBeginDateEndTime += " " + kqTimesArrayComInfo.turn48to24Time(BeginTimeByendTime) + ":59";
conditionMap = new HashMap<>();
conditionMap.put("signBeginDateTime", signBeginDateTime);
conditionMap.put("signEndDateTime", signBeginDateEndTime);
conditionMap.put("type", "signin");
sqlConditions.add(conditionMap);
signEndDateStartTime = endTimeStartAcross ? nextDate : kqDate;
signEndDateStartTime += " " + kqTimesArrayComInfo.turn48to24Time(endTimeStart) + ":00";
conditionMap = new HashMap<>();
conditionMap.put("signBeginDateTime", signEndDateStartTime);
conditionMap.put("signEndDateTime", signEndDateTime);
conditionMap.put("type", "signoff");
sqlConditions.add(conditionMap);
}
}
return sqlConditions;
}
public String signSignSql(RecordSet rs) {
String sql = "";
if (rs.getDBType().equals("oracle")) {
sql = " select id,signdate,signtime from hrmschedulesign where isincom=1 and userid = ? and signdate||' '||signtime >= ? and signdate||' '||signtime <= ? " +
" ";
} else if ("sqlserver".equals(rs.getDBType())) {
sql = " select id,signdate,signtime from hrmschedulesign where isincom=1 and userid = ? and signdate + ' ' + signtime >= ? and signdate + ' ' + signtime <= ? " +
" ";
} else {
sql = " select id,signdate,signtime from hrmschedulesign where isincom=1 and userid = ? and concat(signdate,' ',signtime) >= ? and concat(signdate,' ',signtime) <= ? " +
" ";
}
return sql;
}
public List<Object> getSignInfoForAll(String userId, String signBeginDateTime, String signEndDateTime, String workBeginDateTime, String workEndDateTime) {
List<Object> lsCheckInfo = new ArrayList<>();
Map<String, Object> checkInfo = null;
String sql = "";
RecordSet rs = new RecordSet();
int idx = 0;
if (rs.getDBType().equals("oracle")) {
sql = " select id,signdate,signtime from hrmschedulesign where isincom=1 and userid = ? and signdate||' '||signtime >= ? and signdate||' '||signtime <= ? " +
" order by signdate asc, signtime asc ";
} else if ("sqlserver".equals(rs.getDBType())) {
sql = " select id,signdate,signtime from hrmschedulesign where isincom=1 and userid = ? and signdate + ' ' + signtime >= ? and signdate + ' ' + signtime <= ? " +
" order by signdate asc, signtime asc ";
} else {
sql = " select id,signdate,signtime from hrmschedulesign where isincom=1 and userid = ? and concat(signdate,' ',signtime) >= ? and concat(signdate,' ',signtime) <= ? " +
" order by signdate asc, signtime asc ";
}
rs.executeQuery(sql, userId, signBeginDateTime, signEndDateTime);
//writeLog(sql,userId +"=="+ signBeginDateTime+"=="+signEndDateTime);
while (rs.next()) {
String signId = Util.null2String(rs.getString("id"));
String signdate = Util.null2String(rs.getString("signdate"));
String signtime = Util.null2String(rs.getString("signtime"));
checkInfo = new HashMap<>();
checkInfo.put("signId", signId);//签到签退标识
checkInfo.put("signDate", signdate);//签到签退日期
checkInfo.put("signTime", signtime);//签到签退时间
String signDateTime = signdate + " " + signtime;
idx++;
if (idx % 2 == 1) {
checkInfo.put("signType", "1");
} else {
checkInfo.put("signType", "2");
}
lsCheckInfo.add(checkInfo);
}
return lsCheckInfo;
}
public List<Object> getNonWorkSignInfo(String userId, String preDate, String kqDate,
List<TimeScopeEntity> pre_lsSignTime,
List<TimeScopeEntity> next_lsSignTime) {
List<Object> lsCheckInfo = new ArrayList<>();
Map<String, Object> checkInfo = null;
RecordSet rs = new RecordSet();
String pre_Worktime4Today = "";
if (!pre_lsSignTime.isEmpty()) {
TimeScopeEntity pre_signTimeScope = pre_lsSignTime.get(pre_lsSignTime.size() - 1);
if (pre_signTimeScope.getEndTimeAcross()) {
pre_Worktime4Today = pre_signTimeScope.getEndTime();
}
}
String next_Worktime4Today = "";
if (!next_lsSignTime.isEmpty()) {
TimeScopeEntity next_signTimeScope = next_lsSignTime.get(next_lsSignTime.size() - 1);
if (next_signTimeScope.isBeginTimePreAcross()) {
next_Worktime4Today = next_signTimeScope.getBeginTime();
}
}
String sql = "select * from hrmschedulesign where userid=" + userId + " and signdate = '" + kqDate + "' ";
if (pre_Worktime4Today.length() > 0) {
if (pre_Worktime4Today.length() == 5) {
pre_Worktime4Today += ":59";
}
sql += " and signtime > '" + pre_Worktime4Today + "'";
}
if (next_Worktime4Today.length() > 0) {
if (next_Worktime4Today.length() == 5) {
next_Worktime4Today += ":00";
}
sql += " and signtime < '" + next_Worktime4Today + "'";
}
sql += " order by signdate asc,signtime asc ";
rs.executeQuery(sql);
int idx = 0;
while (rs.next()) {
String signId = Util.null2String(rs.getString("id"));
String signdate = Util.null2String(rs.getString("signdate"));
String signtime = Util.null2String(rs.getString("signtime"));
checkInfo = new HashMap<>();
checkInfo.put("signId", signId);//签到签退标识
checkInfo.put("signDate", signdate);//签到签退日期
checkInfo.put("signTime", signtime);//签到签退时间
idx++;
if (idx == 1) {//第一条算签到
checkInfo.put("signType", "1");
lsCheckInfo.add(checkInfo);
} else if (idx == rs.getCounts()) {//最后一条算签退
checkInfo.put("signType", "2");
lsCheckInfo.add(checkInfo);
}
}
return lsCheckInfo;
}
/**
*
* @param serial
* @param status
* @param record
* @return
*/
private static String getBcTimes(String serial,String status,String record){
RecordSet rs = new RecordSet();
String sql = "select times from kq_ShiftOnOffWorkSections where serialid = "+serial+" and (isdelete is null or isdelete <> '1') and onoffworktype = '"+status+"' and record = "+record;
rs.execute(sql);
String times = "";
if (rs.next()){
times = Util.null2String(rs.getString("times"));
}
return times;
}
/**
*
* @param userId
* @param date
* @param end
* @return
*/
private static Integer checkDkCount(String userId,String date,String end){
RecordSet rs = new RecordSet();
String sql = "select count(*) as num from HrmScheduleSign where userid = "+userId+" and signdate = '"+date+"' and signtime < '"+end+"'";
rs.execute(sql);
Integer dkCount = 0;
if (rs.next()){
dkCount = Util.getIntValue(rs.getString("num"));
}
return dkCount;
}
/**
*
* @param userId
* @param date
* @param end
* @return
*/
private static String getSignTimeNew(String userId,String date,String end){
RecordSet rs = new RecordSet();
String sql = "select signtime from HrmScheduleSign where userid = "+userId+" and signdate = '"+date+"' and signtime < '"+end+"' order by signtime desc limit 1";
rs.execute(sql);
String signTimeB = "";
if (rs.next()){
signTimeB = Util.null2String(rs.getString("signtime"));
}
return signTimeB;
}
}

@ -0,0 +1,220 @@
package com.engine.kq.biz;
import com.alibaba.fastjson.JSON;
import com.cloudstore.dev.api.bean.MessageBean;
import com.cloudstore.dev.api.bean.MessageType;
import com.cloudstore.dev.api.util.Util_Message;
import com.engine.kq.entity.KQGroupEntity;
import com.engine.kq.log.KQLog;
import com.engine.msgcenter.biz.ConfigManager;
import com.engine.msgcenter.biz.WeaMessageTypeConfig;
import com.google.common.collect.Sets;
import com.weaver.general.Util;
import weaver.common.DateUtil;
import weaver.conn.RecordSet;
import weaver.general.BaseBean;
import weaver.hrm.common.Tools;
import weaver.hrm.resource.ResourceComInfo;
import weaver.interfaces.schedule.BaseCronJob;
import weaver.systeminfo.SystemEnv;
import java.util.*;
public class KQYesterdayAbnormalRemindJob extends BaseCronJob {
private BaseBean log = new BaseBean();
private KQLog kqLog = new KQLog();
public void execute() {
String currentDate = Tools.getCurrentDate();
String yesterDay = DateUtil.addDate(currentDate, -1);
kqLog.info(">>>>>>>>>>>>>>>>KQYesterdayAbnormalRemindJob>>>>>>>>>>>>>>begin>>>>>>>>>>>>>>>>");
handleKqRemind(yesterDay);
kqLog.info(">>>>>>>>>>>>>>>>KQYesterdayAbnormalRemindJob>>>>>>>>>>>>>>end>>>>>>>>>>>>>>>>");
}
private void handleKqRemind(String date) {
try {
ResourceComInfo resourceComInfo = new ResourceComInfo();
KQGroupMemberComInfo kqGroupMemberComInfo = new KQGroupMemberComInfo();
Map<String, StringBuilder> managerMessages = new HashMap<>();
Map<String, StringBuilder> managerMessagesUUID = new HashMap<>();
Map<String, Map<String, Double>> yesterdayAbnormalData = new KqYesterdayAbnormalRemindBiz().getYesterdayAbnormalData(date, date);
String curDateTime = DateUtil.getDateTime();
RecordSet recordSet = new RecordSet();
for(Map.Entry<String, Map<String, Double>> entry : yesterdayAbnormalData.entrySet()) {
String resourceId = entry.getKey();
Map<String, Double> value = entry.getValue();
KQGroupEntity kQGroupEntity = kqGroupMemberComInfo.getUserKQGroupInfo(resourceId, date);
String abnormalremind = Util.null2String(kQGroupEntity.getAbnormalremind());
if(!"1".equals(abnormalremind)){
kqLog.info(">>>>>>>>>>>>>>>>KQYesterdayAbnormalRemindJob>>>>>>>>>>>>>>abnormalremind is closed>>>>>>>>>>>>>>>>"+resourceId);
continue;
}
kqLog.info(">>>>>>>>>>>>>>>>KQYesterdayAbnormalRemindJob>>>>>>>>>>>>>>value>>>>>>>>>>>>>>>>"+value);
double late = value.get("late") == null ? 0.0 : value.get("late");
double leaveearly = value.get("leaveearly") == null ? 0.0 : value.get("leaveearly");
double absent = value.get("absent") == null ? 0.0 : value.get("absent");
double forgot = value.get("forgot") == null ? 0.0 : value.get("forgot");
double gravelate = value.get("gravelate") == null ? 0.0 : value.get("gravelate");
double graveleaveearly = value.get("graveleaveearly") == null ? 0.0 : value.get("graveleaveearly");
String content = getLabelName(97) +""+date+" " + getLabelName(1867)+""+resourceComInfo.getLastname(resourceId) +" "+ getLabelName(24770)+"";
StringBuffer remindContentStr = new StringBuffer();
StringBuffer sb = new StringBuffer();
if(late > 0) {
sb.append(getLabelName(20081)) ;//迟到
remindContentStr.append(getLabelName(390055)).append("").append(late).append(getLabelName(518516));
}
if(gravelate > 0){
if(sb.length() > 0) {
sb.append( ",");
}
sb.append(getLabelName(500546)) ;//严重迟到
if(remindContentStr.length() >0) {
remindContentStr.append(",");
}
remindContentStr.append(getLabelName(390056)).append("").append(gravelate).append(getLabelName(518516));
}
if(leaveearly > 0){
if(sb.length() > 0) {
sb.append( ",");
}
sb.append(getLabelName(20082)) ;//早退
if(remindContentStr.length() >0) {
remindContentStr.append(",");
}
remindContentStr.append(getLabelName(390057)).append("").append(leaveearly).append(getLabelName(518516));
}
if(graveleaveearly > 0){
if(sb.length() > 0) {
sb.append( ",");
}
sb.append(getLabelName(500547)) ;//严重早退
if(remindContentStr.length() >0) {
remindContentStr.append(",");
}
remindContentStr.append(getLabelName(390058)).append("").append(graveleaveearly).append(getLabelName(518516));
}
if(absent > 0) {
if(sb.length() > 0) {
sb.append( ",");
}
sb.append( getLabelName(20085));//旷工
if(remindContentStr.length() >0) {
remindContentStr.append(",");
}
remindContentStr.append(getLabelName(390059)).append("").append(absent).append(getLabelName(518516));
}
if(forgot > 0) {
if(sb.length() > 0) {
sb.append( ",");
}
sb.append(getLabelName(20086));//漏签
if(remindContentStr.length() >0) {
remindContentStr.append(",");
}
remindContentStr.append(getLabelName(20086)).append(getLabelName(21551)).append("").append(forgot).append(getLabelName(518516));
}
if(sb.length() > 0) {
content += sb.toString();
content += "<br>"+remindContentStr.toString();
} else {
continue;
}
kqLog.info(">>>>>>>>>>>>>>>>KQYesterdayAbnormalRemindJob>>>>>>>>>>>>>>content>>>>>>>>>>>>>>>>"+content);
String uuid = UUID.randomUUID().toString().replace("-", "");
appNotification(resourceId, content, uuid);
insertMessageLog(resourceId, content, resourceId, curDateTime, uuid, recordSet);
String managerID = resourceComInfo.getManagerID(resourceId);
if (managerID != null && !"".equals(managerID) && Util.getIntValue(managerID, 0) > 0) {
String managerUUID = "";
if(managerMessagesUUID.containsKey(managerID)) {
managerUUID = managerMessagesUUID.get(managerID).toString();
} else {
managerUUID = UUID.randomUUID().toString().replace("-", "");
managerMessagesUUID.put(managerID, new StringBuilder(managerUUID));
}
insertMessageLog(resourceId, content, managerID, curDateTime, managerUUID, recordSet);
managerMessages.putIfAbsent(managerID, new StringBuilder());
managerMessages.get(managerID).append(content).append("<br><br>");
}
}
// 统一发送给上级
for (Map.Entry<String, StringBuilder> entry : managerMessages.entrySet()) {
String managerID = entry.getKey();
String content = entry.getValue().toString();
String managerUUID = managerMessagesUUID.get(managerID).toString();
appNotification(managerID, content, managerUUID);
}
} catch (Exception e) {
log.writeLog(e);
}
}
private static String getLabelName(int labelId) {
return SystemEnv.getHtmlLabelName(labelId, weaver.general.ThreadVarLanguage.getLang());
}
private void insertMessageLog(String resourceId, String content, String receiverId, String sendTime, String uuid, RecordSet rs) {
String sql = "INSERT INTO abnormalremindmsg_log (resourceId, content, sendTime, receiverId,uuid) VALUES (?, ?, ?, ?, ?)";
try {
rs.executeUpdate(sql, resourceId, content, sendTime, receiverId, uuid);
} catch (Exception e) {
log.writeLog(e);
kqLog.info("KQYesterdayAbnormalRemindJob::insertMessageLog: error inserting log for resourceId=" + resourceId + ", receiverId=" + receiverId, e);
}
}
public void appNotification(String resourceId,String content, String uuid) {
try {
String detailTitle = "539214";
String title = content;
int createrId = 1;
String pcUrl = "/spa/hrm/static4attendance/index.html#/attendance/abnormalremindMsg?uuid="+uuid;
String mobileUrl = "/spa/hrm/static4mobile/index.html#/abnormalremindMsg?uuid="+uuid;
ConfigManager configManager = new ConfigManager();
// 2、默认规则检查用户配置,返回后台自定义消息类型和对应通过配置的用户
// @param singPath 与需求变更之前的path参数含义一致,代表该消息类型详细配置中唯一标志值,各模块参考自己的值(有疑问请联系云商店-田泽法)
// @param userid 按默认规则检查的用户配置信息(检查多人参考重载方法)
Map<WeaMessageTypeConfig, List<String>> accessConfig = configManager.defaultRuleCheckConfig(MessageType.HRM_KQ_REMIND, resourceId, null);
// 3、遍历自定义消息类型集合
for (Map.Entry<WeaMessageTypeConfig, List<String>> entry : accessConfig.entrySet()) {
// 4、构造消息实体
MessageBean bean = Util_Message.createMessage(MessageType.HRM_KQ_REMIND, 0, title, detailTitle, content, pcUrl, mobileUrl, createrId);
// 5、获取新的自定义消息类型
WeaMessageTypeConfig config = entry.getKey();
// 6、新的自定义消息类型相关信息通知到消息实体bean上
bean.setMessageConfig(config);
// 7、设置检查配置通过需要发送消息的用户
bean.setUserList(Sets.newHashSet(entry.getValue()));
// 8、发送消息
Util_Message.sendAndpublishMessage(bean);
kqLog.info("in>>>>KQYesterdayAbnormalRemindJob>>>>>>appNotification=bean::"+ JSON.toJSONString(bean));
}
} catch (Exception e) {
log.writeLog(e);
}
}
}

@ -0,0 +1,90 @@
package com.engine.kq.biz;
import com.engine.kq.log.KQLog;
import weaver.conn.RecordSet;
import weaver.general.Util;
import java.util.HashMap;
import java.util.Map;
/**
*
*/
public class KqYesterdayAbnormalRemindBiz {
private KQLog kqLog = new KQLog();
/**
*
* @return
*/
public Map<String, Map<String, Double>> getYesterdayAbnormalData(String fromDate, String toDate) {
return getYesterdayAbnormalData(fromDate, toDate, null);
}
public Map<String, Map<String, Double>> getYesterdayAbnormalData(String fromDate, String toDate, String resourceId) {
kqLog.info("KqAbnormalRemindBiz::getYesterdayAbnormalData:fromDate"+fromDate+":toDate:"+toDate+":resourceId:"+resourceId);
RecordSet rs = new RecordSet();
Map<String, Map<String, Double>> yesterdayAbnormalMap = new HashMap<>();
String forgotBeginWorkCheck_field = " sum(b.forgotBeginWorkCheck) ";
if(rs.getDBType().equalsIgnoreCase("oracle") || rs.getDBType().equalsIgnoreCase("gs")) {
forgotBeginWorkCheck_field = " sum(nvl(b.forgotbeginworkcheckmins,0)) ";
}else if((rs.getDBType()).equalsIgnoreCase("mysql")){
forgotBeginWorkCheck_field = " sum(ifnull(b.forgotbeginworkcheckmins,0)) ";
}else {
forgotBeginWorkCheck_field = " sum(isnull(b.forgotbeginworkcheckmins,0)) ";
}
String backFields = " a.id,a.lastname,a.workcode,a.dsporder,b.resourceid,a.subcompanyid1 as subcompanyid,a.departmentid,a.jobtitle," +
" sum(b.beLateMins) as beLateMins, " +
" sum(b.graveBeLateMins) as graveBeLateMins," +
" sum(b.leaveEarlyMins) as leaveEarlyMins, " +
" sum(b.graveLeaveEarlyMins) as graveLeaveEarlyMins, " +
" sum(b.absenteeismMins) as absenteeismMins, sum(b.forgotcheckmins)+"+forgotBeginWorkCheck_field+" as forgotCheckMins ";
if(rs.getDBType().equals("oracle")){
backFields = "/*+ index(kq_format_total IDX_KQ_FORMAT_TOTAL_KQDATE) */ "+backFields;
}
String sqlFrom = " from hrmresource a, kq_format_detail b where a.id= b.resourceid and b.kqdate >='"+fromDate+"' and b.kqdate <='"+toDate+"'";
if(resourceId != null) {
sqlFrom += " and (a.accounttype = 0 or a.accounttype is null) and a.id="+resourceId;
}
String groupBy = " group by a.id,a.lastname,a.workcode,a.dsporder,b.resourceid,a.subcompanyid1,a.departmentid,a.jobtitle ";
String sql = backFields + sqlFrom + groupBy;
sql = " select " + sql;
kqLog.info("KqAbnormalRemindBiz::sql:"+sql);
rs.executeQuery(sql);
while (rs.next()) {
Map<String, Double> abnormalDataMap = new HashMap<>();
String userId = rs.getString("id");
double beLateMins = Util.getDoubleValue(rs.getString("beLateMins"), 0.0);//迟到
double graveBeLateMins = Util.getDoubleValue(rs.getString("graveBeLateMins"), 0.0);//严重迟到
double leaveEarlyMins = Util.getDoubleValue(rs.getString("leaveEarlyMins"), 0.0);//早退
double graveLeaveEarlyMins = Util.getDoubleValue(rs.getString("graveLeaveEarlyMins"), 0.0);//严重早退
double absenteeismMins = Util.getDoubleValue(rs.getString("absenteeismMins"), 0.0);//旷工
double forgotCheck = Util.getDoubleValue(rs.getString("forgotCheckMins"), 0.0);//漏签
if(beLateMins> 0) {
abnormalDataMap.put("late", beLateMins);
}
if(graveBeLateMins> 0) {
abnormalDataMap.put("gravelate", graveBeLateMins);
}
if(leaveEarlyMins> 0) {
abnormalDataMap.put("leaveearly", leaveEarlyMins);
}
if(graveLeaveEarlyMins> 0) {
abnormalDataMap.put("graveleaveearly", graveLeaveEarlyMins);
}
if(absenteeismMins> 0) {
abnormalDataMap.put("absent", absenteeismMins);
}
if(forgotCheck> 0) {
abnormalDataMap.put("forgot", forgotCheck);
}
if(!abnormalDataMap.isEmpty()) {
yesterdayAbnormalMap.put(userId, abnormalDataMap);
}
}
kqLog.info("KqAbnormalRemindBiz::getYesterdayAbnormalData:yesterdayAbnormalMap"+yesterdayAbnormalMap);
return yesterdayAbnormalMap;
}
}

@ -0,0 +1,805 @@
package com.engine.kq.biz.chain.shiftinfo;
import com.engine.kq.entity.TimeScopeEntity;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 1KQTimesArrayComInfo00:00-23:590-1439
* index
*
* 2
* 8:00-12:00
* 13:00-18:00
* 22:00-4:00
*
* 3...
*
* 4restTimes15:00-16:00{[100,200]}
*
* 5workIndex8:00-12:00...{[50,80],[90,180],[250,280]}workIndexTime
*
* 6halfWorkIndex
* 158:00-16:301
* halfWorkIndex{[50,70]}halfWorkIndexTime
*
* 7wholeWorkIndexworkIndexwholeWorkIndexTime
*
*/
public class ShiftInfoBean {
/**
*
*/
private String splitFromTime;
/**
*
*/
private String splitToTime;
/**
*
*/
private String splitDate;
/**
*
*/
private List<int[]> workIndex;
/**
*
*/
private List<int[]> workAcrossIndex;
/**
*
*/
private List<String[]> workAcrossTime;
/**
* 退
*/
private List<String[][]> workMinsAcrossIndex;
/**
*
*/
private List<int[]> restIndex;
/**
*
*/
private List<int[]> restAcrossIndex;
/**
*
*
*/
private List<int[]> halfWorkIndex;
/**
*
*/
private int workmins;
private int signoutOnlyoff;
/**
*
*/
private int changeType;
/**
*
*/
private String serialid;
/**
*
*/
private String preSplitDate;
/**
*
*/
private List<int[]> preWorkIndex;
/**
*
*/
private List<int[]> preWorkAcrossIndex;
/**
* 退
*/
private List<String[][]> preWorkMinsAcrossIndex;
/**
*
*/
private Map<String,String> preWorktimeAcrossMap;
/**
*
*/
private List<int[]> preRestIndex;
/**
*
*
*/
private List<int[]> preHalfWorkIndex;
/**
*
*/
private int preWorkmins;
/**
*
*/
private String preSerialid;
/**
*
*/
private double D_Mins;
/**
*
*
*/
private String minimumUnit;
/**
*
*/
private String duration;
/**
* 23:59-24:00
*/
private String oneMoreMinute;
/**
*
*/
private int[] curMins;
/**
*
*/
private int[] preMins;
/**
*
*/
private List<String> allWorkTime;
/**
*
*/
private List<String> allAcrossWorkTime;
/**
*
*/
private List<String> allRestTime;
/**
*
*/
private List<String> allAcrossRestTime;
/**
*
*/
private List<String> preAllWorkTime;
/**
*
*/
private List<String> preAllAcrossWorkTime;
/**
*
*/
private List<String> preAllRestTime;
/**
*
*/
private List<String> preAllAcrossRestTime;
/**
*
*/
private boolean isfree;
/**
*
*/
private String freeSignStart;
/**
*
*/
private String freeWorkMins;
/**
* 退
*/
private String freeSignEnd;
/**
*
*/
private String freeSignMiddle;
/**
* 0-48
*/
private List<int[]> workLongTimeIndex;
/**
* 0-48
*/
private List<int[]> restLongTimeIndex;
/**
* 48
*/
private List<String> allLongWorkTime;
/**
*
*/
private String isAcross;
/**
*
*/
private String isPreAcross;
private Map<String,Object> shiftRuleMap;
/**
* kqformdateworkTimeEntity
*/
private List<TimeScopeEntity> signTime;//允许打卡时间
/**
* kqformdateworkTimeEntity
*/
private List<TimeScopeEntity> workTime;//工作时间
/**
*
*/
private String halfcalrule;
/**
*
*/
private String halfcalpoint;
private String halfcalpoint2cross;
/**
*
*/
private List<Integer> eachWorkMins;
/**
* 1
*/
private int restShift;
/**
*
*/
private String preConvertAttendDay = "";
/**
*
*/
private String convertAttendDay = "";
public ShiftInfoBean() {
this.splitFromTime = "";
this.splitToTime = "";
this.splitDate = "";
this.workIndex = new ArrayList<>();
this.workAcrossIndex = new ArrayList<>();
this.restIndex = new ArrayList<>();
this.restAcrossIndex = new ArrayList<>();
this.halfWorkIndex = new ArrayList<>();
this.workmins = 0;
this.signoutOnlyoff = 0;
this.preSplitDate = "";
this.preWorkIndex = new ArrayList<>();
this.preWorkAcrossIndex = new ArrayList<>();
this.preWorktimeAcrossMap = new HashMap<>();
this.preRestIndex = new ArrayList<>();
this.preHalfWorkIndex = new ArrayList<>();
this.preWorkmins = 0;
this.D_Mins = 0.0;
this.minimumUnit = "";
this.duration = "";
this.oneMoreMinute = "";
this.preWorkMinsAcrossIndex = new ArrayList<>();
this.workMinsAcrossIndex = new ArrayList<>();
this.preSerialid = "";
this.serialid = "";
this.workAcrossTime = new ArrayList<>();
this.isfree = false;
this.freeSignStart = "";
this.freeWorkMins = "";
this.freeSignEnd = "";
this.freeSignMiddle = "";
this.workLongTimeIndex = new ArrayList<>();
this.restLongTimeIndex = new ArrayList<>();
this.allLongWorkTime = new ArrayList<>();
this.isAcross = "";
this.isPreAcross = "";
this.shiftRuleMap = Maps.newHashMap();
this.workTime = Lists.newArrayList();
this.signTime = Lists.newArrayList();
this.halfcalrule = "";
this.halfcalpoint = "";
this.halfcalpoint2cross = "";
this.eachWorkMins = new ArrayList<>();
}
public String getSplitDate() {
return splitDate;
}
public void setSplitDate(String splitDate) {
this.splitDate = splitDate;
}
public String getSplitFromTime() {
return splitFromTime;
}
public void setSplitFromTime(String splitFromTime) {
this.splitFromTime = splitFromTime;
}
public String getSplitToTime() {
return splitToTime;
}
public void setSplitToTime(String splitToTime) {
this.splitToTime = splitToTime;
}
public List<int[]> getWorkIndex() {
return workIndex;
}
public void setWorkIndex(List<int[]> workIndex) {
this.workIndex = workIndex;
}
public List<int[]> getRestIndex() {
return restIndex;
}
public void setRestIndex(List<int[]> restIndex) {
this.restIndex = restIndex;
}
public List<int[]> getHalfWorkIndex() {
return halfWorkIndex;
}
public void setHalfWorkIndex(List<int[]> halfWorkIndex) {
this.halfWorkIndex = halfWorkIndex;
}
public double getD_Mins() {
return D_Mins;
}
public void setD_Mins(double d_Mins) {
D_Mins = d_Mins;
}
public String getPreSplitDate() {
return preSplitDate;
}
public void setPreSplitDate(String preSplitDate) {
this.preSplitDate = preSplitDate;
}
public List<int[]> getPreWorkIndex() {
return preWorkIndex;
}
public void setPreWorkIndex(List<int[]> preWorkIndex) {
this.preWorkIndex = preWorkIndex;
}
public List<int[]> getWorkAcrossIndex() {
return workAcrossIndex;
}
public void setWorkAcrossIndex(List<int[]> workAcrossIndex) {
this.workAcrossIndex = workAcrossIndex;
}
public int getWorkmins() {
return workmins;
}
public void setWorkmins(int workmins) {
this.workmins = workmins;
}
public int getSignoutOnlyoff() {
return signoutOnlyoff;
}
public void setSignoutOnlyoff(int signoutOnlyoff) {
this.signoutOnlyoff = signoutOnlyoff;
}
public String getMinimumUnit() {
return minimumUnit;
}
public void setMinimumUnit(String minimumUnit) {
this.minimumUnit = minimumUnit;
}
public List<int[]> getPreHalfWorkIndex() {
return preHalfWorkIndex;
}
public void setPreHalfWorkIndex(List<int[]> preHalfWorkIndex) {
this.preHalfWorkIndex = preHalfWorkIndex;
}
public List<int[]> getPreWorkAcrossIndex() {
return preWorkAcrossIndex;
}
public void setPreWorkAcrossIndex(List<int[]> preWorkAcrossIndex) {
this.preWorkAcrossIndex = preWorkAcrossIndex;
}
public Map<String, String> getPreWorktimeAcrossMap() {
return preWorktimeAcrossMap;
}
public void setPreWorktimeAcrossMap(
Map<String, String> preWorktimeAcrossMap) {
this.preWorktimeAcrossMap = preWorktimeAcrossMap;
}
public List<int[]> getPreRestIndex() {
return preRestIndex;
}
public void setPreRestIndex(List<int[]> preRestIndex) {
this.preRestIndex = preRestIndex;
}
public int getPreWorkmins() {
return preWorkmins;
}
public void setPreWorkmins(int preWorkmins) {
this.preWorkmins = preWorkmins;
}
public List<int[]> getRestAcrossIndex() {
return restAcrossIndex;
}
public void setRestAcrossIndex(List<int[]> restAcrossIndex) {
this.restAcrossIndex = restAcrossIndex;
}
public String getDuration() {
return duration;
}
public void setDuration(String duration) {
this.duration = duration;
}
public String getOneMoreMinute() {
return oneMoreMinute;
}
public void setOneMoreMinute(String oneMoreMinute) {
this.oneMoreMinute = oneMoreMinute;
}
public List<String[][]> getWorkMinsAcrossIndex() {
return workMinsAcrossIndex;
}
public void setWorkMinsAcrossIndex(List<String[][]> workMinsAcrossIndex) {
this.workMinsAcrossIndex = workMinsAcrossIndex;
}
public List<String[][]> getPreWorkMinsAcrossIndex() {
return preWorkMinsAcrossIndex;
}
public void setPreWorkMinsAcrossIndex(List<String[][]> preWorkMinsAcrossIndex) {
this.preWorkMinsAcrossIndex = preWorkMinsAcrossIndex;
}
public String getSerialid() {
return serialid;
}
public void setSerialid(String serialid) {
this.serialid = serialid;
}
public String getPreSerialid() {
return preSerialid;
}
public void setPreSerialid(String preSerialid) {
this.preSerialid = preSerialid;
}
public int[] getCurMins() {
return curMins;
}
public void setCurMins(int[] curMins) {
this.curMins = curMins;
}
public int[] getPreMins() {
return preMins;
}
public void setPreMins(int[] preMins) {
this.preMins = preMins;
}
public List<String[]> getWorkAcrossTime() {
return workAcrossTime;
}
public void setWorkAcrossTime(List<String[]> workAcrossTime) {
this.workAcrossTime = workAcrossTime;
}
public int getChangeType() {
return changeType;
}
public void setChangeType(int changeType) {
this.changeType = changeType;
}
public List<String> getAllWorkTime() {
return allWorkTime;
}
public void setAllWorkTime(List<String> allWorkTime) {
this.allWorkTime = allWorkTime;
}
public List<String> getAllAcrossWorkTime() {
return allAcrossWorkTime;
}
public void setAllAcrossWorkTime(List<String> allAcrossWorkTime) {
this.allAcrossWorkTime = allAcrossWorkTime;
}
public List<String> getAllRestTime() {
return allRestTime;
}
public void setAllRestTime(List<String> allRestTime) {
this.allRestTime = allRestTime;
}
public List<String> getAllAcrossRestTime() {
return allAcrossRestTime;
}
public void setAllAcrossRestTime(List<String> allAcrossRestTime) {
this.allAcrossRestTime = allAcrossRestTime;
}
public List<String> getPreAllWorkTime() {
return preAllWorkTime;
}
public void setPreAllWorkTime(List<String> preAllWorkTime) {
this.preAllWorkTime = preAllWorkTime;
}
public List<String> getPreAllAcrossWorkTime() {
return preAllAcrossWorkTime;
}
public void setPreAllAcrossWorkTime(List<String> preAllAcrossWorkTime) {
this.preAllAcrossWorkTime = preAllAcrossWorkTime;
}
public List<String> getPreAllRestTime() {
return preAllRestTime;
}
public void setPreAllRestTime(List<String> preAllRestTime) {
this.preAllRestTime = preAllRestTime;
}
public List<String> getPreAllAcrossRestTime() {
return preAllAcrossRestTime;
}
public void setPreAllAcrossRestTime(List<String> preAllAcrossRestTime) {
this.preAllAcrossRestTime = preAllAcrossRestTime;
}
public boolean isIsfree() {
return isfree;
}
public void setIsfree(boolean isfree) {
this.isfree = isfree;
}
public String getFreeSignStart() {
return freeSignStart;
}
public void setFreeSignStart(String freeSignStart) {
this.freeSignStart = freeSignStart;
}
public String getFreeWorkMins() {
return freeWorkMins;
}
public void setFreeWorkMins(String freeWorkMins) {
this.freeWorkMins = freeWorkMins;
}
public String getFreeSignEnd() {
return freeSignEnd;
}
public void setFreeSignEnd(String freeSignEnd) {
this.freeSignEnd = freeSignEnd;
}
public String getFreeSignMiddle() {
return freeSignMiddle;
}
public void setFreeSignMiddle(String freeSignMiddle) {
this.freeSignMiddle = freeSignMiddle;
}
public List<int[]> getWorkLongTimeIndex() {
return workLongTimeIndex;
}
public void setWorkLongTimeIndex(List<int[]> workLongTimeIndex) {
this.workLongTimeIndex = workLongTimeIndex;
}
public List<int[]> getRestLongTimeIndex() {
return restLongTimeIndex;
}
public void setRestLongTimeIndex(List<int[]> restLongTimeIndex) {
this.restLongTimeIndex = restLongTimeIndex;
}
public List<String> getAllLongWorkTime() {
return allLongWorkTime;
}
public void setAllLongWorkTime(List<String> allLongWorkTime) {
this.allLongWorkTime = allLongWorkTime;
}
public String getIsAcross() {
return isAcross;
}
public void setIsAcross(String isAcross) {
this.isAcross = isAcross;
}
public String getIsPreAcross() {
return isPreAcross;
}
public void setIsPreAcross(String isPreAcross) {
this.isPreAcross = isPreAcross;
}
public Map<String, Object> getShiftRuleMap() {
return shiftRuleMap;
}
public void setShiftRuleMap(Map<String, Object> shiftRuleMap) {
this.shiftRuleMap = shiftRuleMap;
}
public List<TimeScopeEntity> getSignTime() {
return signTime;
}
public void setSignTime(List<TimeScopeEntity> signTime) {
this.signTime = signTime;
}
public List<TimeScopeEntity> getWorkTime() {
return workTime;
}
public void setWorkTime(List<TimeScopeEntity> workTime) {
this.workTime = workTime;
}
public String getHalfcalrule() {
return halfcalrule;
}
public void setHalfcalrule(String halfcalrule) {
this.halfcalrule = halfcalrule;
}
public List<Integer> getEachWorkMins() {
return eachWorkMins;
}
public void setEachWorkMins(List<Integer> eachWorkMins) {
this.eachWorkMins = eachWorkMins;
}
public String getHalfcalpoint() {
return halfcalpoint;
}
public void setHalfcalpoint(String halfcalpoint) {
this.halfcalpoint = halfcalpoint;
}
public String getHalfcalpoint2cross() {
return halfcalpoint2cross;
}
public void setHalfcalpoint2cross(String halfcalpoint2cross) {
this.halfcalpoint2cross = halfcalpoint2cross;
}
public int getRestShift() {
return restShift;
}
public void setRestShift(int restShift) {
this.restShift = restShift;
}
public String getConvertAttendDay() {
return convertAttendDay;
}
public void setConvertAttendDay(String convertAttendDay) {
this.convertAttendDay = convertAttendDay;
}
public String getPreConvertAttendDay() {
return preConvertAttendDay;
}
public void setPreConvertAttendDay(String preConvertAttendDay) {
this.preConvertAttendDay = preConvertAttendDay;
}
}

@ -0,0 +1,235 @@
package com.engine.kq.entity;
public class KQGroupEntity {
private String id;
private String groupname;
private String excludeid;
private String excludecount;
private String subcompanyid;
private String kqtype;
private String serialids;
private String weekday;
private String signstart;
private String workhour;
private String isdelete;
private String signintype;
private String ipscope;
private String locationcheck;
private String locationcheckscope;
private String wificheck;
private String outsidesign;
private String outsignapprove;
private String validity;
private String validityfromdate;
private String validityenddate;
private String locationfacecheck;
private String locationshowaddress;
private String wififacecheck;
private String calmethod;
private String abnormalremind;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getGroupname() {
return groupname;
}
public void setGroupname(String groupname) {
this.groupname = groupname;
}
public String getExcludeid() {
return excludeid;
}
public void setExcludeid(String excludeid) {
this.excludeid = excludeid;
}
public String getExcludecount() {
return excludecount;
}
public void setExcludecount(String excludecount) {
this.excludecount = excludecount;
}
public String getSubcompanyid() {
return subcompanyid;
}
public void setSubcompanyid(String subcompanyid) {
this.subcompanyid = subcompanyid;
}
public String getKqtype() {
return kqtype;
}
public void setKqtype(String kqtype) {
this.kqtype = kqtype;
}
public String getSerialids() {
return serialids;
}
public void setSerialids(String serialids) {
this.serialids = serialids;
}
public String getWeekday() {
return weekday;
}
public void setWeekday(String weekday) {
this.weekday = weekday;
}
public String getSignstart() {
return signstart;
}
public void setSignstart(String signstart) {
this.signstart = signstart;
}
public String getWorkhour() {
return workhour;
}
public void setWorkhour(String workhour) {
this.workhour = workhour;
}
public String getIsdelete() {
return isdelete;
}
public void setIsdelete(String isdelete) {
this.isdelete = isdelete;
}
public String getSignintype() {
return signintype;
}
public void setSignintype(String signintype) {
this.signintype = signintype;
}
public String getIpscope() {
return ipscope;
}
public void setIpscope(String ipscope) {
this.ipscope = ipscope;
}
public String getLocationcheck() {
return locationcheck;
}
public void setLocationcheck(String locationcheck) {
this.locationcheck = locationcheck;
}
public String getLocationcheckscope() {
return locationcheckscope;
}
public void setLocationcheckscope(String locationcheckscope) {
this.locationcheckscope = locationcheckscope;
}
public String getOutsidesign() {
return outsidesign;
}
public String getOutsignapprove() {return outsignapprove;}
public String getValidity() {
return validity;
}
public void setValidity(String validity) {
this.validity = validity;
}
public String getValidityfromdate() {
return validityfromdate;
}
public void setValidityfromdate(String validityfromdate) {
this.validityfromdate = validityfromdate;
}
public String getValidityenddate() {
return validityenddate;
}
public void setValidityenddate(String validityenddate) {
this.validityenddate = validityenddate;
}
public void setOutsidesign(String outsidesign) {this.outsidesign = outsidesign;}
public void setOutsignapprove(String outsignapprove) {
this.outsignapprove = outsignapprove;
}
public String getWificheck() {
return wificheck;
}
public void setWificheck(String wificheck) {
this.wificheck = wificheck;
}
public String getLocationfacecheck() {
return locationfacecheck;
}
public void setLocationfacecheck(String locationfacecheck) {
this.locationfacecheck = locationfacecheck;
}
public String getLocationshowaddress() {
return locationshowaddress;
}
public void setLocationshowaddress(String locationshowaddress) {
this.locationshowaddress = locationshowaddress;
}
public String getWififacecheck() {
return wififacecheck;
}
public void setWififacecheck(String wififacecheck) {
this.wififacecheck = wififacecheck;
}
public String getCalmethod() {
return calmethod;
}
public void setCalmethod(String calmethod) {
this.calmethod = calmethod;
}
public String getAbnormalremind() {
return this.abnormalremind;
}
public void setAbnormalremind( String abnormalremind) {
this.abnormalremind = abnormalremind;
}
}

@ -0,0 +1,189 @@
package com.engine.kq.entity;
/**
*
*/
public class KQShiftRuleEntity {
private String userId = "";
private String kqDate = "";
private int belatemins = 0;
private int gravebelatemins = 0;
private int leaveearlymins = 0;
private int graveleaveearlymins = 0;
private int absenteeismmins = 0;
private int forgotcheckmins = 0;
private int forgotBeginWorkCheckMins = 0;//上班漏签
private int earlyInMins = 0;//早到分钟数
private int lateOutMins = 0;//晚走分钟数
private String nosign_is_absent = "1";
private String nosign_ishandle = "0";
private String signInTime;
private String signOutTime;
private String early_one_mins;
//上午旷工
private boolean isAMAbsent = false;
//下午旷工
private boolean isPMAbsent = false;
private int on_absenteeismMins;
private int off_absenteeismMins;
public int getForgotBeginWorkCheckMins() {
return forgotBeginWorkCheckMins;
}
public void setForgotBeginWorkCheckMins(int forgotBeginWorkCheckMins) {
this.forgotBeginWorkCheckMins = forgotBeginWorkCheckMins;
}
public int getBelatemins() {
return belatemins;
}
public void setBelatemins(int belatemins) {
this.belatemins = belatemins;
}
public int getGravebelatemins() {
return gravebelatemins;
}
public void setGravebelatemins(int gravebelatemins) {
this.gravebelatemins = gravebelatemins;
}
public int getLeaveearlymins() {
return leaveearlymins;
}
public void setLeaveearlymins(int leaveearlymins) {
this.leaveearlymins = leaveearlymins;
}
public int getGraveleaveearlymins() {
return graveleaveearlymins;
}
public void setGraveleaveearlymins(int graveleaveearlymins) {
this.graveleaveearlymins = graveleaveearlymins;
}
public int getAbsenteeismmins() {
return absenteeismmins;
}
public void setAbsenteeismmins(int absenteeismmins) {
this.absenteeismmins = absenteeismmins;
}
public int getForgotcheckmins() {
return forgotcheckmins;
}
public void setForgotcheckmins(int forgotcheckmins) {
this.forgotcheckmins = forgotcheckmins;
}
public int getEarlyInMins() {
return earlyInMins;
}
public void setEarlyInMins(int earlyInMins) {
this.earlyInMins = earlyInMins;
}
public int getLateOutMins() {
return lateOutMins;
}
public void setLateOutMins(int lateOutMins) {
this.lateOutMins = lateOutMins;
}
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getKqDate() {
return kqDate;
}
public void setKqDate(String kqDate) {
this.kqDate = kqDate;
}
public String getNosign_is_absent() {
return nosign_is_absent;
}
public void setNosign_is_absent(String nosign_is_absent) {
this.nosign_is_absent = nosign_is_absent;
}
public String getNosign_ishandle() {
return nosign_ishandle;
}
public void setNosign_ishandle(String nosign_ishandle) {
this.nosign_ishandle = nosign_ishandle;
}
public String getSignInTime() {
return signInTime;
}
public void setSignInTime(String signInTime) {
this.signInTime = signInTime;
}
public String getSignOutTime() {
return signOutTime;
}
public void setSignOutTime(String signOutTime) {
this.signOutTime = signOutTime;
}
public String getEarly_one_mins() {
return early_one_mins;
}
public void setEarly_one_mins(String early_one_mins) {
this.early_one_mins = early_one_mins;
}
public boolean isAMAbsent() {
return isAMAbsent;
}
public void setAMAbsent(boolean AMAbsent) {
isAMAbsent = AMAbsent;
}
public boolean isPMAbsent() {
return isPMAbsent;
}
public void setPMAbsent(boolean PMAbsent) {
isPMAbsent = PMAbsent;
}
public int getOn_absenteeismMins() {
return on_absenteeismMins;
}
public void setOn_absenteeismMins(int on_absenteeismMins) {
this.on_absenteeismMins = on_absenteeismMins;
}
public int getOff_absenteeismMins() {
return off_absenteeismMins;
}
public void setOff_absenteeismMins(int off_absenteeismMins) {
this.off_absenteeismMins = off_absenteeismMins;
}
}

@ -0,0 +1,220 @@
package com.engine.kq.entity;
import java.util.List;
import java.util.Map;
/***
*
*/
public class WorkTimeEntity {
private String groupId;//所属考勤组
private String groupName;//所属考勤组
private String kqType;//考勤类型
private String serialId;//班次
private Map<String,Object> shiftRuleInfo;//班次人性化规则
private List<TimeScopeEntity> signTime;//允许打卡时间
private List<TimeScopeEntity> workTime;//工作时间
private List<TimeScopeEntity> restTime;//休息时间
private int workMins;//工作时长
private String isAcross;//是否跨天
private String signstart;//自由工时开始打卡时间
private boolean isExclude;//无需考勤人员
private String calmethod;//自由班制计算方式
private int signoutOnlyoff;
private List<String> halfWorkTime;//半天
private List<int[]> halfWorkIndex;
/**
* 1
*/
private int nonWorkShift;
/**
*
* playday
* work
* holiday
*/
private String dayType;
/**
*
*/
private String convertAttendDay = "";
public String getGroupId() {
return groupId;
}
public void setGroupId(String groupId) {
this.groupId = groupId;
}
public String getGroupName() {
return groupName;
}
public void setGroupName(String groupName) {
this.groupName = groupName;
}
public String getKQType() {
return kqType;
}
public void setKQType(String kqType) {
this.kqType = kqType;
}
public String getSerialId() {
return serialId;
}
public void setSerialId(String serialId) {
this.serialId = serialId;
}
public Map<String, Object> getShiftRuleInfo() {
return shiftRuleInfo;
}
public void setShiftRuleInfo(Map<String, Object> shiftRuleInfo) {
this.shiftRuleInfo = shiftRuleInfo;
}
public List<TimeScopeEntity> getWorkTime() {
return workTime;
}
public void setWorkTime(List<TimeScopeEntity> workTime) {
this.workTime = workTime;
}
public List<TimeScopeEntity> getRestTime() {
return restTime;
}
public void setRestTime(List<TimeScopeEntity> restTime) {
this.restTime = restTime;
}
public int getWorkMins() {
return workMins;
}
public void setWorkMins(int workMins) {
this.workMins = workMins;
}
public String getIsAcross() {
return isAcross;
}
public void setIsAcross(String isAcross) {
this.isAcross = isAcross;
}
public String getSignStart() {
return signstart;
}
public void setSignStart(String signstart) {
this.signstart = signstart;
}
public List<TimeScopeEntity> getSignTime() {
return signTime;
}
public void setSignTime(List<TimeScopeEntity> signTime) {
this.signTime = signTime;
}
public boolean getIsExclude() {
return isExclude;
}
public void setIsExclude(boolean isExclude) {
this.isExclude = isExclude;
}
public String getCalmethod() {
return calmethod;
}
public void setCalmethod(String calmethod) {
this.calmethod = calmethod;
}
public int getNonWorkShift() {
return nonWorkShift;
}
public void setNonWorkShift(int restShift) {
this.nonWorkShift = restShift;
}
public String getDayType() {
return dayType;
}
public void setDayType(String dayType) {
this.dayType = dayType;
}
public String getConvertAttendDay() {
return convertAttendDay;
}
public void setConvertAttendDay(String convertAttendDay) {
this.convertAttendDay = convertAttendDay;
}
public int getSignoutOnlyoff() {
return signoutOnlyoff;
}
public void setSignoutOnlyoff(int signoutOnlyoff) {
this.signoutOnlyoff = signoutOnlyoff;
}
public List<String> getHalfWorkTime() {
return halfWorkTime;
}
public void setHalfWorkTime(List<String> halfWorkTime) {
this.halfWorkTime = halfWorkTime;
}
public List<int[]> getHalfWorkIndex() {
return halfWorkIndex;
}
public void setHalfWorkIndex(List<int[]> halfWorkIndex) {
this.halfWorkIndex = halfWorkIndex;
}
@Override
public String toString() {
return "WorkTimeEntity{" +
"groupId='" + groupId + '\'' +
", groupName='" + groupName + '\'' +
", kqType='" + kqType + '\'' +
", serialId='" + serialId + '\'' +
", shiftRuleInfo=" + shiftRuleInfo +
", signTime=" + signTime +
", workTime=" + workTime +
", restTime=" + restTime +
", workMins=" + workMins +
", isAcross='" + isAcross + '\'' +
", signstart='" + signstart + '\'' +
", isExclude=" + isExclude +
", calmethod='" + calmethod + '\'' +
", signoutOnlyoff=" + signoutOnlyoff +
", nonWorkShift=" + nonWorkShift +
", dayType='" + dayType + '\'' +
", convertAttendDay='" + convertAttendDay + '\'' +
'}';
}
}

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save