欧姆龙考勤后续优化

dev-chenwnj
chenwei 2 years ago
parent ba015b7012
commit 9a2a5b5e51

@ -15,6 +15,7 @@ import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import weaver.common.DateUtil;
import weaver.conn.RecordSet;
import weaver.general.BaseBean;
import weaver.general.Util;
import java.io.PrintWriter;
@ -32,6 +33,8 @@ import java.util.stream.Collectors;
public class KQOverTimeRuleCalBiz {
private KQLog kqLog = new KQLog();
BaseBean basebean = new BaseBean();
/**
*
* @param resourceid
@ -40,13 +43,17 @@ public class KQOverTimeRuleCalBiz {
* @param eventtype
*/
public void buildOvertime(String resourceid, String fromDate, String toDate, String eventtype){
basebean.writeLog("---KQOverTimeRuleCalBiz buildOvertime start to do ");
basebean.writeLog("resourceid: " + resourceid);
basebean.writeLog("fromDate: " + fromDate);
basebean.writeLog("toDate: " + toDate);
basebean.writeLog("eventtype: " + eventtype);
try{
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
KQTimesArrayComInfo kqTimesArrayComInfo = new KQTimesArrayComInfo();
Map<String,Integer> changeTypeMap = Maps.newHashMap();
Map<String, KQOvertimeRulesDetailEntity> overRulesDetailMap = Maps.newHashMap();
Map<String, KQOvertimeRulesDetailEntity> overRulesDetailMap = Maps.newHashMap();
Map<String, List<String[]>> restTimeMap = Maps.newHashMap();
Map<String,Integer> computingModeMap = Maps.newHashMap();
//先获取一些前提数据,加班規則和假期規則
@ -78,6 +85,7 @@ public class KQOverTimeRuleCalBiz {
int changeType = Util.getIntValue("" + changeTypeMap.get(change_key), -1);
String changeType_key = splitDate + "_" + changeType;
int computingMode = Util.getIntValue(""+computingModeMap.get(changeType_key),-1);
basebean.writeLog("computingMode: " + computingMode);
if(computingMode == 2){
// 需审批,以打卡为准,但是不能超过审批时长
doComputingMode2(resourceid,splitDate,dateFormatter,changeTypeMap,overRulesDetailMap,restTimeMap,
@ -536,6 +544,8 @@ public class KQOverTimeRuleCalBiz {
eventMap);
kqEventLogBiz.logDetailEvent(resourceid,eventMap,uuid,"doComputingMode3|对应的打卡数据|key|"+key);
basebean.writeLog("lsCheckInfoMaps: " + lsCheckInfoMaps);
if(lsCheckInfoMaps.isEmpty()){
logOvertimeMap(overtimeLogMap, "没有打卡数据", "打卡和上下班数据|KQOvertimeCardBean");
kqEventLogBiz.logDetailOvertimeMap(resourceid,overtimeLogMap,uuid);
@ -691,14 +701,32 @@ public class KQOverTimeRuleCalBiz {
kqLog.info("doComputingMode3 生成调休失败调休id:"+tiaoxiuId+":resourceid:"+resourceid+":realSplitDate:"+realSplitDate);
}
overtime_uuid = UUID.randomUUID().toString();
basebean.writeLog("needSplitByTime is true");
String flow_overtime_sql = "insert into kq_flow_overtime (requestid,resourceid,fromdate,fromtime,todate,totime,duration_min,expiringdate,belongdate,"
+ "workMins,durationrule,changetype,paidLeaveEnable,computingMode,tiaoxiuId,uuid,fromdatedb,fromtimedb,todatedb,totimedb,flow_mins,ori_belongdate)"+
" values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ";
basebean.writeLog("flow_overtime_sql: " + flow_overtime_sql);
signinTime = kqTimesArrayComInfo.turn48to24Time(signinTime);
basebean.writeLog("signinTime: " + signinTime);
signoutTime = kqTimesArrayComInfo.turn48to24Time(signoutTime);
basebean.writeLog("signoutTime: " + signoutTime);
basebean.writeLog("resourceid: " + resourceid);
basebean.writeLog("signinDate: " + signinDate);
basebean.writeLog("signoutDate: " + signoutDate);
basebean.writeLog("mins: " + mins);
basebean.writeLog("realSplitDate: " + realSplitDate);
basebean.writeLog("unit: " + unit);
basebean.writeLog("changeType: " + changeType);
basebean.writeLog("paidLeaveEnable: " + paidLeaveEnable);
basebean.writeLog("computingMode: " + computingMode);
basebean.writeLog("tiaoxiuId: " + tiaoxiuId);
basebean.writeLog("overtime_uuid: " + overtime_uuid);
basebean.writeLog("splitDate: " + splitDate);
boolean isUp = rs.executeUpdate(flow_overtime_sql, "",resourceid,signinDate,signinTime,signoutDate,signoutTime,mins,"",realSplitDate,
"",unit,changeType,paidLeaveEnable,computingMode,tiaoxiuId,overtime_uuid,"","","","",0,splitDate);
basebean.writeLog("isUp: " + isUp);
String overtimeid = get_overtime_uuid(overtime_uuid);
kqEventLogBiz.updateOvertimeId(uuid, overtimeid);
}
@ -712,15 +740,32 @@ public class KQOverTimeRuleCalBiz {
}else{
kqLog.info("doComputingMode3 生成调休失败调休id:"+tiaoxiuId+":resourceid:"+resourceid+":realSplitDate:"+realSplitDate);
}
basebean.writeLog("needSplitByTime is false");
String flow_overtime_sql = "insert into kq_flow_overtime (requestid,resourceid,fromdate,fromtime,todate,totime,duration_min,expiringdate,belongdate,"
+ "workMins,durationrule,changetype,paidLeaveEnable,computingMode,tiaoxiuId,uuid,fromdatedb,fromtimedb,todatedb,totimedb,flow_mins,ori_belongdate)"+
" values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ";
basebean.writeLog("flow_overtime_sql: " + flow_overtime_sql);
signinTime = kqTimesArrayComInfo.turn48to24Time(signinTime);
basebean.writeLog("signinTime: " + signinTime);
signoutTime = kqTimesArrayComInfo.turn48to24Time(signoutTime);
basebean.writeLog("signoutTime: " + signoutTime);
basebean.writeLog("resourceid: " + resourceid);
basebean.writeLog("signinDate: " + signinDate);
basebean.writeLog("signoutDate: " + signoutDate);
basebean.writeLog("mins: " + mins);
basebean.writeLog("realSplitDate: " + realSplitDate);
basebean.writeLog("unit: " + unit);
basebean.writeLog("changeType: " + changeType);
basebean.writeLog("paidLeaveEnable: " + paidLeaveEnable);
basebean.writeLog("computingMode: " + computingMode);
basebean.writeLog("tiaoxiuId: " + tiaoxiuId);
basebean.writeLog("overtime_uuid: " + overtime_uuid);
basebean.writeLog("splitDate: " + splitDate);
boolean isUp = rs.executeUpdate(flow_overtime_sql, "",resourceid,signinDate,signinTime,signoutDate,signoutTime,mins,"",realSplitDate,
"",unit,changeType,paidLeaveEnable,computingMode,tiaoxiuId,overtime_uuid,"","","","",0,splitDate);
basebean.writeLog("isUp: " + isUp);
String overtimeid = get_overtime_uuid(overtime_uuid);
kqEventLogBiz.updateOvertimeId(uuid, overtimeid);
}
@ -1157,6 +1202,8 @@ public class KQOverTimeRuleCalBiz {
List<Map<String, String>> hasOverTimeList,
Map<String, KQOvertimeRulesDetailEntity> overRulesDetailMap, boolean needHasOverTime,
Map<String, Object> overtimeLogMap) throws Exception{
basebean.writeLog("buildOvertimeCard to do");
Map<String,String> signinoffMap = Maps.newHashMap();
String signinDate = kqOvertimeCardBean.getSigninDate();
@ -1184,6 +1231,47 @@ public class KQOverTimeRuleCalBiz {
return signinoffMap;
}
//考勤二开--综合制加班 start
/*获取考勤组的ID因为考勤组有有效期所以需要传入日期*/
KQGroupMemberComInfo kqGroupMemberComInfo = new KQGroupMemberComInfo();
String groupId = kqGroupMemberComInfo.getKQGroupId(resourceid, splitDate);
basebean.writeLog("groupId: " + groupId);
//考勤二开--综合制加班 start
String synthGroup = basebean.getPropValue("omlKq_main","groupidZh");
basebean.writeLog("synthGroup: " + synthGroup);
if ( synthGroup.equals(groupId)) {
//修改开始时间和结束时间
String changeType = changeType_key.split("_")[1];
basebean.writeLog("changeType: " + changeType);
if (changeType.equals("1")){//节假日类型
//获取班次信息
Map<String, Object> shiftInfo = getShiftInfo(resourceid, splitDate, groupId);
basebean.writeLog("shiftInfo: " + shiftInfo);
String workstarttime = Util.null2String(shiftInfo.get("workstarttime"));
// String tmpstarttime = kqTimesArrayComInfo.turn24to48Time(workstarttime);
if(workstarttime.length() > 0){
workstarttime = workstarttime+ ":00";
}
if ( workstarttime.compareTo(signinTime) >= 0) {
signinTime = workstarttime;
}
String workendacross = Util.null2String(shiftInfo.get("workendacross"));
String workendtime = Util.null2String(shiftInfo.get("workendtime"));
if(workendtime.length() > 0){
workendtime = workendtime+ ":00";
}
String temptime = workendtime;
if (workendacross.equals("1")) {
temptime = kqTimesArrayComInfo.turn24to48Time(workendtime);
}
if ( temptime.compareTo(signoutTime) <= 0) {
signoutTime = temptime;
}
}
}
//end
basebean.writeLog("signinTime: " + signinTime);
basebean.writeLog("signoutTime: " + signoutTime);
int signinTimeIndex = kqTimesArrayComInfo.getArrayindexByTimes(signinTime);
int signoutTimeIndex = kqTimesArrayComInfo.getArrayindexByTimes(signoutTime);
@ -1253,6 +1341,87 @@ public class KQOverTimeRuleCalBiz {
return signinoffMap;
}
/**
*
*
* @param resourceid
* @param kqDate
* @param groupid
* @param rs
* @return
*/
private Map<String, Object> getShiftInfo(String resourceid, String kqDate, String groupid){
Map<String, Object> shiftInfoMap = new HashMap<>();
basebean.writeLog("getShiftInfo start to do : ");
RecordSet rs = new RecordSet();
//获取班次
Integer serialid = -1;
String acqShiftSql = "select serialid from kq_shiftschedule where kqdate = ? and resourceid = ? and groupid = ? and isdelete = ? ";
rs.executeQuery(acqShiftSql, kqDate, resourceid, groupid, 0);
while (rs.next()) {
serialid = Util.getIntValue( Util.null2String( rs.getString("serialid")));
}
//kq_ShiftOnOffWorkSections--班次具体信息
//kq_ShiftRestTimeSections--班次休息信息
if ( serialid > -1) {
/* isresttimeopen --排除休息时间是否开启 1表示开启 */
/* isoffdutyfreecheck --是否开启下班不用打卡 1表示下班不用打卡 */
/* worktime --工作时长,分钟数 */
String acqSerInfoSql = "select isresttimeopen, isoffdutyfreecheck, shiftonoffworkcount, shiftpersonnelruleid, worktime from kq_shiftmanagement where (isdelete = 0 or isdelete is null) and id = ? ";
rs.executeQuery( acqSerInfoSql, serialid);
while ( rs.next()) {
String isresttimeopen = Util.null2String(rs.getString("isresttimeopen"));
String isoffdutyfreecheck = Util.null2String(rs.getString("isoffdutyfreecheck"));
String worktime = Util.null2String(rs.getString("worktime"));
shiftInfoMap.put("serialid", serialid);
shiftInfoMap.put("isresttimeopen", isresttimeopen);
shiftInfoMap.put("isoffdutyfreecheck", isoffdutyfreecheck);
shiftInfoMap.put("worktime", worktime);
}
}
//工作时间处理
String acqWorkTimeSql = "select across, times, onoffworktype from kq_ShiftOnOffWorkSections where serialid = ? and (isdelete = 0 or isdelete is null)";
rs.executeQuery(acqWorkTimeSql, serialid);
while ( rs.next()) {
String across = Util.null2String(rs.getString("across"));
String times = Util.null2String(rs.getString("times"));
String onoffworktype = Util.null2String(rs.getString("onoffworktype"));
if ("start".equals(onoffworktype)) {
shiftInfoMap.put("workstartacross",across);
shiftInfoMap.put("workstarttime",times);
} else if ("end".equals(onoffworktype)) {
shiftInfoMap.put("workendacross",across);
shiftInfoMap.put("workendtime",times);
}
}
//休息时间处理
if ( shiftInfoMap != null && !shiftInfoMap.isEmpty() ) {
Integer isresttimeopen = Util.getIntValue(Util.null2String(shiftInfoMap.get("isresttimeopen")));
if ( isresttimeopen == 1) {//开启排除休息时间
String acqRestTimeSql = "select across, resttype, time from kq_ShiftRestTimeSections where serialid = ? and (isdelete = 0 or isdelete is null) ";
rs.executeQuery(acqRestTimeSql, serialid);
while ( rs.next()) {
String across = Util.null2String(rs.getString("across"));
String resttype = Util.null2String(rs.getString("resttype"));
String time = Util.null2String(rs.getString("time"));
if ("start".equals(resttype)) {
shiftInfoMap.put("reststartacross",across);
shiftInfoMap.put("reststarttime",time);
} else if ("end".equals(resttype)) {
shiftInfoMap.put("restendacross",across);
shiftInfoMap.put("restendtime",time);
}
}
}
}
basebean.writeLog("shiftInfoMap: " + shiftInfoMap);
return shiftInfoMap;
}
/**
*
* @param resourceid

@ -0,0 +1,824 @@
package com.engine.kq.cmd.report;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
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.util.ExcelUtil;
import com.engine.kq.util.KQDurationCalculatorUtil;
import com.engine.kq.util.UtilKQ;
import weaver.common.DateUtil;
import weaver.common.StringUtil;
import weaver.conn.RecordSet;
import weaver.general.TimeUtil;
import weaver.general.Util;
import weaver.hrm.User;
import weaver.hrm.company.DepartmentComInfo;
import weaver.hrm.company.SubCompanyComInfo;
import weaver.hrm.job.JobTitlesComInfo;
import weaver.hrm.resource.ResourceComInfo;
import weaver.systeminfo.SystemEnv;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.util.*;
public class ExportExcelCmd extends AbstractCommonCommand<Map<String, Object>> {
private HttpServletRequest request;
private HttpServletResponse response;
private List<String> lsFieldDataKey;
public ExportExcelCmd(Map<String, Object> params, HttpServletRequest request, HttpServletResponse response, User user) {
this.user = user;
this.params = params;
this.request = request;
this.response = response;
this.lsFieldDataKey = new ArrayList<>();
}
@Override
public Map<String, Object> execute(CommandContext commandContext) {
Map<String, Object> retmap = new HashMap<String, Object>();
RecordSet rs = new RecordSet();
String sql = "";
try {
SubCompanyComInfo subCompanyComInfo = new SubCompanyComInfo();
DepartmentComInfo departmentComInfo = new DepartmentComInfo();
ResourceComInfo resourceComInfo = new ResourceComInfo();
JobTitlesComInfo jobTitlesComInfo = new JobTitlesComInfo();
KQLeaveRulesBiz kqLeaveRulesBiz = new KQLeaveRulesBiz();
KQReportBiz kqReportBiz = new KQReportBiz();
JSONObject jsonObj = JSON.parseObject(Util.null2String(params.get("data")));
String attendanceSerial = Util.null2String(jsonObj.get("attendanceSerial"));
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 status = Util.null2String(jsonObj.get("status"));
String subCompanyId = Util.null2String(jsonObj.get("subCompanyId"));
String departmentId = Util.null2String(jsonObj.get("departmentId"));
String resourceId = Util.null2String(jsonObj.get("resourceId"));
String allLevel = Util.null2String(jsonObj.get("allLevel"));
String isNoAccount = Util.null2String(jsonObj.get("isNoAccount"));
String viewScope = Util.null2String(jsonObj.get("viewScope"));
List<String> showColumns = Util.splitString2List(Util.null2String(jsonObj.get("showColumns")), ",");
showColumns.add("lastname");
showColumns.removeIf(showColumn->showColumn.trim().equals(""));
List<String> tmpShowColumns = new ArrayList<>();
for(String showColumn:showColumns){
tmpShowColumns.add(showColumn);
String cascadekey = "";
if(showColumn.equals("beLate")){
cascadekey = "beLateMins";
}else if(showColumn.equals("leaveEearly")){
cascadekey = "leaveEarlyMins";
}else if(showColumn.equals("graveBeLate")){
cascadekey = "graveBeLateMins";
}else if(showColumn.equals("graveLeaveEarly")){
cascadekey = "graveLeaveEarlyMins";
}else if(showColumn.equals("absenteeism")){
cascadekey = "absenteeismMins";
}else if(showColumn.equals("overtime")){
tmpShowColumns.add("overtime_4leave");
tmpShowColumns.add("overtime_nonleave");
tmpShowColumns.add("workingDayOvertime_nonleave");
tmpShowColumns.add("workingDayOvertime_4leave");
tmpShowColumns.add("restDayOvertime_nonleave");
tmpShowColumns.add("restDayOvertime_4leave");
tmpShowColumns.add("holidayOvertime_4leave");
tmpShowColumns.add("holidayOvertime_nonleave");
}
if(cascadekey.length()>0){
tmpShowColumns.add(cascadekey);
}
}
showColumns = tmpShowColumns;
String rightSql = new KQReportBiz().getReportRight("1", "" + user.getUID(), "a");
LinkedHashMap<String, Object> workbook = new LinkedHashMap<>();
List<Object> lsSheet = new ArrayList<>();
Map<String, Object> sheet = null;
List<Object> titleList = new ArrayList<>();
Map<String, Object> title = null;
List<List<Object>> dataList = new ArrayList<>();
List<Object> data = null;
List<Map<String, Object>> constraintList = null;
sheet = new HashMap<>();
sheet.put("sheetName", SystemEnv.getHtmlLabelName(390351, user.getLanguage()));
sheet.put("sheetTitle", SystemEnv.getHtmlLabelName(390351, user.getLanguage()));
boolean isEnd = false;
Calendar cal = DateUtil.getCalendar();
List<Map<String, Object>> leaveRules = kqLeaveRulesBiz.getAllLeaveRules();
Map<String, Object> mapChildColumnInfo = null;
List<Object> childColumns = null;
KQReportFieldComInfo kqReportFieldComInfo = new KQReportFieldComInfo();
while (kqReportFieldComInfo.next()) {
if (Util.null2String(kqReportFieldComInfo.getParentid()).length() > 0) continue;
if(kqReportFieldComInfo.getFieldname().equals("kqCalendar"))continue;
if(KQReportFieldComInfo.cascadekey2fieldname.keySet().contains(kqReportFieldComInfo.getFieldname()))continue;
if (!kqReportFieldComInfo.getReportType().equals("all") && !kqReportFieldComInfo.getReportType().equals("month"))
continue;
if (!showColumns.contains(kqReportFieldComInfo.getFieldname())&&!showColumns.contains(kqReportFieldComInfo.getParentid())) continue;
if("leave".equalsIgnoreCase(kqReportFieldComInfo.getFieldname())&&leaveRules.size()==0){
continue;
}
title = new HashMap<>();
String unitType = KQReportBiz.getUnitType(kqReportFieldComInfo, user);
if(unitType.length()>0){
title.put("title", SystemEnv.getHtmlLabelNames(kqReportFieldComInfo.getFieldlabel(), user.getLanguage())+ "(" + unitType + ")");
}else{
title.put("title", SystemEnv.getHtmlLabelNames(kqReportFieldComInfo.getFieldlabel(), user.getLanguage()));
}
title.put("width", 30 * 256);
this.lsFieldDataKey.add(kqReportFieldComInfo.getFieldname());
mapChildColumnInfo = this.getChildColumnsInfo(kqReportFieldComInfo.getFieldname(), user);
childColumns = (List<Object>) mapChildColumnInfo.get("childColumns");
if (childColumns.size() > 0) {//跨列width取子列的width
title.put("children", childColumns);
title.put("colSpan", childColumns.size());
} else {
title.put("rowSpan", 3);
}
titleList.add(title);
titleList.addAll(this.getCascadeKeyColumnsInfo(kqReportFieldComInfo.getCascadekey(),user));
}
String today = DateUtil.getCurrentDate();
// if (DateUtil.compDate(today, toDate) > 0) {//结束如期不大于今天
// toDate = today;
// }
//白夜中晚
if(showColumns.contains("subcompany_bai")) {
title = new HashMap<>();
title.put("rowSpan", 3);
title.put("width", 30 * 256);
title.put("title","白班");
titleList.add(title);
}
if(showColumns.contains("subcompany_ye")) {
title = new HashMap<>();
title.put("rowSpan", 3);
title.put("width", 30 * 256);
title.put("title","夜班");
titleList.add(title);
}
if(showColumns.contains("subcompany_zhong")) {
title = new HashMap<>();
title.put("rowSpan", 3);
title.put("width", 30 * 256);
title.put("title","中班");
titleList.add(title);
}
if(showColumns.contains("subcompany_wan")) {
title = new HashMap<>();
title.put("rowSpan", 3);
title.put("width", 30 * 256);
title.put("title","晚班");
titleList.add(title);
}
if(showColumns.contains("kqCalendar")) {
childColumns = new ArrayList<>();
for (String date = fromDate; !isEnd; ) {
if (date.equals(toDate)) isEnd = true;
title = new HashMap<>();
title.put("title", UtilKQ.getWeekDayShort(DateUtil.getWeek(date)-1,user.getLanguage()) +"\r\n"+ DateUtil.geDayOfMonth(date));
title.put("width", 30 * 256);
childColumns.add(title);
cal.setTime(DateUtil.parseToDate(date));
date = DateUtil.getDate(cal.getTime(), 1);
}
title = new HashMap();
title.put("title", SystemEnv.getHtmlLabelName(386476, user.getLanguage()));
if (childColumns.size() > 0) {//跨列width取子列的width
title.put("children", childColumns);
title.put("colSpan", childColumns.size());
}
titleList.add(title);
}
//考勤二开--增加说明行
List<Object> newTitleList = new ArrayList<>();
Map<String, Object> titlesMap = new HashMap<>();
if (titleList.size() > 0) {
String desc = "说明:";
String acqDescSql = " select smnr from uf_kqhzbsmbd order by id desc";
rs.executeQuery(acqDescSql);
while (rs.next()) {
String temp = Util.null2String(rs.getString("smnr"));
desc = desc + temp;
}
titlesMap.put("flag","KqReport");
titlesMap.put("title",desc);
titlesMap.put("width",7680);
titlesMap.put("colSpan",75);
titlesMap.put("children",titleList);
newTitleList.add(titlesMap);
}
sheet.put("titleList", newTitleList);
// sheet.put("titleList", titleList);
String forgotBeginWorkCheck_field = " sum(b.forgotBeginWorkCheck) ";
if(rs.getDBType().equalsIgnoreCase("oracle")) {
forgotBeginWorkCheck_field = " sum(nvl(b.forgotBeginWorkCheck,0)) ";
}else if((rs.getDBType()).equalsIgnoreCase("mysql")){
forgotBeginWorkCheck_field = " sum(ifnull(b.forgotBeginWorkCheck,0)) ";
}else {
forgotBeginWorkCheck_field = " sum(isnull(b.forgotBeginWorkCheck,0)) ";
}
Map<String,Object> definedFieldInfo = new KQFormatBiz().getDefinedField();
String definedFieldSum = Util.null2String(definedFieldInfo.get("definedFieldSum"));
String backFields = " a.id,a.lastname,a.workcode,a.dsporder,b.resourceid,a.subcompanyid1 as subcompanyid,a.departmentid,a.jobtitle," +
" sum(b.workdays) as workdays,sum(b.workMins) as workMins,sum(b.attendancedays) as attendancedays," +
" sum(b.attendanceMins) as attendanceMins,sum(b.beLate) as beLate,sum(b.beLateMins) as beLateMins, " +
" sum(b.graveBeLate) as graveBeLate, sum(b.graveBeLateMins) as graveBeLateMins,sum(b.leaveEearly) as leaveEearly," +
" sum(b.leaveEarlyMins) as leaveEarlyMins, sum(b.graveLeaveEarly) as graveLeaveEarly, " +
" sum(b.graveLeaveEarlyMins) as graveLeaveEarlyMins,sum(b.absenteeism) as absenteeism, " +
" sum(b.signdays) as signdays,sum(b.signmins) as signmins, "+
" sum(b.absenteeismMins) as absenteeismMins, sum(b.forgotCheck)+"+forgotBeginWorkCheck_field+" as forgotCheck "+(definedFieldSum.length()>0?","+definedFieldSum+"":"");
if(rs.getDBType().equals("oracle")){
backFields = "/*+ index(kq_format_total IDX_KQ_FORMAT_TOTAL_KQDATE) */ "+backFields;
}
String sqlFrom = " from hrmresource a, kq_format_total b where a.id= b.resourceid and b.kqdate >='" + fromDate + "' and b.kqdate <='" + toDate + "'";
String sqlWhere = rightSql;
String groupBy = " group by a.id,a.lastname,a.workcode,a.dsporder,b.resourceid,a.subcompanyid1,a.departmentid,a.jobtitle ";
if (subCompanyId.length() > 0) {
sqlWhere += " and b.subcompanyid in(" + subCompanyId + ") ";
}
if (departmentId.length() > 0) {
sqlWhere += " and b.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<>'' ");
}
if(status.length()>0){
if (!status.equals("8") && !status.equals("9")) {
sqlWhere += " and a.status = "+status+ "";
}else if (status.equals("8")) {
sqlWhere += " and (a.status = 0 or a.status = 1 or a.status = 2 or a.status = 3) ";
}
}
String orderBy = " order by a.dsporder asc, a.lastname asc ";
String descOrderBy = " order by a.dsporder desc, a.lastname desc ";
sql = "select " + backFields + sqlFrom + sqlWhere + groupBy + orderBy;
//System.out.println("start" + DateUtil.getFullDate());
Map<String, Object> flowData = new KQReportBiz().getFlowData(params, user);
//System.out.println("end" + DateUtil.getFullDate());
rs.execute(sql);
while (rs.next()) {
data = new ArrayList<>();
String id = rs.getString("id");
for (int fieldDataKeyIdx =0;fieldDataKeyIdx<lsFieldDataKey.size();fieldDataKeyIdx++) {
String fieldName = lsFieldDataKey.get(fieldDataKeyIdx);
String fieldid = KQReportFieldComInfo.field2Id.get(fieldName);
String fieldValue = "";
if (fieldName.equals("subcompany")) {
String tmpSubcompanyId = Util.null2String(rs.getString("subcompanyid"));
if (tmpSubcompanyId.length() == 0) {
tmpSubcompanyId = Util.null2String(resourceComInfo.getSubCompanyID(id));
}
fieldValue = subCompanyComInfo.getSubCompanyname(tmpSubcompanyId);
} else if (fieldName.equals("department")) {
String tmpDepartmentId = Util.null2String(rs.getString("departmentid"));
if (tmpDepartmentId.length() == 0) {
tmpDepartmentId = Util.null2String(resourceComInfo.getDepartmentID(id));
}
fieldValue = departmentComInfo.getDepartmentname(tmpDepartmentId);
} else if (fieldName.equals("jobtitle")) {
String tmpJobtitleId = Util.null2String(rs.getString("jobtitle"));
if (tmpJobtitleId.length() == 0) {
tmpJobtitleId = Util.null2String(resourceComInfo.getJobTitle(id));
}
fieldValue = jobTitlesComInfo.getJobTitlesname(tmpJobtitleId);
} else if (fieldName.equals("attendanceSerial")) {
List<String> serialIds = null;
if (Util.null2String(jsonObj.get("attendanceSerial")).length() > 0) {
serialIds = Util.splitString2List(Util.null2String(jsonObj.get("attendanceSerial")), ",");
for(int i=0;serialIds!=null&&i<serialIds.size();i++){
data.add(kqReportBiz.getSerialCount(id,fromDate,toDate,serialIds.get(i)));
}
}else{
data.add("");
}
continue;
} else if (fieldName.equals("leave")) {//请假
List<Map<String, Object>> allLeaveRules = kqLeaveRulesBiz.getAllLeaveRules();
Map<String, Object> leaveRule = null;
for (int i = 0; allLeaveRules != null && i < allLeaveRules.size(); i++) {
leaveRule = allLeaveRules.get(i);
//考勤二开--低于、高于两个类型的假期不在请假中显示
if (leaveRule.get("id").equals("18") || leaveRule.get("id").equals("23")) {
continue;
}
//end
String flowType = Util.null2String("leaveType_" + leaveRule.get("id"));
String leaveData = Util.null2String(flowData.get(id + "|" + flowType));
String flowLeaveBackType = Util.null2String("leavebackType_" + leaveRule.get("id"));
String leavebackData = Util.null2s(Util.null2String(flowData.get(id + "|" + flowLeaveBackType)), "0.0");
String b_flowLeaveData = "";
String flowLeaveData = "";
try {
//以防止出现精度问题
if (leaveData.length() == 0) {
leaveData = "0.0";
}
if (leavebackData.length() == 0) {
leavebackData = "0.0";
}
BigDecimal b_leaveData = new BigDecimal(leaveData);
BigDecimal b_leavebackData = new BigDecimal(leavebackData);
b_flowLeaveData = b_leaveData.subtract(b_leavebackData).toString();
if(Util.getDoubleValue(b_flowLeaveData, -1) < 0){
b_flowLeaveData = "0.0";
}
} catch (Exception e) {
writeLog("GetKQReportCmd:leaveData" + leaveData + ":leavebackData:" + leavebackData + ":" + e);
}
if (b_flowLeaveData.length() > 0) {
flowLeaveData = KQDurationCalculatorUtil.getDurationRound(b_flowLeaveData);
} else {
flowLeaveData = KQDurationCalculatorUtil.getDurationRound(Util.null2String(Util.getDoubleValue(leaveData, 0.0) - Util.getDoubleValue(leavebackData, 0.0)));
}
data.add(flowLeaveData);
}
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 + "|workingDayOvertime_4leave")));
data.add(getFieldValueByUnitType(fieldValue,kqReportFieldComInfo.getUnittype(KQReportFieldComInfo.field2Id.get("workingDayOvertime_4leave"))));
fieldValue = KQDurationCalculatorUtil.getDurationRound(Util.null2String(flowData.get(id + "|restDayOvertime_4leave")));
data.add(getFieldValueByUnitType(fieldValue,kqReportFieldComInfo.getUnittype(KQReportFieldComInfo.field2Id.get("restDayOvertime_4leave"))));
fieldValue = KQDurationCalculatorUtil.getDurationRound(Util.null2String(flowData.get(id + "|holidayOvertime_4leave")));
data.add(getFieldValueByUnitType(fieldValue,kqReportFieldComInfo.getUnittype(KQReportFieldComInfo.field2Id.get("holidayOvertime_4leave"))));
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")));
restDayOvertime_4leave = restDayOvertime_4leave<0?0:restDayOvertime_4leave;
double holidayOvertime_4leave = Util.getDoubleValue(Util.null2String(flowData.get(id+"|holidayOvertime_4leave")));
holidayOvertime_4leave = holidayOvertime_4leave<0?0:holidayOvertime_4leave;
double workingDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(flowData.get(id+"|workingDayOvertime_nonleave")));
workingDayOvertime_nonleave = workingDayOvertime_nonleave<0?0:workingDayOvertime_nonleave;
double restDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(flowData.get(id+"|restDayOvertime_nonleave")));
restDayOvertime_nonleave = restDayOvertime_nonleave<0?0:restDayOvertime_nonleave;
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));
data.add(getFieldValueByUnitType(fieldValue,kqReportFieldComInfo.getUnittype(KQReportFieldComInfo.field2Id.get("overtimeTotal"))));
continue;
}else if(fieldName.equals("businessLeave") || fieldName.equals("officialBusiness")){
String businessLeaveData = Util.null2s(Util.null2String(flowData.get(id+"|"+fieldName)),"0.0");
String backType = fieldName+"_back";
String businessLeavebackData = Util.null2s(Util.null2String(flowData.get(id+"|"+backType)),"0.0");
String businessLeave = "";
try{
//以防止出现精度问题
if(businessLeaveData.length() == 0){
businessLeaveData = "0.0";
}
if(businessLeavebackData.length() == 0){
businessLeavebackData = "0.0";
}
BigDecimal b_businessLeaveData = new BigDecimal(businessLeaveData);
BigDecimal b_businessLeavebackData = new BigDecimal(businessLeavebackData);
businessLeave = b_businessLeaveData.subtract(b_businessLeavebackData).toString();
if(Util.getDoubleValue(businessLeave, -1) < 0){
businessLeave = "0.0";
}
}catch (Exception e){
}
fieldValue = KQDurationCalculatorUtil.getDurationRound(businessLeave);
} else if(Util.null2String(kqReportFieldComInfo.getCascadekey(fieldid)).length()>0){
fieldValue = Util.formatMultiLang(Util.null2String(rs.getString(fieldName)),""+user.getLanguage());
data.add(fieldValue);
List<String> lsCascadekey = Util.splitString2List(kqReportFieldComInfo.getCascadekey(fieldid),",");
for(int i=0;i<lsCascadekey.size();i++){
if(Util.null2String(rs.getString(lsCascadekey.get(i))).length()>0){
fieldid = KQReportFieldComInfo.field2Id.get(lsCascadekey.get(i));
fieldValue = getFieldValueByUnitType(rs.getString(lsCascadekey.get(i)),kqReportFieldComInfo.getUnittype(fieldid));
}else{
fieldValue = "0";
}
data.add(fieldValue);
}
continue;
} else if ( fieldName.equals("leaveType_18") || fieldName.equals("leaveType_23")) {
List<Map<String, Object>> allLeaveRules = kqLeaveRulesBiz.getAllLeaveRules();
Map<String, Object> leaveRule = null;
for (int i = 0; allLeaveRules != null && i < allLeaveRules.size(); i++) {
leaveRule = allLeaveRules.get(i);
//考勤二开--低于、高于两个类型的假期不在请假中显示
if (leaveRule.get("id").equals("18") || leaveRule.get("id").equals("23")) {
String flowType = Util.null2String("leaveType_" + leaveRule.get("id"));
String leaveData = Util.null2String(flowData.get(id + "|" + flowType));
String flowLeaveBackType = Util.null2String("leavebackType_" + leaveRule.get("id"));
String leavebackData = Util.null2s(Util.null2String(flowData.get(id + "|" + flowLeaveBackType)), "0.0");
String b_flowLeaveData = "";
String flowLeaveData = "";
try {
//以防止出现精度问题
if (leaveData.length() == 0) {
leaveData = "0.0";
}
if (leavebackData.length() == 0) {
leavebackData = "0.0";
}
BigDecimal b_leaveData = new BigDecimal(leaveData);
BigDecimal b_leavebackData = new BigDecimal(leavebackData);
b_flowLeaveData = b_leaveData.subtract(b_leavebackData).toString();
if(Util.getDoubleValue(b_flowLeaveData, -1) < 0){
b_flowLeaveData = "0.0";
}
} catch (Exception e) {
writeLog("GetKQReportCmd:leaveData" + leaveData + ":leavebackData:" + leavebackData + ":" + e);
}
if (b_flowLeaveData.length() > 0) {
flowLeaveData = KQDurationCalculatorUtil.getDurationRound(b_flowLeaveData);
} else {
flowLeaveData = KQDurationCalculatorUtil.getDurationRound(Util.null2String(Util.getDoubleValue(leaveData, 0.0) - Util.getDoubleValue(leavebackData, 0.0)));
}
data.add(flowLeaveData);
}
//end
}
continue;
}else {
fieldValue = Util.formatMultiLang(Util.null2String(rs.getString(fieldName)),""+user.getLanguage());
fieldValue = getFieldValueByUnitType(fieldValue,kqReportFieldComInfo.getUnittype(fieldid));
}
fieldValue = Util.formatMultiLang(fieldValue,""+user.getLanguage());
data.add(fieldValue);
}
if(showColumns.contains("subcompany")){
RecordSet rs2 = new RecordSet();
//人员id
String sql2 = "select b.serialtype,b.Statisticstype,a.* from kq_format_detail a\n" +
"left join\n" +
"kq_ShiftManagement b \n" +
"on a.serialid = b.id\n" +
"where kqdate >= ?\n" +
"and kqdate <= ? and resourceid = ?";
rs2.executeQuery(sql2,fromDate,toDate,id);
BigDecimal subcompany_bai=new BigDecimal("0");
BigDecimal subcompany_ye=new BigDecimal("0");
BigDecimal subcompany_zhong=new BigDecimal("0");
BigDecimal subcompany_wan=new BigDecimal("0");
while (rs2.next()){
//班次类型
String serialtype = Util.null2String(rs2.getString("serialtype"));
//统计方式
String statisticstype = Util.null2String(rs2.getString("statisticstype"));
//为空跳过
if("".equals(serialtype)||"".equals(statisticstype)){
continue;
}
BigDecimal count=new BigDecimal("0");
//应该出勤时间
String workmins = Util.null2String(rs2.getString("workmins"));
//计算实际出勤时间(出差公出算出勤)=应出勤-旷工-请假-迟到-早退
String absenteeismmins = Util.null2String(rs2.getString("absenteeismmins"));
String leavemins = Util.null2String(rs2.getString("leavemins"));
String belatemins = Util.null2String(rs2.getString("belatemins"));
String gravebelatemins = Util.null2String(rs2.getString("gravebelatemins"));
String leaveearlymins = Util.null2String(rs2.getString("leaveearlymins"));
String graveleaveearlymins = Util.null2String(rs2.getString("graveleaveearlymins"));
absenteeismmins = zro(absenteeismmins);
leavemins = zro(leavemins);
belatemins = zro(belatemins);
gravebelatemins = zro(gravebelatemins);
leaveearlymins = zro(leaveearlymins);
graveleaveearlymins = zro(graveleaveearlymins);
BigDecimal num0 = new BigDecimal(workmins);
BigDecimal num1 = new BigDecimal(absenteeismmins);
BigDecimal num2 = new BigDecimal(leavemins);
BigDecimal num3 = new BigDecimal(belatemins);
BigDecimal num4 = new BigDecimal(gravebelatemins);
BigDecimal num5 = new BigDecimal(leaveearlymins);
BigDecimal num6 = new BigDecimal(graveleaveearlymins);
//实际出勤时间
BigDecimal result1 = num0.subtract(num1).subtract(num2).subtract(num3).subtract(num4).subtract(num5).subtract(num6);
//统计类型 0时数/1比例
if("0".equals(statisticstype)){
count = result1.doubleValue()>0?new BigDecimal(1):new BigDecimal(0);
}else{ //实际时间/应时间
count = result1.divide(num0, 2, BigDecimal.ROUND_HALF_UP);
}
if("0".equals(serialtype)){
subcompany_bai = subcompany_bai.add(count);
}else if("1".equals(serialtype)){
subcompany_ye = subcompany_ye.add(count);
}else if("2".equals(serialtype)){
subcompany_zhong = subcompany_zhong.add(count);
}else if("3".equals(serialtype)){
subcompany_wan = subcompany_wan.add(count);
}
}
if(showColumns.contains("subcompany_bai")){
data.add(subcompany_bai.doubleValue());
}
if(showColumns.contains("subcompany_ye")){
data.add(subcompany_ye.doubleValue());
}
if(showColumns.contains("subcompany_zhong")){
data.add(subcompany_zhong.doubleValue());
}
if(showColumns.contains("subcompany_wan")){
data.add(subcompany_wan.doubleValue());
}
}
if(showColumns.contains("kqCalendar")) {
Map<String, Object> detialDatas = kqReportBiz.getDetialDatas(id, fromDate, toDate, user);
isEnd = false;
for (String date = fromDate; !isEnd; ) {
if (date.equals(toDate)) isEnd = true;
if (DateUtil.compDate(today, date) > 0) {
data.add("");
} else {
if (detialDatas.get(id + "|" + date) != null) {
data.add(((Map<String, Object>) detialDatas.get(id + "|" + date)).get("text"));
} else {
data.add(SystemEnv.getHtmlLabelName(26593, user.getLanguage()));
}
}
cal.setTime(DateUtil.parseToDate(date));
date = DateUtil.getDate(cal.getTime(), 1);
}
}
dataList.add(data);
}
sheet.put("dataList", dataList);
sheet.put("constraintList", constraintList);
sheet.put("createFile", "1");
lsSheet.add(sheet);
workbook.put("sheet", lsSheet);
String fileName = SystemEnv.getHtmlLabelName(390351, user.getLanguage())+" "+fromDate+" "+toDate;
workbook.put("fileName", fileName);
ExcelUtil ExcelUtil = new ExcelUtil();
Map<String, Object> exportMap = ExcelUtil.export(workbook, request, response);
retmap.putAll(exportMap);
retmap.put("status", "1");
} catch (Exception e) {
retmap.put("status", "-1");
retmap.put("message", SystemEnv.getHtmlLabelName(382661, user.getLanguage()));
writeLog(e);
}
return retmap;
}
private Map<String, Object> getChildColumnsInfo(String parentid, User user) {
Map<String, Object> returnMap = new HashMap<>();
List<Object> titleList = new ArrayList<>();
Map<String, Object> title = null;
if (parentid.equals("attendanceSerial")) {//考勤班次
KQShiftManagementComInfo kqShiftManagementComInfo = new KQShiftManagementComInfo();
JSONObject jsonObj = JSON.parseObject(Util.null2String(params.get("data")));
List<String> serialIds = null;
if (Util.null2String(jsonObj.get("attendanceSerial")).length() > 0) {
serialIds = Util.splitString2List(Util.null2String(jsonObj.get("attendanceSerial")), ",");
}
for (int i = 0; serialIds != null && i < serialIds.size(); i++) {
title = new HashMap<>();
title.put("title", Util.formatMultiLang(kqShiftManagementComInfo.getSerial(serialIds.get(i)),""+user.getLanguage()));
title.put("width", 30 * 256);
titleList.add(title);
}
} else if (parentid.equals("leave")) {
KQLeaveRulesBiz kqLeaveRulesBiz = new KQLeaveRulesBiz();
List<Map<String, Object>> leaveRules = kqLeaveRulesBiz.getAllLeaveRules();
List<Object> lsChildYsColumns = new ArrayList<>();
List<Object> lsChildNoYsColumns = new ArrayList<>();
int sumChildYsColumnWidth = 0;
int sumChildNoYsColumnWidth = 0;
for (int i = 0; leaveRules != null && i < leaveRules.size(); i++) {
Map<String, Object> leaveRule = leaveRules.get(i);
//考勤二开--低于、高于两个类型的假期不在请假中显示
if (leaveRule.get("id").equals("18") || leaveRule.get("id").equals("23")) {
continue;
}
//end
String name = Util.formatMultiLang(Util.null2String(leaveRule.get("name")),""+user.getLanguage());
String unitType = Util.null2String(leaveRule.get("unitType"));
String unitName = (KQUnitBiz.isLeaveHour(unitType)) ? SystemEnv.getHtmlLabelName(391, user.getLanguage()) : SystemEnv.getHtmlLabelName(1925, user.getLanguage());
title = new HashMap<>();
title.put("title", name + "(" + unitName + ")");
title.put("width", 30 * 256);
// titleList.add(title);
String ifyxjs = getIfyxj(Util.null2String(leaveRule.get("id")));
writeLog("ifyxjs:"+ifyxjs);
if("0".equals(ifyxjs)){
lsChildNoYsColumns.add(title);
sumChildNoYsColumnWidth+=65;
}else{
lsChildYsColumns.add(title);
sumChildYsColumnWidth+=65;
}
}
Map columnYs = new HashMap();
columnYs.put("title","有薪假");
columnYs.put("rowSpan",2);
columnYs.put("width",sumChildYsColumnWidth+"");
columnYs.put("children",lsChildYsColumns);
titleList.add(columnYs);
Map columnYsNo = new HashMap();
columnYsNo.put("title","扣薪假");
columnYsNo.put("rowSpan",2);
columnYsNo.put("width",sumChildNoYsColumnWidth+"");
columnYsNo.put("children",lsChildNoYsColumns);
titleList.add(columnYsNo);
writeLog("titleList:"+titleList.toString());
writeLog("sumChildYsColumnWidth:"+sumChildYsColumnWidth+"sumChildNoYsColumnWidth:"+sumChildNoYsColumnWidth);
}else if(parentid.equals("overtime")){
String[] overtimeChild = {"overtime_nonleave","overtime_4leave","overtimeTotal"};
for(int i=0;i<overtimeChild.length;i++){
String id = overtimeChild[i];
title = new HashMap();
String fieldlabel = "";
if("overtime_nonleave".equalsIgnoreCase(id)){
fieldlabel = "125805";
title.put("title", SystemEnv.getHtmlLabelNames(fieldlabel, user.getLanguage()));
title.put("rowSpan","2");
}else if("overtime_4leave".equalsIgnoreCase(id)){
fieldlabel = "125804";
title.put("title", SystemEnv.getHtmlLabelNames(fieldlabel, user.getLanguage()));
title.put("rowSpan","2");
}else{
fieldlabel = "523";
title.put("showDetial","1");
String unitType = (KQOvertimeRulesBiz.getMinimumUnit()==3 || KQOvertimeRulesBiz.getMinimumUnit()==5 ||KQOvertimeRulesBiz.getMinimumUnit()==6)?"2":"1";
String unitTypeName = "";
if(Util.null2String(unitType).length()>0){
if(unitType.equals("1")){
unitTypeName=SystemEnv.getHtmlLabelName(1925, user.getLanguage());
}else if(unitType.equals("2")){
unitTypeName=SystemEnv.getHtmlLabelName(391, user.getLanguage());
}else if(unitType.equals("3")){
unitTypeName=SystemEnv.getHtmlLabelName(18083, user.getLanguage());
}
}
title.put("title", SystemEnv.getHtmlLabelNames(fieldlabel, user.getLanguage())+ "(" + unitTypeName + ")");
}
Map<String,Object> mapChildColumnInfo = getChildColumnsInfo(id, user);
int childWidth = 65;
List<Object> childColumns = (List<Object>)mapChildColumnInfo.get("childColumns");
if(childColumns.size()>0) {//跨列width取子列的width
title.put("children", childColumns);
childWidth = Util.getIntValue(Util.null2String(mapChildColumnInfo.get("sumChildColumnWidth")),65);
}
title.put("width", childWidth+"");
titleList.add(title);
}
} else {
KQReportFieldComInfo kqReportFieldComInfo = new KQReportFieldComInfo();
while (kqReportFieldComInfo.next()) {
if (kqReportFieldComInfo.getParentid().equals(parentid)) {
if(!kqReportFieldComInfo.getReportType().equals("month"))continue;
title = new HashMap<>();
title.put("title", SystemEnv.getHtmlLabelNames(kqReportFieldComInfo.getFieldlabel(), user.getLanguage()) + "(" + KQReportBiz.getUnitType(kqReportFieldComInfo, user) + ")");
title.put("width", 30 * 256);
titleList.add(title);
}
}
}
returnMap.put("childColumns", titleList);
return returnMap;
}
private List<Object> getCascadeKeyColumnsInfo(String cascadeKey, User user){
List<Object> titleList = new ArrayList<>();
Map<String, Object> title = null;
if(Util.null2String(cascadeKey).length()==0){
return titleList;
}
List<String> lsCascadeKey = Util.splitString2List(cascadeKey,",");
KQReportFieldComInfo kqReportFieldComInfo = new KQReportFieldComInfo();
for(int i=0;i<lsCascadeKey.size();i++){
kqReportFieldComInfo.setTofirstRow();
while (kqReportFieldComInfo.next()) {
if(!kqReportFieldComInfo.getReportType().equals("month"))continue;
if (kqReportFieldComInfo.getFieldname().equals(lsCascadeKey.get(i))){
title = new HashMap<>();
title.put("title", SystemEnv.getHtmlLabelNames(kqReportFieldComInfo.getFieldlabel(), user.getLanguage()) + "(" + KQReportBiz.getUnitType(kqReportFieldComInfo, user) + ")");
title.put("width", 30 * 256);
titleList.add(title);
}
}
}
return titleList;
}
private String getFieldValueByUnitType(String fieldValue,String unittype){
if (Util.null2String(unittype).length() > 0) {
if (fieldValue.length() == 0) {
fieldValue = "0";
} else {
if (unittype.equals("2")) {
fieldValue = KQDurationCalculatorUtil.getDurationRound(("" + (Util.getDoubleValue(fieldValue) / 60.0)));
}
}
}
return fieldValue;
}
@Override
public BizLogContext getLogContext() {
return null;
}
public String zro(String V1)
{
if("".equals(V1)){
return "0";
}else {
return V1;
}
}
/**
*
* @param id
* @return
*/
private String getIfyxj(String id){
RecordSet rs = new RecordSet();
String ifyxj = "";
String sql ="select ifyxj from kq_LeaveRules where id = "+id;
rs.execute(sql);
if (rs.next()){
ifyxj = Util.null2String(rs.getString("ifyxj"));
}
return ifyxj;
}
}

@ -6,6 +6,7 @@ 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.log.KQLog;
import com.engine.kq.util.KQDurationCalculatorUtil;
import com.engine.kq.util.PageUidFactory;
import weaver.common.DateUtil;
@ -168,10 +169,8 @@ public class GetKQReportCmd extends AbstractCommonCommand<Map<String, Object>> {
Map<String,Object> definedFieldInfo = new KQFormatBiz().getDefinedField();
String definedFieldSum = Util.null2String(definedFieldInfo.get("definedFieldSum"));
BaseBean bb = new BaseBean();
String dateMonthSub = fromDate.substring(0,7);
String backFields = " (select jbzdx from uf_ydjbtz where xm = a.id and kqny = '"+dateMonthSub+"') as jbztxNew,(select jjrjb from uf_ydjbtz where xm = a.id and kqny = '"+dateMonthSub+"') as jjNew,(select sxjb from uf_ydjbtz where xm = a.id and kqny = '"+dateMonthSub+"') as sxjbNew,(select psjb from uf_ydjbtz where xm = a.id and kqny = '"+dateMonthSub+"') as psjbNew,a.id,a.lastname,a.workcode,a.dsporder,b.resourceid,a.subcompanyid1 as subcompanyid,a.departmentid,a.jobtitle," +
String backFields = " a.id,a.lastname,a.workcode,a.dsporder,b.resourceid,a.subcompanyid1 as subcompanyid,a.departmentid,a.jobtitle," +
" sum(b.workdays) as workdays,sum(b.workMins) as workMins,sum(b.attendancedays) as attendancedays," +
" sum(b.attendanceMins) as attendanceMins,sum(b.beLate) as beLate,sum(b.beLateMins) as beLateMins, " +
" sum(b.graveBeLate) as graveBeLate, sum(b.graveBeLateMins) as graveBeLateMins,sum(b.leaveEearly) as leaveEearly," +
@ -270,7 +269,6 @@ public class GetKQReportCmd extends AbstractCommonCommand<Map<String, Object>> {
sql = backFields + sqlFrom + sqlWhere + groupBy;
bb.writeLog("getKqReport0605:"+sql);
if (pageIndex > 0 && pageSize > 0) {
if (rs.getDBType().equals("oracle")) {
sql = " select * from (select " + sql+") t "+orderBy;
@ -356,11 +354,11 @@ public class GetKQReportCmd extends AbstractCommonCommand<Map<String, Object>> {
holidayOvertime_4leave = holidayOvertime_4leave<0?0:holidayOvertime_4leave;
double workingDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(flowData.get(id+"|workingDayOvertime_nonleave")));
workingDayOvertime_nonleave = workingDayOvertime_nonleave<0?0:workingDayOvertime_nonleave;
double restDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(flowData.get(id+"|restDayOvertime_nonleave")));
restDayOvertime_nonleave = restDayOvertime_nonleave<0?0:restDayOvertime_nonleave;
double holidayOvertime_nonleave = Util.getDoubleValue(Util.null2String(flowData.get(id+"|holidayOvertime_nonleave")));
holidayOvertime_nonleave = holidayOvertime_nonleave<0?0:holidayOvertime_nonleave;
workingDayOvertime_nonleave = workingDayOvertime_nonleave<0?0:workingDayOvertime_nonleave;
double restDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(flowData.get(id+"|restDayOvertime_nonleave")));
restDayOvertime_nonleave = restDayOvertime_nonleave<0?0:restDayOvertime_nonleave;
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));

@ -114,7 +114,7 @@ public class GetSignInfoCmd extends AbstractCommonCommand<Map<String, Object>> {
//加班明细放入出勤明细 start
String backFields = " u.id, u.resourceid,u.departmentid, u.lastname, u.workcode, u.status, u.dsporder, u.kqdate, u.serialid,u.serialid as serialid1, u.serialid as serialid2," +
" u.workbegintime, u.workendtime, u.signintime, u.signouttime, u.attendanceMins, u.signMins ";
" u.workbegintime, u.workendtime, u.signintime, u.signouttime, u.attendanceMins ";
String sqlFrom = "FROM " +
" ( " +
" ( " +
@ -183,7 +183,8 @@ public class GetSignInfoCmd extends AbstractCommonCommand<Map<String, Object>> {
String orderby = " u.kqdate asc, u.workbegintime asc " ;
String tableString = "";
String rightSql = new KQReportBiz().getReportRight("1",""+user.getUID(),"a");
String rightSql = new KQReportBiz().getReportRight("1",""+user.getUID(),"u");
if(rightSql.length()>0){
sqlWhere += rightSql;
}
@ -228,10 +229,12 @@ public class GetSignInfoCmd extends AbstractCommonCommand<Map<String, Object>> {
}
BaseBean basebean = new BaseBean();
basebean.writeLog("----begin----");
basebean.writeLog("backFields: "+backFields);
basebean.writeLog("sqlFrom: "+sqlFrom);
basebean.writeLog("orderby: "+orderby);
basebean.writeLog("sqlWhere: "+sqlWhere);
basebean.writeLog("----end----");
//end
@ -250,7 +253,7 @@ public class GetSignInfoCmd extends AbstractCommonCommand<Map<String, Object>> {
" <col width=\"15%\" text=\""+SystemEnv.getHtmlLabelName(390495,user.getLanguage())+"\" column=\"serialid1\" orderkey=\"signintime\" transmethod=\"com.engine.kq.util.TransMethod.getReportDetialSignInTime\" otherpara=\"column:signintime+column:kqdate+column:resourceid+"+user.getLanguage()+"\"/>"+
" <col width=\"15%\" text=\""+SystemEnv.getHtmlLabelName(390496,user.getLanguage())+"\" column=\"serialid2\" orderkey=\"signouttime\" transmethod=\"com.engine.kq.util.TransMethod.getReportDetialSignOutTime\" otherpara=\"column:signouttime+column:kqdate+column:resourceid+"+user.getLanguage()+"\"/>"+
" <col width=\"9%\" text=\""+SystemEnv.getHtmlLabelName(391040,user.getLanguage())+"\" column=\"attendanceMins\" orderkey=\"attendanceMins\" transmethod=\"com.engine.kq.util.TransMethod.getReportDetialMinToHour\" />"+
" <col width=\"9%\" text=\""+SystemEnv.getHtmlLabelName(504433,user.getLanguage())+"\" column=\"signMins\" orderkey=\"signMins\" transmethod=\"com.engine.kq.util.TransMethod.getReportDetialMinToHour\" />"+
// " <col width=\"9%\" text=\""+SystemEnv.getHtmlLabelName(504433,user.getLanguage())+"\" column=\"signMins\" orderkey=\"signMins\" transmethod=\"com.engine.kq.util.TransMethod.getReportDetialMinToHour\" />"+//二开
"</head>"+
"</table>";

@ -0,0 +1,309 @@
package weaver.interfaces.oml.action;
import com.engine.kq.biz.KQGroupMemberComInfo;
import com.engine.kq.biz.KQHolidaySetBiz;
import com.engine.kq.util.KQDurationCalculatorUtil;
import org.apache.commons.lang3.StringUtils;
import weaver.common.DateUtil;
import weaver.conn.RecordSet;
import weaver.general.BaseBean;
import weaver.general.TimeUtil;
import weaver.general.Util;
import weaver.interfaces.workflow.action.Action;
import weaver.soa.workflow.request.Property;
import weaver.soa.workflow.request.RequestInfo;
import weaver.systeminfo.SystemEnv;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
/**
* Action
*/
public class CheckNeewTimeAction implements Action {
public CheckNeewTimeAction() {
}
@Override
public String execute(RequestInfo info) {
new BaseBean();
BaseBean bb = new BaseBean();
bb.writeLog("系统验证数据是否超过可申请时长Action");
RecordSet rs = new RecordSet();
int userid = info.getRequestManager().getUser().getUID();
try {
//获取主表数据
Map mainInfo = getMainInfo(info);
//申请月份
String sqyf = Util.null2String(mainInfo.get("sqyf"));
String sqyfNew = sqyf +"-01";
String jbzsc = Util.null2String(mainInfo.get("jbzsc"));
/*获取考勤组的ID因为考勤组有有效期所以需要传入日期*/
KQGroupMemberComInfo kqGroupMemberComInfo = new KQGroupMemberComInfo();
String groupId = kqGroupMemberComInfo.getKQGroupId(String.valueOf(userid), sqyfNew);
bb.writeLog("groupId:"+groupId);
if (StringUtils.isBlank(groupId)){
info.getRequestManager().setMessageid("2000");
info.getRequestManager().setMessagecontent("请为该人员添加考勤组");
return Action.FAILURE_AND_CONTINUE;
}
// String fromDate = TimeUtil.getDateByOption("3","0");
// String toDate = TimeUtil.getDateByOption("3","1");
String fromDate =TimeUtil.getMonthBeginDay(sqyfNew);
String toDate = TimeUtil.getMonthEndDay(sqyfNew);
String sql = "select sum(attendancemins) as workmins,sum(leaveMins) as leaveMins from kq_format_detail where kqdate >= '"+fromDate+"' and kqdate <= '"+toDate+"' and resourceid = "+userid;
rs.execute(sql);
bb.writeLog("sql:"+sql);
String attendancemins = "";
String workmins = "";
Integer workdays = 0;
String leaveMins = "";
if (rs.next()){
workmins = Util.null2String(rs.getString("workmins"));
// workdays = Util.null2String(rs.getString("workdays"));
leaveMins = Util.null2String(rs.getString("leaveMins"));
}
workmins = StringUtils.isBlank(workmins)?"0":workmins;
leaveMins = StringUtils.isBlank(leaveMins)?"0":leaveMins;
bb.writeLog("workmins:"+workmins+"leaveMins:"+leaveMins);
//当月加班时长
String jbTime = getOverTime(fromDate,toDate,userid);
bb.writeLog("jbTime:"+jbTime);
//当月事假时长
String sjMonthTime = getSjTime(fromDate,toDate,userid);
bb.writeLog("sjMonthTime:"+sjMonthTime);
//当月实际工作时长
Integer sjTime = Integer.valueOf(workmins)+Integer.valueOf(leaveMins)-Integer.valueOf(sjMonthTime);
bb.writeLog("sjTime:"+sjTime);
String type = "";
//非B C类员工
//当月应出勤时长
Integer ycqTime = 0;
//标准行事历休息天数
String bzxsl = bb.getPropValue("omlKq_main","bzxsl");
String xxDay = getXxDay(fromDate,toDate,Integer.valueOf(bzxsl));
//员工所在行事历休息天数
// String ygszDay = getXxDay(fromDate,toDate,Integer.valueOf(groupId));
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
//当月总天数
Integer thisMonthDay = getDaysOfMonth(df.parse(sqyfNew));
workdays = thisMonthDay - Integer.valueOf(xxDay);
type = getField9(userid);
if ("0".equals(type)){
ycqTime = workdays*7 + 20;
}else if ("1".equals(type)){
ycqTime = workdays*7 + 36;
}else{
ycqTime = workdays*8;
}
bb.writeLog("ycqTime:"+ycqTime+"sjTime:"+sjTime);
Integer needTime = sjTime - (ycqTime*60);
String jbzscNew = multiply(jbzsc,"60");
Double needTimeHour = divide(String.valueOf(needTime),"60");
bb.writeLog("jbzscNew:"+jbzscNew+"needTime:"+needTime+" needTimeHour:"+needTimeHour);
if (needTime<0){
info.getRequestManager().setMessageid("2000");
info.getRequestManager().setMessagecontent("无加班时长可申请");
return Action.FAILURE_AND_CONTINUE;
}else{
// if (Double.valueOf(jbzscNew)>needTime){
// info.getRequestManager().setMessageid("2000");
// info.getRequestManager().setMessagecontent("超过可申请时长");
// return Action.FAILURE_AND_CONTINUE;
// }
if ( Double.valueOf(jbzsc) > needTimeHour ){
info.getRequestManager().setMessageid("2000");
info.getRequestManager().setMessagecontent("超过可申请时长");
return Action.FAILURE_AND_CONTINUE;
}
}
bb.writeLog("attendancemins:"+attendancemins+"workmins:"+workmins);
} catch (Exception e) {
e.printStackTrace();
bb.writeLog(e);
bb.writeLog("系统验证数据是否超过可申请时长error"+e.getMessage());
info.getRequestManager().setMessageid("2000");
info.getRequestManager().setMessagecontent("系统验证数据是否超过可申请时长error");
return Action.FAILURE_AND_CONTINUE;
}
return Action.SUCCESS;
}
/**
*
* @param v1
* @param v2
* @return
*/
public static Double divide(String v1, String v2) {
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
return b1.divide(b2,2,BigDecimal.ROUND_HALF_UP).doubleValue();
}
/**
*
* @param date
* @return
*/
public static int getDaysOfMonth(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
}
/**
*
*
* @param requestInfo
* @return
*/
private static Map getMainInfo(RequestInfo requestInfo) {
Map map = new HashMap();
Property[] property = requestInfo.getMainTableInfo().getProperty();
for (int i = 0; i < property.length; i++) {
map.put(property[i].getName().toLowerCase(), Util.null2String(property[i].getValue()));
}
return map;
}
/**
*
* @param startTime
* @param endTime
* @return
*/
private static String getOverTime(String startTime,String endTime,Integer resourceid){
RecordSet rs = new RecordSet();
String sql = "select sum(duration_min) as duration_min from KQ_FLOW_OVERTIME where belongdate >= '"+startTime+"' and belongdate <= '"+endTime+"' and changetype <> 1 and resourceid = "+resourceid;
rs.executeQuery(sql);
String duration_min = "";
if (rs.next()){
duration_min = Util.null2String(rs.getString("duration_min"));
}
if (StringUtils.isBlank(duration_min)){
duration_min = "0";
}
return duration_min;
}
/**
*
* @param startTime
* @param endTime
* @return
*/
private static String getSjTime(String startTime,String endTime,Integer resourceid){
RecordSet rs = new RecordSet();
String sql = "select sum(leaveMins) as leaveMins from kq_format_detail where leaveInfo like '{\"2\":%' and kqdate >= '"+startTime+"' and kqdate <= '"+endTime+"' and resourceid = "+resourceid;
rs.executeQuery(sql);
String leaveMins = "";
if (rs.next()){
leaveMins = Util.null2String(rs.getString("leaveMins"));
}
if (StringUtils.isBlank(leaveMins)){
leaveMins = "0";
}
return leaveMins;
}
/**
*
* @param startTime
* @param endTime
* @return
*/
private static String getXxDay(String startTime,String endTime,Integer groupId){
BaseBean bb = new BaseBean();
RecordSet rs = new RecordSet();
String sql = "select holidayDate from KQ_HolidaySet where holidayDate >= '"+startTime+"' and holidayDate <= '"+endTime+"' and changeType in (1,3) and groupId = "+groupId;
rs.executeQuery(sql);
List<Object> holidayList1 = new ArrayList<Object>();
while (rs.next()){
String holidayDate = Util.null2String(rs.getString("holidayDate"));
holidayList1.add(holidayDate);
}
String sql2 = "select holidayDate from KQ_HolidaySet where holidayDate >= '"+startTime+"' and holidayDate <= '"+endTime+"' and changeType in (2) and groupId = "+groupId;
rs.executeQuery(sql2);
List<Object> holidayList2 = new ArrayList<Object>();
while (rs.next()){
String holidayDate = Util.null2String(rs.getString("holidayDate"));
holidayList2.add(holidayDate);
}
Calendar today = Calendar.getInstance();
String currentYear = "" + today.get(Calendar.YEAR);
String currentMonth = "" + today.get(Calendar.MONTH);
Calendar dateTemp = Calendar.getInstance();
Integer all = 0;
for (int j = 1; j <= 31; j++) {
dateTemp.clear();
dateTemp.set(Integer.valueOf(currentYear),Integer.valueOf(currentMonth),j);
if (dateTemp.get(Calendar.MONTH) != Integer.valueOf(currentMonth)) {//防止出现2月30号等错误日期参数
continue;
}
String dateStr = Util.add0(dateTemp.get(Calendar.YEAR), 4) + "-" +
Util.add0(dateTemp.get(Calendar.MONTH) + 1, 2) + "-" +
Util.add0(dateTemp.get(Calendar.DAY_OF_MONTH), 2);
if (holidayList1.contains(dateStr)) {
all++;
}else if(dateTemp.getTime().getDay() == 6 || dateTemp.getTime().getDay() == 0){
if(!holidayList2.contains(dateStr)){
all++;
}
}
}
bb.writeLog("总休息天数:"+all);
return String.valueOf(all);
}
/**
*
* @param userid
* @return
*/
private static String getField9(Integer userid){
RecordSet rs = new RecordSet();
String sql = "select field9 from cus_fielddata where id = "+userid+" and scope = 'HrmCustomFieldByInfoType' and scopeid>0";
rs.executeQuery(sql);
String field9 = "";
if (rs.next()){
field9 = Util.null2String(rs.getString("field9"));
}
return field9;
}
/**
*
* @param v1
* @param v2
* @return
*/
public static String multiply(String v1, String v2) {
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
return b1.multiply(b2).toString();
}
public static void main(String[] args) {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
try {
System.out.println(getDaysOfMonth(df.parse("2023-02-01")));
} catch (ParseException e) {
e.printStackTrace();
}
}
}

@ -0,0 +1,93 @@
package weaver.interfaces.omron.job;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.engine.kq.biz.*;
import com.engine.kq.biz.chain.shiftinfo.ShiftInfoBean;
import com.engine.kq.entity.KQOvertimeRulesDetailEntity;
import com.engine.kq.entity.TimeScopeEntity;
import com.engine.kq.entity.WorkTimeEntity;
import com.engine.kq.timer.KQOvertimeCardBean;
import com.engine.kq.util.KQDurationCalculatorUtil;
import com.engine.kq.wfset.bean.OvertimeBalanceTimeBean;
import com.engine.kq.wfset.bean.SplitBean;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.gson.Gson;
import com.wbi.util.StringUtil;
import weaver.common.DateUtil;
import weaver.conn.RecordSet;
import weaver.general.BaseBean;
import weaver.general.Util;
import weaver.interfaces.schedule.BaseCronJob;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.stream.Collectors;
/**
*
*/
public class NewOverTimeJob extends BaseCronJob {
BaseBean basebean = new BaseBean();
@Override
public void execute() {
try{
basebean.writeLog("======================NewOverTimeJob Start======================");
RecordSet rs = new RecordSet();
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DAY_OF_MONTH, 1);
Date firstDayOfMonthDate = calendar.getTime();
//当前月的第一天
String fromDate = cn.hutool.core.date.DateUtil.format(firstDayOfMonthDate,"yyyy-MM-dd");
basebean.writeLog("fromDate: "+fromDate);
//当前日期
String toDate = cn.hutool.core.date.DateUtil.format(new Date(),"yyyy-MM-dd");
basebean.writeLog("toDate: "+toDate);
String eventtype = "历史考勤数据变更班次后重新计算加班时长";
//获取考勤人员
List<String> resourceIds = new ArrayList<>();
String getResSql = "select id from hrmresource where status in (0,1,2,3)";
basebean.writeLog("getResSql: "+getResSql);
rs.executeQuery(getResSql);
while (rs.next()) {
String id = Util.null2String(rs.getString("id"));
if (StringUtil.isNotBlank(id) ) {
resourceIds.add(id);
}
}
basebean.writeLog("resourceIds: "+resourceIds);
//根据人员循环执行
for (String resourceid: resourceIds) {
basebean.writeLog("===========人员重新计算加班start===========");
basebean.writeLog("resourceid: "+resourceid);
KQOverTimeRuleCalBiz kqOverTimeRuleCalBiz = new KQOverTimeRuleCalBiz();
kqOverTimeRuleCalBiz.buildOvertime(resourceid, fromDate, toDate, eventtype);
}
}catch (Exception e){
basebean.writeLog("NewOverTimeJob Exception: " + e);
basebean.writeLog("加班生成数据报错:KQOverTimeRuleCalBiz:");
StringWriter errorsWriter = new StringWriter();
e.printStackTrace(new PrintWriter(errorsWriter));
basebean.writeLog(errorsWriter.toString());
}
basebean.writeLog("======================NewOverTimeJob End======================");
}
}

@ -13,6 +13,7 @@ import com.engine.kq.wfset.bean.OvertimeBalanceTimeBean;
import com.engine.kq.wfset.bean.SplitBean;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.gson.Gson;
import com.wbi.util.StringUtil;
import weaver.common.DateUtil;
import weaver.conn.RecordSet;
@ -84,7 +85,7 @@ public class OverTimeJob extends BaseCronJob {
basebean.writeLog("获取完加班前提数据");
basebean.writeLog("changeTypeMap: "+changeTypeMap);
basebean.writeLog("overRulesDetailMap: "+overRulesDetailMap);
basebean.writeLog("restTimeMap: "+restTimeMap);
basebean.writeLog("restTimeMap: "+new Gson().toJson(restTimeMap));
basebean.writeLog("computingModeMap: "+computingModeMap);
Map<String,Object> eventLogMap = Maps.newHashMap();
@ -126,6 +127,7 @@ public class OverTimeJob extends BaseCronJob {
}
if(computingMode == 3){
// 无需审批,根据打卡时间计算加班时长
basebean.writeLog("restTimeMap: " + restTimeMap);
doComputingMode3(resourceid,splitDate,dateFormatter,changeTypeMap,overRulesDetailMap,restTimeMap,
computingModeMap,kqTimesArrayComInfo,uuid);
}
@ -1229,6 +1231,48 @@ public class OverTimeJob extends BaseCronJob {
return signinoffMap;
}
//考勤二开--综合制加班 start
/*获取考勤组的ID因为考勤组有有效期所以需要传入日期*/
KQGroupMemberComInfo kqGroupMemberComInfo = new KQGroupMemberComInfo();
String groupId = kqGroupMemberComInfo.getKQGroupId(resourceid, splitDate);
basebean.writeLog("groupId: " + groupId);
//考勤二开--综合制加班 start
String synthGroup = basebean.getPropValue("omlKq_main","groupidZh");
basebean.writeLog("synthGroup: " + synthGroup);
if ( synthGroup.equals(groupId)) {
//修改开始时间和结束时间
String changeType = changeType_key.split("_")[1];
basebean.writeLog("changeType: " + changeType);
if (changeType.equals("1")){//节假日类型
//获取班次信息
Map<String, Object> shiftInfo = getShiftInfo(resourceid, splitDate, groupId);
basebean.writeLog("shiftInfo: " + shiftInfo);
String workstarttime = Util.null2String(shiftInfo.get("workstarttime"));
// String tmpstarttime = kqTimesArrayComInfo.turn24to48Time(workstarttime);
if(workstarttime.length() > 0){
workstarttime = workstarttime+ ":00";
}
if ( workstarttime.compareTo(signinTime) >= 0) {
signinTime = workstarttime;
}
String workendacross = Util.null2String(shiftInfo.get("workendacross"));
String workendtime = Util.null2String(shiftInfo.get("workendtime"));
if(workendtime.length() > 0){
workendtime = workendtime+ ":00";
}
String temptime = workendtime;
if (workendacross.equals("1")) {
temptime = kqTimesArrayComInfo.turn24to48Time(workendtime);
}
if ( temptime.compareTo(signoutTime) <= 0) {
signoutTime = temptime;
}
}
}
//end
basebean.writeLog("signinTime: " + signinTime);
basebean.writeLog("signoutTime: " + signoutTime);
int signinTimeIndex = kqTimesArrayComInfo.getArrayindexByTimes(signinTime);
int signoutTimeIndex = kqTimesArrayComInfo.getArrayindexByTimes(signoutTime);
@ -1241,6 +1285,7 @@ public class OverTimeJob extends BaseCronJob {
Arrays.fill(initArrays, signinTimeIndex, signoutTimeIndex,1);
}
KQOvertimeRulesDetailEntity kqOvertimeRulesDetailEntity = overRulesDetailMap.get(changeType_key);
basebean.writeLog("kqOvertimeRulesDetailEntity: " +new Gson().toJson(kqOvertimeRulesDetailEntity));
if(restTimeMap.containsKey(changeType_key)){
List<String[]> restTimeList = restTimeMap.get(changeType_key);
logOvertimeMap(overtimeLogMap, restTimeList, "非工作时间设置的排除休息时间区间|restTimeList");
@ -1298,6 +1343,86 @@ public class OverTimeJob extends BaseCronJob {
return signinoffMap;
}
/**
*
*
* @param resourceid
* @param kqDate
* @param groupid
* @param rs
* @return
*/
private Map<String, Object> getShiftInfo(String resourceid, String kqDate, String groupid){
Map<String, Object> shiftInfoMap = new HashMap<>();
basebean.writeLog("getShiftInfo start to do : ");
RecordSet rs = new RecordSet();
//获取班次
Integer serialid = -1;
String acqShiftSql = "select serialid from kq_shiftschedule where kqdate = ? and resourceid = ? and groupid = ? and isdelete = ? ";
rs.executeQuery(acqShiftSql, kqDate, resourceid, groupid, 0);
while (rs.next()) {
serialid = Util.getIntValue( Util.null2String( rs.getString("serialid")));
}
//kq_ShiftOnOffWorkSections--班次具体信息
//kq_ShiftRestTimeSections--班次休息信息
if ( serialid > -1) {
/* isresttimeopen --排除休息时间是否开启 1表示开启 */
/* isoffdutyfreecheck --是否开启下班不用打卡 1表示下班不用打卡 */
/* worktime --工作时长,分钟数 */
String acqSerInfoSql = "select isresttimeopen, isoffdutyfreecheck, shiftonoffworkcount, shiftpersonnelruleid, worktime from kq_shiftmanagement where (isdelete = 0 or isdelete is null) and id = ? ";
rs.executeQuery( acqSerInfoSql, serialid);
while ( rs.next()) {
String isresttimeopen = Util.null2String(rs.getString("isresttimeopen"));
String isoffdutyfreecheck = Util.null2String(rs.getString("isoffdutyfreecheck"));
String worktime = Util.null2String(rs.getString("worktime"));
shiftInfoMap.put("serialid", serialid);
shiftInfoMap.put("isresttimeopen", isresttimeopen);
shiftInfoMap.put("isoffdutyfreecheck", isoffdutyfreecheck);
shiftInfoMap.put("worktime", worktime);
}
}
//工作时间处理
String acqWorkTimeSql = "select across, times, onoffworktype from kq_ShiftOnOffWorkSections where serialid = ? and (isdelete = 0 or isdelete is null)";
rs.executeQuery(acqWorkTimeSql, serialid);
while ( rs.next()) {
String across = Util.null2String(rs.getString("across"));
String times = Util.null2String(rs.getString("times"));
String onoffworktype = Util.null2String(rs.getString("onoffworktype"));
if ("start".equals(onoffworktype)) {
shiftInfoMap.put("workstartacross",across);
shiftInfoMap.put("workstarttime",times);
} else if ("end".equals(onoffworktype)) {
shiftInfoMap.put("workendacross",across);
shiftInfoMap.put("workendtime",times);
}
}
//休息时间处理
if ( shiftInfoMap != null && !shiftInfoMap.isEmpty() ) {
Integer isresttimeopen = Util.getIntValue(Util.null2String(shiftInfoMap.get("isresttimeopen")));
if ( isresttimeopen == 1) {//开启排除休息时间
String acqRestTimeSql = "select across, resttype, time from kq_ShiftRestTimeSections where serialid = ? and (isdelete = 0 or isdelete is null) ";
rs.executeQuery(acqRestTimeSql, serialid);
while ( rs.next()) {
String across = Util.null2String(rs.getString("across"));
String resttype = Util.null2String(rs.getString("resttype"));
String time = Util.null2String(rs.getString("time"));
if ("start".equals(resttype)) {
shiftInfoMap.put("reststartacross",across);
shiftInfoMap.put("reststarttime",time);
} else if ("end".equals(resttype)) {
shiftInfoMap.put("restendacross",across);
shiftInfoMap.put("restendtime",time);
}
}
}
}
basebean.writeLog("shiftInfoMap: " + shiftInfoMap);
return shiftInfoMap;
}
/**
*
* @param resourceid

Loading…
Cancel
Save