餐补优化

dev-zm
zhangming 9 months ago
parent 36c4b584ed
commit 5dbe3ebe2d

@ -292,7 +292,7 @@ public class KqDevServiceImpl extends Service implements KqDevService {
List<String> userIds = new ArrayList<>(); List<String> userIds = new ArrayList<>();
if (org.apache.commons.lang3.StringUtils.isEmpty(ryParam)) { if (org.apache.commons.lang3.StringUtils.isEmpty(ryParam)) {
bb.writeLog("1111."); bb.writeLog("1111.");
rs.executeQuery("select id from hrmresource"); rs.executeQuery("select id from hrmresource where status in(0,1,2,3)");
while (rs.next()) { while (rs.next()) {
userIds.add(rs.getString("id")); userIds.add(rs.getString("id"));
} }
@ -307,15 +307,62 @@ public class KqDevServiceImpl extends Service implements KqDevService {
result.put("code", "200"); result.put("code", "200");
return result; return result;
} }
ExecutorService executorService = ThreadPoolUtil.getThreadPool(null, null);
// 获取责任制、排班次班次
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 (org.apache.commons.lang3.StringUtils.isNotBlank(kqgroup) && org.apache.commons.lang3.StringUtils.equals(grouptype, "0")) {
zrzbcSet.addAll(Arrays.asList(kqgroup.split(",")));
}
if (org.apache.commons.lang3.StringUtils.isNotBlank(kqgroup) && org.apache.commons.lang3.StringUtils.equals(grouptype, "1")) {
pbzbcSet.addAll(Arrays.asList(kqgroup.split(",")));
}
}
// 鸿仁驻点餐补指定人员不享受
List<String> removeRes = new ArrayList<>();
String acqNoOtherStatAllResSql = "select resourceid from uf_NoOtherStatAllRe where isdelete is null or isdelete = 0 ";
rs.executeQuery(acqNoOtherStatAllResSql);
while (rs.next()){
String resourceid = Util.null2String(rs.getString("resourceid"));
if (org.apache.commons.lang3.StringUtils.isNotBlank(resourceid) ) {
removeRes.add(resourceid);
}
}
// 驻点餐补指定人员不享受
List<String> noRes = new ArrayList<>();
String acqNoResSql = "select resourceid from uf_NoStatAllRes where isdelete = 0 or isdelete is null";
rs.executeQuery(acqNoResSql);
while (rs.next()) {
String resourceid = Util.null2String(rs.getString("resourceid"));
if (org.apache.commons.lang3.StringUtils.isNotBlank(resourceid)) {
noRes.add(resourceid);
}
}
//获取夜班班次
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 (org.apache.commons.lang3.StringUtils.isNotBlank(shift)) {
nightShiftList.add(shift);
}
}
ExecutorService executorService = ThreadPoolUtil.getThreadPool("HandleCBDataThreadA", "20");
for (String userId : userIds) { for (String userId : userIds) {
for (String kqDate : allDates) { for (String kqDate : allDates) {
executorService.execute(new HandleCBDataThread(userId, kqDate)); executorService.execute(new HandleCBDataThread(userId, kqDate, zrzbcSet, pbzbcSet, removeRes, nightShiftList, noRes));
} }
} }
if (executorService.isTerminated()) {
executorService.shutdown();
}
} catch (Exception e) { } catch (Exception e) {
bb.writeLog("updateCbInfo error:" + e.getMessage()); bb.writeLog("updateCbInfo error:" + e.getMessage());
result.put("mes", "系统错误,请联系管理员!"); result.put("mes", "系统错误,请联系管理员!");

@ -55,13 +55,34 @@ public class HandleCBDataThread extends BaseBean implements Runnable{
private String kqDate; private String kqDate;
private Set<String> zrzbcSet;
private Set<String> pbzbcSet;
private List<String> removeRes;
private List<String> nightShiftList;
private List<String> noRes;
private static DecimalFormat df = new DecimalFormat("0.00"); private static DecimalFormat df = new DecimalFormat("0.00");
private DecimalFormatSymbols symbols = new DecimalFormatSymbols(); private DecimalFormatSymbols symbols = new DecimalFormatSymbols();
public HandleCBDataThread(String userId, String kqDate) { // public HandleCBDataThread(String userId, String kqDate) {
// this.userId = userId;
// this.kqDate = kqDate;
// }
public HandleCBDataThread(String userId, String kqDate, Set<String> zrzbcSet, Set<String> pbzbcSet, List<String> removeRes,
List<String> nightShiftList, List<String> noRes) {
this.userId = userId; this.userId = userId;
this.kqDate = kqDate; this.kqDate = kqDate;
this.zrzbcSet = zrzbcSet;
this.pbzbcSet = pbzbcSet;
this.removeRes = removeRes;
this.nightShiftList = nightShiftList;
this.noRes = noRes;
} }
@Override @Override
@ -79,26 +100,51 @@ public class HandleCBDataThread extends BaseBean implements Runnable{
return; return;
} }
//获取加班时长
Map<String,Object> dailyFlowOverTimeData = getDailyFlowOverTimeDataAllowance(userId, kqDate);
KQGroupMemberComInfo kqGroupMemberComInfo = new KQGroupMemberComInfo();
//先获取到实际打卡时长
Map<String, Double> signminsMap = 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 + "'";
rs.executeQuery(acqAttenSql);
while (rs.next()) {
String resourceid = Util.null2String(rs.getString("resourceid"));
Double attendancemins = Util.getDoubleValue(Util.null2String(rs.getString("attendancemins")));
Double signmins = Util.getDoubleValue(Util.null2String(rs.getString("signmins")));
String kqdate = Util.null2String(rs.getString("kqdate"));
if (signmins >= 0.00 ) {
signminsMap.put(resourceid+"|"+kqdate, signmins);
}
if (attendancemins >= 0.00 ) {
attendanceMinsMap.put(resourceid+"|"+kqdate, attendancemins);
}
}
String groupId = kqGroupMemberComInfo.getKQGroupId(userId, kqDate);
// 获取考勤二开--夜班补助 // 获取考勤二开--夜班补助
String nightShiftSubsidy = getNightShiftSubsidy(userId, kqDate); String nightShiftSubsidy = getNightShiftSubsidy(userId, kqDate, nightShiftList, dailyFlowOverTimeData, signminsMap, attendanceMinsMap,
groupId, zrzbcSet, pbzbcSet);
baseBean.writeLog("nightShiftSubsidy:" + nightShiftSubsidy); baseBean.writeLog("nightShiftSubsidy:" + nightShiftSubsidy);
if (StringUtils.isEmpty(nightShiftSubsidy)) { if (StringUtils.isEmpty(nightShiftSubsidy)) {
nightShiftSubsidy = "0"; nightShiftSubsidy = "0";
} }
// 获取考勤二开--鸿仁驻点餐补 // 获取考勤二开--鸿仁驻点餐补
String otherStatAllowance = getOtherStatAllowance(userId, kqDate); String otherStatAllowance = getOtherStatAllowance(userId, kqDate, dailyFlowOverTimeData, signminsMap, attendanceMinsMap, removeRes);
baseBean.writeLog("otherStatAllowance:" + otherStatAllowance); baseBean.writeLog("otherStatAllowance:" + otherStatAllowance);
if (StringUtils.isEmpty(otherStatAllowance)) { if (StringUtils.isEmpty(otherStatAllowance)) {
otherStatAllowance = "0"; otherStatAllowance = "0";
} }
// 考勤二开--精密夜班餐补 // 考勤二开--精密夜班餐补
String nightAllowance = getNightAllowance(userId, kqDate); String nightAllowance = getNightAllowance(userId, kqDate, dailyFlowOverTimeData, signminsMap, attendanceMinsMap, nightShiftList);
baseBean.writeLog("nightAllowance:" + nightAllowance); baseBean.writeLog("nightAllowance:" + nightAllowance);
if (StringUtils.isEmpty(nightAllowance)) { if (StringUtils.isEmpty(nightAllowance)) {
nightAllowance = "0"; nightAllowance = "0";
} }
// 考勤二开--驻点餐补 // 考勤二开--驻点餐补
String statAllowance = getStatAllowance(userId, kqDate); String statAllowance = getStatAllowance(userId, kqDate, dailyFlowOverTimeData, signminsMap, attendanceMinsMap, noRes);
baseBean.writeLog("statAllowance:" + statAllowance); baseBean.writeLog("statAllowance:" + statAllowance);
if (StringUtils.isEmpty(statAllowance)) { if (StringUtils.isEmpty(statAllowance)) {
statAllowance = "0"; statAllowance = "0";
@ -113,7 +159,7 @@ public class HandleCBDataThread extends BaseBean implements Runnable{
mealAllowance = "0"; mealAllowance = "0";
} }
// 考勤二开--零点补助 // 考勤二开--零点补助
String zeropoint = getZeroBt(userId, kqDate); String zeropoint = getZeroBt(userId, kqDate, nightShiftList);
baseBean.writeLog("zeropoint:" + zeropoint); baseBean.writeLog("zeropoint:" + zeropoint);
if (StringUtils.isEmpty(zeropoint)) { if (StringUtils.isEmpty(zeropoint)) {
zeropoint = "0"; zeropoint = "0";
@ -124,8 +170,10 @@ public class HandleCBDataThread extends BaseBean implements Runnable{
String cbxxjlModeId = rs1.getPropValue("hostar_zm_prop", "cbxxjl_modeid"); String cbxxjlModeId = rs1.getPropValue("hostar_zm_prop", "cbxxjl_modeid");
if (rs.next()) { if (rs.next()) {
int cbxxjlId = rs.getInt("id"); int cbxxjlId = rs.getInt("id");
rs1.executeUpdate("update uf_cbxxjlb set hrzdcb = ?, jmybcb = ?, zdcb = ?, ybbz = ?, cccb = ?, ldbz = ? where id = ?", SimpleDateFormat dtFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
otherStatAllowance, nightAllowance, statAllowance, nightShiftSubsidy, mealAllowance, zeropoint, cbxxjlId); String nowDateTime = dtFormat.format(new Date());
rs1.executeUpdate("update uf_cbxxjlb set hrzdcb = ?, jmybcb = ?, zdcb = ?, ybbz = ?, cccb = ?, ldbz = ?, modedatamodifydatetime = ? where id = ?",
otherStatAllowance, nightAllowance, statAllowance, nightShiftSubsidy, mealAllowance, zeropoint, nowDateTime, cbxxjlId);
//权限重构 //权限重构
ModeRightInfo ModeRightInfo = new ModeRightInfo(); ModeRightInfo ModeRightInfo = new ModeRightInfo();
ModeRightInfo.setNewRight(true); ModeRightInfo.setNewRight(true);
@ -162,22 +210,67 @@ public class HandleCBDataThread extends BaseBean implements Runnable{
} }
} }
public String getZeroBt(String userId, String kqDate) { public Map<String,Object> getDailyFlowOverTimeDataAllowance(String userId, String kqDate){
BaseBean bb = new BaseBean(); BaseBean bb = new BaseBean();
Map<String,Object> datas = new HashMap<>();;
RecordSet rs = new RecordSet(); RecordSet rs = new RecordSet();
String value = "0"; String sql = "";
try { String sqlWhere = " ";
//获取夜班班次 try{
List<String> nightShiftList = new ArrayList<>(); if(userId.length()>0){
String acqNightShiftSql = "select shift from uf_nightshiftmanage where isdelete is null or isdelete = 0"; sqlWhere +=" and a.id in("+userId+") ";
rs.executeQuery(acqNightShiftSql); }
KQOvertimeRulesBiz kqOvertimeRulesBiz = new KQOvertimeRulesBiz();
int uintType = kqOvertimeRulesBiz.getMinimumUnit();//当前加班单位
sql = " select resourceid,changeType,belongdate,paidLeaveEnable, sum(cast(duration_min as decimal(18,4))) as val "+
" from hrmresource a, kq_flow_overtime b "+
" where a.id = b.resourceid and belongdate >='"+kqDate+"' and belongdate <='"+kqDate+"' " +sqlWhere+
" group by resourceid,changeType,paidLeaveEnable,belongdate ";
rs.execute(sql);
while (rs.next()) { while (rs.next()) {
String shift = Util.null2String(rs.getString("shift")); String resourceid = rs.getString("resourceid");
if (StringUtils.isNotBlank(shift)) { String belongdate = rs.getString("belongdate");
nightShiftList.add(shift); String paidLeaveEnable = rs.getString("paidLeaveEnable");
int changeType =rs.getInt("changeType");//1-节假日、2-工作日、3-休息日
double value = rs.getDouble("val")<0?0:rs.getDouble("val");
if(uintType==3 || uintType== 5 || uintType== 6){//按小时计算
value = Util.getDoubleValue(KQDurationCalculatorUtil.getDurationRound(value+""));
}else{//按天计算
value = Util.getDoubleValue(KQDurationCalculatorUtil.getDurationRound(value+""));
}
String flowType = "";
if(changeType==1){
flowType = "holidayOvertime";
}else if(changeType==2){
flowType = "workingDayOvertime";
}else if(changeType==3){
flowType = "restDayOvertime";
} }
if("1".equalsIgnoreCase(paidLeaveEnable)){
//1表示关联调休
flowType += "_4leave";
}else{
//0表示不关联调休
flowType += "_nonleave";
}
//df.format 默认是不四舍五入的 0.125这样的就会直接变成0.12了
symbols.setDecimalSeparator('.');
df.setMaximumFractionDigits(5);
df.setDecimalFormatSymbols(symbols);
datas.put(resourceid+"|"+belongdate+"|"+flowType, df.format(value));
} }
}catch (Exception e){
bb.writeLog("getDailyFlowOverTimeDataAllowance error:" + e.getMessage());
}
return datas;
}
public String getZeroBt(String userId, String kqDate, List<String> nightShiftList) {
BaseBean bb = new BaseBean();
RecordSet rs = new RecordSet();
String value = "0";
try {
//获取当天班次 //获取当天班次
KQWorkTime kqWorkTime = new KQWorkTime(); KQWorkTime kqWorkTime = new KQWorkTime();
Map<String, Object> serialInfo = kqWorkTime.getSerialInfo(userId, kqDate, false); Map<String, Object> serialInfo = kqWorkTime.getSerialInfo(userId, kqDate, false);
@ -202,61 +295,13 @@ public class HandleCBDataThread extends BaseBean implements Runnable{
return value; return value;
} }
public String getNightShiftSubsidy(String userId, String kqDate) { public String getNightShiftSubsidy(String userId, String kqDate, List<String> nightShiftList, Map<String,Object> dailyFlowOverTimeData,
Map<String, Double> signminsMap, Map<String, Double> attendanceMinsMap, String groupId,
Set<String> zrzbcSet, Set<String> pbzbcSet) {
BaseBean bb = new BaseBean(); BaseBean bb = new BaseBean();
RecordSet rs = new RecordSet();
String value = ""; String value = "";
try { try {
//获取夜班班次
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);
}
}
//获取加班时长
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();
//先获取到实际打卡时长
Map<String, Double> signminsMap = 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 + "'";
rs.executeQuery(acqAttenSql);
while (rs.next()) {
String resourceid = Util.null2String(rs.getString("resourceid"));
Double attendancemins = Util.getDoubleValue(Util.null2String(rs.getString("attendancemins")));
Double signmins = Util.getDoubleValue(Util.null2String(rs.getString("signmins")));
String kqdate = Util.null2String(rs.getString("kqdate"));
if (signmins >= 0.00 ) {
signminsMap.put(resourceid+"|"+kqdate, signmins);
}
if (attendancemins >= 0.00 ) {
attendanceMinsMap.put(resourceid+"|"+kqdate, attendancemins);
}
}
KQWorkTime kqWorkTime = new KQWorkTime(); KQWorkTime kqWorkTime = new KQWorkTime();
//获取当天班次 //获取当天班次
@ -272,8 +317,6 @@ public class HandleCBDataThread extends BaseBean implements Runnable{
} }
} }
String groupId = kqGroupMemberComInfo.getKQGroupId(userId, kqDate);
if ((!CollectionUtils.isEmpty(pbzbcSet)) && pbzbcSet.contains(groupId)) { if ((!CollectionUtils.isEmpty(pbzbcSet)) && pbzbcSet.contains(groupId)) {
double workingDayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(userId + "|" + kqDate + "|workingDayOvertime_4leave"))); double workingDayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(userId + "|" + kqDate + "|workingDayOvertime_4leave")));
workingDayOvertime_4leave = workingDayOvertime_4leave < 0 ? 0 : workingDayOvertime_4leave; workingDayOvertime_4leave = workingDayOvertime_4leave < 0 ? 0 : workingDayOvertime_4leave;
@ -306,36 +349,16 @@ public class HandleCBDataThread extends BaseBean implements Runnable{
return value; return value;
} }
public String getOtherStatAllowance(String userId, String kqDate) { public String getOtherStatAllowance(String userId, String kqDate, Map<String,Object> dailyFlowOverTimeData, Map<String, Double> signminsMap,
Map<String, Double> attendanceMinsMap, List<String> removeRes) {
BaseBean bb = new BaseBean(); BaseBean bb = new BaseBean();
RecordSet rs = new RecordSet(); RecordSet rs = new RecordSet();
String value = ""; String value = "";
String sqlWhere = " "; String sqlWhere = " ";
try { try {
KQLeaveRulesComInfo kqLeaveRulesComInfo = new KQLeaveRulesComInfo();
if(userId.length()>0){ if(userId.length()>0){
sqlWhere +=" and a.id in("+userId+") "; sqlWhere +=" and a.id in("+userId+") ";
} }
//获取加班时长
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)) {
//查询该分部下的人员 //查询该分部下的人员
@ -351,41 +374,9 @@ public class HandleCBDataThread extends BaseBean implements Runnable{
resIds.add(id); resIds.add(id);
} }
} }
// bb.writeLog("resIds: " + resIds);
KQGroupMemberComInfo kqGroupMemberComInfo = new KQGroupMemberComInfo(); 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();
//先获取到实际打卡时长
Map<String, Double> signminsMap = 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 + "'";
rs.executeQuery(acqAttenSql);
while (rs.next()) {
String resourceid = Util.null2String(rs.getString("resourceid"));
Double attendancemins = Util.getDoubleValue(Util.null2String(rs.getString("attendancemins")));
Double signmins = Util.getDoubleValue(Util.null2String(rs.getString("signmins")));
String kqdate = Util.null2String(rs.getString("kqdate"));
if (signmins >= 0.00 ) {
// 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<>();
String acqNoOtherStatAllResSql = "select resourceid from uf_NoOtherStatAllRe where isdelete is null or isdelete = 0 ";
rs.executeQuery(acqNoOtherStatAllResSql);
while (rs.next()){
String resourceid = Util.null2String(rs.getString("resourceid"));
if (StringUtils.isNotBlank(resourceid) ) {
removeRes.add(resourceid);
}
}
if ( removeRes != null && removeRes.size() > 0 ) { if ( removeRes != null && removeRes.size() > 0 ) {
resIds.removeIf(removeRes::contains); resIds.removeIf(removeRes::contains);
} }
@ -539,12 +530,6 @@ public class HandleCBDataThread extends BaseBean implements Runnable{
} else if (v >= 9.00) { } else if (v >= 9.00) {
value = "2"; 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));
// }
//
} }
} }
} }
@ -555,112 +540,18 @@ public class HandleCBDataThread extends BaseBean implements Runnable{
return value; return value;
} }
public Map<String,Object> getDailyFlowOverTimeDataAllowance(String userId, String kqDate){ public String getNightAllowance(String userId, String kqDate, Map<String, Object> dailyFlowOverTimeData, Map<String, Double> signminsMap,
BaseBean bb = new BaseBean(); Map<String, Double> attendanceMinsMap, List<String> nightShiftList){
Map<String,Object> datas = new HashMap<>();;
RecordSet rs = new RecordSet();
String sql = "";
String sqlWhere = " ";
String valueRes = "";
try{
if(userId.length()>0){
sqlWhere +=" and a.id in("+userId+") ";
}
KQOvertimeRulesBiz kqOvertimeRulesBiz = new KQOvertimeRulesBiz();
int uintType = kqOvertimeRulesBiz.getMinimumUnit();//当前加班单位
double hoursToDay = kqOvertimeRulesBiz.getHoursToDay();//当前天跟小时计算关系
String valueField = "";
if(uintType==3 || uintType== 5 || uintType== 6){//按小时计算
valueField = "sum( case when durationrule='3' then duration else duration*"+hoursToDay+" end) as val";
}else{//按天计算
valueField = "sum( case when durationrule='3' then duration/"+hoursToDay+" else duration end) as val";
}
sql = " select resourceid,changeType,belongdate,paidLeaveEnable, sum(cast(duration_min as decimal(18,4))) as val "+
" from hrmresource a, kq_flow_overtime b "+
" where a.id = b.resourceid and belongdate >='"+kqDate+"' and belongdate <='"+kqDate+"' " +sqlWhere+
" group by resourceid,changeType,paidLeaveEnable,belongdate ";
rs.execute(sql);
while (rs.next()) {
String resourceid = rs.getString("resourceid");
String belongdate = rs.getString("belongdate");
String paidLeaveEnable = rs.getString("paidLeaveEnable");
int changeType =rs.getInt("changeType");//1-节假日、2-工作日、3-休息日
double value = rs.getDouble("val")<0?0:rs.getDouble("val");
if(uintType==3 || uintType== 5 || uintType== 6){//按小时计算
value = Util.getDoubleValue(KQDurationCalculatorUtil.getDurationRound(value+""));
}else{//按天计算
value = Util.getDoubleValue(KQDurationCalculatorUtil.getDurationRound(value+""));
}
String flowType = "";
if(changeType==1){
flowType = "holidayOvertime";
}else if(changeType==2){
flowType = "workingDayOvertime";
}else if(changeType==3){
flowType = "restDayOvertime";
}
if("1".equalsIgnoreCase(paidLeaveEnable)){
//1表示关联调休
flowType += "_4leave";
}else{
//0表示不关联调休
flowType += "_nonleave";
}
//df.format 默认是不四舍五入的 0.125这样的就会直接变成0.12了
symbols.setDecimalSeparator('.');
df.setMaximumFractionDigits(5);
df.setDecimalFormatSymbols(symbols);
datas.put(resourceid+"|"+belongdate+"|"+flowType, df.format(value));
}
}catch (Exception e){
bb.writeLog("getDailyFlowOverTimeDataAllowance error:" + e.getMessage());
}
return datas;
}
public String getNightAllowance(String userId, String kqDate){
BaseBean bb = new BaseBean(); BaseBean bb = new BaseBean();
String value = ""; String value = "";
RecordSet rs = new RecordSet(); RecordSet rs = new RecordSet();
String sql = ""; String sql = "";
String sqlWhere = " "; String sqlWhere = " ";
try { try {
KQLeaveRulesComInfo kqLeaveRulesComInfo = new KQLeaveRulesComInfo();
if(userId.length()>0){ if(userId.length()>0){
sqlWhere +=" and a.id in("+userId+") "; sqlWhere +=" and a.id in("+userId+") ";
} }
//获取加班时长
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<>();
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);
}
}
if (nightShiftList != null & nightShiftList.size() > 0) { if (nightShiftList != null & nightShiftList.size() > 0) {
String nightshiftsub = Util.null2String(bb.getPropValue("project_hostar", "nightshiftsubcompany")); String nightshiftsub = Util.null2String(bb.getPropValue("project_hostar", "nightshiftsubcompany"));
if (StringUtils.isNotBlank(nightshiftsub)) { if (StringUtils.isNotBlank(nightshiftsub)) {
@ -677,30 +568,8 @@ public class HandleCBDataThread extends BaseBean implements Runnable{
resIds.add(id); resIds.add(id);
} }
} }
// bb.writeLog("resIds: " + resIds);
KQGroupMemberComInfo kqGroupMemberComInfo = new KQGroupMemberComInfo();
if (resIds != null && resIds.size() > 0) { if (resIds != null && resIds.size() > 0) {
HostarUtil houtil = new HostarUtil();
//先获取到出勤时长
Map<String, Double> signminsMap = 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 + "'";
rs.executeQuery(acqAttenSql);
while (rs.next()) {
String resourceid = Util.null2String(rs.getString("resourceid"));
Double attendancemins = Util.getDoubleValue(Util.null2String(rs.getString("attendancemins")));
Double signmins = Util.getDoubleValue(Util.null2String(rs.getString("signmins")));
String kqdate = Util.null2String(rs.getString("kqdate"));
if (signmins >= 0.00 ) {
// 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();
for (String res : resIds) { for (String res : resIds) {
//获取当天班次 //获取当天班次
@ -716,15 +585,6 @@ public class HandleCBDataThread extends BaseBean implements Runnable{
} }
} }
Object groupIdObj = serialInfo.get("groupId");
String groupId = null;
if (Objects.isNull(groupIdObj)) {
groupId = kqGroupMemberComInfo.getKQGroupId(res, kqDate);
} else {
groupId = groupIdObj.toString();
}
// if ((!CollectionUtils.isEmpty(pbzbcSet)) && pbzbcSet.contains(groupId)) {
double workingDayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|workingDayOvertime_4leave"))); double workingDayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|workingDayOvertime_4leave")));
workingDayOvertime_4leave = workingDayOvertime_4leave < 0 ? 0 : workingDayOvertime_4leave; workingDayOvertime_4leave = workingDayOvertime_4leave < 0 ? 0 : workingDayOvertime_4leave;
double restDayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|restDayOvertime_4leave"))); double restDayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|restDayOvertime_4leave")));
@ -743,11 +603,6 @@ public class HandleCBDataThread extends BaseBean implements Runnable{
workingDayOvertime_nonleave + restDayOvertime_nonleave + holidayOvertime_nonleave; workingDayOvertime_nonleave + restDayOvertime_nonleave + holidayOvertime_nonleave;
Double attendanceMins = Util.getDoubleValue(Util.null2String(attendanceMinsMap.get(res + "|" + kqDate))); Double attendanceMins = Util.getDoubleValue(Util.null2String(attendanceMinsMap.get(res + "|" + kqDate)));
value = String.valueOf(Math.floor(((attendanceMins < 0.00 ? 0.00 : attendanceMins) + temp) / 300)); 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));
// }
} }
} }
} }
@ -758,21 +613,18 @@ public class HandleCBDataThread extends BaseBean implements Runnable{
return value; return value;
} }
public String getStatAllowance(String userId, String kqDate) { public String getStatAllowance(String userId, String kqDate, Map<String, Object> dailyFlowOverTimeData, Map<String, Double> signminsMap,
Map<String, Double> attendanceMinsMap, List<String> noRes) {
BaseBean bb = new BaseBean(); BaseBean bb = new BaseBean();
String value = "0"; String value = "0";
RecordSet rs = new RecordSet(); RecordSet rs = new RecordSet();
String sql = ""; String sql = "";
String sqlWhere = " "; String sqlWhere = " ";
try { try {
KQLeaveRulesComInfo kqLeaveRulesComInfo = new KQLeaveRulesComInfo();
if(userId.length()>0){ if(userId.length()>0){
sqlWhere +=" and a.id in("+userId+") "; sqlWhere +=" and a.id in("+userId+") ";
} }
//获取加班时长
Map<String, Object> dailyFlowOverTimeData = getDailyFlowOverTimeDataAllowance(userId, kqDate);
//首先去除指定不享有的分部 //首先去除指定不享有的分部
List<String> subComoanyList = new ArrayList<>(); List<String> subComoanyList = new ArrayList<>();
String acqNoStatAllSql = "select subcompany from uf_NoStatAllSubCom where isdelete = 0 or isdelete is null"; String acqNoStatAllSql = "select subcompany from uf_NoStatAllSubCom where isdelete = 0 or isdelete is null";
@ -791,33 +643,6 @@ public class HandleCBDataThread extends BaseBean implements Runnable{
if (StringUtils.isNotBlank(subComoanys)) { if (StringUtils.isNotBlank(subComoanys)) {
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<>();
String acqNoResSql = "select resourceid from uf_NoStatAllRes where isdelete = 0 or isdelete is null";
rs.executeQuery(acqNoResSql);
while (rs.next()) {
String resourceid = Util.null2String(rs.getString("resourceid"));
if (StringUtils.isNotBlank(resourceid)) {
noRes.add(resourceid);
}
}
if ( noRes !=null && noRes.size()>0) { if ( noRes !=null && noRes.size()>0) {
sqlWhere += " and a.id not in ("+String.join(",", noRes)+") "; sqlWhere += " and a.id not in ("+String.join(",", noRes)+") ";
} }
@ -837,30 +662,7 @@ public class HandleCBDataThread extends BaseBean implements Runnable{
// bb.writeLog("resIds: " + resIds); // bb.writeLog("resIds: " + resIds);
if (resIds != null && resIds.size() > 0 && StringUtils.isNotBlank(kqDate)) { if (resIds != null && resIds.size() > 0 && StringUtils.isNotBlank(kqDate)) {
HostarUtil houtil = new HostarUtil();
KQGroupMemberComInfo kqGroupMemberComInfo = new KQGroupMemberComInfo(); KQGroupMemberComInfo kqGroupMemberComInfo = new KQGroupMemberComInfo();
// 先获取到实际打卡时长
Map<String, Double> signminsMap = 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 + "'";
rs.executeQuery(acqAttenSql);
while (rs.next()) {
String resourceid = Util.null2String(rs.getString("resourceid"));
Double attendancemins = Util.getDoubleValue(Util.null2String(rs.getString("attendancemins")));
Double signmins = Util.getDoubleValue(Util.null2String(rs.getString("signmins")));
String kqdate = Util.null2String(rs.getString("kqdate"));
if (signmins >= 0.00 ) {
// 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> grouplist = new ArrayList<String>(); List<String> grouplist = new ArrayList<String>();
String acqGroupSql = "select kqgroup from uf_StatAlloKqGroup where isdelete is null or isdelete = 0 " ; String acqGroupSql = "select kqgroup from uf_StatAlloKqGroup where isdelete is null or isdelete = 0 " ;
@ -1039,10 +841,7 @@ public class HandleCBDataThread extends BaseBean implements Runnable{
RecordSet rs = new RecordSet(); RecordSet rs = new RecordSet();
String sql = ""; String sql = "";
try { try {
// KQLeaveRulesComInfo kqLeaveRulesComInfo = new KQLeaveRulesComInfo();
// 首先获取出差公出流程信息 // 首先获取出差公出流程信息
// 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 a.* from (" + sql = " select a.* from (" +
"select id, requestid, jd as longitude, wd as latitude from " + evectionTableName + "select id, requestid, jd as longitude, wd as latitude from " + evectionTableName +

@ -23,7 +23,6 @@ import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols; import java.text.DecimalFormatSymbols;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
@ -168,7 +167,7 @@ public class KQFormatData extends BaseBean {
for (int i = 0; i < lsParam.size(); i++) { for (int i = 0; i < lsParam.size(); i++) {
List<Object> param = lsParam.get(i); List<Object> param = lsParam.get(i);
boolean isok = rs.executeUpdate(sql, param); boolean isok = rs.executeUpdate(sql, param);
kqLog.info("插入记录:userId:"+userId+":kqDate:"+kqDate+":param:"+JSON.toJSONString(param)+":isok:"+isok+"::uuid::"+uuid); kqLog.info("插入记录:userId:"+userId+":kqDate:"+kqDate+":param:"+JSON.toJSONString(param)+":isok:"+isok+"::uuid::"+uuid);
} }
sql = " insert into kq_format_total(resourceid,kqdate,subcompanyid,departmentid,jobtitle,groupid,serialid,workdays,workmins," + sql = " insert into kq_format_total(resourceid,kqdate,subcompanyid,departmentid,jobtitle,groupid,serialid,workdays,workmins," +
@ -194,7 +193,6 @@ public class KQFormatData extends BaseBean {
boolean isok2 = rs.executeUpdate(sql, userId, kqDate); boolean isok2 = rs.executeUpdate(sql, userId, kqDate);
kqLog.info("插入记录2新:userId:"+userId+":kqDate:"+kqDate+":isok:"+isok2); kqLog.info("插入记录2新:userId:"+userId+":kqDate:"+kqDate+":isok:"+isok2);
kqLog.info("sqlTotal:"+sql); kqLog.info("sqlTotal:"+sql);
} }
}else{ }else{
Map<String,Object> definedFieldInfo = new KQFormatBiz().getDefinedField(); Map<String,Object> definedFieldInfo = new KQFormatBiz().getDefinedField();
@ -274,9 +272,6 @@ 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";
@ -515,7 +510,7 @@ public class KQFormatData extends BaseBean {
//取卡 //取卡
List<Object> lsCheckInfo = new KQFormatSignData().getSignInfo(userId,signTimeScope,workTimeScope,kqDate,preDate,nextDate,kqTimesArrayComInfo,hostIps,uuid,shiftCount,shiftI); List<Object> lsCheckInfo = new KQFormatSignData().getSignInfo(userId,signTimeScope,workTimeScope,kqDate,preDate,nextDate,kqTimesArrayComInfo,hostIps,uuid,shiftCount,shiftI);
// bb.writeLog("kqformatdata lscheckinfo: " + lsCheckInfo); bb.writeLog("kqformatdata lscheckinfo: " + lsCheckInfo);
kqLog.info("lsCheckInfo" + JSONObject.toJSONString(lsCheckInfo)+"::userId" + userId + "kqDate==" + kqDate+":hostIps:"+hostIps+":uuid::"+uuid); kqLog.info("lsCheckInfo" + JSONObject.toJSONString(lsCheckInfo)+"::userId" + userId + "kqDate==" + kqDate+":hostIps:"+hostIps+":uuid::"+uuid);
if(this.writeLog) { if(this.writeLog) {
logInfo.put(""+weaver.systeminfo.SystemEnv.getHtmlLabelName(10005297,weaver.general.ThreadVarLanguage.getLang())+"",signBeginDateTime); logInfo.put(""+weaver.systeminfo.SystemEnv.getHtmlLabelName(10005297,weaver.general.ThreadVarLanguage.getLang())+"",signBeginDateTime);
@ -528,7 +523,7 @@ public class KQFormatData extends BaseBean {
for (int j = 0; lsCheckInfo != null && j < lsCheckInfo.size(); j++) { for (int j = 0; lsCheckInfo != null && j < lsCheckInfo.size(); j++) {
Map<String, Object> checkInfo = (Map<String, Object>) lsCheckInfo.get(j); Map<String, Object> checkInfo = (Map<String, Object>) lsCheckInfo.get(j);
// bb.writeLog("kqformatdata checkInfo: " + checkInfo); bb.writeLog("kqformatdata checkInfo: " + checkInfo);
String signStatus = Util.null2String(checkInfo.get("signStatus")); String signStatus = Util.null2String(checkInfo.get("signStatus"));
String signId = Util.null2String(checkInfo.get("signId")); String signId = Util.null2String(checkInfo.get("signId"));
@ -726,10 +721,10 @@ public class KQFormatData extends BaseBean {
if (workFlowInfo.get(dateKey) != null) { if (workFlowInfo.get(dateKey) != null) {
workFlow = (List<Object>) workFlowInfo.get(dateKey); workFlow = (List<Object>) workFlowInfo.get(dateKey);
} }
// bb.writeLog("kqformatdata workFlow: " + workFlow); bb.writeLog("kqformatdata workFlow: " + workFlow);
for (int j = 0; workFlow != null && j < workFlow.size(); j++) { for (int j = 0; workFlow != null && j < workFlow.size(); j++) {
Map<String, Object> data = (Map<String, Object>) workFlow.get(j); Map<String, Object> data = (Map<String, Object>) workFlow.get(j);
// bb.writeLog("kqformatdata workFlow data: " + workFlow); bb.writeLog("kqformatdata workFlow data: " + workFlow);
String flowType = Util.null2String(data.get("flowtype")); String flowType = Util.null2String(data.get("flowtype"));
String newLeaveType = Util.null2String(data.get("newleavetype")); String newLeaveType = Util.null2String(data.get("newleavetype"));
String signtype = Util.null2String(data.get("signtype")); String signtype = Util.null2String(data.get("signtype"));
@ -878,6 +873,7 @@ public class KQFormatData extends BaseBean {
kqShiftRuleEntity.setForgotBeginWorkCheckMins(forgotBeginWorkCheckMins); kqShiftRuleEntity.setForgotBeginWorkCheckMins(forgotBeginWorkCheckMins);
kqShiftRuleEntity.setEarlyInMins(earlyInMins); kqShiftRuleEntity.setEarlyInMins(earlyInMins);
kqShiftRuleEntity.setLateOutMins(lateOutMins); kqShiftRuleEntity.setLateOutMins(lateOutMins);
kqShiftRuleEntity.setNosign_is_absent(nosign_is_absent);
kqLog.info("人性化规则处理前数据" + JSONObject.toJSONString(kqShiftRuleEntity)); kqLog.info("人性化规则处理前数据" + JSONObject.toJSONString(kqShiftRuleEntity));
bb.writeLog("人性化规则处理前数据: " + JSONObject.toJSONString(kqShiftRuleEntity)); bb.writeLog("人性化规则处理前数据: " + JSONObject.toJSONString(kqShiftRuleEntity));
@ -979,6 +975,21 @@ public class KQFormatData extends BaseBean {
if(beforeBegin || attendanceMins < 0) {//还未到上班时间,不用计算任何状体 if(beforeBegin || attendanceMins < 0) {//还未到上班时间,不用计算任何状体
attendanceMins = 0; attendanceMins = 0;
} }
/**
*
*
*/
String nosign_ishandle = Util.null2String(kqShiftRuleEntity.getNosign_ishandle());
if("1".equals(nosign_ishandle)){
forgotCheckMins = 0;
}else if("2".equals(nosign_ishandle)){
forgotCheckMins = 0;
forgotBeginWorkCheckMins = 0;
}
kqLog.info("实际出勤计算公式" + "实际出勤=应出勤- 旷工-请假-迟到-早退 userId" + userId + "kqDate==" + kqDate+":hostIps:"+hostIps+":uuid::"+uuid); kqLog.info("实际出勤计算公式" + "实际出勤=应出勤- 旷工-请假-迟到-早退 userId" + userId + "kqDate==" + kqDate+":hostIps:"+hostIps+":uuid::"+uuid);
kqLog.info("实际出勤计算结果" + attendanceMins + "=" + workMins + "- " + absenteeismMins + "-" + leaveMins + "-" + (beLateMins + graveBeLateMins) + "-" + (leaveEarlyMins - graveLeaveEarlyMins)+" userId" + userId + "kqDate==" + kqDate+":hostIps:"+hostIps+":uuid::"+uuid); kqLog.info("实际出勤计算结果" + attendanceMins + "=" + workMins + "- " + absenteeismMins + "-" + leaveMins + "-" + (beLateMins + graveBeLateMins) + "-" + (leaveEarlyMins - graveLeaveEarlyMins)+" userId" + userId + "kqDate==" + kqDate+":hostIps:"+hostIps+":uuid::"+uuid);
bb.writeLog("实际出勤计算结果" + attendanceMins + "=" + workMins + "- " + absenteeismMins + "-" + leaveMins + "-" + (beLateMins + graveBeLateMins) + "-" + (leaveEarlyMins - graveLeaveEarlyMins)+" userId" + userId + "kqDate==" + kqDate+":hostIps:"+hostIps); bb.writeLog("实际出勤计算结果" + attendanceMins + "=" + workMins + "- " + absenteeismMins + "-" + leaveMins + "-" + (beLateMins + graveBeLateMins) + "-" + (leaveEarlyMins - graveLeaveEarlyMins)+" userId" + userId + "kqDate==" + kqDate+":hostIps:"+hostIps);
@ -1200,7 +1211,7 @@ public class KQFormatData extends BaseBean {
params.add(zeroPointSub); params.add(zeroPointSub);
/*考勤二开--零点补助end*/ /*考勤二开--零点补助end*/
bb.writeLog("params end. "); bb.writeLog("params: " + params);
Map<String,Object> definedFieldInfo = new KQFormatBiz().getDefinedField(); Map<String,Object> definedFieldInfo = new KQFormatBiz().getDefinedField();
String[] definedFields = Util.splitString(Util.null2String(definedFieldInfo.get("definedField")),","); String[] definedFields = Util.splitString(Util.null2String(definedFieldInfo.get("definedField")),",");
@ -1426,43 +1437,17 @@ 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 from kq_format_total where resourceid in (" + userId + ") and kqdate >='" + kqDate + "' and kqdate <='" + kqDate + "'";
rs.executeQuery(acqAttenSql); rs.executeQuery(acqAttenSql);
while (rs.next()) { while (rs.next()) {
String resourceid = Util.null2String(rs.getString("resourceid")); String resourceid = Util.null2String(rs.getString("resourceid"));
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")));
String kqdate = Util.null2String(rs.getString("kqdate")); String kqdate = Util.null2String(rs.getString("kqdate"));
if (signmins >= 0.00 ) {
signminsMap.put(resourceid+"|"+kqdate, signmins);
}
if (attendancemins >= 0.00 ) { if (attendancemins >= 0.00 ) {
attendanceMinsMap.put(resourceid+"|"+kqdate, attendancemins); attendanceMinsMap.put(resourceid+"|"+kqdate, attendancemins);
} }
@ -1477,38 +1462,11 @@ public class KQFormatData extends BaseBean {
if ( !nightShiftList.contains(String.valueOf(serialid))) { if ( !nightShiftList.contains(String.valueOf(serialid))) {
return "0"; return "0";
} }
} else {
return "0";
} }
} }
String groupId = kqGroupMemberComInfo.getKQGroupId(userId, kqDate); Double attendanceMins = Util.getDoubleValue(Util.null2String(attendanceMinsMap.get(userId + "|" + kqDate)));
value = (( attendanceMins / 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());
@ -1529,28 +1487,12 @@ 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 1=1 " + sqlWhere; String acqResSql = "select a.id from hrmresource a where a.status in (0,1,2,3) " + sqlWhere;
bb.writeLog("acqResSql: " + acqResSql); bb.writeLog("acqResSql: " + acqResSql);
rs.executeQuery(acqResSql); rs.executeQuery(acqResSql);
@ -1560,29 +1502,21 @@ public class KQFormatData extends BaseBean {
resIds.add(id); resIds.add(id);
} }
} }
// 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 from kq_format_total where resourceid in (" + String.join(",", resIds) + ") and kqdate >='" + kqDate + "' and kqdate <='" + kqDate + "'";
rs.executeQuery(acqAttenSql); rs.executeQuery(acqAttenSql);
while (rs.next()) { while (rs.next()) {
String resourceid = Util.null2String(rs.getString("resourceid")); String resourceid = Util.null2String(rs.getString("resourceid"));
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")));
String kqdate = Util.null2String(rs.getString("kqdate")); String kqdate = Util.null2String(rs.getString("kqdate"));
if (signmins >= 0.00 ) { if (attendancemins >= 0.00) {
// double signTemp = signmins / 60; attendanceMinsMap.put(resourceid + "|" + kqdate, attendancemins);
// 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<>();
@ -1684,74 +1618,43 @@ public class KQFormatData extends BaseBean {
} }
Integer signNumber = 0; Integer signNumber = 0;
if (signIdList !=null && signIdList.size() > 0) { if (signIdList !=null && signIdList.size() > 0) {
String acqShowAddress = "select showaddress,addr,signfrom from hrmschedulesign where id in (" + String.join(",", signIdList) + ") "; String acqShowAddress = "select showaddress,addr from hrmschedulesign where id in (" + String.join(",", signIdList) + ") ";
// bb.writeLog("acqShowAddress: " + acqShowAddress); // bb.writeLog("acqShowAddress: " + acqShowAddress);
rs.executeQuery(acqShowAddress); rs.executeQuery(acqShowAddress);
while (rs.next()) { while (rs.next()) {
String showaddress = Util.null2String(rs.getString("showaddress")); String showaddress = Util.null2String(rs.getString("showaddress"));
String signfrom = Util.null2String(rs.getString("signfrom"));
if (StringUtils.isEmpty(signfrom) || !StringUtils.equals(signfrom, "e9mobile")) {
signNumber = signNumber + 1;
}
String addr = Util.null2String(rs.getString("addr")); String addr = Util.null2String(rs.getString("addr"));
if ("鸿仕达".equals(showaddress) || "hostar".equalsIgnoreCase(showaddress) || "鸿仕达".equals(addr) || "hostar".equalsIgnoreCase(addr)) { if ("鸿仕达".equals(showaddress) || "hostar".equalsIgnoreCase(showaddress) || "鸿仕达".equals(addr) || "hostar".equalsIgnoreCase(addr)) {
signNumber = signNumber + 1; signNumber = signNumber + 1;
} }
if (StringUtils.isNotEmpty(showaddress) && (showaddress.contains("鸿仕达") || showaddress.toLowerCase().contains("hostar"))) {
signNumber = signNumber + 1;
}
if (StringUtils.isNotEmpty(addr) && (addr.contains("鸿仕达") || addr.toLowerCase().contains("hostar"))) {
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) {
double workingDayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|workingDayOvertime_4leave")));
workingDayOvertime_4leave = workingDayOvertime_4leave < 0 ? 0 : workingDayOvertime_4leave;
double restDayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|restDayOvertime_4leave")));
restDayOvertime_4leave = restDayOvertime_4leave < 0 ? 0 : restDayOvertime_4leave;
double holidayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|holidayOvertime_4leave")));
holidayOvertime_4leave = holidayOvertime_4leave < 0 ? 0 : holidayOvertime_4leave;
String groupId = kqGroupMemberComInfo.getKQGroupId(res, kqDate); 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")));
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;
if (signNumber == 0) { double temp = workingDayOvertime_4leave + restDayOvertime_4leave + holidayOvertime_4leave +
double minValue = 0.00; workingDayOvertime_nonleave + restDayOvertime_nonleave + holidayOvertime_nonleave;
if ((!CollectionUtils.isEmpty(pbzbcSet)) && pbzbcSet.contains(groupId)) { // bb.writeLog("-=-temp:" + temp);
double workingDayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|workingDayOvertime_4leave"))); Double attendanceMins = Util.getDoubleValue(Util.null2String(attendanceMinsMap.get(res + "|" + kqDate)));
workingDayOvertime_4leave = workingDayOvertime_4leave < 0 ? 0 : workingDayOvertime_4leave; // bb.writeLog("-=-attendanceMins:" + attendanceMins);
double restDayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|restDayOvertime_4leave"))); double v = Math.round (((attendanceMins < 0.00) ? 0.00 : attendanceMins) + temp) / 60.00;
restDayOvertime_4leave = restDayOvertime_4leave < 0 ? 0 : restDayOvertime_4leave; value = "0";
double holidayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|holidayOvertime_4leave"))); if (v >= 4.00 && v < 9.00) {
holidayOvertime_4leave = holidayOvertime_4leave < 0 ? 0 : holidayOvertime_4leave; value = "1";
} else if (v >= 9.00) {
double workingDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|workingDayOvertime_nonleave"))); value = "2";
workingDayOvertime_nonleave = workingDayOvertime_nonleave < 0 ? 0 : workingDayOvertime_nonleave;
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)));
if (attendanceMins < 0.00) {
attendanceMins = 0.00;
}
minValue = attendanceMins + temp;
double v = Math.round (Math.max(minValue, 0.00)) / 60.00;
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));
} }
} }
} }
@ -1841,22 +1744,6 @@ 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<>();
String acqNightShiftSql = "select shift from uf_nightshiftmanage where isdelete is null or isdelete = 0"; String acqNightShiftSql = "select shift from uf_nightshiftmanage where isdelete is null or isdelete = 0";
@ -1873,7 +1760,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 1=1 " + sqlWhere; String acqResSql = "select a.id from hrmresource a where a.status in (0,1,2,3) " + sqlWhere;
bb.writeLog("acqResSql: " + acqResSql); bb.writeLog("acqResSql: " + acqResSql);
rs.executeQuery(acqResSql); rs.executeQuery(acqResSql);
@ -1883,28 +1770,20 @@ public class KQFormatData extends BaseBean {
resIds.add(id); resIds.add(id);
} }
} }
// 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 from kq_format_total where resourceid in (" + String.join(",", resIds) + ") and kqdate >='" + kqDate + "' and kqdate <='" + kqDate + "'";
rs.executeQuery(acqAttenSql); rs.executeQuery(acqAttenSql);
while (rs.next()) { while (rs.next()) {
String resourceid = Util.null2String(rs.getString("resourceid")); String resourceid = Util.null2String(rs.getString("resourceid"));
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")));
String kqdate = Util.null2String(rs.getString("kqdate")); String kqdate = Util.null2String(rs.getString("kqdate"));
if (signmins >= 0.00 ) { if (attendancemins >= 0.00) {
// double signTemp = signmins / 60; attendanceMinsMap.put(resourceid + "|" + kqdate, attendancemins);
// 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();
@ -1917,43 +1796,28 @@ 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;
double restDayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|restDayOvertime_4leave")));
restDayOvertime_4leave = restDayOvertime_4leave < 0 ? 0 : restDayOvertime_4leave;
double holidayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|holidayOvertime_4leave")));
holidayOvertime_4leave = holidayOvertime_4leave < 0 ? 0 : holidayOvertime_4leave;
Object groupIdObj = serialInfo.get("groupId"); double workingDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|workingDayOvertime_nonleave")));
String groupId = null; workingDayOvertime_nonleave = workingDayOvertime_nonleave < 0 ? 0 : workingDayOvertime_nonleave;
if (Objects.isNull(groupIdObj)) { double restDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|restDayOvertime_nonleave")));
groupId = kqGroupMemberComInfo.getKQGroupId(res, kqDate); restDayOvertime_nonleave = restDayOvertime_nonleave < 0 ? 0 : restDayOvertime_nonleave;
} else { double holidayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|holidayOvertime_nonleave")));
groupId = groupIdObj.toString(); holidayOvertime_nonleave = holidayOvertime_nonleave < 0 ? 0 : holidayOvertime_nonleave;
}
if ((!CollectionUtils.isEmpty(pbzbcSet)) && pbzbcSet.contains(groupId)) { double temp = workingDayOvertime_4leave + restDayOvertime_4leave + holidayOvertime_4leave +
double workingDayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|workingDayOvertime_4leave"))); workingDayOvertime_nonleave + restDayOvertime_nonleave + holidayOvertime_nonleave;
workingDayOvertime_4leave = workingDayOvertime_4leave < 0 ? 0 : workingDayOvertime_4leave; // bb.writeLog("-=-temp:" + temp);
double restDayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|restDayOvertime_4leave"))); Double attendanceMins = Util.getDoubleValue(Util.null2String(attendanceMinsMap.get(res + "|" + kqDate)));
restDayOvertime_4leave = restDayOvertime_4leave < 0 ? 0 : restDayOvertime_4leave; // bb.writeLog("-=-attendanceMins:" + attendanceMins);
double holidayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|holidayOvertime_4leave"))); value = String.valueOf(Math.floor(((attendanceMins < 0.00 ? 0.00 : attendanceMins) + temp) / 300));
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 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));
}
} }
} }
} }
@ -1997,22 +1861,6 @@ 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";
@ -2029,7 +1877,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 1=1 " + sqlWhere; String acqResSql = "select a.id from hrmresource a where a.status in (0,1,2,3) " + sqlWhere;
bb.writeLog("acqResSql: " + acqResSql); bb.writeLog("acqResSql: " + acqResSql);
rs.executeQuery(acqResSql); rs.executeQuery(acqResSql);
@ -2039,28 +1887,21 @@ public class KQFormatData extends BaseBean {
resIds.add(id); resIds.add(id);
} }
} }
// bb.writeLog("resIds: " + resIds); bb.writeLog("resIds: " + resIds);
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();
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 from kq_format_total where resourceid in (" + String.join(",",resIds) + ") and kqdate >='" + kqDate + "' and kqdate <='" + kqDate + "'";
rs.executeQuery(acqAttenSql); rs.executeQuery(acqAttenSql);
while (rs.next()) { while (rs.next()) {
String resourceid = Util.null2String(rs.getString("resourceid")); String resourceid = Util.null2String(rs.getString("resourceid"));
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")));
String kqdate = Util.null2String(rs.getString("kqdate")); String kqdate = Util.null2String(rs.getString("kqdate"));
if (signmins >= 0.00 ) {
// double signTemp = signmins / 60;
// int quotient = (int) (signTemp / 6);
signminsMap.put(resourceid+"|"+kqdate, signmins);
}
if (attendancemins >= 0.00 ) { if (attendancemins >= 0.00 ) {
attendanceMinsMap.put(resourceid+"|"+kqdate, attendancemins); attendanceMinsMap.put(resourceid+"|"+kqdate, attendancemins);
} }
@ -2169,65 +2010,40 @@ public class KQFormatData extends BaseBean {
} }
} }
} }
// bb.writeLog("signIdList " + signIdList); bb.writeLog("signIdList " + signIdList);
Integer signNumber = 0; Integer signNumber = 0;
if (signIdList !=null && signIdList.size() > 0) { if (signIdList !=null && signIdList.size() > 0) {
String acqShowAddress = "select showaddress,addr,signfrom from hrmschedulesign where id in (" + String.join(",", signIdList) + ") "; String acqShowAddress = "select showaddress,addr from hrmschedulesign where id in (" + String.join(",", signIdList) + ") ";
// bb.writeLog("acqShowAddress: " + acqShowAddress); bb.writeLog("acqShowAddress: " + acqShowAddress);
rs.executeQuery(acqShowAddress); rs.executeQuery(acqShowAddress);
while (rs.next()) { while (rs.next()) {
String showaddress = Util.null2String(rs.getString("showaddress")); String showaddress = Util.null2String(rs.getString("showaddress"));
String signfrom = Util.null2String(rs.getString("signfrom"));
if (StringUtils.isEmpty(signfrom) || !StringUtils.equals(signfrom, "e9mobile")) {
signNumber = signNumber + 1;
}
String addr = Util.null2String(rs.getString("addr")); String addr = Util.null2String(rs.getString("addr"));
if ("鸿仕达".equals(showaddress) || "hostar".equalsIgnoreCase(showaddress) || "鸿仕达".equals(addr) || "hostar".equalsIgnoreCase(addr)) { if ("鸿仕达".equals(showaddress) || "hostar".equalsIgnoreCase(showaddress) || "鸿仕达".equals(addr) || "hostar".equalsIgnoreCase(addr)) {
signNumber = signNumber + 1; signNumber = signNumber + 1;
} }
if (StringUtils.isNotEmpty(showaddress) && (showaddress.contains("鸿仕达") || showaddress.toLowerCase().contains("hostar"))) {
signNumber = signNumber + 1;
}
if (StringUtils.isNotEmpty(addr) && (addr.contains("鸿仕达") || addr.toLowerCase().contains("hostar"))) {
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 ) {
if ((!CollectionUtils.isEmpty(pbzbcSet)) && pbzbcSet.contains(groupId)) { double workingDayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|workingDayOvertime_4leave")));
double workingDayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|workingDayOvertime_4leave"))); workingDayOvertime_4leave = workingDayOvertime_4leave < 0 ? 0 : workingDayOvertime_4leave;
workingDayOvertime_4leave = workingDayOvertime_4leave < 0 ? 0 : workingDayOvertime_4leave; double restDayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|restDayOvertime_4leave")));
double restDayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|restDayOvertime_4leave"))); restDayOvertime_4leave = restDayOvertime_4leave < 0 ? 0 : restDayOvertime_4leave;
restDayOvertime_4leave = restDayOvertime_4leave < 0 ? 0 : restDayOvertime_4leave; double holidayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|holidayOvertime_4leave")));
double holidayOvertime_4leave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|holidayOvertime_4leave"))); holidayOvertime_4leave = holidayOvertime_4leave < 0 ? 0 : holidayOvertime_4leave;
holidayOvertime_4leave = holidayOvertime_4leave < 0 ? 0 : holidayOvertime_4leave;
double workingDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|workingDayOvertime_nonleave")));
double workingDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|workingDayOvertime_nonleave"))); workingDayOvertime_nonleave = workingDayOvertime_nonleave < 0 ? 0 : workingDayOvertime_nonleave;
workingDayOvertime_nonleave = workingDayOvertime_nonleave < 0 ? 0 : workingDayOvertime_nonleave; double restDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|restDayOvertime_nonleave")));
double restDayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|restDayOvertime_nonleave"))); restDayOvertime_nonleave = restDayOvertime_nonleave < 0 ? 0 : restDayOvertime_nonleave;
restDayOvertime_nonleave = restDayOvertime_nonleave < 0 ? 0 : restDayOvertime_nonleave; double holidayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|holidayOvertime_nonleave")));
double holidayOvertime_nonleave = Util.getDoubleValue(Util.null2String(dailyFlowOverTimeData.get(res + "|" + kqDate + "|holidayOvertime_nonleave"))); holidayOvertime_nonleave = holidayOvertime_nonleave < 0 ? 0 : holidayOvertime_nonleave;
holidayOvertime_nonleave = holidayOvertime_nonleave < 0 ? 0 : holidayOvertime_nonleave;
double temp = workingDayOvertime_4leave + restDayOvertime_4leave + holidayOvertime_4leave +
double temp = workingDayOvertime_4leave + restDayOvertime_4leave + holidayOvertime_4leave + workingDayOvertime_nonleave + restDayOvertime_nonleave + holidayOvertime_nonleave;
workingDayOvertime_nonleave + restDayOvertime_nonleave + holidayOvertime_nonleave; Double attendanceMins = Util.getDoubleValue(Util.null2String(attendanceMinsMap.get(res + "|" + kqDate)));
Double attendanceMins = Util.getDoubleValue(Util.null2String(attendanceMinsMap.get(res + "|" + kqDate))); value = String.valueOf(Math.floor( ((attendanceMins < 0.00 ? 0.00 : attendanceMins) + temp) / 300));
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));
}
} }
} }
} }
@ -2242,136 +2058,150 @@ 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 a.* from (" + sql = " select d.resourceid, d.belongdate, d.longitude, d.latitude from ( " +
"select id, requestid, jd as longitude, wd as latitude from " + evectionTableName + " 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 " +
" WHERE (sjccr = '" + id + "' or ','+CAST(nbtxr AS varchar(max))+',' like '%,'+CAST("+id+" AS varchar(10))+',%') " + " left join hrmresource b " +
" and ksrq <='" + kqDateA + "' and (((sjjsrq is null or sjjsrq = '') and yjjsrq >= '" + kqDateA + "') or (sjjsrq is not null and sjjsrq != '' and sjjsrq >= '" + kqDateA + "'))" + " on b.id = a.resourceid " +
") a, workflow_requestbase b WHERE a.requestId = b.requestId and b.currentnodetype != 0"; " left join " + evectionTableName + " c " +
" 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()) {
isGoing = true; String resourceid = Util.null2String(rs.getString("resourceid"));
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<>();
List<Map<String, Object>> legWorkInfos = new ArrayList<>(); for ( String key: evectionMap.keySet()) {
String[] split = key.split("\\|");
// 解析日期字符串为LocalDate对象 String kqDate = split[0];
LocalDate date = LocalDate.parse(kqDateA, DateTimeFormatter.ISO_DATE); String userId = split[1];
// 获取后一天的日期 WorkTimeEntity workTime = kqWorkTime.getWorkTime(userId, kqDate);
LocalDate nextDay = date.plusDays(1); List<TimeScopeEntity> lsSignTime = new ArrayList<>();
// 将后一天的日期转换为字符串 List<TimeScopeEntity> lsWorkTime = new ArrayList<>();
String kqDateB = nextDay.format(DateTimeFormatter.ISO_DATE); if (workTime != null) {
String dateParamA = kqDateA + " 05:00:00"; lsSignTime = workTime.getSignTime();//允许打卡时间
String dateParamB = kqDateB + " 04:59:59"; lsWorkTime = workTime.getWorkTime();//工作时间
}
if (isGoing) {
// String acqLegWorkSignSql = "select operate_time, longitude, latitude,address from mobile_sign where operater = ? " + //只支持一天一次上下班
// "and operate_date = '" + kqDateA + "' order by operate_time asc "; if (lsWorkTime != null && lsWorkTime.size()==1 ) {
String acqLegWorkSignSql = "select operate_time, longitude, latitude,address,operate_date,CONCAT(operate_date, ' ', operate_time) as dateTimeNew from mobile_sign " + TimeScopeEntity signTimeScope = lsSignTime.get(0);
"where operater = ? and CAST(operate_date + ' ' + operate_time AS datetime) >= CAST('" + dateParamA+ "' AS datetime) " + TimeScopeEntity workTimeScope = lsWorkTime.get(0);
"and CAST(operate_date + ' ' + operate_time AS datetime) <= CAST('" + dateParamB + "' AS datetime) "; List<Map<String, Object>> legWorkInfos = new ArrayList<>();
rs.executeQuery(acqLegWorkSignSql, id); //获取允许打卡时间
while ( rs.next()) { String signBeginTime = signTimeScope.getBeginTime();
String operateTime = Util.null2String(rs.getString("operate_time")); if (StringUtils.isNotBlank(signBeginTime)) {
String longitude = Util.null2String(rs.getString("longitude")); signBeginTime = signBeginTime + ":00";
String latitude = Util.null2String(rs.getString("latitude"));
String address = Util.null2String(rs.getString("address"));
String dateTimeNew = Util.null2String(rs.getString("dateTimeNew"));
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"))) { String workBeginTime = workTimeScope.getBeginTime();
continue; if (StringUtils.isNotBlank(workBeginTime)) {
workBeginTime = workBeginTime + ":00";
} }
if (StringUtils.isNotEmpty(address) && (address.contains("台湾") || address.contains("越南") 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 ";
|| address.toLowerCase().contains("hostar") || address.toLowerCase().contains("vinh") || address.toLowerCase().contains("ha noi"))) { rs.executeQuery(acqLegWorkSignSql, userId);
continue; while ( rs.next()) {
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);
temp.put("dateTimeNew", dateTimeNew);
legWorkInfos.add(temp);
}
}
if (legWorkInfos != null && legWorkInfos.size() > 1 ) {
String tempSignIn = "";
String tempSignInDateTime = "";
String tempSignOutDateTime = "";
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"));
String dateTimeNew = Util.null2String(temp.get("dateTimeNew"));
if (StringUtils.isBlank(tempSignIn)) {
tempSignIn = operateTime;
tempSignInLatitude = latitude;
tempSignInLongitude = longitude;
tempSignInDateTime = dateTimeNew;
} else {
if ( dateTimeNew.compareTo(tempSignInDateTime) < 0 ) {
tempSignIn = operateTime;
tempSignInLatitude = latitude;
tempSignInLongitude = longitude;
tempSignInDateTime = dateTimeNew;
}
}
if (StringUtils.isBlank(tempSignOut)) {
tempSignOut = operateTime;
tempSignOutDateTime = dateTimeNew;
tempSignOutLatitude = latitude;
tempSignOutLongitude = longitude;
} else { } else {
if ( dateTimeNew.compareTo(tempSignOutDateTime) > 0 ) { for ( Map<String, Object> temp : legWorkInfos) {
tempSignOut = operateTime; String operateTime = Util.null2String(temp.get("operateTime"));
tempSignOutDateTime = dateTimeNew; String longitude = Util.null2String(temp.get("longitude"));
tempSignOutLatitude = latitude; String latitude = Util.null2String(temp.get("latitude"));
tempSignOutLongitude = longitude; 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)) {
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("signInDateTime", tempSignInDateTime);//签到日期时间
checkInfo.put("signInLatitude", tempSignInLatitude);//签到纬度
checkInfo.put("signInLongitude", tempSignInLongitude);//签到经度
checkInfo.put("signOutTime", tempSignOut);//签退时间
checkInfo.put("signOutDateTime", tempSignOutDateTime);//签退日期时间
checkInfo.put("signOutLatitude", tempSignOutLatitude);//签退纬度
checkInfo.put("signOutLongitude", tempSignOutLongitude);//签退经度
lsCheckInfo.put(id + "|" + kqDateA, checkInfo);
} }
} }
HostarUtil hostarUtil = new HostarUtil(); HostarUtil hostarUtil = new HostarUtil();
String MealAlloTableName = Util.null2String(bb.getPropValue("project_hostar", "MealAllowanceTableName")); String MealAlloTableName = Util.null2String(bb.getPropValue("project_hostar", "MealAllowanceTableName"));
// 定义日期格式
DateTimeFormatter formatterRq = DateTimeFormatter.ofPattern("yyyy-MM-dd");
// 定义时间格式
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss");
if (StringUtils.isNotBlank(MealAlloTableName)) { if (StringUtils.isNotBlank(MealAlloTableName)) {
//获取餐补判断时间 //获取餐补判断时间
List<Map<String, String>> MealMap = new ArrayList<>(); List<Map<String, String>> MealMap = new ArrayList<>();
@ -2390,49 +2220,31 @@ 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"));
String signInDateTime = Util.null2String(temp.get("signInDateTime"));
String signOutDateTime = Util.null2String(temp.get("signOutDateTime"));
String signDate = Util.null2String(temp.get("signDate"));
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) {
String startTime = me.get("startTime"); String startTime = me.get("startTime");
String startDateTime = "";
String endTime = me.get("endTime"); String endTime = me.get("endTime");
String endDateTime = "";
if (StringUtils.isNotBlank(startTime) && StringUtils.isNotBlank(endTime)) { if (StringUtils.isNotBlank(startTime) && StringUtils.isNotBlank(endTime)) {
startTime = startTime + ":00"; startTime = startTime + ":00";
endTime = endTime + ":00"; endTime = endTime + ":00";
String signDateNew = signDate;
// 判断时间
LocalTime t1 = LocalTime.parse(startTime, formatter);
LocalTime t2 = LocalTime.parse(endTime, formatter);
if (t2.isBefore(t1)) {
LocalDate dateToday = LocalDate.parse(signDateNew, formatterRq);
// 加一天
LocalDate nextDayNew = dateToday.plusDays(1);
signDateNew = nextDayNew.format(formatterRq);
}
startDateTime = signDate + " " + startTime;
endDateTime = signDateNew + " " + endTime;
} }
if ( (signInDateTime.compareTo(startDateTime) <= 0) && (signOutDateTime.compareTo(endDateTime) >= 0) ) { if ( (signInTime.compareTo(startTime) <= 0) && (signOutTime.compareTo(endTime) >= 0) ) {
if (StringUtils.isEmpty(value) || StringUtils.equals(value, "0")) { if (StringUtils.isEmpty(value) || StringUtils.equals(value, "0")) {
value = "1"; value = "1";
} else { } else {
int valueT = Integer.parseInt(value) + 1; value = String.valueOf(Integer.parseInt(value));
value = String.valueOf(valueT);
} }
} }
} }
@ -2460,6 +2272,10 @@ public class KQFormatData extends BaseBean {
nightShiftList.add(shift); nightShiftList.add(shift);
} }
} }
rs.executeQuery("select zeropoint from kq_format_total where resourceid = ? and kqdate = ?", userId, kqDate);
if (rs.next()) {
value = rs.getString("zeropoint");
}
//获取当天班次 //获取当天班次
KQWorkTime kqWorkTime = new KQWorkTime(); KQWorkTime kqWorkTime = new KQWorkTime();
Map<String, Object> serialInfo = kqWorkTime.getSerialInfo(userId, kqDate, false); Map<String, Object> serialInfo = kqWorkTime.getSerialInfo(userId, kqDate, false);
@ -2468,14 +2284,7 @@ public class KQFormatData extends BaseBean {
if (serialid > 0) { if (serialid > 0) {
if ((!CollectionUtils.isEmpty(nightShiftList)) && nightShiftList.contains(String.valueOf(serialid))) { if ((!CollectionUtils.isEmpty(nightShiftList)) && nightShiftList.contains(String.valueOf(serialid))) {
value = "0"; value = "0";
} else {
rs.executeQuery("select zeropoint from kq_format_total where resourceid = ? and kqdate = ?", userId, kqDate);
if (rs.next()) {
value = rs.getString("zeropoint");
}
} }
} else {
value = "0";
} }
} }
} catch (Exception e) { } catch (Exception e) {

@ -190,11 +190,12 @@ public class ExportDailyExcelCmd extends AbstractCommonCommand<Map<String, Objec
" zm.jmybcb as nightAllowance," + " zm.jmybcb as nightAllowance," +
" zm.hrzdcb as otherStatAllowance," + " zm.hrzdcb as otherStatAllowance," +
" zm.ybbz as nightShiftSubsidy, "+ " zm.ybbz as nightShiftSubsidy, "+
" zm.ldbz as zeropoint, "+
" a.id,a.lastname,a.subcompanyid1 as subcompanyid,a.departmentid, a.workcode,b.jobtitle,a.dsporder," + " a.id,a.lastname,a.subcompanyid1 as subcompanyid,a.departmentid, a.workcode,b.jobtitle,a.dsporder," +
" b.kqdate, b.workdays,b.workMins,b.serialid, b.attendancedays,FLOOR( b.attendanceMins / 30 ) * 30 AS attendanceMins ,b.beLate," + " b.kqdate, b.workdays,b.workMins,b.serialid, b.attendancedays,FLOOR( b.attendanceMins / 30 ) * 30 AS attendanceMins ,b.beLate," +
" b.beLateMins,b.graveBeLate,b.graveBeLateMins,b.leaveEearly,b.leaveEarlyMins,b.graveLeaveEarly," + " b.beLateMins,b.graveBeLate,b.graveBeLateMins,b.leaveEearly,b.leaveEarlyMins,b.graveLeaveEarly," +
" b.graveLeaveEarlyMins,b.absenteeism,b.signdays,b.signmins, "+ " b.graveLeaveEarlyMins,b.absenteeism,b.signdays,b.signmins, "+
" b.absenteeismMins ,(b.forgotCheck+"+forgotBeginWorkCheck_field+") forgotCheck,zeropoint "; " b.absenteeismMins ,(b.forgotCheck+"+forgotBeginWorkCheck_field+") forgotCheck ";
String sqlFrom = " from hrmresource a JOIN kq_format_total b ON a.id = b.resourceid LEFT JOIN uf_cbxxjlb zm ON zm.xm = a.id AND zm.rq = b.kqdate " + String sqlFrom = " from hrmresource a JOIN kq_format_total b ON a.id = b.resourceid LEFT JOIN uf_cbxxjlb zm ON zm.xm = a.id AND zm.rq = b.kqdate " +
" where b.kqdate >='"+fromDate+"' and b.kqdate <='"+toDate+"'"; " where b.kqdate >='"+fromDate+"' and b.kqdate <='"+toDate+"'";
String sqlWhere = rightSql; String sqlWhere = rightSql;

@ -211,6 +211,7 @@ public class ExportExcelCmd extends AbstractCommonCommand<Map<String, Object>> {
" sum(zm.jmybcb) as nightAllowance," + " sum(zm.jmybcb) as nightAllowance," +
" sum(zm.hrzdcb) as otherStatAllowance," + " sum(zm.hrzdcb) as otherStatAllowance," +
" sum(zm.ybbz) as nightShiftSubsidy," + " sum(zm.ybbz) as nightShiftSubsidy," +
" sum(zm.ldbz) as zeropoint," +
" a.id,a.lastname,a.workcode,a.dsporder,b.resourceid,a.subcompanyid1 as subcompanyid,a.departmentid,a.jobtitle," + " a.id,a.lastname,a.workcode,a.dsporder,b.resourceid,a.subcompanyid1 as subcompanyid,a.departmentid,a.jobtitle," +
" sum(b.workdays) as workdays,sum(b.workMins) as workMins,sum(b.attendancedays) as attendancedays," + " sum(b.workdays) as workdays,sum(b.workMins) as workMins,sum(b.attendancedays) as attendancedays," +
" sum(FLOOR( b.attendanceMins / 30 ) * 30 ) as attendanceMins,sum(b.beLate) as beLate,sum(b.beLateMins) as beLateMins, " + " sum(FLOOR( b.attendanceMins / 30 ) * 30 ) as attendanceMins,sum(b.beLate) as beLate,sum(b.beLateMins) as beLateMins, " +
@ -218,7 +219,7 @@ public class ExportExcelCmd extends AbstractCommonCommand<Map<String, Object>> {
" sum(b.leaveEarlyMins) as leaveEarlyMins, sum(b.graveLeaveEarly) as graveLeaveEarly, " + " sum(b.leaveEarlyMins) as leaveEarlyMins, sum(b.graveLeaveEarly) as graveLeaveEarly, " +
" sum(b.graveLeaveEarlyMins) as graveLeaveEarlyMins,sum(b.absenteeism) as absenteeism, " + " sum(b.graveLeaveEarlyMins) as graveLeaveEarlyMins,sum(b.absenteeism) as absenteeism, " +
" sum(b.signdays) as signdays,sum(b.signmins) as signmins, "+ " sum(b.signdays) as signdays,sum(b.signmins) as signmins, "+
" sum(b.absenteeismMins ) as absenteeismMins, sum(b.forgotCheck)+"+forgotBeginWorkCheck_field+" as forgotCheck,sum(b.zeropoint) as zeropoint "+(definedFieldSum.length()>0?","+definedFieldSum+"":""); " sum(b.absenteeismMins ) as absenteeismMins, sum(b.forgotCheck)+"+forgotBeginWorkCheck_field+" as forgotCheck "+(definedFieldSum.length()>0?","+definedFieldSum+"":"");
if(rs.getDBType().equals("oracle")){ if(rs.getDBType().equals("oracle")){
backFields = "/*+ index(kq_format_total IDX_KQ_FORMAT_TOTAL_KQDATE) */ "+backFields; backFields = "/*+ index(kq_format_total IDX_KQ_FORMAT_TOTAL_KQDATE) */ "+backFields;
} }

@ -150,11 +150,12 @@ public class GetKQDailyReportCmd extends AbstractCommonCommand<Map<String, Objec
" zm.jmybcb as nightAllowance," + " zm.jmybcb as nightAllowance," +
" zm.hrzdcb as otherStatAllowance," + " zm.hrzdcb as otherStatAllowance," +
" zm.ybbz as nightShiftSubsidy," + " zm.ybbz as nightShiftSubsidy," +
" zm.ldbz as zeropoint, "+
" a.id,a.lastname,a.subcompanyid1 as subcompanyid,a.departmentid, a.workcode,b.jobtitle,a.dsporder," + " a.id,a.lastname,a.subcompanyid1 as subcompanyid,a.departmentid, a.workcode,b.jobtitle,a.dsporder," +
" b.kqdate, b.workdays,b.workMins,b.serialid, b.attendancedays,FLOOR( b.attendanceMins / 30 ) * 30 AS attendanceMins," + " b.kqdate, b.workdays,b.workMins,b.serialid, b.attendancedays,FLOOR( b.attendanceMins / 30 ) * 30 AS attendanceMins," +
" b.beLate,b.beLateMins,b.graveBeLate,b.graveBeLateMins,b.leaveEearly,b.leaveEarlyMins," + " b.beLate,b.beLateMins,b.graveBeLate,b.graveBeLateMins,b.leaveEearly,b.leaveEarlyMins," +
" b.signdays,b.signmins, "+ " b.signdays,b.signmins, "+
" b.graveLeaveEarly,b.graveLeaveEarlyMins,b.absenteeism , b.absenteeismMins ,(b.forgotCheck+"+forgotBeginWorkCheck_field+") forgotCheck,zeropoint "; " b.graveLeaveEarly,b.graveLeaveEarlyMins,b.absenteeism , b.absenteeismMins ,(b.forgotCheck+"+forgotBeginWorkCheck_field+") forgotCheck ";
String sqlFrom = " from hrmresource a JOIN kq_format_total b ON a.id = b.resourceid LEFT JOIN uf_cbxxjlb zm ON zm.xm = a.id AND zm.rq = b.kqdate " + String sqlFrom = " from hrmresource a JOIN kq_format_total b ON a.id = b.resourceid LEFT JOIN uf_cbxxjlb zm ON zm.xm = a.id AND zm.rq = b.kqdate " +
"where b.kqdate >='"+fromDate+"' and b.kqdate <='"+toDate+"'"; "where b.kqdate >='"+fromDate+"' and b.kqdate <='"+toDate+"'";
String sqlWhere = rightSql; String sqlWhere = rightSql;

@ -178,6 +178,7 @@ public class GetKQReportCmd extends AbstractCommonCommand<Map<String, Object>> {
" sum(zm.jmybcb) as nightAllowance," + " sum(zm.jmybcb) as nightAllowance," +
" sum(zm.hrzdcb) as otherStatAllowance," + " sum(zm.hrzdcb) as otherStatAllowance," +
" sum(zm.ybbz) as nightShiftSubsidy," + " sum(zm.ybbz) as nightShiftSubsidy," +
" sum(zm.ldbz) as zeropoint," +
" a.id,a.lastname,a.workcode,a.dsporder,b.resourceid,a.subcompanyid1 as subcompanyid,a.departmentid,a.jobtitle," + " a.id,a.lastname,a.workcode,a.dsporder,b.resourceid,a.subcompanyid1 as subcompanyid,a.departmentid,a.jobtitle," +
" sum(b.workdays) as workdays,sum(b.workMins) as workMins,sum(b.attendancedays) as attendancedays," + " sum(b.workdays) as workdays,sum(b.workMins) as workMins,sum(b.attendancedays) as attendancedays," +
" sum(FLOOR( b.attendanceMins / 30 ) * 30 ) as attendanceMins,sum(b.beLate) as beLate,sum(b.beLateMins) as beLateMins, " + " sum(FLOOR( b.attendanceMins / 30 ) * 30 ) as attendanceMins,sum(b.beLate) as beLate,sum(b.beLateMins) as beLateMins, " +
@ -185,13 +186,13 @@ public class GetKQReportCmd extends AbstractCommonCommand<Map<String, Object>> {
" sum(b.leaveEarlyMins) as leaveEarlyMins, sum(b.graveLeaveEarly) as graveLeaveEarly, " + " sum(b.leaveEarlyMins) as leaveEarlyMins, sum(b.graveLeaveEarly) as graveLeaveEarly, " +
" sum(b.graveLeaveEarlyMins) as graveLeaveEarlyMins,sum(b.absenteeism) as absenteeism, " + " sum(b.graveLeaveEarlyMins) as graveLeaveEarlyMins,sum(b.absenteeism) as absenteeism, " +
" sum(b.signdays) as signdays,sum(b.signmins) as signmins, "+ " sum(b.signdays) as signdays,sum(b.signmins) as signmins, "+
" sum(b.absenteeismMins ) as absenteeismMins, sum(b.forgotCheck)+"+forgotBeginWorkCheck_field+" as forgotCheck, sum(b.zeropoint) as zeropoint "+(definedFieldSum.length()>0?","+definedFieldSum+"":""); " sum(b.absenteeismMins ) as absenteeismMins, sum(b.forgotCheck)+"+forgotBeginWorkCheck_field+" as forgotCheck "+(definedFieldSum.length()>0?","+definedFieldSum+"":"");
if(rs.getDBType().equals("oracle")){ if(rs.getDBType().equals("oracle")){
backFields = "/*+ index(kq_format_total IDX_KQ_FORMAT_TOTAL_KQDATE) */ "+backFields; backFields = "/*+ index(kq_format_total IDX_KQ_FORMAT_TOTAL_KQDATE) */ "+backFields;
} }
String sqlFrom = " from hrmresource a JOIN kq_format_total b ON a.id = b.resourceid LEFT JOIN uf_cbxxjlb zm ON zm.xm = a.id AND zm.rq = b.kqdate " + String sqlFrom = " from hrmresource a JOIN kq_format_total b ON a.id = b.resourceid LEFT JOIN uf_cbxxjlb zm ON zm.xm = a.id AND zm.rq = b.kqdate " +
"where b.kqdate >='"+fromDate+"' and b.kqdate <='"+toDate+"'"; " where b.kqdate >='"+fromDate+"' and b.kqdate <='"+toDate+"'";
String sqlWhere = rightSql; String sqlWhere = rightSql;
String groupBy = " group by a.id,a.lastname,a.workcode,a.dsporder,b.resourceid,a.subcompanyid1,a.departmentid,a.jobtitle "; String groupBy = " group by a.id,a.lastname,a.workcode,a.dsporder,b.resourceid,a.subcompanyid1,a.departmentid,a.jobtitle ";
if(subCompanyId.length()>0){ if(subCompanyId.length()>0){

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save