264 lines
11 KiB
Plaintext
264 lines
11 KiB
Plaintext
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
|
|
<%@page import="weaver.general.Util"%>
|
|
<%@ page import="java.math.BigDecimal" %>
|
|
<%@ page import="weaver.conn.RecordSet" %>
|
|
<%@ page import="java.text.SimpleDateFormat" %>
|
|
<%@ page import="java.text.ParseException" %>
|
|
<%@ page import="com.engine.kq.biz.KQOvertimeRulesBiz" %>
|
|
<%@ page import="com.engine.kq.util.KQDurationCalculatorUtil" %>
|
|
<%@ page import="com.engine.kq.enums.DurationTypeEnum" %>
|
|
<%@ page import="weaver.general.TimeUtil" %>
|
|
<%@ page import="com.engine.kq.wfset.bean.SplitBean" %>
|
|
<%@ page import="com.engine.kq.wfset.util.KQFlowUtil" %>
|
|
<%@ page import="com.engine.kq.biz.KQLeaveRulesBiz" %>
|
|
<%@ page import="com.engine.kq.biz.KQLeaveRulesComInfo" %>
|
|
<%@ page import="java.util.*" %>
|
|
<%@ page import="com.engine.kq.biz.chain.duration.*" %>
|
|
<%@ page import="com.engine.kq.log.KQLog" %>
|
|
<%@ page import="java.time.format.DateTimeFormatter" %>
|
|
<%@ page import="java.time.LocalDateTime" %>
|
|
<jsp:useBean id="rs" class="weaver.conn.RecordSet" scope="page" />
|
|
<jsp:useBean id="rs1" class="weaver.conn.RecordSet" scope="page" />
|
|
<jsp:useBean id="rst" class="weaver.conn.RecordSet" scope="page" />
|
|
<jsp:useBean id="bb" class="weaver.general.BaseBean" />
|
|
<%
|
|
int sum = 0;
|
|
|
|
String resourceId = Util.null2String(request.getParameter("userid"));
|
|
String fromDate = Util.null2String(request.getParameter("fromdate"));
|
|
String toDate = Util.null2String(request.getParameter("todate"));
|
|
String fromTime = Util.null2String(request.getParameter("fromtime"));
|
|
String toTime = Util.null2String(request.getParameter("totime"));
|
|
String overtime_type = Util.null2String(request.getParameter("overtime_type"));
|
|
String timestamp = TimeUtil.getCurrentTimeString();
|
|
|
|
int minimumUnit = getMinimumUnit();
|
|
|
|
//加班默认是工作日加班
|
|
KQDurationCalculatorUtil kqDurationCalculatorUtil =new KQDurationCalculatorUtil.DurationParamBuilder(resourceId).
|
|
fromDateParam(fromDate).toDateParam(toDate).fromTimeParam(fromTime).toTimeParam(toTime).computingModeParam("1").
|
|
durationRuleParam(minimumUnit+"").durationTypeEnumParam(DurationTypeEnum.OVERTIME).
|
|
overtime_typeParam(overtime_type).build();
|
|
|
|
Map<String,Object> durationMap = kqDurationCalculatorUtil.getWorkDuration();
|
|
|
|
%>
|
|
|
|
<%!
|
|
private KQLog kqLog = new KQLog();
|
|
|
|
private DurationTypeEnum durationTypeEnum;
|
|
|
|
public static int getMinimumUnit() {
|
|
int minimumUnit = -1;
|
|
String sql = "select * from kq_OvertimeUnit where (isDelete is null or isDelete !=1) and id=1";
|
|
RecordSet recordSet = new RecordSet();
|
|
recordSet.executeQuery(sql);
|
|
if (recordSet.next()) {
|
|
minimumUnit = recordSet.getInt("minimumUnit");
|
|
}
|
|
return minimumUnit;
|
|
}
|
|
|
|
public Map<String,Object> getWorkDuration(String fromDate,String toDate,String fromTime,String toTime,String resourceid,String durationrule){
|
|
|
|
Map<String,Object> durationMap = new HashMap<>();
|
|
try{
|
|
if(!isValidate(fromDate,toDate,fromTime,toTime)){
|
|
durationMap.put("duration", "0.0");
|
|
return durationMap;
|
|
}
|
|
if(durationTypeEnum != DurationTypeEnum.COMMON_CAL){
|
|
kqLog.info("getWorkDuration:"+durationTypeEnum.getDurationType()+":fromDate:"+fromDate+":toDate:"+toDate+":fromTime:"+fromTime+":toTime:"+toTime+":durationrule:"+durationrule+":computingMode:"+computingMode);
|
|
}
|
|
//如果是加班
|
|
if(durationTypeEnum ==DurationTypeEnum.OVERTIME){
|
|
return getNonWorkDuration();
|
|
}
|
|
//时长
|
|
double D_Duration = 0.0;
|
|
//分钟数
|
|
double Min_Duration = 0.0;
|
|
|
|
SplitBean splitBean = new SplitBean();
|
|
splitBean.setFromDate(fromDate);
|
|
splitBean.setFromTime(fromTime);
|
|
splitBean.setToDate(toDate);
|
|
splitBean.setToTime(toTime);
|
|
splitBean.setResourceId(resourceid);
|
|
splitBean.setFromdatedb(fromDate);
|
|
splitBean.setTodatedb(toDate);
|
|
splitBean.setFromtimedb(fromTime);
|
|
splitBean.setTotimedb(toTime);
|
|
splitBean.setDurationrule(durationrule);
|
|
splitBean.setDurationTypeEnum(durationTypeEnum);
|
|
splitBean.setComputingMode(computingMode);
|
|
splitBean.setNewLeaveType(newLeaveType);
|
|
if("2".equalsIgnoreCase(computingMode)){
|
|
double oneDayHour = KQFlowUtil.getOneDayHour(durationTypeEnum,newLeaveType);
|
|
splitBean.setOneDayHour(oneDayHour);
|
|
if(durationTypeEnum == DurationTypeEnum.LEAVE){
|
|
//只有自然日 请假才有这个排除节假日、休息日的功能
|
|
splitBean.setFilterholidays(KQLeaveRulesBiz.getFilterHolidays(splitBean.getNewLeaveType()));
|
|
}
|
|
}
|
|
if(durationTypeEnum ==DurationTypeEnum.LEAVE || durationTypeEnum ==DurationTypeEnum.LEAVEBACK){
|
|
if(newLeaveType.length() > 0){
|
|
KQLeaveRulesComInfo kqLeaveRulesComInfo = new KQLeaveRulesComInfo();
|
|
String conversion = kqLeaveRulesComInfo.getConversion(newLeaveType);
|
|
splitBean.setConversion(conversion);
|
|
}
|
|
}
|
|
|
|
List<SplitBean> splitBeans = new ArrayList<>();
|
|
|
|
WorkDurationChain hourUnitSplitChain = new WorkHourUnitSplitChain(splitBeans);
|
|
WorkDurationChain dayUnitSplitChain = new WorkDayUnitSplitChain(splitBeans);
|
|
WorkDurationChain halfUnitSplitChain = new WorkHalfUnitSplitChain(splitBeans);
|
|
WorkDurationChain wholeUnitSplitChain = new WorkWholeUnitSplitChain(splitBeans);
|
|
|
|
//设置执行链
|
|
hourUnitSplitChain.setDurationChain(dayUnitSplitChain);
|
|
dayUnitSplitChain.setDurationChain(halfUnitSplitChain);
|
|
halfUnitSplitChain.setDurationChain(wholeUnitSplitChain);
|
|
//把初始数据设置进去
|
|
hourUnitSplitChain.handleDuration(splitBean);
|
|
|
|
//每一天的流程时长都在这里了,搞吧
|
|
for(SplitBean sb : splitBeans){
|
|
double durations = Util.getDoubleValue(sb.getDuration(), 0.0);
|
|
double min_durations = sb.getD_Mins();
|
|
D_Duration += durations;
|
|
Min_Duration += min_durations;
|
|
}
|
|
|
|
durationMap.put("duration", KQDurationCalculatorUtil.getDurationRound(""+D_Duration));
|
|
durationMap.put("min_duration", KQDurationCalculatorUtil.getDurationRound(""+Min_Duration));
|
|
|
|
}catch (Exception e){
|
|
e.printStackTrace();
|
|
}
|
|
return durationMap;
|
|
}
|
|
|
|
private boolean isValidate(String fromDate,String toDate,String fromTime,String toTime) {
|
|
|
|
if(fromDate.length() == 0 || toDate.length() == 0){
|
|
return false;
|
|
}
|
|
if(fromTime.length() == 0 || toTime.length() == 0){
|
|
return false;
|
|
}
|
|
|
|
DateTimeFormatter fullFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
|
|
String fromDateTime = fromDate+" "+fromTime+":00";
|
|
String toDateTime = toDate+" "+toTime+":00";
|
|
|
|
LocalDateTime localFromDateTime = LocalDateTime.parse(fromDateTime,fullFormatter);
|
|
LocalDateTime localToDateTime = LocalDateTime.parse(toDateTime,fullFormatter);
|
|
|
|
if(localFromDateTime.isAfter(localToDateTime) || localFromDateTime.isEqual(localToDateTime)){
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public Map<String,Object> getNonWorkDuration(String fromDate,String toDate,String fromTime,String toTime,String resourceid){
|
|
|
|
Map<String,Object> durationMap = new HashMap<>();
|
|
try{
|
|
double D_Duration = 0.0;
|
|
double Min_Duration = 0.0;
|
|
//公众假日加班时长
|
|
double D_Pub_Duration = 0.0;
|
|
double D_Pub_Mins = 0.0;
|
|
//工作日加班时长
|
|
double D_Work_Duration = 0.0;
|
|
double D_Work_Mins = 0.0;
|
|
//休息日加班时长
|
|
double D_Rest_Duration = 0.0;
|
|
double D_Rest_Mins = 0.0;
|
|
|
|
SplitBean splitBean = new SplitBean();
|
|
splitBean.setFromDate(fromDate);
|
|
splitBean.setFromTime(fromTime);
|
|
splitBean.setToDate(toDate);
|
|
splitBean.setToTime(toTime);
|
|
splitBean.setResourceId(resourceid);
|
|
splitBean.setFromdatedb(fromDate);
|
|
splitBean.setTodatedb(toDate);
|
|
splitBean.setFromtimedb(fromTime);
|
|
splitBean.setTotimedb(toTime);
|
|
splitBean.setDurationrule(durationrule);
|
|
splitBean.setComputingMode(computingMode);
|
|
splitBean.setDurationTypeEnum(DurationTypeEnum.OVERTIME);
|
|
splitBean.setOvertime_type(overtime_type);
|
|
|
|
List<SplitBean> splitBeans = new ArrayList<>();
|
|
|
|
NonWorkDurationChain hourUnitSplitChain = new NonHourUnitSplitChain(splitBeans);
|
|
NonWorkDurationChain dayUnitSplitChain = new NonDayUnitSplitChain(splitBeans);
|
|
NonWorkDurationChain halfUnitSplitChain = new NonHalfUnitSplitChain(splitBeans);
|
|
NonWorkDurationChain wholeUnitSplitChain = new NonWholeUnitSplitChain(splitBeans);
|
|
|
|
//设置执行链
|
|
hourUnitSplitChain.setDurationChain(dayUnitSplitChain);
|
|
dayUnitSplitChain.setDurationChain(halfUnitSplitChain);
|
|
halfUnitSplitChain.setDurationChain(wholeUnitSplitChain);
|
|
//把初始数据设置进去
|
|
hourUnitSplitChain.handleDuration(splitBean);
|
|
|
|
//每一天的流程时长都在这里了,搞吧
|
|
for(SplitBean sb : splitBeans){
|
|
// * 1-公众假日、2-工作日、3-休息日
|
|
int changeType = sb.getChangeType();
|
|
double durations = Util.getDoubleValue(sb.getDuration(), 0.0);
|
|
double durationMins = sb.getD_Mins();
|
|
if(1 == changeType){
|
|
D_Pub_Duration += durations;
|
|
D_Pub_Mins += durationMins;
|
|
}
|
|
if(2 == changeType){
|
|
D_Work_Duration += durations;
|
|
D_Work_Mins += durationMins;
|
|
}
|
|
if(3 == changeType){
|
|
D_Rest_Duration += durations;
|
|
D_Rest_Mins += durationMins;
|
|
}
|
|
}
|
|
Min_Duration = D_Pub_Mins+D_Work_Mins+D_Rest_Mins;
|
|
|
|
if("3".equalsIgnoreCase(durationrule) || "5".equalsIgnoreCase(durationrule) || "6".equalsIgnoreCase(durationrule)){
|
|
double d_hour = Min_Duration/60.0;
|
|
durationMap.put("duration", KQDurationCalculatorUtil.getDurationRound(""+d_hour));
|
|
}else {
|
|
double oneDayHour = KQFlowUtil.getOneDayHour(DurationTypeEnum.OVERTIME,"");
|
|
double d_day = Min_Duration/(oneDayHour * 60);
|
|
durationMap.put("duration", KQDurationCalculatorUtil.getDurationRound(""+d_day));
|
|
}
|
|
|
|
durationMap.put("min_duration", KQDurationCalculatorUtil.getDurationRound(""+Min_Duration));
|
|
|
|
}catch (Exception e){
|
|
e.printStackTrace();
|
|
}
|
|
return durationMap;
|
|
}
|
|
|
|
%>
|
|
|
|
<HEAD>
|
|
</HEAD>
|
|
<BODY>
|
|
|
|
<h1>Congratulation Mode 666666 !</h1>
|
|
|
|
<h1> 加班单位 <%=minimumUnit%></h1>
|
|
|
|
<h2>加班的结果是 <%=durationMap%></h2>
|
|
|
|
|
|
|
|
</BODY> |