This commit is contained in:
Harryxzy 2022-09-26 14:52:34 +08:00
parent 575e54536a
commit cff05b3f29
9 changed files with 273 additions and 80 deletions

View File

@ -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 {
}

View File

@ -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;
// }
}

View File

@ -26,4 +26,9 @@ public class JwCZInfo {
* 境外常驻详细信息
*/
private List<JwCZInfoDetail> infos;
/**
* 考勤月份中境外应常驻天数
*/
private Integer yczDays;
}

View File

@ -38,4 +38,9 @@ public class JwCZInfoDetail {
* 境外工作结束日期
*/
private Date jwczjsrq;
/**
* 天数
*/
private Integer days;
}

View File

@ -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);
}

View File

@ -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<JwCZInfoDetail> czInfos = getMonthBonusDAO().getCZInfo();
@ -96,8 +97,8 @@ public class MonthBonusCountServiceImpl extends Service implements MonthBonusCou
// 循环将离职人员的各个月的缺勤天数取到
Map<String, Double> qqDatasDepar= new HashMap<>();
for(int i=0;i<departureTemp.size();i++){
Date saDate = getStartAttendanceCal(departureTemp.get(i).getKqyf()).getTime();
Date eaDate = getEndAttendanceCal(departureTemp.get(i).getKqyf()).getTime();
Date saDate = BjcjCommonUtils.getStartAttendanceCal(departureTemp.get(i).getKqyf()).getTime();
Date eaDate = BjcjCommonUtils.getEndAttendanceCal(departureTemp.get(i).getKqyf()).getTime();
qqDatasDepar.putAll(getKQ4MonthBonusService().getKQDatas(Attend4MonthBonus.builder().beginDate(saDate).endDate(eaDate).user(Integer.valueOf(departureTemp.get(i).getXm())).build()));
}
baseBean.writeLog("获取所有离职人员的各个月的缺勤天数"+qqDatasDepar);
@ -137,9 +138,9 @@ public class MonthBonusCountServiceImpl extends Service implements MonthBonusCou
List<Date> 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<JwCZInfo> formatJwCZInfo(List<JwCZInfoDetail> czInfos) {
public static List<JwCZInfo> formatJwCZInfo(List<JwCZInfoDetail> czInfos) {
Map<String, List<JwCZInfoDetail>> groupByName = czInfos.stream().collect(Collectors.groupingBy(item -> item.getXm()));
List<JwCZInfo> formatJwCZInfos = new ArrayList<>();
for (Map.Entry<String, List<JwCZInfoDetail>> 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;
}
}

View File

@ -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<JwCZInfoDetail> czInfos = getMonthBonusDAO().getCZInfo();
baseBean.writeLog("获取所有人的境外常驻信息,共:"+czInfos.size());
// 将境外常驻信息格式化
List<JwCZInfo> jwCZInfos = MonthBonusCountServiceImpl.formatJwCZInfo(czInfos);
baseBean.writeLog("将境外常驻信息格式化");
}
}

View File

@ -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;
}
}

View File

@ -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);
}
}