diff --git a/src/com/engine/bjcj220907/entity/JWJT.java b/src/com/engine/bjcj220907/entity/JWJT.java index 4ae44a5..c935f37 100644 --- a/src/com/engine/bjcj220907/entity/JWJT.java +++ b/src/com/engine/bjcj220907/entity/JWJT.java @@ -22,9 +22,14 @@ public class JWJT { private String user; /** - * 应出勤天数 + * 境外应常驻天数 */ - private double ycq; + private double jwycq; + + /** + * 国内工作天数(工作日) + */ + private double gngzts; /** * 薪酬等级 diff --git a/src/com/engine/bjcj220907/entity/JwCZInfo.java b/src/com/engine/bjcj220907/entity/JwCZInfo.java index 6128c9c..c23df04 100644 --- a/src/com/engine/bjcj220907/entity/JwCZInfo.java +++ b/src/com/engine/bjcj220907/entity/JwCZInfo.java @@ -27,8 +27,8 @@ public class JwCZInfo { */ private List infos; - /** - * 考勤月份中境外应常驻天数 - */ - private Integer yczDays; +// /** +// * 考勤月份中境外应常驻天数 +// */ +// private Integer yczDays; } diff --git a/src/com/engine/bjcj220907/service/impl/OverseasAllowanceCountServiceImpl.java b/src/com/engine/bjcj220907/service/impl/OverseasAllowanceCountServiceImpl.java index 5a5b080..7691859 100644 --- a/src/com/engine/bjcj220907/service/impl/OverseasAllowanceCountServiceImpl.java +++ b/src/com/engine/bjcj220907/service/impl/OverseasAllowanceCountServiceImpl.java @@ -10,10 +10,7 @@ import com.engine.bjcj220907.service.OverseasAllowanceCountService; import com.engine.bjcj220907.utils.BjcjCommonUtils; import weaver.general.BaseBean; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; /** @@ -55,7 +52,7 @@ public class OverseasAllowanceCountServiceImpl implements OverseasAllowanceCount baseBean.writeLog("考勤开始日期:"+startAttendanceCal.getTime()+",考勤结束日期:"+endAttendanceCal); // 如果用户在考勤周期内存在境外常驻信息则过滤出来,并且计算当月应常驻天数 List results = getCZInfosAndCZDays(jwCZInfos, startAttendanceCal, endAttendanceCal); - baseBean.writeLog("如果用户在考勤周期内存在境外常驻信息则过滤出来,并且计算当月应常驻天数:"+results.size()); + baseBean.writeLog("获取用户在考勤周期内存在境外常驻信息过滤出来,并且计算当月境外应常驻天数及境内工作天数:"+results.size()); // 计算考勤所属月员工的薪酬等级,获取相应的境外津贴标准 List users = results.stream().map(i -> i.getUser()).collect(Collectors.toList()); Map usersXSDJ = getOverseasAllowanceDAO().getXCDJByUsers(startAttendanceCal); @@ -64,7 +61,7 @@ public class OverseasAllowanceCountServiceImpl implements OverseasAllowanceCount } /** - * @description 获取用户在考勤周期内存在境外常驻信息过滤出来,并且计算当月应常驻天数 + * @description 获取用户在考勤周期内存在境外常驻信息过滤出来,并且计算当月境外应常驻天数及境内工作天数 * @return List * @author Harryxzy * @date 2022/9/26 16:29 @@ -72,13 +69,17 @@ public class OverseasAllowanceCountServiceImpl implements OverseasAllowanceCount public List getCZInfosAndCZDays(List jwCZInfos,Calendar startAttendanceCal,Calendar endAttendanceCal){ ArrayList results = new ArrayList<>(); jwCZInfos.stream().filter(czInfo -> { + if(czInfo.getXm().equals("1462")){ + System.out.println("H"); + } List czDetails = czInfo.getInfos(); // 用于存储计算到哪一天的日期 Calendar c = Calendar.getInstance(); c.setTime(endAttendanceCal.getTime()); Calendar[] countDay = {c}; int[] ycq = {0}; - boolean[] flag = {false}; + int[] gnycq ={0}; + List details = new ArrayList<>(); for (int i = 0; i < czDetails.size(); i++) { JwCZInfoDetail detail = czDetails.get(i); 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; countDay[0].setTime(detail.getJwczksrq()); countDay[0].add(Calendar.DATE, -1); - flag[0] = true; } else { // 开始常驻日期在 考勤开始日期前(应出勤日期为自然日) int days = BjcjCommonUtils.getDays(startAttendanceCal.getTime(), endAttendanceCal.getTime()); - czInfo.setYczDays(days); - JWJT build = JWJT.builder().user(czInfo.getXm()).ycq(days).build(); +// czInfo.setYczDays(days); + JWJT build = JWJT.builder().user(czInfo.getXm()).jwycq(days).gngzts(0.0).build(); results.add(build); return true; } @@ -103,31 +103,47 @@ public class OverseasAllowanceCountServiceImpl implements OverseasAllowanceCount ((detail.getJwczksrq().before(endAttendanceCal.getTime()) || detail.getJwczksrq().equals(endAttendanceCal.getTime())) && (detail.getJwczjsrq().after(startAttendanceCal.getTime()) || detail.getJwczjsrq().equals(startAttendanceCal.getTime())))) { // 涉及考勤周期内的结束常驻 - // 修正境外常驻开始日期 - Calendar countStartCal = Calendar.getInstance(); - countStartCal.setTime(detail.getJwczksrq()); - if (detail.getJwczksrq().before(startAttendanceCal.getTime())) { - countStartCal.setTime(startAttendanceCal.getTime()); + // 将区间转换为记录 + Calendar starCal = Calendar.getInstance(); + starCal.setTime(detail.getJwczksrq()); + while (starCal.getTime().before(detail.getJwczjsrq()) || starCal.getTime().equals(detail.getJwczjsrq())) { + 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) { - // 已计算出应出勤天数 - czInfo.setYczDays(ycq[0]); - JWJT build = JWJT.builder().user(czInfo.getXm()).ycq(ycq[0]).build(); + if (i == czDetails.size() - 1) { + // 已经将所有考勤周期内境外常驻的区间时间转换为记录 + Calendar aCal = Calendar.getInstance(); + 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); return true; } } return false; - }); + }).collect(Collectors.toList()); return results; } diff --git a/src/com/engine/bjcj220907/web/OverseasAllowanceCountController.java b/src/com/engine/bjcj220907/web/OverseasAllowanceCountController.java index ce00bd5..2327c7b 100644 --- a/src/com/engine/bjcj220907/web/OverseasAllowanceCountController.java +++ b/src/com/engine/bjcj220907/web/OverseasAllowanceCountController.java @@ -33,7 +33,7 @@ public class OverseasAllowanceCountController { public void countOverseasAllowance(@Context HttpServletRequest request, @Context HttpServletResponse response) { User user = HrmUserVarify.getUser(request, response); Calendar cal = BjcjCommonUtils.getNowCalendar(); - cal.add(Calendar.MONTH,-1); + cal.add(Calendar.MONTH,-6); baseBean.writeLog("开始计算:"+cal.getTime()+"的境外津贴"); new OverseasAllowanceCountServiceImpl().countOverseasAllowance(cal); }