餐补优化

dev-zm-svn
zhangming 10 months ago
parent a5fe18cba4
commit 4754e06962

@ -26,10 +26,14 @@ import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols; import java.text.DecimalFormatSymbols;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date; import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.UUID; import java.util.UUID;
/** /**
@ -88,6 +92,9 @@ public class HandleCBDataThread extends BaseBean implements Runnable{
} }
// 考勤二开--出差餐补 // 考勤二开--出差餐补
String mealAllowance = getMealAllowance(userId, kqDate); String mealAllowance = getMealAllowance(userId, kqDate);
if (!(StringUtils.equals(statAllowance, "0") && StringUtils.equals(otherStatAllowance, "0"))) {
mealAllowance = "0";
}
baseBean.writeLog("mealAllowance:" + mealAllowance); baseBean.writeLog("mealAllowance:" + mealAllowance);
if (StringUtils.isEmpty(mealAllowance)) { if (StringUtils.isEmpty(mealAllowance)) {
mealAllowance = "0"; mealAllowance = "0";
@ -172,6 +179,8 @@ public class HandleCBDataThread extends BaseBean implements Runnable{
value = rs.getString("zeropoint"); value = rs.getString("zeropoint");
} }
} }
} else {
value = "0";
} }
} }
} catch (Exception e) { } catch (Exception e) {
@ -195,10 +204,31 @@ public class HandleCBDataThread extends BaseBean implements Runnable{
nightShiftList.add(shift); nightShiftList.add(shift);
} }
} }
if (nightShiftList != null & nightShiftList.size() > 0) {
//获取加班时长
Map<String,Object> dailyFlowOverTimeData = getDailyFlowOverTimeDataAllowance(userId, kqDate);
// 获取责任制、排班次班次
Set<String> zrzbcSet = new HashSet<>();
Set<String> pbzbcSet = new HashSet<>();
String acqSql = "select kqgroup, grouptype from uf_ZeroPointSubSft";
rs.executeQuery(acqSql);
while (rs.next()) {
String kqgroup = Util.null2String(rs.getString("kqgroup"));
String grouptype = Util.null2String(rs.getString("grouptype"));
if (StringUtils.isNotBlank(kqgroup) && StringUtils.equals(grouptype, "0")) {
zrzbcSet.addAll(Arrays.asList(kqgroup.split(",")));
}
if (StringUtils.isNotBlank(kqgroup) && StringUtils.equals(grouptype, "1")) {
pbzbcSet.addAll(Arrays.asList(kqgroup.split(",")));
}
}
if (nightShiftList != null & nightShiftList.size() > 0) {
KQGroupMemberComInfo kqGroupMemberComInfo = new KQGroupMemberComInfo();
HostarUtil houtil = new HostarUtil(); HostarUtil houtil = new HostarUtil();
//先获取到实际打卡时长 //先获取到实际打卡时长
Map<String, Double> signminsMap = new HashMap<>();
Map<String, Double> attendanceMinsMap = new HashMap<>(); Map<String, Double> attendanceMinsMap = new HashMap<>();
String acqAttenSql = " select resourceid, attendancemins, kqdate,signmins from kq_format_total where resourceid in (" + userId + ") and kqdate >='" + kqDate + "' and kqdate <='" + kqDate + "'"; String acqAttenSql = " select resourceid, attendancemins, kqdate,signmins from kq_format_total where resourceid in (" + userId + ") and kqdate >='" + kqDate + "' and kqdate <='" + kqDate + "'";
rs.executeQuery(acqAttenSql); rs.executeQuery(acqAttenSql);
@ -208,7 +238,10 @@ public class HandleCBDataThread extends BaseBean implements Runnable{
Double signmins = Util.getDoubleValue(Util.null2String(rs.getString("signmins"))); Double signmins = Util.getDoubleValue(Util.null2String(rs.getString("signmins")));
String kqdate = Util.null2String(rs.getString("kqdate")); String kqdate = Util.null2String(rs.getString("kqdate"));
if (signmins >= 0.00 ) { if (signmins >= 0.00 ) {
attendanceMinsMap.put(resourceid+"|"+kqdate, signmins); signminsMap.put(resourceid+"|"+kqdate, signmins);
}
if (attendancemins >= 0.00 ) {
attendanceMinsMap.put(resourceid+"|"+kqdate, attendancemins);
} }
} }
KQWorkTime kqWorkTime = new KQWorkTime(); KQWorkTime kqWorkTime = new KQWorkTime();
@ -221,11 +254,38 @@ public class HandleCBDataThread extends BaseBean implements Runnable{
if ( !nightShiftList.contains(String.valueOf(serialid))) { if ( !nightShiftList.contains(String.valueOf(serialid))) {
return "0"; return "0";
} }
} else {
return "0";
} }
} }
Double signmins = Util.getDoubleValue(Util.null2String(attendanceMinsMap.get(userId + "|" + kqDate))); String groupId = kqGroupMemberComInfo.getKQGroupId(userId, kqDate);
value = (( signmins / 60) >= 8.00 ) ? "1" : "0";
if ((!CollectionUtils.isEmpty(pbzbcSet)) && pbzbcSet.contains(groupId)) {
double workingDayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(userId + "|" + kqDate + "|workingDayOvertime_4leave")));
workingDayOvertime_4leave = workingDayOvertime_4leave < 0 ? 0 : workingDayOvertime_4leave;
double restDayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(userId + "|" + kqDate + "|restDayOvertime_4leave")));
restDayOvertime_4leave = restDayOvertime_4leave < 0 ? 0 : restDayOvertime_4leave;
double holidayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(userId + "|" + kqDate + "|holidayOvertime_4leave")));
holidayOvertime_4leave = holidayOvertime_4leave < 0 ? 0 : holidayOvertime_4leave;
double workingDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(userId + "|" + kqDate + "|workingDayOvertime_nonleave")));
workingDayOvertime_nonleave = workingDayOvertime_nonleave < 0 ? 0 : workingDayOvertime_nonleave;
double restDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(userId + "|" + kqDate + "|restDayOvertime_nonleave")));
restDayOvertime_nonleave = restDayOvertime_nonleave < 0 ? 0 : restDayOvertime_nonleave;
double holidayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(userId + "|" + kqDate + "|holidayOvertime_nonleave")));
holidayOvertime_nonleave = holidayOvertime_nonleave < 0 ? 0 : holidayOvertime_nonleave;
double temp = workingDayOvertime_4leave + restDayOvertime_4leave + holidayOvertime_4leave +
workingDayOvertime_nonleave + restDayOvertime_nonleave + holidayOvertime_nonleave;
Double attendanceMins = Util.getDoubleValue(Util.null2String(attendanceMinsMap.get(userId + "|" + kqDate)));
value = (Math.floor(((attendanceMins < 0.00 ? 0.00 : attendanceMins) + temp) / 60) >= 8.00) ? "1" : "0";
}
if ((!CollectionUtils.isEmpty(zrzbcSet)) && zrzbcSet.contains(groupId)) {
Double signmins = Util.getDoubleValue(Util.null2String(signminsMap.get(userId + "|" + kqDate)));
value = (( signmins / 60) >= 9.00 ) ? "1" : "0";
}
} }
} catch (Exception e) { } catch (Exception e) {
bb.writeLog("get NightShiftSubsidy error:" + e.getMessage()); bb.writeLog("get NightShiftSubsidy error:" + e.getMessage());
@ -245,14 +305,30 @@ public class HandleCBDataThread extends BaseBean implements Runnable{
} }
//获取加班时长 //获取加班时长
// Map<String,Object> dailyFlowOverTimeData = getDailyFlowOverTimeDataAllowance(userId, kqDate); Map<String,Object> dailyFlowOverTimeData = getDailyFlowOverTimeDataAllowance(userId, kqDate);
// 获取责任制、排班次班次
Set<String> zrzbcSet = new HashSet<>();
Set<String> pbzbcSet = new HashSet<>();
String acqSql = "select kqgroup, grouptype from uf_ZeroPointSubSft";
rs.executeQuery(acqSql);
while (rs.next()) {
String kqgroup = Util.null2String(rs.getString("kqgroup"));
String grouptype = Util.null2String(rs.getString("grouptype"));
if (StringUtils.isNotBlank(kqgroup) && StringUtils.equals(grouptype, "0")) {
zrzbcSet.addAll(Arrays.asList(kqgroup.split(",")));
}
if (StringUtils.isNotBlank(kqgroup) && StringUtils.equals(grouptype, "1")) {
pbzbcSet.addAll(Arrays.asList(kqgroup.split(",")));
}
}
String otherstatsub = Util.null2String(bb.getPropValue("project_hostar", "otherstatsubcompany")); String otherstatsub = Util.null2String(bb.getPropValue("project_hostar", "otherstatsubcompany"));
if (StringUtils.isNotBlank(otherstatsub)) { if (StringUtils.isNotBlank(otherstatsub)) {
//查询该分部下的人员 //查询该分部下的人员
List<String> resIds = new ArrayList<>(); List<String> resIds = new ArrayList<>();
sqlWhere += " and a.subcompanyid1 in (" + otherstatsub + ") "; sqlWhere += " and a.subcompanyid1 in (" + otherstatsub + ") ";
String acqResSql = "select a.id from hrmresource a where a.status in (0,1,2,3) " + sqlWhere; String acqResSql = "select a.id from hrmresource a where 1=1 " + sqlWhere;
bb.writeLog("acqResSql: " + acqResSql); bb.writeLog("acqResSql: " + acqResSql);
rs.executeQuery(acqResSql); rs.executeQuery(acqResSql);
@ -263,11 +339,13 @@ public class HandleCBDataThread extends BaseBean implements Runnable{
} }
} }
// bb.writeLog("resIds: " + resIds); // bb.writeLog("resIds: " + resIds);
KQGroupMemberComInfo kqGroupMemberComInfo = new KQGroupMemberComInfo();
if (resIds != null && resIds.size() > 0 && StringUtils.isNotBlank(kqDate)) { if (resIds != null && resIds.size() > 0 && StringUtils.isNotBlank(kqDate)) {
HostarUtil houtil = new HostarUtil(); HostarUtil houtil = new HostarUtil();
//先获取到实际打卡时长 //先获取到实际打卡时长
Map<String, Double> signminsMap = new HashMap<>();
Map<String, Double> attendanceMinsMap = new HashMap<>(); Map<String, Double> attendanceMinsMap = new HashMap<>();
String acqAttenSql = " select resourceid, attendancemins, kqdate,signmins from kq_format_total where resourceid in (" + String.join(",", resIds) + ") and kqdate >='" + kqDate + "' and kqdate <='" + kqDate + "'"; String acqAttenSql = " select resourceid, attendancemins, kqdate,signmins from kq_format_total where resourceid in (" + String.join(",", resIds) + ") and kqdate >='" + kqDate + "' and kqdate <='" + kqDate + "'";
rs.executeQuery(acqAttenSql); rs.executeQuery(acqAttenSql);
@ -276,8 +354,13 @@ public class HandleCBDataThread extends BaseBean implements Runnable{
Double attendancemins = Util.getDoubleValue(Util.null2String(rs.getString("attendancemins"))); Double attendancemins = Util.getDoubleValue(Util.null2String(rs.getString("attendancemins")));
Double signmins = Util.getDoubleValue(Util.null2String(rs.getString("signmins"))); Double signmins = Util.getDoubleValue(Util.null2String(rs.getString("signmins")));
String kqdate = Util.null2String(rs.getString("kqdate")); String kqdate = Util.null2String(rs.getString("kqdate"));
if (signmins >= 0.00) { if (signmins >= 0.00 ) {
attendanceMinsMap.put(resourceid + "|" + kqdate, signmins); // double signTemp = signmins / 60;
// int quotient = (int) (signTemp / 6);
signminsMap.put(resourceid+"|"+kqdate, signmins);
}
if (attendancemins >= 0.00 ) {
attendanceMinsMap.put(resourceid+"|"+kqdate, attendancemins);
} }
} }
List<String> removeRes = new ArrayList<>(); List<String> removeRes = new ArrayList<>();
@ -398,35 +481,57 @@ public class HandleCBDataThread extends BaseBean implements Runnable{
if (StringUtils.isNotEmpty(addr) && (addr.contains("鸿仕达") || addr.toLowerCase().contains("hostar"))) { if (StringUtils.isNotEmpty(addr) && (addr.contains("鸿仕达") || addr.toLowerCase().contains("hostar"))) {
signNumber = signNumber + 1; signNumber = signNumber + 1;
} }
if (StringUtils.isNotEmpty(showaddress) && (showaddress.contains("台湾") || showaddress.contains("越南")
|| showaddress.toLowerCase().contains("hostar") || showaddress.toLowerCase().contains("vinh") || showaddress.toLowerCase().contains("ha noi"))) {
signNumber = signNumber + 1;
}
if (StringUtils.isNotEmpty(addr) && (addr.contains("台湾") || addr.contains("越南")
|| addr.toLowerCase().contains("hostar") || addr.toLowerCase().contains("vinh") || addr.toLowerCase().contains("ha noi"))) {
signNumber = signNumber + 1;
}
} }
} }
String groupId = kqGroupMemberComInfo.getKQGroupId(res, kqDate);
if (signNumber == 0) { if (signNumber == 0) {
// double workingDayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|workingDayOvertime_4leave"))); double minValue = 0.00;
// workingDayOvertime_4leave = workingDayOvertime_4leave < 0 ? 0 : workingDayOvertime_4leave; if ((!CollectionUtils.isEmpty(pbzbcSet)) && pbzbcSet.contains(groupId)) {
// double restDayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|restDayOvertime_4leave"))); double workingDayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|workingDayOvertime_4leave")));
// restDayOvertime_4leave = restDayOvertime_4leave < 0 ? 0 : restDayOvertime_4leave; workingDayOvertime_4leave = workingDayOvertime_4leave < 0 ? 0 : workingDayOvertime_4leave;
// double holidayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|holidayOvertime_4leave"))); double restDayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|restDayOvertime_4leave")));
// holidayOvertime_4leave = holidayOvertime_4leave < 0 ? 0 : holidayOvertime_4leave; restDayOvertime_4leave = restDayOvertime_4leave < 0 ? 0 : restDayOvertime_4leave;
// double holidayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|holidayOvertime_4leave")));
// double workingDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|workingDayOvertime_nonleave"))); holidayOvertime_4leave = holidayOvertime_4leave < 0 ? 0 : holidayOvertime_4leave;
// workingDayOvertime_nonleave = workingDayOvertime_nonleave < 0 ? 0 : workingDayOvertime_nonleave;
// double restDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|restDayOvertime_nonleave"))); double workingDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|workingDayOvertime_nonleave")));
// restDayOvertime_nonleave = restDayOvertime_nonleave < 0 ? 0 : restDayOvertime_nonleave; workingDayOvertime_nonleave = workingDayOvertime_nonleave < 0 ? 0 : workingDayOvertime_nonleave;
// double holidayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|holidayOvertime_nonleave"))); double restDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|restDayOvertime_nonleave")));
// holidayOvertime_nonleave = holidayOvertime_nonleave < 0 ? 0 : holidayOvertime_nonleave; restDayOvertime_nonleave = restDayOvertime_nonleave < 0 ? 0 : restDayOvertime_nonleave;
// double holidayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|holidayOvertime_nonleave")));
// double temp = workingDayOvertime_4leave + restDayOvertime_4leave + holidayOvertime_4leave + holidayOvertime_nonleave = holidayOvertime_nonleave < 0 ? 0 : holidayOvertime_nonleave;
// workingDayOvertime_nonleave + restDayOvertime_nonleave + holidayOvertime_nonleave;
// bb.writeLog("-=-temp:" + temp); double temp = workingDayOvertime_4leave + restDayOvertime_4leave + holidayOvertime_4leave +
Double signmins = Util.getDoubleValue(Util.null2String(attendanceMinsMap.get(res + "|" + kqDate))); workingDayOvertime_nonleave + restDayOvertime_nonleave + holidayOvertime_nonleave;
// bb.writeLog("-=-attendanceMins:" + attendanceMins); Double attendanceMins = Util.getDoubleValue(Util.null2String(attendanceMinsMap.get(res + "|" + kqDate)));
double v = Math.round ((signmins < 0.00) ? 0.00 : signmins) / 60.00; if (attendanceMins < 0.00) {
value = "0"; attendanceMins = 0.00;
if (v >= 4.00 && v < 9.00) { }
value = "1"; minValue = attendanceMins + temp;
} else if (v >= 9.00) { double v = Math.round (Math.max(minValue, 0.00)) / 60.00;
value = "2"; value = "0";
if (v >= 4.00 && v < 9.00) {
value = "1";
} else if (v >= 9.00) {
value = "2";
}
} }
if ((!CollectionUtils.isEmpty(zrzbcSet)) && zrzbcSet.contains(groupId)) {
minValue = Util.getDoubleValue(Util.null2String(signminsMap.get(res + "|" + kqDate)));
value = String.valueOf(Math.floor((Math.max(minValue, 0.00)) / 360));
}
//
} }
} }
} }
@ -515,7 +620,23 @@ public class HandleCBDataThread extends BaseBean implements Runnable{
} }
//获取加班时长 //获取加班时长
// Map<String, Object> dailyFlowOverTimeData = getDailyFlowOverTimeDataAllowance(userId, kqDate); Map<String, Object> dailyFlowOverTimeData = getDailyFlowOverTimeDataAllowance(userId, kqDate);
// 获取责任制、排班次班次
Set<String> zrzbcSet = new HashSet<>();
Set<String> pbzbcSet = new HashSet<>();
String acqSql = "select kqgroup, grouptype from uf_ZeroPointSubSft";
rs.executeQuery(acqSql);
while (rs.next()) {
String kqgroup = Util.null2String(rs.getString("kqgroup"));
String grouptype = Util.null2String(rs.getString("grouptype"));
if (StringUtils.isNotBlank(kqgroup) && StringUtils.equals(grouptype, "0")) {
zrzbcSet.addAll(Arrays.asList(kqgroup.split(",")));
}
if (StringUtils.isNotBlank(kqgroup) && StringUtils.equals(grouptype, "1")) {
pbzbcSet.addAll(Arrays.asList(kqgroup.split(",")));
}
}
//获取夜班班次 //获取夜班班次
List<String> nightShiftList = new ArrayList<>(); List<String> nightShiftList = new ArrayList<>();
@ -533,7 +654,7 @@ public class HandleCBDataThread extends BaseBean implements Runnable{
//查询该分部下的人员 //查询该分部下的人员
List<String> resIds = new ArrayList<>(); List<String> resIds = new ArrayList<>();
sqlWhere += " and a.subcompanyid1 in (" + nightshiftsub + ") "; sqlWhere += " and a.subcompanyid1 in (" + nightshiftsub + ") ";
String acqResSql = "select a.id from hrmresource a where a.status in (0,1,2,3) " + sqlWhere; String acqResSql = "select a.id from hrmresource a where 1=1 " + sqlWhere;
bb.writeLog("acqResSql: " + acqResSql); bb.writeLog("acqResSql: " + acqResSql);
rs.executeQuery(acqResSql); rs.executeQuery(acqResSql);
@ -544,10 +665,12 @@ public class HandleCBDataThread extends BaseBean implements Runnable{
} }
} }
// bb.writeLog("resIds: " + resIds); // bb.writeLog("resIds: " + resIds);
KQGroupMemberComInfo kqGroupMemberComInfo = new KQGroupMemberComInfo();
if (resIds != null && resIds.size() > 0) { if (resIds != null && resIds.size() > 0) {
HostarUtil houtil = new HostarUtil(); HostarUtil houtil = new HostarUtil();
//先获取到出勤时长 //先获取到出勤时长
Map<String, Double> signminsMap = new HashMap<>();
Map<String, Double> attendanceMinsMap = new HashMap<>(); Map<String, Double> attendanceMinsMap = new HashMap<>();
String acqAttenSql = " select resourceid, attendancemins, kqdate,signmins from kq_format_total where resourceid in (" + String.join(",", resIds) + ") and kqdate >='" + kqDate + "' and kqdate <='" + kqDate + "'"; String acqAttenSql = " select resourceid, attendancemins, kqdate,signmins from kq_format_total where resourceid in (" + String.join(",", resIds) + ") and kqdate >='" + kqDate + "' and kqdate <='" + kqDate + "'";
rs.executeQuery(acqAttenSql); rs.executeQuery(acqAttenSql);
@ -556,8 +679,13 @@ public class HandleCBDataThread extends BaseBean implements Runnable{
Double attendancemins = Util.getDoubleValue(Util.null2String(rs.getString("attendancemins"))); Double attendancemins = Util.getDoubleValue(Util.null2String(rs.getString("attendancemins")));
Double signmins = Util.getDoubleValue(Util.null2String(rs.getString("signmins"))); Double signmins = Util.getDoubleValue(Util.null2String(rs.getString("signmins")));
String kqdate = Util.null2String(rs.getString("kqdate")); String kqdate = Util.null2String(rs.getString("kqdate"));
if (signmins >= 0.00) { if (signmins >= 0.00 ) {
attendanceMinsMap.put(resourceid + "|" + kqdate, signmins); // double signTemp = signmins / 60;
// int quotient = (int) (signTemp / 6);
signminsMap.put(resourceid+"|"+kqdate, signmins);
}
if (attendancemins >= 0.00 ) {
attendanceMinsMap.put(resourceid+"|"+kqdate, attendancemins);
} }
} }
KQWorkTime kqWorkTime = new KQWorkTime(); KQWorkTime kqWorkTime = new KQWorkTime();
@ -570,28 +698,43 @@ public class HandleCBDataThread extends BaseBean implements Runnable{
if (!nightShiftList.contains(String.valueOf(serialid))) { if (!nightShiftList.contains(String.valueOf(serialid))) {
continue; continue;
} }
} else {
continue;
} }
} }
// double workingDayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|workingDayOvertime_4leave")));
// workingDayOvertime_4leave = workingDayOvertime_4leave < 0 ? 0 : workingDayOvertime_4leave; Object groupIdObj = serialInfo.get("groupId");
// double restDayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|restDayOvertime_4leave"))); String groupId = null;
// restDayOvertime_4leave = restDayOvertime_4leave < 0 ? 0 : restDayOvertime_4leave; if (Objects.isNull(groupIdObj)) {
// double holidayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|holidayOvertime_4leave"))); groupId = kqGroupMemberComInfo.getKQGroupId(res, kqDate);
// holidayOvertime_4leave = holidayOvertime_4leave < 0 ? 0 : holidayOvertime_4leave; } else {
// groupId = groupIdObj.toString();
// double workingDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|workingDayOvertime_nonleave"))); }
// workingDayOvertime_nonleave = workingDayOvertime_nonleave < 0 ? 0 : workingDayOvertime_nonleave;
// double restDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|restDayOvertime_nonleave"))); if ((!CollectionUtils.isEmpty(pbzbcSet)) && pbzbcSet.contains(groupId)) {
// restDayOvertime_nonleave = restDayOvertime_nonleave < 0 ? 0 : restDayOvertime_nonleave; double workingDayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|workingDayOvertime_4leave")));
// double holidayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|holidayOvertime_nonleave"))); workingDayOvertime_4leave = workingDayOvertime_4leave < 0 ? 0 : workingDayOvertime_4leave;
// holidayOvertime_nonleave = holidayOvertime_nonleave < 0 ? 0 : holidayOvertime_nonleave; double restDayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|restDayOvertime_4leave")));
// restDayOvertime_4leave = restDayOvertime_4leave < 0 ? 0 : restDayOvertime_4leave;
// double temp = workingDayOvertime_4leave + restDayOvertime_4leave + holidayOvertime_4leave + double holidayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|holidayOvertime_4leave")));
// workingDayOvertime_nonleave + restDayOvertime_nonleave + holidayOvertime_nonleave; holidayOvertime_4leave = holidayOvertime_4leave < 0 ? 0 : holidayOvertime_4leave;
// bb.writeLog("-=-temp:" + temp);
Double signmins = Util.getDoubleValue(Util.null2String(attendanceMinsMap.get(res + "|" + kqDate))); double workingDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|workingDayOvertime_nonleave")));
// bb.writeLog("-=-attendanceMins:" + attendanceMins); workingDayOvertime_nonleave = workingDayOvertime_nonleave < 0 ? 0 : workingDayOvertime_nonleave;
value = String.valueOf(Math.floor((signmins < 0.00 ? 0.00 : signmins) / 300)); double restDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|restDayOvertime_nonleave")));
restDayOvertime_nonleave = restDayOvertime_nonleave < 0 ? 0 : restDayOvertime_nonleave;
double holidayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|holidayOvertime_nonleave")));
holidayOvertime_nonleave = holidayOvertime_nonleave < 0 ? 0 : holidayOvertime_nonleave;
double temp = workingDayOvertime_4leave + restDayOvertime_4leave + holidayOvertime_4leave +
workingDayOvertime_nonleave + restDayOvertime_nonleave + holidayOvertime_nonleave;
Double attendanceMins = Util.getDoubleValue(Util.null2String(attendanceMinsMap.get(res + "|" + kqDate)));
value = String.valueOf(Math.floor(((attendanceMins < 0.00 ? 0.00 : attendanceMins) + temp) / 300));
}
if ((!CollectionUtils.isEmpty(zrzbcSet)) && zrzbcSet.contains(groupId)) {
Double signmins = Util.getDoubleValue(Util.null2String(signminsMap.get(res + "|" + kqDate)));
value = String.valueOf(Math.floor((signmins < 0.00 ? 0.00 : signmins) / 360));
}
} }
} }
} }
@ -615,7 +758,7 @@ public class HandleCBDataThread extends BaseBean implements Runnable{
} }
//获取加班时长 //获取加班时长
// Map<String, Object> dailyFlowOverTimeData = getDailyFlowOverTimeDataAllowance(userId, kqDate); Map<String, Object> dailyFlowOverTimeData = getDailyFlowOverTimeDataAllowance(userId, kqDate);
//首先去除指定不享有的分部 //首先去除指定不享有的分部
List<String> subComoanyList = new ArrayList<>(); List<String> subComoanyList = new ArrayList<>();
@ -636,6 +779,22 @@ public class HandleCBDataThread extends BaseBean implements Runnable{
sqlWhere += " and a.subcompanyid1 not in ("+subComoanys+") "; sqlWhere += " and a.subcompanyid1 not in ("+subComoanys+") ";
} }
// 获取责任制、排班次班次
Set<String> zrzbcSet = new HashSet<>();
Set<String> pbzbcSet = new HashSet<>();
String acqSql = "select kqgroup, grouptype from uf_ZeroPointSubSft";
rs.executeQuery(acqSql);
while (rs.next()) {
String kqgroup = Util.null2String(rs.getString("kqgroup"));
String grouptype = Util.null2String(rs.getString("grouptype"));
if (StringUtils.isNotBlank(kqgroup) && StringUtils.equals(grouptype, "0")) {
zrzbcSet.addAll(Arrays.asList(kqgroup.split(",")));
}
if (StringUtils.isNotBlank(kqgroup) && StringUtils.equals(grouptype, "1")) {
pbzbcSet.addAll(Arrays.asList(kqgroup.split(",")));
}
}
//指定人员不享受 //指定人员不享受
List<String> noRes = new ArrayList<>(); List<String> noRes = new ArrayList<>();
String acqNoResSql = "select resourceid from uf_NoStatAllRes where isdelete = 0 or isdelete is null"; String acqNoResSql = "select resourceid from uf_NoStatAllRes where isdelete = 0 or isdelete is null";
@ -652,7 +811,7 @@ public class HandleCBDataThread extends BaseBean implements Runnable{
List<String> resIds = new ArrayList<>(); List<String> resIds = new ArrayList<>();
String acqResSql = "select a.id from hrmresource a where a.status in (0,1,2,3) " + sqlWhere; String acqResSql = "select a.id from hrmresource a where 1=1 " + sqlWhere;
bb.writeLog("acqResSql: " + acqResSql); bb.writeLog("acqResSql: " + acqResSql);
rs.executeQuery(acqResSql); rs.executeQuery(acqResSql);
@ -670,6 +829,7 @@ public class HandleCBDataThread extends BaseBean implements Runnable{
KQGroupMemberComInfo kqGroupMemberComInfo = new KQGroupMemberComInfo(); KQGroupMemberComInfo kqGroupMemberComInfo = new KQGroupMemberComInfo();
// 先获取到实际打卡时长 // 先获取到实际打卡时长
Map<String, Double> signminsMap = new HashMap<>();
Map<String, Double> attendanceMinsMap = new HashMap<>(); Map<String, Double> attendanceMinsMap = new HashMap<>();
String acqAttenSql = " select resourceid, attendancemins, kqdate,signmins from kq_format_total where resourceid in (" + String.join(",",resIds) + ") and kqdate >='" + kqDate + "' and kqdate <='" + kqDate + "'"; String acqAttenSql = " select resourceid, attendancemins, kqdate,signmins from kq_format_total where resourceid in (" + String.join(",",resIds) + ") and kqdate >='" + kqDate + "' and kqdate <='" + kqDate + "'";
rs.executeQuery(acqAttenSql); rs.executeQuery(acqAttenSql);
@ -679,7 +839,12 @@ public class HandleCBDataThread extends BaseBean implements Runnable{
Double signmins = Util.getDoubleValue(Util.null2String(rs.getString("signmins"))); Double signmins = Util.getDoubleValue(Util.null2String(rs.getString("signmins")));
String kqdate = Util.null2String(rs.getString("kqdate")); String kqdate = Util.null2String(rs.getString("kqdate"));
if (signmins >= 0.00 ) { if (signmins >= 0.00 ) {
attendanceMinsMap.put(resourceid+"|"+kqdate, signmins); // double signTemp = signmins / 60;
// int quotient = (int) (signTemp / 6);
signminsMap.put(resourceid+"|"+kqdate, signmins);
}
if (attendancemins >= 0.00 ) {
attendanceMinsMap.put(resourceid+"|"+kqdate, attendancemins);
} }
} }
@ -809,27 +974,42 @@ public class HandleCBDataThread extends BaseBean implements Runnable{
if (StringUtils.isNotEmpty(addr) && (addr.contains("鸿仕达") || addr.toLowerCase().contains("hostar"))) { if (StringUtils.isNotEmpty(addr) && (addr.contains("鸿仕达") || addr.toLowerCase().contains("hostar"))) {
signNumber = signNumber + 1; signNumber = signNumber + 1;
} }
if (StringUtils.isNotEmpty(showaddress) && (showaddress.contains("台湾") || showaddress.contains("越南")
|| showaddress.toLowerCase().contains("hostar") || showaddress.toLowerCase().contains("vinh") || showaddress.toLowerCase().contains("ha noi"))) {
signNumber = signNumber + 1;
}
if (StringUtils.isNotEmpty(addr) && (addr.contains("台湾") || addr.contains("越南")
|| addr.toLowerCase().contains("hostar") || addr.toLowerCase().contains("vinh") || addr.toLowerCase().contains("ha noi"))) {
signNumber = signNumber + 1;
}
} }
} }
if (signNumber == 0 ) { if (signNumber == 0 ) {
// double workingDayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|workingDayOvertime_4leave"))); if ((!CollectionUtils.isEmpty(pbzbcSet)) && pbzbcSet.contains(groupId)) {
// workingDayOvertime_4leave = workingDayOvertime_4leave < 0 ? 0 : workingDayOvertime_4leave; double workingDayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|workingDayOvertime_4leave")));
// double restDayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|restDayOvertime_4leave"))); workingDayOvertime_4leave = workingDayOvertime_4leave < 0 ? 0 : workingDayOvertime_4leave;
// restDayOvertime_4leave = restDayOvertime_4leave < 0 ? 0 : restDayOvertime_4leave; double restDayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|restDayOvertime_4leave")));
// double holidayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|holidayOvertime_4leave"))); restDayOvertime_4leave = restDayOvertime_4leave < 0 ? 0 : restDayOvertime_4leave;
// holidayOvertime_4leave = holidayOvertime_4leave < 0 ? 0 : holidayOvertime_4leave; double holidayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|holidayOvertime_4leave")));
// holidayOvertime_4leave = holidayOvertime_4leave < 0 ? 0 : holidayOvertime_4leave;
// double workingDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|workingDayOvertime_nonleave")));
// workingDayOvertime_nonleave = workingDayOvertime_nonleave < 0 ? 0 : workingDayOvertime_nonleave; double workingDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|workingDayOvertime_nonleave")));
// double restDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|restDayOvertime_nonleave"))); workingDayOvertime_nonleave = workingDayOvertime_nonleave < 0 ? 0 : workingDayOvertime_nonleave;
// restDayOvertime_nonleave = restDayOvertime_nonleave < 0 ? 0 : restDayOvertime_nonleave; double restDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|restDayOvertime_nonleave")));
// double holidayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|holidayOvertime_nonleave"))); restDayOvertime_nonleave = restDayOvertime_nonleave < 0 ? 0 : restDayOvertime_nonleave;
// holidayOvertime_nonleave = holidayOvertime_nonleave < 0 ? 0 : holidayOvertime_nonleave; double holidayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|holidayOvertime_nonleave")));
// holidayOvertime_nonleave = holidayOvertime_nonleave < 0 ? 0 : holidayOvertime_nonleave;
// double temp = workingDayOvertime_4leave + restDayOvertime_4leave + holidayOvertime_4leave +
// workingDayOvertime_nonleave + restDayOvertime_nonleave + holidayOvertime_nonleave; double temp = workingDayOvertime_4leave + restDayOvertime_4leave + holidayOvertime_4leave +
Double signmins = Util.getDoubleValue(Util.null2String(attendanceMinsMap.get(res + "|" + kqDate))); workingDayOvertime_nonleave + restDayOvertime_nonleave + holidayOvertime_nonleave;
value = String.valueOf(Math.floor( (signmins < 0.00 ? 0.00 : signmins) / 300)); Double attendanceMins = Util.getDoubleValue(Util.null2String(attendanceMinsMap.get(res + "|" + kqDate)));
value = String.valueOf(Math.floor(((attendanceMins < 0.00 ? 0.00 : attendanceMins) + temp) / 300));
}
if ((!CollectionUtils.isEmpty(zrzbcSet)) && zrzbcSet.contains(groupId)) {
Double signmins = Util.getDoubleValue(Util.null2String(signminsMap.get(res + "|" + kqDate)));
value = String.valueOf(Math.floor((signmins < 0.00 ? 0.00 : signmins) / 360));
}
} }
} }
} }
@ -845,144 +1025,100 @@ public class HandleCBDataThread extends BaseBean implements Runnable{
String value = "0"; String value = "0";
RecordSet rs = new RecordSet(); RecordSet rs = new RecordSet();
String sql = ""; String sql = "";
String sqlWhere = " ";
try { try {
KQLeaveRulesComInfo kqLeaveRulesComInfo = new KQLeaveRulesComInfo(); // KQLeaveRulesComInfo kqLeaveRulesComInfo = new KQLeaveRulesComInfo();
if(id.length()>0){
sqlWhere +=" and b.id in("+id+") ";
}
// 首先获取出差公出流程信息 // 首先获取出差公出流程信息
Map<String, Object> evectionMap = new HashMap<>(); // Map<String, Object> evectionMap = new HashMap<>();
String evectionTableName = Util.null2String(bb.getPropValue("project_hostar","evectionTableName")); String evectionTableName = Util.null2String(bb.getPropValue("project_hostar","evectionTableName"));
sql = " select d.resourceid, d.belongdate, d.longitude, d.latitude from ( " + sql = " select a.* from (" +
" select a.belongdate, b.id as resourceid, b.subcompanyid1, b.departmentid, b.managerstr, b.managerid, b.loginid, c.jd as longitude, c.wd as latitude from kq_flow_split_evection a " + "select id, requestid, jd as longitude, wd as latitude from " + evectionTableName +
" left join hrmresource b " + " WHERE (sjccr = '" + id + "' or ','+CAST(nbtxr AS varchar(max))+',' like '%,'+CAST("+id+" AS varchar(10))+',%') " +
" on b.id = a.resourceid " + " and ksrq <='" + kqDateA + "' and (((sjjsrq is null or sjjsrq = '') and yjjsrq >= '" + kqDateA + "') or (sjjsrq is not null and sjjsrq != '' and sjjsrq >= '" + kqDateA + "'))" +
" left join " + evectionTableName + " c " + ") a, workflow_requestbase b WHERE a.requestId = b.requestId and b.currentnodetype != 0";
" on c.requestid = a.requestid " +
" where a.belongdate >='"+kqDateA+"' and a.belongdate <='"+kqDateA+"' " + sqlWhere +
" ) d " +
" where 1=1 " ;
bb.writeLog("sql: " + sql); bb.writeLog("sql: " + sql);
boolean isGoing = false;
rs.execute(sql); rs.execute(sql);
while (rs.next()) { while (rs.next()) {
String resourceid = Util.null2String(rs.getString("resourceid")); isGoing = true;
String belongdate = Util.null2String(rs.getString("belongdate"));
String longitude = Util.null2String(rs.getString("longitude"));
String latitude = Util.null2String(rs.getString("latitude"));
evectionMap.put( belongdate + "|" + resourceid, longitude + "|" + latitude );
} }
// bb.writeLog("evectionMap: " + evectionMap);
//获取外勤打卡数据
KQWorkTime kqWorkTime = new KQWorkTime();
kqWorkTime.setIsFormat(true);
Map< String, Map<String, Object>> lsCheckInfo = new HashMap<>(); Map< String, Map<String, Object>> lsCheckInfo = new HashMap<>();
for ( String key: evectionMap.keySet()) { List<Map<String, Object>> legWorkInfos = new ArrayList<>();
String[] split = key.split("\\|");
String kqDate = split[0]; if (isGoing) {
String userId = split[1]; String acqLegWorkSignSql = "select operate_time, longitude, latitude,address from mobile_sign where operater = ? and operate_date = '" + kqDateA + "' order by operate_time asc ";
WorkTimeEntity workTime = kqWorkTime.getWorkTime(userId, kqDate); rs.executeQuery(acqLegWorkSignSql, id);
List<TimeScopeEntity> lsSignTime = new ArrayList<>(); while ( rs.next()) {
List<TimeScopeEntity> lsWorkTime = new ArrayList<>(); String operateTime = Util.null2String(rs.getString("operate_time"));
if (workTime != null) { String longitude = Util.null2String(rs.getString("longitude"));
lsSignTime = workTime.getSignTime();//允许打卡时间 String latitude = Util.null2String(rs.getString("latitude"));
lsWorkTime = workTime.getWorkTime();//工作时间 String address = Util.null2String(rs.getString("address"));
}
if ("hostar".equalsIgnoreCase(address) || "鸿仕达".equals(address) || "增善路".equals(address)
//只支持一天一次上下班 || "星圃路".equals(address) || "智慧新城".equals(address)) {
if (lsWorkTime != null && lsWorkTime.size()==1 ) { continue;
TimeScopeEntity signTimeScope = lsSignTime.get(0);
TimeScopeEntity workTimeScope = lsWorkTime.get(0);
List<Map<String, Object>> legWorkInfos = new ArrayList<>();
//获取允许打卡时间
String signBeginTime = signTimeScope.getBeginTime();
if (StringUtils.isNotBlank(signBeginTime)) {
signBeginTime = signBeginTime + ":00";
} }
//获取上班时间 if (StringUtils.isNotEmpty(address) && (address.contains("鸿仕达") || address.contains("增善路")
String workBeginTime = workTimeScope.getBeginTime(); || address.contains("星圃路") || address.contains("智慧新城") || address.toLowerCase().contains("hostar"))) {
if (StringUtils.isNotBlank(workBeginTime)) { continue;
workBeginTime = workBeginTime + ":00";
} }
String acqLegWorkSignSql = "select operate_time, longitude, latitude from mobile_sign where operater = ? and operate_date = '" + kqDate + "' and operate_time >='" + signBeginTime + "' order by operate_time asc "; if (StringUtils.isNotEmpty(address) && (address.contains("台湾") || address.contains("越南")
rs.executeQuery(acqLegWorkSignSql, userId); || address.toLowerCase().contains("hostar") || address.toLowerCase().contains("vinh") || address.toLowerCase().contains("ha noi"))) {
while ( rs.next()) { continue;
String operateTime = Util.null2String(rs.getString("operate_time"));
String longitude = Util.null2String(rs.getString("longitude"));
String latitude = Util.null2String(rs.getString("latitude"));
if ( StringUtils.isNotBlank(operateTime) && StringUtils.isNotBlank(longitude) && StringUtils.isNotBlank(latitude) ) {
Map<String, Object> temp = new HashMap<>();
temp.put("operateTime", operateTime);
temp.put("longitude", longitude);
temp.put("latitude", latitude);
legWorkInfos.add(temp);
}
} }
if (legWorkInfos != null && legWorkInfos.size() > 0 ) {
String tempSignIn = "";
String tempSignInLatitude = "";
String tempSignInLongitude = "";
String tempSignOutLatitude = "";
String tempSignOutLongitude = "";
String tempSignOut = "";
Map<String, Object> checkInfo = new HashMap<>();
if ( legWorkInfos.size() == 1) {//只有一笔外勤卡直接算上班
Map<String, Object> temp = legWorkInfos.get(0);
String operateTime = Util.null2String(temp.get("operateTime"));
String longitude = Util.null2String(temp.get("longitude"));
String latitude = Util.null2String(temp.get("latitude"));
checkInfo.put("signDate", kqDate);//签到签退日期
checkInfo.put("signInTime", operateTime);//签到时间
checkInfo.put("signInLatitude", latitude);//签到纬度
checkInfo.put("signInLongitude", longitude);//签到经度
lsCheckInfo.put(userId + "|" + kqDate, checkInfo);
if ( StringUtils.isNotBlank(operateTime) && StringUtils.isNotBlank(longitude) && StringUtils.isNotBlank(latitude) ) {
Map<String, Object> temp = new HashMap<>();
temp.put("operateTime", operateTime);
temp.put("longitude", longitude);
temp.put("latitude", latitude);
legWorkInfos.add(temp);
}
}
if (legWorkInfos != null && legWorkInfos.size() > 1 ) {
String tempSignIn = "";
String tempSignInLatitude = "";
String tempSignInLongitude = "";
String tempSignOutLatitude = "";
String tempSignOutLongitude = "";
String tempSignOut = "";
Map<String, Object> checkInfo = new HashMap<>();
for ( Map<String, Object> temp : legWorkInfos) {
String operateTime = Util.null2String(temp.get("operateTime"));
String longitude = Util.null2String(temp.get("longitude"));
String latitude = Util.null2String(temp.get("latitude"));
if (StringUtils.isBlank(tempSignIn)) {
tempSignIn = operateTime;
tempSignInLatitude = latitude;
tempSignInLongitude = longitude;
} else { } else {
for ( Map<String, Object> temp : legWorkInfos) { if ( operateTime.compareTo(tempSignIn) < 0 ) {
String operateTime = Util.null2String(temp.get("operateTime")); tempSignIn = operateTime;
String longitude = Util.null2String(temp.get("longitude")); tempSignInLatitude = latitude;
String latitude = Util.null2String(temp.get("latitude")); tempSignInLongitude = longitude;
if (operateTime.compareTo(workBeginTime) < 0) {//获取上班时间点之前最早的一笔卡 }
if (StringUtils.isBlank(tempSignIn)) { }
tempSignIn = operateTime; if (StringUtils.isBlank(tempSignOut)) {
tempSignInLatitude = latitude; tempSignOut = operateTime;
tempSignInLongitude = longitude; tempSignOutLatitude = latitude;
} else { tempSignOutLongitude = longitude;
if ( operateTime.compareTo(tempSignIn) < 0 ) { } else {
tempSignIn = operateTime; if ( operateTime.compareTo(tempSignOut) > 0 ) {
tempSignInLatitude = latitude; tempSignOut = operateTime;
tempSignInLongitude = longitude; tempSignOutLatitude = latitude;
} tempSignOutLongitude = longitude;
}
}
if ( operateTime.compareTo(workBeginTime) > 0) {//下班卡取最晚的一笔
if (StringUtils.isBlank(tempSignIn)) {
tempSignOut = operateTime;
tempSignOutLatitude = latitude;
tempSignOutLongitude = longitude;
} else {
if ( operateTime.compareTo(tempSignOut) > 0 ) {
tempSignOut = operateTime;
tempSignOutLatitude = latitude;
tempSignOutLongitude = longitude;
}
}
}
} }
checkInfo.put("signDate", kqDate);//签到签退日期
checkInfo.put("signInTime", tempSignIn);//签到时间
checkInfo.put("signInLatitude", tempSignInLatitude);//签到纬度
checkInfo.put("signInLongitude", tempSignInLongitude);//签到经度
checkInfo.put("signOutTime", tempSignOut);//签退时间
checkInfo.put("signOutLatitude", tempSignOutLatitude);//签退纬度
checkInfo.put("signOutLongitude", tempSignOutLongitude);//签退经度
lsCheckInfo.put(userId + "|" + kqDate, checkInfo);
} }
} }
// }
checkInfo.put("signDate", kqDateA);//签到签退日期
checkInfo.put("signInTime", tempSignIn);//签到时间
checkInfo.put("signInLatitude", tempSignInLatitude);//签到纬度
checkInfo.put("signInLongitude", tempSignInLongitude);//签到经度
checkInfo.put("signOutTime", tempSignOut);//签退时间
checkInfo.put("signOutLatitude", tempSignOutLatitude);//签退纬度
checkInfo.put("signOutLongitude", tempSignOutLongitude);//签退经度
lsCheckInfo.put(id + "|" + kqDateA, checkInfo);
} }
} }
@ -993,6 +1129,7 @@ public class HandleCBDataThread extends BaseBean implements Runnable{
//获取餐补判断时间 //获取餐补判断时间
List<Map<String, String>> MealMap = new ArrayList<>(); List<Map<String, String>> MealMap = new ArrayList<>();
String acqTimeSql = "select startTime, endTime from " + MealAlloTableName + " where (isDelete is null or isDelete = 0)"; String acqTimeSql = "select startTime, endTime from " + MealAlloTableName + " where (isDelete is null or isDelete = 0)";
// bb.writeLog("acqTimeSql: " + acqTimeSql);
rs.executeQuery(acqTimeSql); rs.executeQuery(acqTimeSql);
while (rs.next()) { while (rs.next()) {
String startTime = Util.null2String(rs.getString("startTime")); String startTime = Util.null2String(rs.getString("startTime"));
@ -1002,17 +1139,17 @@ public class HandleCBDataThread extends BaseBean implements Runnable{
temp.put("endTime",endTime); temp.put("endTime",endTime);
MealMap.add(temp); MealMap.add(temp);
} }
// bb.writeLog("MealMap: " + MealMap);
//根据外勤打卡数据计算餐补数据 //根据外勤打卡数据计算餐补数据
for (String key: lsCheckInfo.keySet()) { for (String key: lsCheckInfo.keySet()) {
String[] split = key.split("\\|"); // String[] split = key.split("\\|");
String userId = split[0]; // String userId = split[0];
String kqDate = split[1]; // String kqDate = split[1];
Map<String, Object> temp = lsCheckInfo.get(key); Map<String, Object> temp = lsCheckInfo.get(key);
String signInTime = Util.null2String(temp.get("signInTime")); String signInTime = Util.null2String(temp.get("signInTime"));
String signOutTime = Util.null2String(temp.get("signOutTime")); String signOutTime = Util.null2String(temp.get("signOutTime"));
if (StringUtils.isNotBlank(signInTime) && StringUtils.isNotBlank(signOutTime) ) { if (StringUtils.isNotBlank(signInTime) && StringUtils.isNotBlank(signOutTime) ) {
for (Map<String, String> me: MealMap) { for (Map<String, String> me: MealMap) {
@ -1029,7 +1166,8 @@ public class HandleCBDataThread extends BaseBean implements Runnable{
if (StringUtils.isEmpty(value) || StringUtils.equals(value, "0")) { if (StringUtils.isEmpty(value) || StringUtils.equals(value, "0")) {
value = "1"; value = "1";
} else { } else {
value = String.valueOf(Integer.parseInt(value)); int valueT = Integer.parseInt(value) + 1;
value = String.valueOf(valueT);
} }
} }
} }

@ -273,6 +273,9 @@ public class KQFormatData extends BaseBean {
} }
// 考勤二开--出差餐补 // 考勤二开--出差餐补
String mealAllowance = getMealAllowance(userId, kqDate); String mealAllowance = getMealAllowance(userId, kqDate);
if (!(StringUtils.equals(statAllowance, "0") && StringUtils.equals(otherStatAllowance, "0"))) {
mealAllowance = "0";
}
bb.writeLog("mealAllowance:" + mealAllowance); bb.writeLog("mealAllowance:" + mealAllowance);
if (StringUtils.isEmpty(mealAllowance)) { if (StringUtils.isEmpty(mealAllowance)) {
mealAllowance = "0"; mealAllowance = "0";
@ -1014,19 +1017,39 @@ public class KQFormatData extends BaseBean {
// bb.writeLog("groupMap: " + groupMap); // bb.writeLog("groupMap: " + groupMap);
bb.writeLog("groupid: " + groupid); bb.writeLog("groupid: " + groupid);
//获取夜班班次
List<String> nightShiftList = new ArrayList<>();
String acqNightShiftSql = "select shift from uf_nightshiftmanage where isdelete is null or isdelete = 0";
rs.executeQuery(acqNightShiftSql);
while (rs.next()) {
String shift = Util.null2String(rs.getString("shift"));
if (StringUtils.isNotBlank(shift)) {
nightShiftList.add(shift);
}
}
boolean offGood = false; boolean offGood = false;
boolean inGood = false; boolean inGood = false;
for (int j = 0; lsCheckInfo != null && j < lsCheckInfo.size(); j++) { if (StringUtils.isEmpty(serialid)) {
Map<String, Object> checkInfo = (Map<String, Object>) lsCheckInfo.get(j); serialid = "0";
if ("2".equals(checkInfo.get("signType")) && !offGood) {//签退 }
String signDate = Util.null2String(checkInfo.get("signDate")); if (CollectionUtils.isEmpty(nightShiftList) || !nightShiftList.contains(serialid)) {
String signTime = Util.null2String(checkInfo.get("signTime")); for (int j = 0; lsCheckInfo != null && j < lsCheckInfo.size(); j++) {
bb.writeLog("lsCheckInfo is:" + JSONObject.toJSONString(lsCheckInfo));
Map<String, Object> checkInfo = (Map<String, Object>) lsCheckInfo.get(j);
if ("2".equals(checkInfo.get("signType")) && !offGood) {//签退
String signStatus = Util.null2String(checkInfo.get("signStatus"));
if (StringUtils.isEmpty(signStatus) || !signStatus.equalsIgnoreCase(ButtonStatusEnum.NORMAL.getStatusCode())) {
continue;
}
String signDate = Util.null2String(checkInfo.get("signDate"));
String signTime = Util.null2String(checkInfo.get("signTime"));
// bb.writeLog("signDate: " + signDate); // bb.writeLog("signDate: " + signDate);
// bb.writeLog("signTime: " + signTime); // bb.writeLog("signTime: " + signTime);
if (groupMap != null && groupMap.size() > 0) { if (groupMap != null && groupMap.size() > 0) {
for (String grouptype : groupMap.keySet()) { for (String grouptype : groupMap.keySet()) {
// bb.writeLog("grouptype: " + grouptype); // bb.writeLog("grouptype: " + grouptype);
// if ("0".equals(grouptype)) {//责任制--23点 // if ("0".equals(grouptype)) {//责任制--23点
// String kqgroups = Util.null2String(groupMap.get(grouptype)); // String kqgroups = Util.null2String(groupMap.get(grouptype));
@ -1047,61 +1070,64 @@ public class KQFormatData extends BaseBean {
// } // }
// } // }
// } // }
if ("0".equals(grouptype)) {//责任制--00点 if ("0".equals(grouptype)) {//责任制--00点
String kqgroups = Util.null2String(groupMap.get(grouptype)); String kqgroups = Util.null2String(groupMap.get(grouptype));
// bb.writeLog("kqgroups: " + kqgroups); // bb.writeLog("kqgroups: " + kqgroups);
List<String> groupList = Arrays.asList(kqgroups.split(",")); List<String> groupList = Arrays.asList(kqgroups.split(","));
// bb.writeLog("groupList: " + groupList); // bb.writeLog("groupList: " + groupList);
if(groupList.contains(groupid)) { if (groupList.contains(groupid)) {
//00:00 //00:00
if (signTime.length() == 5) { if (signTime.length() == 5) {
signTime = signTime + ":00"; signTime = signTime + ":00";
} }
LocalDate date = LocalDate.parse(kqDate, DateTimeFormatter.ofPattern("yyyy-MM-dd")); // LocalDate date = LocalDate.parse(kqDate, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
LocalDate localDate = date.plusDays(1); // LocalDate localDate = date.plusDays(1);
String kqDateNew = localDate.toString(); // String kqDateNew = localDate.toString();
String subsidyTime = kqDateNew + " 00:00:00"; String subsidyTime = kqDate + " 23:00:00";
bb.writeLog("subsidyTime: " + subsidyTime); bb.writeLog("subsidyTime: " + subsidyTime);
String outTime = signDate + " " + signTime; String outTime = signDate + " " + signTime;
bb.writeLog("outTime: " + outTime); bb.writeLog("outTime: " + outTime);
if (outTime.compareTo(subsidyTime) > 0 ) { if (outTime.compareTo(subsidyTime) > 0) {
offGood = true; offGood = true;
zeroPointSub = 1; }
} }
} }
} }
} }
} }
}
if ("1".equals(checkInfo.get("signType")) && !inGood) {//签到 if ("1".equals(checkInfo.get("signType")) && !inGood) {//签到
String signDate = Util.null2String(checkInfo.get("signDate")); String signStatus = Util.null2String(checkInfo.get("signStatus"));
String signTime = Util.null2String(checkInfo.get("signTime")); if (StringUtils.isEmpty(signStatus) || !signStatus.equalsIgnoreCase(ButtonStatusEnum.NORMAL.getStatusCode())) {
bb.writeLog("signDate: " + signDate); continue;
bb.writeLog("signTime: " + signTime); }
String signDate = Util.null2String(checkInfo.get("signDate"));
if (groupMap != null && groupMap.size() > 0) { String signTime = Util.null2String(checkInfo.get("signTime"));
for (String grouptype : groupMap.keySet()) { bb.writeLog("signDate: " + signDate);
bb.writeLog("grouptype: " + grouptype); bb.writeLog("signTime: " + signTime);
if ("0".equals(grouptype)) {//责任制--23点
String kqgroups = Util.null2String(groupMap.get(grouptype)); if (groupMap != null && groupMap.size() > 0) {
bb.writeLog("kqgroups: " + kqgroups); for (String grouptype : groupMap.keySet()) {
List<String> groupList = Arrays.asList(kqgroups.split(",")); bb.writeLog("grouptype: " + grouptype);
bb.writeLog("groupList: " + groupList); if ("0".equals(grouptype)) {//责任制--23点
if(groupList.contains(groupid)) { String kqgroups = Util.null2String(groupMap.get(grouptype));
//23:00 bb.writeLog("kqgroups: " + kqgroups);
if (signTime.length() == 5) { List<String> groupList = Arrays.asList(kqgroups.split(","));
signTime = signTime + ":00"; bb.writeLog("groupList: " + groupList);
} if (groupList.contains(groupid)) {
String subsidyTime = kqDate + " 23:00:00"; //23:00
bb.writeLog("subsidyTime: " + subsidyTime); if (signTime.length() == 5) {
String inTime = signDate + " " + signTime; signTime = signTime + ":00";
bb.writeLog("inTime: " + inTime); }
if (subsidyTime.compareTo(inTime) > 0 ) { String subsidyTime = kqDate + " 08:30:00";
inGood = true; bb.writeLog("subsidyTime: " + subsidyTime);
String inTime = signDate + " " + signTime;
bb.writeLog("inTime: " + inTime);
if (subsidyTime.compareTo(inTime) > 0) {
inGood = true;
}
} }
} }
}
// if ("1".equals(grouptype)) {//排班制--00点 // if ("1".equals(grouptype)) {//排班制--00点
// String kqgroups = Util.null2String(groupMap.get(grouptype)); // String kqgroups = Util.null2String(groupMap.get(grouptype));
// bb.writeLog("kqgroups: " + kqgroups); // bb.writeLog("kqgroups: " + kqgroups);
@ -1124,6 +1150,7 @@ public class KQFormatData extends BaseBean {
// } // }
// } // }
// } // }
}
} }
} }
} }
@ -1398,10 +1425,32 @@ public class KQFormatData extends BaseBean {
nightShiftList.add(shift); nightShiftList.add(shift);
} }
} }
//获取加班时长
Map<String,Object> dailyFlowOverTimeData = getDailyFlowOverTimeDataAllowance(userId, kqDate);
// 获取责任制、排班次班次
Set<String> zrzbcSet = new HashSet<>();
Set<String> pbzbcSet = new HashSet<>();
String acqSql = "select kqgroup, grouptype from uf_ZeroPointSubSft";
rs.executeQuery(acqSql);
while (rs.next()) {
String kqgroup = Util.null2String(rs.getString("kqgroup"));
String grouptype = Util.null2String(rs.getString("grouptype"));
if (StringUtils.isNotBlank(kqgroup) && StringUtils.equals(grouptype, "0")) {
zrzbcSet.addAll(Arrays.asList(kqgroup.split(",")));
}
if (StringUtils.isNotBlank(kqgroup) && StringUtils.equals(grouptype, "1")) {
pbzbcSet.addAll(Arrays.asList(kqgroup.split(",")));
}
}
if (nightShiftList != null & nightShiftList.size() > 0) { if (nightShiftList != null & nightShiftList.size() > 0) {
KQGroupMemberComInfo kqGroupMemberComInfo = new KQGroupMemberComInfo();
HostarUtil houtil = new HostarUtil(); HostarUtil houtil = new HostarUtil();
//先获取到出勤时长 //先获取到出勤时长
Map<String, Double> signminsMap = new HashMap<>();
Map<String, Double> attendanceMinsMap = new HashMap<>(); Map<String, Double> attendanceMinsMap = new HashMap<>();
String acqAttenSql = " select resourceid, attendancemins, kqdate,signmins from kq_format_total where resourceid in (" + userId + ") and kqdate >='" + kqDate + "' and kqdate <='" + kqDate + "'"; String acqAttenSql = " select resourceid, attendancemins, kqdate,signmins from kq_format_total where resourceid in (" + userId + ") and kqdate >='" + kqDate + "' and kqdate <='" + kqDate + "'";
rs.executeQuery(acqAttenSql); rs.executeQuery(acqAttenSql);
@ -1411,7 +1460,10 @@ public class KQFormatData extends BaseBean {
Double signmins = Util.getDoubleValue(Util.null2String(rs.getString("signmins"))); Double signmins = Util.getDoubleValue(Util.null2String(rs.getString("signmins")));
String kqdate = Util.null2String(rs.getString("kqdate")); String kqdate = Util.null2String(rs.getString("kqdate"));
if (signmins >= 0.00 ) { if (signmins >= 0.00 ) {
attendanceMinsMap.put(resourceid+"|"+kqdate, signmins); signminsMap.put(resourceid+"|"+kqdate, signmins);
}
if (attendancemins >= 0.00 ) {
attendanceMinsMap.put(resourceid+"|"+kqdate, attendancemins);
} }
} }
KQWorkTime kqWorkTime = new KQWorkTime(); KQWorkTime kqWorkTime = new KQWorkTime();
@ -1424,11 +1476,38 @@ public class KQFormatData extends BaseBean {
if ( !nightShiftList.contains(String.valueOf(serialid))) { if ( !nightShiftList.contains(String.valueOf(serialid))) {
return "0"; return "0";
} }
} else {
return "0";
} }
} }
Double signmins = Util.getDoubleValue(Util.null2String(attendanceMinsMap.get(userId + "|" + kqDate))); String groupId = kqGroupMemberComInfo.getKQGroupId(userId, kqDate);
value = (( signmins / 60) >= 8.00 ) ? "1" : "0";
if ((!CollectionUtils.isEmpty(pbzbcSet)) && pbzbcSet.contains(groupId)) {
double workingDayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(userId + "|" + kqDate + "|workingDayOvertime_4leave")));
workingDayOvertime_4leave = workingDayOvertime_4leave < 0 ? 0 : workingDayOvertime_4leave;
double restDayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(userId + "|" + kqDate + "|restDayOvertime_4leave")));
restDayOvertime_4leave = restDayOvertime_4leave < 0 ? 0 : restDayOvertime_4leave;
double holidayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(userId + "|" + kqDate + "|holidayOvertime_4leave")));
holidayOvertime_4leave = holidayOvertime_4leave < 0 ? 0 : holidayOvertime_4leave;
double workingDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(userId + "|" + kqDate + "|workingDayOvertime_nonleave")));
workingDayOvertime_nonleave = workingDayOvertime_nonleave < 0 ? 0 : workingDayOvertime_nonleave;
double restDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(userId + "|" + kqDate + "|restDayOvertime_nonleave")));
restDayOvertime_nonleave = restDayOvertime_nonleave < 0 ? 0 : restDayOvertime_nonleave;
double holidayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(userId + "|" + kqDate + "|holidayOvertime_nonleave")));
holidayOvertime_nonleave = holidayOvertime_nonleave < 0 ? 0 : holidayOvertime_nonleave;
double temp = workingDayOvertime_4leave + restDayOvertime_4leave + holidayOvertime_4leave +
workingDayOvertime_nonleave + restDayOvertime_nonleave + holidayOvertime_nonleave;
Double attendanceMins = Util.getDoubleValue(Util.null2String(attendanceMinsMap.get(userId + "|" + kqDate)));
value = (Math.floor(((attendanceMins < 0.00 ? 0.00 : attendanceMins) + temp) / 60) >= 8.00) ? "1" : "0";
}
if ((!CollectionUtils.isEmpty(zrzbcSet)) && zrzbcSet.contains(groupId)) {
Double signmins = Util.getDoubleValue(Util.null2String(signminsMap.get(userId + "|" + kqDate)));
value = (( signmins / 60) >= 9.00 ) ? "1" : "0";
}
} }
} catch (Exception e) { } catch (Exception e) {
bb.writeLog("get NightShiftSubsidy error:" + e.getMessage()); bb.writeLog("get NightShiftSubsidy error:" + e.getMessage());
@ -1447,14 +1526,30 @@ public class KQFormatData extends BaseBean {
} }
//获取加班时长 //获取加班时长
// Map<String,Object> dailyFlowOverTimeData = getDailyFlowOverTimeDataAllowance(userId, kqDate); Map<String,Object> dailyFlowOverTimeData = getDailyFlowOverTimeDataAllowance(userId, kqDate);
// 获取责任制、排班次班次
Set<String> zrzbcSet = new HashSet<>();
Set<String> pbzbcSet = new HashSet<>();
String acqSql = "select kqgroup, grouptype from uf_ZeroPointSubSft";
rs.executeQuery(acqSql);
while (rs.next()) {
String kqgroup = Util.null2String(rs.getString("kqgroup"));
String grouptype = Util.null2String(rs.getString("grouptype"));
if (StringUtils.isNotBlank(kqgroup) && StringUtils.equals(grouptype, "0")) {
zrzbcSet.addAll(Arrays.asList(kqgroup.split(",")));
}
if (StringUtils.isNotBlank(kqgroup) && StringUtils.equals(grouptype, "1")) {
pbzbcSet.addAll(Arrays.asList(kqgroup.split(",")));
}
}
String otherstatsub = Util.null2String(bb.getPropValue("project_hostar", "otherstatsubcompany")); String otherstatsub = Util.null2String(bb.getPropValue("project_hostar", "otherstatsubcompany"));
if (StringUtils.isNotBlank(otherstatsub)) { if (StringUtils.isNotBlank(otherstatsub)) {
//查询该分部下的人员 //查询该分部下的人员
List<String> resIds = new ArrayList<>(); List<String> resIds = new ArrayList<>();
sqlWhere += " and a.subcompanyid1 in (" + otherstatsub + ") "; sqlWhere += " and a.subcompanyid1 in (" + otherstatsub + ") ";
String acqResSql = "select a.id from hrmresource a where a.status in (0,1,2,3) " + sqlWhere; String acqResSql = "select a.id from hrmresource a where 1=1 " + sqlWhere;
bb.writeLog("acqResSql: " + acqResSql); bb.writeLog("acqResSql: " + acqResSql);
rs.executeQuery(acqResSql); rs.executeQuery(acqResSql);
@ -1465,11 +1560,13 @@ public class KQFormatData extends BaseBean {
} }
} }
// bb.writeLog("resIds: " + resIds); // bb.writeLog("resIds: " + resIds);
KQGroupMemberComInfo kqGroupMemberComInfo = new KQGroupMemberComInfo();
if (resIds != null && resIds.size() > 0 && StringUtils.isNotBlank(kqDate)) { if (resIds != null && resIds.size() > 0 && StringUtils.isNotBlank(kqDate)) {
HostarUtil houtil = new HostarUtil(); HostarUtil houtil = new HostarUtil();
//先获取到实际打卡时长 //先获取到实际打卡时长
Map<String, Double> signminsMap = new HashMap<>();
Map<String, Double> attendanceMinsMap = new HashMap<>(); Map<String, Double> attendanceMinsMap = new HashMap<>();
String acqAttenSql = " select resourceid, attendancemins, kqdate,signmins from kq_format_total where resourceid in (" + String.join(",", resIds) + ") and kqdate >='" + kqDate + "' and kqdate <='" + kqDate + "'"; String acqAttenSql = " select resourceid, attendancemins, kqdate,signmins from kq_format_total where resourceid in (" + String.join(",", resIds) + ") and kqdate >='" + kqDate + "' and kqdate <='" + kqDate + "'";
rs.executeQuery(acqAttenSql); rs.executeQuery(acqAttenSql);
@ -1478,8 +1575,13 @@ public class KQFormatData extends BaseBean {
Double attendancemins = Util.getDoubleValue(Util.null2String(rs.getString("attendancemins"))); Double attendancemins = Util.getDoubleValue(Util.null2String(rs.getString("attendancemins")));
Double signmins = Util.getDoubleValue(Util.null2String(rs.getString("signmins"))); Double signmins = Util.getDoubleValue(Util.null2String(rs.getString("signmins")));
String kqdate = Util.null2String(rs.getString("kqdate")); String kqdate = Util.null2String(rs.getString("kqdate"));
if (signmins >= 0.00) { if (signmins >= 0.00 ) {
attendanceMinsMap.put(resourceid + "|" + kqdate, signmins); // double signTemp = signmins / 60;
// int quotient = (int) (signTemp / 6);
signminsMap.put(resourceid+"|"+kqdate, signmins);
}
if (attendancemins >= 0.00 ) {
attendanceMinsMap.put(resourceid+"|"+kqdate, attendancemins);
} }
} }
List<String> removeRes = new ArrayList<>(); List<String> removeRes = new ArrayList<>();
@ -1600,34 +1702,55 @@ public class KQFormatData extends BaseBean {
if (StringUtils.isNotEmpty(addr) && (addr.contains("鸿仕达") || addr.toLowerCase().contains("hostar"))) { if (StringUtils.isNotEmpty(addr) && (addr.contains("鸿仕达") || addr.toLowerCase().contains("hostar"))) {
signNumber = signNumber + 1; signNumber = signNumber + 1;
} }
if (StringUtils.isNotEmpty(showaddress) && (showaddress.contains("台湾") || showaddress.contains("越南")
|| showaddress.toLowerCase().contains("hostar") || showaddress.toLowerCase().contains("vinh") || showaddress.toLowerCase().contains("ha noi"))) {
signNumber = signNumber + 1;
}
if (StringUtils.isNotEmpty(addr) && (addr.contains("台湾") || addr.contains("越南")
|| addr.toLowerCase().contains("hostar") || addr.toLowerCase().contains("vinh") || addr.toLowerCase().contains("ha noi"))) {
signNumber = signNumber + 1;
}
} }
} }
String groupId = kqGroupMemberComInfo.getKQGroupId(res, kqDate);
if (signNumber == 0) { if (signNumber == 0) {
// double workingDayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|workingDayOvertime_4leave"))); double minValue = 0.00;
// workingDayOvertime_4leave = workingDayOvertime_4leave < 0 ? 0 : workingDayOvertime_4leave; if ((!CollectionUtils.isEmpty(pbzbcSet)) && pbzbcSet.contains(groupId)) {
// double restDayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|restDayOvertime_4leave"))); double workingDayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|workingDayOvertime_4leave")));
// restDayOvertime_4leave = restDayOvertime_4leave < 0 ? 0 : restDayOvertime_4leave; workingDayOvertime_4leave = workingDayOvertime_4leave < 0 ? 0 : workingDayOvertime_4leave;
// double holidayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|holidayOvertime_4leave"))); double restDayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|restDayOvertime_4leave")));
// holidayOvertime_4leave = holidayOvertime_4leave < 0 ? 0 : holidayOvertime_4leave; restDayOvertime_4leave = restDayOvertime_4leave < 0 ? 0 : restDayOvertime_4leave;
// double holidayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|holidayOvertime_4leave")));
// double workingDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|workingDayOvertime_nonleave"))); holidayOvertime_4leave = holidayOvertime_4leave < 0 ? 0 : holidayOvertime_4leave;
// workingDayOvertime_nonleave = workingDayOvertime_nonleave < 0 ? 0 : workingDayOvertime_nonleave;
// double restDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|restDayOvertime_nonleave"))); double workingDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|workingDayOvertime_nonleave")));
// restDayOvertime_nonleave = restDayOvertime_nonleave < 0 ? 0 : restDayOvertime_nonleave; workingDayOvertime_nonleave = workingDayOvertime_nonleave < 0 ? 0 : workingDayOvertime_nonleave;
// double holidayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|holidayOvertime_nonleave"))); double restDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|restDayOvertime_nonleave")));
// holidayOvertime_nonleave = holidayOvertime_nonleave < 0 ? 0 : holidayOvertime_nonleave; restDayOvertime_nonleave = restDayOvertime_nonleave < 0 ? 0 : restDayOvertime_nonleave;
// double holidayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|holidayOvertime_nonleave")));
// double temp = workingDayOvertime_4leave + restDayOvertime_4leave + holidayOvertime_4leave + holidayOvertime_nonleave = holidayOvertime_nonleave < 0 ? 0 : holidayOvertime_nonleave;
// workingDayOvertime_nonleave + restDayOvertime_nonleave + holidayOvertime_nonleave;
// bb.writeLog("-=-temp:" + temp); double temp = workingDayOvertime_4leave + restDayOvertime_4leave + holidayOvertime_4leave +
Double signmins = Util.getDoubleValue(Util.null2String(attendanceMinsMap.get(res + "|" + kqDate))); workingDayOvertime_nonleave + restDayOvertime_nonleave + holidayOvertime_nonleave;
// bb.writeLog("-=-attendanceMins:" + attendanceMins); Double attendanceMins = Util.getDoubleValue(Util.null2String(attendanceMinsMap.get(res + "|" + kqDate)));
double v = Math.round ((signmins < 0.00) ? 0.00 : signmins) / 60.00; if (attendanceMins < 0.00) {
value = "0"; attendanceMins = 0.00;
if (v >= 4.00 && v < 9.00) { }
value = "1"; minValue = attendanceMins + temp;
} else if (v >= 9.00) { double v = Math.round (Math.max(minValue, 0.00)) / 60.00;
value = "2"; value = "0";
if (v >= 4.00 && v < 9.00) {
value = "1";
} else if (v >= 9.00) {
value = "2";
}
}
if ((!CollectionUtils.isEmpty(zrzbcSet)) && zrzbcSet.contains(groupId)) {
minValue = Util.getDoubleValue(Util.null2String(signminsMap.get(res + "|" + kqDate)));
value = String.valueOf(Math.floor((Math.max(minValue, 0.00)) / 360));
} }
} }
} }
@ -1715,7 +1838,23 @@ public class KQFormatData extends BaseBean {
} }
//获取加班时长 //获取加班时长
// Map<String, Object> dailyFlowOverTimeData = getDailyFlowOverTimeDataAllowance(userId, kqDate); Map<String, Object> dailyFlowOverTimeData = getDailyFlowOverTimeDataAllowance(userId, kqDate);
// 获取责任制、排班次班次
Set<String> zrzbcSet = new HashSet<>();
Set<String> pbzbcSet = new HashSet<>();
String acqSql = "select kqgroup, grouptype from uf_ZeroPointSubSft";
rs.executeQuery(acqSql);
while (rs.next()) {
String kqgroup = Util.null2String(rs.getString("kqgroup"));
String grouptype = Util.null2String(rs.getString("grouptype"));
if (StringUtils.isNotBlank(kqgroup) && StringUtils.equals(grouptype, "0")) {
zrzbcSet.addAll(Arrays.asList(kqgroup.split(",")));
}
if (StringUtils.isNotBlank(kqgroup) && StringUtils.equals(grouptype, "1")) {
pbzbcSet.addAll(Arrays.asList(kqgroup.split(",")));
}
}
//获取夜班班次 //获取夜班班次
List<String> nightShiftList = new ArrayList<>(); List<String> nightShiftList = new ArrayList<>();
@ -1733,7 +1872,7 @@ public class KQFormatData extends BaseBean {
//查询该分部下的人员 //查询该分部下的人员
List<String> resIds = new ArrayList<>(); List<String> resIds = new ArrayList<>();
sqlWhere += " and a.subcompanyid1 in (" + nightshiftsub + ") "; sqlWhere += " and a.subcompanyid1 in (" + nightshiftsub + ") ";
String acqResSql = "select a.id from hrmresource a where a.status in (0,1,2,3) " + sqlWhere; String acqResSql = "select a.id from hrmresource a where 1=1 " + sqlWhere;
bb.writeLog("acqResSql: " + acqResSql); bb.writeLog("acqResSql: " + acqResSql);
rs.executeQuery(acqResSql); rs.executeQuery(acqResSql);
@ -1744,10 +1883,12 @@ public class KQFormatData extends BaseBean {
} }
} }
// bb.writeLog("resIds: " + resIds); // bb.writeLog("resIds: " + resIds);
KQGroupMemberComInfo kqGroupMemberComInfo = new KQGroupMemberComInfo();
if (resIds != null && resIds.size() > 0) { if (resIds != null && resIds.size() > 0) {
HostarUtil houtil = new HostarUtil(); HostarUtil houtil = new HostarUtil();
//先获取到出勤时长 //先获取到出勤时长
Map<String, Double> signminsMap = new HashMap<>();
Map<String, Double> attendanceMinsMap = new HashMap<>(); Map<String, Double> attendanceMinsMap = new HashMap<>();
String acqAttenSql = " select resourceid, attendancemins, kqdate,signmins from kq_format_total where resourceid in (" + String.join(",", resIds) + ") and kqdate >='" + kqDate + "' and kqdate <='" + kqDate + "'"; String acqAttenSql = " select resourceid, attendancemins, kqdate,signmins from kq_format_total where resourceid in (" + String.join(",", resIds) + ") and kqdate >='" + kqDate + "' and kqdate <='" + kqDate + "'";
rs.executeQuery(acqAttenSql); rs.executeQuery(acqAttenSql);
@ -1756,8 +1897,13 @@ public class KQFormatData extends BaseBean {
Double attendancemins = Util.getDoubleValue(Util.null2String(rs.getString("attendancemins"))); Double attendancemins = Util.getDoubleValue(Util.null2String(rs.getString("attendancemins")));
Double signmins = Util.getDoubleValue(Util.null2String(rs.getString("signmins"))); Double signmins = Util.getDoubleValue(Util.null2String(rs.getString("signmins")));
String kqdate = Util.null2String(rs.getString("kqdate")); String kqdate = Util.null2String(rs.getString("kqdate"));
if (signmins >= 0.00) { if (signmins >= 0.00 ) {
attendanceMinsMap.put(resourceid + "|" + kqdate, signmins); // double signTemp = signmins / 60;
// int quotient = (int) (signTemp / 6);
signminsMap.put(resourceid+"|"+kqdate, signmins);
}
if (attendancemins >= 0.00 ) {
attendanceMinsMap.put(resourceid+"|"+kqdate, attendancemins);
} }
} }
KQWorkTime kqWorkTime = new KQWorkTime(); KQWorkTime kqWorkTime = new KQWorkTime();
@ -1770,28 +1916,43 @@ public class KQFormatData extends BaseBean {
if (!nightShiftList.contains(String.valueOf(serialid))) { if (!nightShiftList.contains(String.valueOf(serialid))) {
continue; continue;
} }
} else {
continue;
} }
} }
// double workingDayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|workingDayOvertime_4leave")));
// workingDayOvertime_4leave = workingDayOvertime_4leave < 0 ? 0 : workingDayOvertime_4leave; Object groupIdObj = serialInfo.get("groupId");
// double restDayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|restDayOvertime_4leave"))); String groupId = null;
// restDayOvertime_4leave = restDayOvertime_4leave < 0 ? 0 : restDayOvertime_4leave; if (Objects.isNull(groupIdObj)) {
// double holidayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|holidayOvertime_4leave"))); groupId = kqGroupMemberComInfo.getKQGroupId(res, kqDate);
// holidayOvertime_4leave = holidayOvertime_4leave < 0 ? 0 : holidayOvertime_4leave; } else {
// groupId = groupIdObj.toString();
// double workingDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|workingDayOvertime_nonleave"))); }
// workingDayOvertime_nonleave = workingDayOvertime_nonleave < 0 ? 0 : workingDayOvertime_nonleave;
// double restDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|restDayOvertime_nonleave"))); if ((!CollectionUtils.isEmpty(pbzbcSet)) && pbzbcSet.contains(groupId)) {
// restDayOvertime_nonleave = restDayOvertime_nonleave < 0 ? 0 : restDayOvertime_nonleave; double workingDayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|workingDayOvertime_4leave")));
// double holidayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|holidayOvertime_nonleave"))); workingDayOvertime_4leave = workingDayOvertime_4leave < 0 ? 0 : workingDayOvertime_4leave;
// holidayOvertime_nonleave = holidayOvertime_nonleave < 0 ? 0 : holidayOvertime_nonleave; double restDayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|restDayOvertime_4leave")));
// restDayOvertime_4leave = restDayOvertime_4leave < 0 ? 0 : restDayOvertime_4leave;
// double temp = workingDayOvertime_4leave + restDayOvertime_4leave + holidayOvertime_4leave + double holidayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|holidayOvertime_4leave")));
// workingDayOvertime_nonleave + restDayOvertime_nonleave + holidayOvertime_nonleave; holidayOvertime_4leave = holidayOvertime_4leave < 0 ? 0 : holidayOvertime_4leave;
// bb.writeLog("-=-temp:" + temp);
Double signmins = Util.getDoubleValue(Util.null2String(attendanceMinsMap.get(res + "|" + kqDate))); double workingDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|workingDayOvertime_nonleave")));
// bb.writeLog("-=-attendanceMins:" + attendanceMins); workingDayOvertime_nonleave = workingDayOvertime_nonleave < 0 ? 0 : workingDayOvertime_nonleave;
value = String.valueOf(Math.floor((signmins < 0.00 ? 0.00 : signmins) / 300)); double restDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|restDayOvertime_nonleave")));
restDayOvertime_nonleave = restDayOvertime_nonleave < 0 ? 0 : restDayOvertime_nonleave;
double holidayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|holidayOvertime_nonleave")));
holidayOvertime_nonleave = holidayOvertime_nonleave < 0 ? 0 : holidayOvertime_nonleave;
double temp = workingDayOvertime_4leave + restDayOvertime_4leave + holidayOvertime_4leave +
workingDayOvertime_nonleave + restDayOvertime_nonleave + holidayOvertime_nonleave;
Double attendanceMins = Util.getDoubleValue(Util.null2String(attendanceMinsMap.get(res + "|" + kqDate)));
value = String.valueOf(Math.floor(((attendanceMins < 0.00 ? 0.00 : attendanceMins) + temp) / 300));
}
if ((!CollectionUtils.isEmpty(zrzbcSet)) && zrzbcSet.contains(groupId)) {
Double signmins = Util.getDoubleValue(Util.null2String(signminsMap.get(res + "|" + kqDate)));
value = String.valueOf(Math.floor((signmins < 0.00 ? 0.00 : signmins) / 360));
}
} }
} }
} }
@ -1814,7 +1975,7 @@ public class KQFormatData extends BaseBean {
} }
//获取加班时长 //获取加班时长
// Map<String, Object> dailyFlowOverTimeData = getDailyFlowOverTimeDataAllowance(userId, kqDate); Map<String, Object> dailyFlowOverTimeData = getDailyFlowOverTimeDataAllowance(userId, kqDate);
//首先去除指定不享有的分部 //首先去除指定不享有的分部
List<String> subComoanyList = new ArrayList<>(); List<String> subComoanyList = new ArrayList<>();
@ -1835,6 +1996,22 @@ public class KQFormatData extends BaseBean {
sqlWhere += " and a.subcompanyid1 not in ("+subComoanys+") "; sqlWhere += " and a.subcompanyid1 not in ("+subComoanys+") ";
} }
// 获取责任制、排班次班次
Set<String> zrzbcSet = new HashSet<>();
Set<String> pbzbcSet = new HashSet<>();
String acqSql = "select kqgroup, grouptype from uf_ZeroPointSubSft";
rs.executeQuery(acqSql);
while (rs.next()) {
String kqgroup = Util.null2String(rs.getString("kqgroup"));
String grouptype = Util.null2String(rs.getString("grouptype"));
if (StringUtils.isNotBlank(kqgroup) && StringUtils.equals(grouptype, "0")) {
zrzbcSet.addAll(Arrays.asList(kqgroup.split(",")));
}
if (StringUtils.isNotBlank(kqgroup) && StringUtils.equals(grouptype, "1")) {
pbzbcSet.addAll(Arrays.asList(kqgroup.split(",")));
}
}
//指定人员不享受 //指定人员不享受
List<String> noRes = new ArrayList<>(); List<String> noRes = new ArrayList<>();
String acqNoResSql = "select resourceid from uf_NoStatAllRes where isdelete = 0 or isdelete is null"; String acqNoResSql = "select resourceid from uf_NoStatAllRes where isdelete = 0 or isdelete is null";
@ -1851,7 +2028,7 @@ public class KQFormatData extends BaseBean {
List<String> resIds = new ArrayList<>(); List<String> resIds = new ArrayList<>();
String acqResSql = "select a.id from hrmresource a where a.status in (0,1,2,3) " + sqlWhere; String acqResSql = "select a.id from hrmresource a where 1=1 " + sqlWhere;
bb.writeLog("acqResSql: " + acqResSql); bb.writeLog("acqResSql: " + acqResSql);
rs.executeQuery(acqResSql); rs.executeQuery(acqResSql);
@ -1869,6 +2046,7 @@ public class KQFormatData extends BaseBean {
KQGroupMemberComInfo kqGroupMemberComInfo = new KQGroupMemberComInfo(); KQGroupMemberComInfo kqGroupMemberComInfo = new KQGroupMemberComInfo();
//先获取到实际打卡时长 //先获取到实际打卡时长
Map<String, Double> signminsMap = new HashMap<>();
Map<String, Double> attendanceMinsMap = new HashMap<>(); Map<String, Double> attendanceMinsMap = new HashMap<>();
String acqAttenSql = " select resourceid, attendancemins, kqdate,signmins from kq_format_total where resourceid in (" + String.join(",",resIds) + ") and kqdate >='" + kqDate + "' and kqdate <='" + kqDate + "'"; String acqAttenSql = " select resourceid, attendancemins, kqdate,signmins from kq_format_total where resourceid in (" + String.join(",",resIds) + ") and kqdate >='" + kqDate + "' and kqdate <='" + kqDate + "'";
rs.executeQuery(acqAttenSql); rs.executeQuery(acqAttenSql);
@ -1878,7 +2056,12 @@ public class KQFormatData extends BaseBean {
Double signmins = Util.getDoubleValue(Util.null2String(rs.getString("signmins"))); Double signmins = Util.getDoubleValue(Util.null2String(rs.getString("signmins")));
String kqdate = Util.null2String(rs.getString("kqdate")); String kqdate = Util.null2String(rs.getString("kqdate"));
if (signmins >= 0.00 ) { if (signmins >= 0.00 ) {
attendanceMinsMap.put(resourceid+"|"+kqdate, signmins); // double signTemp = signmins / 60;
// int quotient = (int) (signTemp / 6);
signminsMap.put(resourceid+"|"+kqdate, signmins);
}
if (attendancemins >= 0.00 ) {
attendanceMinsMap.put(resourceid+"|"+kqdate, attendancemins);
} }
} }
@ -2008,27 +2191,42 @@ public class KQFormatData extends BaseBean {
if (StringUtils.isNotEmpty(addr) && (addr.contains("鸿仕达") || addr.toLowerCase().contains("hostar"))) { if (StringUtils.isNotEmpty(addr) && (addr.contains("鸿仕达") || addr.toLowerCase().contains("hostar"))) {
signNumber = signNumber + 1; signNumber = signNumber + 1;
} }
if (StringUtils.isNotEmpty(showaddress) && (showaddress.contains("台湾") || showaddress.contains("越南")
|| showaddress.toLowerCase().contains("hostar") || showaddress.toLowerCase().contains("vinh") || showaddress.toLowerCase().contains("ha noi"))) {
signNumber = signNumber + 1;
}
if (StringUtils.isNotEmpty(addr) && (addr.contains("台湾") || addr.contains("越南")
|| addr.toLowerCase().contains("hostar") || addr.toLowerCase().contains("vinh") || addr.toLowerCase().contains("ha noi"))) {
signNumber = signNumber + 1;
}
} }
} }
if (signNumber == 0 ) { if (signNumber == 0 ) {
// double workingDayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|workingDayOvertime_4leave"))); if ((!CollectionUtils.isEmpty(pbzbcSet)) && pbzbcSet.contains(groupId)) {
// workingDayOvertime_4leave = workingDayOvertime_4leave < 0 ? 0 : workingDayOvertime_4leave; double workingDayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|workingDayOvertime_4leave")));
// double restDayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|restDayOvertime_4leave"))); workingDayOvertime_4leave = workingDayOvertime_4leave < 0 ? 0 : workingDayOvertime_4leave;
// restDayOvertime_4leave = restDayOvertime_4leave < 0 ? 0 : restDayOvertime_4leave; double restDayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|restDayOvertime_4leave")));
// double holidayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|holidayOvertime_4leave"))); restDayOvertime_4leave = restDayOvertime_4leave < 0 ? 0 : restDayOvertime_4leave;
// holidayOvertime_4leave = holidayOvertime_4leave < 0 ? 0 : holidayOvertime_4leave; double holidayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|holidayOvertime_4leave")));
// holidayOvertime_4leave = holidayOvertime_4leave < 0 ? 0 : holidayOvertime_4leave;
// double workingDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|workingDayOvertime_nonleave")));
// workingDayOvertime_nonleave = workingDayOvertime_nonleave < 0 ? 0 : workingDayOvertime_nonleave; double workingDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|workingDayOvertime_nonleave")));
// double restDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|restDayOvertime_nonleave"))); workingDayOvertime_nonleave = workingDayOvertime_nonleave < 0 ? 0 : workingDayOvertime_nonleave;
// restDayOvertime_nonleave = restDayOvertime_nonleave < 0 ? 0 : restDayOvertime_nonleave; double restDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|restDayOvertime_nonleave")));
// double holidayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|holidayOvertime_nonleave"))); restDayOvertime_nonleave = restDayOvertime_nonleave < 0 ? 0 : restDayOvertime_nonleave;
// holidayOvertime_nonleave = holidayOvertime_nonleave < 0 ? 0 : holidayOvertime_nonleave; double holidayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|holidayOvertime_nonleave")));
// holidayOvertime_nonleave = holidayOvertime_nonleave < 0 ? 0 : holidayOvertime_nonleave;
// double temp = workingDayOvertime_4leave + restDayOvertime_4leave + holidayOvertime_4leave +
// workingDayOvertime_nonleave + restDayOvertime_nonleave + holidayOvertime_nonleave; double temp = workingDayOvertime_4leave + restDayOvertime_4leave + holidayOvertime_4leave +
Double signmins = Util.getDoubleValue(Util.null2String(attendanceMinsMap.get(res + "|" + kqDate))); workingDayOvertime_nonleave + restDayOvertime_nonleave + holidayOvertime_nonleave;
value = String.valueOf(Math.floor( (signmins < 0.00 ? 0.00 : signmins) / 300)); Double attendanceMins = Util.getDoubleValue(Util.null2String(attendanceMinsMap.get(res + "|" + kqDate)));
value = String.valueOf(Math.floor(((attendanceMins < 0.00 ? 0.00 : attendanceMins) + temp) / 300));
}
if ((!CollectionUtils.isEmpty(zrzbcSet)) && zrzbcSet.contains(groupId)) {
Double signmins = Util.getDoubleValue(Util.null2String(signminsMap.get(res + "|" + kqDate)));
value = String.valueOf(Math.floor((signmins < 0.00 ? 0.00 : signmins) / 360));
}
} }
} }
} }
@ -2043,75 +2241,48 @@ public class KQFormatData extends BaseBean {
String value = "0"; String value = "0";
RecordSet rs = new RecordSet(); RecordSet rs = new RecordSet();
String sql = ""; String sql = "";
String sqlWhere = " ";
try { try {
KQLeaveRulesComInfo kqLeaveRulesComInfo = new KQLeaveRulesComInfo(); // KQLeaveRulesComInfo kqLeaveRulesComInfo = new KQLeaveRulesComInfo();
if(id.length()>0){
sqlWhere +=" and b.id in("+id+") ";
}
// 首先获取出差公出流程信息 // 首先获取出差公出流程信息
Map<String, Object> evectionMap = new HashMap<>(); // Map<String, Object> evectionMap = new HashMap<>();
String evectionTableName = Util.null2String(bb.getPropValue("project_hostar","evectionTableName")); String evectionTableName = Util.null2String(bb.getPropValue("project_hostar","evectionTableName"));
sql = " select d.resourceid, d.belongdate, d.longitude, d.latitude from ( " + sql = " select a.* from (" +
" select a.belongdate, b.id as resourceid, b.subcompanyid1, b.departmentid, b.managerstr, b.managerid, b.loginid, c.jd as longitude, c.wd as latitude from kq_flow_split_evection a " + "select id, requestid, jd as longitude, wd as latitude from " + evectionTableName +
" left join hrmresource b " + " WHERE (sjccr = '" + id + "' or ','+CAST(nbtxr AS varchar(max))+',' like '%,'+CAST("+id+" AS varchar(10))+',%') " +
" on b.id = a.resourceid " + " and ksrq <='" + kqDateA + "' and (((sjjsrq is null or sjjsrq = '') and yjjsrq >= '" + kqDateA + "') or (sjjsrq is not null and sjjsrq != '' and sjjsrq >= '" + kqDateA + "'))" +
" left join " + evectionTableName + " c " + ") a, workflow_requestbase b WHERE a.requestId = b.requestId and b.currentnodetype != 0";
" on c.requestid = a.requestid " +
" where a.belongdate >='"+kqDateA+"' and a.belongdate <='"+kqDateA+"' " + sqlWhere +
" ) d " +
" where 1=1 " ;
bb.writeLog("sql: " + sql); bb.writeLog("sql: " + sql);
boolean isGoing = false;
rs.execute(sql); rs.execute(sql);
while (rs.next()) { while (rs.next()) {
String resourceid = Util.null2String(rs.getString("resourceid")); isGoing = true;
String belongdate = Util.null2String(rs.getString("belongdate"));
String longitude = Util.null2String(rs.getString("longitude"));
String latitude = Util.null2String(rs.getString("latitude"));
evectionMap.put( belongdate + "|" + resourceid, longitude + "|" + latitude );
} }
// bb.writeLog("evectionMap: " + evectionMap);
//获取外勤打卡数据
KQWorkTime kqWorkTime = new KQWorkTime();
kqWorkTime.setIsFormat(true);
Map< String, Map<String, Object>> lsCheckInfo = new HashMap<>(); Map< String, Map<String, Object>> lsCheckInfo = new HashMap<>();
for ( String key: evectionMap.keySet()) { List<Map<String, Object>> legWorkInfos = new ArrayList<>();
String[] split = key.split("\\|");
String kqDate = split[0]; if (isGoing) {
String userId = split[1]; String acqLegWorkSignSql = "select operate_time, longitude, latitude,address from mobile_sign where operater = ? and operate_date = '" + kqDateA + "' order by operate_time asc ";
WorkTimeEntity workTime = kqWorkTime.getWorkTime(userId, kqDate); rs.executeQuery(acqLegWorkSignSql, id);
List<TimeScopeEntity> lsSignTime = new ArrayList<>();
List<TimeScopeEntity> lsWorkTime = new ArrayList<>();
if (workTime != null) {
lsSignTime = workTime.getSignTime();//允许打卡时间
lsWorkTime = workTime.getWorkTime();//工作时间
}
//只支持一天一次上下班
if (lsWorkTime != null && lsWorkTime.size()==1 ) {
TimeScopeEntity signTimeScope = lsSignTime.get(0);
TimeScopeEntity workTimeScope = lsWorkTime.get(0);
List<Map<String, Object>> legWorkInfos = new ArrayList<>();
//获取允许打卡时间
String signBeginTime = signTimeScope.getBeginTime();
if (StringUtils.isNotBlank(signBeginTime)) {
signBeginTime = signBeginTime + ":00";
}
//获取上班时间
String workBeginTime = workTimeScope.getBeginTime();
if (StringUtils.isNotBlank(workBeginTime)) {
workBeginTime = workBeginTime + ":00";
}
String acqLegWorkSignSql = "select operate_time, longitude, latitude from mobile_sign where operater = ? and operate_date = '" + kqDate + "' and operate_time >='" + signBeginTime + "' order by operate_time asc ";
rs.executeQuery(acqLegWorkSignSql, userId);
while ( rs.next()) { while ( rs.next()) {
String operateTime = Util.null2String(rs.getString("operate_time")); String operateTime = Util.null2String(rs.getString("operate_time"));
String longitude = Util.null2String(rs.getString("longitude")); String longitude = Util.null2String(rs.getString("longitude"));
String latitude = Util.null2String(rs.getString("latitude")); String latitude = Util.null2String(rs.getString("latitude"));
String address = Util.null2String(rs.getString("address"));
if ("hostar".equalsIgnoreCase(address) || "鸿仕达".equals(address) || "增善路".equals(address)
|| "星圃路".equals(address) || "智慧新城".equals(address)) {
continue;
}
if (StringUtils.isNotEmpty(address) && (address.contains("鸿仕达") || address.contains("增善路")
|| address.contains("星圃路") || address.contains("智慧新城") || address.toLowerCase().contains("hostar"))) {
continue;
}
if (StringUtils.isNotEmpty(address) && (address.contains("台湾") || address.contains("越南")
|| address.toLowerCase().contains("hostar") || address.toLowerCase().contains("vinh") || address.toLowerCase().contains("ha noi"))) {
continue;
}
if ( StringUtils.isNotBlank(operateTime) && StringUtils.isNotBlank(longitude) && StringUtils.isNotBlank(latitude) ) { if ( StringUtils.isNotBlank(operateTime) && StringUtils.isNotBlank(longitude) && StringUtils.isNotBlank(latitude) ) {
Map<String, Object> temp = new HashMap<>(); Map<String, Object> temp = new HashMap<>();
temp.put("operateTime", operateTime); temp.put("operateTime", operateTime);
@ -2120,7 +2291,7 @@ public class KQFormatData extends BaseBean {
legWorkInfos.add(temp); legWorkInfos.add(temp);
} }
} }
if (legWorkInfos != null && legWorkInfos.size() > 0 ) { if (legWorkInfos != null && legWorkInfos.size() > 1 ) {
String tempSignIn = ""; String tempSignIn = "";
String tempSignInLatitude = ""; String tempSignInLatitude = "";
String tempSignInLongitude = ""; String tempSignInLongitude = "";
@ -2128,60 +2299,43 @@ public class KQFormatData extends BaseBean {
String tempSignOutLongitude = ""; String tempSignOutLongitude = "";
String tempSignOut = ""; String tempSignOut = "";
Map<String, Object> checkInfo = new HashMap<>(); Map<String, Object> checkInfo = new HashMap<>();
if ( legWorkInfos.size() == 1) {//只有一笔外勤卡直接算上班 for ( Map<String, Object> temp : legWorkInfos) {
Map<String, Object> temp = legWorkInfos.get(0);
String operateTime = Util.null2String(temp.get("operateTime")); String operateTime = Util.null2String(temp.get("operateTime"));
String longitude = Util.null2String(temp.get("longitude")); String longitude = Util.null2String(temp.get("longitude"));
String latitude = Util.null2String(temp.get("latitude")); String latitude = Util.null2String(temp.get("latitude"));
checkInfo.put("signDate", kqDate);//签到签退日期 if (StringUtils.isBlank(tempSignIn)) {
checkInfo.put("signInTime", operateTime);//签到时间 tempSignIn = operateTime;
checkInfo.put("signInLatitude", latitude);//签到纬度 tempSignInLatitude = latitude;
checkInfo.put("signInLongitude", longitude);//签到经度 tempSignInLongitude = longitude;
lsCheckInfo.put(userId + "|" + kqDate, checkInfo); } else {
if ( operateTime.compareTo(tempSignIn) < 0 ) {
} else { tempSignIn = operateTime;
for ( Map<String, Object> temp : legWorkInfos) { tempSignInLatitude = latitude;
String operateTime = Util.null2String(temp.get("operateTime")); tempSignInLongitude = longitude;
String longitude = Util.null2String(temp.get("longitude"));
String latitude = Util.null2String(temp.get("latitude"));
if (operateTime.compareTo(workBeginTime) < 0) {//获取上班时间点之前最早的一笔卡
if (StringUtils.isBlank(tempSignIn)) {
tempSignIn = operateTime;
tempSignInLatitude = latitude;
tempSignInLongitude = longitude;
} else {
if ( operateTime.compareTo(tempSignIn) < 0 ) {
tempSignIn = operateTime;
tempSignInLatitude = latitude;
tempSignInLongitude = longitude;
}
}
} }
if ( operateTime.compareTo(workBeginTime) > 0) {//下班卡取最晚的一笔 }
if (StringUtils.isBlank(tempSignIn)) { if (StringUtils.isBlank(tempSignOut)) {
tempSignOut = operateTime; tempSignOut = operateTime;
tempSignOutLatitude = latitude; tempSignOutLatitude = latitude;
tempSignOutLongitude = longitude; tempSignOutLongitude = longitude;
} else { } else {
if ( operateTime.compareTo(tempSignOut) > 0 ) { if ( operateTime.compareTo(tempSignOut) > 0 ) {
tempSignOut = operateTime; tempSignOut = operateTime;
tempSignOutLatitude = latitude; tempSignOutLatitude = latitude;
tempSignOutLongitude = longitude; tempSignOutLongitude = longitude;
}
}
} }
} }
checkInfo.put("signDate", kqDate);//签到签退日期
checkInfo.put("signInTime", tempSignIn);//签到时间
checkInfo.put("signInLatitude", tempSignInLatitude);//签到纬度
checkInfo.put("signInLongitude", tempSignInLongitude);//签到经度
checkInfo.put("signOutTime", tempSignOut);//签退时间
checkInfo.put("signOutLatitude", tempSignOutLatitude);//签退纬度
checkInfo.put("signOutLongitude", tempSignOutLongitude);//签退经度
lsCheckInfo.put(userId + "|" + kqDate, checkInfo);
} }
// }
checkInfo.put("signDate", kqDateA);//签到签退日期
checkInfo.put("signInTime", tempSignIn);//签到时间
checkInfo.put("signInLatitude", tempSignInLatitude);//签到纬度
checkInfo.put("signInLongitude", tempSignInLongitude);//签到经度
checkInfo.put("signOutTime", tempSignOut);//签退时间
checkInfo.put("signOutLatitude", tempSignOutLatitude);//签退纬度
checkInfo.put("signOutLongitude", tempSignOutLongitude);//签退经度
lsCheckInfo.put(id + "|" + kqDateA, checkInfo);
} }
}
} }
HostarUtil hostarUtil = new HostarUtil(); HostarUtil hostarUtil = new HostarUtil();
@ -2205,14 +2359,13 @@ public class KQFormatData extends BaseBean {
//根据外勤打卡数据计算餐补数据 //根据外勤打卡数据计算餐补数据
for (String key: lsCheckInfo.keySet()) { for (String key: lsCheckInfo.keySet()) {
String[] split = key.split("\\|"); // String[] split = key.split("\\|");
String userId = split[0]; // String userId = split[0];
String kqDate = split[1]; // String kqDate = split[1];
Map<String, Object> temp = lsCheckInfo.get(key); Map<String, Object> temp = lsCheckInfo.get(key);
String signInTime = Util.null2String(temp.get("signInTime")); String signInTime = Util.null2String(temp.get("signInTime"));
String signOutTime = Util.null2String(temp.get("signOutTime")); String signOutTime = Util.null2String(temp.get("signOutTime"));
if (StringUtils.isNotBlank(signInTime) && StringUtils.isNotBlank(signOutTime) ) { if (StringUtils.isNotBlank(signInTime) && StringUtils.isNotBlank(signOutTime) ) {
for (Map<String, String> me: MealMap) { for (Map<String, String> me: MealMap) {
@ -2229,7 +2382,8 @@ public class KQFormatData extends BaseBean {
if (StringUtils.isEmpty(value) || StringUtils.equals(value, "0")) { if (StringUtils.isEmpty(value) || StringUtils.equals(value, "0")) {
value = "1"; value = "1";
} else { } else {
value = String.valueOf(Integer.parseInt(value)); int valueT = Integer.parseInt(value) + 1;
value = String.valueOf(valueT);
} }
} }
} }
@ -2271,6 +2425,8 @@ public class KQFormatData extends BaseBean {
value = rs.getString("zeropoint"); value = rs.getString("zeropoint");
} }
} }
} else {
value = "0";
} }
} }
} catch (Exception e) { } catch (Exception e) {

@ -300,24 +300,20 @@ public class PunchOutButtonCmd extends AbstractCommonCommand<Map<String, Object>
} else { } else {
sqlDate = signDate; sqlDate = signDate;
} }
String acqEvecAndOutSql = " select sum(a.number) as number " + String acqEvecAndOutSql = " SELECT count(*) as number FROM workflow_requestbase WHERE requestid IN " +
" from ( " + "( SELECT requestid FROM " + evectionTableName + " WHERE (sjccr = '" + userId + "' or ','+CAST(nbtxr AS varchar(max))+',' like '%,'+CAST("
" SELECT " + +userId+" AS varchar(10))+',%') and ksrq <='" + sqlDate + "' and (((sjjsrq is null or sjjsrq = '') and yjjsrq >= '"
" count(*) as number " + + sqlDate + "') or (sjjsrq is not null and sjjsrq != '' and sjjsrq >= '" + sqlDate + "'))) ";
" FROM " +
" workflow_requestbase " +
" WHERE " +
" requestid IN ( SELECT requestid FROM " + evectionTableName + " WHERE (sqr = '" + userId + "' or ','+CAST(nbtxr AS varchar(max))+',' like '%,'+CAST("+userId+" AS varchar(10))+',%') and ksrq <='" + sqlDate + "' and (((sjjsrq is null or sjjsrq = '') and yjjsrq >= '" + sqlDate + "') or (sjjsrq is not null and sjjsrq != '' and sjjsrq >= '" + sqlDate + "'))) " +
// " AND currentnodetype = 3 " + // " AND currentnodetype = 3 " +
" UNION all " + // " UNION all " +
" SELECT " + // " SELECT " +
" count(*) as number " + // " count(*) as number " +
" FROM " + // " FROM " +
" workflow_requestbase " + // " workflow_requestbase " +
" WHERE " + // " WHERE " +
" requestid IN ( SELECT requestid FROM " + outTableName + " WHERE (sqr = '" + userId + "' or ','+CAST(nbtxr AS varchar(max))+',' like '%,'+CAST("+userId+" AS varchar(10))+',%') and ksrq <='" + sqlDate + "' and (((sjjsrq is null or sjjsrq = '') and yjjsrq >= '" + sqlDate + "') or (sjjsrq is not null and sjjsrq != '' and sjjsrq >= '" + sqlDate + "'))) " + // " requestid IN ( SELECT requestid FROM " + outTableName + " WHERE (sjccr = '" + userId + "' or ','+CAST(nbtxr AS varchar(max))+',' like '%,'+CAST("+userId+" AS varchar(10))+',%') and ksrq <='" + sqlDate + "' and (((sjjsrq is null or sjjsrq = '') and yjjsrq >= '" + sqlDate + "') or (sjjsrq is not null and sjjsrq != '' and sjjsrq >= '" + sqlDate + "'))) " +
// " AND currentnodetype = 3 " + //// " AND currentnodetype = 3 " +
") a "; // ") a ";
bb.writeLog("acqEvecAndOutSql: " + acqEvecAndOutSql); bb.writeLog("acqEvecAndOutSql: " + acqEvecAndOutSql);
rs.executeQuery(acqEvecAndOutSql); rs.executeQuery(acqEvecAndOutSql);
@ -413,9 +409,11 @@ public class PunchOutButtonCmd extends AbstractCommonCommand<Map<String, Object>
new KQFormatBiz().formatDate(""+userId,(belongdate.length() == 0 ? DateUtil.getCurrentDate() : belongdate)); new KQFormatBiz().formatDate(""+userId,(belongdate.length() == 0 ? DateUtil.getCurrentDate() : belongdate));
//外勤签到转的考勤 处理加班规则 //外勤签到转的考勤 处理加班规则
SplitActionUtil.pushOverTimeTasksAll(belongdate,belongdate,""+userId); SplitActionUtil.pushOverTimeTasksAll(belongdate,belongdate,""+userId);
SplitActionUtil.pushOverTimeTasksAll(signDate,signDate,""+userId);
} else { } else {
String acqSql = "select id from mobile_sign where operater = ? and operate_date = ? and operate_time = ? "; String acqSql = "select id from mobile_sign where operater = ? and operate_date = ? and operate_time = ? ";
rs.executeQuery(acqSql, userId, signDate, signTime); rs.executeQuery(acqSql, userId, signDate, signTime);
RecordSet rsTz = new RecordSet();
while (rs.next()) { while (rs.next()) {
String id = Util.null2String(rs.getString("id")); String id = Util.null2String(rs.getString("id"));
if (StringUtils.isNotBlank(id)) { if (StringUtils.isNotBlank(id)) {
@ -467,13 +465,14 @@ public class PunchOutButtonCmd extends AbstractCommonCommand<Map<String, Object>
String abnUuid = UUID.randomUUID().toString(); String abnUuid = UUID.randomUUID().toString();
String syncSql = "insert into uf_outsigntype (outsignid, signinfo, formmodeid, modedatacreater, " + String syncSql = "insert into uf_outsigntype (outsignid, signinfo, formmodeid, modedatacreater, " +
"modedatacreatertype, modedatacreatedate, modedatacreatetime, MODEUUID) values (?, ?, ?, ?, ?, ?, ?, ?)"; "modedatacreatertype, modedatacreatedate, modedatacreatetime, MODEUUID) values (?, ?, ?, ?, ?, ?, ?, ?)";
boolean b = rs.executeUpdate(syncSql, id, signInfoString, outSignTypeModeId, modedatacreater, modedatacreatertype, modedatacreatedate, modedatacreatetime, abnUuid); boolean b = rsTz.executeUpdate(syncSql, id, signInfoString, outSignTypeModeId, modedatacreater, modedatacreatertype, modedatacreatedate, modedatacreatetime, abnUuid);
if (b) { if (b) {
RecordSet rsTz1 = new RecordSet();
String billid = "-1"; String billid = "-1";
String acqModeIdSql = "select id from uf_outsigntype where MODEUUID = ?"; String acqModeIdSql = "select id from uf_outsigntype where MODEUUID = ?";
rs.executeQuery(acqModeIdSql, abnUuid); rsTz1.executeQuery(acqModeIdSql, abnUuid);
while (rs.next()) { while (rsTz1.next()) {
billid = Util.null2String(rs.getString("id")); billid = Util.null2String(rsTz1.getString("id"));
} }
bb.writeLog("billid" + billid); bb.writeLog("billid" + billid);
new HostarUtil().modePerRecon(modedatacreater, outSignTypeModeId, billid); new HostarUtil().modePerRecon(modedatacreater, outSignTypeModeId, billid);

@ -102,16 +102,17 @@ public class OutSignSyncAction implements Action {
if ("true".equals(belongdateIsNull)) { if ("true".equals(belongdateIsNull)) {
//外勤签到没有归属日期,遇到跨天班次打卡可能归属前一天,需要格式化前一天考勤 //外勤签到没有归属日期,遇到跨天班次打卡可能归属前一天,需要格式化前一天考勤
bb.writeLog("PunchOutButtonCmd:userId:" + userId + ":belongdate:" + DateUtil.getYesterday()); bb.writeLog("PunchOutButtonCmd:userId:" + userId + ":belongdate:" + DateUtil.getYesterday());
new KQFormatBiz().formatDate("" + userId, DateUtil.getYesterday()); new KQFormatBiz().formatDate(userId, DateUtil.getYesterday());
} }
bb.writeLog("PunchOutButtonCmd:userId:" + userId + ":belongdate:" + (belongdate.length() == 0 ? DateUtil.getCurrentDate() : belongdate)); bb.writeLog("PunchOutButtonCmd:userId:" + userId + ":belongdate:" + (belongdate.length() == 0 ? DateUtil.getCurrentDate() : belongdate));
if (belongdate.length() == 0) { if (belongdate.length() == 0) {
//外勤签到没有归属日期,遇到跨天班次打卡可能归属前一天,需要格式化前一天考勤 //外勤签到没有归属日期,遇到跨天班次打卡可能归属前一天,需要格式化前一天考勤
new KQFormatBiz().formatDate("" + userId, DateUtil.getYesterday()); new KQFormatBiz().formatDate(userId, DateUtil.getYesterday());
} }
new KQFormatBiz().formatDate("" + userId, (belongdate.length() == 0 ? DateUtil.getCurrentDate() : belongdate)); // new KQFormatBiz().formatDate(userId, (belongdate.length() == 0 ? DateUtil.getCurrentDate() : belongdate));
new KQFormatBiz().formatDate(userId, signDate);
//外勤签到转的考勤 处理加班规则 //外勤签到转的考勤 处理加班规则
SplitActionUtil.pushOverTimeTasksAll(belongdate, belongdate, "" + userId); SplitActionUtil.pushOverTimeTasksAll(signDate, signDate, userId);
} }
} }

Loading…
Cancel
Save