Ecology-Dev-chaofa/领悦二开new/src/com/engine/lingyue/util/KqUtil.java

2254 lines
90 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.engine.lingyue.util;
import com.engine.kq.biz.KQGroupMemberComInfo;
import com.engine.kq.biz.KQWorkTime;
import com.engine.kq.entity.KQGroupEntity;
import com.engine.kq.entity.WorkTimeEntity;
import org.apache.commons.lang.StringUtils;
import weaver.conn.RecordSet;
import weaver.general.Util;
import weaver.hrm.company.DepartmentComInfo;
import weaver.hrm.company.SubCompanyComInfo;
import weaver.hrm.resource.ResourceComInfo;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.*;
/**
* @Title
* @Author wangchaofa
* @CreateDate 2024/11/7
* @Version 1.0
* @Description
*/
public class KqUtil {
/**
* 计算两个时间字符串日期的相差天数
*
* @param sStartDate 字符串时间1
* @param sEndDate 字符串时间2
* @return 相差时间
*/
public static int getDays(String sStartDate, String sEndDate) {
int days = 0;
try {
if (!"".equals(sStartDate) && !"".equals(sEndDate)) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date1 = sdf.parse(sStartDate);
Date date2 = sdf.parse(sEndDate);
long Days = (date2.getTime() - date1.getTime()) / (24*3600*1000);
if(Days < 0){
days = 0;
}else{
days = (int)Days+1;
}
}
}catch (Exception e){
e.printStackTrace();
}
return days;
}
/**
* 计算天数
* @param date1 日期
* @param date2 日期
* @return 天数
*/
public static int calculateDays(Date date1, Date date2) {
Calendar cal1 = Calendar.getInstance();
cal1.setTime(date1);
Calendar cal2 = Calendar.getInstance();
cal2.setTime(date2);
int day1 = cal1.get(Calendar.DAY_OF_YEAR);
int day2 = cal2.get(Calendar.DAY_OF_YEAR);
int year1 = cal1.get(Calendar.YEAR);
int year2 = cal2.get(Calendar.YEAR);
if (year1 != year2) {//不同 年
int timeDistance = 0;
if (year1 < year2) {//后面日期年大于前面日期
for (int i = year1; i < year2; i++) {
if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0) {//闰年
timeDistance += 366;
} else {//不是闰年
timeDistance += 365;
}
}
} else {
for (int i = year2; i < year1; i++) {
if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0) {//闰年
timeDistance += 366;
} else {//不是闰年
timeDistance += 365;
timeDistance = 0 - timeDistance;
}
}
}
return timeDistance + (day2 - day1);
} else {//同一年
return day2 - day1;
}
}
/**
* @param a 任意数
* @return 是
*/
private static String isZero(String a) {
if (a==null || "".equals(a)) {
a = "0";
}
return a;
}
/**
* 大小比较
*
* @param a
* @param b
* @return -1 小于 0 等于 1 大于
*/
public static int floatCompare(String a, String b) {
a = isZero(a);
b = isZero(b);
BigDecimal bg1 = new BigDecimal(a);
BigDecimal bg2 = new BigDecimal(b);
return bg1.compareTo(bg2);
}
/**
* 方法描述 : 对两个字符串进行金额的相加
* @param a
* @param b
* @return
* String
*/
public static String floatAdd(String a, String b) {
a=a.equals("")?"0":a;
b=b.equals("")?"0":b;
BigDecimal bg1 = new BigDecimal(a);
BigDecimal bg2 = new BigDecimal(b);
BigDecimal bd = bg1.add(bg2);
return bd.toString();
}
/**
*
* 方法描述 : 对两个字符串进行金额的相减
* @param a
* @param b
* @return
* String
*/
public static String floatSubtract(String a, String b) {
a=a.equals("")?"0":a;
b=b.equals("")?"0":b;
BigDecimal bg1 = new BigDecimal(a);
BigDecimal bg2 = new BigDecimal(b);
BigDecimal bd = bg1.subtract(bg2);
return bd.toString();
}
/**
*
* 方法描述 : 对两个字符串进行金额的相乘
* @param a
* @param b
* @return
* String
*/
public static String floatMultiply(String a, String b) {
a=a.equals("")?"0":a;
b=b.equals("")?"0":b;
BigDecimal bg1 = new BigDecimal(a);
BigDecimal bg2 = new BigDecimal(b);
BigDecimal bd = bg1.multiply(bg2).setScale(4, BigDecimal.ROUND_HALF_UP);
return bd.toString();
}
/**
*
* 方法描述 : 对两个字符串进行金额的相除(默认保留两位小数)
* @param a
* @param b
* @return
* String
*/
public static String floatDivide(String a, String b) {
a=a.equals("")?"0":a;
b=b.equals("")?"0":b;
BigDecimal bg1 = new BigDecimal(a);
BigDecimal bg2 = new BigDecimal(b);
BigDecimal bd = bg1.divide(bg2, 2, BigDecimal.ROUND_HALF_UP);
return bd.toString();
}
/**
* 判断当月有几天
* @param Year int 2020
* @param Month int 8
* @return
*/
public static int getMonthDays(String Year, String Month) {
int year = Integer.parseInt(Year);
int month = Integer.parseInt(Month);
if (month == 2) {
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
return 29;
} else {
return 28;
}
} else if (month == 4 || month == 6 || month == 9 || month == 11) {
return 30;
} else {
return 31;
}
}
/**
* 比较时间的大小
* @param a
* @param b
* @return
* @throws ParseException
*/
public static boolean compareDate(String a, String b){
boolean bool = false;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
long t1 = sdf.parse(a).getTime();
long t2 = sdf.parse(b).getTime();
if (t1 >= t2) {
bool = true;
}
return bool;
}catch (Exception e){
e.printStackTrace();
}
return bool;
}
/**
* 获取 旷工天数(薪酬调整前)
* @param fromdate
* @param todate
* @param userid
* @return
*/
public static double getAbsenteeismDaysBeforeSalaryBefore(String fromdate, String todate,String userid){
double result = 0.00;
RecordSet rs = new RecordSet();
// 薪资调整日期
String salaryAdjustDate = getSalaryAdjustDate(fromdate,todate,userid);
if(salaryAdjustDate != null && !"".equals(salaryAdjustDate)){
if(belongCalendar(salaryAdjustDate,fromdate,todate)) {
rs.executeQuery("select sum(absenteeism) as days from kq_format_total " +
" where resourceid = ? and kqdate >= ? and kqdate < ? ", userid, fromdate, salaryAdjustDate);
while (rs.next()) {
result = Util.getDoubleValue(rs.getString("days"), 0.00);
}
}
// else{
// rs.executeQuery("select sum(absenteeism) as days from kq_format_total " +
// " where resourceid = ? and kqdate >= ? and kqdate < ? ", userid, fromdate, todate);
// while (rs.next()) {
// result = Util.getDoubleValue(rs.getString("days"), 0.00);
// }
// }
}
return result;
}
/**
* 获取 旷工天数(薪酬调整后)
* @param fromdate
* @param todate
* @param userid
* @return
*/
public static double getAbsenteeismDaysAfterSalaryAfter(String fromdate, String todate,String userid){
double result = 0.00;
RecordSet rs = new RecordSet();
// 薪资调整日期
String salaryAdjustDate = getSalaryAdjustDate(fromdate,todate,userid);
if(salaryAdjustDate != null && !"".equals(salaryAdjustDate)){
if(belongCalendar(salaryAdjustDate,fromdate,todate)) {
rs.executeQuery("select sum(absenteeism) as days from kq_format_total " +
" where resourceid = ? and kqdate >= ? and kqdate <= ? ", userid, salaryAdjustDate, todate);
while (rs.next()) {
result = Util.getDoubleValue(rs.getString("days"), 0.00);
}
}else{
rs.executeQuery("select sum(absenteeism) as days from kq_format_total " +
" where resourceid = ? and kqdate >= ? and kqdate <= ? ", userid, fromdate, todate);
while (rs.next()) {
result = Util.getDoubleValue(rs.getString("days"), 0.00);
}
}
}else{
rs.executeQuery("select sum(absenteeism) as days from kq_format_total "+
" where resourceid = ? and kqdate >= ? and kqdate <= ? ",userid,fromdate,todate);
while(rs.next()){
result = Util.getDoubleValue(rs.getString("days"),0.00);
}
}
return result;
}
/**
* 获取 旷工次数 调整前旷工天数+调整后旷工天数
* @param fromdate
* @param todate
* @param userid
* @return
*/
public static double getAbsenteeismDays(String fromdate, String todate,String userid){
// 调整前旷工天数
double absenteeismDaysBeforeSalary = getAbsenteeismDaysBeforeSalaryBefore(fromdate,todate,userid);
// 调整后旷工天数
double absenteeismDaysAfterSalary = getAbsenteeismDaysAfterSalaryAfter(fromdate,todate,userid);
// 漏签、 计0.5天旷工
double forgotcheckabsenteeismdays = getForgotCheckAbsenteeismDaysAfter(fromdate,todate,userid);
// 严重迟到、严重早退 计0.5天旷工
double gravebelateleaveearlydays = getGraveBeLateLeaveEarlyDaysAfter(fromdate,todate,userid);
return absenteeismDaysBeforeSalary + absenteeismDaysAfterSalary + forgotcheckabsenteeismdays + gravebelateleaveearlydays;
}
/**
* 获取 旷工次数 标准旷工+标准漏签次数+标准严重迟到次数+标准严重早退次数
* @param fromdate
* @param todate
* @param userid
* @return
*/
public static double getAbsenteeNumsSalary(String fromdate, String todate,String userid){
double result = 0.00;
RecordSet rs = new RecordSet();
// 旷工
rs.executeQuery("select sum(absenteeism) as days from kq_format_total " +
" where resourceid = ? and kqdate >= ? and kqdate <= ? ", userid, fromdate, todate);
while (rs.next()) {
double count = Util.getDoubleValue(rs.getString("days"), 0.00);
result = result + count;
}
// 漏签
rs.executeQuery("select sum(forgotCheck)+sum(forgotBeginWorkCheck) as count from kq_format_total "+
" where resourceid = ? and kqdate >= ? and kqdate <= ? ",userid,fromdate,todate);
while(rs.next()){
double count = Util.getDoubleValue(rs.getString("count"),0.00);
result = result + count;
}
//标准严重迟到次数 + 标准严重早退次数
rs.executeQuery("select sum(gravebelate)+sum(graveleaveearly) as count from kq_format_total "+
" where resourceid = ? and kqdate >= ? and kqdate <= ? ",userid,fromdate,todate);
while(rs.next()){
double count = Util.getDoubleValue(rs.getString("count"),0.00);
result = result + count;
}
return result;
}
/**
* 获取 产假天数(薪酬用)
* 职级为1和2取标准产假天数
* 职级不是1和2【周一到周五】产假天数+【周六周日】调配工作日产假天数-【周一到周五】调配休息日产假天数
* 2025-08-08 改成 如果不是职级 1和2 ,当天排了 非休息班次产假计数1天否则 不计数
* @param fromdate
* @param todate
* @param userid
* @return
*/
public static double getMaternityLeaveDaySalary(String fromdate, String todate,String userid){
double result = 0.00;
RecordSet rs = new RecordSet();
//职级
int positionRank = getPositionRank(getPositionRankId(fromdate,todate,userid));
// 产假
String maternity_leave_id = rs.getPropValue("hrm_kqreport","maternity_leave_id");
if (positionRank == 1 || positionRank == 2) {
result = Double.valueOf(getLeaveTypeDays(maternity_leave_id,fromdate,todate,userid));
}else{
result = Double.valueOf(getRestLeaveDaysSalary(maternity_leave_id,fromdate,todate,userid));
}
return result;
}
/**
* 获取 日期范围内 假期天数
* @param leaveType
* @param fromdate
* @param todate
* @param userid
* @return
*/
public static String getLeaveTypeDays(String leaveType,String fromdate, String todate,String userid){
String result = "0";
RecordSet rs = new RecordSet();
String halfdays = "0";
String halfbackdays = "0";
// 假 时长
rs.executeQuery("select sum(duration) as count from kq_flow_split_leave where belongdate >= ? and belongdate <= ? and newleavetype in ("+ leaveType +") and resourceid = ? ",fromdate,todate,userid);
while(rs.next()){
halfdays = Util.null2o(rs.getString("count"));
}
// 销假时长
rs.executeQuery("select sum(duration) as count from kq_flow_split_leaveback where belongdate >= ? and belongdate <= ? and newleavetype in ("+ leaveType +") and resourceid = ? ",fromdate,todate,userid);
while(rs.next()){
halfbackdays = Util.null2o(rs.getString("count"));
}
result = floatSubtract(halfdays,halfbackdays);
return result;
}
/**
* 获取 工伤假天数(薪酬用)
* 职级为1和2取标准工伤假假天数
* 职级不是1和2【周一到周五】工伤假天数+【周六周日】调配工作日工伤假天数-【周一到周五】调配休息日工伤假天数
* @param fromdate
* @param todate
* @param userid
* @return
*/
public static double getInjuryLeaveDaySalary(String fromdate, String todate,String userid){
double result = 0.00;
RecordSet rs = new RecordSet();
//职级
int positionRank = getPositionRank(getPositionRankId(fromdate,todate,userid));
// 产假
String injuryLeave_leave_id = rs.getPropValue("hrm_kqreport","injuryLeave_leave_id");
if (positionRank == 1 || positionRank == 2) {
result = Double.valueOf(getLeaveTypeDays(injuryLeave_leave_id,fromdate,todate,userid));
}else{
result = Double.valueOf(getLeaveDaysSalary(injuryLeave_leave_id,fromdate,todate,userid));
}
return result;
}
/**
* 判断日期范围内是否 有产假
* @param leaveType
* @param fromdate
* @param userid
* @return
*/
public static boolean checkHasMaternityLeave(String leaveType,String fromdate,String userid){
boolean bool = false;
String result = "0";
RecordSet rs = new RecordSet();
String halfdays = "0";
String halfbackdays = "0";
// 假 时长
rs.executeQuery("select sum(duration) as count from kq_flow_split_leave where belongdate = ? and newleavetype in ("+ leaveType +") and resourceid = ? ",fromdate,userid);
while(rs.next()){
halfdays = Util.null2o(rs.getString("count"));
}
// 销假时长
rs.executeQuery("select sum(duration) as count from kq_flow_split_leaveback where belongdate = ? and newleavetype in ("+ leaveType +") and resourceid = ? ",fromdate,userid);
while(rs.next()){
halfbackdays = Util.null2o(rs.getString("count"));
}
result = floatSubtract(halfdays,halfbackdays);
if(floatCompare(result,"0") > 0){
bool = true;
}
return bool;
}
/**
* 获取 工伤假天数(薪酬用)
* @param leaveType
* @param fromDate
* @param toDate
* @param userid
* @return
*/
public static String getLeaveDaysSalary(String leaveType,String fromDate, String toDate,String userid){
String result = "0";
RecordSet rs = new RecordSet();
// 格式化日期
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
rs.executeQuery("select distinct groupid,kqdate from kq_format_total " +
" where resourceid = ? and kqdate >= ? and kqdate <= ?",userid,fromDate,toDate);
rs.next();
//考勤组 id
// String groupid = Util.null2String(rs.getString("groupid"));
String groupid = rs.getPropValue("hrm_kqreport","the_top_groupid");
// 周六或周日天数
String weekdays = "0";
// 周一到周五天数
String workdays = "0";
// 调配休息日天数
String allocateRestDays = "0";
// 调配工作日天数
String allocateWorkDays = "0";
String[] dateStartArr = parseDate(fromDate);
String[] dateEndtArr = parseDate(toDate);
LocalDate startDate = LocalDate.of(Integer.parseInt(dateStartArr[0]), Integer.parseInt(dateStartArr[1]), Integer.parseInt(dateStartArr[2]));
LocalDate endDate = LocalDate.of(Integer.parseInt(dateEndtArr[0]), Integer.parseInt(dateEndtArr[1]), Integer.parseInt(dateEndtArr[2]));
// 遍历日期范围
for (LocalDate date = startDate; !date.isAfter(endDate); date = date.plusDays(1)) {
// 输出格式化后的日期字符串
String dateString = date.format(formatter);
// 是 周六或 周日
if (isSaturdayOrSunday(dateString)) {
//是调配工作日、是公众假日
if (isAllocateWorkDay(groupid, dateString) || isAllocateHolidayDay(groupid, dateString)) {
String leaveDays = getLeaveTypeDays(leaveType,dateString,dateString,userid);
if(floatCompare(leaveDays,"0") > 0) {
allocateWorkDays = floatAdd(allocateWorkDays, leaveDays);
}
}
} else {
// 是 调配休息日
if(isAllocateRestDay(groupid,dateString)){
String leaveDays = getLeaveTypeDays(leaveType,dateString,dateString,userid);
if(floatCompare(leaveDays,"0") > 0) {
allocateRestDays = floatAdd(allocateRestDays, leaveDays);
}
}else {
String leaveDays = getLeaveTypeDays(leaveType, dateString, dateString, userid);
if (floatCompare(leaveDays, "0") > 0) {
workdays = floatAdd(workdays, leaveDays);
}
}
}
}
result = floatAdd(result,floatAdd(workdays,allocateWorkDays));
return result;
}
/**
* 获取 产假天数(薪酬用)
* @param leaveType
* @param fromDate
* @param toDate
* @param userid
* @return
*/
public static String getRestLeaveDaysSalary(String leaveType,String fromDate, String toDate,String userid){
String result = "0";
RecordSet rs = new RecordSet();
// 格式化日期
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
rs.executeQuery("select distinct groupid,kqdate from kq_format_total " +
" where resourceid = ? and kqdate >= ? and kqdate <= ?",userid,fromDate,toDate);
rs.next();
//考勤组 id
// String groupid = Util.null2String(rs.getString("groupid"));
String groupid = rs.getPropValue("hrm_kqreport","the_top_groupid");
// 休息班次
String rest_serial_id = rs.getPropValue("hrm_kqreport","rest_serial_id");
// 周六或周日天数
String weekdays = "0";
// 周一到周五天数
String workdays = "0";
// 调配休息日天数
String allocateRestDays = "0";
// 调配工作日天数
String allocateWorkDays = "0";
String[] dateStartArr = parseDate(fromDate);
String[] dateEndtArr = parseDate(toDate);
LocalDate startDate = LocalDate.of(Integer.parseInt(dateStartArr[0]), Integer.parseInt(dateStartArr[1]), Integer.parseInt(dateStartArr[2]));
LocalDate endDate = LocalDate.of(Integer.parseInt(dateEndtArr[0]), Integer.parseInt(dateEndtArr[1]), Integer.parseInt(dateEndtArr[2]));
// 遍历日期范围
for (LocalDate date = startDate; !date.isAfter(endDate); date = date.plusDays(1)) {
// 输出格式化后的日期字符串
String dateString = date.format(formatter);
// // 是 周六或 周日
// if (isSaturdayOrSunday(dateString)) {
// //是调配工作日、是公众假日
// if (isAllocateWorkDay(groupid, dateString) || isAllocateHolidayDay(groupid, dateString)) {
// String leaveDays = getLeaveTypeDays(leaveType,dateString,dateString,userid);
// if(floatCompare(leaveDays,"0") > 0) {
// allocateWorkDays = floatAdd(allocateWorkDays, leaveDays);
// }
// }
// } else {
// // 是 调配休息日
// if(isAllocateRestDay(groupid,dateString)){
// String leaveDays = getLeaveTypeDays(leaveType,dateString,dateString,userid);
// if(floatCompare(leaveDays,"0") > 0) {
// allocateRestDays = floatAdd(allocateRestDays, leaveDays);
// }
// }else {
// String leaveDays = getLeaveTypeDays(leaveType, dateString, dateString, userid);
// if (floatCompare(leaveDays, "0") > 0) {
// workdays = floatAdd(workdays, leaveDays);
// }
// }
// }
KQWorkTime kqWorkTime = new KQWorkTime();
WorkTimeEntity workTimeEntity = kqWorkTime.getWorkTime(userid, dateString);
String searIdFrom = workTimeEntity.getSerialId();
if(searIdFrom != null && !"".equals(searIdFrom)){
//当天请了产假
if(checkHasMaternityLeave(leaveType,dateString,userid)) {
//非休息班次
if (!rest_serial_id.equals(searIdFrom)) {
result = floatAdd(result, "1");
}
}
}
}
// result = floatAdd(result,floatAdd(workdays,allocateWorkDays));
return result;
}
/**
* 获取 每次漏签、严重迟到、严重早退 计0.5天旷工
* @param fromdate
* @param todate
* @param userid
* @return
*/
public static double getForgotCheckAbsenteeismDaysBefore(String fromdate, String todate,String userid){
double result = 0.00;
RecordSet rs = new RecordSet();
rs.executeQuery("select sum(forgotCheck)+sum(forgotBeginWorkCheck) as count from kq_format_total "+
" where resourceid = ? and kqdate >= ? and kqdate <= ? ",userid,fromdate,todate);
while(rs.next()){
String count = Util.null2o(rs.getString("count"));
result = Double.valueOf(floatMultiply(count,"0.5"));
}
return result;
}
/**
* 获取 每次漏签、严重迟到、严重早退 计0.5天旷工
* @param fromdate
* @param todate
* @param userid
* @return
*/
public static double getForgotCheckAbsenteeismDaysAfter(String fromdate, String todate,String userid){
double result = 0.00;
RecordSet rs = new RecordSet();
rs.executeQuery("select sum(forgotCheck)+sum(forgotBeginWorkCheck) as count from kq_format_total "+
" where resourceid = ? and kqdate >= ? and kqdate <= ? ",userid,fromdate,todate);
while(rs.next()){
String count = Util.null2o(rs.getString("count"));
result = Double.valueOf(floatMultiply(count,"0.5"));
}
return result;
}
/**
* 获取 每次严重迟到/早退 0.5天旷工
* @param fromdate
* @param todate
* @param userid
* @return
*/
public static double getGraveBeLateLeaveEarlyDaysBefore(String fromdate, String todate,String userid){
double result = 0.00;
RecordSet rs = new RecordSet();
rs.executeQuery("select sum(gravebelate)+sum(graveleaveearly) as count from kq_format_total "+
" where resourceid = ? and kqdate >= ? and kqdate <= ? ",userid,fromdate,todate);
while(rs.next()){
String count = Util.null2o(rs.getString("count"));
result = Double.valueOf(floatMultiply(count,"0.5"));
}
return result;
}
/**
* 获取 每次严重迟到/早退 0.5天旷工
* @param fromdate
* @param todate
* @param userid
* @return
*/
public static double getGraveBeLateLeaveEarlyDaysAfter(String fromdate, String todate,String userid){
double result = 0.00;
RecordSet rs = new RecordSet();
rs.executeQuery("select sum(gravebelate)+sum(graveleaveearly) as count from kq_format_total "+
" where resourceid = ? and kqdate >= ? and kqdate <= ? ",userid,fromdate,todate);
while(rs.next()){
String count = Util.null2o(rs.getString("count"));
result = Double.valueOf(floatMultiply(count,"0.5"));
}
return result;
}
/**
* 获取 旷工天数(薪酬调整前)总计 取薪酬调动日期调整前的旷工天数(旷工+漏签+严重迟到/早退)
* @param fromdate
* @param todate
* @param userid
* @return
*/
// public static double getAbsenteeismDaysCountBeforeSalary(String fromdate, String todate,String userid){
// double result = 0.00;
// // 薪资调整日期
// String salaryAdjustDate = getSalaryAdjustDate(fromdate,todate,userid);
// if(salaryAdjustDate != null && !"".equals(salaryAdjustDate)){
// if(belongCalendar(salaryAdjustDate,fromdate,todate)) {
// // 薪酬调动日期调整前的旷工天数
// double absenteeismDaysBeforeSalary = getAbsenteeismDaysBeforeSalaryBefore(fromdate, salaryAdjustDate, userid);
// // 每次漏签计0.5天旷工
// double forgotDays = getForgotCheckAbsenteeismDaysBefore(fromdate, salaryAdjustDate, userid);
// // 每次 严重迟到/早退每次计0.5天旷工
// double belateearlydays = getGraveBeLateLeaveEarlyDaysBefore(fromdate, salaryAdjustDate, userid);
//
// result = Double.valueOf(floatAdd(String.valueOf(absenteeismDaysBeforeSalary), floatAdd(String.valueOf(forgotDays), String.valueOf(belateearlydays))));
// }else{
// // 薪酬调动日期调整前的旷工天数
// double absenteeismDaysBeforeSalary = getAbsenteeismDaysBeforeSalaryBefore(fromdate, todate, userid);
// // 每次漏签计0.5天旷工
// double forgotDays = getForgotCheckAbsenteeismDaysBefore(fromdate, todate, userid);
// // 每次 严重迟到/早退每次计0.5天旷工
// double belateearlydays = getGraveBeLateLeaveEarlyDaysBefore(fromdate, todate, userid);
//
// result = Double.valueOf(floatAdd(String.valueOf(absenteeismDaysBeforeSalary), floatAdd(String.valueOf(forgotDays), String.valueOf(belateearlydays))));
// }
// }
// return result;
// }
public static double getAbsenteeismDaysCountBeforeSalary(String fromdate, String todate,String userid){
double result = 0.00;
// 薪酬调动日期调整前的旷工天数
// double absenteeismDaysBeforeSalary = getAbsenteeismDaysAfterSalaryAfter(fromdate, todate, userid);
// 每次漏签计0.5天旷工
double forgotDays = getForgotCheckAbsenteeismDaysBefore(fromdate, todate, userid);
// 每次 严重迟到/早退每次计0.5天旷工
double belateearlydays = getGraveBeLateLeaveEarlyDaysBefore(fromdate, todate, userid);
// result = Double.valueOf(floatAdd(String.valueOf(absenteeismDaysBeforeSalary), floatAdd(String.valueOf(forgotDays), String.valueOf(belateearlydays))));
result = Double.valueOf(floatAdd(String.valueOf(forgotDays), String.valueOf(belateearlydays)));
return result;
}
/**
* 获取 旷工天数(薪酬调整后)总计 取薪酬调动日期调整前的旷工天数(旷工+漏签+严重迟到/早退)
* @param fromdate
* @param todate
* @param userid
* @return
*/
public static double getAbsenteeismDaysCountAfterSalary(String fromdate, String todate,String userid){
double result = 0.00;
// 薪酬调动日期调整前的旷工天数
double absenteeismDaysBeforeSalary = getAbsenteeismDaysAfterSalaryAfter(fromdate, todate, userid);
// 每次漏签计0.5天旷工
double forgotDays = getForgotCheckAbsenteeismDaysBefore(fromdate, todate, userid);
// 每次 严重迟到/早退每次计0.5天旷工
double belateearlydays = getGraveBeLateLeaveEarlyDaysBefore(fromdate, todate, userid);
result = Double.valueOf(floatAdd(String.valueOf(absenteeismDaysBeforeSalary), floatAdd(String.valueOf(forgotDays), String.valueOf(belateearlydays))));
return result;
}
/**
* 获取 法定(公众假日)天数
* @param companystartdate
* @param fromDate
* @param toDate
* @param groupid
* @return
*/
public static String getPublicHolidays(String companystartdate,String fromDate, String toDate,String groupid,String userid){
String result = "0";
RecordSet rs = new RecordSet();
// 产假
String maternity_leave_id = rs.getPropValue("hrm_kqreport","maternity_leave_id");
// 工伤假
String injuryLeave_leave_id = rs.getPropValue("hrm_kqreport","injuryLeave_leave_id");
// 离职日期
String terminationdate = getTerminationDate(userid);
if(compareDate(toDate,terminationdate)){
toDate = terminationdate;
}
rs.executeQuery("select * from KQ_HolidaySet where holidayDate between ? and ? and changeType=1 and groupid = ?",fromDate,toDate,groupid);
while(rs.next()){
String holidayDate = Util.null2String(rs.getString("holidayDate"));
//产假天数
String maternityLeaveTypeDay = getLeaveTypeDays(maternity_leave_id, holidayDate, holidayDate, userid);
//工伤假天数
String injuryLeaveLeaveTypeDay = getLeaveTypeDays(injuryLeave_leave_id, holidayDate, holidayDate, userid);
if (compareDate(holidayDate, companystartdate)) {
result = floatAdd(result, "1");
}
if (floatCompare(maternityLeaveTypeDay, "0") == 1) {
result = floatSubtract(result, "1");
}
if (floatCompare(injuryLeaveLeaveTypeDay, "0") == 1) {
result = floatSubtract(result, "1");
}
}
return result;
}
/**
* 获取 工作信息里的 自定义字段的 值
* @param userid
* @return
*/
public static String getWorkCusFieldValue(String userid,String fieldid){
String result = "";
RecordSet rs = new RecordSet();
rs.executeQuery("select "+ fieldid +" from cus_fielddata where scope='HrmCustomFieldByInfoType' and scopeid='3' and id=?",userid);
if(rs.next()){
result = Util.null2String(rs.getString(fieldid));
}
return result;
}
/**
* 获取 入职日期 = 人力资源表 companystartdate 字段
* @param userid
* @return
*/
public static String getCompanyStartDate(String userid){
String result = "";
RecordSet rs = new RecordSet();
rs.executeQuery("select companystartdate from hrmresource where id = ?",userid);
if(rs.next()){
result = Util.null2String(rs.getString("companystartdate"));
}
return result;
}
/**
* 获取 转正日期
* @param userid
* @return
*/
public static String getComfirmDate(String userid){
String result = "";
RecordSet rs = new RecordSet();
String zzrq_fieldid = rs.getPropValue("hrm_kqreport","zzrq_fieldid");
String zzrq = getWorkCusFieldValue(userid,zzrq_fieldid);
if(zzrq != null && !"".equals(zzrq)){
result = zzrq;
}
return result;
}
/**
* 获取 异动日期
* @param fromdate
* @param todate
* @param userid
* @return
*/
public static String getTransactionDate(String fromdate,String todate,String userid){
String result = "";
RecordSet rs = new RecordSet();
rs.executeQuery("select top 1 ydsj from formtable_main_75 where ygxm = ? and ydsj >= ? and ydsj <= ? order by ydsj desc",userid,fromdate,todate);
if(rs.next()){
result = Util.null2String(rs.getString("ydsj"));
}
return result;
}
/**
* 获取 快照 里的 字段信息
* @param type
* @param fromdate
* @param todate
* @param userid
* @return
*/
public static String getSnapShotData(String type,String fromdate,String todate,String userid){
String result = "";
RecordSet rs = new RecordSet();
rs.executeQuery("select "+type+" from hrsa_hrm_snapshot where employee_id = ? and cast(snapshot_time as DATE) between ? and ? ",userid,fromdate,todate);
if(rs.next()){
result = Util.null2String(rs.getString(type));
}
return result;
}
/**
* 获取 日期范围内是否有异动
* @param fromdate
* @param todate
* @param userid
* @return
*/
public static boolean checkHasTransactionDate(String fromdate,String todate,String userid){
boolean result = false;
RecordSet rs = new RecordSet();
rs.executeQuery("select top 1 ydsj from formtable_main_75 where ygxm = ? and ydsj >= ? and ydsj <= ? order by ydsj desc",userid,fromdate,todate);
if(rs.next()){
result = true;
}
return result;
}
/**
* 获取 离职日期
* @param userid
* @return
*/
public static String getTerminationDate(String userid){
String result = "";
RecordSet rs = new RecordSet();
String lzrq_fieldid = rs.getPropValue("hrm_kqreport","lzrq_fieldid");
String lzrq = getWorkCusFieldValue(userid,lzrq_fieldid);
if(lzrq != null && !"".equals(lzrq)){
result = lzrq;
}
return result;
}
/**
* 获取 片区
* @param fromdate
* @param todate
* @param userid
* @return
*/
public static String getArea(String fromdate,String todate,String userid){
String result = "";
RecordSet rs = new RecordSet();
String area_fieldid = rs.getPropValue("hrm_kqreport","area_fieldid");
//日期范围内是否有异动
boolean hasTransaction = checkHasTransactionDate(fromdate,todate,userid);
if(hasTransaction){
String fieldid = getSnapShotData(area_fieldid,fromdate,todate,userid);
result = new SubCompanyComInfo().getSubCompanyname(fieldid);
}else {
// 片区
rs.executeQuery("select distinct " + area_fieldid + " from cus_fielddata where scope='HrmCustomFieldByInfoType' and scopeid=-1 and id = ?", userid);
if (rs.next()) {
String areaid = Util.null2String(rs.getString(area_fieldid));
if (areaid != null && !"".equals(areaid)) {
result = new SubCompanyComInfo().getSubCompanyname(areaid);
}
}
}
return result;
}
/**
* 获取 分部
* @param fromdate
* @param todate
* @param userid
* @return
*/
public static String getSubcompany(String fromdate,String todate,String userid){
String result = "";
RecordSet rs = new RecordSet();
//日期范围内是否有异动
boolean hasTransaction = checkHasTransactionDate(fromdate,todate,userid);
if(hasTransaction){
String fieldid = getSnapShotData("SUBCOMPANYID1",fromdate,todate,userid);
result = new SubCompanyComInfo().getSubCompanyname(fieldid);
}else {
rs.executeQuery("select subcompanyid1 from hrmresource where id = ?", userid);
if (rs.next()) {
String subcomid = Util.null2String(rs.getString("subcompanyid1"));
result = new SubCompanyComInfo().getSubCompanyname(subcomid);
}
}
return result;
}
/**
* 获取 部门
* @param fromdate
* @param todate
* @param userid
* @return
*/
public static String getDepartment(String fromdate,String todate,String userid){
String result = "";
RecordSet rs = new RecordSet();
//日期范围内是否有异动
boolean hasTransaction = checkHasTransactionDate(fromdate,todate,userid);
if(hasTransaction){
String fieldid = getSnapShotData("DEPARTMENTID",fromdate,todate,userid);
result = new DepartmentComInfo().getDepartmentname(fieldid);
}else {
rs.executeQuery("select departmentid from hrmresource where id = ?", userid);
if (rs.next()) {
String subcomid = Util.null2String(rs.getString("departmentid"));
result = new DepartmentComInfo().getDepartmentname(subcomid);
}
}
return result;
}
/**
* 获取 岗位名称
* @param areaid
* @return
*/
public static String getPositionName(String areaid){
String result = "";
RecordSet rs = new RecordSet();
rs.executeQuery("select * from uf_xcbz where id = ?",areaid);
if(rs.next()){
result = Util.null2String(rs.getString("gwmc"));
}
return result;
}
/**
* 获取 岗位名称
* @param fromdate
* @param todate
* @param userid
* @return
*/
public static String getPosition(String fromdate,String todate,String userid){
String result = "";
RecordSet rs = new RecordSet();
String position_fieldid = rs.getPropValue("hrm_kqreport","position_fieldid");
//日期范围内是否有异动
boolean hasTransaction = checkHasTransactionDate(fromdate,todate,userid);
if(hasTransaction){
String fieldid = getSnapShotData("FIELD128",fromdate,todate,userid);
result = getPositionName(fieldid);
}else {
// 岗位名称
rs.executeQuery("select distinct " + position_fieldid + " from cus_fielddata where scope='HrmCustomFieldByInfoType' and scopeid=-1 and id = ?", userid);
if (rs.next()) {
String positionid = Util.null2String(rs.getString(position_fieldid));
if (positionid != null && !"".equals(positionid)) {
result = getPositionName(positionid);
}
}
}
return result;
}
/**
* 获取 职等职级 id
* @param userid
*/
public static int getPositionRankId(String fromdate,String todate,String userid){
int result = 0;
RecordSet rs = new RecordSet();
//日期范围内是否有异动
boolean hasTransaction = checkHasTransactionDate(fromdate,todate,userid);
if(hasTransaction){
String fieldid = getSnapShotData("FIELD1",fromdate,todate,userid);
if (fieldid != null && !"".equals(fieldid)) {
result = Integer.parseInt(fieldid.split("_")[1]);
}
}else {
rs.executeQuery("select field1 from cus_fielddata where scope='HrmCustomFieldByInfoType' and scopeid=-1 and field1 is not null and field1 <> '' and id = ?", userid);
if (rs.next()) {
String field1 = Util.null2String(rs.getString("field1"));
if (field1 != null && !"".equals(field1)) {
result = Integer.parseInt(field1.split("_")[1]);
}
}
}
return result;
}
/**
* 获取 岗位职级
* @param mxid
* @return
*/
public static int getPositionRank(int mxid){
int result = 0;
RecordSet rs = new RecordSet();
rs.executeQuery("select gwzj from uf_zdzj_new where id = ?",mxid);
if(rs.next()){
result = Util.getIntValue(rs.getString("gwzj"));
}
return result;
}
/**
* 获取 应出勤天数
* @param fromdate
* @param todate
* @param userid
* @return
*/
public static double getWorkDays(String fromdate,String todate,String userid){
double result = 0.00;
int positionRank = getPositionRank(getPositionRankId(fromdate,todate,userid));
// 对于职级为1和2的员工应出勤天数默认为当月自然日的总天数
// 对于不是这两个职级的员工,应出勤天数为:应出勤天数+法定节假日天数;若当月无法定节假日,就默认应出勤天数
if(positionRank == 1 || positionRank == 2 || positionRank == 0){
result = Double.valueOf(getDays(fromdate,todate));
}else{
result = Double.valueOf(getSpecialWorkDays(fromdate,todate,userid));
}
return result;
}
/**
* 应出勤天数为:应出勤天数+法定节假日天数;若当月无法定节假日,就默认应出勤天数
* 周一到周五的天数 + 周六周日的调配工作日 - 周一到周五的调配休息日 + 周六周日的公众假日 = 最终的天数
* @param fromDate
* @param toDate
* @param userid
* @return
*/
public static String getSpecialWorkDays(String fromDate,String toDate,String userid){
String result = "0";
RecordSet rs = new RecordSet();
//
String groupid = rs.getPropValue("hrm_kqreport","the_top_groupid");
// 周六或周日天数
String weekdays = "0";
// 周一到周五天数
String workdays = "0";
// 调配休息日天数
String allocateRestDays = "0";
// 调配工作日天数
String allocateWorkDays = "0";
// 格式化日期
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
// rs.executeQuery("select distinct groupid,kqdate from kq_format_total " +
// " where resourceid = ? and kqdate >= ? and kqdate <= ?",userid,fromDate,toDate);
// while(rs.next()){
// //
// String dateString = Util.null2String(rs.getString("kqdate"));
// // 是 周六或 周日
// if (isSaturdayOrSunday(dateString)) {
// //是调配工作日
// if (isAllocateWorkDay(groupid, dateString)) {
// allocateWorkDays = floatAdd(allocateWorkDays,"1");
// }
// //是公众假日
// if(isAllocateHolidayDay(groupid, dateString)){
// allocateWorkDays = floatAdd(allocateWorkDays,"1");
// }
// } else {
// // 是 调配休息日
// if(isAllocateRestDay(groupid,dateString)){
// allocateRestDays = floatAdd(allocateRestDays,"1");
// }
// workdays = floatAdd(workdays,"1");
// }
// }
String[] dateStartArr = parseDate(fromDate);
String[] dateEndtArr = parseDate(toDate);
LocalDate startDate = LocalDate.of(Integer.parseInt(dateStartArr[0]), Integer.parseInt(dateStartArr[1]), Integer.parseInt(dateStartArr[2]));
LocalDate endDate = LocalDate.of(Integer.parseInt(dateEndtArr[0]), Integer.parseInt(dateEndtArr[1]), Integer.parseInt(dateEndtArr[2]));
// 遍历日期范围
for (LocalDate date = startDate; !date.isAfter(endDate); date = date.plusDays(1)) {
// 输出格式化后的日期字符串
String dateString = date.format(formatter);
// 是 周六或 周日
if (isSaturdayOrSunday(dateString)) {
//是调配工作日
if (isAllocateWorkDay(groupid, dateString)) {
allocateWorkDays = floatAdd(allocateWorkDays,"1");
}
//是公众假日
if(isAllocateHolidayDay(groupid, dateString)){
allocateWorkDays = floatAdd(allocateWorkDays,"1");
}
} else {
// 是 调配休息日
if(isAllocateRestDay(groupid,dateString)){
allocateRestDays = floatAdd(allocateRestDays,"1");
}
workdays = floatAdd(workdays,"1");
}
}
result = floatAdd(result,floatSubtract(floatAdd(workdays,allocateWorkDays),allocateRestDays));
return result;
}
/**
* 获取 薪酬调整日期、转正日期、入职日期
* @param fromdate
* @param todate
* @param userid
* @return
*/
public static String getSalaryAdjustDate(String fromdate,String todate,String userid){
String result = "";
RecordSet rs = new RecordSet();
RecordSet rs1 = new RecordSet();
RecordSet rs2 = new RecordSet();
String txrq = "";
String zzrq = "";
String rzrq = "";
rs.executeQuery("select txrq from uf_ygxcda where yg = ? and txrq >= ? and txrq <= ? and dxyy != '入职' ",userid,fromdate,todate);
if(rs.next()){
txrq = Util.null2String(rs.getString("txrq"));
}
rs1.executeQuery("select shjg as zzrq from uf_ygzzxx where lczt = '2' and xm = ? ",userid);
if(rs1.next()){
zzrq = Util.null2String(rs1.getString("zzrq"));
}
rs2.executeQuery("select companystartdate from hrmresource where id = ?",userid);
if(rs2.next()){
rzrq = Util.null2String(rs2.getString("companystartdate"));
}
if(txrq != null && !"".equals(txrq)){
result = txrq;
}else if(zzrq != null && !"".equals(zzrq)){
result = zzrq;
}else if(rzrq != null && !"".equals(rzrq)){
result = rzrq;
}
return result;
}
/**
* 获取 指定假期的时长
* @param type
* @param fromdate
* @param todate
* @param userid
* @return
*/
public static String getLeaveDaysBefore(int type,String fromdate,String todate,String userid){
String result = "0";
RecordSet rs = new RecordSet();
String halfdays = "0";
String halfbackdays = "0";
// 假期 时长
rs.executeQuery("select sum(duration) as count from kq_flow_split_leave where belongdate >= ? and belongdate < ? and newleavetype in ("+ type +") and resourceid = ? ",fromdate,todate,userid);
while(rs.next()){
halfdays = Util.null2o(rs.getString("count"));
}
// 销假时长
rs.executeQuery("select sum(duration) as count from kq_flow_split_leaveback where belongdate >= ? and belongdate < ? and newleavetype in ("+ type +") and resourceid = ? ",fromdate,todate,userid);
while(rs.next()){
halfbackdays = Util.null2o(rs.getString("count"));
}
result = floatSubtract(halfdays,halfbackdays);
return result;
}
/**
* 获取 指定假期的时长
* @param type
* @param fromdate
* @param todate
* @param userid
* @return
*/
public static String getLeaveDaysAfter(int type,String fromdate,String todate,String userid){
String result = "0";
RecordSet rs = new RecordSet();
String halfdays = "0";
String halfbackdays = "0";
// 假期 时长
rs.executeQuery("select sum(duration) as count from kq_flow_split_leave where belongdate >= ? and belongdate <= ? and newleavetype in ("+ type +") and resourceid = ? ",fromdate,todate,userid);
while(rs.next()){
halfdays = Util.null2o(rs.getString("count"));
}
// 销假时长
rs.executeQuery("select sum(duration) as count from kq_flow_split_leaveback where belongdate >= ? and belongdate <= ? and newleavetype in ("+ type +") and resourceid = ? ",fromdate,todate,userid);
while(rs.next()){
halfbackdays = Util.null2o(rs.getString("count"));
}
result = floatSubtract(halfdays,halfbackdays);
return result;
}
/**
* 获取 哺乳假的假期的时长
* @param type
* @param fromdate
* @param todate
* @param userid
* @return
*/
public static String getBreastfeedLeaveDays(int type,String fromdate,String todate,String userid){
String result = "0";
RecordSet rs1 = new RecordSet();
String breastfeeddays = "0";
String breastfeedbackdays = "0";
//班次id
String serialid = getSerialId(fromdate,todate,userid);
String serialHours = getHoursBySerial(serialid);
// 哺乳假 时长
rs1.executeQuery("select sum(duration) as count from kq_flow_split_leave where belongDate >= ? and belongdate <= ? and newleavetype in ("+ type +") and resourceid = ? group by resourceid",fromdate,todate,userid);
while(rs1.next()){
breastfeeddays = Util.null2o(rs1.getString("count"));
}
// 哺乳假 销假时长
rs1.executeQuery("select sum(duration) as count from kq_flow_split_leave where belongDate >= ? and belongdate <= ? and newleavetype in ("+ type +") and resourceid = ? group by resourceid",fromdate,todate,userid);
while(rs1.next()){
breastfeedbackdays = Util.null2o(rs1.getString("count"));
}
String breastdays = floatSubtract(breastfeeddays,breastfeedbackdays);
if(floatCompare(serialHours,"0") > 0) {
String breadt_days = floatDivide(breastdays, serialHours);
result = floatAdd(result, breadt_days);
}
return result;
}
/**
* 获取班次对应的工作时长 分钟数 转换为 小时
* @param serialid
* @return
*/
public static String getHoursBySerial(String serialid){
String result = "";
RecordSet rs = new RecordSet();
rs.executeQuery("select * from kq_ShiftManagement where id=?",serialid);
if(rs.next()) {
String worktime = Util.null2o(rs.getString("worktime"));
result = floatDivide(worktime,"60");
}
return result;
}
/**
* 获取 实际出勤天数(薪酬调整前)
* 对于职级为1和2的员工实际出勤天数标准+带薪假(病、年、产、陪产、婚、丧、探亲、哺乳、调休)+迟到小时数(换算成班次所在天数)-每次漏签、严重迟到、严重早退 计0.5天旷工+休息班次
* 对于不是这两个职级的员工,实际出勤天数(标准)+带薪假(病、年、产、陪产、婚、丧、探亲、哺乳、调休)+迟到小时数(换算成班次所在天数)-每次漏签、严重迟到、严重早退 计0.5天旷工+公众假日(当前日期范围内要有班次的)
* 病假 按半天请假
* 年假 按半天请假
* 产假 按半天请假
* 陪产假 按半天请假
* 婚假 按半天请假
* 丧假 按半天请假
* 探亲假 按半天请假
* 哺乳假 按小时请假
* 调休假 按半天请假
* @param fromdate
* @param todate
* @param userid
* @return
*/
public static double getAttendDaysBeforeSalary(String fromdate,String todate,String userid){
double result = 0.00;
RecordSet rs = new RecordSet();
String attendancedays = "0";
String publicHolidays = "0";
// 入职日期
String companystartdate = getCompanyStartDate(userid);
int positionRank = getPositionRank(getPositionRankId(fromdate,todate,userid));
// 薪资调整日期
String salaryAdjustDate = getSalaryAdjustDate(fromdate,todate,userid);
if(salaryAdjustDate != null && !"".equals(salaryAdjustDate)){
if(belongCalendarBefore(salaryAdjustDate,fromdate,todate)) {
// 实际出勤天数(标准)
rs.executeQuery("select sum(attendancedays)as days from kq_format_total " +
" where resourceid = ? and kqdate >= ? and kqdate < ? and attendanceMins is not null and attendanceMins > 0 and absenteeismmins = 0", userid, fromdate, salaryAdjustDate);
while (rs.next()) {
attendancedays = Util.null2o(rs.getString("days"));
}
rs.writeLog("========= 实际出勤天数(薪酬调整前) 实际出勤天数 ======== "+ attendancedays);
// 法定(公众假日)天数
rs.executeQuery("select distinct groupid from kq_format_total " +
" where resourceid = ? and kqdate >= ? and kqdate < ?", userid, fromdate, todate);
while (rs.next()) {
String groupid = Util.null2String(rs.getString("groupid"));
// 法定(公众假日)天数
publicHolidays = getPublicHolidays(companystartdate, fromdate, salaryAdjustDate, groupid, userid);
}
rs.writeLog("========= 实际出勤天数(薪酬调整前) 法定(公众假日)天数 ======== "+ publicHolidays);
// 休息班 天数
String restdays = getRestSerialDaysBefore(fromdate, salaryAdjustDate, userid);
rs.writeLog("========= 实际出勤天数(薪酬调整前) 休息班 天数 ======== "+ restdays);
// 假期 天数
String attendLeaveDays = getAttendLeaveDaysBefore(fromdate, salaryAdjustDate, userid);
rs.writeLog("========= 实际出勤天数(薪酬调整前) 假期 天数 ======== "+ attendLeaveDays);
String days = floatAdd(attendancedays, attendLeaveDays);
// // 迟到 天数
// String latedays = getLateDaysBefore(fromdate, salaryAdjustDate, userid);
// days = floatAdd(days, latedays);
//
// // 早退 天数
// String leaveearlydays = getLeaveEarlyDaysBefore(fromdate, salaryAdjustDate, userid);
// days = floatAdd(days, leaveearlydays);
// 每次漏签、 计0.5天旷工 天数
String forgotdays = String.valueOf(getAbsenteeismDaysCountBeforeSalary(fromdate, salaryAdjustDate, userid));
days = floatSubtract(days, forgotdays);
// // 严重迟到/严重早退 天数 计0.5天旷工 天数
// String gravelateleavedays = String.valueOf(getGraveBeLateLeaveEarlyDaysBefore(fromdate, salaryAdjustDate, userid));
// days = floatSubtract(days, gravelateleavedays);
// 对于职级为1和2的员工实际出勤天数标准+带薪假(病、年、产、陪产、婚、丧、探亲、哺乳、调休)+迟到小时数(换算成班次所在天数)-漏签次数*0.5+休息班次
// 对于不是这两个职级的员工,实际出勤天数(标准)+带薪假(病、年、产、陪产、婚、丧、探亲、哺乳、调休)+迟到小时数(换算成班次所在天数)-漏签次数*0.5+公众假日(当前日期范围内要有班次的)
if (positionRank == 1 || positionRank == 2) {
result = Double.valueOf(floatAdd(days,restdays));
} else if (positionRank == 0) {
result = Double.valueOf(floatSubtract(attendLeaveDays, forgotdays));
} else {
result = Double.valueOf(floatAdd(days, publicHolidays));
}
}
}
if(result < 0){
result = 0.00;
}
return result;
}
/**
* 获取 实际出勤天数(薪酬调整后)
* 对于职级为1和2的员工实际出勤天数标准+带薪假(病、年、产、陪产、婚、丧、探亲、哺乳、调休)+迟到小时数(换算成班次所在天数)-漏签次数*0.5+休息班次
* 对于不是这两个职级的员工,实际出勤天数(标准)+带薪假(病、年、产、陪产、婚、丧、探亲、哺乳、调休)+迟到小时数(换算成班次所在天数)-漏签次数*0.5+公众假日(当前日期范围内要有班次的)
* 病假 按半天请假
* 年假 按半天请假
* 产假 按半天请假
* 陪产假 按半天请假
* 婚假 按半天请假
* 丧假 按半天请假
* 探亲假 按半天请假
* 哺乳假 按小时请假
* 调休假 按半天请假
* @param fromdate
* @param todate
* @param userid
* @return
*/
public static double getAttendDaysAfterSalary(String fromdate,String todate,String userid){
double result = 0.00;
RecordSet rs = new RecordSet();
String attendancedays = "0";
String publicHolidays = "0";
// 应出勤天数
double requiredworkdays = 0.00;
int positionRank = getPositionRank(getPositionRankId(fromdate,todate,userid));
// 入职日期
String companystartdate = getCompanyStartDate(userid);
String salaryattencedays = "0";
rs.executeQuery("select sum(attendancedays)as days from kq_format_total " +
" where resourceid = ? and kqdate >= ? and kqdate <= ? and attendanceMins is not null and attendanceMins > 0 and absenteeismmins = 0",userid,fromdate,todate);
while(rs.next()){
attendancedays = Util.null2o(rs.getString("days"));
}
// 应出勤天数
requiredworkdays = getWorkDays(fromdate, todate, userid);
// 薪资调整日期
String salaryAdjustDate = getSalaryAdjustDate(fromdate,todate,userid);
if(salaryAdjustDate != null && !"".equals(salaryAdjustDate)){
if(belongCalendar(salaryAdjustDate,fromdate,todate)) {
rs.executeQuery("select sum(attendancedays)as days from kq_format_total " +
" where resourceid = ? and kqdate >= ? and kqdate <= ? and attendanceMins is not null and attendanceMins > 0 and absenteeismmins = 0", userid, salaryAdjustDate, todate);
while (rs.next()) {
salaryattencedays = Util.null2o(rs.getString("days"));
}
// 法定(公众假日)天数
rs.executeQuery("select distinct groupid from kq_format_total " +
" where resourceid = ? and kqdate >= ? and kqdate <= ?", userid, fromdate, todate);
while (rs.next()) {
String groupid = Util.null2String(rs.getString("groupid"));
// 法定(公众假日)天数
publicHolidays = getPublicHolidays(companystartdate, salaryAdjustDate, todate, groupid, userid);
}
// 休息班 天数
String restdays = getRestSerialDaysAfter(salaryAdjustDate, todate, userid);
// 假期 天数
String attendLeaveDays = getAttendLeaveDaysAfter(salaryAdjustDate, todate, userid);
String days = floatAdd(salaryattencedays, attendLeaveDays);
// // 迟到 天数
// String latedays = getLateDaysAfter(salaryAdjustDate, todate, userid);
// days = floatAdd(days, latedays);
//
// // 早退 天数
// String leaveearlydays = getLeaveEarlyDaysAfter(fromdate, salaryAdjustDate, userid);
// days = floatAdd(days, leaveearlydays);
// 漏签 天数
String forgotdays = String.valueOf(getAbsenteeismDaysCountBeforeSalary(salaryAdjustDate, todate, userid));
days = floatSubtract(days, forgotdays);
// // 严重迟到/严重早退 天数
// String gravelateleavedays = String.valueOf(getGraveBeLateLeaveEarlyDaysAfter(salaryAdjustDate, todate, userid));
// days = floatSubtract(days, gravelateleavedays);
if (positionRank == 1 || positionRank == 2) {
result = Double.valueOf(floatAdd(days,restdays));
} else {
if(positionRank == 0){
result = Double.valueOf(days);
}else {
result = Double.valueOf(floatAdd(days, publicHolidays));
}
}
}else{
// 应出勤天数
requiredworkdays = getWorkDays(fromdate,todate,userid);
// 法定(公众假日)天数
rs.executeQuery("select distinct groupid from kq_format_total " +
" where resourceid = ? and kqdate >= ? and kqdate <= ?",userid,fromdate,todate);
while(rs.next()){
String groupid = Util.null2String(rs.getString("groupid"));
// 法定(公众假日)天数
publicHolidays = getPublicHolidays(companystartdate,fromdate,todate,groupid,userid);
}
// 休息班 天数
String restdays = getRestSerialDaysAfter(fromdate,todate,userid);
// 假期 天数
String attendLeaveDays = getAttendLeaveDaysAfter(fromdate,todate,userid);
String days = floatAdd(attendancedays,attendLeaveDays);
// // 迟到 天数
// String latedays = getLateDaysAfter(fromdate,todate,userid);
// days = floatAdd(days,latedays);
//
// // 早退 天数
// String leaveearlydays = getLeaveEarlyDaysAfter(fromdate,todate,userid);
// days = floatAdd(days,leaveearlydays);
// 漏签 天数
String forgotdays = String.valueOf(getAbsenteeismDaysCountBeforeSalary(fromdate,todate,userid));
days = floatSubtract(days,forgotdays);
// // 严重迟到/严重早退 天数
// String gravelateleavedays = String.valueOf(getGraveBeLateLeaveEarlyDaysAfter(fromdate,todate,userid));
// days = floatSubtract(days,gravelateleavedays);
if(positionRank == 1 || positionRank == 2){
result = Double.valueOf(floatAdd(days,restdays));
}else{
if(positionRank == 0){
result = Double.valueOf(days);
}else {
result = Double.valueOf(floatAdd(days, publicHolidays));
}
}
}
}else{
// 应出勤天数
requiredworkdays = getWorkDays(fromdate,todate,userid);
// 法定(公众假日)天数
rs.executeQuery("select distinct groupid from kq_format_total " +
" where resourceid = ? and kqdate >= ? and kqdate <= ?",userid,fromdate,todate);
while(rs.next()){
String groupid = Util.null2String(rs.getString("groupid"));
// 法定(公众假日)天数
publicHolidays = getPublicHolidays(companystartdate,fromdate,todate,groupid,userid);
}
// 休息班 天数
String restdays = getRestSerialDaysAfter(fromdate,todate,userid);
// 假期 天数
String attendLeaveDays = getAttendLeaveDaysAfter(fromdate,todate,userid);
String days = floatAdd(attendancedays,attendLeaveDays);
// // 迟到 天数
// String latedays = getLateDaysAfter(fromdate,todate,userid);
// days = floatAdd(days,latedays);
//
// // 早退 天数
// String leaveearlydays = getLeaveEarlyDaysAfter(fromdate,todate,userid);
// days = floatAdd(days,leaveearlydays);
// 漏签 天数
String forgotdays = String.valueOf(getAbsenteeismDaysCountBeforeSalary(fromdate,todate,userid));
days = floatSubtract(days,forgotdays);
// // 严重迟到/严重早退 天数
// String gravelateleavedays = String.valueOf(getGraveBeLateLeaveEarlyDaysAfter(fromdate,todate,userid));
// days = floatSubtract(days,gravelateleavedays);
if(positionRank == 1 || positionRank == 2){
result = Double.valueOf(floatAdd(days,restdays));
}else{
if(positionRank == 0){
result = Double.valueOf(days);
}else {
result = Double.valueOf(floatAdd(days, publicHolidays));
}
}
}
String result_int = String.valueOf((int)result);
String result_int1 = floatAdd(String.valueOf(result_int),"0.1");
String result_int5 = floatAdd(String.valueOf(result_int),"0.5");
String resultadd1 = floatAdd(String.valueOf(result_int),"1");
//实际出勤天数(薪酬调整前)
double attenddaysbeforesalary = getAttendDaysBeforeSalary(fromdate,todate,userid);
// 大于 应出勤天数
if(result > requiredworkdays){
result = requiredworkdays;
}else{
if(attenddaysbeforesalary+result > requiredworkdays){
double chae = attenddaysbeforesalary+result-requiredworkdays;
result = result - chae;
}
}
if(result < 0){
result = 0.00;
}
return result;
}
/**
* 判断 当天是否请了产假
* @param date
* @param userid
* @return
*/
public static boolean checkIsRestLeaveDay(String date,String userid){
boolean bool = false;
RecordSet rs = new RecordSet();
// 产假
String maternity_leave_id = rs.getPropValue("hrm_kqreport","maternity_leave_id");
rs.executeQuery("select id from kq_flow_split_leave where belongdate = ? and newleavetype in ("+ maternity_leave_id +") and resourceid = ? ",date,userid);
while(rs.next()){
bool = true;
}
return bool;
}
/**
* 获取 请假天数
*
* 病假 按半天请假
* 年假 按半天请假
* 产假 按半天请假
* 陪产假 按半天请假
* 婚假 按半天请假
* 丧假 按半天请假
* 探亲假 按半天请假
* 哺乳假 按小时请假
* 调休假 按半天请假
* @param fromdate
* @param todate
* @param userid
* @return
*/
public static String getAttendLeaveDaysBefore(String fromdate,String todate,String userid){
String result = "0";
RecordSet rs = new RecordSet();
RecordSet rs1 = new RecordSet();
String halfdays = "0";
String halfbackdays = "0";
String breastfeeddays = "0";
String breastfeedbackdays = "0";
// 病假 年假 产假 陪产假 婚假 丧假 探亲假 调休假
String halfday_leave_ids = rs.getPropValue("hrm_kqreport","halfday_leave_ids");
// 哺乳假
String breastfeed_leave_id = rs.getPropValue("hrm_kqreport","breastfeed_leave_id");
// 病假 年假 陪产假 婚假 丧假 探亲假 时长
rs.executeQuery("select sum(duration) as count from kq_flow_split_leave where belongdate >= ? and belongdate < ? and newleavetype in ("+ halfday_leave_ids +") and resourceid = ? ",fromdate,todate,userid);
while(rs.next()){
halfdays = Util.null2o(rs.getString("count"));
}
// 病假 年假 陪产假 婚假 丧假 探亲假 销假时长
rs.executeQuery("select sum(duration) as count from kq_flow_split_leaveback where belongdate >= ? and belongdate < ? and newleavetype in ("+ halfday_leave_ids +") and resourceid = ? ",fromdate,todate,userid);
while(rs.next()){
halfbackdays = Util.null2o(rs.getString("count"));
}
result = floatSubtract(halfdays,halfbackdays);
// //班次id
// String serialid = getSerialId(fromdate,todate,userid);
// String serialHours = getHoursBySerial(serialid);
//
// // 哺乳假 时长
// rs1.executeQuery("select sum(duration) as count from kq_flow_split_leave where belongDate >= ? and belongdate < ? and newleavetype in ("+ breastfeed_leave_id +") and resourceid = ? group by resourceid",fromdate,todate,userid);
// while(rs1.next()){
// breastfeeddays = Util.null2o(rs1.getString("count"));
// }
// // 哺乳假 销假时长
// rs1.executeQuery("select sum(duration) as count from kq_flow_split_leave where belongDate >= ? and belongdate < ? and newleavetype in ("+ breastfeed_leave_id +") and resourceid = ? group by resourceid",fromdate,todate,userid);
// while(rs1.next()){
// breastfeedbackdays = Util.null2o(rs1.getString("count"));
// }
//
// String breastdays = floatSubtract(breastfeeddays,breastfeedbackdays);
//
// if(floatCompare(serialHours,"0") > 0){
// String breadt_days = floatDivide(breastdays,serialHours);
// result = floatAdd(result,breadt_days);
// }
return result;
}
/**
* 获取 请假天数
*
* 病假 按半天请假
* 年假 按半天请假
* 产假 按半天请假
* 陪产假 按半天请假
* 婚假 按半天请假
* 丧假 按半天请假
* 探亲假 按半天请假
* 哺乳假 按小时请假
* 调休假 按半天请假
* @param fromdate
* @param todate
* @param userid
* @return
*/
public static String getAttendLeaveDaysAfter(String fromdate,String todate,String userid){
String result = "0";
RecordSet rs = new RecordSet();
RecordSet rs1 = new RecordSet();
String halfdays = "0";
String halfbackdays = "0";
String breastfeeddays = "0";
String breastfeedbackdays = "0";
// 病假 年假 产假 陪产假 婚假 丧假 探亲假 调休假
String halfday_leave_ids = rs.getPropValue("hrm_kqreport","halfday_leave_ids");
// 哺乳假
String breastfeed_leave_id = rs.getPropValue("hrm_kqreport","breastfeed_leave_id");
// 病假 年假 陪产假 婚假 丧假 探亲假 时长
rs.executeQuery("select sum(duration) as count from kq_flow_split_leave where belongdate >= ? and belongdate <= ? and newleavetype in ("+ halfday_leave_ids +") and resourceid = ? ",fromdate,todate,userid);
while(rs.next()){
halfdays = Util.null2o(rs.getString("count"));
}
// 病假 年假 陪产假 婚假 丧假 探亲假 销假时长
rs.executeQuery("select sum(duration) as count from kq_flow_split_leaveback where belongdate >= ? and belongdate <= ? and newleavetype in ("+ halfday_leave_ids +") and resourceid = ? ",fromdate,todate,userid);
while(rs.next()){
halfbackdays = Util.null2o(rs.getString("count"));
}
result = floatSubtract(halfdays,halfbackdays);
// //班次id
// String serialid = getSerialId(fromdate,todate,userid);
// String serialHours = getHoursBySerial(serialid);
//
// // 哺乳假 时长
// rs1.executeQuery("select sum(duration) as count from kq_flow_split_leave where belongDate >= ? and belongdate <= ? and newleavetype in ("+ breastfeed_leave_id +") and resourceid = ? group by resourceid",fromdate,todate,userid);
// while(rs1.next()){
// breastfeeddays = Util.null2o(rs1.getString("count"));
// }
// // 哺乳假 销假时长
// rs1.executeQuery("select sum(duration) as count from kq_flow_split_leaveback where belongDate >= ? and belongdate <= ? and newleavetype in ("+ breastfeed_leave_id +") and resourceid = ? group by resourceid",fromdate,todate,userid);
// while(rs1.next()){
// breastfeedbackdays = Util.null2o(rs1.getString("count"));
// }
//
// String breastdays = floatSubtract(breastfeeddays,breastfeedbackdays);
//
// if(floatCompare(serialHours,"0") > 0){
// String breadt_days = floatDivide(breastdays,serialHours);
// result = floatAdd(result,breadt_days);
// }
return result;
}
/**
* 获取哺乳假分钟数
* @param fromdate
* @param todate
* @param userid
* @return
*/
public static int getBreastMins(String fromdate,String todate,String userid){
int mins = 0;
RecordSet rs = new RecordSet();
RecordSet rs1 = new RecordSet();
// 哺乳假
String breastfeed_leave_id = rs1.getPropValue("hrm_kqreport","breastfeed_leave_id");
double breastfeeddays = 0;
double breastfeedbackdays = 0;
// 哺乳假 时长
rs.executeQuery("select sum(duration) as count from kq_flow_split_leave where belongDate >= ? and belongdate <= ? and newleavetype in ("+ breastfeed_leave_id +") and resourceid = ? group by resourceid",fromdate,todate,userid);
while(rs.next()){
breastfeeddays = Util.getDoubleValue(rs.getString("count"),0);
}
// 哺乳假 销假时长
rs1.executeQuery("select sum(duration) as count from kq_flow_split_leaveback where belongDate >= ? and belongdate <= ? and newleavetype in ("+ breastfeed_leave_id +") and resourceid = ? group by resourceid",fromdate,todate,userid);
while(rs1.next()){
breastfeedbackdays = Util.getDoubleValue(rs1.getString("count"),0);
}
double breastdays = breastfeeddays-breastfeedbackdays;
if(breastdays > 0){
mins = (int)breastdays * 60;
}
return mins;
}
/**
* 获取 假期天数(调薪前)
* @param leavetype
* @param fromdate
* @param todate
* @param userid
* @return
*/
public static double getBeforeSalaryLeaveDays(int leavetype,String fromdate,String todate,String userid){
double result = 0.00;
// 薪资调整日期
String salaryAdjustDate = getSalaryAdjustDate(fromdate,todate,userid);
if(salaryAdjustDate != null && !"".equals(salaryAdjustDate)){
if(belongCalendar(salaryAdjustDate,fromdate,todate)) {
String leavedays = getLeaveDaysBefore(leavetype, fromdate, salaryAdjustDate, userid);
result = Double.valueOf(leavedays);
}
}
return result;
}
/**
* 获取 假期天数(调薪后)
* @param leavetype
* @param fromdate
* @param todate
* @param userid
* @return
*/
public static double getAfterSalaryLeaveDays(int leavetype,String fromdate,String todate,String userid){
double result = 0.00;
// 薪资调整日期
String salaryAdjustDate = getSalaryAdjustDate(fromdate,todate,userid);
if(salaryAdjustDate != null && !"".equals(salaryAdjustDate)){
if(belongCalendar(salaryAdjustDate,fromdate,todate)) {
String leavedays = getLeaveDaysAfter(leavetype, salaryAdjustDate, todate, userid);
result = Double.valueOf(leavedays);
}else{
String leavedays = getLeaveDaysAfter(leavetype, fromdate, todate, userid);
result = Double.valueOf(leavedays);
}
}else{
String leavedays = getLeaveDaysAfter(leavetype,fromdate,todate,userid);
result = Double.valueOf(leavedays);
}
return result;
}
/**
* 获取 迟到 天数
* @param fromdate
* @param todate
* @param userid
* @return
*/
public static String getLateDaysBefore(String fromdate,String todate,String userid){
String result = "0";
RecordSet rs = new RecordSet();
String serialid = getSerialId(fromdate,todate,userid);
String serial_hours = getHoursBySerial(serialid);
// 迟到
rs.executeQuery("select sum(belatemins) as count from kq_format_total where kqdate >= ? and kqdate < ? and resourceid = ? ",fromdate,todate,userid);
while(rs.next()){
String latemins = Util.null2o(rs.getString("count"));
String latehours = floatDivide(latemins,"60");
if(floatCompare(serial_hours,"0") > 0){
result = floatDivide(latehours,serial_hours);
}
}
return result;
}
/**
* 获取 迟到 天数
* @param fromdate
* @param todate
* @param userid
* @return
*/
public static String getLateDaysAfter(String fromdate,String todate,String userid){
String result = "0";
RecordSet rs = new RecordSet();
String serialid = getSerialId(fromdate,todate,userid);
String serial_hours = getHoursBySerial(serialid);
// 迟到
rs.executeQuery("select sum(belatemins) as count from kq_format_total where kqdate >= ? and kqdate <= ? and resourceid = ? ",fromdate,todate,userid);
while(rs.next()){
String latemins = Util.null2o(rs.getString("count"));
String latehours = floatDivide(latemins,"60");
if(floatCompare(serial_hours,"0") > 0){
result = floatDivide(latehours,serial_hours);
}
}
return result;
}
/**
* 获取 早退 天数
* @param fromdate
* @param todate
* @param userid
* @return
*/
public static String getLeaveEarlyDaysBefore(String fromdate,String todate,String userid){
String result = "0";
RecordSet rs = new RecordSet();
String serialid = getSerialId(fromdate,todate,userid);
String serial_hours = getHoursBySerial(serialid);
// 早退
rs.executeQuery("select sum(leaveearlymins) as count from kq_format_total where kqdate >= ? and kqdate < ? and resourceid = ? ",fromdate,todate,userid);
while(rs.next()){
String latemins = Util.null2o(rs.getString("count"));
String latehours = floatDivide(latemins,"60");
if(floatCompare(serial_hours,"0") > 0){
result = floatDivide(latehours,serial_hours);
}
}
return result;
}
/**
* 获取 早退 天数
* @param fromdate
* @param todate
* @param userid
* @return
*/
public static String getLeaveEarlyDaysAfter(String fromdate,String todate,String userid){
String result = "0";
RecordSet rs = new RecordSet();
String serialid = getSerialId(fromdate,todate,userid);
String serial_hours = getHoursBySerial(serialid);
// 早退
rs.executeQuery("select sum(leaveearlymins) as count from kq_format_total where kqdate >= ? and kqdate <= ? and resourceid = ? ",fromdate,todate,userid);
while(rs.next()){
String latemins = Util.null2o(rs.getString("count"));
String latehours = floatDivide(latemins,"60");
if(floatCompare(serial_hours,"0") > 0){
result = floatDivide(latehours,serial_hours);
}
}
return result;
}
/**
* 获取 休息班次 天数
* @param fromDate
* @param toDate
* @param userid
* @return
*/
public static String getRestSerialDaysBefore(String fromDate, String toDate,String userid){
String result = "0";
RecordSet rs = new RecordSet();
KQGroupMemberComInfo groupMemberComInfo = new KQGroupMemberComInfo();
String rest_serial_id = rs.getPropValue("hrm_kqreport","rest_serial_id");
String rest2_serial_id = rs.getPropValue("hrm_kqreport","rest2_serial_id");
rs.executeQuery("select count(resourceid) as count from kq_format_total where kqdate >= ? and kqdate < ? and resourceid = ? and serialid = ?",fromDate,toDate,userid,rest_serial_id);
while(rs.next()){
result = Util.null2o(rs.getString("count"));
}
rs.executeQuery("select * from kq_format_total " +
" where resourceid = ? and kqdate >= ? and kqdate <= ? and serialid = ?",userid,fromDate,toDate,rest2_serial_id);
while(rs.next()) {
String groupid = Util.null2String(rs.getString("groupid"));
String kqdate = Util.null2String(rs.getString("kqdate"));
KQGroupEntity kqGroupEntity = groupMemberComInfo.getUserKQGroupInfo(userid,kqdate);
if(kqGroupEntity != null) {
String kqtype = kqGroupEntity.getKqtype();
//固定班制
if ("1".equals(kqtype)) {
if (isHolidayOrRelaxDay(groupid, kqdate)) {
result = floatAdd(result, "1");
}
}
}
}
return result;
}
/**
* 获取 休息班次 天数
* @param fromDate
* @param toDate
* @param userid
* @return
*/
public static String getRestSerialDaysAfter(String fromDate, String toDate,String userid){
String result = "0";
RecordSet rs = new RecordSet();
KQGroupMemberComInfo groupMemberComInfo = new KQGroupMemberComInfo();
String rest_serial_id = rs.getPropValue("hrm_kqreport","rest_serial_id");
String rest2_serial_id = rs.getPropValue("hrm_kqreport","rest2_serial_id");
rs.executeQuery("select * from kq_format_detail where kqdate >= ? and kqdate <= ? and resourceid = ? and serialid = ? ",fromDate,toDate,userid,rest_serial_id);
while(rs.next()){
String kqdate = Util.null2String(rs.getString("kqdate"));
//不是请了产假
if(!checkIsRestLeaveDay(kqdate,userid)){
result = floatAdd(result, "1");
}
}
rs.executeQuery("select * from kq_format_total " +
" where resourceid = ? and kqdate >= ? and kqdate <= ? and serialid = ?",userid,fromDate,toDate,rest2_serial_id);
while(rs.next()) {
String groupid = Util.null2String(rs.getString("groupid"));
String kqdate = Util.null2String(rs.getString("kqdate"));
KQGroupEntity kqGroupEntity = groupMemberComInfo.getUserKQGroupInfo(userid,kqdate);
if(kqGroupEntity!=null){
String kqtype = kqGroupEntity.getKqtype();
//固定班制
if("1".equals(kqtype)) {
if (isHolidayOrRelaxDay(groupid, kqdate)) {
//不是请了产假
if(!checkIsRestLeaveDay(kqdate,userid)){
result = floatAdd(result, "1");
}
}
}
}
}
return result;
}
/**
* 获取 班次id
* @param fromDate
* @param toDate
* @param userid
* @return
*/
public static String getSerialId(String fromDate, String toDate,String userid){
String result = "";
RecordSet rs = new RecordSet();
rs.executeQuery("select distinct a.serialid from kq_format_total a,kq_ShiftManagement b " +
" where a.serialid=b.id and a.resourceid = ? and a.kqdate >= ? and a.kqdate <= ? and b.is_rest=0 ",userid,fromDate,toDate);
while(rs.next()){
result = Util.null2String(rs.getString("serialid"));
}
return result;
}
/**
* 判断 指定天数 是否是 公众假日 true 是 false 否
* @param groupid
* @param date
* @return
*/
public static boolean isHolidayOrRelaxDay(String groupid,String date){
boolean bool = false;
RecordSet rs = new RecordSet();
rs.executeQuery("select * from kq_HolidaySet where groupid=? and holidayDate=?",groupid,date);
while(rs.next()){
// 1-公众假日 2-调配工作日 3-调配休息日
int changeType = Util.getIntValue(rs.getString("changeType"));
if(changeType == 1 || changeType == 3){
bool = true;
}
}
return bool;
}
/**
* 判断 指定天数 是否是 调配休息日 true 是 false 否
* @param groupid
* @param date
* @return
*/
public static boolean isAllocateRestDay(String groupid,String date){
boolean bool = false;
RecordSet rs = new RecordSet();
rs.executeQuery("select * from kq_HolidaySet where groupid=? and holidayDate=?",groupid,date);
while(rs.next()){
// 1-公众假日 2-调配工作日 3-调配休息日
int changeType = Util.getIntValue(rs.getString("changeType"));
if(changeType == 3){
bool = true;
}
}
return bool;
}
/**
* 判断 指定天数 是否是 调配工作日 true 是 false 否
* @param groupid
* @param date
* @return
*/
public static boolean isAllocateWorkDay(String groupid,String date){
boolean bool = false;
RecordSet rs = new RecordSet();
rs.executeQuery("select * from kq_HolidaySet where groupid=? and holidayDate=?",groupid,date);
while(rs.next()){
// 1-公众假日 2-调配工作日 3-调配休息日
int changeType = Util.getIntValue(rs.getString("changeType"));
if(changeType == 2){
bool = true;
}
}
return bool;
}
/**
* 判断 指定天数 是否是 调配工作日 true 是 false 否
* @param groupid
* @param date
* @return
*/
public static boolean isAllocateHolidayDay(String groupid,String date){
boolean bool = false;
RecordSet rs = new RecordSet();
rs.executeQuery("select * from kq_HolidaySet where groupid=? and holidayDate=?",groupid,date);
while(rs.next()){
// 1-公众假日 2-调配工作日 3-调配休息日
int changeType = Util.getIntValue(rs.getString("changeType"));
if(changeType == 1){
bool = true;
}
}
return bool;
}
private static String[] parseDate(String date){
if (StringUtils.isEmpty(date)) {
return new String[]{"1990", "1", "1"};
}
try {
String[] split = date.split("-");
List<String> list = new ArrayList<>(Arrays.asList(split));
// 只有年
if (list.size() == 1) {
// 添加月
list.add("1");
// 添加日
list.add("1");
}
// 只有年月
else if (list.size() == 2) {
list.add("1");
}
return list.toArray(new String[]{});
}catch (Exception e){
e.printStackTrace();
}
return null;
}
/**
* 判断 日期是否是 周六 或 周日
* @param dateString
* @return
*/
public static boolean isSaturdayOrSunday(String dateString) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date date = null;
boolean flag = false;
try {
date = format.parse(dateString);
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
if(dayOfWeek == Calendar.SATURDAY || dayOfWeek == Calendar.SUNDAY){
flag = true;
}
} catch (ParseException e) {
e.printStackTrace();
}
return flag;
}
/**
* 判断一个时间是否在一个时间段内
*
* @param nowTimee 指定时间
* @param beginTimee 开始时间
* @param endTimee 结束时间
*/
public static boolean belongCalendarBefore(String nowTimee, String beginTimee, String endTimee) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date nowTime = null;
Date beginTime = null;
Date endTime = null;
boolean b = false;
try {
nowTime = format.parse(nowTimee);
beginTime = format.parse(beginTimee);
endTime = format.parse(endTimee);
Calendar date = Calendar.getInstance();
date.setTime(nowTime);
Calendar begin = Calendar.getInstance();
begin.setTime(beginTime);
Calendar end = Calendar.getInstance();
end.setTime(endTime);
if(nowTimee.equals(endTimee)){
b = true;
}else if(date.after(begin) && date.before(end)){//在时间段内
b = true;
}
} catch (Exception ex) {
ex.printStackTrace();
}
return b;
}
/**
* 判断一个时间是否在一个时间段内
*
* @param nowTimee 指定时间
* @param beginTimee 开始时间
* @param endTimee 结束时间
*/
public static boolean belongCalendar(String nowTimee, String beginTimee, String endTimee) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date nowTime = null;
Date beginTime = null;
Date endTime = null;
boolean b = false;
try {
nowTime = format.parse(nowTimee);
beginTime = format.parse(beginTimee);
endTime = format.parse(endTimee);
Calendar date = Calendar.getInstance();
date.setTime(nowTime);
Calendar begin = Calendar.getInstance();
begin.setTime(beginTime);
Calendar end = Calendar.getInstance();
end.setTime(endTime);
if(nowTimee.equals(endTimee) || nowTimee.equals(beginTimee)){
b = true;
}else if(date.after(begin) && date.before(end)){//在时间段内
b = true;
}
} catch (Exception ex) {
ex.printStackTrace();
}
return b;
}
}