Compare commits

..

No commits in common. 'dev' and 'dev-chenwnj' have entirely different histories.

@ -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", "异常考勤转事假");
temp.put("title", SystemEnv.getHtmlLabelName(10003,user.getLanguage()));
tabs.add(temp);
}
}

@ -1,13 +1,11 @@
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;
@ -591,21 +589,6 @@ 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);
@ -614,10 +597,6 @@ 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 ";

File diff suppressed because it is too large Load Diff

@ -27,9 +27,7 @@ import weaver.soa.workflow.request.RequestService;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.Duration;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
@ -873,32 +871,19 @@ public class KQFormatData extends BaseBean {
}
bb.writeLog("attendanceMins: " + attendanceMins);
bb.writeLog("absenteeismMins: " + absenteeismMins);
bb.writeLog("beLateMins: " + beLateMins);
bb.writeLog("leaveMins: " + leaveMins);
bb.writeLog("evectionMins: " + evectionMins);
bb.writeLog("outMins: " + outMins);
bb.writeLog("-----连班行政岗二开end-----");
/*考勤二开--值夜班班次的考勤人员第二天排了行政班在8:05之前打卡行政班就算正常考勤end*/
//考勤二开--取消漏签,改为旷工(规则工作时长就是480,直接全天旷工)start
bb.writeLog("absenteeismMins: " + absenteeismMins);
bb.writeLog("forgotCheckMins: " + forgotCheckMins);
if ( forgotCheckMins > 0) {
//优化:请假,出差,公出存在数据时,旷工时长需要扣减
absenteeismMins = 480;
forgotCheckMins = 0;
attendanceMins = 0;
if (evectionMins == 0 && leaveMins == 0 && outMins == 0) {
absenteeismMins = 480;
} else {
absenteeismMins = 480 - leaveMins - evectionMins - outMins;
}
} else {
//计算实际出勤时间(出差公出算出勤)=应出勤-旷工-请假-迟到-早退
// attendanceMins = workMins - absenteeismMins-leaveMins-beLateMins-graveBeLateMins-leaveEarlyMins-graveLeaveEarlyMins;
//优化--实际出勤时长取消迟到、严重迟到、早退、严重早退
attendanceMins = workMins - absenteeismMins-leaveMins;
attendanceMins = workMins - absenteeismMins-leaveMins-beLateMins-graveBeLateMins-leaveEarlyMins-graveLeaveEarlyMins;
// 如果没有开启"漏签是否算实际出勤"开关,则漏签不算实际出勤时长
if("0".equals(nosign_is_absent)) {
attendanceMins = attendanceMins-forgotCheckMins-forgotBeginWorkCheckMins;
@ -913,210 +898,53 @@ public class KQFormatData extends BaseBean {
}
/*考勤二开--阶梯式记旷工start*/
//优化:先去除相同人员和日期的数据
RecordSet rs = new RecordSet();
String delSql = "delete from uf_AbnAttToComLeave where resourceid = '" + userId + "' and belongdate = '" + kqDate + "'";
bb.writeLog("优化 delSql" + delSql);
rs.executeUpdate(delSql );
//迟到、早退(注意严重迟到、严重早退的情况) belateMins--迟到 graveBeLateMins--严重迟到 leaveEarlyMins--早退 graveLeaveEarlyMins--严重早退
String changeBeforeData = "beLateMins:" + beLateMins + "graveBeLateMins:" + graveBeLateMins + "leaveEarlyMins:" + leaveEarlyMins + "graveLeaveEarlyMins:" + graveLeaveEarlyMins;
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 ((lsCheckInfo.size() == 1)) {
bb.writeLog("只有一笔卡");
if ( abnormalMins > 0 ) {
//优化:考虑请假公出出差的时长
if (evectionMins == 0 && leaveMins == 0 && outMins == 0) {
absenteeismMins = 480;
} else {
absenteeismMins = 480 - leaveMins - evectionMins - outMins;
}
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 > 0 && abnormalMins <= 30 ) {
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>();
String acqRestShiftSql = "select id from kq_shiftmanagement where rest_shift = 1 and (isdelete = 0 or isdelete is null)";
rs.executeQuery(acqRestShiftSql);
while (rs.next()) {
String id = Util.null2String(rs.getString("id"));
restSerialids.add(id);
}
if ( restSerialids != null && restSerialids.size() > 0) {
if( !restSerialids.contains(serialidTemp)){
String inTemp = "";
String outTemp = "";
for (int j = 0; lsCheckInfo != null && j < lsCheckInfo.size(); j++) {
Map<String, Object> checkInfo = (Map<String, Object>) lsCheckInfo.get(j);
String signType = Util.null2String(checkInfo.get("signType"));
String signTime = Util.null2String(checkInfo.get("signTime"));
String signDate = Util.null2String(checkInfo.get("signDate"));
if (signType.equals("1")) {
inTemp = signDate + " " + signTime;
}
if (signType.equals("2")) {
outTemp = signDate + " " + signTime;
}
}
bb.writeLog("inTemp" + inTemp);
bb.writeLog("outTemp" + outTemp);
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;
}
}
}
}
} else {
String inTemp = "";
String outTemp = "";
for (int j = 0; lsCheckInfo != null && j < lsCheckInfo.size(); j++) {
Map<String, Object> checkInfo = (Map<String, Object>) lsCheckInfo.get(j);
String signType = Util.null2String(checkInfo.get("signType"));
String signTime = Util.null2String(checkInfo.get("signTime"));
String signDate = Util.null2String(checkInfo.get("signDate"));
if (signType.equals("1")) {
inTemp = signDate + " " + signTime;
}
if (signType.equals("2")) {
outTemp = signDate + " " + signTime;
}
}
bb.writeLog("inTemp" + inTemp);
bb.writeLog("outTemp" + outTemp);
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;
}
}
if ( abnormalMins > 30 && abnormalMins <= 120) {
absenteeismMins = 0;
beLateMins = 0;
graveBeLateMins = 0;
leaveEarlyMins = 0;
graveLeaveEarlyMins = 0;
leaveMins = 240;
//转事假
SskjUtil sskjUtil = new SskjUtil();
RecordSet rs = new RecordSet();
String toCusLeaveSql = "insert into uf_AbnAttToComLeave (resourceid, belongdate, duration, formmodeid, modedatacreater, modedatacreatertype, modedatacreatedate, modedatacreatetime, MODEUUID) values (?,?,?,?,?,?,?,?,?)";
String abnAttToComLeaveModeId = 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, abnAttToComLeaveModeId, billid);
}
}
if ( abnormalMins > 120) {
absenteeismMins = 240;
}
//计算实际出勤时间(出差公出算出勤)=应出勤-旷工-请假-迟到-早退
bb.writeLog("workMins: " + workMins);
bb.writeLog("absenteeismMins: " + absenteeismMins);
bb.writeLog("leaveMins: " + leaveMins);
bb.writeLog("beLateMins: " + beLateMins);
bb.writeLog("graveBeLateMins: " + graveBeLateMins);
bb.writeLog("leaveEarlyMins: " + leaveEarlyMins);
bb.writeLog("graveLeaveEarlyMins: " + graveLeaveEarlyMins);
// attendanceMins = workMins - absenteeismMins-leaveMins-beLateMins-graveBeLateMins-leaveEarlyMins-graveLeaveEarlyMins;
//优化--实际出勤时长取消迟到、严重迟到、早退、严重早退
attendanceMins = workMins - absenteeismMins-leaveMins;
attendanceMins = workMins - absenteeismMins-leaveMins-beLateMins-graveBeLateMins-leaveEarlyMins-graveLeaveEarlyMins;
// ssutil.customLog();
/*考勤二开--阶梯式记旷工end*/
@ -1140,12 +968,10 @@ public class KQFormatData extends BaseBean {
kqLog.info("实际出勤计算公式" + "实际出勤=应出勤- 旷工-请假-迟到-早退 userId" + userId + "kqDate==" + kqDate+":hostIps:"+hostIps+":uuid::"+uuid);
// kqLog.info("实际出勤计算结果" + attendanceMins + "=" + workMins + "- " + absenteeismMins + "-" + leaveMins + "-" + (beLateMins + graveBeLateMins) + "-" + (leaveEarlyMins - graveLeaveEarlyMins)+" userId" + userId + "kqDate==" + kqDate+":hostIps:"+hostIps+":uuid::"+uuid);
kqLog.info("实际出勤计算结果" + attendanceMins + "=" + workMins + "- " + absenteeismMins + "-" + leaveMins +" userId" + userId + "kqDate==" + kqDate+":hostIps:"+hostIps+":uuid::"+uuid);
kqLog.info("实际出勤计算结果" + attendanceMins + "=" + workMins + "- " + absenteeismMins + "-" + leaveMins + "-" + (beLateMins + graveBeLateMins) + "-" + (leaveEarlyMins - graveLeaveEarlyMins)+" userId" + userId + "kqDate==" + kqDate+":hostIps:"+hostIps+":uuid::"+uuid);
if(this.writeLog) {
logInfo.put(""+weaver.systeminfo.SystemEnv.getHtmlLabelName(10005303,weaver.general.ThreadVarLanguage.getLang())+"",""+weaver.systeminfo.SystemEnv.getHtmlLabelName(130566,weaver.general.ThreadVarLanguage.getLang())+"="+weaver.systeminfo.SystemEnv.getHtmlLabelName(132056,weaver.general.ThreadVarLanguage.getLang())+"- "+weaver.systeminfo.SystemEnv.getHtmlLabelName(20085,weaver.general.ThreadVarLanguage.getLang())+"-"+weaver.systeminfo.SystemEnv.getHtmlLabelName(670,weaver.general.ThreadVarLanguage.getLang())+"-"+weaver.systeminfo.SystemEnv.getHtmlLabelName(20081,weaver.general.ThreadVarLanguage.getLang())+"-"+weaver.systeminfo.SystemEnv.getHtmlLabelName(20082,weaver.general.ThreadVarLanguage.getLang())+"");
// logInfo.put(""+weaver.systeminfo.SystemEnv.getHtmlLabelName(10005304,weaver.general.ThreadVarLanguage.getLang())+"",attendanceMins+"="+workMins+"- "+absenteeismMins+"-"+leaveMins+"-"+(beLateMins+graveBeLateMins)+"-"+(leaveEarlyMins-graveLeaveEarlyMins));
logInfo.put(""+weaver.systeminfo.SystemEnv.getHtmlLabelName(10005304,weaver.general.ThreadVarLanguage.getLang())+"",attendanceMins+"="+workMins+"- "+absenteeismMins+"-"+leaveMins);
logInfo.put(""+weaver.systeminfo.SystemEnv.getHtmlLabelName(10005304,weaver.general.ThreadVarLanguage.getLang())+"",attendanceMins+"="+workMins+"- "+absenteeismMins+"-"+leaveMins+"-"+(beLateMins+graveBeLateMins)+"-"+(leaveEarlyMins-graveLeaveEarlyMins));
}
//判断当天考勤状态
// if (beLateMins > 0) {

@ -97,7 +97,7 @@ public class KQReportBiz extends BaseBean {
}
return sectionMap;
}
/***
*
* @param resourceId
@ -372,19 +372,19 @@ public class KQReportBiz extends BaseBean {
datas.putAll(getSignDetailInfoData(params,user));
//考勤二开--增加补卡字段
basebean.writeLog("getDailyFlowData to do ");
datas.putAll(getDailyReissueCardData(params,user));
//考勤二开--加班申请情况
basebean.writeLog("getDailyFlowData appFprOvertime");
datas.putAll(getDailyAppForOvertimeData(params,user));
//考勤二开--转事假
// datas.putAll(getDailyToComLeaveData(params,user));
basebean.writeLog("getDailyFlowData toComLeave");
datas.putAll(getDailyToComLeaveData(params,user));
//考勤二开--异常考勤转事假
basebean.writeLog("getDailyFlowData abnAttToComLeave");
datas.putAll(getDailyAbnAttToComLeaveData(params,user));
@ -412,30 +412,24 @@ public class KQReportBiz extends BaseBean {
//end
//考勤二开--加班申请情况
basebean.writeLog("getFlowData appFprOvertime");
datas.putAll(getAppForOvertimeData(params,user));
//考勤二开--转事假
// datas.putAll(getToComLeaveData(params,user));
basebean.writeLog("getFlowData getToComLeaveData");
datas.putAll(getToComLeaveData(params,user));
//考勤二开--统计公休时长
basebean.writeLog("getFlowData getHoliDurationData");
datas.putAll(getHoliDurationData(params,user));
//考勤二开--统计劳务工时
basebean.writeLog("getFlowData getLaborHoursData");
datas.putAll(getLaborHoursData(params,user));
//考勤二开--异常考勤转事假
basebean.writeLog("getFlowData getAbnAttToComLeaveData");
datas.putAll(getAbnAttToComLeaveData(params,user));
//考勤二开--上月请假
datas.putAll(getFlowLastLeaveData(params,user));
//考勤二开--上月销假
datas.putAll(getFlowLeaveLastBackData(params,user));
//考勤二开--上月加班
datas.putAll(getFlowLastOverTimeDataNew(params,user));
}catch (Exception e){
writeLog(e);
@ -497,10 +491,10 @@ public class KQReportBiz extends BaseBean {
//获取劳务工人员
List<String> empTypes = new ArrayList<>();
String empType = Util.null2String(PropBean.getUfPropValue("empType"),"field9");
basebean.writeLog("empType: " + empType);
String acqLaSql = "select id from cus_fielddata where scopeid = -1 and scope = 'HrmCustomFieldByInfoType' and " + empType + " = 1";
String acqLaSql = "select id from cus_fielddata where scopeid = -1 and scope = 'HrmCustomFieldByInfoType' and " + empType + " = 0";
basebean.writeLog("acqLaSql: " + acqLaSql);
rs.executeQuery(acqLaSql);
while (rs.next()) {
@ -514,8 +508,8 @@ public class KQReportBiz extends BaseBean {
KQOvertimeRulesBiz kqOvertimeRulesBiz = new KQOvertimeRulesBiz();
sql = "select a.attendancemins, a.resourceid, a.kqdate from kq_format_total a left join hrmresource b on a.resourceid = b.id " +
" where a.resourceid in (" + String.join(",", empTypes) + ") and kqdate >='" + fromDate + "' and kqdate <='" + toDate + "' " + sqlWhere;
basebean.writeLog("sql: " + sql);
basebean.writeLog("getLaborHoursData sql:" + sql);
rs.executeQuery(sql);
while (rs.next()) {
String resourceid = Util.null2String(rs.getString("resourceid"));
@ -529,10 +523,10 @@ public class KQReportBiz extends BaseBean {
double temp = Util.getDoubleValue(Util.null2String(datas.get("LaborHoursData|" + resourceid + "|holiday")));
if (temp >=0.00) {
double attendanceHours = Util.getDoubleValue(KQDurationCalculatorUtil.getDurationRound(String.valueOf(attendancemins / 60.0))) + temp;
datas.put("LaborHoursData|" + resourceid + "|holidaylaborHours" , attendanceHours);
datas.put("LaborHoursData|" + resourceid + "|holiday" , attendanceHours);
} else {
double attendanceHours = Util.getDoubleValue(KQDurationCalculatorUtil.getDurationRound(String.valueOf(attendancemins / 60.0)));
datas.put("LaborHoursData|" + resourceid + "|holidaylaborHours" , attendanceHours);
datas.put("LaborHoursData|" + resourceid + "|holiday" , attendanceHours);
}
}
@ -541,10 +535,10 @@ public class KQReportBiz extends BaseBean {
double temp = Util.getDoubleValue(Util.null2String(datas.get("LaborHoursData|" + resourceid + "|workday")));
if (temp >=0.00) {
double attendanceHours = Util.getDoubleValue(KQDurationCalculatorUtil.getDurationRound(String.valueOf(attendancemins / 60.0))) + temp;
datas.put("LaborHoursData|" + resourceid + "|workdaylaborHours" , attendanceHours);
datas.put("LaborHoursData|" + resourceid + "|workday" , attendanceHours);
} else {
double attendanceHours = Util.getDoubleValue(KQDurationCalculatorUtil.getDurationRound(String.valueOf(attendancemins / 60.0)));
datas.put("LaborHoursData|" + resourceid + "|workdaylaborHours" , attendanceHours);
datas.put("LaborHoursData|" + resourceid + "|workday" , attendanceHours);
}
}
@ -553,10 +547,10 @@ public class KQReportBiz extends BaseBean {
double temp = Util.getDoubleValue(Util.null2String(datas.get("LaborHoursData|" + resourceid + "|restday")));
if (temp >=0.00) {
double attendanceHours = Util.getDoubleValue(KQDurationCalculatorUtil.getDurationRound(String.valueOf(attendancemins / 60.0))) + temp;
datas.put("LaborHoursData|" + resourceid + "|restdaylaborHours" , attendanceHours);
datas.put("LaborHoursData|" + resourceid + "|restday" , attendanceHours);
} else {
double attendanceHours = Util.getDoubleValue(KQDurationCalculatorUtil.getDurationRound(String.valueOf(attendancemins / 60.0)));
datas.put("LaborHoursData|" + resourceid + "|restdaylaborHours" , attendanceHours);
datas.put("LaborHoursData|" + resourceid + "|restday" , attendanceHours);
}
}
@ -571,17 +565,17 @@ public class KQReportBiz extends BaseBean {
String[] split = key.split("\\|");
if (split[1].contains("holiday")) {
double doubleValue = Util.getDoubleValue(Util.null2String(datas.get("LaborHoursData|" + split[0] + "|holiday")), 0.00);
datas.put("LaborHoursData|" + split[0] + "|holidaylaborHours" , doubleValue + value);
datas.put("LaborHoursData|" + split[0] + "|holiday" , doubleValue + value);
}
if (split[1].contains("workingDay")) {
double doubleValue = Util.getDoubleValue(Util.null2String(datas.get("LaborHoursData|" + split[0] + "|workday")), 0.00);
datas.put("LaborHoursData|" + split[0] + "|workdaylaborHours" , doubleValue + value);
datas.put("LaborHoursData|" + split[0] + "|workday" , doubleValue + value);
}
if (split[1].contains("restDay")) {
double doubleValue = Util.getDoubleValue(Util.null2String(datas.get("LaborHoursData|" + split[0] + "|restday")), 0.00);
datas.put("LaborHoursData|" + split[0] + "|restdaylaborHours" , doubleValue + value);
datas.put("LaborHoursData|" + split[0] + "|restday" , doubleValue + value);
}
}
@ -616,12 +610,6 @@ 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"));
@ -654,13 +642,13 @@ public class KQReportBiz extends BaseBean {
/*考勤二开--公休时长统计start*/
String offdutyId = Util.null2String(PropBean.getUfPropValue("shift.offduty.id"),"7");
basebean.writeLog("offdutyId: " + offdutyId);
/*考勤二开--公休时长统计end*/
sql = " select a.resourceid, count(*) as number from kq_format_total a left join hrmresource b on b.id = a. resourceid" +
" where a.serialid = " + offdutyId + " " + sqlWhere;
basebean.writeLog("getHoliDurationData sql: " + sql);
basebean.writeLog("getHoliDurationData sql:" + sql);
rs.executeQuery(sql);
while (rs.next()) {
int number = Util.getIntValue(Util.null2String(rs.getString("number")));
@ -714,7 +702,7 @@ public class KQReportBiz extends BaseBean {
}
if (resourceId.length() > 0) {
sqlWhere += " and c.id in(" + resourceId + ") ";
sqlWhere += " and c.resourceid in(" + resourceId + ") ";
}
if (viewScope.equals("4")) {//我的下属
@ -728,7 +716,7 @@ public class KQReportBiz extends BaseBean {
sqlWhere += " and c.loginid is not null " + (rs.getDBType().equals("oracle") ? "" : " and c.loginid<>'' ");
}
sql = " select * from (select a.duration, b.* from uf_casleave a left join hrmresource b on a.resourceid = b.id " +
sql = " select * from (select * from uf_casleave a left join hrmresource b on a.resourceid = b.id " +
" where a.startdate >='" + fromDate + "' and a.enddate <='" + toDate +"' and (a.isdecu = 0 or a.isdecu is null ) ) c where 1=1 " + sqlWhere;
basebean.writeLog("getToComLeaveData sql: " + sql);
@ -813,17 +801,14 @@ public class KQReportBiz extends BaseBean {
sql = sql = " select * from (select a.resourceId, a.duration, a.belongDate, b.subcompanyid1, b.departmentid, b.managerstr, b.managerid, b.loginid " +
" from uf_AbnAttToComLeave a left join hrmresource b on b.id = a.resourceid " +
" where a.belongdate >='" + fromDate + "' and a.belongdate <='" + toDate + "' ) c where 1=1 " + sqlWhere;
basebean.writeLog("getAbnAttToComLeaveData sql: " + sql);
rs.executeQuery(sql);
while (rs.next()) {
double duration = Util.getDoubleValue(Util.null2String(rs.getString("duration")));
String resId = Util.null2String(rs.getString("resourceId"));
if ( duration > 0.00){
double temp = Util.getDoubleValue(Util.null2String(datas.get("-AbnAttToComLeaveData|" + resId )));
if (temp <= 0.00) {
datas.put("-AbnAttToComLeaveData|" + resId , duration);
} else {
@ -894,19 +879,15 @@ public class KQReportBiz extends BaseBean {
sql = " select * from (select a.resourceId, a.duration, a.belongDate, b.subcompanyid1, b.departmentid, b.managerstr, b.managerid, b.loginid " +
" from uf_AbnAttToComLeave a left join hrmresource b on b.id = a.resourceid " +
" where a.belongdate >='" + fromDate + "' and a.belongdate <='" + toDate + "' ) c where 1=1 " + sqlWhere;
basebean.writeLog("getDailyAbnAttToComLeaveData sql: " + sql);
rs.executeQuery(sql);
while (rs.next()) {
double duration = Util.getDoubleValue(Util.null2String(rs.getString("duration")));
String kqdate = Util.null2String(rs.getString("belongDate"));
String resId = Util.null2String(rs.getString("resourceId"));
if ( duration > 0.00){
double temp = Util.getDoubleValue(Util.null2String(datas.get("DailyAbnAttToComLeaveData|" + resId + "|" + kqdate)));
if (temp <= 0.00) {
datas.put("DailyAbnAttToComLeaveData|" + resId + "|" + kqdate, duration);
} else {
@ -974,23 +955,23 @@ public class KQReportBiz extends BaseBean {
sqlWhere += " and c.loginid is not null " + (rs.getDBType().equals("oracle") ? "" : " and c.loginid<>'' ");
}
// sql = " select * from (select * from uf_casleave a left join hrmresource b on a.resourceid = b.id " +
// " where a.startdate >='" + fromDate + "' and a.enddate <='" + toDate +"' and ( a.isdecu = 0 or a.isdecu is null ) ) c where 1=1 " + sqlWhere;
// basebean.writeLog("getDailyToComLeaveData sql: " + sql);
//
// rs.executeQuery(sql);
// while (rs.next()) {
// double duration = Util.getDoubleValue(Util.null2String(rs.getString("duration")));
// String kqdate = Util.null2String(rs.getString("startdate"));
// if ( duration > 0.00){
// double temp = Util.getDoubleValue(Util.null2String(datas.get("DailyToComLeaveData|" + resourceId + "|" + kqdate)));
// if (temp <= 0.00) {
// datas.put("DailyToComLeaveData|" + resourceId + "|" + kqdate, duration);
// } else {
// datas.put("DailyToComLeaveData|" + resourceId + "|" + kqdate, temp + duration);
// }
// }
// }
sql = " select * from (select * from uf_casleave a left join hrmresource b on a.resourceid = b.id " +
" where a.startdate >='" + fromDate + "' and a.enddate <='" + toDate +"' and ( a.isdecu = 0 or a.isdecu is null ) ) c where 1=1 " + sqlWhere;
basebean.writeLog("getDailyToComLeaveData sql: " + sql);
rs.executeQuery(sql);
while (rs.next()) {
double duration = Util.getDoubleValue(Util.null2String(rs.getString("duration")));
String kqdate = Util.null2String(rs.getString("startdate"));
if ( duration > 0.00){
double temp = Util.getDoubleValue(Util.null2String(datas.get("DailyToComLeaveData|" + resourceId + "|" + kqdate)));
if (temp <= 0.00) {
datas.put("DailyToComLeaveData|" + resourceId + "|" + kqdate, duration);
} else {
datas.put("DailyToComLeaveData|" + resourceId + "|" + kqdate, temp + duration);
}
}
}
}catch (Exception e){
@ -1315,14 +1296,14 @@ public class KQReportBiz extends BaseBean {
}
//再查批量加班申请流程
String overtimeBatchTableName = basebean.getPropValue("project_sskj","overtimeBatchTableName");
String acqOverTimeBatchSql = "select resourceid, ksrq, kssj, jsrq, jssj from ( " +
" select a.jbry as resourceid, a.ksrq, a.kssj, a.jsrq, a.jssj, b.subcompanyid1, b.departmentid, b.managerstr, b.managerid, b.loginid " +
String acqOverTimeBatchSql = "select jbry, ksrq, kssj, jsrq, jssj from ( " +
" select a.jbry, a.ksrq, a.kssj, a.jsrq, a.jssj, b.subcompanyid1, b.departmentid, b.managerstr, b.managerid, b.loginid " +
" FROM "+overtimeBatchTableName+"_dt1 a " +
" left join hrmresource b on b.id = a.jbry " +
" ) c where c.ksrq >= '"+fromDate+"' and c.jsrq <='" + toDate + "' " + sqlWhere;
rs.executeQuery(acqOverTimeBatchSql);
while (rs.next()) {
String resourceid = Util.null2String(rs.getString("resourceid"));
String resourceid = Util.null2String(rs.getString("jbry"));
String fromdate = Util.null2String(rs.getString("ksrq"));
String fromtime = Util.null2String(rs.getString("kssj"));
String todate = Util.null2String(rs.getString("jsrq"));
@ -1739,100 +1720,6 @@ public class KQReportBiz extends BaseBean {
return datas;
}
/**
*
* @param params
* @param user
* @return
*/
public Map<String,Object> getFlowLastLeaveData(Map<String,Object> params, User user){
Map<String,Object> datas = new HashMap<>();;
RecordSet rs = new RecordSet();
String sql = "";
String sqlWhere = " ";
try{
KQLeaveRulesComInfo kqLeaveRulesComInfo = new KQLeaveRulesComInfo();
JSONObject jsonObj = JSON.parseObject(Util.null2String(params.get("data")));
String fromDate = Util.null2String(jsonObj.get("fromDate"));
String toDate = Util.null2String(jsonObj.get("toDate"));
String typeselect ="7";
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 subCompanyId = Util.null2String(jsonObj.get("subCompanyId"));
String departmentId = Util.null2String(jsonObj.get("departmentId"));
String resourceId = Util.null2String(jsonObj.get("resourceId"));
String allLevel = Util.null2String(jsonObj.get("allLevel"));
String isNoAccount = Util.null2String(jsonObj.get("isNoAccount"));
String viewScope = Util.null2String(jsonObj.get("viewScope"));
if(subCompanyId.length()>0){
sqlWhere +=" and a.subcompanyid1 in("+subCompanyId+") ";
}
if(departmentId.length()>0){
sqlWhere +=" and a.departmentid in("+departmentId+") ";
}
if(resourceId.length()>0){
sqlWhere +=" and b.resourceid in("+resourceId+") ";
}
if(viewScope.equals("4")){//我的下属
if(allLevel.equals("1")){//所有下属
sqlWhere+=" and a.managerstr like '%,"+user.getUID()+",%'";
}else{
sqlWhere+=" and a.managerid="+user.getUID();//直接下属
}
}
if (!"1".equals(isNoAccount)) {
sqlWhere += " and a.loginid is not null "+(rs.getDBType().equals("oracle")?"":" and a.loginid<>'' ");
}
sql = " select resourceid, newleavetype, durationrule, sum(duration) as val from hrmresource a, "+KqSplitFlowTypeEnum.LEAVE.getTablename()+" b "+
" where a.id = b.resourceid and belongdate >='"+fromDate+"' and belongdate <='"+toDate+"' " +sqlWhere +
" group by resourceid, newleavetype, durationrule ";
rs.execute(sql);
while (rs.next()) {
String resourceid = rs.getString("resourceid");
String newleavetype = rs.getString("newleavetype");
String durationrule = rs.getString("durationrule");
double value = rs.getDouble("val")<0?0:rs.getDouble("val");
if( !newleavetype.equals("5")){
continue;
}
double proportion = Util.getDoubleValue(kqLeaveRulesComInfo.getProportion(newleavetype));
if(KQUnitBiz.isLeaveHour(newleavetype, kqLeaveRulesComInfo)){//按小时
if(!KQUnitBiz.isLeaveHour(durationrule)){
if(proportion>0) value = value*proportion;
}
}else{//按天
if(KQUnitBiz.isLeaveHour(durationrule)){
if(proportion>0) value = value/proportion;
}
}
String key = resourceid+"|lastleaveType_"+newleavetype;
if(datas.containsKey(key)){
value += Util.getDoubleValue(Util.null2String(datas.get(key)));
}
//df.format 默认是不四舍五入的 0.125这样的就会直接变成0.12了
df.setMaximumFractionDigits(5);
datas.put(key,format(value));
}
}catch (Exception e){
writeLog(e);
}
return datas;
}
//获取打卡数据用于判断外勤,补卡等信息===============================
public Map<String,Object> getCardMap(Map<String,Object> params, User user){
@ -2009,97 +1896,6 @@ public class KQReportBiz extends BaseBean {
return datas;
}
/**
*
* @param params
* @param user
* @return
*/
public Map<String,Object> getFlowLeaveLastBackData(Map<String,Object> params, User user){
Map<String,Object> datas = new HashMap<>();;
RecordSet rs = new RecordSet();
String sql = "";
String sqlWhere = " ";
try{
KQLeaveRulesComInfo kqLeaveRulesComInfo = new KQLeaveRulesComInfo();
JSONObject jsonObj = JSON.parseObject(Util.null2String(params.get("data")));
String fromDate = Util.null2String(jsonObj.get("fromDate"));
String toDate = Util.null2String(jsonObj.get("toDate"));
String typeselect ="7";
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 subCompanyId = Util.null2String(jsonObj.get("subCompanyId"));
String departmentId = Util.null2String(jsonObj.get("departmentId"));
String resourceId = Util.null2String(jsonObj.get("resourceId"));
String allLevel = Util.null2String(jsonObj.get("allLevel"));
String isNoAccount = Util.null2String(jsonObj.get("isNoAccount"));
String viewScope = Util.null2String(jsonObj.get("viewScope"));
if(subCompanyId.length()>0){
sqlWhere +=" and a.subcompanyid1 in("+subCompanyId+") ";
}
if(departmentId.length()>0){
sqlWhere +=" and a.departmentid in("+departmentId+") ";
}
if(resourceId.length()>0){
sqlWhere +=" and b.resourceid in("+resourceId+") ";
}
if(viewScope.equals("4")){//我的下属
if(allLevel.equals("1")){//所有下属
sqlWhere+=" and a.managerstr like '%,"+user.getUID()+",%'";
}else{
sqlWhere+=" and a.managerid="+user.getUID();//直接下属
}
}
if (!"1".equals(isNoAccount)) {
sqlWhere += " and a.loginid is not null "+(rs.getDBType().equals("oracle")?"":" and a.loginid<>'' ");
}
sql = " select resourceid, newleavetype, durationrule, sum(duration) as val from hrmresource a, "+KqSplitFlowTypeEnum.LEAVEBACK.getTablename()+" b "+
" where a.id = b.resourceid and belongdate >='"+fromDate+"' and belongdate <='"+toDate+"' " +sqlWhere +
" group by resourceid, newleavetype, durationrule ";
rs.execute(sql);
while (rs.next()) {
String resourceid = rs.getString("resourceid");
String newleavetype = rs.getString("newleavetype");
String durationrule = rs.getString("durationrule");
double value = rs.getDouble("val")<0?0:rs.getDouble("val");
double proportion = Util.getDoubleValue(kqLeaveRulesComInfo.getProportion(newleavetype));
if(KQUnitBiz.isLeaveHour(newleavetype,kqLeaveRulesComInfo)){//按小时
if(!KQUnitBiz.isLeaveHour(durationrule)){
if(proportion>0) value = value*proportion;
}
}else{//按天
if(KQUnitBiz.isLeaveHour(durationrule)){
if(proportion>0) value = value/proportion;
}
}
String key = resourceid+"|lastleavebackType_"+newleavetype;
if(datas.containsKey(key)){
value += Util.getDoubleValue(Util.null2String(datas.get(key)));
}
//df.format 默认是不四舍五入的 0.125这样的就会直接变成0.12了
df.setMaximumFractionDigits(5);
datas.put(key,format(value));
}
}catch (Exception e){
writeLog(e);
}
return datas;
}
/**
*
* @param params
@ -2408,10 +2204,15 @@ public class KQReportBiz extends BaseBean {
/*考勤二开--当前时间在当天班次下班点之前不显示旷工start*/
String nowDay = cn.hutool.core.date.DateUtil.format(new Date(), "yyyy-MM-dd");
String nowTime = cn.hutool.core.date.DateUtil.format(new Date(), "HH:mm");
basebean.writeLog("nowDay: " + nowDay);
basebean.writeLog("nowTime: " + nowTime);
basebean.writeLog("workenddate: " + workenddate);
basebean.writeLog("workendtime: " + kqTimesArrayComInfo.turn48to24Time(workendtime));
if (workenddate.equals(nowDay) && nowTime.compareTo(kqTimesArrayComInfo.turn48to24Time(workendtime)) < 0) {
signStatusInfo.put("isneedcal","1");
}
basebean.writeLog("signStatusInfo: " + signStatusInfo);
/*考勤二开--当前时间在当天班次下班点之前不显示旷工end*/
data.put(tmpkey+"signintime"+serialnumber, signintime.length()==0?SystemEnv.getHtmlLabelName(25994, user.getLanguage()):signintime);
@ -2436,10 +2237,15 @@ public class KQReportBiz extends BaseBean {
/*考勤二开--当前时间在当天班次下班点之前不显示旷工start*/
String nowDay = cn.hutool.core.date.DateUtil.format(new Date(), "yyyy-MM-dd");
String nowTime = cn.hutool.core.date.DateUtil.format(new Date(), "HH:mm");
basebean.writeLog("nowDay: " + nowDay);
basebean.writeLog("nowTime: " + nowTime);
basebean.writeLog("workenddate: " + workenddate);
basebean.writeLog("workendtime: " + kqTimesArrayComInfo.turn48to24Time(workendtime));
if (workenddate.equals(nowDay) && nowTime.compareTo(kqTimesArrayComInfo.turn48to24Time(workendtime)) < 0) {
signStatusInfo.put("isneedcal","1");
}
basebean.writeLog("signStatusInfo: " + signStatusInfo);
/*考勤二开--当前时间在当天班次下班点之前不显示旷工end*/
data.put(tmpkey+"signouttime"+serialnumber, signouttime.length()==0?SystemEnv.getHtmlLabelName(25994, user.getLanguage()):signouttime);
@ -2673,113 +2479,6 @@ public class KQReportBiz extends BaseBean {
return datas;
}
/**
*
* @return
*/
public Map<String,Object> getFlowLastOverTimeDataNew(Map<String,Object> params, User user){
Map<String,Object> datas = new HashMap<>();;
RecordSet rs = new RecordSet();
String sql = "";
String sqlWhere = " ";
try{
KQOvertimeRulesBiz kqOvertimeRulesBiz = new KQOvertimeRulesBiz();
JSONObject jsonObj = JSON.parseObject(Util.null2String(params.get("data")));
String fromDate = Util.null2String(jsonObj.get("fromDate"));
String toDate = Util.null2String(jsonObj.get("toDate"));
String typeselect =Util.null2String(jsonObj.get("typeselect"));
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 subCompanyId = Util.null2String(jsonObj.get("subCompanyId"));
String departmentId = Util.null2String(jsonObj.get("departmentId"));
String resourceId = Util.null2String(jsonObj.get("resourceId"));
String allLevel = Util.null2String(jsonObj.get("allLevel"));
String isNoAccount = Util.null2String(jsonObj.get("isNoAccount"));
String viewScope = Util.null2String(jsonObj.get("viewScope"));
if(subCompanyId.length()>0){
sqlWhere +=" and a.subcompanyid1 in("+subCompanyId+") ";
}
if(departmentId.length()>0){
sqlWhere +=" and a.departmentid in("+departmentId+") ";
}
if(resourceId.length()>0){
sqlWhere +=" and a.id in("+resourceId+") ";
}
if(viewScope.equals("4")){//我的下属
if(allLevel.equals("1")){//所有下属
sqlWhere+=" and a.managerstr like '%,"+user.getUID()+",%'";
}else{
sqlWhere+=" and a.managerid="+user.getUID();//直接下属
}
}
if (!"1".equals(isNoAccount)) {
sqlWhere += " and a.loginid is not null "+(rs.getDBType().equals("oracle")?"":" and a.loginid<>'' ");
}
int uintType = kqOvertimeRulesBiz.getMinimumUnit();//当前加班单位
double hoursToDay = kqOvertimeRulesBiz.getHoursToDay();//当前天跟小时计算关系
String valueField = "";
sql = " select resourceid,changeType, sum(cast(duration_min as decimal(18,4))) as val,paidLeaveEnable "+
" from hrmresource a, kq_flow_overtime b "+
" where a.id = b.resourceid and belongdate >='"+fromDate+"' and belongdate <='"+toDate+"' " +sqlWhere+
" group by resourceid,changeType,paidLeaveEnable ";
rs.execute(sql);
kqLog.info("getFlowOverTimeDataNew:sql:"+sql);
while (rs.next()) {
String resourceid = rs.getString("resourceid");
String paidLeaveEnable = rs.getString("paidLeaveEnable");
int changeType =rs.getInt("changeType");//1-节假日、2-工作日、3-休息日
double value = rs.getDouble("val")<0?0:rs.getDouble("val");
if(uintType==3 || uintType== 5 || uintType== 6){//按小时计算
value = Util.getDoubleValue(KQDurationCalculatorUtil.getDurationRound(value/(60.0)+""));
}else{//按天计算
value = Util.getDoubleValue(KQDurationCalculatorUtil.getDurationRound(value/(60.0*hoursToDay)+""));
}
String flowType = "";
if(changeType==1){
flowType = "holidayOvertime";
}else if(changeType==2){
flowType = "workingDayOvertime";
}else if(changeType==3){
flowType = "restDayOvertime";
}
if("1".equalsIgnoreCase(paidLeaveEnable)){
//1表示关联调休
flowType += "_4leave";
}else{
//0表示不关联调休
flowType += "_nonleave";
}
String key = resourceid+"|"+flowType+"last";
//df.format 默认是不四舍五入的 0.125这样的就会直接变成0.12了
df.setMaximumFractionDigits(5);
if(datas.containsKey(key)){
double tmpVal = Util.getDoubleValue(Util.null2String(datas.get(key)),0.0);
tmpVal += value;
datas.put(key,format(tmpVal));
}else{
datas.put(key,format(value));
}
}
}catch (Exception e){
writeLog(e);
}
return datas;
}
/**
*
@ -3527,7 +3226,7 @@ public class KQReportBiz extends BaseBean {
}
}
if(text.equals("")){
boolean needCal = new KQFormatBiz().needCal(workdate,worktime,isneedcal);
boolean needCal = new KQFormatBiz().needCal(workdate,worktime);
text = needCal?SystemEnv.getHtmlLabelName(225, user.getLanguage()):"";
}
}else{

@ -70,7 +70,7 @@ public class GetSearchListCmd extends AbstractCommonCommand<Map<String, Object>>
" WHEN c.changetype = 2 THEN '工作日' " +
" WHEN c.changetype = 3 THEN '休息日' " +
" ELSE '未知' END as changetype ";
String sqlFrom = " from HrmResource a,KQ_BalanceOfLeave b left join kq_flow_overtime c on b.id = c.tiaoxiuid ";
String sqlFrom = " from HrmResource a,KQ_BalanceOfLeave b, kq_flow_overtime c ";
String sqlWhere = " where 1=1 and a.id=b.resourceId and (isDelete is null or isDelete<>1) ";
String orderBy = " b.belongYear asc,b.expirationDate asc,b.id asc ";

@ -111,20 +111,20 @@ public class ExportDailyExcelCmd extends AbstractCommonCommand<Map<String, Objec
cascadekey = "absenteeismMins";
}else if(showColumn.equals("overtime")){
tmpShowColumns.add("overtime_4leave");
// tmpShowColumns.add("overtime_nonleave");
// tmpShowColumns.add("workingDayOvertime_nonleave");
tmpShowColumns.add("overtime_nonleave");
tmpShowColumns.add("workingDayOvertime_nonleave");
tmpShowColumns.add("workingDayOvertime_4leave");
// tmpShowColumns.add("restDayOvertime_nonleave");
tmpShowColumns.add("restDayOvertime_nonleave");
tmpShowColumns.add("restDayOvertime_4leave");
tmpShowColumns.add("holidayOvertime_4leave");
// tmpShowColumns.add("holidayOvertime_nonleave");
tmpShowColumns.add("holidayOvertime_nonleave");
}
if(cascadekey.length()>0){
tmpShowColumns.add(cascadekey);
}
}
showColumns = tmpShowColumns;
bb.writeLog("showColumns: " + showColumns);
String today = DateUtil.getCurrentDate();
if(DateUtil.compDate(today, toDate)>0){//结束如期不大于今天
@ -267,7 +267,7 @@ public class ExportDailyExcelCmd extends AbstractCommonCommand<Map<String, Objec
/*考勤二开--公休时长统计start*/
String offdutyId = Util.null2String(PropBean.getUfPropValue("shift.offduty.id"),"7");
bb.writeLog("offdutyId: " + offdutyId);
/*考勤二开--公休时长统计end*/
/*考勤二开--劳务工时start*/
@ -283,36 +283,6 @@ public class ExportDailyExcelCmd extends AbstractCommonCommand<Map<String, Objec
}
}
/*考勤二开--劳务工时end*/
/*考勤二开--劳务公司start*/
//获取人员的劳务公司
Map<String, Object> resLabComMap = new HashMap<>();
String laborCompanies = Util.null2String(PropBean.getUfPropValue("laborCompanies"),"field25");
String acqResLaborComSql = "select id, " + laborCompanies + " from cus_fielddata where scopeid = 3 and scope = 'HrmCustomFieldByInfoType'";
rs.executeQuery(acqResLaborComSql);
while (rs.next()) {
String id = Util.null2String(rs.getString("id"));
String value = Util.null2String(rs.getString(laborCompanies));
if (StringUtils.isNotBlank(id) && StringUtils.isNotBlank(value)) {
resLabComMap.put(id, value);
}
}
bb.writeLog("resLabComMap: " + resLabComMap);
//获取所有劳务公司
Map<String, Object> laborCompaniesMap = new HashMap<>();
String acqLabComSql = "select id, gsmc from uf_lwgs ";
rs.executeQuery(acqLabComSql);
while (rs.next()) {
String id = Util.null2String(rs.getString("id"));
String value = Util.null2String(rs.getString("gsmc"));
if (StringUtils.isNotBlank(id) && StringUtils.isNotBlank(value)) {
laborCompaniesMap.put(id, value);
}
}
bb.writeLog("laborCompaniesMap: " + laborCompaniesMap);
/*考勤二开--劳务公司end*/
/*考勤二开--入离职时间start*/
Map<String, Map<String, String>> employAndResignDates = getAllEmployAndResignDateById();
/*考勤二开--入离职时间end*/
rs.execute(sql);
while (rs.next()) {
@ -330,6 +300,7 @@ public class ExportDailyExcelCmd extends AbstractCommonCommand<Map<String, Objec
for (int fieldDataKeyIdx =0;fieldDataKeyIdx<lsFieldDataKey.size();fieldDataKeyIdx++) {
String fieldName = lsFieldDataKey.get(fieldDataKeyIdx);
bb.writeLog("-=-=-fieldName: " + fieldName);
String fieldid = KQReportFieldComInfo.field2Id.get(fieldName);
String fieldValue = "";
if(fieldName.equals("subcompany")){
@ -354,73 +325,6 @@ public class ExportDailyExcelCmd extends AbstractCommonCommand<Map<String, Objec
departmentComInfo.getDepartmentname(tmpDepartmentId);
// fieldValue = departmentComInfo.getDepartmentname(tmpDepartmentId);
}else if(fieldName.equals("firstLevelDepartment")){
//根据id查询多级部门信息
//String multiLevelDepartmentStr = getMultiLevelDepartmentById(id);
String departmentid = Util.null2String(rs.getString("departmentid"));
fieldValue = departmentComInfo.getDepartmentRealPath(departmentid, "/", "0");
String[] split = fieldValue.split("/");
if(split.length>=1){
fieldValue = split[0];
}else {
fieldValue = "";
}
}else if(fieldName.equals("secondaryDepartment")){
//根据id查询多级部门信息
//String multiLevelDepartmentStr = getMultiLevelDepartmentById(id);
String departmentid = Util.null2String(rs.getString("departmentid"));
fieldValue = departmentComInfo.getDepartmentRealPath(departmentid, "/", "0");
String[] split = fieldValue.split("/");
if(split.length>=2){
fieldValue = split[1];
}else {
fieldValue = "";
}
}else if(fieldName.equals("thirdLevelDepartment")){
//根据id查询多级部门信息
//String multiLevelDepartmentStr = getMultiLevelDepartmentById(id);
String departmentid = Util.null2String(rs.getString("departmentid"));
fieldValue = departmentComInfo.getDepartmentRealPath(departmentid, "/", "0");
String[] split = fieldValue.split("/");
if(split.length>=3){
fieldValue = split[2];
}else {
fieldValue = "";
}
}else if(fieldName.equals("fourthLevelDepartment")){
//根据id查询多级部门信息
//String multiLevelDepartmentStr = getMultiLevelDepartmentById(id);
String departmentid = Util.null2String(rs.getString("departmentid"));
fieldValue = departmentComInfo.getDepartmentRealPath(departmentid, "/", "0");
String[] split = fieldValue.split("/");
if(split.length>=4){
fieldValue = split[3];
}else {
fieldValue = "";
}
}else if(fieldName.equals("overtimeType")){
//根据id查询加班类型
String overtimeType = getOvertimeTypeById(id);
if("6".equals(overtimeType)){
overtimeType = "调休";
}else if("5".equals(overtimeType)){
overtimeType = "隔月发放";
}else if("4".equals(overtimeType)){
overtimeType = "当月发放";
}else {
overtimeType = "无";
}
fieldValue = overtimeType;
}else if(fieldName.equals("companystartdate")){
//根据id查询入职日期
//Map<String, String> map = getEmployAndResignDateById(id);
Map<String, String> map = employAndResignDates.get(id);
fieldValue = map.get("companystartdate");
}else if(fieldName.equals("resignDate")){
//根据id查询离职日期
//Map<String, String> map = getEmployAndResignDateById(id);
Map<String, String> map = employAndResignDates.get(id);
fieldValue = map.get("resignDate");
}else if(fieldName.equals("jobtitle")){
String tmpJobtitleId = Util.null2String(rs.getString("jobtitle"));
if(tmpJobtitleId.length()==0){
@ -485,12 +389,12 @@ public class ExportDailyExcelCmd extends AbstractCommonCommand<Map<String, Objec
data.add(fieldValue);
continue;
}else if ("appForOvertime".equals(fieldName)) {
bb.writeLog("appForOvertime");
LocalDate date = LocalDate.parse(kqdate, formatter);
LocalDate kqdateL = date.plusDays(1);
String kqdateN = kqdateL.format(formatter);
int intValue = Util.getIntValue(Util.null2String(flowData.get(id + "|" + kqdateN + "|" + "appForOvertime")));
bb.writeLog("intValue: " + intValue);
if (intValue == 1) {
data.add("正常");
@ -498,28 +402,6 @@ public class ExportDailyExcelCmd extends AbstractCommonCommand<Map<String, Objec
data.add("异常");
}
continue;
} else if ("resourceType".equals(fieldName)) {//考勤二开--员工类型显示
int emp = Util.getIntValue(Util.null2String(empTypes.get(id)));
if(emp == 0) {
fieldValue = "正式工";
}else if(emp == 1) {
fieldValue = "劳务工";
}
data.add( fieldValue);
continue;
} 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.add( fieldValue);
continue;
} else if(fieldName.equals("leave")){
//请假
List<Map<String, Object>> allLeaveRules = KQLeaveRulesBiz.getAllLeaveRules();
@ -558,28 +440,28 @@ public class ExportDailyExcelCmd extends AbstractCommonCommand<Map<String, Objec
}
/*考勤二开--转事假start*/
if ( flowType.equals( ("leaveType_" + calLeaveId) ) ) {
bb.writeLog("flowLeaveData: " + flowLeaveData);
double temp = Util.getDoubleValue(Util.null2String(flowData.get("DailyToComLeaveData|" + resourceId + "|" + kqdate)));
bb.writeLog("temp: " + temp);
if (temp >= 0.00) {
temp = Double.parseDouble(KQDurationCalculatorUtil.getDurationRound(String.valueOf(temp / 60.0)));
double doubleValue = Util.getDoubleValue(Util.null2String(flowLeaveData));
flowLeaveData = String.valueOf(doubleValue > 0.00? doubleValue : 0.00 + temp);
}
bb.writeLog("flowLeaveData: " + flowLeaveData);
}
/*考勤二开--转事假end*/
/*考勤二开--异常考勤转事假start*/
if ( flowType.equals( ("leaveType_" + calLeaveId) ) ) {
bb.writeLog("-flowLeaveData: " + flowLeaveData);
double temp = Util.getDoubleValue(Util.null2String(flowData.get("DailyAbnAttToComLeaveData|" + id + "|" + kqdate)));
bb.writeLog("-temp: " + temp);
if (temp >= 0.00) {
temp = Double.parseDouble(KQDurationCalculatorUtil.getDurationRound(String.valueOf(temp / 60.0)));
double doubleValue = Util.getDoubleValue(Util.null2String(flowLeaveData));
flowLeaveData = String.valueOf(doubleValue > 0.00? doubleValue : 0.00 + temp);
}
bb.writeLog("-flowLeaveData: " + flowLeaveData);
}
/*考勤二开--异常考勤转事假end*/
@ -587,24 +469,15 @@ public class ExportDailyExcelCmd extends AbstractCommonCommand<Map<String, Objec
data.add(fieldValue);
}
} else if(fieldName.equals("reissuecard")){//补卡
int intValue = Util.getIntValue(Util.null2String(flowData.get(id +"|"+kqdate + "|reissueCard")));
if (intValue < 0) {
fieldValue = "0";
} else {
fieldValue = String.valueOf(intValue);
}
data.add(fieldValue);
continue;
} else if(fieldName.equals("overtime")){
// fieldValue = KQDurationCalculatorUtil.getDurationRound(Util.null2String(flowData.get(id +"|"+kqdate+ "|workingDayOvertime_nonleave")));
// data.add(getFieldValueByUnitType(fieldValue,kqReportFieldComInfo.getUnittype(KQReportFieldComInfo.field2Id.get("workingDayOvertime_nonleave"))));
//
// fieldValue = KQDurationCalculatorUtil.getDurationRound(Util.null2String(flowData.get(id +"|"+kqdate+ "|restDayOvertime_nonleave")));
// data.add(getFieldValueByUnitType(fieldValue,kqReportFieldComInfo.getUnittype(KQReportFieldComInfo.field2Id.get("restDayOvertime_nonleave"))));
//
// fieldValue = KQDurationCalculatorUtil.getDurationRound(Util.null2String(flowData.get(id +"|"+kqdate+ "|holidayOvertime_nonleave")));
// data.add(getFieldValueByUnitType(fieldValue,kqReportFieldComInfo.getUnittype(KQReportFieldComInfo.field2Id.get("holidayOvertime_nonleave"))));
}else if(fieldName.equals("overtime")){
fieldValue = KQDurationCalculatorUtil.getDurationRound(Util.null2String(flowData.get(id +"|"+kqdate+ "|workingDayOvertime_nonleave")));
data.add(getFieldValueByUnitType(fieldValue,kqReportFieldComInfo.getUnittype(KQReportFieldComInfo.field2Id.get("workingDayOvertime_nonleave"))));
fieldValue = KQDurationCalculatorUtil.getDurationRound(Util.null2String(flowData.get(id +"|"+kqdate+ "|restDayOvertime_nonleave")));
data.add(getFieldValueByUnitType(fieldValue,kqReportFieldComInfo.getUnittype(KQReportFieldComInfo.field2Id.get("restDayOvertime_nonleave"))));
fieldValue = KQDurationCalculatorUtil.getDurationRound(Util.null2String(flowData.get(id +"|"+kqdate+ "|holidayOvertime_nonleave")));
data.add(getFieldValueByUnitType(fieldValue,kqReportFieldComInfo.getUnittype(KQReportFieldComInfo.field2Id.get("holidayOvertime_nonleave"))));
fieldValue = KQDurationCalculatorUtil.getDurationRound(Util.null2String(flowData.get(id +"|"+kqdate+ "|workingDayOvertime_4leave")));
data.add(getFieldValueByUnitType(fieldValue,kqReportFieldComInfo.getUnittype(KQReportFieldComInfo.field2Id.get("workingDayOvertime_4leave"))));
@ -655,69 +528,26 @@ public class ExportDailyExcelCmd extends AbstractCommonCommand<Map<String, Objec
}
fieldValue = KQDurationCalculatorUtil.getDurationRound(businessLeave);
} else if ("holiDuration".equals(fieldName)) {//考勤二开--公休时长统计
bb.writeLog("holiDuration");
String serialid = Util.null2String(rs.getString("serialid"));
bb.writeLog("serialid: " + serialid);
if (offdutyId.equals(serialid)) {
fieldValue = "8";
} else {
fieldValue = "0";
}
bb.writeLog("fieldValue: " + fieldValue);
data.add(fieldValue);
continue;
} else if ("holidaylaborHours".equals(fieldName)) {//考勤二开--节假日劳务工时
int emp = Util.getIntValue(Util.null2String(empTypes.get(id)));
if (emp == 1) {
double attendanceMins = Util.getDoubleValue(Util.null2String(rs.getString("attendanceMins")), 0.00);
double attendanceHours = Util.getDoubleValue(KQDurationCalculatorUtil.getDurationRound(String.valueOf(attendanceMins / 60.0)), 0.00);
double workingDayOvertime_4leave = Util.getDoubleValue(Util.null2String(flowData.get(id + "|" + kqdate + "|workingDayOvertime_4leave")));
workingDayOvertime_4leave = workingDayOvertime_4leave < 0 ? 0 : workingDayOvertime_4leave;
double restDayOvertime_4leave = Util.getDoubleValue(Util.null2String(flowData.get(id + "|" + kqdate + "|restDayOvertime_4leave")));
restDayOvertime_4leave = restDayOvertime_4leave < 0 ? 0 : restDayOvertime_4leave;
double holidayOvertime_4leave = Util.getDoubleValue(Util.null2String(flowData.get(id + "|" + kqdate + "|holidayOvertime_4leave")));
holidayOvertime_4leave = holidayOvertime_4leave < 0 ? 0 : holidayOvertime_4leave;
double workingDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(flowData.get(id + "|" + kqdate + "|workingDayOvertime_nonleave")));
workingDayOvertime_nonleave = workingDayOvertime_nonleave < 0 ? 0 : workingDayOvertime_nonleave;
double restDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(flowData.get(id + "|" + kqdate + "|restDayOvertime_nonleave")));
restDayOvertime_nonleave = restDayOvertime_nonleave < 0 ? 0 : restDayOvertime_nonleave;
double holidayOvertime_nonleave = Util.getDoubleValue(Util.null2String(flowData.get(id + "|" + kqdate + "|holidayOvertime_nonleave")));
holidayOvertime_nonleave = holidayOvertime_nonleave < 0 ? 0 : holidayOvertime_nonleave;
int changeType = KQOvertimeRulesBiz.getChangeType(id, kqdate);
if (changeType == 1 && "holidaylaborHours".equals(fieldName) ) {
fieldValue = KQDurationCalculatorUtil.getDurationRound(String.valueOf(attendanceHours + holidayOvertime_4leave + holidayOvertime_nonleave));
data.add( fieldValue);
continue;
}
if (changeType == 2 && "workdaylaborHours".equals(fieldName) ) {
fieldValue = KQDurationCalculatorUtil.getDurationRound(String.valueOf(attendanceHours + workingDayOvertime_4leave + workingDayOvertime_nonleave));
data.add( fieldValue);
continue;
}
if (changeType == 3 && "restdaylaborHours".equals(fieldName) ) {
fieldValue = KQDurationCalculatorUtil.getDurationRound(String.valueOf(attendanceHours + restDayOvertime_4leave + restDayOvertime_nonleave));
data.add( fieldValue);
continue;
}
}
} else if ("workdaylaborHours".equals(fieldName)) {//考勤二开--工作日劳务工时
} else if ("laborHours".equals(fieldName) ) {
bb.writeLog("laborHours");
bb.writeLog("fieldName: " + fieldName);
int emp = Util.getIntValue(Util.null2String(empTypes.get(id)));
if (emp == 1) {
double attendanceMins = Util.getDoubleValue(Util.null2String(rs.getString("attendanceMins")), 0.00);
double attendanceHours = Util.getDoubleValue(KQDurationCalculatorUtil.getDurationRound(String.valueOf(attendanceMins / 60.0)), 0.00);
bb.writeLog("id: " + id);
bb.writeLog("emp: " + emp);
if (emp == 0) {
double attendanceMins = Util.getDoubleValue(Util.null2String(rs.getString("attendanceMins")));
double attendanceHours = Util.getDoubleValue(KQDurationCalculatorUtil.getDurationRound(String.valueOf(attendanceMins / 60.0)));
double workingDayOvertime_4leave = Util.getDoubleValue(Util.null2String(flowData.get(id + "|" + kqdate + "|workingDayOvertime_4leave")));
workingDayOvertime_4leave = workingDayOvertime_4leave < 0 ? 0 : workingDayOvertime_4leave;
@ -733,101 +563,29 @@ public class ExportDailyExcelCmd extends AbstractCommonCommand<Map<String, Objec
double holidayOvertime_nonleave = Util.getDoubleValue(Util.null2String(flowData.get(id + "|" + kqdate + "|holidayOvertime_nonleave")));
holidayOvertime_nonleave = holidayOvertime_nonleave < 0 ? 0 : holidayOvertime_nonleave;
fieldValue = KQDurationCalculatorUtil.getDurationRound(String.valueOf(attendanceHours + workingDayOvertime_4leave + restDayOvertime_4leave + holidayOvertime_4leave +
workingDayOvertime_nonleave + restDayOvertime_nonleave + holidayOvertime_nonleave));
int changeType = KQOvertimeRulesBiz.getChangeType(id, kqdate);
if (changeType == 1 && "holidaylaborHours".equals(fieldName) ) {
fieldValue = KQDurationCalculatorUtil.getDurationRound(String.valueOf(attendanceHours + holidayOvertime_4leave + holidayOvertime_nonleave));
data.add( fieldValue);
continue;
}
if (changeType == 2 && "workdaylaborHours".equals(fieldName) ) {
fieldValue = KQDurationCalculatorUtil.getDurationRound(String.valueOf(attendanceHours + workingDayOvertime_4leave + workingDayOvertime_nonleave));
data.add( fieldValue);
continue;
}
if (changeType == 3 && "restdaylaborHours".equals(fieldName) ) {
fieldValue = KQDurationCalculatorUtil.getDurationRound(String.valueOf(attendanceHours + restDayOvertime_4leave + restDayOvertime_nonleave));
data.add( fieldValue);
continue;
}
}
} else if ("restdaylaborHours".equals(fieldName)) {//考勤二开--休息日劳务工时
int emp = Util.getIntValue(Util.null2String(empTypes.get(id)));
if (emp == 1) {
double attendanceMins = Util.getDoubleValue(Util.null2String(rs.getString("attendanceMins")), 0.00);
double attendanceHours = Util.getDoubleValue(KQDurationCalculatorUtil.getDurationRound(String.valueOf(attendanceMins / 60.0)), 0.00);
double workingDayOvertime_4leave = Util.getDoubleValue(Util.null2String(flowData.get(id + "|" + kqdate + "|workingDayOvertime_4leave")));
workingDayOvertime_4leave = workingDayOvertime_4leave < 0 ? 0 : workingDayOvertime_4leave;
double restDayOvertime_4leave = Util.getDoubleValue(Util.null2String(flowData.get(id + "|" + kqdate + "|restDayOvertime_4leave")));
restDayOvertime_4leave = restDayOvertime_4leave < 0 ? 0 : restDayOvertime_4leave;
double holidayOvertime_4leave = Util.getDoubleValue(Util.null2String(flowData.get(id + "|" + kqdate + "|holidayOvertime_4leave")));
holidayOvertime_4leave = holidayOvertime_4leave < 0 ? 0 : holidayOvertime_4leave;
double workingDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(flowData.get(id + "|" + kqdate + "|workingDayOvertime_nonleave")));
workingDayOvertime_nonleave = workingDayOvertime_nonleave < 0 ? 0 : workingDayOvertime_nonleave;
double restDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(flowData.get(id + "|" + kqdate + "|restDayOvertime_nonleave")));
restDayOvertime_nonleave = restDayOvertime_nonleave < 0 ? 0 : restDayOvertime_nonleave;
double holidayOvertime_nonleave = Util.getDoubleValue(Util.null2String(flowData.get(id + "|" + kqdate + "|holidayOvertime_nonleave")));
holidayOvertime_nonleave = holidayOvertime_nonleave < 0 ? 0 : holidayOvertime_nonleave;
int changeType = KQOvertimeRulesBiz.getChangeType(id, kqdate);
if (changeType == 1 && "holidaylaborHours".equals(fieldName) ) {
fieldValue = KQDurationCalculatorUtil.getDurationRound(String.valueOf(attendanceHours + holidayOvertime_4leave + holidayOvertime_nonleave));
if (changeType == 1 ) {
data.add( fieldValue);
continue;
data.add( "0");
data.add( "0");
}
if (changeType == 2 && "workdaylaborHours".equals(fieldName) ) {
fieldValue = KQDurationCalculatorUtil.getDurationRound(String.valueOf(attendanceHours + workingDayOvertime_4leave + workingDayOvertime_nonleave));
if (changeType == 2 ) {
data.add( "0");
data.add( fieldValue);
continue;
data.add( "0");
}
if (changeType == 3 && "restdaylaborHours".equals(fieldName) ) {
fieldValue = KQDurationCalculatorUtil.getDurationRound(String.valueOf(attendanceHours + restDayOvertime_4leave + restDayOvertime_nonleave));
if (changeType == 3 ) {
data.add( "0");
data.add( "0");
data.add( fieldValue);
continue;
}
}
} else if ("laborHoursTotal".equals(fieldName) ) {
int emp = Util.getIntValue(Util.null2String(empTypes.get(id)));
if (emp == 1) {
double attendanceMins = Util.getDoubleValue(Util.null2String(rs.getString("attendanceMins")), 0.00);
double attendanceHours = Util.getDoubleValue(KQDurationCalculatorUtil.getDurationRound(String.valueOf(attendanceMins / 60.0)), 0.00);
double workingDayOvertime_4leave = Util.getDoubleValue(Util.null2String(flowData.get(id + "|" + kqdate + "|workingDayOvertime_4leave")));
workingDayOvertime_4leave = workingDayOvertime_4leave < 0 ? 0 : workingDayOvertime_4leave;
double restDayOvertime_4leave = Util.getDoubleValue(Util.null2String(flowData.get(id + "|" + kqdate + "|restDayOvertime_4leave")));
restDayOvertime_4leave = restDayOvertime_4leave < 0 ? 0 : restDayOvertime_4leave;
double holidayOvertime_4leave = Util.getDoubleValue(Util.null2String(flowData.get(id + "|" + kqdate + "|holidayOvertime_4leave")));
holidayOvertime_4leave = holidayOvertime_4leave < 0 ? 0 : holidayOvertime_4leave;
double workingDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(flowData.get(id + "|" + kqdate + "|workingDayOvertime_nonleave")));
workingDayOvertime_nonleave = workingDayOvertime_nonleave < 0 ? 0 : workingDayOvertime_nonleave;
double restDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(flowData.get(id + "|" + kqdate + "|restDayOvertime_nonleave")));
restDayOvertime_nonleave = restDayOvertime_nonleave < 0 ? 0 : restDayOvertime_nonleave;
double holidayOvertime_nonleave = Util.getDoubleValue(Util.null2String(flowData.get(id + "|" + kqdate + "|holidayOvertime_nonleave")));
holidayOvertime_nonleave = holidayOvertime_nonleave < 0 ? 0 : holidayOvertime_nonleave;
fieldValue = KQDurationCalculatorUtil.getDurationRound(String.valueOf(attendanceHours + workingDayOvertime_4leave + restDayOvertime_4leave + holidayOvertime_4leave +
workingDayOvertime_nonleave + restDayOvertime_nonleave + holidayOvertime_nonleave));
data.add( fieldValue);
continue;
}
continue;
} else if(fieldName.equals("kqdate")){
fieldValue=kqdate+" "+com.engine.portal.util.DateUtil.getDayWeekOfDate1(DateUtil.parseToDate(kqdate));
} else {
@ -891,91 +649,6 @@ public class ExportDailyExcelCmd extends AbstractCommonCommand<Map<String, Objec
}
return retmap;
}
/*获取人员多级部门*/
private String getMultiLevelDepartmentById(String id){
RecordSet rs = new RecordSet();
String str = "总部";
String field31 = "";
String field32 = "";
String field33 = "";
String field34 = "";
String sql = "select field31,field32,field33,field34 from cus_fielddata where" +
" id = ? and scope='HrmCustomFieldByInfoType' and scopeid= -1";
rs.executeQuery(sql,id);
if(rs.next()){
field31 = Util.null2String(rs.getString("field31"));
field32 = Util.null2String(rs.getString("field32"));
field33 = Util.null2String(rs.getString("field33"));
field34 = Util.null2String(rs.getString("field34"));
}
if(!"".equals(field31)){
str = str+"/"+field31;
}else if(!"".equals(field32)){
str = str+"/"+field32;
}else if(!"".equals(field33)){
str = str+"/"+field33;
}else if(!"".equals(field34)){
str = str+"/"+field34;
}
return str;
}
/*获取人员加班类型*/
private String getOvertimeTypeById(String id){
RecordSet rs = new RecordSet();
String field28 = "";
String sql = "select field28 from cus_fielddata where" +
" id = ? and scope='HrmCustomFieldByInfoType' and scopeid= 3";
rs.executeQuery(sql,id);
if(rs.next()){
field28 = Util.null2String(rs.getString("field28"));
}
return field28;
}
/*获取人员入离职时间*/
private Map<String,String> getEmployAndResignDateById(String id){
RecordSet rs = new RecordSet();
Map<String,String> map = new HashMap<>();
String companystartdate = "";//入职时间
String created = "";//创建日期
String field30 = "";//离职时间
String sql = "select 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 and a.id = ? ";
rs.executeQuery(sql,id);
if(rs.next()){
companystartdate = Util.null2String(rs.getString("companystartdate"));
created = Util.null2String(rs.getString("created"));
field30 = Util.null2String(rs.getString("field30"));
}
companystartdate = "".equals(companystartdate)?created:companystartdate;
map.put("companystartdate",companystartdate);
map.put("resignDate",field30);
return map;
}
/*获取人员入离职时间*/
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,Object> getChildColumnsInfo(String parentid, User user){
Map<String,Object> returnMap = new HashMap<>();
@ -996,8 +669,7 @@ public class ExportDailyExcelCmd extends AbstractCommonCommand<Map<String, Objec
}
}else if(parentid.equals("overtime")){
// String[] overtimeChild = {"overtime_nonleave","overtime_4leave","overtimeTotal"};
String[] overtimeChild = {"overtime_4leave","overtimeTotal"};
String[] overtimeChild = {"overtime_nonleave","overtime_4leave","overtimeTotal"};
for(int i=0;i<overtimeChild.length;i++){
String id = overtimeChild[i];
title = new HashMap();

@ -9,7 +9,6 @@ import com.engine.kq.biz.*;
import com.engine.kq.util.ExcelUtil;
import com.engine.kq.util.KQDurationCalculatorUtil;
import com.engine.kq.util.UtilKQ;
import org.apache.commons.lang3.StringUtils;
import weaver.common.DateUtil;
import weaver.conn.RecordSet;
import weaver.general.BaseBean;
@ -20,16 +19,11 @@ import weaver.hrm.company.DepartmentComInfo;
import weaver.hrm.company.SubCompanyComInfo;
import weaver.hrm.job.JobTitlesComInfo;
import weaver.hrm.resource.ResourceComInfo;
import weaver.interfaces.sskj.comInfo.PropBean;
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;
import java.util.*;
public class ExportExcelCmd extends AbstractCommonCommand<Map<String, Object>> {
@ -104,13 +98,13 @@ public class ExportExcelCmd extends AbstractCommonCommand<Map<String, Object>> {
cascadekey = "absenteeismMins";
}else if(showColumn.equals("overtime")){
tmpShowColumns.add("overtime_4leave");
// tmpShowColumns.add("overtime_nonleave");
// tmpShowColumns.add("workingDayOvertime_nonleave");
tmpShowColumns.add("overtime_nonleave");
tmpShowColumns.add("workingDayOvertime_nonleave");
tmpShowColumns.add("workingDayOvertime_4leave");
// tmpShowColumns.add("restDayOvertime_nonleave");
tmpShowColumns.add("restDayOvertime_nonleave");
tmpShowColumns.add("restDayOvertime_4leave");
tmpShowColumns.add("holidayOvertime_4leave");
// tmpShowColumns.add("holidayOvertime_nonleave");
tmpShowColumns.add("holidayOvertime_nonleave");
}
if(cascadekey.length()>0){
tmpShowColumns.add(cascadekey);
@ -301,59 +295,6 @@ public class ExportExcelCmd extends AbstractCommonCommand<Map<String, Object>> {
/*考勤二开--转事假start*/
String calLeaveId = bb.getPropValue("project_sskj", "calLeaveId");
/*考勤二开--转事假end*/
/*考勤二开--公休时长统计start*/
String offdutyId = Util.null2String(PropBean.getUfPropValue("shift.offduty.id"),"7");
/*考勤二开--公休时长统计end*/
/*考勤二开--劳务工时start*/
Map<String, Object> empTypes = new HashMap<>();
String empType = Util.null2String(PropBean.getUfPropValue("empType"),"field9");
String acqLaSql = "select id, " + empType + " from cus_fielddata where scopeid = -1 and scope = 'HrmCustomFieldByInfoType'";
rs.executeQuery(acqLaSql);
while (rs.next()) {
String id = Util.null2String(rs.getString("id"));
String empTypeValue = Util.null2String(rs.getString(empType));
if (StringUtils.isNotBlank(id) && StringUtils.isNotBlank(empTypeValue)) {
empTypes.put(id, empTypeValue);
}
}
/*考勤二开--劳务工时end*/
/*考勤二开--劳务公司start*/
//获取人员的劳务公司
Map<String, Object> resLabComMap = new HashMap<>();
String laborCompanies = Util.null2String(PropBean.getUfPropValue("laborCompanies"),"field25");
String acqResLaborComSql = "select id, " + laborCompanies + " from cus_fielddata where scopeid = 3 and scope = 'HrmCustomFieldByInfoType'";
rs.executeQuery(acqResLaborComSql);
while (rs.next()) {
String id = Util.null2String(rs.getString("id"));
String value = Util.null2String(rs.getString(laborCompanies));
if (StringUtils.isNotBlank(id) && StringUtils.isNotBlank(value)) {
resLabComMap.put(id, value);
}
}
bb.writeLog("resLabComMap: " + resLabComMap);
//获取所有劳务公司
Map<String, Object> laborCompaniesMap = new HashMap<>();
String acqLabComSql = "select id, gsmc from uf_lwgs ";
rs.executeQuery(acqLabComSql);
while (rs.next()) {
String id = Util.null2String(rs.getString("id"));
String value = Util.null2String(rs.getString("gsmc"));
if (StringUtils.isNotBlank(id) && StringUtils.isNotBlank(value)) {
laborCompaniesMap.put(id, value);
}
}
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()) {
@ -365,7 +306,7 @@ public class ExportExcelCmd extends AbstractCommonCommand<Map<String, Object>> {
String fieldid = KQReportFieldComInfo.field2Id.get(fieldName);
String fieldValue = "";
if(fieldName.equals("nightdaysx") || fieldName.equals("nightdaysd") ) {
continue;
continue;
}
if (fieldName.equals("subcompany")) {
String tmpSubcompanyId = Util.null2String(rs.getString("subcompanyid"));
@ -389,74 +330,7 @@ public class ExportExcelCmd extends AbstractCommonCommand<Map<String, Object>> {
departmentComInfo.getDepartmentname(tmpDepartmentId);
// fieldValue = departmentComInfo.getDepartmentname(tmpDepartmentId);
} else if(fieldName.equals("firstLevelDepartment")){
//根据id查询多级部门信息
//String multiLevelDepartmentStr = getMultiLevelDepartmentById(id);
String departmentid = Util.null2String(rs.getString("departmentid"));
fieldValue = departmentComInfo.getDepartmentRealPath(departmentid, "/", "0");
String[] split = fieldValue.split("/");
if(split.length>=1){
fieldValue = split[0];
}else {
fieldValue = "";
}
}else if(fieldName.equals("secondaryDepartment")){
//根据id查询多级部门信息
//String multiLevelDepartmentStr = getMultiLevelDepartmentById(id);
String departmentid = Util.null2String(rs.getString("departmentid"));
fieldValue = departmentComInfo.getDepartmentRealPath(departmentid, "/", "0");
String[] split = fieldValue.split("/");
if(split.length>=2){
fieldValue = split[1];
}else {
fieldValue = "";
}
}else if(fieldName.equals("thirdLevelDepartment")){
//根据id查询多级部门信息
//String multiLevelDepartmentStr = getMultiLevelDepartmentById(id);
String departmentid = Util.null2String(rs.getString("departmentid"));
fieldValue = departmentComInfo.getDepartmentRealPath(departmentid, "/", "0");
String[] split = fieldValue.split("/");
if(split.length>=3){
fieldValue = split[2];
}else {
fieldValue = "";
}
}else if(fieldName.equals("fourthLevelDepartment")){
//根据id查询多级部门信息
//String multiLevelDepartmentStr = getMultiLevelDepartmentById(id);
String departmentid = Util.null2String(rs.getString("departmentid"));
fieldValue = departmentComInfo.getDepartmentRealPath(departmentid, "/", "0");
String[] split = fieldValue.split("/");
if(split.length>=4){
fieldValue = split[3];
}else {
fieldValue = "";
}
}else if(fieldName.equals("overtimeType")){
//根据id查询加班类型
String overtimeType = getOvertimeTypeById(id);
if("6".equals(overtimeType)){
overtimeType = "调休";
}else if("5".equals(overtimeType)){
overtimeType = "隔月发放";
}else if("4".equals(overtimeType)){
overtimeType = "当月发放";
}else {
overtimeType = "无";
}
fieldValue = overtimeType;
}else if(fieldName.equals("companystartdate")){
//根据id查询入职日期
//Map<String, String> map = getEmployAndResignDateById(id);
Map<String, String> map = employAndResignDates.get(id);
fieldValue = map.get("companystartdate");
}else if(fieldName.equals("resignDate")){
//根据id查询离职日期
//Map<String, String> map = getEmployAndResignDateById(id);
Map<String, String> map = employAndResignDates.get(id);
fieldValue = map.get("resignDate");
}else if (fieldName.equals("jobtitle")) {
} else if (fieldName.equals("jobtitle")) {
String tmpJobtitleId = Util.null2String(rs.getString("jobtitle"));
if (tmpJobtitleId.length() == 0) {
tmpJobtitleId = Util.null2String(resourceComInfo.getJobTitle(id));
@ -510,24 +384,17 @@ public class ExportExcelCmd extends AbstractCommonCommand<Map<String, Object>> {
/*考勤二开--转事假start*/
if ( flowType.equals( ("leaveType_" + calLeaveId) ) ) {
bb.writeLog("ExportExcelCmd flowLeaveData start ");
bb.writeLog("flowLeaveData: " + flowLeaveData);
double temp = Util.getDoubleValue(Util.null2String(flowData.get("ToComLeaveData|" + resourceId)));
bb.writeLog("temp: " + temp);
if (temp >= 0.00) {
flowLeaveData = flowLeaveData + temp;
}
bb.writeLog("flowLeaveData: " + flowLeaveData);
}
/*考勤二开--转事假end*/
/*考勤二开--异常考勤转事假start*/
if ( flowType.equals( ("leaveType_" + calLeaveId) ) ) {
double temp = Util.getDoubleValue(Util.null2String(flowData.get("-AbnAttToComLeaveData|" + id )));
if (temp >= 0.00) {
temp = Double.parseDouble(KQDurationCalculatorUtil.getDurationRound(String.valueOf(temp / 60.0)));
double doubleValue = Util.getDoubleValue(Util.null2String(flowLeaveData));
flowLeaveData = String.valueOf(doubleValue > 0.00? doubleValue : 0.00 + temp);
}
}
/*考勤二开--异常考勤转事假end*/
data.add(flowLeaveData);
}
continue;
@ -539,177 +406,30 @@ public class ExportExcelCmd extends AbstractCommonCommand<Map<String, Object>> {
data.add("0");
}
continue;
} else if ("resourceType".equals(fieldName)) {//考勤二开--员工类型显示
int emp = Util.getIntValue(Util.null2String(empTypes.get(id)));
if(emp == 0) {
fieldValue = "正式工";
}else if(emp == 1) {
fieldValue = "劳务工";
}
}else if ("laborHours".equals(fieldName) ) {
data.add( fieldValue);
continue;
} 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.add( fieldValue);
continue;
} else if ("holidaylaborHours".equals(fieldName)) {//考勤二开--节假日劳务工时
double temp = Util.getDoubleValue(Util.null2String(flowData.get("LaborHoursData|" + id + "|" + fieldName)), 0.00);
fieldValue = String.valueOf(temp);
data.add(fieldValue);
continue;
} else if ("workdaylaborHours".equals(fieldName)) {//考勤二开--工作日劳务工时
double temp = Util.getDoubleValue(Util.null2String(flowData.get("LaborHoursData|" + id + "|" + fieldName)), 0.00);
fieldValue = String.valueOf(temp);
data.add(fieldValue);
continue;
} else if ("restdaylaborHours".equals(fieldName)) {//考勤二开--休息日劳务工时
double temp = Util.getDoubleValue(Util.null2String(flowData.get("LaborHoursData|" + id + "|" + fieldName)), 0.00);
fieldValue = String.valueOf(temp);
data.add(fieldValue);
continue;
} else if ("laborHoursTotal".equals(fieldName) ) {//考勤二开--劳务工时总计
double holidayValue = Util.getDoubleValue(Util.null2String(flowData.get("LaborHoursData|" + id + "|holiday")), 0.00);
double workdayValue = Util.getDoubleValue(Util.null2String(flowData.get("LaborHoursData|" + id + "|workday")), 0.00);
double restdayValue = Util.getDoubleValue(Util.null2String(flowData.get("LaborHoursData|" + id + "|restday")), 0.00);
double holidayValue = Util.getDoubleValue(Util.null2String(flowData.get("LaborHoursData|" + id + "|holidaylaborHours")), 0.00);
double workdayValue = Util.getDoubleValue(Util.null2String(flowData.get("LaborHoursData|" + id + "|workdaylaborHours")), 0.00);
double restdayValue = Util.getDoubleValue(Util.null2String(flowData.get("LaborHoursData|" + id + "|restdaylaborHours")), 0.00);
double total = holidayValue + workdayValue + restdayValue;
fieldValue = String.valueOf(total);
data.add(fieldValue);
continue;
}else if(fieldName.equals("reissuecard")){//补卡
int intValue = Util.getIntValue(Util.null2String(flowData.get(id + "|reissueCard")));
if (intValue < 0) {
fieldValue = "0";
} else {
fieldValue = String.valueOf(intValue);
}
data.add(fieldValue);
continue;
} 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 = new BigDecimal(absenceDays).multiply(new BigDecimal(8)).setScale(2,RoundingMode.HALF_UP).toString();
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(holidayValue);
data.add(workdayValue);
data.add(restdayValue);
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);
double max2 = Math.max(Util.getDoubleValue(Util.null2String(allTiaoxius.get("1"))), 0.00);
fieldValue = String.valueOf(max2);
data.add(fieldValue);
double max = Math.max(Util.getDoubleValue(Util.null2String(allTiaoxius.get("2"))), 0.00);
fieldValue = String.valueOf(max);
data.add(fieldValue);
double max1 = Math.max(Util.getDoubleValue(Util.null2String(allTiaoxius.get("3"))), 0.00);
fieldValue = String.valueOf(max1);
data.add(fieldValue);
} else {
data.add("0");
data.add("0");
data.add("0");
}
continue;
} else if(fieldName.equals("overtime")){
fieldValue = KQDurationCalculatorUtil.getDurationRound(Util.null2String(flowData.get(id + "|workingDayOvertime_nonleave")));
data.add(getFieldValueByUnitType(fieldValue,kqReportFieldComInfo.getUnittype(KQReportFieldComInfo.field2Id.get("workingDayOvertime_nonleave"))));
} else if(fieldName.equals("lastRemOt")){//上月加班剩余
if ("3".equals(typeselect) || "7".equals(typeselect)) {
Map<String, Object> allTiaoxius = getLastAllTiaoxius(id, fromDate, toDate);
double max2 = Math.max(Util.getDoubleValue(Util.null2String(allTiaoxius.get("1"))), 0.00);
fieldValue = String.valueOf(max2);
data.add(fieldValue);
double max = Math.max(Util.getDoubleValue(Util.null2String(allTiaoxius.get("2"))), 0.00);
fieldValue = String.valueOf(max);
data.add(fieldValue);
double max1 = Math.max(Util.getDoubleValue(Util.null2String(allTiaoxius.get("3"))), 0.00);
fieldValue = KQDurationCalculatorUtil.getDurationRound(Util.null2String(flowData.get(id + "|restDayOvertime_nonleave")));
data.add(getFieldValueByUnitType(fieldValue,kqReportFieldComInfo.getUnittype(KQReportFieldComInfo.field2Id.get("restDayOvertime_nonleave"))));
fieldValue = String.valueOf(max1);
data.add(fieldValue);
} else {
data.add("0");
data.add("0");
data.add("0");
}
continue;
} else if(fieldName.equals("overtime")){
// fieldValue = KQDurationCalculatorUtil.getDurationRound(Util.null2String(flowData.get(id + "|workingDayOvertime_nonleave")));
// data.add(getFieldValueByUnitType(fieldValue,kqReportFieldComInfo.getUnittype(KQReportFieldComInfo.field2Id.get("workingDayOvertime_nonleave"))));
//
// fieldValue = KQDurationCalculatorUtil.getDurationRound(Util.null2String(flowData.get(id + "|restDayOvertime_nonleave")));
// data.add(getFieldValueByUnitType(fieldValue,kqReportFieldComInfo.getUnittype(KQReportFieldComInfo.field2Id.get("restDayOvertime_nonleave"))));
//
// fieldValue = KQDurationCalculatorUtil.getDurationRound(Util.null2String(flowData.get(id + "|holidayOvertime_nonleave")));
// data.add(getFieldValueByUnitType(fieldValue,kqReportFieldComInfo.getUnittype(KQReportFieldComInfo.field2Id.get("holidayOvertime_nonleave"))));
fieldValue = KQDurationCalculatorUtil.getDurationRound(Util.null2String(flowData.get(id + "|holidayOvertime_nonleave")));
data.add(getFieldValueByUnitType(fieldValue,kqReportFieldComInfo.getUnittype(KQReportFieldComInfo.field2Id.get("holidayOvertime_nonleave"))));
fieldValue = KQDurationCalculatorUtil.getDurationRound(Util.null2String(flowData.get(id + "|workingDayOvertime_4leave")));
data.add(getFieldValueByUnitType(fieldValue,kqReportFieldComInfo.getUnittype(KQReportFieldComInfo.field2Id.get("workingDayOvertime_4leave"))));
@ -734,7 +454,7 @@ public class ExportExcelCmd extends AbstractCommonCommand<Map<String, Object>> {
double holidayOvertime_nonleave = Util.getDoubleValue(Util.null2String(flowData.get(id+"|holidayOvertime_nonleave")));
holidayOvertime_nonleave = holidayOvertime_nonleave<0?0:holidayOvertime_nonleave;
fieldValue = KQDurationCalculatorUtil.getDurationRound(String.valueOf(workingDayOvertime_4leave+restDayOvertime_4leave+holidayOvertime_4leave+
workingDayOvertime_nonleave+restDayOvertime_nonleave+holidayOvertime_nonleave));
workingDayOvertime_nonleave+restDayOvertime_nonleave+holidayOvertime_nonleave));
data.add(getFieldValueByUnitType(fieldValue,kqReportFieldComInfo.getUnittype(KQReportFieldComInfo.field2Id.get("overtimeTotal"))));
continue;
}else if(fieldName.equals("businessLeave") || fieldName.equals("officialBusiness")){
@ -875,66 +595,6 @@ public class ExportExcelCmd extends AbstractCommonCommand<Map<String, Object>> {
}
return retmap;
}
/*获取人员多级部门*/
private String getMultiLevelDepartmentById(String id){
RecordSet rs = new RecordSet();
String str = "总部";
String field31 = "";
String field32 = "";
String field33 = "";
String field34 = "";
String sql = "select field31,field32,field33,field34 from cus_fielddata where" +
" id = ? and scope='HrmCustomFieldByInfoType' and scopeid= -1";
rs.executeQuery(sql,id);
if(rs.next()){
field31 = Util.null2String(rs.getString("field31"));
field32 = Util.null2String(rs.getString("field32"));
field33 = Util.null2String(rs.getString("field33"));
field34 = Util.null2String(rs.getString("field34"));
}
if(!"".equals(field31)){
str = str+"/"+field31;
}else if(!"".equals(field32)){
str = str+"/"+field32;
}else if(!"".equals(field33)){
str = str+"/"+field33;
}else if(!"".equals(field34)){
str = str+"/"+field34;
}
return str;
}
/*获取人员加班类型*/
private String getOvertimeTypeById(String id){
RecordSet rs = new RecordSet();
String field28 = "";
String sql = "select field28 from cus_fielddata where" +
" id = ? and scope='HrmCustomFieldByInfoType' and scopeid= 3";
rs.executeQuery(sql,id);
if(rs.next()){
field28 = Util.null2String(rs.getString("field28"));
}
return field28;
}
/*获取人员入离职时间*/
private Map<String,String> getEmployAndResignDateById(String id){
RecordSet rs = new RecordSet();
Map<String,String> map = new HashMap<>();
String companystartdate = "";//入职时间
String created = "";//创建日期
String field30 = "";//离职时间
String sql = "select 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 and a.id = ? ";
rs.executeQuery(sql,id);
if(rs.next()){
companystartdate = Util.null2String(rs.getString("companystartdate"));
created = Util.null2String(rs.getString("created"));
field30 = Util.null2String(rs.getString("field30"));
}
companystartdate = "".equals(companystartdate)?created:companystartdate;
map.put("companystartdate",companystartdate);
map.put("resignDate",field30);
return map;
}
private Map<String, Object> getChildColumnsInfo(String parentid, User user) {
Map<String, Object> returnMap = new HashMap<>();
@ -967,8 +627,7 @@ public class ExportExcelCmd extends AbstractCommonCommand<Map<String, Object>> {
titleList.add(title);
}
}else if(parentid.equals("overtime")){
// String[] overtimeChild = {"overtime_nonleave","overtime_4leave","overtimeTotal"};
String[] overtimeChild = {"overtime_4leave","overtimeTotal"};
String[] overtimeChild = {"overtime_nonleave","overtime_4leave","overtimeTotal"};
for(int i=0;i<overtimeChild.length;i++){
String id = overtimeChild[i];
title = new HashMap();
@ -1059,313 +718,6 @@ public class ExportExcelCmd extends AbstractCommonCommand<Map<String, Object>> {
}
return fieldValue;
}
/**
*
* @return
*/
public Map<String, Object> getAllTiaoxius(String resourceid ,String fromdate, String todate) {
Map<String, Object> result = new HashMap<String, Object>();
String acqSql = "SELECT " +
" a.resourceid, " +
" SUM(tiaoxiuamount) AS tiaoxiuamounts, " +
" SUM(usedamount) AS usedamounts, " +
" GREATEST( SUM(COALESCE(extraamount, 0)) + SUM(COALESCE(tiaoxiuamount, 0)) - SUM(COALESCE(usedamount, 0)), 0.00000) AS difference_amounts, " +
" COALESCE(datetype, b.changetype) AS grouping_date, " +
" CASE " +
" WHEN datetype IS NOT NULL THEN datetype " +
" ELSE b.changetype " +
" END AS displayed_date " +
"FROM " +
" kq_balanceofleave a " +
"LEFT JOIN " +
" kq_flow_overtime b ON b.tiaoxiuid = a.id " +
"WHERE " +
" a.leaverulesid = 5 " +
" AND a.effectiveDate >= '"+fromdate+"' " +
" AND a.effectiveDate <= '"+todate+"' " +
" AND a.expirationDate >= '"+todate+"' " +
" AND a.resourceid = "+resourceid+" " +
"GROUP BY " +
" a.resourceid, " +
" COALESCE(datetype, b.changetype) " +
"ORDER BY " +
" grouping_date;";
RecordSet rs = new RecordSet();
rs.executeQuery(acqSql);
while (rs.next()){
String differenceAmounts = Util.null2String(rs.getString("difference_amounts"));
String displayedDate = Util.null2String(rs.getString("displayed_date"));
if (StringUtils.isNotBlank(differenceAmounts) && StringUtils.isNotBlank(displayedDate)) {
result.put(displayedDate, differenceAmounts);
}
}
return result;
}
/**
*
* @return
*/
public Map<String, Object> getLastAllTiaoxius(String resourceid ,String fromdate, String todate) {
Map<String, Object> result = new HashMap<String, Object>();
Map<String, Object> lastMonthFirstAndLastDay = getLastMonthFirstAndLastDay(fromdate);
if (lastMonthFirstAndLastDay != null && lastMonthFirstAndLastDay.size() > 0) {
String firstDay = Util.null2String(lastMonthFirstAndLastDay.get("firstDay"));
String lastDay = Util.null2String(lastMonthFirstAndLastDay.get("lastDay"));
if (StringUtils.isNotBlank(firstDay)) {
fromdate = firstDay;
}
if (StringUtils.isNotBlank(lastDay)) {
todate = lastDay;
}
}
String acqSql = "SELECT " +
" a.resourceid, " +
" SUM(tiaoxiuamount) AS tiaoxiuamounts, " +
" SUM(usedamount) AS usedamounts, " +
" GREATEST( SUM(COALESCE(extraamount, 0)) + SUM(COALESCE(tiaoxiuamount, 0)) - SUM(COALESCE(usedamount, 0)), 0.00000) AS difference_amounts, " +
" COALESCE(datetype, b.changetype) AS grouping_date, " +
" CASE " +
" WHEN datetype IS NOT NULL THEN datetype " +
" ELSE b.changetype " +
" END AS displayed_date " +
"FROM " +
" kq_balanceofleave a " +
"LEFT JOIN " +
" kq_flow_overtime b ON b.tiaoxiuid = a.id " +
"WHERE " +
" a.leaverulesid = 5 " +
" AND a.effectiveDate >= '"+fromdate+"' " +
" AND a.effectiveDate <= '"+todate+"' " +
" AND a.expirationDate >= '"+todate+"' " +
" AND a.resourceid = "+resourceid+" " +
"GROUP BY " +
" a.resourceid, " +
" COALESCE(datetype, b.changetype) " +
"ORDER BY " +
" grouping_date;";
RecordSet rs = new RecordSet();
rs.executeQuery(acqSql);
while (rs.next()){
String differenceAmounts = Util.null2String(rs.getString("difference_amounts"));
String displayedDate = Util.null2String(rs.getString("displayed_date"));
if (StringUtils.isNotBlank(differenceAmounts) && StringUtils.isNotBlank(displayedDate)) {
result.put(displayedDate, differenceAmounts);
}
}
return result;
}
public Map<String,Object> getLastMonthFirstAndLastDay(String dateString) {
Map<String,Object> result = new HashMap<String,Object>();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
// 解析给定的日期字符串
LocalDate date = LocalDate.parse(dateString, formatter);
// 获取上个月的第一天
LocalDate firstDayOfLastMonth = date.with(TemporalAdjusters.firstDayOfMonth()).minusMonths(1);
// 获取上个月的最后一天
LocalDate lastDayOfLastMonth = date.with(TemporalAdjusters.lastDayOfMonth()).minusMonths(1);
// 格式化日期为字符串并返回
result.put("firstDay", firstDayOfLastMonth.format(formatter));
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;

@ -233,10 +233,6 @@ public class GetKQDailyReportCmd extends AbstractCommonCommand<Map<String, Objec
} else {
sql = " select " + sql;
}
boolean isneedcal = KQSettingsBiz.getKqformatAccurate();
params.put("isneedcal",isneedcal?"1":"0");
Map<String,Object> flowData = kqReportBiz.getDailyFlowData(params,user);
Map<String,String> serialdata = new HashMap<>();
/*考勤二开--转事假start*/
@ -245,6 +241,7 @@ public class GetKQDailyReportCmd extends AbstractCommonCommand<Map<String, Objec
/*考勤二开--公休时长统计start*/
String offdutyId = Util.null2String(PropBean.getUfPropValue("shift.offduty.id"),"7");
bb.writeLog("offdutyId: " + offdutyId);
/*考勤二开--公休时长统计end*/
/*考勤二开--劳务工时start*/
@ -261,44 +258,12 @@ public class GetKQDailyReportCmd extends AbstractCommonCommand<Map<String, Objec
}
/*考勤二开--劳务工时end*/
/*考勤二开--劳务公司start*/
//获取人员的劳务公司
Map<String, Object> resLabComMap = new HashMap<>();
String laborCompanies = Util.null2String(PropBean.getUfPropValue("laborCompanies"),"field25");
String acqResLaborComSql = "select id, " + laborCompanies + " from cus_fielddata where scopeid = 3 and scope = 'HrmCustomFieldByInfoType'";
rs.executeQuery(acqResLaborComSql);
while (rs.next()) {
String id = Util.null2String(rs.getString("id"));
String value = Util.null2String(rs.getString(laborCompanies));
if (StringUtils.isNotBlank(id) && StringUtils.isNotBlank(value)) {
resLabComMap.put(id, value);
}
}
bb.writeLog("resLabComMap: " + resLabComMap);
//获取所有劳务公司
Map<String, Object> laborCompaniesMap = new HashMap<>();
String acqLabComSql = "select id, gsmc from uf_lwgs ";
rs.executeQuery(acqLabComSql);
while (rs.next()) {
String id = Util.null2String(rs.getString("id"));
String value = Util.null2String(rs.getString("gsmc"));
if (StringUtils.isNotBlank(id) && StringUtils.isNotBlank(value)) {
laborCompaniesMap.put(id, value);
}
}
bb.writeLog("laborCompaniesMap: " + laborCompaniesMap);
/*考勤二开--劳务公司end*/
// #1475814-概述:满足考勤报分部部门显示及导出时显示全路径
String fullPathMainKey = "show_full_path";
KQSettingsComInfo kqSettingsComInfo = new KQSettingsComInfo();
String isShowFullPath = Util.null2String(kqSettingsComInfo.getMain_val(fullPathMainKey),"0");
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
/*考勤二开--入离职时间start*/
Map<String, Map<String, String>> employAndResignDates = getAllEmployAndResignDateById();
/*考勤二开--入离职时间end*/
rs.execute(sql);
writeLog("howec::::::::::::::::sql:"+sql);
while (rs.next()) {
@ -353,80 +318,6 @@ public class GetKQDailyReportCmd extends AbstractCommonCommand<Map<String, Objec
data.put(fieldName + "Id", fieldValueID);
data.put(fieldName, fieldValue);
}else if(fieldName.equals("firstLevelDepartment")){
//根据id查询多级部门信息
//String multiLevelDepartmentStr = getMultiLevelDepartmentById(id);
String departmentid = Util.null2String(rs.getString("departmentid"));
fieldValue = departmentComInfo.getDepartmentRealPath(departmentid, "/", "0");
String[] split = fieldValue.split("/");
if(split.length>=1){
fieldValue = split[0];
}else {
fieldValue = "";
}
data.put(fieldName, fieldValue);
}else if(fieldName.equals("secondaryDepartment")){
//根据id查询多级部门信息
//String multiLevelDepartmentStr = getMultiLevelDepartmentById(id);
String departmentid = Util.null2String(rs.getString("departmentid"));
fieldValue = departmentComInfo.getDepartmentRealPath(departmentid, "/", "0");
String[] split = fieldValue.split("/");
if(split.length>=2){
fieldValue = split[1];
}else {
fieldValue = "";
}
data.put(fieldName, fieldValue);
}else if(fieldName.equals("thirdLevelDepartment")){
//根据id查询多级部门信息
//String multiLevelDepartmentStr = getMultiLevelDepartmentById(id);
String departmentid = Util.null2String(rs.getString("departmentid"));
fieldValue = departmentComInfo.getDepartmentRealPath(departmentid, "/", "0");
String[] split = fieldValue.split("/");
if(split.length>=3){
fieldValue = split[2];
}else {
fieldValue = "";
}
data.put(fieldName, fieldValue);
}else if(fieldName.equals("fourthLevelDepartment")){
//根据id查询多级部门信息
//String multiLevelDepartmentStr = getMultiLevelDepartmentById(id);
String departmentid = Util.null2String(rs.getString("departmentid"));
fieldValue = departmentComInfo.getDepartmentRealPath(departmentid, "/", "0");
String[] split = fieldValue.split("/");
if(split.length>=4){
fieldValue = split[3];
}else {
fieldValue = "";
}
data.put(fieldName, fieldValue);
}else if(fieldName.equals("overtimeType")){
//根据id查询加班类别
String overtimeType = getOvertimeTypeById(id);
if("6".equals(overtimeType)){
overtimeType = "调休";
}else if("5".equals(overtimeType)){
overtimeType = "隔月发放";
}else if("4".equals(overtimeType)){
overtimeType = "当月发放";
}else {
overtimeType = "无";
}
fieldValue = overtimeType;
data.put(fieldName,fieldValue);
}else if(fieldName.equals("companystartdate")){
//根据id查询入职日期
//Map<String, String> map = getEmployAndResignDateById(id);
Map<String, String> map = employAndResignDates.get(id);
fieldValue = map.get("companystartdate");
data.put(fieldName,fieldValue);
}else if(fieldName.equals("resignDate")){
//根据id查询离职日期
//Map<String, String> map = getEmployAndResignDateById(id);
Map<String, String> map = employAndResignDates.get(id);
fieldValue = map.get("resignDate");
data.put(fieldName,fieldValue);
} else if (fieldName.equals("jobtitle")) {
String fieldValueID = rs.getString("jobtitle");
fieldValue = jobTitlesComInfo.getJobTitlesname(rs.getString("jobtitle"));
@ -476,12 +367,12 @@ public class GetKQDailyReportCmd extends AbstractCommonCommand<Map<String, Objec
}
}
} else if ("appForOvertime".equals(fieldName)) {
bb.writeLog("appForOvertime");
LocalDate date = LocalDate.parse(kqdate, formatter);
LocalDate kqdateL = date.plusDays(1);
String kqdateN = kqdateL.format(formatter);
int intValue = Util.getIntValue(Util.null2String(flowData.get(id + "|" + kqdateN + "|" + "appForOvertime")));
bb.writeLog("intValue: " + intValue);
if (intValue == 1) {
data.put(fieldName, "正常");
@ -489,45 +380,23 @@ public class GetKQDailyReportCmd extends AbstractCommonCommand<Map<String, Objec
data.put(fieldName, "异常");
}
} else if ("holiDuration".equals(fieldName)) {//考勤二开--公休时长统计
bb.writeLog("holiDuration");
String serialid = Util.null2String(rs.getString("serialid"));
bb.writeLog("serialid: " + serialid);
if (offdutyId.equals(serialid)) {
fieldValue = "8";
} else {
fieldValue = "0";
}
data.put(fieldName, fieldValue);
} else if ("resourceType".equals(fieldName)) {//考勤二开--员工类型显示
int emp = Util.getIntValue(Util.null2String(empTypes.get(id)));
if(emp == 0) {
fieldValue = "正式工";
}else if(emp == 1) {
fieldValue = "劳务工";
}
data.put(fieldName, fieldValue);
} 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);
bb.writeLog("fieldValue: " + fieldValue);
data.put(fieldName, fieldValue);
} else if ("holidaylaborHours".equals(fieldName)) {//考勤二开--节假日劳务工时
} else if ("laborHours".equals(kqReportFieldComInfo.getParentid()) ) {
int emp = Util.getIntValue(Util.null2String(empTypes.get(id)));
if (emp == 1) {
double attendanceMins = Util.getDoubleValue(Util.null2String(rs.getString("attendanceMins")), 0.00);
double attendanceHours = Util.getDoubleValue(KQDurationCalculatorUtil.getDurationRound(String.valueOf(attendanceMins / 60.0)), 0.00);
if (emp == 0) {
double attendanceMins = Util.getDoubleValue(Util.null2String(rs.getString("attendanceMins")));
double attendanceHours = Util.getDoubleValue(KQDurationCalculatorUtil.getDurationRound(String.valueOf(attendanceMins / 60.0)));
double workingDayOvertime_4leave = Util.getDoubleValue(Util.null2String(flowData.get(id + "|" + kqdate + "|workingDayOvertime_4leave")));
workingDayOvertime_4leave = workingDayOvertime_4leave < 0 ? 0 : workingDayOvertime_4leave;
@ -543,145 +412,23 @@ public class GetKQDailyReportCmd extends AbstractCommonCommand<Map<String, Objec
double holidayOvertime_nonleave = Util.getDoubleValue(Util.null2String(flowData.get(id + "|" + kqdate + "|holidayOvertime_nonleave")));
holidayOvertime_nonleave = holidayOvertime_nonleave < 0 ? 0 : holidayOvertime_nonleave;
fieldValue = KQDurationCalculatorUtil.getDurationRound(String.valueOf(attendanceHours + workingDayOvertime_4leave + restDayOvertime_4leave + holidayOvertime_4leave +
workingDayOvertime_nonleave + restDayOvertime_nonleave + holidayOvertime_nonleave));
int changeType = KQOvertimeRulesBiz.getChangeType(id, kqdate);
if (changeType == 1 && "holidaylaborHours".equals(fieldName) ) {
fieldValue = KQDurationCalculatorUtil.getDurationRound(String.valueOf(attendanceHours + holidayOvertime_4leave + holidayOvertime_nonleave));
data.put(fieldName, fieldValue);
}
if (changeType == 2 && "workdaylaborHours".equals(fieldName) ) {
fieldValue = KQDurationCalculatorUtil.getDurationRound(String.valueOf(attendanceHours + workingDayOvertime_4leave + workingDayOvertime_nonleave));
data.put(fieldName, fieldValue);
}
if (changeType == 3 && "restdaylaborHours".equals(fieldName) ) {
fieldValue = KQDurationCalculatorUtil.getDurationRound(String.valueOf(attendanceHours + restDayOvertime_4leave + restDayOvertime_nonleave));
data.put(fieldName, fieldValue);
}
}
} else if ("workdaylaborHours".equals(fieldName)) {//考勤二开--工作日劳务工时
int emp = Util.getIntValue(Util.null2String(empTypes.get(id)));
if (emp == 1) {
double attendanceMins = Util.getDoubleValue(Util.null2String(rs.getString("attendanceMins")), 0.00);
double attendanceHours = Util.getDoubleValue(KQDurationCalculatorUtil.getDurationRound(String.valueOf(attendanceMins / 60.0)), 0.00);
double workingDayOvertime_4leave = Util.getDoubleValue(Util.null2String(flowData.get(id + "|" + kqdate + "|workingDayOvertime_4leave")));
workingDayOvertime_4leave = workingDayOvertime_4leave < 0 ? 0 : workingDayOvertime_4leave;
double restDayOvertime_4leave = Util.getDoubleValue(Util.null2String(flowData.get(id + "|" + kqdate + "|restDayOvertime_4leave")));
restDayOvertime_4leave = restDayOvertime_4leave < 0 ? 0 : restDayOvertime_4leave;
double holidayOvertime_4leave = Util.getDoubleValue(Util.null2String(flowData.get(id + "|" + kqdate + "|holidayOvertime_4leave")));
holidayOvertime_4leave = holidayOvertime_4leave < 0 ? 0 : holidayOvertime_4leave;
double workingDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(flowData.get(id + "|" + kqdate + "|workingDayOvertime_nonleave")));
workingDayOvertime_nonleave = workingDayOvertime_nonleave < 0 ? 0 : workingDayOvertime_nonleave;
double restDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(flowData.get(id + "|" + kqdate + "|restDayOvertime_nonleave")));
restDayOvertime_nonleave = restDayOvertime_nonleave < 0 ? 0 : restDayOvertime_nonleave;
double holidayOvertime_nonleave = Util.getDoubleValue(Util.null2String(flowData.get(id + "|" + kqdate + "|holidayOvertime_nonleave")));
holidayOvertime_nonleave = holidayOvertime_nonleave < 0 ? 0 : holidayOvertime_nonleave;
int changeType = KQOvertimeRulesBiz.getChangeType(id, kqdate);
if (changeType == 1 && "holidaylaborHours".equals(fieldName) ) {
fieldValue = KQDurationCalculatorUtil.getDurationRound(String.valueOf(attendanceHours + holidayOvertime_4leave + holidayOvertime_nonleave));
data.put(fieldName, fieldValue);
}
if (changeType == 2 && "workdaylaborHours".equals(fieldName) ) {
fieldValue = KQDurationCalculatorUtil.getDurationRound(String.valueOf(attendanceHours + workingDayOvertime_4leave + workingDayOvertime_nonleave));
data.put(fieldName, fieldValue);
}
if (changeType == 3 && "restdaylaborHours".equals(fieldName) ) {
fieldValue = KQDurationCalculatorUtil.getDurationRound(String.valueOf(attendanceHours + restDayOvertime_4leave + restDayOvertime_nonleave));
data.put(fieldName, fieldValue);
}
}
} else if ("restdaylaborHours".equals(fieldName)) {//考勤二开--休息日劳务工时
int emp = Util.getIntValue(Util.null2String(empTypes.get(id)));
if (emp == 1) {
double attendanceMins = Util.getDoubleValue(Util.null2String(rs.getString("attendanceMins")), 0.00);
double attendanceHours = Util.getDoubleValue(KQDurationCalculatorUtil.getDurationRound(String.valueOf(attendanceMins / 60.0)), 0.00);
double workingDayOvertime_4leave = Util.getDoubleValue(Util.null2String(flowData.get(id + "|" + kqdate + "|workingDayOvertime_4leave")));
workingDayOvertime_4leave = workingDayOvertime_4leave < 0 ? 0 : workingDayOvertime_4leave;
double restDayOvertime_4leave = Util.getDoubleValue(Util.null2String(flowData.get(id + "|" + kqdate + "|restDayOvertime_4leave")));
restDayOvertime_4leave = restDayOvertime_4leave < 0 ? 0 : restDayOvertime_4leave;
double holidayOvertime_4leave = Util.getDoubleValue(Util.null2String(flowData.get(id + "|" + kqdate + "|holidayOvertime_4leave")));
holidayOvertime_4leave = holidayOvertime_4leave < 0 ? 0 : holidayOvertime_4leave;
double workingDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(flowData.get(id + "|" + kqdate + "|workingDayOvertime_nonleave")));
workingDayOvertime_nonleave = workingDayOvertime_nonleave < 0 ? 0 : workingDayOvertime_nonleave;
double restDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(flowData.get(id + "|" + kqdate + "|restDayOvertime_nonleave")));
restDayOvertime_nonleave = restDayOvertime_nonleave < 0 ? 0 : restDayOvertime_nonleave;
double holidayOvertime_nonleave = Util.getDoubleValue(Util.null2String(flowData.get(id + "|" + kqdate + "|holidayOvertime_nonleave")));
holidayOvertime_nonleave = holidayOvertime_nonleave < 0 ? 0 : holidayOvertime_nonleave;
int changeType = KQOvertimeRulesBiz.getChangeType(id, kqdate);
if (changeType == 1 && "holidaylaborHours".equals(fieldName) ) {
fieldValue = KQDurationCalculatorUtil.getDurationRound(String.valueOf(attendanceHours + holidayOvertime_4leave + holidayOvertime_nonleave));
if (changeType == 1 && "holiday".equals(fieldName) ) {
data.put(fieldName, fieldValue);
}
if (changeType == 2 && "workdaylaborHours".equals(fieldName) ) {
fieldValue = KQDurationCalculatorUtil.getDurationRound(String.valueOf(attendanceHours + workingDayOvertime_4leave + workingDayOvertime_nonleave));
if (changeType == 2 && "workday".equals(fieldName) ) {
data.put(fieldName, fieldValue);
}
if (changeType == 3 && "restdaylaborHours".equals(fieldName) ) {
fieldValue = KQDurationCalculatorUtil.getDurationRound(String.valueOf(attendanceHours + restDayOvertime_4leave + restDayOvertime_nonleave));
if (changeType == 3 && "restday".equals(fieldName) ) {
data.put(fieldName, fieldValue);
}
}
} else if ("laborHoursTotal".equals(fieldName) ) {
int emp = Util.getIntValue(Util.null2String(empTypes.get(id)));
if (emp == 1) {
double attendanceMins = Util.getDoubleValue(Util.null2String(rs.getString("attendanceMins")), 0.00);
double attendanceHours = Util.getDoubleValue(KQDurationCalculatorUtil.getDurationRound(String.valueOf(attendanceMins / 60.0)), 0.00);
double workingDayOvertime_4leave = Util.getDoubleValue(Util.null2String(flowData.get(id + "|" + kqdate + "|workingDayOvertime_4leave")));
workingDayOvertime_4leave = workingDayOvertime_4leave < 0 ? 0 : workingDayOvertime_4leave;
double restDayOvertime_4leave = Util.getDoubleValue(Util.null2String(flowData.get(id + "|" + kqdate + "|restDayOvertime_4leave")));
restDayOvertime_4leave = restDayOvertime_4leave < 0 ? 0 : restDayOvertime_4leave;
double holidayOvertime_4leave = Util.getDoubleValue(Util.null2String(flowData.get(id + "|" + kqdate + "|holidayOvertime_4leave")));
holidayOvertime_4leave = holidayOvertime_4leave < 0 ? 0 : holidayOvertime_4leave;
double workingDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(flowData.get(id + "|" + kqdate + "|workingDayOvertime_nonleave")));
workingDayOvertime_nonleave = workingDayOvertime_nonleave < 0 ? 0 : workingDayOvertime_nonleave;
double restDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(flowData.get(id + "|" + kqdate + "|restDayOvertime_nonleave")));
restDayOvertime_nonleave = restDayOvertime_nonleave < 0 ? 0 : restDayOvertime_nonleave;
double holidayOvertime_nonleave = Util.getDoubleValue(Util.null2String(flowData.get(id + "|" + kqdate + "|holidayOvertime_nonleave")));
holidayOvertime_nonleave = holidayOvertime_nonleave < 0 ? 0 : holidayOvertime_nonleave;
fieldValue = KQDurationCalculatorUtil.getDurationRound(String.valueOf(attendanceHours + workingDayOvertime_4leave + restDayOvertime_4leave + holidayOvertime_4leave +
workingDayOvertime_nonleave + restDayOvertime_nonleave + holidayOvertime_nonleave));
data.put(fieldName, fieldValue);
data.put("laborHoursTotal", fieldValue);
}
}else if(fieldName.equals("reissuecard")){//补卡
bb.writeLog("补卡id:" + id);
bb.writeLog("补卡kqdate:" + kqdate);
bb.writeLog("补卡key:" + id +"|"+kqdate + "|reissueCard");
int intValue = Util.getIntValue(Util.null2String(flowData.get(id +"|"+kqdate + "|reissueCard")));
if (intValue < 0) {
fieldValue = "0";
} else {
fieldValue = String.valueOf(intValue);
}
data.put(fieldName, fieldValue);
} else {
fieldValue = Util.null2String(rs.getString(fieldName));
if (kqReportFieldComInfo.getUnittype().equals("2") && fieldValue.length() > 0) {
@ -731,29 +478,28 @@ public class GetKQDailyReportCmd extends AbstractCommonCommand<Map<String, Objec
}
/*考勤二开--转事假start*/
if ( flowType.equals( ("leaveType_" + calLeaveId) ) ) {
bb.writeLog("flowLeaveData: " + flowLeaveData);
double temp = Util.getDoubleValue(Util.null2String(flowData.get("DailyToComLeaveData|" + id + "|" + kqdate)));
bb.writeLog("temp: " + temp);
if (temp >= 0.00) {
temp = Double.parseDouble(KQDurationCalculatorUtil.getDurationRound(String.valueOf(temp / 60.0)));
double doubleValue = Util.getDoubleValue(Util.null2String(flowLeaveData));
flowLeaveData = String.valueOf(doubleValue > 0.00? doubleValue : 0.00 + temp);
}
bb.writeLog("flowLeaveData: " + flowLeaveData);
}
/*考勤二开--转事假end*/
/*考勤二开--异常考勤转事假start*/
if ( flowType.equals( ("leaveType_" + calLeaveId) ) ) {
bb.writeLog("-flowLeaveData: " + flowLeaveData);
double temp = Util.getDoubleValue(Util.null2String(flowData.get("DailyAbnAttToComLeaveData|" + id + "|" + kqdate)));
bb.writeLog("-temp: " + temp);
if (temp >= 0.00) {
temp = Double.parseDouble(KQDurationCalculatorUtil.getDurationRound(String.valueOf(temp / 60.0)));
double doubleValue = Util.getDoubleValue(Util.null2String(flowLeaveData));
flowLeaveData = String.valueOf(doubleValue > 0.00? doubleValue : 0.00 + temp);
}
bb.writeLog("-flowLeaveData: " + flowLeaveData);
}
/*考勤二开--异常考勤转事假end*/
data.put(flowType, flowLeaveData);
@ -779,94 +525,6 @@ public class GetKQDailyReportCmd extends AbstractCommonCommand<Map<String, Objec
return retmap;
}
/*获取人员多级部门*/
private String getMultiLevelDepartmentById(String id){
RecordSet rs = new RecordSet();
String str = "总部";
String field31 = "";
String field32 = "";
String field33 = "";
String field34 = "";
String sql = "select field31,field32,field33,field34 from cus_fielddata where" +
" id = ? and scope='HrmCustomFieldByInfoType' and scopeid= -1";
rs.executeQuery(sql,id);
if(rs.next()){
field31 = Util.null2String(rs.getString("field31"));
field32 = Util.null2String(rs.getString("field32"));
field33 = Util.null2String(rs.getString("field33"));
field34 = Util.null2String(rs.getString("field34"));
}
if(!"".equals(field31)){
str = str+"/"+field31;
}else if(!"".equals(field32)){
str = str+"/"+field32;
}else if(!"".equals(field33)){
str = str+"/"+field33;
}else if(!"".equals(field34)){
str = str+"/"+field34;
}
return str;
}
/*获取人员加班类型*/
private String getOvertimeTypeById(String id){
RecordSet rs = new RecordSet();
String field28 = "";
String sql = "select field28 from cus_fielddata where" +
" id = ? and scope='HrmCustomFieldByInfoType' and scopeid= 3";
rs.executeQuery(sql,id);
if(rs.next()){
field28 = Util.null2String(rs.getString("field28"));
}
return field28;
}
/*获取人员入离职时间*/
private Map<String,String> getEmployAndResignDateById(String id){
RecordSet rs = new RecordSet();
Map<String,String> map = new HashMap<>();
String companystartdate = "";//入职时间
String created = "";//创建日期
String field30 = "";//离职时间
String sql = "select 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 and a.id = ? ";
rs.executeQuery(sql,id);
if(rs.next()){
companystartdate = Util.null2String(rs.getString("companystartdate"));
created = Util.null2String(rs.getString("created"));
field30 = Util.null2String(rs.getString("field30"));
}
companystartdate = "".equals(companystartdate)?created:companystartdate;
map.put("companystartdate",companystartdate);
map.put("resignDate",field30);
return map;
}
/*获取人员入离职时间*/
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 String getUnitType(String unitType, User user){
String unitTypeName = "";
@ -908,8 +566,7 @@ public class GetKQDailyReportCmd extends AbstractCommonCommand<Map<String, Objec
lsChildColumns.add(column);
}
}else if(parentid.equals("overtime")){
// String[] overtimeChild = {"overtime_nonleave","overtime_4leave","overtimeTotal"};
String[] overtimeChild = {"overtime_4leave","overtimeTotal"};
String[] overtimeChild = {"overtime_nonleave","overtime_4leave","overtimeTotal"};
for(int i=0;i<overtimeChild.length;i++){
String id = overtimeChild[i];
column = new HashMap();
@ -981,7 +638,7 @@ public class GetKQDailyReportCmd extends AbstractCommonCommand<Map<String, Objec
String sql = "";
KQTimesArrayComInfo kqTimesArrayComInfo = new KQTimesArrayComInfo();
try{
bb.writeLog("-----getSignDetailInfo start-----");
sql = " select kqdate,resourceid,serialid,serialnumber,workbegindate,workbegintime, " +
" workenddate,workendtime,workmins,signindate,signintime,signoutdate,signouttime, \n" +
" attendanceMins,belatemins,graveBeLateMins,leaveearlymins,graveLeaveEarlyMins,absenteeismmins,forgotcheckMins,forgotBeginWorkCheckMins," +
@ -990,7 +647,7 @@ public class GetKQDailyReportCmd extends AbstractCommonCommand<Map<String, Objec
" where resourceid = " + resourceId + " and kqdate ='" + kqDate + "' \n" +
" order by serialnumber \n";
rs.execute(sql);
bb.writeLog("sql: " + sql);
while (rs.next()) {
String resourceid = Util.null2String(rs.getString("resourceid"));
String kqdate = Util.null2String(rs.getString("kqdate"));
@ -1035,12 +692,15 @@ public class GetKQDailyReportCmd extends AbstractCommonCommand<Map<String, Objec
/*考勤二开--当前时间在当天班次下班点之前不显示旷工start*/
String nowDay = DateUtil.format(new Date(), "yyyy-MM-dd");
String nowTime = DateUtil.format(new Date(), "HH:mm");
bb.writeLog("nowDay: " + nowDay);
bb.writeLog("nowTime: " + nowTime);
bb.writeLog("workenddate: " + workenddate);
bb.writeLog("workendtime: " + kqTimesArrayComInfo.turn48to24Time(workendtime));
if (workenddate.equals(nowDay) && nowTime.compareTo(kqTimesArrayComInfo.turn48to24Time(workendtime)) < 0) {
signStatusInfo.put("isneedcal","1");
}
bb.writeLog("signStatusInfo: " + signStatusInfo);
/*考勤二开--当前时间在当天班次下班点之前不显示旷工end*/
data.put("signintime"+serialnumber, signintime.length()==0?SystemEnv.getHtmlLabelName(25994, user.getLanguage()):signintime);
@ -1063,11 +723,15 @@ public class GetKQDailyReportCmd extends AbstractCommonCommand<Map<String, Objec
/*考勤二开--当前时间在当天班次下班点之前不显示旷工start*/
String nowDay = DateUtil.format(new Date(), "yyyy-MM-dd");
String nowTime = DateUtil.format(new Date(), "HH:mm");
bb.writeLog("nowDay: " + nowDay);
bb.writeLog("nowTime: " + nowTime);
bb.writeLog("workenddate: " + workenddate);
bb.writeLog("workendtime: " + kqTimesArrayComInfo.turn48to24Time(workendtime));
if (workenddate.equals(nowDay) && nowTime.compareTo(kqTimesArrayComInfo.turn48to24Time(workendtime)) < 0) {
signStatusInfo.put("isneedcal","1");
}
bb.writeLog("signStatusInfo: " + signStatusInfo);
/*考勤二开--当前时间在当天班次下班点之前不显示旷工end*/
data.put("signouttime"+serialnumber, signouttime.length()==0?SystemEnv.getHtmlLabelName(25994, user.getLanguage()):signouttime);

@ -6,10 +6,8 @@ import com.engine.common.biz.AbstractCommonCommand;
import com.engine.common.entity.BizLogContext;
import com.engine.core.interceptor.CommandContext;
import com.engine.kq.biz.*;
import com.engine.kq.enums.KqSplitFlowTypeEnum;
import com.engine.kq.util.KQDurationCalculatorUtil;
import com.engine.kq.util.PageUidFactory;
import org.apache.commons.lang3.StringUtils;
import weaver.common.DateUtil;
import weaver.conn.RecordSet;
import weaver.general.BaseBean;
@ -20,20 +18,13 @@ import weaver.hrm.company.DepartmentComInfo;
import weaver.hrm.company.SubCompanyComInfo;
import weaver.hrm.job.JobTitlesComInfo;
import weaver.hrm.resource.ResourceComInfo;
import weaver.interfaces.sskj.comInfo.PropBean;
import weaver.systeminfo.SystemEnv;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjusters;
import java.util.*;
import static com.api.formmode.cache.ModeExpandPageComInfo.groupid;
public class GetKQReportCmd extends AbstractCommonCommand<Map<String, Object>> {
BaseBean bb = new BaseBean();
@ -319,7 +310,7 @@ public class GetKQReportCmd extends AbstractCommonCommand<Map<String, Object>> {
sql = " select " + sql;
}
writeLog("howeccccccccccccggggggg10"+ System.currentTimeMillis());
// #1475814-概述:满足考勤报分部部门显示及导出时显示全路径
String fullPathMainKey = "show_full_path";
KQSettingsComInfo kqSettingsComInfo = new KQSettingsComInfo();
@ -333,64 +324,12 @@ public class GetKQReportCmd extends AbstractCommonCommand<Map<String, Object>> {
params.put("uintType",uintType);
params.put("hoursToDay",hoursToDay);
Map<String,Object> flowData = kqReportBiz.getFlowData(params,user);
//考勤二开--请假时长
Map<String, Object> leaveInfos = getLeaveInfos(fromDate, toDate);
/*考勤二开--转事假start*/
String calLeaveId = bb.getPropValue("project_sskj", "calLeaveId");
/*考勤二开--转事假end*/
/*考勤二开--公休时长统计start*/
String offdutyId = Util.null2String(PropBean.getUfPropValue("shift.offduty.id"),"7");
/*考勤二开--公休时长统计end*/
/*考勤二开--劳务公司start*/
//获取人员的劳务公司
Map<String, Object> resLabComMap = new HashMap<>();
String laborCompanies = Util.null2String(PropBean.getUfPropValue("laborCompanies"),"field25");
String acqResLaborComSql = "select id, " + laborCompanies + " from cus_fielddata where scopeid = 3 and scope = 'HrmCustomFieldByInfoType'";
rs.executeQuery(acqResLaborComSql);
while (rs.next()) {
String id = Util.null2String(rs.getString("id"));
String value = Util.null2String(rs.getString(laborCompanies));
if (StringUtils.isNotBlank(id) && StringUtils.isNotBlank(value)) {
resLabComMap.put(id, value);
}
}
bb.writeLog("resLabComMap: " + resLabComMap);
//获取所有劳务公司
Map<String, Object> laborCompaniesMap = new HashMap<>();
String acqLabComSql = "select id, gsmc from uf_lwgs ";
rs.executeQuery(acqLabComSql);
while (rs.next()) {
String id = Util.null2String(rs.getString("id"));
String value = Util.null2String(rs.getString("gsmc"));
if (StringUtils.isNotBlank(id) && StringUtils.isNotBlank(value)) {
laborCompaniesMap.put(id, value);
}
}
bb.writeLog("laborCompaniesMap: " + laborCompaniesMap);
/*考勤二开--劳务公司end*/
/*考勤二开--劳务工时start*/
Map<String, Object> empTypes = new HashMap<>();
String empType = Util.null2String(PropBean.getUfPropValue("empType"),"field9");
String acqLaSql = "select id, " + empType + " from cus_fielddata where scopeid = -1 and scope = 'HrmCustomFieldByInfoType'";
rs.executeQuery(acqLaSql);
while (rs.next()) {
String id = Util.null2String(rs.getString("id"));
String empTypeValue = Util.null2String(rs.getString(empType));
if (StringUtils.isNotBlank(id) && StringUtils.isNotBlank(empTypeValue)) {
empTypes.put(id, empTypeValue);
}
}
/*考勤二开--劳务工时end*/
/*考勤二开--入离职时间start*/
Map<String, Map<String, String>> employAndResignDates = getAllEmployAndResignDateById();
/*考勤二开--入离职时间end*/
bb.writeLog("汇总报表sql: " + sql);
rs.execute(sql);
writeLog("howeccccccccccccggggggg11"+ System.currentTimeMillis());
while (rs.next()) {
data = new HashMap<>();
kqReportFieldComInfo.setTofirstRow();
@ -428,82 +367,7 @@ public class GetKQReportCmd extends AbstractCommonCommand<Map<String, Object>> {
departmentComInfo.getDepartmentname(tmpDepartmentId);
// fieldValue = departmentComInfo.getDepartmentname(tmpDepartmentId);
}else if(fieldName.equals("firstLevelDepartment")){
//根据id查询多级部门信息
//String multiLevelDepartmentStr = getMultiLevelDepartmentById(id);
String departmentid = Util.null2String(rs.getString("departmentid"));
data.put("firstLevelDepartment",departmentid);
fieldValue = departmentComInfo.getDepartmentRealPath(departmentid, "/", "0");
String[] split = fieldValue.split("/");
if(split.length>=1){
fieldValue = split[0];
}else {
fieldValue = "";
}
}else if(fieldName.equals("secondaryDepartment")){
//根据id查询多级部门信息
//String multiLevelDepartmentStr = getMultiLevelDepartmentById(id);
String departmentid = Util.null2String(rs.getString("departmentid"));
data.put("secondaryDepartment",departmentid);
fieldValue = departmentComInfo.getDepartmentRealPath(departmentid, "/", "0");
String[] split = fieldValue.split("/");
if(split.length>=2){
fieldValue = split[1];
}else {
fieldValue = "";
}
}else if(fieldName.equals("thirdLevelDepartment")){
//根据id查询多级部门信息
//String multiLevelDepartmentStr = getMultiLevelDepartmentById(id);
String departmentid = Util.null2String(rs.getString("departmentid"));
data.put("thirdLevelDepartment",departmentid);
fieldValue = departmentComInfo.getDepartmentRealPath(departmentid, "/", "0");
String[] split = fieldValue.split("/");
if(split.length>=3){
fieldValue = split[2];
}else {
fieldValue = "";
}
}else if(fieldName.equals("fourthLevelDepartment")){
//根据id查询多级部门信息
//String multiLevelDepartmentStr = getMultiLevelDepartmentById(id);
String departmentid = Util.null2String(rs.getString("departmentid"));
data.put("fourthLevelDepartment",departmentid);
fieldValue = departmentComInfo.getDepartmentRealPath(departmentid, "/", "0");
String[] split = fieldValue.split("/");
if(split.length>=4){
fieldValue = split[3];
}else {
fieldValue = "";
}
}else if(fieldName.equals("overtimeType")){
writeLog("overtimeType123"+fieldName);
//根据id查询加班类别
String overtimeType = getOvertimeTypeById(id);
if("6".equals(overtimeType)){
overtimeType = "调休";
}else if("5".equals(overtimeType)){
overtimeType = "隔月发放";
}else if("4".equals(overtimeType)){
overtimeType = "当月发放";
}else {
overtimeType = "无";
}
data.put("overtimeType",overtimeType);
fieldValue = overtimeType;
}else if(fieldName.equals("companystartdate")){
//根据id查询入职日期
//Map<String, String> map = getEmployAndResignDateById(id);
Map<String, String> map = employAndResignDates.get(id);
data.put("companystartdate",map.get("companystartdate"));
fieldValue = map.get("companystartdate");
}else if(fieldName.equals("resignDate")){
//根据id查询离职日期
//Map<String, String> map = getEmployAndResignDateById(id);
Map<String, String> map = employAndResignDates.get(id);
data.put("resignDate",map.get("resignDate"));
fieldValue = map.get("resignDate");
} else if(fieldName.equals("jobtitle")){
}else if(fieldName.equals("jobtitle")){
String tmpJobtitleId = Util.null2String(rs.getString("jobtitle"));
if(tmpJobtitleId.length()==0){
tmpJobtitleId = Util.null2String(resourceComInfo.getJobTitle(id));
@ -518,68 +382,10 @@ public class GetKQReportCmd extends AbstractCommonCommand<Map<String, Object>> {
for(int i=0;serialIds!=null&&i<serialIds.size();i++){
data.put(serialIds.get(i), kqReportBiz.getSerialCount(id,fromDate,toDate,serialIds.get(i)));
}
}else if(fieldName.equals("reissuecard")){
int intValue = Util.getIntValue(Util.null2String(flowData.get(id + "|reissueCard")));
if (intValue < 0) {
fieldValue = "0";
} else {
fieldValue = String.valueOf(intValue);
}
}else if(kqReportFieldComInfo.getParentid().equals("thisRemOt")){//当月加班剩余
if ("3".equals(typeselect) || "7".equals(typeselect)) {
Map<String, Object> allTiaoxius = getAllTiaoxius(id, fromDate, toDate);
if("workRemot".equals(fieldName)){
double max = Math.max(Util.getDoubleValue(Util.null2String(allTiaoxius.get("2"))), 0.00);
fieldValue = String.valueOf(max);
data.put(fieldName,fieldValue);
}
if("restRemot".equals(fieldName)){
double max = Math.max(Util.getDoubleValue(Util.null2String(allTiaoxius.get("3"))), 0.00);
fieldValue = String.valueOf(max);
data.put(fieldName,fieldValue);
}
if("holiRemot".equals(fieldName)){
double max = Math.max(Util.getDoubleValue(Util.null2String(allTiaoxius.get("1"))), 0.00);
fieldValue = String.valueOf(max);
data.put(fieldName,fieldValue);
}
}
} else if(kqReportFieldComInfo.getParentid().equals("lastRemOt")){//上月加班剩余
if ("3".equals(typeselect) || "7".equals(typeselect)) {
Map<String, Object> allTiaoxius = getLastAllTiaoxius(id, fromDate, toDate);
if("lastWorkRemot".equals(fieldName)){
double max = Math.max(Util.getDoubleValue(Util.null2String(allTiaoxius.get("2"))), 0.00);
bb.writeLog("lastWorkRemot max: " + max);
fieldValue = String.valueOf(max);
data.put(fieldName,fieldValue);
}
if("lastRestRemot".equals(fieldName)){
double max = Math.max(Util.getDoubleValue(Util.null2String(allTiaoxius.get("3"))), 0.00);
bb.writeLog("lastRestRemot max: " + max);
fieldValue = String.valueOf(max);
data.put(fieldName,fieldValue);
}
if("lastHoliRemot".equals(fieldName)){
double max = Math.max(Util.getDoubleValue(Util.null2String(allTiaoxius.get("1"))), 0.00);
bb.writeLog("lastHoliRemot max: " + max);
fieldValue = String.valueOf(max);
data.put(fieldName,fieldValue);
}
}
} else if(kqReportFieldComInfo.getParentid().equals("overtime")||kqReportFieldComInfo.getParentid().equals("overtime_nonleave")
||kqReportFieldComInfo.getParentid().equals("overtime_4leave")||fieldName.equals("businessLeave") || fieldName.equals("officialBusiness")){
if(fieldName.equals("overtimeTotal")){
writeLog("howeccccccccccccggggggg12"+ System.currentTimeMillis());
double workingDayOvertime_4leave = Util.getDoubleValue(Util.null2String(flowData.get(id+"|workingDayOvertime_4leave")));
workingDayOvertime_4leave = workingDayOvertime_4leave<0?0:workingDayOvertime_4leave;
double restDayOvertime_4leave = Util.getDoubleValue(Util.null2String(flowData.get(id+"|restDayOvertime_4leave")));
@ -621,113 +427,36 @@ public class GetKQReportCmd extends AbstractCommonCommand<Map<String, Object>> {
}else{
fieldValue = KQDurationCalculatorUtil.getDurationRound(Util.null2String(flowData.get(id+"|"+fieldName)));
}
} else if("holiDuration".equals(fieldName)){//考勤二开--公休工时
}else if("holiDuration".equals(fieldName)){
int intValue = Util.getIntValue(Util.null2String(flowData.get("HoliDurationData|" + id)));
if (intValue >= 0) {
fieldValue = String.valueOf(intValue);
data.put(fieldName,intValue);
} else {
fieldValue = "0";
data.put(fieldName,"0");
}
} 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.put(fieldName,fieldValue);
} else if ("resourceType".equals(fieldName)) {//考勤二开--员工类型显示
} else if ("laborHours".equals(kqReportFieldComInfo.getParentid()) ) {
if ("laborHoursTotal".equals(fieldName)) {
//
double holidayValue = Util.getDoubleValue(Util.null2String(flowData.get("LaborHoursData|" + id + "|holiday")), 0.00);
double workdayValue = Util.getDoubleValue(Util.null2String(flowData.get("LaborHoursData|" + id + "|workday")), 0.00);
double restdayValue = Util.getDoubleValue(Util.null2String(flowData.get("LaborHoursData|" + id + "|restday")), 0.00);
//
double total = holidayValue + workdayValue + restdayValue;
bb.writeLog("--total: " +total);
//
// data.put("holiday", holidayValue);
// data.put("workday", workdayValue);
// data.put("restday", restdayValue);
fieldValue = String.valueOf(total);
int emp = Util.getIntValue(Util.null2String(empTypes.get(id)));
if(emp == 0) {
fieldValue = "正式工";
}else if(emp == 1) {
fieldValue = "劳务工";
}
data.put(fieldName, fieldValue);
} else if ("laborCompanies".equals(fieldName)) {//考勤二开--员工劳务公司
}else {
String labCom = Util.null2String(resLabComMap.get(id));
double temp = Util.getDoubleValue(Util.null2String(flowData.get("LaborHoursData|" + id + "|" + fieldName)), 0.00);
fieldValue = String.valueOf(temp);
if (StringUtils.isNotBlank(labCom)) {
fieldValue = Util.null2String(laborCompaniesMap.get(labCom));
}
data.put(fieldName, fieldValue);
} else if ("startOrEndDays".equals(fieldName)) {//考勤二开--入离职工时
int absenceDays = 0;
//优化--转成小时
absenceDays = getStartOrEndDays(id, fromDate, toDate, typeselect, employAndResignDates);
fieldValue = new BigDecimal(absenceDays).multiply(new BigDecimal(8)).setScale(2,RoundingMode.HALF_UP).toString();
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 ("holidaylaborHours".equals(fieldName)) {//考勤二开--节假日劳务工时
double temp = Util.getDoubleValue(Util.null2String(flowData.get("LaborHoursData|" + id + "|" + fieldName)), 0.00);
fieldValue = String.valueOf(temp);
data.put(fieldName,fieldValue);
} else if ("workdaylaborHours".equals(fieldName)) {//考勤二开--工作日劳务工时
double temp = Util.getDoubleValue(Util.null2String(flowData.get("LaborHoursData|" + id + "|" + fieldName)), 0.00);
fieldValue = String.valueOf(temp);
data.put(fieldName,fieldValue);
} else if ("restdaylaborHours".equals(fieldName)) {//考勤二开--休息日劳务工时
double temp = Util.getDoubleValue(Util.null2String(flowData.get("LaborHoursData|" + id + "|" + fieldName)), 0.00);
fieldValue = String.valueOf(temp);
data.put(fieldName,fieldValue);
} else if ("laborHoursTotal".equals(fieldName) ) {//考勤二开--劳务工时总计
double holidayValue = Util.getDoubleValue(Util.null2String(flowData.get("LaborHoursData|" + id + "|holidaylaborHours")), 0.00);
double workdayValue = Util.getDoubleValue(Util.null2String(flowData.get("LaborHoursData|" + id + "|workdaylaborHours")), 0.00);
double restdayValue = Util.getDoubleValue(Util.null2String(flowData.get("LaborHoursData|" + id + "|restdaylaborHours")), 0.00);
double total = holidayValue + workdayValue + restdayValue;
fieldValue = String.valueOf(total);
data.put(fieldName,fieldValue);
} else {
fieldValue = Util.null2String(rs.getString(fieldName));
@ -744,8 +473,8 @@ public class GetKQReportCmd extends AbstractCommonCommand<Map<String, Object>> {
data.put(fieldName,fieldValue);
}
bb.writeLog("--end data: " +data);
writeLog("howeccccccccccccggggggg13"+ System.currentTimeMillis());
//请假
List<Map<String, Object>> allLeaveRules = kqLeaveRulesBiz.getAllLeaveRules();
Map<String, Object> leaveRule = null;
@ -774,7 +503,7 @@ public class GetKQReportCmd extends AbstractCommonCommand<Map<String, Object>> {
}catch (Exception e){
writeLog("GetKQReportCmd:leaveData"+leaveData+":leavebackData:"+leavebackData+":"+e);
}
writeLog("howeccccccccccccggggggg14"+ System.currentTimeMillis());
//考虑下冻结的数据
if(b_flowLeaveData.length() > 0){
flowLeaveData = KQDurationCalculatorUtil.getDurationRound(b_flowLeaveData);
@ -784,29 +513,28 @@ public class GetKQReportCmd extends AbstractCommonCommand<Map<String, Object>> {
/*考勤二开--转事假start*/
if ( flowType.equals( ("leaveType_" + calLeaveId) ) ) {
bb.writeLog("flowLeaveData: " + flowLeaveData);
double temp = Util.getDoubleValue(Util.null2String(flowData.get("-ToComLeaveData|" + id)));
bb.writeLog("temp: " + temp);
if (temp >= 0.00) {
temp = Double.parseDouble(KQDurationCalculatorUtil.getDurationRound(String.valueOf(temp / 60.0)));
double doubleValue = Util.getDoubleValue(Util.null2String(flowLeaveData));
flowLeaveData = String.valueOf(doubleValue > 0.00? doubleValue : 0.00 + temp);
}
bb.writeLog("flowLeaveData: " + flowLeaveData);
}
/*考勤二开--转事假end*/
/*考勤二开--异常考勤转事假start*/
if ( flowType.equals( ("leaveType_" + calLeaveId) ) ) {
bb.writeLog("-flowLeaveData: " + flowLeaveData);
double temp = Util.getDoubleValue(Util.null2String(flowData.get("-AbnAttToComLeaveData|" + id )));
bb.writeLog("-temp: " + temp);
if (temp >= 0.00) {
temp = Double.parseDouble(KQDurationCalculatorUtil.getDurationRound(String.valueOf(temp / 60.0)));
double doubleValue = Util.getDoubleValue(Util.null2String(flowLeaveData));
flowLeaveData = String.valueOf(doubleValue > 0.00? doubleValue : 0.00 + temp);
}
bb.writeLog("-flowLeaveData: " + flowLeaveData);
}
/*考勤二开--异常考勤转事假end*/
@ -884,6 +612,7 @@ public class GetKQReportCmd extends AbstractCommonCommand<Map<String, Object>> {
}
datas.add(data);
}
bb.writeLog("--datas: " +datas);
List<Object> lsHolidays = KQHolidaySetBiz.getHolidaySetListByScope(""+user.getUID(),fromDate,toDate);
retmap.put("holidays", lsHolidays);
@ -902,95 +631,6 @@ public class GetKQReportCmd extends AbstractCommonCommand<Map<String, Object>> {
return retmap;
}
/*获取人员多级部门*/
private String getMultiLevelDepartmentById(String id){
RecordSet rs = new RecordSet();
String str = "总部";
String field31 = "";
String field32 = "";
String field33 = "";
String field34 = "";
String sql = "select field31,field32,field33,field34 from cus_fielddata where" +
" id = ? and scope='HrmCustomFieldByInfoType' and scopeid= -1";
rs.executeQuery(sql,id);
if(rs.next()){
field31 = Util.null2String(rs.getString("field31"));
field32 = Util.null2String(rs.getString("field32"));
field33 = Util.null2String(rs.getString("field33"));
field34 = Util.null2String(rs.getString("field34"));
}
if(!"".equals(field31)){
str = str+"/"+field31;
}else if(!"".equals(field32)){
str = str+"/"+field32;
}else if(!"".equals(field33)){
str = str+"/"+field33;
}else if(!"".equals(field34)){
str = str+"/"+field34;
}
return str;
}
/*获取人员加班类别*/
private String getOvertimeTypeById(String id){
RecordSet rs = new RecordSet();
String field28 = "";
String sql = "select field28 from cus_fielddata where" +
" id = ? and scope='HrmCustomFieldByInfoType' and scopeid= 3";
rs.executeQuery(sql,id);
if(rs.next()){
field28 = Util.null2String(rs.getString("field28"));
}
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();
Map<String,String> map = new HashMap<>();
String companystartdate = "";//入职时间
String created = "";//创建日期
String field30 = "";//离职时间
String sql = "select 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 and a.id = ? ";
rs.executeQuery(sql,id);
if(rs.next()){
companystartdate = Util.null2String(rs.getString("companystartdate"));
created = Util.null2String(rs.getString("created"));
field30 = Util.null2String(rs.getString("field30"));
}
companystartdate = "".equals(companystartdate)?created:companystartdate;
map.put("companystartdate",companystartdate);
map.put("resignDate",field30);
return map;
}
private Map<String,Object> getChildColumnsInfo(String parentid, User user){
Map<String,Object> returnMap = new HashMap<>();
List<Object> lsChildColumns = new ArrayList<>();
@ -1036,8 +676,7 @@ public class GetKQReportCmd extends AbstractCommonCommand<Map<String, Object>> {
lsChildColumns.add(column);
}
}else if(parentid.equals("overtime")){
// String[] overtimeChild = {"overtime_nonleave","overtime_4leave","overtimeTotal"};
String[] overtimeChild = {"overtime_4leave","overtimeTotal"};
String[] overtimeChild = {"overtime_nonleave","overtime_4leave","overtimeTotal"};
for(int i=0;i<overtimeChild.length;i++){
String id = overtimeChild[i];
column = new HashMap();
@ -1132,288 +771,6 @@ public class GetKQReportCmd extends AbstractCommonCommand<Map<String, Object>> {
return lsChildColumns;
}
/**
*
* @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 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;
}
/**
*
* @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;
}
/**
*
* @return
*/
public Map<String, Object> getAllTiaoxius(String resourceid ,String fromdate, String todate) {
Map<String, Object> result = new HashMap<String, Object>();
String acqSql = "SELECT " +
" a.resourceid, " +
" GREATEST( SUM(COALESCE(extraamount, 0)) + SUM(COALESCE(tiaoxiuamount, 0)) - SUM(COALESCE(usedamount, 0)), 0.00000) AS difference_amounts, " +
" COALESCE(datetype, b.changetype) AS grouping_date, " +
" CASE " +
" WHEN datetype IS NOT NULL THEN datetype " +
" ELSE b.changetype " +
" END AS displayed_date " +
"FROM " +
" kq_balanceofleave a " +
"LEFT JOIN " +
" kq_flow_overtime b ON b.tiaoxiuid = a.id " +
"WHERE " +
" a.leaverulesid = 5 " +
" AND a.effectiveDate >= '"+fromdate+"' " +
" AND a.effectiveDate <= '"+todate+"' " +
" AND a.expirationDate >= '"+todate+"' " +
" AND a.resourceid = "+resourceid+" " +
"GROUP BY " +
" a.resourceid, " +
" COALESCE(datetype, b.changetype) " +
"ORDER BY " +
" grouping_date;";
RecordSet rs = new RecordSet();
rs.executeQuery(acqSql);
while (rs.next()){
String differenceAmounts = Util.null2String(rs.getString("difference_amounts"));
String displayedDate = Util.null2String(rs.getString("displayed_date"));
if (StringUtils.isNotBlank(differenceAmounts) && StringUtils.isNotBlank(displayedDate)) {
result.put(displayedDate, differenceAmounts);
}
}
return result;
}
/**
*
* @return
*/
public Map<String, Object> getLastAllTiaoxius(String resourceid ,String fromdate, String todate) {
Map<String, Object> result = new HashMap<String, Object>();
Map<String, Object> lastMonthFirstAndLastDay = getLastMonthFirstAndLastDay(fromdate);
bb.writeLog("lastMonthFirstAndLastDay: " + lastMonthFirstAndLastDay);
if (lastMonthFirstAndLastDay != null && lastMonthFirstAndLastDay.size() > 0) {
String firstDay = Util.null2String(lastMonthFirstAndLastDay.get("firstDay"));
String lastDay = Util.null2String(lastMonthFirstAndLastDay.get("lastDay"));
if (StringUtils.isNotBlank(firstDay)) {
fromdate = firstDay;
}
if (StringUtils.isNotBlank(lastDay)) {
todate = lastDay;
}
}
String acqSql = "SELECT " +
" a.resourceid, " +
" SUM(tiaoxiuamount) AS tiaoxiuamounts, " +
" SUM(usedamount) AS usedamounts, " +
" GREATEST( SUM(COALESCE(extraamount, 0)) + SUM(COALESCE(tiaoxiuamount, 0)) - SUM(COALESCE(usedamount, 0)), 0.00000) AS difference_amounts, " +
" COALESCE(datetype, b.changetype) AS grouping_date, " +
" CASE " +
" WHEN datetype IS NOT NULL THEN datetype " +
" ELSE b.changetype " +
" END AS displayed_date " +
"FROM " +
" kq_balanceofleave a " +
"LEFT JOIN " +
" kq_flow_overtime b ON b.tiaoxiuid = a.id " +
"WHERE " +
" a.leaverulesid = 5 " +
" AND a.effectiveDate >= '"+fromdate+"' " +
" AND a.effectiveDate <= '"+todate+"' " +
" AND a.expirationDate >= '"+todate+"' " +
" AND a.resourceid = "+resourceid+" " +
"GROUP BY " +
" a.resourceid, " +
" COALESCE(datetype, b.changetype) " +
"ORDER BY " +
" grouping_date;";
bb.writeLog("acqSql: " + acqSql);
RecordSet rs = new RecordSet();
rs.executeQuery(acqSql);
while (rs.next()){
String differenceAmounts = Util.null2String(rs.getString("difference_amounts"));
String displayedDate = Util.null2String(rs.getString("displayed_date"));
if (StringUtils.isNotBlank(differenceAmounts) && StringUtils.isNotBlank(displayedDate)) {
result.put(displayedDate, differenceAmounts);
}
}
bb.writeLog("result: " + result);
return result;
}
public Map<String,Object> getLastMonthFirstAndLastDay(String dateString) {
Map<String,Object> result = new HashMap<String,Object>();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
// 解析给定的日期字符串
LocalDate date = LocalDate.parse(dateString, formatter);
// 获取上个月的第一天
LocalDate firstDayOfLastMonth = date.with(TemporalAdjusters.firstDayOfMonth()).minusMonths(1);
// 获取上个月的最后一天
LocalDate lastDayOfLastMonth = date.with(TemporalAdjusters.lastDayOfMonth()).minusMonths(1);
// 格式化日期为字符串并返回
result.put("firstDay", firstDayOfLastMonth.format(formatter));
result.put("lastDay", lastDayOfLastMonth.format(formatter));
return result;
}
@Override
public BizLogContext getLogContext() {
return null;

@ -19,7 +19,7 @@ public interface KqWorkflowService {
Map<String, Object> importOverTime(Map<String, Object> params);
/**
*
*
*/
Map<String, Object> getEntryType(Map<String, Object> params);

@ -1,6 +1,5 @@
package com.engine.sskj.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.engine.core.impl.Service;
import com.engine.kq.biz.KQTimesArrayComInfo;
import com.engine.kq.util.KQDurationCalculatorUtil;
@ -11,8 +10,6 @@ import weaver.conn.RecordSet;
import weaver.general.BaseBean;
import weaver.general.Util;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.*;
public class KqWorkflowServiceImpl extends Service implements KqWorkflowService {
@ -76,46 +73,6 @@ public class KqWorkflowServiceImpl extends Service implements KqWorkflowService
String[] overTimeInfos = overTimeInfo.split("\\|");
/*同条流程间校验*/
if (overTimeInfos.length > 1) {
// String minDate = "";
// String maxDate = "";
// for (String oti : overTimeInfos) {
//
// String resourceId = "";
// String fromDate = "";
// String fromTime = "";
// String toDate = "";
// String toTime = "";
//
// String[] otiArray = oti.split("_");
// for (String ot : otiArray) {
// String[] split = ot.split("=");
// if ("fromDate".equals(split[0])) {
// fromDate = split[1];
// if ( minDate.compareTo(fromDate) > 0 ) {
// minDate = fromDate;
// }
// }
//
// if ("toDate".equals(split[0])) {
// toDate = split[1];
// if ( maxDate.compareTo(toDate) > 0 ) {
// maxDate = toDate;
// }
// }
// }
// }
// List<String> allDays = new ArrayList<>();
// DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
//
// LocalDate start = LocalDate.parse(minDate, formatter);
// LocalDate end = LocalDate.parse(maxDate, formatter);
//
// while (!start.isAfter(end)) {
// allDays.add(start.format(formatter));
// start = start.plusDays(1);
// }
Map<String, int[]> resToOvInMap = new HashMap<>();
for (String oti : overTimeInfos) {
@ -150,8 +107,6 @@ public class KqWorkflowServiceImpl extends Service implements KqWorkflowService
bb.writeLog("containsKey" );
int[] dayMins = resToOvInMap.get(resourceId);
bb.writeLog("dayMins: " + JSONObject.toJSONString(dayMins) );
int fromTimeIdx = kqTimesArrayComInfo.getArrayindexByTimes(fromTime);
bb.writeLog("fromTimeIdx: " + fromTimeIdx );
@ -172,18 +127,10 @@ public class KqWorkflowServiceImpl extends Service implements KqWorkflowService
bb.writeLog("isExist: " + isExist );
if (!isExist) {
bb.writeLog("!isExist to do " );
bb.writeLog("fromTimeIdx: " + fromTimeIdx );
bb.writeLog("toTimeIdx: " + toTimeIdx );
bb.writeLog("dayMins: " + dayMins.length );
Arrays.fill(dayMins, fromTimeIdx, toTimeIdx, 1);//加班时段标识 1
} else {
bb.writeLog("!isExist else " );
String lastname = "";
String acqResLastNameSql = "select lastname from hrmresource where id = ? ";
rs.executeQuery(acqResLastNameSql, resourceId);
while (rs.next()) {
lastname = Util.null2String(rs.getString("lastname"));
@ -197,12 +144,6 @@ public class KqWorkflowServiceImpl extends Service implements KqWorkflowService
resToOvInMap.put(resourceId, dayMins);
} else {
bb.writeLog("containsKey else" );
// int[] dayMins =new int[2880];
// if (allDays != null && allDays.size() > 0) {
// dayMins = new int[1440 * (allDays.size())];
// }
int[] dayMins = new int[2880];//一天所有分钟数
bb.writeLog("fromTime: " + fromTime );
@ -216,20 +157,17 @@ public class KqWorkflowServiceImpl extends Service implements KqWorkflowService
if (fromDate.compareTo(toDate) < 0 ) {
toTimeIdx = toTimeIdx + 1440;
}
bb.writeLog("toTimeIdx: " + toTimeIdx );
bb.writeLog("dayMins: " + JSONObject.toJSONString(dayMins) );
Arrays.fill(dayMins, fromTimeIdx, toTimeIdx, 1);//加班时段标识 1
resToOvInMap.put(resourceId + "_" + fromDate, dayMins);
resToOvInMap.put(resourceId, dayMins);
}
}
}
/*与历史数据校验*/
bb.writeLog("历史数据校验 " );
for (String oti : overTimeInfos) {
String[] otiArray = oti.split("_");
bb.writeLog("otiArray: " + otiArray.toString() );
String resourceId = "";
String fromDate = "";
@ -261,7 +199,6 @@ public class KqWorkflowServiceImpl extends Service implements KqWorkflowService
//设置一个时间轴数组,长度为一天的分钟数
int[] dayMins = new int[2880];//一天所有分钟数
Arrays.fill(dayMins, 0);
bb.writeLog("dayMins: " + JSONObject.toJSONString(dayMins));
String acqConOverTimeSql = "select fromDate, fromTime, toDate, toTime from uf_conOvertime where resourceId = ? and fromDate = ? and toDate = ?";
rs.executeQuery(acqConOverTimeSql, resourceId, fromDate, toDate);
while (rs.next()) {
@ -275,17 +212,11 @@ public class KqWorkflowServiceImpl extends Service implements KqWorkflowService
if (fDate.compareTo(tDate) < 0) {
tTimeIdx = tTimeIdx +1440;
}
bb.writeLog("fTimeIdx: " + fTimeIdx);
bb.writeLog("tTimeIdx: " + tTimeIdx);
Arrays.fill(dayMins, fTimeIdx, tTimeIdx, 1);//加班时段标识 1
bb.writeLog("dayMins: " + JSONObject.toJSONString(dayMins));
}
int fromTimeIdx = kqTimesArrayComInfo.getArrayindexByTimes(fromTime);
int toTimeIdx = kqTimesArrayComInfo.getArrayindexByTimes(toTime);
bb.writeLog("fromTimeIdx: " + fromTimeIdx);
bb.writeLog("toTimeIdx: " + toTimeIdx);
//确认fromTimeIdx-toTimeIdx在时间轴上是否有1
boolean isExist = false;
for (int i = fromTimeIdx; i <= toTimeIdx; i++) {
@ -376,23 +307,9 @@ public class KqWorkflowServiceImpl extends Service implements KqWorkflowService
String entryTypeField = Util.null2String(bb.getPropValue("project_sskj", "entryTypeField"));
bb.writeLog("entryTypeField: " + entryTypeField);
String entryTypeValue = Util.null2String(bb.getPropValue("project_sskj", "entryTypeValue"));
bb.writeLog("entryTypeValue: " + entryTypeValue);
if (StringUtils.isBlank(entryTypeField)) {
result.put("code",500);
result.put("msg", "请先配置劳务工类型字段");
return result;
}
if (StringUtils.isBlank(entryTypeValue)) {
result.put("code",500);
result.put("msg", "请先配置劳务工类型值");
return result;
}
boolean entryTypeFieldValue = false;
String acqEntryTypeSql = "select " + entryTypeField + " from cus_fielddata where scopeid = -1 and id = ? ";
String entryTypeFieldValue = "";
String acqEntryTypeSql = "select " + entryTypeField + " from cus_fielddata where scopeid = 3 and id = ? ";
bb.writeLog("acqEntryTypeSql: " + acqEntryTypeSql);
RecordSet rs = new RecordSet();
rs.executeQuery(acqEntryTypeSql, resourceId);
@ -400,8 +317,8 @@ public class KqWorkflowServiceImpl extends Service implements KqWorkflowService
String temp = Util.null2String(rs.getString(1));
bb.writeLog("temp: " + temp);
if(temp.equals(entryTypeValue)) {
entryTypeFieldValue = true;
if (StringUtils.isNotBlank(temp)) {
entryTypeFieldValue = temp;
}
}

@ -61,9 +61,7 @@ public class SskjUtil {
long NTime =df.parse(newTime).getTime();
//从对象中拿到时间
long OTime = df.parse(oldTime).getTime();
//分钟数30向下取整
long temp = (NTime-OTime) /1000 /60;
diff = (Integer.parseInt(String.valueOf(temp)) / 30) * 30;
diff=(NTime-OTime)/1000/60;
}catch (Exception e) {
basebean.writeLog("SskjUtil getTime Exception: " + e);
}

@ -108,9 +108,6 @@ public class OverTimeAction implements Action {
//判断当天加班是否需要转调休
int paidLeaveEnable = overtimeRulesDetail.getPaidLeaveEnable();
bb.writeLog("paidLeaveEnable:" + paidLeaveEnable);
String syncConOverTimeSql = "insert into uf_conOvertime (requestId,resourceId, fromDate, fromTime, toDate, toTime, formmodeid, modedatacreater, modedatacreatertype, modedatacreatedate, modedatacreatetime, MODEUUID)" +
" values (?,?,?,?,?,?,?,?,?,?,?,?)";
String conOvertimeModeId = bb.getPropValue("project_sskj", "conOvertimeModeId");
if (paidLeaveEnable == 0 ) {//不转调休
//直接生成加班数据
int computingMode = overtimeRulesDetail.getComputingMode();
@ -125,14 +122,19 @@ public class OverTimeAction implements Action {
boolean b = genOvertimeData(requestId, Util.null2String(resourceId), fromDate, toDate, belongTo, fromTime, toTime, String.valueOf(durationOfOvertime),
String.valueOf(changeType), "1", String.valueOf(paidLeaveEnable), String.valueOf(computingMode), null);
if (b) {
//将加班数据记录到连班加班建模表中
String syncConOverTimeSql = "insert into uf_conOvertime (resourceId, fromDate, fromTime, toDate, toTime, formmodeid, modedatacreater, modedatacreatertype, modedatacreatedate, modedatacreatetime, MODEUUID)" +
" values (?,?,?,?,?,?,?,?,?,?,?)";
String conOvertimeModeId = bb.getPropValue("project_sskj", "conOvertimeModeId");
Integer modedatacreater = 1;
Integer modedatacreatertype = 0;
String modedatacreatedate = DateUtil.format(new Date(), "yyyy-MM-dd");
String modedatacreatetime = DateUtil.format(new Date(), "HH:mm:ss");
String uuid = UUID.randomUUID().toString();
bb.writeLog("syncConOverTimeSql" + syncConOverTimeSql);
boolean addFlag = rs.executeUpdate(syncConOverTimeSql, requestId,resourceId, fromDate, fromTime, toDate, toTime, conOvertimeModeId, modedatacreater, modedatacreatertype, modedatacreatedate,
boolean addFlag = rs.executeUpdate(syncConOverTimeSql, resourceId, fromDate, fromTime, toDate, toTime, conOvertimeModeId, modedatacreater, modedatacreatertype, modedatacreatedate,
modedatacreatetime, uuid);
bb.writeLog("addFlag" + addFlag);
if (addFlag) {
@ -183,13 +185,17 @@ public class OverTimeAction implements Action {
String.valueOf(changeType), "1", String.valueOf(paidLeaveEnable), String.valueOf(computingMode), tiaoxiuId);
if (b) {
//将加班数据记录到连班加班建模表中
String syncConOverTimeSql = "insert into uf_conOvertime (resourceId, fromDate, fromTime, toDate, toTime, formmodeid, modedatacreater, modedatacreatertype, modedatacreatedate, modedatacreatetime, MODEUUID)" +
" values (?,?,?,?,?,?,?,?,?,?,?)";
String conOvertimeModeId = bb.getPropValue("project_sskj", "conOvertimeModeId");
Integer modedatacreater = 1;
Integer modedatacreatertype = 0;
String modedatacreatedate = DateUtil.format(new Date(), "yyyy-MM-dd");
String modedatacreatetime = DateUtil.format(new Date(), "HH:mm:ss");
String uuid = UUID.randomUUID().toString();
bb.writeLog("syncConOverTimeSql" + syncConOverTimeSql);
boolean addFlag = rs.executeUpdate(syncConOverTimeSql,requestId, resourceId, fromDate, fromTime, toDate, toTime, conOvertimeModeId, modedatacreater, modedatacreatertype, modedatacreatedate,
boolean addFlag = rs.executeUpdate(syncConOverTimeSql, resourceId, fromDate, fromTime, toDate, toTime, conOvertimeModeId, modedatacreater, modedatacreatertype, modedatacreatedate,
modedatacreatetime, uuid);
bb.writeLog("addFlag" + addFlag);
if (addFlag) {
@ -218,6 +224,8 @@ public class OverTimeAction implements Action {
}
}
}catch(Exception e) {
bb.writeLog("OverTimeAction Exception: " + e);
return Action.FAILURE_AND_CONTINUE;

@ -70,12 +70,6 @@ public class OverTimeBatchAction implements Action {
bb.writeLog("detailInfos: " + detailInfos);
String sql = "select tiaoxiuid from kq_flow_overtime where requetsid = ?";
rs.executeQuery(sql);
int flag = 0;
//1
for ( Map<String, Object> di: detailInfos) {
Integer res = Util.getIntValue( Util.null2String( di.get("resourceId")));
String fromDate = Util.null2String( di.get("fromDate"));
@ -165,8 +159,8 @@ public class OverTimeBatchAction implements Action {
if (b) {
//将加班数据记录到连班加班建模表中
String syncConOverTimeSql = "insert into uf_conOvertime (requestId,resourceId, fromDate, fromTime, toDate, toTime, formmodeid, modedatacreater, modedatacreatertype, modedatacreatedate, modedatacreatetime, MODEUUID)" +
" values (?,?,?,?,?,?,?,?,?,?,?,?)";
String syncConOverTimeSql = "insert into uf_conOvertime (resourceId, fromDate, fromTime, toDate, toTime, formmodeid, modedatacreater, modedatacreatertype, modedatacreatedate, modedatacreatetime, MODEUUID)" +
" values (?,?,?,?,?,?,?,?,?,?,?)";
String conOvertimeModeId = bb.getPropValue("project_sskj", "conOvertimeModeId");
Integer modedatacreater = 1;
Integer modedatacreatertype = 0;
@ -175,7 +169,7 @@ public class OverTimeBatchAction implements Action {
String uuid = UUID.randomUUID().toString();
bb.writeLog("syncConOverTimeSql" + syncConOverTimeSql);
boolean addFlag = rs.executeUpdate(syncConOverTimeSql,requestId, resourceId, fromDate, fromTime, toDate, toTime, conOvertimeModeId, modedatacreater, modedatacreatertype, modedatacreatedate,
boolean addFlag = rs.executeUpdate(syncConOverTimeSql, resourceId, fromDate, fromTime, toDate, toTime, conOvertimeModeId, modedatacreater, modedatacreatertype, modedatacreatedate,
modedatacreatetime, uuid);
bb.writeLog("addFlag" + addFlag);
if (addFlag) {
@ -227,8 +221,8 @@ public class OverTimeBatchAction implements Action {
if (b) {
//将加班数据记录到连班加班建模表中
String syncConOverTimeSql = "insert into uf_conOvertime (requestId,resourceId, fromDate, fromTime, toDate, toTime, formmodeid, modedatacreater, modedatacreatertype, modedatacreatedate, modedatacreatetime, MODEUUID)" +
" values (?,?,?,?,?,?,?,?,?,?,?,?)";
String syncConOverTimeSql = "insert into uf_conOvertime (resourceId, fromDate, fromTime, toDate, toTime, formmodeid, modedatacreater, modedatacreatertype, modedatacreatedate, modedatacreatetime, MODEUUID)" +
" values (?,?,?,?,?,?,?,?,?,?,?)";
String conOvertimeModeId = bb.getPropValue("project_sskj", "conOvertimeModeId");
Integer modedatacreater = 1;
Integer modedatacreatertype = 0;
@ -237,7 +231,7 @@ public class OverTimeBatchAction implements Action {
String uuid = UUID.randomUUID().toString();
bb.writeLog("syncConOverTimeSql" + syncConOverTimeSql);
boolean addFlag = rs.executeUpdate(syncConOverTimeSql,requestId, resourceId, fromDate, fromTime, toDate, toTime, conOvertimeModeId, modedatacreater, modedatacreatertype, modedatacreatedate,
boolean addFlag = rs.executeUpdate(syncConOverTimeSql, resourceId, fromDate, fromTime, toDate, toTime, conOvertimeModeId, modedatacreater, modedatacreatertype, modedatacreatedate,
modedatacreatetime, uuid);
bb.writeLog("addFlag" + addFlag);
if (addFlag) {

@ -1,51 +0,0 @@
package weaver.interfaces.sskj.job;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.engine.kq.biz.KQFormatBiz;
import com.engine.kq.timer.KQQueue;
import com.engine.kq.timer.KQTaskBean;
import com.engine.kq.wfset.util.SplitActionUtil;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.jayway.jsonpath.Configuration;
import com.jayway.jsonpath.JsonPath;
import org.apache.commons.lang3.StringUtils;
import weaver.conn.RecordSet;
import weaver.general.BaseBean;
import weaver.general.Util;
import weaver.interfaces.schedule.BaseCronJob;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.time.Duration;
import java.time.Instant;
import java.util.*;
import static weaver.interfaces.sskj.util.HttpsUtil.doPostJsonRequest;
/**
* 线
*/
public class RemoveFormatPoolJob extends BaseCronJob {
@Override
public void execute() {
new BaseBean();
BaseBean bb = new BaseBean();
bb.writeLog("RemoveFormatPoolJob Start");
try {
String removeSql = "delete from kq_format_pool where status = 1";
RecordSet rs = new RecordSet();
boolean removeFlag = rs.executeUpdate(removeSql);
bb.writeLog("清除考勤格式化线程表结果: " + removeFlag);
}catch (Exception e) {
bb.writeLog("RemoveFormatPoolJob Exception: " + e);
}
}
}

@ -1,273 +0,0 @@
package weaver.interfaces.sskj.job;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.engine.kq.biz.KQFormatBiz;
import com.engine.kq.timer.KQQueue;
import com.engine.kq.timer.KQTaskBean;
import com.engine.kq.wfset.util.SplitActionUtil;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.jayway.jsonpath.Configuration;
import com.jayway.jsonpath.JsonPath;
import org.apache.commons.lang3.StringUtils;
import weaver.conn.RecordSet;
import weaver.general.BaseBean;
import weaver.general.Util;
import weaver.interfaces.schedule.BaseCronJob;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.time.Duration;
import java.time.Instant;
import java.util.*;
import static weaver.interfaces.sskj.util.HttpsUtil.doPostJsonRequest;
/**
* Created with IntelliJ IDEA.
* OA
* @Auther: chenwnj
* @Date: 2023/02/27/14:03
* @Description:
*/
public class SyncZkAllDayKqDataJob extends BaseCronJob {
@Override
public void execute() {
new BaseBean();
BaseBean bb = new BaseBean();
bb.writeLog("获取中控的考勤数据同步至OA");
Instant startDoTime = Instant.now();
try {
//获取所有在职人员的id和workcode
Map<String, String> idWorkcodeMap = new HashMap<>();
RecordSet rs = new RecordSet();
String acqResSql = "SELECT id,workcode FROM HRMRESOURCE WHERE status in (0,1,2,3)";
rs.executeQuery(acqResSql);
while (rs.next()){
String userId = Util.null2String(rs.getString("id"));
String workcode = Util.null2String(rs.getString("workcode"));
if ( StringUtils.isNotBlank(userId) && StringUtils.isNotBlank(workcode)) {
idWorkcodeMap.put(workcode,userId);
}
}
//获取开始时间结束时间
String startTime = "";
String endTime = "";
bb.writeLog("startTime = " + startTime);
bb.writeLog("endTime = " + endTime);
if (StringUtils.isBlank(startTime) && StringUtils.isBlank(endTime)) {
String format = DateUtil.format(new Date(), "yyyy-MM-dd");
DateTime yesterday = DateUtil.yesterday();
String format1 = DateUtil.format(yesterday, "yyyy-MM-dd");
startTime = format1 + " " + "00:00:00";
endTime = format + " " + "00:00:00";
}
bb.writeLog("startTime:"+startTime);
bb.writeLog("endTime:"+endTime);
String url = bb.getPropValue("project_sskj", "zkKqUrl");
//获取日志表建模模块ID
String kqSyncLogModeId = bb.getPropValue("project_sskj","kqSyncLogModeId");
bb.writeLog("url:"+url);
Map<String, String> heads = new HashMap<String, String>();
Map<String,Object> dataMap = new HashMap<String,Object>();
dataMap.put("starttime",startTime);
dataMap.put("endtime",endTime);
bb.writeLog("获取中控的考勤数据入参dataMap:"+JSONObject.toJSONString(dataMap));
String back = doPostJsonRequest(url,heads, JSON.toJSONString(dataMap));
bb.writeLog("urlBack:"+back);
bb.writeLog("获取中控的考勤数据--response:"+back);
List<List> logParams = new ArrayList<>();
List<List> lsParams = new ArrayList<>();
List<String> lsFormatData = new ArrayList<>();
Object tempBack = Configuration.defaultConfiguration().jsonProvider().parse(back);
Integer ret = JsonPath.read(tempBack, "$.ret");
if ( ret == 0) {
Integer count = Util.getIntValue(Util.null2String(JsonPath.read(tempBack, "$.data.count").toString()));
if ( count > 0 ) {
List<Map<String, Object>> items = JsonPath.read(tempBack, "$.data.items[*]");
for (Map<String, Object> item : items) {
String pin = Util.null2String(item.get("pin"));
String checktime = Util.null2String(item.get("checktime"));
String alias = Util.null2String(item.get("alias"));
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = df.parse(checktime);
DateFormat df2 = new SimpleDateFormat("yyyy-MM-dd");
DateFormat df3 = new SimpleDateFormat("HH:mm:ss");
Integer isimport = 1;
String userid = Util.null2String(idWorkcodeMap.get(pin));
Integer usertype = 1;
String signDate = df2.format(date);
String signTime = df3.format(date);
Integer isincom = 1;
String signfrom = "OutDataSourceSyn";
if (StringUtils.isBlank(alias)) {
bb.writeLog("--item:"+item);
}
String addr = alias;
List params = new ArrayList<>();
if (StringUtils.isBlank(userid)) {
continue;
}
params.add(userid);
params.add(usertype);
params.add(signDate);
params.add(signTime);
params.add("");
params.add(isincom);
params.add(isimport);
params.add(signfrom);
params.add("");
params.add("");
params.add(addr);
params.add("中控考勤机");
lsParams.add(params);
String formatData = userid + "|" + signDate + "|" + signTime;
if (!lsFormatData.contains(formatData)) {
lsFormatData.add(formatData);
}
//日志表
List<String> logPa = new ArrayList<>();
logPa.add(signDate);
logPa.add(userid);
logPa.add(signDate);
logPa.add(signTime);
logPa.add(addr);
logPa.add(kqSyncLogModeId);
logPa.add("1");
logPa.add("0");
logPa.add(signDate);
logPa.add(endTime.substring(10,16));
logParams.add(logPa);
}
}
}
bb.writeLog("lsParams:"+JSON.toJSONString(lsParams));
bb.writeLog("lsFormatData:"+JSON.toJSONString(lsFormatData));
Map<String,List<String>> overtimeMap = Maps.newHashMap();
List<String> overtimeList = Lists.newArrayList();
List<Object> formatParams = null;
List<List<Object>> lsFormatParams = new ArrayList<>();
List delParams = null;
List<List> lsDelParams = new ArrayList<>();
bb.writeLog("准备刷新报表数据");
//刷新报表数据
for(int i=0;lsFormatData!=null&&i<lsFormatData.size();i++){
formatParams = new ArrayList<>();
String[] formatData = Util.splitString(lsFormatData.get(i),"|");
String date_1 = weaver.common.DateUtil.addDate(formatData[1], -1);
formatParams.add(formatData[0]);
formatParams.add(date_1);
lsFormatParams.add(formatParams);
formatParams = new ArrayList<>();
formatParams.add(formatData[0]);
formatParams.add(formatData[1]);
lsFormatParams.add(formatParams);
delParams = new ArrayList<>();
delParams.add(formatData[0]);
delParams.add(formatData[1]);
delParams.add(formatData[2]);
lsDelParams.add(delParams);
String resourceId = formatData[0];
String kqdate = formatData[1];
if(overtimeMap.containsKey(resourceId)){
List<String> tmp_overtimeList = overtimeMap.get(resourceId);
if(!tmp_overtimeList.contains(kqdate)){
tmp_overtimeList.add(kqdate);
}
}else{
if(!overtimeList.contains(kqdate)){
overtimeList.add(kqdate);
}
overtimeMap.put(resourceId, overtimeList);
}
}
String sql = "";
RecordSet rsB = new RecordSet();
bb.writeLog("开始同步数据");
//记录日志
//获取插入前最大的ID
Integer maxId = -1;
String acqMaxId = "select MAX(id) as id from uf_kqsynclog order by id desc";
rsB.executeQuery(acqMaxId);
while (rsB.next()) {
maxId = Util.getIntValue(Util.null2String(rsB.getString("id")));
}
String addLogSql = "insert into uf_kqsynclog (syncdate, resourceid, kqdate, kqtime, kqalias, " +
" formmodeid, modedatacreater, modedatacreatertype, modedatacreatedate, modedatacreatetime) " +
" values (?,?,?,?,?,?,?,?,?,?)";
boolean bLog = rsB.executeBatchSql(addLogSql, logParams);
bb.writeLog("bLog: " + bLog);
// if (bLog) {
// List<Integer> billids = new ArrayList<>();
// Map<Integer,Integer> billid_creator = new HashMap<>();
// String acqBillidsSql = "select id from uf_kqsynclog where id > ?";
// rsB.executeQuery(acqBillidsSql, maxId);
// while (rsB.next()) {
// Integer id = Util.getIntValue(Util.null2String(rsB.getString("id")));
// billids.add(id);
// billid_creator.put(id, 1);
// }
// if (billids != null && billids.size() > 0) {
// SskjUtil ssutil = new SskjUtil();
// ssutil.modePerReconBatch(billid_creator, kqSyncLogModeId, billids);
// }
// }
//删除本次同步数据
bb.writeLog("lsDelParams: " + lsDelParams);
sql = " delete from hrmschedulesign where signfrom='OutDataSourceSyn' and userid =? and signdate = ? and signtime = ? ";
boolean b1 = rsB.executeBatchSql(sql, lsDelParams);
bb.writeLog("b1: " + b1);
sql = " insert into HrmScheduleSign (userid, usertype, signdate, signtime, clientaddress, isincom, isimport, signfrom, longitude, latitude, addr,memo) "
+ " values(?,?,?,?,?,?,?,?,?,?,?,?)";
boolean b2 = rsB.executeBatchSql(sql, lsParams);
bb.writeLog("b2: " + b2);
bb.writeLog("lsFormatParams:"+JSON.toJSONString(lsFormatParams));
bb.writeLog("lsFormatParams.size:"+lsFormatParams.size());
new KQFormatBiz().format(lsFormatParams);
bb.writeLog("开始处理加班生成");
//处理加班生成
List<KQTaskBean> tasks = new ArrayList<>();
for(Map.Entry<String, List<String>> mme: overtimeMap.entrySet()){
String resid = mme.getKey();
List<String> overList = mme.getValue();
for(String date : overList){
SplitActionUtil.pushOverTimeTasks(date,date,resid,tasks);
}
}
if(!tasks.isEmpty()){
KQQueue.writeTasks(tasks);
}
} catch (Exception e) {
e.printStackTrace();
bb.writeLog(e);
bb.writeLog("获取中控的考勤数据同步至OA--error"+e.getMessage());
}finally {
Instant endDoTime = Instant.now();
Duration timeElapsed = Duration.between(startDoTime, endDoTime);
bb.writeLog("中控考勤数据同步代码执行时间: " + timeElapsed.toMillis() + " 毫秒");
}
}
}
Loading…
Cancel
Save