入离职工时加上考勤报表问题修复

dev
chenwei 11 months ago
parent 7024436e24
commit 20b8ea804a

@ -43,7 +43,7 @@ public class GetTabsCmdInter extends AbstractCommandProxy<Map<String, Object>> {
tabs.add(temp);
temp = new HashMap<>();
temp.put("key","4");
temp.put("title", SystemEnv.getHtmlLabelName(10003,user.getLanguage()));
temp.put("title", "异常考勤转事假");
tabs.add(temp);
}
}

@ -1,11 +1,13 @@
package com.engine.kq.biz;
import com.alibaba.fastjson.JSONObject;
import com.api.hrm.util.PageUidFactory;
import com.cloudstore.dev.api.util.Util_TableMap;
import com.engine.hrm.util.HrmUtil;
import com.engine.kq.enums.KqSplitFlowTypeEnum;
import com.engine.kq.enums.OverTimeComputingModeEnum;
import com.engine.kq.log.KQLog;
import org.apache.commons.lang3.StringUtils;
import weaver.conn.RecordSet;
import weaver.general.BaseBean;
import weaver.general.TimeUtil;
@ -589,6 +591,21 @@ public class KQAttFlowSetBiz {
" </table>";
/*考勤二开--转事假start*/
//处理开始结束时间
if(StringUtils.isBlank(fromDate) && StringUtils.isBlank(toDate)){
if(typeselect.length()==0)typeselect = "3";
if(!typeselect.equals("") && !typeselect.equals("0")&& !typeselect.equals("6")){
if(typeselect.equals("1")){
fromDate = TimeUtil.getCurrentDateString();
toDate = TimeUtil.getCurrentDateString();
}else{
fromDate = TimeUtil.getDateByOption(typeselect,"0");
toDate = TimeUtil.getDateByOption(typeselect,"1");
}
}
}
String calLeaveId = bb.getPropValue("project_sskj", "calLeaveId");
bb.writeLog("buildFlowSetTableString calLeaveId: " + calLeaveId);
@ -597,6 +614,10 @@ public class KQAttFlowSetBiz {
String resourceId =Util.null2String(params.get("resourceId"));
bb.writeLog("buildFlowSetTableString resourceId: " + resourceId);
bb.writeLog("buildFlowSetTableString fromDate: " + fromDate);
bb.writeLog("buildFlowSetTableString toDate: " + toDate);
bb.writeLog("buildFlowSetTableString typeselect: " + typeselect);
bb.writeLog("buildFlowSetTableString params: " + JSONObject.toJSONString(params));
if ( ("leaveType_"+calLeaveId).equals(type) && "3".equals(tabkey)) {
backfields = " a.resourceid, a.startdate, a.starttime, a.enddate, a.endtime, a.duration, b.lastname, b.departmentId ";

@ -883,6 +883,7 @@ public class KQFormatData extends BaseBean {
//考勤二开--取消漏签,改为旷工(规则工作时长就是480,直接全天旷工)start
bb.writeLog("absenteeismMins: " + absenteeismMins);
bb.writeLog("forgotCheckMins: " + forgotCheckMins);
if ( forgotCheckMins > 0) {
//优化:请假,出差,公出存在数据时,旷工时长需要扣减
forgotCheckMins = 0;
@ -920,56 +921,76 @@ public class KQFormatData extends BaseBean {
bb.writeLog("changeBeforeData: " + changeBeforeData);
int abnormalMins = beLateMins + graveBeLateMins + leaveEarlyMins + graveLeaveEarlyMins;
bb.writeLog("abnormalMins: " + abnormalMins);
if ( abnormalMins > 0 && abnormalMins <= 30 ) {
beLateMins = 0;
graveBeLateMins = 0;
leaveEarlyMins = 0;
graveLeaveEarlyMins = 0;
}
if ( abnormalMins > 30 && abnormalMins <= 120) {
absenteeismMins = 0;
beLateMins = 0;
graveBeLateMins = 0;
leaveEarlyMins = 0;
graveLeaveEarlyMins = 0;
leaveMins = 240;
//转事假
SskjUtil sskjUtil = new SskjUtil();
String toCusLeaveSql = "insert into uf_AbnAttToComLeave (resourceid, belongdate, duration, formmodeid, modedatacreater, modedatacreatertype, modedatacreatedate, modedatacreatetime, MODEUUID) values (?,?,?,?,?,?,?,?,?)";
Integer abnAttToComLeaveModeId = Util.getIntValue(Util.null2String(bb.getPropValue("project_sskj", "abnAttToComLeaveModeId")));
Integer modedatacreater = 1;
Integer modedatacreatertype = 0;
String modedatacreatedate = cn.hutool.core.date.DateUtil.format(new Date(), "yyyy-MM-dd");
String modedatacreatetime = cn.hutool.core.date.DateUtil.format(new Date(), "HH:mm:ss");
String abnUuid = UUID.randomUUID().toString();
bb.writeLog("toCusLeaveSql" + toCusLeaveSql);
boolean addFlag = rs.executeUpdate(toCusLeaveSql, userId, kqDate, leaveMins, abnAttToComLeaveModeId, modedatacreater, modedatacreatertype, modedatacreatedate,
modedatacreatetime, abnUuid);
bb.writeLog("addFlag" + addFlag);
if (addFlag) {
String billid = "-1";
String acqModeIdSql = "select id from uf_AbnAttToComLeave where MODEUUID = ?";
rs.executeQuery(acqModeIdSql, abnUuid);
while (rs.next()) {
billid = Util.null2String(rs.getString("id"));
// if ( abnormalMins > 0 && abnormalMins <= 30 ) {
// beLateMins = 0;
// graveBeLateMins = 0;
// leaveEarlyMins = 0;
// graveLeaveEarlyMins = 0;
// }
if ((lsCheckInfo.size() == 1)) {
bb.writeLog("只有一笔卡");
if ( abnormalMins > 0 ) {
//优化:考虑请假公出出差的时长
if (evectionMins == 0 && leaveMins == 0 && outMins == 0) {
absenteeismMins = 480;
} else {
absenteeismMins = 480 - leaveMins - evectionMins - outMins;
}
bb.writeLog("billid" + billid);
sskjUtil.modePerRecon(modedatacreater, String.valueOf(abnAttToComLeaveModeId), billid);
beLateMins = 0;
graveBeLateMins = 0;
leaveEarlyMins = 0;
graveLeaveEarlyMins = 0;
}
} else {
if ( abnormalMins > 30 && abnormalMins <= 120) {
absenteeismMins = 0;
beLateMins = 0;
graveBeLateMins = 0;
leaveEarlyMins = 0;
graveLeaveEarlyMins = 0;
leaveMins = 240;
//转事假
SskjUtil sskjUtil = new SskjUtil();
String toCusLeaveSql = "insert into uf_AbnAttToComLeave (resourceid, belongdate, duration, formmodeid, modedatacreater, modedatacreatertype, modedatacreatedate, modedatacreatetime, MODEUUID) values (?,?,?,?,?,?,?,?,?)";
Integer abnAttToComLeaveModeId = Util.getIntValue(Util.null2String(bb.getPropValue("project_sskj", "abnAttToComLeaveModeId")));
Integer modedatacreater = 1;
Integer modedatacreatertype = 0;
String modedatacreatedate = cn.hutool.core.date.DateUtil.format(new Date(), "yyyy-MM-dd");
String modedatacreatetime = cn.hutool.core.date.DateUtil.format(new Date(), "HH:mm:ss");
String abnUuid = UUID.randomUUID().toString();
bb.writeLog("toCusLeaveSql" + toCusLeaveSql);
boolean addFlag = rs.executeUpdate(toCusLeaveSql, userId, kqDate, leaveMins, abnAttToComLeaveModeId, modedatacreater, modedatacreatertype, modedatacreatedate,
modedatacreatetime, abnUuid);
bb.writeLog("addFlag" + addFlag);
if (addFlag) {
String billid = "-1";
String acqModeIdSql = "select id from uf_AbnAttToComLeave where MODEUUID = ?";
rs.executeQuery(acqModeIdSql, abnUuid);
while (rs.next()) {
billid = Util.null2String(rs.getString("id"));
}
bb.writeLog("billid" + billid);
sskjUtil.modePerRecon(modedatacreater, String.valueOf(abnAttToComLeaveModeId), billid);
}
}
if ( abnormalMins > 120) {
absenteeismMins = 240;
beLateMins = 0;
graveBeLateMins = 0;
leaveEarlyMins = 0;
graveLeaveEarlyMins = 0;
}
}
if ( abnormalMins > 120) {
absenteeismMins = 240;
beLateMins = 0;
graveBeLateMins = 0;
leaveEarlyMins = 0;
graveLeaveEarlyMins = 0;
}
//增加功能--如果上班卡和下班卡相差十分钟,旷工计一天
//优化:休息班次不计算旷工
bb.writeLog("---changeEndData: " + changeBeforeData);
bb.writeLog("lsCheckInfo" + JSONObject.toJSONString(lsCheckInfo));
String serialidTemp = Util.null2String(workTime.getSerialId());
if(StringUtils.isNotBlank(serialidTemp)){
List<String> restSerialids = new ArrayList<String>();
@ -1001,30 +1022,33 @@ public class KQFormatData extends BaseBean {
bb.writeLog("inTemp" + inTemp);
bb.writeLog("outTemp" + outTemp);
if(StringUtils.isNotBlank(inTemp) && StringUtils.isNotBlank(outTemp)){
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime startTime = LocalDateTime.parse(inTemp, formatter);
LocalDateTime endTime = LocalDateTime.parse(outTemp, formatter);
// 计算两个LocalDateTime对象之间的Duration
Duration duration = Duration.between(startTime, endTime);
// 将Duration转换为分钟
long minutesLong = duration.toMinutes();
int minutes = (int) minutesLong;
if(minutes<=10){
//优化:考虑请假公出出差的时长
if (evectionMins == 0 && leaveMins == 0 && outMins == 0) {
absenteeismMins = 480;
} else {
absenteeismMins = 480 - leaveMins - evectionMins - outMins;
if( (StringUtils.isNotBlank(inTemp) && StringUtils.isNotBlank(outTemp)) ){
if(inTemp.length() == 19 && outTemp.length() == 19){
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime startTime = LocalDateTime.parse(inTemp, formatter);
LocalDateTime endTime = LocalDateTime.parse(outTemp, formatter);
// 计算两个LocalDateTime对象之间的Duration
Duration duration = Duration.between(startTime, endTime);
// 将Duration转换为分钟
long minutesLong = duration.toMinutes();
int minutes = (int) minutesLong;
if(minutes<=10){
//优化:考虑请假公出出差的时长
if (evectionMins == 0 && leaveMins == 0 && outMins == 0) {
absenteeismMins = 480;
} else {
absenteeismMins = 480 - leaveMins - evectionMins - outMins;
}
beLateMins = 0;
graveBeLateMins = 0;
leaveEarlyMins = 0;
graveLeaveEarlyMins = 0;
}
beLateMins = 0;
graveBeLateMins = 0;
leaveEarlyMins = 0;
graveLeaveEarlyMins = 0;
}
}
}
} else {
@ -1048,29 +1072,30 @@ public class KQFormatData extends BaseBean {
bb.writeLog("inTemp" + inTemp);
bb.writeLog("outTemp" + outTemp);
if(StringUtils.isNotBlank(inTemp) && StringUtils.isNotBlank(outTemp)){
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime startTime = LocalDateTime.parse(inTemp, formatter);
LocalDateTime endTime = LocalDateTime.parse(outTemp, formatter);
if( (StringUtils.isNotBlank(inTemp) && StringUtils.isNotBlank(outTemp)) ){
if(inTemp.length() == 19 && outTemp.length() == 19) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime startTime = LocalDateTime.parse(inTemp, formatter);
LocalDateTime endTime = LocalDateTime.parse(outTemp, formatter);
// 计算两个LocalDateTime对象之间的Duration
Duration duration = Duration.between(startTime, endTime);
// 计算两个LocalDateTime对象之间的Duration
Duration duration = Duration.between(startTime, endTime);
// 将Duration转换为分钟
long minutesLong = duration.toMinutes();
int minutes = (int) minutesLong;
if(minutes<=10){
//优化:考虑请假公出出差的时长
if (evectionMins == 0 && leaveMins == 0 && outMins == 0) {
absenteeismMins = 480;
} else {
absenteeismMins = 480 - leaveMins - evectionMins - outMins;
// 将Duration转换为分钟
long minutesLong = duration.toMinutes();
int minutes = (int) minutesLong;
if (minutes <= 10) {
//优化:考虑请假公出出差的时长
if (evectionMins == 0 && leaveMins == 0 && outMins == 0) {
absenteeismMins = 480;
} else {
absenteeismMins = 480 - leaveMins - evectionMins - outMins;
}
beLateMins = 0;
graveBeLateMins = 0;
leaveEarlyMins = 0;
graveLeaveEarlyMins = 0;
}
beLateMins = 0;
graveBeLateMins = 0;
leaveEarlyMins = 0;
graveLeaveEarlyMins = 0;
}
}
}

@ -616,6 +616,12 @@ public class KQReportBiz extends BaseBean {
toDate = TimeUtil.getDateByOption(typeselect, "1");
}
}
if (fromDate.length() > 0) {
sqlWhere += " and a.kqdate >='" + fromDate + "' ";
}
if (toDate.length() > 0) {
sqlWhere += " and a.kqdate <='" + toDate + "' ";
}
String subCompanyId = Util.null2String(jsonObj.get("subCompanyId"));
String departmentId = Util.null2String(jsonObj.get("departmentId"));

@ -26,6 +26,7 @@ import weaver.systeminfo.SystemEnv;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjusters;
@ -346,6 +347,14 @@ public class ExportExcelCmd extends AbstractCommonCommand<Map<String, Object>> {
bb.writeLog("laborCompaniesMap: " + laborCompaniesMap);
/*考勤二开--劳务公司end*/
//考勤二开--请假时长
Map<String, Object> leaveInfos = getLeaveInfos(fromDate, toDate);
/*考勤二开--入离职时间start*/
Map<String, Map<String, String>> employAndResignDates = getAllEmployAndResignDateById();
/*考勤二开--入离职时间end*/
rs.execute(sql);
while (rs.next()) {
data = new ArrayList<>();
@ -574,7 +583,60 @@ public class ExportExcelCmd extends AbstractCommonCommand<Map<String, Object>> {
}
data.add(fieldValue);
continue;
}else if(fieldName.equals("thisRemOt")){//当月加班剩余
} else if("absenceDuration".equals(fieldName)){//考勤二开--缺勤工时
//缺勤工时 = 请假+公休+入离职工时
bb.writeLog("absenceDuration start ");
//请假
double leaveMins = Math.max(Util.getDoubleValue(Util.null2String(leaveInfos.get(id))), 0.00);
bb.writeLog("absenceDuration leaveMins: " + leaveMins);
BigDecimal leaveHours = new BigDecimal(leaveMins).divide(new BigDecimal(60), 2, RoundingMode.HALF_UP);
//公休
int hodHours = Math.max(Util.getIntValue(Util.null2String(flowData.get("HoliDurationData|" + id))),0) * 8;
bb.writeLog("absenceDuration hodHours: " + hodHours);
//入离职工时
int absenceDays = 0;
absenceDays = getStartOrEndDays(id, fromDate, toDate, typeselect, employAndResignDates);
bb.writeLog("absenceDuration absenceDays: " + absenceDays);
fieldValue = new BigDecimal(hodHours).add(new BigDecimal(absenceDays).multiply(new BigDecimal(8))).add(leaveHours)
.setScale(2, RoundingMode.HALF_UP).toString();
bb.writeLog("absenceDuration fieldValue: " + fieldValue);
data.add(fieldValue);
continue;
} else if ("startOrEndDays".equals(fieldName)) {//考勤二开--入离职工时
int absenceDays = 0;
absenceDays = getStartOrEndDays(id, fromDate, toDate, typeselect, employAndResignDates);
fieldValue = String.valueOf(absenceDays);
data.add(fieldValue);
continue;
} else if ("workmins".equals(fieldName)) {//考勤二开--应出勤时长
//入离职工时
int absenceDays = 0;
absenceDays = getStartOrEndDays(id, fromDate, toDate, typeselect, employAndResignDates);
bb.writeLog("workMins absenceDays: " + absenceDays);
fieldValue = new BigDecimal(Math.max(Util.getDoubleValue(Util.null2String(rs.getString("workMins"))),0.00)).add(new BigDecimal(absenceDays).multiply(new BigDecimal(480))).divide(new BigDecimal(60), 2, RoundingMode.HALF_UP).toString();
bb.writeLog("workMins fieldValue: " + fieldValue);
data.add(fieldValue);
continue;
} else if ("workdays".equals(fieldName)) {//考勤二开--应出勤天数
//入离职工时
int absenceDays = 0;
absenceDays = getStartOrEndDays(id, fromDate, toDate, typeselect, employAndResignDates);
bb.writeLog("workdays absenceDays: " + absenceDays);
fieldValue = new BigDecimal(Math.max(Util.getDoubleValue(Util.null2String(rs.getString("workdays"))),0.00)).add(new BigDecimal(absenceDays)).setScale(2, RoundingMode.HALF_UP).toString();
bb.writeLog("workdays fieldValue: " + fieldValue);
data.add(fieldValue);
continue;
} else if(fieldName.equals("thisRemOt")){//当月加班剩余
if ("3".equals(typeselect) || "7".equals(typeselect)) {
Map<String, Object> allTiaoxius = getAllTiaoxius(id, fromDate, toDate);
@ -1105,6 +1167,190 @@ public class ExportExcelCmd extends AbstractCommonCommand<Map<String, Object>> {
result.put("lastDay", lastDayOfLastMonth.format(formatter));
return result;
}
/**
*
* @return
*/
public Map<String, Object> getLeaveInfos(String startDate, String endDate){
Map<String, Object> result = new HashMap<>();
RecordSet rs = new RecordSet();
String acqLeaveSql = "select resourceid, sum(d_mins) as mins from kq_flow_split_leave " +
"where belongdate >='"+startDate+"' and belongdate <='"+endDate+"' " +
"group by resourceid " +
"order by resourceid ";
bb.writeLog("getLeaveInfos acqLeaveSql: " + acqLeaveSql);
rs.executeQuery(acqLeaveSql);
while (rs.next()) {
String resourceid = Util.null2String(rs.getString("resourceid"));
String mins = Util.null2String(rs.getString("mins"));
result.put(resourceid, mins);
}
String acqLeaveBackSql = "select resourceid, sum(d_mins) as mins from kq_flow_split_leaveback " +
"where belongdate >='"+startDate+"' and belongdate <='"+endDate+"' " +
"group by resourceid " +
"order by resourceid ";
bb.writeLog("getLeaveInfos acqLeaveBackSql: " + acqLeaveBackSql);
rs.executeQuery(acqLeaveBackSql);
while (rs.next()) {
String resourceid = Util.null2String(rs.getString("resourceid"));
int mins = Math.max(Util.getIntValue(Util.null2String(rs.getString("mins"))), 0);
if (mins > 0) {
int temp = Math.max(Util.getIntValue(Util.null2String(result.get(resourceid))), 0);
int remins = Math.max(temp - mins, 0);
result.put(resourceid, remins);
}
}
bb.writeLog("getLeaveInfos result: " + result);
return result;
}
/**
*
* @param resourceId
* @param startDate
* @param endDate
* @param groupDate
* @return
*/
public int getAbsenceDays(String resourceId, String startDate, String endDate, String groupDate){
int days = 0;
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate startDateL = LocalDate.parse(startDate, formatter);
LocalDate endDateL = LocalDate.parse(endDate, formatter);
List<String> dates = new ArrayList<>();
LocalDate currentDate = startDateL;
while (!currentDate.isAfter(endDateL)) {
dates.add("'"+currentDate.format(formatter)+"'");
currentDate = currentDate.plusDays(1);
}
String selDates = String.join(",", dates);
int size = dates.size();
KQGroupMemberComInfo kqGroupMemberComInfo = new KQGroupMemberComInfo();
String groupid = Util.null2String(kqGroupMemberComInfo.getKQGroupId(resourceId, groupDate));
String acqNumberSql = "select count(*) as number from KQ_HolidaySet where groupid = " + groupid +" and changeType in (1,3) " +
"and holidayDate in ("+selDates+")";
bb.writeLog("acqNumberSql: " + acqNumberSql);
RecordSet rs = new RecordSet();
rs.executeQuery(acqNumberSql);
int number = 0;
while (rs.next()) {
number = Math.max(Util.getIntValue(Util.null2String(rs.getString("number"))), 0);
}
days = size - number;
return days;
}
/**
*
* @return
*/
public int getStartOrEndDays(String id, String fromDate, String toDate, String typeselect, Map<String, Map<String, String>> employAndResignDates){
int absenceDays = 0;
if ("3".equals(typeselect) || "7".equals(typeselect)) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
bb.writeLog("getStartOrEndDays employAndResignDates: " + JSONObject.toJSONString(employAndResignDates));
Map<String, String> tempMap = employAndResignDates.get(id);
String companystartdate = Util.null2String(tempMap.get("companystartdate"));
String resignDate = Util.null2String(tempMap.get("resignDate"));
if (StringUtils.isNotBlank(companystartdate) && StringUtils.isBlank(resignDate)) {
String substring1 = companystartdate.substring(0, 7);
String substring2 = fromDate.substring(0, 7);
if (substring1.equals(substring2)) {
LocalDate companystartdateL = LocalDate.parse(companystartdate, formatter);
LocalDate localDate = companystartdateL.minusDays(1);
companystartdate = localDate.format(formatter);
absenceDays = getAbsenceDays(id, fromDate, companystartdate, toDate);
}
} else if (StringUtils.isBlank(companystartdate) && StringUtils.isNotBlank(resignDate)) {
String substring1 = resignDate.substring(0, 7);
String substring2 = toDate.substring(0, 7);
if (substring1.equals(substring2)) {
LocalDate resignDateL = LocalDate.parse(resignDate, formatter);
LocalDate localDate = resignDateL.plusDays(1);
resignDate = localDate.format(formatter);
absenceDays = getAbsenceDays(id, resignDate, toDate, fromDate);
}
} else if (StringUtils.isNotBlank(companystartdate) && StringUtils.isNotBlank(resignDate)) {
String substring1 = companystartdate.substring(0, 7);
String substring2 = resignDate.substring(0, 7);
String substring3 = fromDate.substring(0, 7);
String substring4 = toDate.substring(0, 7);
if ( substring1.equals(substring2) && substring2.equals(substring3)
&& substring3.equals(substring4) ) {//考勤月入职且离职
LocalDate resignDateL = LocalDate.parse(resignDate, formatter);
LocalDate localDate = resignDateL.plusDays(1);
resignDate = localDate.format(formatter);
LocalDate companystartdateL = LocalDate.parse(companystartdate, formatter);
LocalDate localDate1 = companystartdateL.minusDays(1);
companystartdate = localDate1.format(formatter);
int temp1 = getAbsenceDays(id, fromDate, companystartdate, toDate);
int temp2 = getAbsenceDays(id, resignDate, toDate, fromDate);
absenceDays = temp1 + temp2;
} else if (substring1.equals(substring3) && !substring2.equals(substring3)) {//考勤月入职,非考勤月离职
LocalDate companystartdateL = LocalDate.parse(companystartdate, formatter);
LocalDate localDate = companystartdateL.minusDays(1);
companystartdate = localDate.format(formatter);
absenceDays = getAbsenceDays(id, fromDate, companystartdate, toDate);
} else if ( !substring1.equals(substring3) && substring2.equals(substring3)){//非考勤月入职,考勤月离职
LocalDate resignDateL = LocalDate.parse(resignDate, formatter);
LocalDate localDate = resignDateL.plusDays(1);
resignDate = localDate.format(formatter);
absenceDays = getAbsenceDays(id, resignDate, toDate, fromDate);
}
}
}
return absenceDays;
}
/*获取人员入离职时间*/
private Map<String,Map<String,String>> getAllEmployAndResignDateById(){
RecordSet rs = new RecordSet();
Map<String,Map<String,String>> result = new HashMap<>();
String companystartdate = "";//入职时间
String id = "";//人员
String created = "";//创建日期
String field30 = "";//离职时间
String sql = "select a.id, b.companystartdate,b.created,a.field30 from cus_fielddata a left join hrmresource b on" +
" a.id = b.id where a.scope='HrmCustomFieldByInfoType' and a.scopeid= 3 ";
rs.executeQuery(sql);
while (rs.next()){
id = Util.null2String(rs.getString("id"));
companystartdate = Util.null2String(rs.getString("companystartdate"));
created = Util.null2String(rs.getString("created"));
field30 = Util.null2String(rs.getString("field30"));
Map<String,String> map = new HashMap<>();
companystartdate = "".equals(companystartdate)?created:companystartdate;
map.put("companystartdate",companystartdate);
map.put("resignDate",field30);
result.put(id, map);
}
return result;
}
@Override
public BizLogContext getLogContext() {
return null;

@ -383,6 +383,11 @@ public class GetKQReportCmd extends AbstractCommonCommand<Map<String, Object>> {
}
}
/*考勤二开--劳务工时end*/
/*考勤二开--入离职时间start*/
Map<String, Map<String, String>> employAndResignDates = getAllEmployAndResignDateById();
/*考勤二开--入离职时间end*/
bb.writeLog("汇总报表sql: " + sql);
rs.execute(sql);
@ -615,11 +620,14 @@ public class GetKQReportCmd extends AbstractCommonCommand<Map<String, Object>> {
fieldValue = KQDurationCalculatorUtil.getDurationRound(Util.null2String(flowData.get(id+"|"+fieldName)));
}
} else if("holiDuration".equals(fieldName)){//考勤二开--公休工时
int intValue = Util.getIntValue(Util.null2String(flowData.get("HoliDurationData|" + id)));
if (intValue >= 0) {
data.put(fieldName,intValue);
fieldValue = String.valueOf(intValue);
} else {
data.put(fieldName,"0");
fieldValue = "0";
}
} else if("absenceDuration".equals(fieldName)){//考勤二开--缺勤工时
//缺勤工时 = 请假+公休+入离职工时
@ -635,11 +643,11 @@ public class GetKQReportCmd extends AbstractCommonCommand<Map<String, Object>> {
//入离职工时
int absenceDays = 0;
absenceDays = getStartOrEndDays(id, fromDate, toDate, typeselect);
absenceDays = getStartOrEndDays(id, fromDate, toDate, typeselect, employAndResignDates);
bb.writeLog("absenceDuration absenceDays: " + absenceDays);
fieldValue = new BigDecimal(hodHours).add(new BigDecimal(absenceDays).multiply(new BigDecimal(8))).add(leaveHours)
.divide(new BigDecimal(8),2,RoundingMode.HALF_UP).toString();
.setScale(2, RoundingMode.HALF_UP).toString();
bb.writeLog("absenceDuration fieldValue: " + fieldValue);
data.put(fieldName,fieldValue);
@ -657,17 +665,40 @@ public class GetKQReportCmd extends AbstractCommonCommand<Map<String, Object>> {
} else if ("laborCompanies".equals(fieldName)) {//考勤二开--员工劳务公司
String labCom = Util.null2String(resLabComMap.get(id));
bb.writeLog("劳务公司 labCom: " + labCom);
if (StringUtils.isNotBlank(labCom)) {
fieldValue = Util.null2String(laborCompaniesMap.get(labCom));
}
bb.writeLog("劳务公司 fieldValue: " + fieldValue);
data.put(fieldName, fieldValue);
} else if ("startOrEndDays".equals(fieldName)) {//考勤二开--入离职工时
int absenceDays = 0;
absenceDays = getStartOrEndDays(id, fromDate, toDate, typeselect);
absenceDays = getStartOrEndDays(id, fromDate, toDate, typeselect, employAndResignDates);
fieldValue = String.valueOf(absenceDays);
data.put(fieldName, fieldValue);
} else if ("workmins".equals(fieldName)) {//考勤二开--应出勤时长
bb.writeLog("workMins id: " + id);
//入离职工时
int absenceDays = 0;
absenceDays = getStartOrEndDays(id, fromDate, toDate, typeselect, employAndResignDates);
bb.writeLog("workMins absenceDays: " + absenceDays);
fieldValue = new BigDecimal(Math.max(Util.getDoubleValue(Util.null2String(rs.getString("workMins"))),0.00)).add(new BigDecimal(absenceDays).multiply(new BigDecimal(480))).divide(new BigDecimal(60), 2, RoundingMode.HALF_UP).toString();
bb.writeLog("workMins fieldValue: " + fieldValue);
data.put(fieldName, fieldValue);
} else if ("workdays".equals(fieldName)) {//考勤二开--应出勤天数
//入离职工时
int absenceDays = 0;
absenceDays = getStartOrEndDays(id, fromDate, toDate, typeselect, employAndResignDates);
bb.writeLog("workdays absenceDays: " + absenceDays);
fieldValue = new BigDecimal(Math.max(Util.getDoubleValue(Util.null2String(rs.getString("workdays"))),0.00)).add(new BigDecimal(absenceDays)).setScale(2, RoundingMode.HALF_UP).toString();
bb.writeLog("workdays fieldValue: " + fieldValue);
data.put(fieldName, fieldValue);
} else if ("laborHours".equals(kqReportFieldComInfo.getParentid()) ) {
@ -911,6 +942,32 @@ public class GetKQReportCmd extends AbstractCommonCommand<Map<String, Object>> {
return field28;
}
/*获取人员入离职时间*/
private Map<String,Map<String,String>> getAllEmployAndResignDateById(){
RecordSet rs = new RecordSet();
Map<String,Map<String,String>> result = new HashMap<>();
String companystartdate = "";//入职时间
String id = "";//人员
String created = "";//创建日期
String field30 = "";//离职时间
String sql = "select a.id, b.companystartdate,b.created,a.field30 from cus_fielddata a left join hrmresource b on" +
" a.id = b.id where a.scope='HrmCustomFieldByInfoType' and a.scopeid= 3 ";
rs.executeQuery(sql);
while (rs.next()){
id = Util.null2String(rs.getString("id"));
companystartdate = Util.null2String(rs.getString("companystartdate"));
created = Util.null2String(rs.getString("created"));
field30 = Util.null2String(rs.getString("field30"));
Map<String,String> map = new HashMap<>();
companystartdate = "".equals(companystartdate)?created:companystartdate;
map.put("companystartdate",companystartdate);
map.put("resignDate",field30);
result.put(id, map);
}
return result;
}
/*获取人员入离职时间*/
private Map<String,String> getEmployAndResignDateById(String id){
RecordSet rs = new RecordSet();
@ -1162,14 +1219,15 @@ public class GetKQReportCmd extends AbstractCommonCommand<Map<String, Object>> {
*
* @return
*/
public int getStartOrEndDays(String id, String fromDate, String toDate, String typeselect){
public int getStartOrEndDays(String id, String fromDate, String toDate, String typeselect, Map<String, Map<String, String>> employAndResignDates){
int absenceDays = 0;
if ("3".equals(typeselect) || "7".equals(typeselect)) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
Map<String, String> employAndResignDates = getEmployAndResignDateById(id);
bb.writeLog("getStartOrEndDays employAndResignDates: " + JSONObject.toJSONString(employAndResignDates));
String companystartdate = Util.null2String(employAndResignDates.get("companystartdate"));
String resignDate = Util.null2String(employAndResignDates.get("resignDate"));
Map<String, String> tempMap = employAndResignDates.get(id);
String companystartdate = Util.null2String(tempMap.get("companystartdate"));
String resignDate = Util.null2String(tempMap.get("resignDate"));
if (StringUtils.isNotBlank(companystartdate) && StringUtils.isBlank(resignDate)) {
String substring1 = companystartdate.substring(0, 7);
@ -1185,6 +1243,11 @@ public class GetKQReportCmd extends AbstractCommonCommand<Map<String, Object>> {
String substring1 = resignDate.substring(0, 7);
String substring2 = toDate.substring(0, 7);
if (substring1.equals(substring2)) {
LocalDate resignDateL = LocalDate.parse(resignDate, formatter);
LocalDate localDate = resignDateL.plusDays(1);
resignDate = localDate.format(formatter);
absenceDays = getAbsenceDays(id, resignDate, toDate, fromDate);
}
@ -1195,9 +1258,13 @@ public class GetKQReportCmd extends AbstractCommonCommand<Map<String, Object>> {
String substring4 = toDate.substring(0, 7);
if ( substring1.equals(substring2) && substring2.equals(substring3)
&& substring3.equals(substring4) ) {//考勤月入职且离职
LocalDate resignDateL = LocalDate.parse(resignDate, formatter);
LocalDate localDate = resignDateL.plusDays(1);
resignDate = localDate.format(formatter);
LocalDate companystartdateL = LocalDate.parse(companystartdate, formatter);
LocalDate localDate = companystartdateL.minusDays(1);
companystartdate = localDate.format(formatter);
LocalDate localDate1 = companystartdateL.minusDays(1);
companystartdate = localDate1.format(formatter);
int temp1 = getAbsenceDays(id, fromDate, companystartdate, toDate);
int temp2 = getAbsenceDays(id, resignDate, toDate, fromDate);
@ -1208,7 +1275,11 @@ public class GetKQReportCmd extends AbstractCommonCommand<Map<String, Object>> {
companystartdate = localDate.format(formatter);
absenceDays = getAbsenceDays(id, fromDate, companystartdate, toDate);
} else if ( !substring1.equals(substring3) && !substring2.equals(substring3)){//非考勤月入职,考勤月离职
} else if ( !substring1.equals(substring3) && substring2.equals(substring3)){//非考勤月入职,考勤月离职
LocalDate resignDateL = LocalDate.parse(resignDate, formatter);
LocalDate localDate = resignDateL.plusDays(1);
resignDate = localDate.format(formatter);
absenceDays = getAbsenceDays(id, resignDate, toDate, fromDate);
}
}

Loading…
Cancel
Save