From 0d961a3d7c0b958947a9e0bece08eb999243d5d7 Mon Sep 17 00:00:00 2001 From: chenwei <3291673014@qq.com> Date: Wed, 22 Nov 2023 16:29:47 +0800 Subject: [PATCH] =?UTF-8?q?=E6=89=B9=E9=87=8F=E8=BF=9E=E7=8F=AD=E5=8A=A0?= =?UTF-8?q?=E7=8F=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kq/cmd/report/ExportDailyExcelCmd.java | 2 +- .../engine/kq/cmd/report/ExportExcelCmd.java | 2 +- .../kq/cmd/report/GetKQDailyReportCmd.java | 2 +- .../engine/kq/cmd/report/GetKQReportCmd.java | 2 +- .../sskj/action/OverTimeAction.java | 270 ++++++++++++++++ .../sskj/action/OverTimeBatchAction.java | 304 ++++++++++++++++++ 6 files changed, 578 insertions(+), 4 deletions(-) create mode 100644 src/weaver/interfaces/sskj/action/OverTimeAction.java create mode 100644 src/weaver/interfaces/sskj/action/OverTimeBatchAction.java diff --git a/src/com/engine/kq/cmd/report/ExportDailyExcelCmd.java b/src/com/engine/kq/cmd/report/ExportDailyExcelCmd.java index 07b9e8a..1c72de5 100644 --- a/src/com/engine/kq/cmd/report/ExportDailyExcelCmd.java +++ b/src/com/engine/kq/cmd/report/ExportDailyExcelCmd.java @@ -5,7 +5,7 @@ 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.KQReportBiz; +import com.engine.kq.biz.*; import com.engine.kq.cmd.shiftmanagement.toolkit.ShiftManagementToolKit; import com.engine.kq.util.ExcelUtil; import com.engine.kq.util.KQDurationCalculatorUtil; diff --git a/src/com/engine/kq/cmd/report/ExportExcelCmd.java b/src/com/engine/kq/cmd/report/ExportExcelCmd.java index a5912e8..1929779 100644 --- a/src/com/engine/kq/cmd/report/ExportExcelCmd.java +++ b/src/com/engine/kq/cmd/report/ExportExcelCmd.java @@ -5,7 +5,7 @@ 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.KQReportBiz; +import com.engine.kq.biz.*; import com.engine.kq.util.ExcelUtil; import com.engine.kq.util.KQDurationCalculatorUtil; import com.engine.kq.util.UtilKQ; diff --git a/src/com/engine/kq/cmd/report/GetKQDailyReportCmd.java b/src/com/engine/kq/cmd/report/GetKQDailyReportCmd.java index ffb84e2..6362898 100644 --- a/src/com/engine/kq/cmd/report/GetKQDailyReportCmd.java +++ b/src/com/engine/kq/cmd/report/GetKQDailyReportCmd.java @@ -5,7 +5,7 @@ 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.KQReportBiz; +import com.engine.kq.biz.*; import com.engine.kq.cmd.shiftmanagement.toolkit.ShiftManagementToolKit; import com.engine.kq.entity.WorkTimeEntity; import com.engine.kq.log.KQLog; diff --git a/src/com/engine/kq/cmd/report/GetKQReportCmd.java b/src/com/engine/kq/cmd/report/GetKQReportCmd.java index 5ff70bb..4cec4de 100644 --- a/src/com/engine/kq/cmd/report/GetKQReportCmd.java +++ b/src/com/engine/kq/cmd/report/GetKQReportCmd.java @@ -5,7 +5,7 @@ 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.KQReportBiz; +import com.engine.kq.biz.*; import com.engine.kq.util.KQDurationCalculatorUtil; import com.engine.kq.util.PageUidFactory; import weaver.common.DateUtil; diff --git a/src/weaver/interfaces/sskj/action/OverTimeAction.java b/src/weaver/interfaces/sskj/action/OverTimeAction.java new file mode 100644 index 0000000..ff5be51 --- /dev/null +++ b/src/weaver/interfaces/sskj/action/OverTimeAction.java @@ -0,0 +1,270 @@ +package weaver.interfaces.sskj.action; + +import com.engine.kq.biz.*; +import com.engine.kq.entity.KQOvertimeRulesDetailEntity; +import com.engine.sskj.util.SskjUtil; +import com.google.common.collect.Maps; +import org.apache.commons.lang3.StringUtils; +import weaver.conn.RecordSet; +import weaver.general.BaseBean; +import weaver.general.Util; +import weaver.interfaces.workflow.action.Action; +import weaver.soa.workflow.request.MainTableInfo; +import weaver.soa.workflow.request.Property; +import weaver.soa.workflow.request.RequestInfo; + +import java.util.Map; + +/** + * 连班加班流程 + */ +public class OverTimeAction implements Action { + BaseBean bb = new BaseBean(); + + @Override + public String execute(RequestInfo requestInfo) { + + try { + bb.writeLog("OverTimeAction start"); + RecordSet rs = new RecordSet(); + Integer resourceId = -1; + String fromDate = ""; + String fromTime = ""; + String toDate = ""; + String toTime = ""; + String dataId = ""; + String requestId = Util.null2String(requestInfo.getRequestid()); + MainTableInfo mainTableInfo = requestInfo.getMainTableInfo(); + Property[] properties = mainTableInfo.getProperty(); + for (Property property : properties) { + if (property.getName().equals("id")) { + dataId = Util.null2String(property.getValue()); + } + if (property.getName().equals("resourceId")) { + resourceId = Util.getIntValue(Util.null2String(property.getValue())); + } + if (property.getName().equals("fromDate")) { + fromDate = Util.null2String(property.getValue()); + } + if (property.getName().equals("fromTime")) { + fromTime = Util.null2String(property.getValue()); + } + if (property.getName().equals("toDate")) { + toDate = Util.null2String(property.getValue()); + } + if (property.getName().equals("toTime")) { + toTime = Util.null2String(property.getValue()); + } + } + + //计算时长 + SskjUtil sskjUtil = new SskjUtil(); + String startTime = ""; + String endTime = ""; + if ( StringUtils.isNotBlank(fromDate) && StringUtils.isNotBlank(fromTime)) { + startTime = fromDate + " " +fromTime; + } + if ( StringUtils.isNotBlank(toDate) && StringUtils.isNotBlank(toTime)) { + endTime = toDate + " " +toTime; + } + if ( StringUtils.isNotBlank(startTime) && StringUtils.isNotBlank(endTime)) { + startTime = startTime + ":00"; + endTime = endTime + ":00"; + } + long durationOfOvertime = sskjUtil.getTime(startTime, endTime); + + bb.writeLog("durationOfOvertime:" + durationOfOvertime); + bb.writeLog("startTime:" + startTime); + bb.writeLog("endTime:" + endTime); + bb.writeLog("fromDate:" + fromDate); + bb.writeLog("toDate:" + toDate); + bb.writeLog("fromTime:" + fromTime); + bb.writeLog("toTime:" + toTime); + //处理加班时长归属日 + String belongTo = fromDate; + + /*获取加班调休设置*/ + //首先获取人员的考勤组 + KQGroupMemberComInfo kqGroupMemberComInfo = new KQGroupMemberComInfo(); + String groupId = kqGroupMemberComInfo.getKQGroupId(Util.null2String(resourceId), belongTo); + bb.writeLog("groupId:" + groupId); + //根据考勤组获取对应的加班规则 + KQOvertimeRulesDetailEntity overtimeRulesDetail = getOvertimeRulesDetail(Util.null2String(resourceId), belongTo); + //判断当天是否允许加班 + int overtimeEnable = overtimeRulesDetail.getOvertimeEnable(); + bb.writeLog("overtimeEnable:" + overtimeEnable); + if (overtimeEnable == 0) {//不允许加班 + return Action.SUCCESS; + } + //判断时长是否大于最小加班时长 + int minimumLen = overtimeRulesDetail.getMinimumLen(); + bb.writeLog("minimumLen:" + minimumLen); + if (minimumLen > durationOfOvertime) {//低于最小加班时长,不生成加班数据 + return Action.SUCCESS; + } + //判断当天加班是否需要转调休 + int paidLeaveEnable = overtimeRulesDetail.getPaidLeaveEnable(); + bb.writeLog("paidLeaveEnable:" + paidLeaveEnable); + if (paidLeaveEnable == 0 ) {//不转调休 + //直接生成加班数据 + int computingMode = overtimeRulesDetail.getComputingMode(); + bb.writeLog("computingMode:" + computingMode); + int changeType = KQHolidaySetBiz.getChangeType(groupId, belongTo); + bb.writeLog("changeType:" + changeType); + if (changeType != 1 && changeType != 2 && changeType != 3) { + KQWorkTime kqWorkTime = new KQWorkTime(); + changeType = kqWorkTime.isWorkDay(Util.null2String(resourceId), belongTo) ? 2 : 3; + } + bb.writeLog("changeType:" + changeType); + 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) { + return Action.SUCCESS; + } else { + String error = "加班生成失败!"; + requestInfo.getRequestManager().setMessageid("666" + requestInfo.getRequestid() + "999"); + requestInfo.getRequestManager().setMessagecontent(error); + return Action.FAILURE_AND_CONTINUE; + } + } else { + /*先生成调休数据*/ + //先获取工作时长 + String worktime = "0"; + String acqWorkTimeSql = "select worktime from kq_shiftmanagement where id = (select serialids from kq_group where id = ? )"; + rs.executeQuery(acqWorkTimeSql, groupId); + while ( rs.next()) { + worktime = Util.null2String(rs.getString("worktime")); + } + bb.writeLog("worktime:" + worktime); + Map otherParam = Maps.newHashMap(); + otherParam.put("timepoint_key", "连班加班生成调休"); + String tiaoxiuId = KQBalanceOfLeaveBiz.addExtraAmountByDis5(Util.null2String(resourceId), belongTo, String.valueOf(durationOfOvertime), "0", worktime, requestId, "2", fromDate, otherParam); + bb.writeLog("tiaoxiuId:" + tiaoxiuId); + boolean flag = Util.getIntValue(tiaoxiuId, -1) > 0; + //生成加班数据 + if (flag) { + int computingMode = overtimeRulesDetail.getComputingMode(); + bb.writeLog("computingMode:" + computingMode); + int changeType = KQHolidaySetBiz.getChangeType(groupId, belongTo); + bb.writeLog("changeType:" + changeType); + if (changeType != 1 && changeType != 2 && changeType != 3) { + KQWorkTime kqWorkTime = new KQWorkTime(); + changeType = kqWorkTime.isWorkDay(Util.null2String(resourceId), belongTo) ? 2 : 3; + } + bb.writeLog("changeType:" + changeType); + boolean b = genOvertimeData(requestId, Util.null2String(resourceId), fromDate, toDate, belongTo, fromTime, toTime, String.valueOf(durationOfOvertime), + String.valueOf(changeType), "1", String.valueOf(paidLeaveEnable), String.valueOf(computingMode), tiaoxiuId); + if (b) { + return Action.SUCCESS; + } else { + String error = "加班生成失败!"; + requestInfo.getRequestManager().setMessageid("666" + requestInfo.getRequestid() + "999"); + requestInfo.getRequestManager().setMessagecontent(error); + return Action.FAILURE_AND_CONTINUE; + } + } else { + String error = "调休生成失败!"; + requestInfo.getRequestManager().setMessageid("666" + requestInfo.getRequestid() + "999"); + requestInfo.getRequestManager().setMessagecontent(error); + return Action.FAILURE_AND_CONTINUE; + } + + } + + + }catch(Exception e) { + bb.writeLog("OverTimeAction Exception: " + e); + } + + return Action.SUCCESS; + } + + /** + * 生成加班数据 + */ + private boolean genOvertimeData(String requestId, String resourceId, String fromDate, String toDate, String belongDate, + String fromTime, String toTime, String durationMin, String changType, String durationrule, String paidLeaveEnable, String computingMode, + String tiaoxiuId) { + + RecordSet rs = new RecordSet(); + + String addOverTimeSql = "insert into kq_flow_overtime (requestid, resourceid, fromdate, fromtime, todate, totime, fromdatedb, fromtimedb, todatedb, " + + "totimedb, duration_min, belongdate, durationrule, changetype, paidLeaveEnable, computingMode, tiaoxiuid, flow_mins, card_mins) values " + + "(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; + boolean flag = rs.executeUpdate(addOverTimeSql, requestId, resourceId, fromDate, fromTime+":00", toDate, toTime+":00", fromDate, fromTime, toDate, toTime, durationMin, + belongDate, durationrule, changType, paidLeaveEnable, computingMode, tiaoxiuId, 0, 0); + bb.writeLog("flag:" + flag); + return flag; + } + + /** + * 获取加班规则的明细 + */ + private static KQOvertimeRulesDetailEntity getOvertimeRulesDetail(String resourceId, String date) { + BaseBean bb = new BaseBean(); + KQOvertimeRulesDetailEntity kqOvertimeRulesDetail = new KQOvertimeRulesDetailEntity(); + try { + /*获取考勤组的ID,因为考勤组有有效期,所以需要传入日期*/ + KQGroupMemberComInfo kqGroupMemberComInfo = new KQGroupMemberComInfo(); + String groupIds = kqGroupMemberComInfo.getKQGroupId(resourceId, date); + if (groupIds.equals("")) { + /*该人员不存在于任意一个考勤组中,请为其设置考勤组*/ + bb.writeLog("该人员不存在于任意一个考勤组中,请为其设置考勤组。resourceId=" + resourceId + ",date=" + date); + } + + int changeType = KQOvertimeRulesBiz.getChangeType(resourceId, date); + /*获取当前日期的日期类型错误*/ + if (changeType != 1 && changeType != 2 && changeType != 3) { + bb.writeLog("获取当前日期的日期类型错误。resourceId=" + resourceId + ",date=" + date + ",changeType=" + changeType); + } + + int overtimeRuleId = 0;//加班规则的ID + RecordSet recordSet = new RecordSet(); + String sql = "select id from kq_OvertimeRules where (isDelete is null or isDelete !=1) "; + if (recordSet.getDBType().equalsIgnoreCase("sqlserver")) { + sql += " and ','+groupIds+',' like '%," + groupIds + ",%'"; + } else if (recordSet.getDBType().equalsIgnoreCase("mysql")) { + sql += " and concat(',',groupIds,',') like '%," + groupIds + ",%'"; + } else { + sql += " and ','||groupIds||',' like '%," + groupIds + ",%'"; + } + recordSet.executeQuery(sql); + if (recordSet.next()) { + overtimeRuleId = recordSet.getInt("id"); + + sql = "select * from kq_OvertimeRulesDetail where ruleId=" + overtimeRuleId + " and dayType=" + changeType; + recordSet.executeQuery(sql); + if (recordSet.next()) { + int ruleId = recordSet.getInt("ruleId"); + int dayType = recordSet.getInt("dayType"); + int overtimeEnable = recordSet.getInt("overtimeEnable"); + int computingMode = recordSet.getInt("computingMode"); + int startTime = recordSet.getInt("startTime"); + int minimumLen = recordSet.getInt("minimumLen"); + int paidLeaveEnable = recordSet.getInt("paidLeaveEnable"); + double lenOfOvertime = Util.getDoubleValue(recordSet.getString("lenOfOvertime"), 1.00); + double lenOfLeave = Util.getDoubleValue(recordSet.getString("lenOfLeave"), 1.00); + int hasRestTime = Util.getIntValue(recordSet.getString("hasRestTime")); + + kqOvertimeRulesDetail.setRuleId(ruleId); + kqOvertimeRulesDetail.setDayType(dayType); + kqOvertimeRulesDetail.setOvertimeEnable(overtimeEnable); + kqOvertimeRulesDetail.setComputingMode(computingMode); + kqOvertimeRulesDetail.setStartTime(startTime); + kqOvertimeRulesDetail.setMinimumLen(minimumLen); + kqOvertimeRulesDetail.setPaidLeaveEnable(paidLeaveEnable); + kqOvertimeRulesDetail.setLenOfOvertime(lenOfOvertime); + kqOvertimeRulesDetail.setLenOfLeave(lenOfLeave); + kqOvertimeRulesDetail.setHasRestTime(hasRestTime); + } + } else { + bb.writeLog("该人员所属的考勤组没有设置过任何加班规则,请为其设置加班规则。resourceId=" + resourceId + ",date="+date+",changeType=" + changeType); + } + } catch (Exception e) { + bb.writeLog("根据人员ID获取加班规则的规则内容出错。resourceId=" + resourceId + ",date=" + date); + e.printStackTrace(); + } + return kqOvertimeRulesDetail; + } + +} diff --git a/src/weaver/interfaces/sskj/action/OverTimeBatchAction.java b/src/weaver/interfaces/sskj/action/OverTimeBatchAction.java new file mode 100644 index 0000000..5b7fc93 --- /dev/null +++ b/src/weaver/interfaces/sskj/action/OverTimeBatchAction.java @@ -0,0 +1,304 @@ +package weaver.interfaces.sskj.action; + +import com.engine.kq.biz.*; +import com.engine.kq.entity.KQOvertimeRulesDetailEntity; +import com.engine.sskj.util.SskjUtil; +import com.google.common.collect.Maps; +import org.apache.commons.lang3.StringUtils; +import weaver.conn.RecordSet; +import weaver.general.BaseBean; +import weaver.general.Util; +import weaver.interfaces.workflow.action.Action; +import weaver.soa.workflow.request.*; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 批量连班加班流程 + * @author chenwnj + */ +public class OverTimeBatchAction implements Action { + BaseBean bb = new BaseBean(); + + @Override + public String execute(RequestInfo requestInfo) { + + try { + bb.writeLog("OverTimeBatchAction start"); + RecordSet rs = new RecordSet(); + String requestId = Util.null2String(requestInfo.getRequestid()); + + List< Map > detailInfos = new ArrayList<>(); + Map detailInfo = new HashMap<>(); + //从明细表获取所有加班明细数据 + DetailTableInfo detailTableInfo = requestInfo.getDetailTableInfo(); + DetailTable[] detailTable = detailTableInfo.getDetailTable(); + if ( detailTable.length > 0) { + //指定明细表 + for ( DetailTable dt : detailTable) { + Row[] rows = dt.getRow(); + for (Row row: rows) {//row 明细行 + detailInfo = new HashMap<>(); + Cell[] cells = row.getCell(); + for ( Cell cell: cells) {//cell 该明细行的列 + String name = cell.getName(); + if ( "jbry".equals(name)) { + detailInfo.put("resourceId", cell.getValue()); + } + if ( "ksrq".equals(name)) { + detailInfo.put("fromDate", cell.getValue()); + } + if ( "kssj".equals(name)) { + detailInfo.put("fromTime", cell.getValue()); + } + if ( "jsrq".equals(name)) { + detailInfo.put("toDate", cell.getValue()); + } + if ( "jssj".equals(name)) { + detailInfo.put("toTime", cell.getValue()); + } + } + if ( detailInfo.size() == 5 ) { + detailInfos.add(detailInfo); + } else { + bb.writeLog("OverTimeBatchAction 获取加班明细数据存在异常:" + detailInfo); + } + } + } + } + + bb.writeLog("detailInfos: " + detailInfos); + + for ( Map di: detailInfos) { + Integer res = Util.getIntValue( Util.null2String( di.get("resourceId"))); + String fromDate = Util.null2String( di.get("fromDate")); + String fromTime = Util.null2String( di.get("fromTime")); + String toDate = Util.null2String( di.get("toDate")); + String toTime = Util.null2String( di.get("toTime")); + String doFlag = doOverTime(requestId, res, fromDate, fromTime, toDate, toTime, rs, requestInfo); + bb.writeLog("doOverTime result: res=" + res + " result=" + doFlag); + } + + }catch(Exception e) { + bb.writeLog("OverTimeBatchAction Exception: " + e); + String error = "加班生成失败!"; + requestInfo.getRequestManager().setMessageid("666" + requestInfo.getRequestid() + "999"); + requestInfo.getRequestManager().setMessagecontent(error); + return Action.FAILURE_AND_CONTINUE; + } + + return Action.SUCCESS; + } + + /** + * 加班的处理 + */ + private String doOverTime(String requestId, Integer resourceId, String fromDate, String fromTime, String toDate, String toTime, RecordSet rs, RequestInfo requestInfo){ + //计算时长 + SskjUtil sskjUtil = new SskjUtil(); + String startTime = ""; + String endTime = ""; + if ( StringUtils.isNotBlank(fromDate) && StringUtils.isNotBlank(fromTime)) { + startTime = fromDate + " " +fromTime; + } + if ( StringUtils.isNotBlank(toDate) && StringUtils.isNotBlank(toTime)) { + endTime = toDate + " " +toTime; + } + if ( StringUtils.isNotBlank(startTime) && StringUtils.isNotBlank(endTime)) { + startTime = startTime + ":00"; + endTime = endTime + ":00"; + } + long durationOfOvertime = sskjUtil.getTime(startTime, endTime); + + bb.writeLog("durationOfOvertime:" + durationOfOvertime); + bb.writeLog("startTime:" + startTime); + bb.writeLog("endTime:" + endTime); + bb.writeLog("fromDate:" + fromDate); + bb.writeLog("toDate:" + toDate); + bb.writeLog("fromTime:" + fromTime); + bb.writeLog("toTime:" + toTime); + //处理加班时长归属日 + String belongTo = fromDate; + + /*获取加班调休设置*/ + //首先获取人员的考勤组 + KQGroupMemberComInfo kqGroupMemberComInfo = new KQGroupMemberComInfo(); + String groupId = kqGroupMemberComInfo.getKQGroupId(Util.null2String(resourceId), belongTo); + bb.writeLog("groupId:" + groupId); + //根据考勤组获取对应的加班规则 + KQOvertimeRulesDetailEntity overtimeRulesDetail = getOvertimeRulesDetail(Util.null2String(resourceId), belongTo); + //判断当天是否允许加班 + int overtimeEnable = overtimeRulesDetail.getOvertimeEnable(); + bb.writeLog("overtimeEnable:" + overtimeEnable); + if (overtimeEnable == 0) {//不允许加班 + return Action.SUCCESS; + } + //判断时长是否大于最小加班时长 + int minimumLen = overtimeRulesDetail.getMinimumLen(); + bb.writeLog("minimumLen:" + minimumLen); + if (minimumLen > durationOfOvertime) {//低于最小加班时长,不生成加班数据 + return Action.SUCCESS; + } + //判断当天加班是否需要转调休 + int paidLeaveEnable = overtimeRulesDetail.getPaidLeaveEnable(); + bb.writeLog("paidLeaveEnable:" + paidLeaveEnable); + if (paidLeaveEnable == 0 ) {//不转调休 + //直接生成加班数据 + int computingMode = overtimeRulesDetail.getComputingMode(); + bb.writeLog("computingMode:" + computingMode); + int changeType = KQHolidaySetBiz.getChangeType(groupId, belongTo); + bb.writeLog("changeType:" + changeType); + if (changeType != 1 && changeType != 2 && changeType != 3) { + KQWorkTime kqWorkTime = new KQWorkTime(); + changeType = kqWorkTime.isWorkDay(Util.null2String(resourceId), belongTo) ? 2 : 3; + } + bb.writeLog("changeType:" + changeType); + 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) { + return Action.SUCCESS; + } else { + String error = "加班生成失败!"; + requestInfo.getRequestManager().setMessageid("666" + requestInfo.getRequestid() + "999"); + requestInfo.getRequestManager().setMessagecontent(error); + return Action.FAILURE_AND_CONTINUE; + } + } else { + /*先生成调休数据*/ + //先获取工作时长 + String worktime = "0"; + String acqWorkTimeSql = "select worktime from kq_shiftmanagement where id = (select serialids from kq_group where id = ? )"; + rs.executeQuery(acqWorkTimeSql, groupId); + while ( rs.next()) { + worktime = Util.null2String(rs.getString("worktime")); + } + bb.writeLog("worktime:" + worktime); + Map otherParam = Maps.newHashMap(); + otherParam.put("timepoint_key", "连班加班生成调休"); + String tiaoxiuId = KQBalanceOfLeaveBiz.addExtraAmountByDis5(Util.null2String(resourceId), belongTo, String.valueOf(durationOfOvertime), "0", worktime, requestId, "2", fromDate, otherParam); + bb.writeLog("tiaoxiuId:" + tiaoxiuId); + boolean flag = Util.getIntValue(tiaoxiuId, -1) > 0; + //生成加班数据 + if (flag) { + int computingMode = overtimeRulesDetail.getComputingMode(); + bb.writeLog("computingMode:" + computingMode); + int changeType = KQHolidaySetBiz.getChangeType(groupId, belongTo); + bb.writeLog("changeType:" + changeType); + if (changeType != 1 && changeType != 2 && changeType != 3) { + KQWorkTime kqWorkTime = new KQWorkTime(); + changeType = kqWorkTime.isWorkDay(Util.null2String(resourceId), belongTo) ? 2 : 3; + } + bb.writeLog("changeType:" + changeType); + boolean b = genOvertimeData(requestId, Util.null2String(resourceId), fromDate, toDate, belongTo, fromTime, toTime, String.valueOf(durationOfOvertime), + String.valueOf(changeType), "1", String.valueOf(paidLeaveEnable), String.valueOf(computingMode), tiaoxiuId); + if (b) { + return Action.SUCCESS; + } else { + String error = "加班生成失败!"; + requestInfo.getRequestManager().setMessageid("666" + requestInfo.getRequestid() + "999"); + requestInfo.getRequestManager().setMessagecontent(error); + return Action.FAILURE_AND_CONTINUE; + } + } else { + String error = "调休生成失败!"; + requestInfo.getRequestManager().setMessageid("666" + requestInfo.getRequestid() + "999"); + requestInfo.getRequestManager().setMessagecontent(error); + return Action.FAILURE_AND_CONTINUE; + } + + } + } + + + /** + * 生成加班数据 + */ + private boolean genOvertimeData(String requestId, String resourceId, String fromDate, String toDate, String belongDate, + String fromTime, String toTime, String durationMin, String changType, String durationrule, String paidLeaveEnable, String computingMode, + String tiaoxiuId) { + + RecordSet rs = new RecordSet(); + + String addOverTimeSql = "insert into kq_flow_overtime (requestid, resourceid, fromdate, fromtime, todate, totime, fromdatedb, fromtimedb, todatedb, " + + "totimedb, duration_min, belongdate, durationrule, changetype, paidLeaveEnable, computingMode, tiaoxiuid, flow_mins, card_mins) values " + + "(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; + boolean flag = rs.executeUpdate(addOverTimeSql, requestId, resourceId, fromDate, fromTime+":00", toDate, toTime+":00", fromDate, fromTime, toDate, toTime, durationMin, + belongDate, durationrule, changType, paidLeaveEnable, computingMode, tiaoxiuId, 0, 0); + bb.writeLog("flag:" + flag); + return flag; + } + + /** + * 获取加班规则的明细 + */ + private static KQOvertimeRulesDetailEntity getOvertimeRulesDetail(String resourceId, String date) { + BaseBean bb = new BaseBean(); + KQOvertimeRulesDetailEntity kqOvertimeRulesDetail = new KQOvertimeRulesDetailEntity(); + try { + /*获取考勤组的ID,因为考勤组有有效期,所以需要传入日期*/ + KQGroupMemberComInfo kqGroupMemberComInfo = new KQGroupMemberComInfo(); + String groupIds = kqGroupMemberComInfo.getKQGroupId(resourceId, date); + if (groupIds.equals("")) { + /*该人员不存在于任意一个考勤组中,请为其设置考勤组*/ + bb.writeLog("该人员不存在于任意一个考勤组中,请为其设置考勤组。resourceId=" + resourceId + ",date=" + date); + } + + int changeType = KQOvertimeRulesBiz.getChangeType(resourceId, date); + /*获取当前日期的日期类型错误*/ + if (changeType != 1 && changeType != 2 && changeType != 3) { + bb.writeLog("获取当前日期的日期类型错误。resourceId=" + resourceId + ",date=" + date + ",changeType=" + changeType); + } + + int overtimeRuleId = 0;//加班规则的ID + RecordSet recordSet = new RecordSet(); + String sql = "select id from kq_OvertimeRules where (isDelete is null or isDelete !=1) "; + if (recordSet.getDBType().equalsIgnoreCase("sqlserver")) { + sql += " and ','+groupIds+',' like '%," + groupIds + ",%'"; + } else if (recordSet.getDBType().equalsIgnoreCase("mysql")) { + sql += " and concat(',',groupIds,',') like '%," + groupIds + ",%'"; + } else { + sql += " and ','||groupIds||',' like '%," + groupIds + ",%'"; + } + recordSet.executeQuery(sql); + if (recordSet.next()) { + overtimeRuleId = recordSet.getInt("id"); + + sql = "select * from kq_OvertimeRulesDetail where ruleId=" + overtimeRuleId + " and dayType=" + changeType; + recordSet.executeQuery(sql); + if (recordSet.next()) { + int ruleId = recordSet.getInt("ruleId"); + int dayType = recordSet.getInt("dayType"); + int overtimeEnable = recordSet.getInt("overtimeEnable"); + int computingMode = recordSet.getInt("computingMode"); + int startTime = recordSet.getInt("startTime"); + int minimumLen = recordSet.getInt("minimumLen"); + int paidLeaveEnable = recordSet.getInt("paidLeaveEnable"); + double lenOfOvertime = Util.getDoubleValue(recordSet.getString("lenOfOvertime"), 1.00); + double lenOfLeave = Util.getDoubleValue(recordSet.getString("lenOfLeave"), 1.00); + int hasRestTime = Util.getIntValue(recordSet.getString("hasRestTime")); + + kqOvertimeRulesDetail.setRuleId(ruleId); + kqOvertimeRulesDetail.setDayType(dayType); + kqOvertimeRulesDetail.setOvertimeEnable(overtimeEnable); + kqOvertimeRulesDetail.setComputingMode(computingMode); + kqOvertimeRulesDetail.setStartTime(startTime); + kqOvertimeRulesDetail.setMinimumLen(minimumLen); + kqOvertimeRulesDetail.setPaidLeaveEnable(paidLeaveEnable); + kqOvertimeRulesDetail.setLenOfOvertime(lenOfOvertime); + kqOvertimeRulesDetail.setLenOfLeave(lenOfLeave); + kqOvertimeRulesDetail.setHasRestTime(hasRestTime); + } + } else { + bb.writeLog("该人员所属的考勤组没有设置过任何加班规则,请为其设置加班规则。resourceId=" + resourceId + ",date="+date+",changeType=" + changeType); + } + } catch (Exception e) { + bb.writeLog("根据人员ID获取加班规则的规则内容出错。resourceId=" + resourceId + ",date=" + date); + e.printStackTrace(); + } + return kqOvertimeRulesDetail; + } + +}