计算员工境外常驻天数及国内工作日天数
This commit is contained in:
parent
bfd78019a9
commit
35ffa80c36
|
|
@ -22,9 +22,14 @@ public class JWJT {
|
||||||
private String user;
|
private String user;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 应出勤天数
|
* 境外应常驻天数
|
||||||
*/
|
*/
|
||||||
private double ycq;
|
private double jwycq;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 国内工作天数(工作日)
|
||||||
|
*/
|
||||||
|
private double gngzts;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 薪酬等级
|
* 薪酬等级
|
||||||
|
|
|
||||||
|
|
@ -27,8 +27,8 @@ public class JwCZInfo {
|
||||||
*/
|
*/
|
||||||
private List<JwCZInfoDetail> infos;
|
private List<JwCZInfoDetail> infos;
|
||||||
|
|
||||||
/**
|
// /**
|
||||||
* 考勤月份中境外应常驻天数
|
// * 考勤月份中境外应常驻天数
|
||||||
*/
|
// */
|
||||||
private Integer yczDays;
|
// private Integer yczDays;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,10 +10,7 @@ import com.engine.bjcj220907.service.OverseasAllowanceCountService;
|
||||||
import com.engine.bjcj220907.utils.BjcjCommonUtils;
|
import com.engine.bjcj220907.utils.BjcjCommonUtils;
|
||||||
import weaver.general.BaseBean;
|
import weaver.general.BaseBean;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.Calendar;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -55,7 +52,7 @@ public class OverseasAllowanceCountServiceImpl implements OverseasAllowanceCount
|
||||||
baseBean.writeLog("考勤开始日期:"+startAttendanceCal.getTime()+",考勤结束日期:"+endAttendanceCal);
|
baseBean.writeLog("考勤开始日期:"+startAttendanceCal.getTime()+",考勤结束日期:"+endAttendanceCal);
|
||||||
// 如果用户在考勤周期内存在境外常驻信息则过滤出来,并且计算当月应常驻天数
|
// 如果用户在考勤周期内存在境外常驻信息则过滤出来,并且计算当月应常驻天数
|
||||||
List<JWJT> results = getCZInfosAndCZDays(jwCZInfos, startAttendanceCal, endAttendanceCal);
|
List<JWJT> results = getCZInfosAndCZDays(jwCZInfos, startAttendanceCal, endAttendanceCal);
|
||||||
baseBean.writeLog("如果用户在考勤周期内存在境外常驻信息则过滤出来,并且计算当月应常驻天数:"+results.size());
|
baseBean.writeLog("获取用户在考勤周期内存在境外常驻信息过滤出来,并且计算当月境外应常驻天数及境内工作天数:"+results.size());
|
||||||
// 计算考勤所属月员工的薪酬等级,获取相应的境外津贴标准
|
// 计算考勤所属月员工的薪酬等级,获取相应的境外津贴标准
|
||||||
List<String> users = results.stream().map(i -> i.getUser()).collect(Collectors.toList());
|
List<String> users = results.stream().map(i -> i.getUser()).collect(Collectors.toList());
|
||||||
Map<Integer, XcdjJwjtParam> usersXSDJ = getOverseasAllowanceDAO().getXCDJByUsers(startAttendanceCal);
|
Map<Integer, XcdjJwjtParam> usersXSDJ = getOverseasAllowanceDAO().getXCDJByUsers(startAttendanceCal);
|
||||||
|
|
@ -64,7 +61,7 @@ public class OverseasAllowanceCountServiceImpl implements OverseasAllowanceCount
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @description 获取用户在考勤周期内存在境外常驻信息过滤出来,并且计算当月应常驻天数
|
* @description 获取用户在考勤周期内存在境外常驻信息过滤出来,并且计算当月境外应常驻天数及境内工作天数
|
||||||
* @return List<JwCZInfo>
|
* @return List<JwCZInfo>
|
||||||
* @author Harryxzy
|
* @author Harryxzy
|
||||||
* @date 2022/9/26 16:29
|
* @date 2022/9/26 16:29
|
||||||
|
|
@ -72,13 +69,17 @@ public class OverseasAllowanceCountServiceImpl implements OverseasAllowanceCount
|
||||||
public List<JWJT> getCZInfosAndCZDays(List<JwCZInfo> jwCZInfos,Calendar startAttendanceCal,Calendar endAttendanceCal){
|
public List<JWJT> getCZInfosAndCZDays(List<JwCZInfo> jwCZInfos,Calendar startAttendanceCal,Calendar endAttendanceCal){
|
||||||
ArrayList<JWJT> results = new ArrayList<>();
|
ArrayList<JWJT> results = new ArrayList<>();
|
||||||
jwCZInfos.stream().filter(czInfo -> {
|
jwCZInfos.stream().filter(czInfo -> {
|
||||||
|
if(czInfo.getXm().equals("1462")){
|
||||||
|
System.out.println("H");
|
||||||
|
}
|
||||||
List<JwCZInfoDetail> czDetails = czInfo.getInfos();
|
List<JwCZInfoDetail> czDetails = czInfo.getInfos();
|
||||||
// 用于存储计算到哪一天的日期
|
// 用于存储计算到哪一天的日期
|
||||||
Calendar c = Calendar.getInstance();
|
Calendar c = Calendar.getInstance();
|
||||||
c.setTime(endAttendanceCal.getTime());
|
c.setTime(endAttendanceCal.getTime());
|
||||||
Calendar[] countDay = {c};
|
Calendar[] countDay = {c};
|
||||||
int[] ycq = {0};
|
int[] ycq = {0};
|
||||||
boolean[] flag = {false};
|
int[] gnycq ={0};
|
||||||
|
List<Date> details = new ArrayList<>();
|
||||||
for (int i = 0; i < czDetails.size(); i++) {
|
for (int i = 0; i < czDetails.size(); i++) {
|
||||||
JwCZInfoDetail detail = czDetails.get(i);
|
JwCZInfoDetail detail = czDetails.get(i);
|
||||||
if (detail.getLx() == 0 && (detail.getJwczksrq().before(endAttendanceCal.getTime()) || detail.getJwczksrq().equals(endAttendanceCal.getTime()))) {
|
if (detail.getLx() == 0 && (detail.getJwczksrq().before(endAttendanceCal.getTime()) || detail.getJwczksrq().equals(endAttendanceCal.getTime()))) {
|
||||||
|
|
@ -89,12 +90,11 @@ public class OverseasAllowanceCountServiceImpl implements OverseasAllowanceCount
|
||||||
ycq[0] += days;
|
ycq[0] += days;
|
||||||
countDay[0].setTime(detail.getJwczksrq());
|
countDay[0].setTime(detail.getJwczksrq());
|
||||||
countDay[0].add(Calendar.DATE, -1);
|
countDay[0].add(Calendar.DATE, -1);
|
||||||
flag[0] = true;
|
|
||||||
} else {
|
} else {
|
||||||
// 开始常驻日期在 考勤开始日期前(应出勤日期为自然日)
|
// 开始常驻日期在 考勤开始日期前(应出勤日期为自然日)
|
||||||
int days = BjcjCommonUtils.getDays(startAttendanceCal.getTime(), endAttendanceCal.getTime());
|
int days = BjcjCommonUtils.getDays(startAttendanceCal.getTime(), endAttendanceCal.getTime());
|
||||||
czInfo.setYczDays(days);
|
// czInfo.setYczDays(days);
|
||||||
JWJT build = JWJT.builder().user(czInfo.getXm()).ycq(days).build();
|
JWJT build = JWJT.builder().user(czInfo.getXm()).jwycq(days).gngzts(0.0).build();
|
||||||
results.add(build);
|
results.add(build);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
@ -103,31 +103,47 @@ public class OverseasAllowanceCountServiceImpl implements OverseasAllowanceCount
|
||||||
((detail.getJwczksrq().before(endAttendanceCal.getTime()) || detail.getJwczksrq().equals(endAttendanceCal.getTime()))
|
((detail.getJwczksrq().before(endAttendanceCal.getTime()) || detail.getJwczksrq().equals(endAttendanceCal.getTime()))
|
||||||
&& (detail.getJwczjsrq().after(startAttendanceCal.getTime()) || detail.getJwczjsrq().equals(startAttendanceCal.getTime())))) {
|
&& (detail.getJwczjsrq().after(startAttendanceCal.getTime()) || detail.getJwczjsrq().equals(startAttendanceCal.getTime())))) {
|
||||||
// 涉及考勤周期内的结束常驻
|
// 涉及考勤周期内的结束常驻
|
||||||
// 修正境外常驻开始日期
|
// 将区间转换为记录
|
||||||
Calendar countStartCal = Calendar.getInstance();
|
Calendar starCal = Calendar.getInstance();
|
||||||
countStartCal.setTime(detail.getJwczksrq());
|
starCal.setTime(detail.getJwczksrq());
|
||||||
if (detail.getJwczksrq().before(startAttendanceCal.getTime())) {
|
while (starCal.getTime().before(detail.getJwczjsrq()) || starCal.getTime().equals(detail.getJwczjsrq())) {
|
||||||
countStartCal.setTime(startAttendanceCal.getTime());
|
details.add(starCal.getTime());
|
||||||
|
starCal.add(Calendar.DAY_OF_YEAR, 1);
|
||||||
}
|
}
|
||||||
// 修正境外常驻结束日期
|
|
||||||
Calendar countEndCal = Calendar.getInstance();
|
|
||||||
countEndCal.setTime(detail.getJwczjsrq());
|
|
||||||
if (detail.getJwczjsrq().after(endAttendanceCal.getTime())) {
|
|
||||||
countEndCal.setTime(endAttendanceCal.getTime());
|
|
||||||
}
|
|
||||||
ycq[0] += BjcjCommonUtils.getDays(countStartCal.getTime(), countEndCal.getTime());
|
|
||||||
flag[0] = true;
|
|
||||||
}
|
}
|
||||||
if (i == czDetails.size() - 1 && flag[0] == true) {
|
if (i == czDetails.size() - 1) {
|
||||||
// 已计算出应出勤天数
|
// 已经将所有考勤周期内境外常驻的区间时间转换为记录
|
||||||
czInfo.setYczDays(ycq[0]);
|
Calendar aCal = Calendar.getInstance();
|
||||||
JWJT build = JWJT.builder().user(czInfo.getXm()).ycq(ycq[0]).build();
|
aCal.setTime(countDay[0].getTime());
|
||||||
|
aCal.set(Calendar.HOUR_OF_DAY, 0);
|
||||||
|
aCal.set(Calendar.MINUTE, 0);
|
||||||
|
aCal.set(Calendar.SECOND, 0);
|
||||||
|
aCal.set(Calendar.MILLISECOND, 0);
|
||||||
|
if(details.size()==0 && countDay[0].getTime().equals(endAttendanceCal.getTime())){
|
||||||
|
// 该考勤周期内员工没有境外常驻信息
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
while (startAttendanceCal.getTime().before(aCal.getTime()) || startAttendanceCal.getTime().equals(aCal.getTime())){
|
||||||
|
if(details.contains(aCal.getTime())){
|
||||||
|
// 存在境外记录
|
||||||
|
ycq[0]++;
|
||||||
|
aCal.add(Calendar.DATE,-1);
|
||||||
|
}else{
|
||||||
|
// 没有境外记录,判断是否是工作日
|
||||||
|
if( (aCal.get(Calendar.DAY_OF_WEEK) != 1) && (aCal.get(Calendar.DAY_OF_WEEK)!=7) ){
|
||||||
|
// 是工作日
|
||||||
|
gnycq[0]++;
|
||||||
|
}
|
||||||
|
aCal.add(Calendar.DATE,-1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
JWJT build = JWJT.builder().user(czInfo.getXm()).jwycq(ycq[0]).gngzts(gnycq[0]).build();
|
||||||
results.add(build);
|
results.add(build);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
});
|
}).collect(Collectors.toList());
|
||||||
return results;
|
return results;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,7 @@ public class OverseasAllowanceCountController {
|
||||||
public void countOverseasAllowance(@Context HttpServletRequest request, @Context HttpServletResponse response) {
|
public void countOverseasAllowance(@Context HttpServletRequest request, @Context HttpServletResponse response) {
|
||||||
User user = HrmUserVarify.getUser(request, response);
|
User user = HrmUserVarify.getUser(request, response);
|
||||||
Calendar cal = BjcjCommonUtils.getNowCalendar();
|
Calendar cal = BjcjCommonUtils.getNowCalendar();
|
||||||
cal.add(Calendar.MONTH,-1);
|
cal.add(Calendar.MONTH,-6);
|
||||||
baseBean.writeLog("开始计算:"+cal.getTime()+"的境外津贴");
|
baseBean.writeLog("开始计算:"+cal.getTime()+"的境外津贴");
|
||||||
new OverseasAllowanceCountServiceImpl().countOverseasAllowance(cal);
|
new OverseasAllowanceCountServiceImpl().countOverseasAllowance(cal);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue