From cff05b3f29418098c4d9fcf38f86f56b540ce21b Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Mon, 26 Sep 2022 14:52:34 +0800 Subject: [PATCH] utis --- .../bjcj220907/web/OverseasAllowanceWeb.java | 14 +++ .../bjcj220907/dao/OverseasAllowanceDAO.java | 36 +++++++ .../engine/bjcj220907/entity/JwCZInfo.java | 5 + .../bjcj220907/entity/JwCZInfoDetail.java | 5 + .../OverseasAllowanceCountService.java | 19 ++++ .../impl/MonthBonusCountServiceImpl.java | 93 +++--------------- .../OverseasAllowanceCountServiceImpl.java | 44 +++++++++ .../bjcj220907/utils/BjcjCommonUtils.java | 96 +++++++++++++++++++ .../web/OverseasAllowanceCountController.java | 41 ++++++++ 9 files changed, 273 insertions(+), 80 deletions(-) create mode 100644 src/com/api/bjcj220907/web/OverseasAllowanceWeb.java create mode 100644 src/com/engine/bjcj220907/dao/OverseasAllowanceDAO.java create mode 100644 src/com/engine/bjcj220907/service/OverseasAllowanceCountService.java create mode 100644 src/com/engine/bjcj220907/service/impl/OverseasAllowanceCountServiceImpl.java create mode 100644 src/com/engine/bjcj220907/utils/BjcjCommonUtils.java create mode 100644 src/com/engine/bjcj220907/web/OverseasAllowanceCountController.java diff --git a/src/com/api/bjcj220907/web/OverseasAllowanceWeb.java b/src/com/api/bjcj220907/web/OverseasAllowanceWeb.java new file mode 100644 index 0000000..051eeea --- /dev/null +++ b/src/com/api/bjcj220907/web/OverseasAllowanceWeb.java @@ -0,0 +1,14 @@ +package com.api.bjcj220907.web; + +import com.engine.bjcj220907.web.OverseasAllowanceCountController; + +import javax.ws.rs.Path; + +/** + * @author Harryxzy + * @date 2022/09/26 13:41 + * @description + */ +@Path("/bs/OverseasAllowanceCount") +public class OverseasAllowanceWeb extends OverseasAllowanceCountController { +} diff --git a/src/com/engine/bjcj220907/dao/OverseasAllowanceDAO.java b/src/com/engine/bjcj220907/dao/OverseasAllowanceDAO.java new file mode 100644 index 0000000..d4b560d --- /dev/null +++ b/src/com/engine/bjcj220907/dao/OverseasAllowanceDAO.java @@ -0,0 +1,36 @@ +package com.engine.bjcj220907.dao; + +import weaver.general.BaseBean; + +/** + * @author Harryxzy + * @date 2022/09/26 14:10 + * @description 境外津贴 + */ +public class OverseasAllowanceDAO { + + BaseBean baseBean = new BaseBean(); + + + /** + * @description 判断月度绩效核算表中是否有该月数据 + * @return void + * @author Harryxzy + * @date 2022/9/8 17:25 + */ +// public boolean haveRecord(Date bonusMonth) { +// RecordSet rs = new RecordSet(); +// SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM"); +// String sql ="select count(*) from uf_ydjxzj where JXSSYF ='"+sdf.format(bonusMonth)+"'"; +// rs.execute(sql); +// while (rs.next()){ +// int anInt = rs.getInt("count(*)"); +// if(anInt>1){ +// baseBean.writeLog("该绩效所属月已有核算记录"); +// return true; +// } +// } +// return false; +// } + +} diff --git a/src/com/engine/bjcj220907/entity/JwCZInfo.java b/src/com/engine/bjcj220907/entity/JwCZInfo.java index 43776d3..6128c9c 100644 --- a/src/com/engine/bjcj220907/entity/JwCZInfo.java +++ b/src/com/engine/bjcj220907/entity/JwCZInfo.java @@ -26,4 +26,9 @@ public class JwCZInfo { * 境外常驻详细信息 */ private List infos; + + /** + * 考勤月份中境外应常驻天数 + */ + private Integer yczDays; } diff --git a/src/com/engine/bjcj220907/entity/JwCZInfoDetail.java b/src/com/engine/bjcj220907/entity/JwCZInfoDetail.java index af914f2..eabc08e 100644 --- a/src/com/engine/bjcj220907/entity/JwCZInfoDetail.java +++ b/src/com/engine/bjcj220907/entity/JwCZInfoDetail.java @@ -38,4 +38,9 @@ public class JwCZInfoDetail { * 境外工作结束日期 */ private Date jwczjsrq; + + /** + * 天数 + */ + private Integer days; } diff --git a/src/com/engine/bjcj220907/service/OverseasAllowanceCountService.java b/src/com/engine/bjcj220907/service/OverseasAllowanceCountService.java new file mode 100644 index 0000000..397718b --- /dev/null +++ b/src/com/engine/bjcj220907/service/OverseasAllowanceCountService.java @@ -0,0 +1,19 @@ +package com.engine.bjcj220907.service; + +import java.util.Calendar; + +/** + * @author Harryxzy + * @date 2022/09/26 13:59 + * @description 境外津贴 + */ +public interface OverseasAllowanceCountService { + + /*** + * @description 计算境外津贴 + * @return void + * @author Harryxzy + * @date 2022/9/26 14:05 + */ + void countOverseasAllowance(Calendar countCal); +} diff --git a/src/com/engine/bjcj220907/service/impl/MonthBonusCountServiceImpl.java b/src/com/engine/bjcj220907/service/impl/MonthBonusCountServiceImpl.java index 2c929d2..5c14a84 100644 --- a/src/com/engine/bjcj220907/service/impl/MonthBonusCountServiceImpl.java +++ b/src/com/engine/bjcj220907/service/impl/MonthBonusCountServiceImpl.java @@ -4,6 +4,7 @@ import com.engine.bjcj220907.dao.MonthBonusDAO; import com.engine.bjcj220907.entity.*; import com.engine.bjcj220907.service.GetKQ4MonthBonusService; import com.engine.bjcj220907.service.MonthBonusCountService; +import com.engine.bjcj220907.utils.BjcjCommonUtils; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import weaver.general.BaseBean; @@ -80,8 +81,8 @@ public class MonthBonusCountServiceImpl extends Service implements MonthBonusCou }).collect(Collectors.toList()); baseBean.writeLog("获取所有人的薪酬等级和绩效工资"); // 获取在职员工的考勤周期(上个月29-这个月28) - Calendar startAttendanceCal = getStartAttendanceCal(bonusMonth); - Calendar endAttendanceCal = getEndAttendanceCal(bonusMonth); + Calendar startAttendanceCal = BjcjCommonUtils.getStartAttendanceCal(bonusMonth); + Calendar endAttendanceCal = BjcjCommonUtils.getEndAttendanceCal(bonusMonth); // 获取所有人的境外常驻信息 List czInfos = getMonthBonusDAO().getCZInfo(); @@ -96,8 +97,8 @@ public class MonthBonusCountServiceImpl extends Service implements MonthBonusCou // 循环将离职人员的各个月的缺勤天数取到 Map qqDatasDepar= new HashMap<>(); for(int i=0;i details = new ArrayList<>(); // 考勤开始日期(在职、离职) - Calendar s = getStartAttendanceCal(item.getKqyf()); + Calendar s = BjcjCommonUtils.getStartAttendanceCal(item.getKqyf()); // 考勤结束日期(在职、离职) - Calendar e = getEndAttendanceCal(item.getKqyf()); + Calendar e = BjcjCommonUtils.getEndAttendanceCal(item.getKqyf()); // 用于存储计算到哪一天的日期 Calendar c = Calendar.getInstance(); c.setTime(e.getTime()); @@ -150,13 +151,13 @@ public class MonthBonusCountServiceImpl extends Service implements MonthBonusCou // 开始常驻 if(infoi.getJwczksrq().after(s.getTime())){ // 开始常驻日期在 考勤开始日期后,结束日期前 - int d = getDays(infoi.getJwczksrq(), e.getTime()); + int d = BjcjCommonUtils.getDays(infoi.getJwczksrq(), e.getTime()); ycq[0]+=d; countDay[0].setTime(infoi.getJwczksrq()); countDay[0].add(Calendar.DATE,-1); }else{ // 开始常驻日期在 考勤开始日期前(应出勤日期为自然日) - ycq[0]=getDays(s.getTime(), e.getTime()); + ycq[0]=BjcjCommonUtils.getDays(s.getTime(), e.getTime()); break; } } @@ -234,7 +235,7 @@ public class MonthBonusCountServiceImpl extends Service implements MonthBonusCou Calendar deparLastDay = Calendar.getInstance(); deparLastDay.setTime(date); deparLastDay.add(Calendar.DATE,1); - Calendar deaprAttendEndDay = getEndAttendanceCal(kqyf); + Calendar deaprAttendEndDay = BjcjCommonUtils.getEndAttendanceCal(kqyf); double[] sqq={0.0}; if(Math.abs(i.getYcq()-21.75) < 0.000000002){ int[] qq={0}; @@ -250,7 +251,7 @@ public class MonthBonusCountServiceImpl extends Service implements MonthBonusCou sqq[0] = i.getQq()+qq[0]; }else{ // 存在境外,取离职日后一天-考勤最后一天的自然日 - sqq[0] = i.getQq()+getDays(deparLastDay.getTime(), deaprAttendEndDay.getTime()); + sqq[0] = i.getQq()+BjcjCommonUtils.getDays(deparLastDay.getTime(), deaprAttendEndDay.getTime()); } i.setQq(sqq[0]); // 重新计算1、实出勤天数 =应出勤天数-缺勤天数 2、奖金基数(考勤)= 月度绩效奖金基数-月度绩效基数/满勤*缺勤天数 3、奖金实发放额= 奖金基数(考勤)*个人绩效系数 @@ -277,13 +278,13 @@ public class MonthBonusCountServiceImpl extends Service implements MonthBonusCou - /*** + /** * @description 境外常驻信息格式化 * @return void * @author Harryxzy * @date 2022/9/11 17:07 */ - private List formatJwCZInfo(List czInfos) { + public static List formatJwCZInfo(List czInfos) { Map> groupByName = czInfos.stream().collect(Collectors.groupingBy(item -> item.getXm())); List formatJwCZInfos = new ArrayList<>(); for (Map.Entry> entry : groupByName.entrySet()) { @@ -293,73 +294,5 @@ public class MonthBonusCountServiceImpl extends Service implements MonthBonusCou return formatJwCZInfos; } - /** - * @description 获取2个时间段中有多少天 - * @return Long - * @author Harryxzy - * @date 2022/9/11 20:12 - */ - private int getDays(Date startDate,Date endDate) { - int days = (int)( (endDate.getTime() - startDate.getTime()) / (1000 * 60 * 60 * 24) + 1); - return days; - } - - /** - * @description 判断某一天是否在某一个时间区间内 - * @return Long - * @author Harryxzy - * @date 2022/9/11 20:12 - */ - private boolean isBetween(Date now,Date startDate,Date endDate) { - if( (now.after(startDate) || now.equals(startDate)) && ( (now.before(endDate) || now.equals(endDate)) )){ - return true; - } - return false; - } - - /*** - * @description 根据考勤所属月获取考勤开始日期 - * @return Calendar - * @author Harryxzy - * @date 2022/9/14 21:57 - */ - private Calendar getStartAttendanceCal(Date bonusMonth){ - Calendar startAttendanceCal = Calendar.getInstance(); - startAttendanceCal.setTime(bonusMonth); - startAttendanceCal.add(Calendar.MONTH,-1); - if(startAttendanceCal.getActualMaximum(Calendar.DAY_OF_MONTH) == 28){ - // 2月只有28天的情况(从3.1开始) - startAttendanceCal.add(Calendar.MONTH, 1); - startAttendanceCal.set(Calendar.DAY_OF_MONTH, 1); - startAttendanceCal.set(Calendar.HOUR_OF_DAY, 0); - startAttendanceCal.set(Calendar.MINUTE, 0); - startAttendanceCal.set(Calendar.SECOND, 0); - startAttendanceCal.set(Calendar.MILLISECOND, 0); - }else{ - startAttendanceCal.set(Calendar.DAY_OF_MONTH, 29); - startAttendanceCal.set(Calendar.HOUR_OF_DAY, 0); - startAttendanceCal.set(Calendar.MINUTE, 0); - startAttendanceCal.set(Calendar.SECOND, 0); - startAttendanceCal.set(Calendar.MILLISECOND, 0); - } - return startAttendanceCal; - } - - /*** - * @description 根据考勤所属月获取考勤结束日期 - * @return Calendar - * @author Harryxzy - * @date 2022/9/14 21:57 - */ - private Calendar getEndAttendanceCal(Date bonusMonth){ - Calendar endAttendanceCal = Calendar.getInstance(); - endAttendanceCal.setTime(bonusMonth); - endAttendanceCal.set(Calendar.DAY_OF_MONTH,28); - endAttendanceCal.set(Calendar.HOUR_OF_DAY, 23); - endAttendanceCal.set(Calendar.MINUTE, 59); - endAttendanceCal.set(Calendar.SECOND, 59); - endAttendanceCal.set(Calendar.MILLISECOND, 999); - return endAttendanceCal; - } } diff --git a/src/com/engine/bjcj220907/service/impl/OverseasAllowanceCountServiceImpl.java b/src/com/engine/bjcj220907/service/impl/OverseasAllowanceCountServiceImpl.java new file mode 100644 index 0000000..8566337 --- /dev/null +++ b/src/com/engine/bjcj220907/service/impl/OverseasAllowanceCountServiceImpl.java @@ -0,0 +1,44 @@ +package com.engine.bjcj220907.service.impl; + +import com.engine.bjcj220907.dao.MonthBonusDAO; +import com.engine.bjcj220907.entity.JwCZInfo; +import com.engine.bjcj220907.entity.JwCZInfoDetail; +import com.engine.bjcj220907.service.OverseasAllowanceCountService; +import weaver.general.BaseBean; + +import java.util.Calendar; +import java.util.List; + +/** + * @author Harryxzy + * @date 2022/09/26 14:03 + * @description 境外津贴 + */ +public class OverseasAllowanceCountServiceImpl implements OverseasAllowanceCountService { + + BaseBean baseBean = new BaseBean(); + + public MonthBonusDAO getMonthBonusDAO(){ + return new MonthBonusDAO(); + } + /** + * @description 计算境外津贴 + * @return void + * @author Harryxzy + * @date 2022/9/26 14:06 + */ + @Override + public void countOverseasAllowance(Calendar countCal) { + // 境外津贴包含:境外津贴(天标准)+境外工龄补贴(月标准)+艰苦地区补贴(天标准) + // 获取境外津贴(天标准) --计算当月应常驻天数 + // 获取所有人的境外常驻信息 + List czInfos = getMonthBonusDAO().getCZInfo(); + baseBean.writeLog("获取所有人的境外常驻信息,共:"+czInfos.size()); + // 将境外常驻信息格式化 + List jwCZInfos = MonthBonusCountServiceImpl.formatJwCZInfo(czInfos); + baseBean.writeLog("将境外常驻信息格式化"); + + } + + +} diff --git a/src/com/engine/bjcj220907/utils/BjcjCommonUtils.java b/src/com/engine/bjcj220907/utils/BjcjCommonUtils.java new file mode 100644 index 0000000..46d3c59 --- /dev/null +++ b/src/com/engine/bjcj220907/utils/BjcjCommonUtils.java @@ -0,0 +1,96 @@ +package com.engine.bjcj220907.utils; + +import java.util.Calendar; +import java.util.Date; + +/** + * @author Harryxzy + * @date 2022/09/26 13:55 + * @description + */ +public class BjcjCommonUtils { + + /*** + * @description 获取当前calendar + * @return Calendar + * @author Harryxzy + * @date 2022/9/26 14:44 + */ + public static Calendar getNowCalendar(){ + Date date = new Date(); + Calendar cal = Calendar.getInstance(); + cal.setTime(date); + return cal; + } + + /*** + * @description 根据考勤所属月获取考勤开始日期 + * @return Calendar + * @author Harryxzy + * @date 2022/9/14 21:57 + */ + public static Calendar getStartAttendanceCal(Date bonusMonth){ + Calendar startAttendanceCal = Calendar.getInstance(); + startAttendanceCal.setTime(bonusMonth); + startAttendanceCal.add(Calendar.MONTH,-1); + if(startAttendanceCal.getActualMaximum(Calendar.DAY_OF_MONTH) == 28){ + // 2月只有28天的情况(从3.1开始) + startAttendanceCal.add(Calendar.MONTH, 1); + startAttendanceCal.set(Calendar.DAY_OF_MONTH, 1); + startAttendanceCal.set(Calendar.HOUR_OF_DAY, 0); + startAttendanceCal.set(Calendar.MINUTE, 0); + startAttendanceCal.set(Calendar.SECOND, 0); + startAttendanceCal.set(Calendar.MILLISECOND, 0); + }else{ + startAttendanceCal.set(Calendar.DAY_OF_MONTH, 29); + startAttendanceCal.set(Calendar.HOUR_OF_DAY, 0); + startAttendanceCal.set(Calendar.MINUTE, 0); + startAttendanceCal.set(Calendar.SECOND, 0); + startAttendanceCal.set(Calendar.MILLISECOND, 0); + } + return startAttendanceCal; + } + + + /*** + * @description 根据考勤所属月获取考勤结束日期 + * @return Calendar + * @author Harryxzy + * @date 2022/9/14 21:57 + */ + public static Calendar getEndAttendanceCal(Date bonusMonth){ + Calendar endAttendanceCal = Calendar.getInstance(); + endAttendanceCal.setTime(bonusMonth); + endAttendanceCal.set(Calendar.DAY_OF_MONTH,28); + endAttendanceCal.set(Calendar.HOUR_OF_DAY, 23); + endAttendanceCal.set(Calendar.MINUTE, 59); + endAttendanceCal.set(Calendar.SECOND, 59); + endAttendanceCal.set(Calendar.MILLISECOND, 999); + return endAttendanceCal; + } + + + /** + * @description 获取2个时间段中有多少天 + * @return Long + * @author Harryxzy + * @date 2022/9/11 20:12 + */ + public static int getDays(Date startDate,Date endDate) { + int days = (int)( (endDate.getTime() - startDate.getTime()) / (1000 * 60 * 60 * 24) + 1); + return days; + } + + /** + * @description 判断某一天是否在某一个时间区间内 + * @return Long + * @author Harryxzy + * @date 2022/9/11 20:12 + */ + public static boolean isBetween(Date now,Date startDate,Date endDate) { + if( (now.after(startDate) || now.equals(startDate)) && ( (now.before(endDate) || now.equals(endDate)) )){ + return true; + } + return false; + } +} diff --git a/src/com/engine/bjcj220907/web/OverseasAllowanceCountController.java b/src/com/engine/bjcj220907/web/OverseasAllowanceCountController.java new file mode 100644 index 0000000..a24ad41 --- /dev/null +++ b/src/com/engine/bjcj220907/web/OverseasAllowanceCountController.java @@ -0,0 +1,41 @@ +package com.engine.bjcj220907.web; + +import com.engine.bjcj220907.service.impl.OverseasAllowanceCountServiceImpl; +import com.engine.bjcj220907.utils.BjcjCommonUtils; +import weaver.general.BaseBean; +import weaver.hrm.HrmUserVarify; +import weaver.hrm.User; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.util.Calendar; + +/** + * @author Harryxzy + * @date 2022/09/26 13:42 + * @description + */ +public class OverseasAllowanceCountController { + + BaseBean baseBean = new BaseBean(); + + /** + * 境外津贴计算 + */ + @GET + @Path("/countOverseasAllowanceCount") + @Produces(MediaType.APPLICATION_JSON) + public void countOverseasAllowance(@Context HttpServletRequest request, @Context HttpServletResponse response) { + User user = HrmUserVarify.getUser(request, response); + Calendar cal = BjcjCommonUtils.getNowCalendar(); + cal.add(Calendar.MONTH,-1); + baseBean.writeLog("开始计算:"+cal.getTime()+"的境外津贴"); + new OverseasAllowanceCountServiceImpl().countOverseasAllowance(cal); + } + +}