工龄补贴

This commit is contained in:
Harryxzy 2022-09-28 15:58:46 +08:00
parent 6bac35b3ee
commit 2ff05c2063
7 changed files with 217 additions and 43 deletions

View File

@ -1,5 +1,6 @@
package com.engine.bjcj220907.dao; package com.engine.bjcj220907.dao;
import com.engine.bjcj220907.entity.JwCZInfoDetail;
import com.engine.bjcj220907.entity.XcdjJwjtParam; import com.engine.bjcj220907.entity.XcdjJwjtParam;
import weaver.conn.RecordSet; import weaver.conn.RecordSet;
import weaver.general.BaseBean; import weaver.general.BaseBean;
@ -17,6 +18,50 @@ public class OverseasAllowanceDAO {
BaseBean baseBean = new BaseBean(); BaseBean baseBean = new BaseBean();
/***
* @description 获取所有人的境外常驻信息
* @return void
* @author Harryxzy
* @date 2022/9/28 16:06
*/
public List<JwCZInfoDetail> getCZInfo() {
RecordSet rs = new RecordSet();
String sql="select xm,jwgzksrq,jwgzjsrq,lx,jsglts,btbz " +
"from UF_NJJMB_DT1 d LEFT JOIN UF_NJJMB m on d.MAINID=m.id " +
"LEFT JOIN uf_bjcjtestgl g on g.jwgl=case when floor(jsglts/365)>5 then 5 else floor(jsglts/365) end " +
"WHERE lx in(0,1) " +
"ORDER by JWGZKSRQ desc";
rs.execute(sql);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
ArrayList<JwCZInfoDetail> results = new ArrayList<>();
while (rs.next()){
try {
String jwgzksrqStr = rs.getString("jwgzksrq");
Date jwgzksrq=null;
String jwgzjsrqStr = rs.getString("jwgzjsrq");
Date jwgzjsrq=null;
double jsglts = rs.getDouble("jsglts");
double btbz = rs.getDouble("btbz");
if(btbz == -1){
// 境外工龄未满1年
btbz=0.0;
}
if(jwgzksrqStr!=null && jwgzksrqStr.length()!=0){
jwgzksrq = sdf.parse(jwgzksrqStr);
}
if(jwgzjsrqStr!=null && jwgzjsrqStr.length()!=0){
jwgzjsrq = sdf.parse(jwgzjsrqStr);
}
JwCZInfoDetail build = JwCZInfoDetail.builder().xm(rs.getString("xm")).lx(rs.getInt("lx")).jwczksrq(jwgzksrq).jwczjsrq(jwgzjsrq).jsglts(jsglts).glbtybz(btbz).build();
results.add(build);
}catch (Exception e){
baseBean.writeLog(e);
}
}
return results;
}
/** /**
* @description 计算考勤所属月境外常驻员工的薪酬等级 * @description 计算考勤所属月境外常驻员工的薪酬等级
* @return Map<String,String> * @return Map<String,String>

View File

@ -5,6 +5,8 @@ import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import java.util.Date;
/** /**
* @author Harryxzy * @author Harryxzy
* @date 2022/09/26 17:19 * @date 2022/09/26 17:19
@ -17,20 +19,45 @@ import lombok.NoArgsConstructor;
public class JWJT { public class JWJT {
/** /**
* 境外津贴 * 用户名
*/ */
private String user; private String user;
/**
* 考勤月份
*/
private Date kqMonth;
/** /**
* 境外应常驻天数 * 境外应常驻天数
*/ */
private double jwycq; private double jwycq;
/**
* 境外实际常驻天数 境外应常驻天数-请假天数不含年假奖励假-公务回国天数
*/
private double jwscq;
/** /**
* 国内工作天数工作日 * 国内工作天数工作日
*/ */
private double gngzts; private double gngzts;
/**
* 缺勤天数(请假)
*/
private double qq;
/**
* 公务回国天数包含周末
*/
private double gwhg;
/**
* 公务回国工作日天数
*/
private double gwhgWorkdays;
/** /**
* 薪酬等级 * 薪酬等级
*/ */
@ -40,4 +67,29 @@ public class JWJT {
* 境外津贴标准 * 境外津贴标准
*/ */
private double jwjtbz; private double jwjtbz;
/**
* 境外津贴=境外实际常驻天数*境外津贴标准
*/
private double jwjt;
/**
* 境外工龄补贴月标准
*/
private double jwglbtybz;
/**
* 境外工龄补贴日标准
*/
private double jwglbtrbz;
/**
* 境外工龄天数
*/
private double jwgl;
/**
* 艰苦地区补贴
*/
} }

View File

@ -27,6 +27,21 @@ public class JwCZInfo {
*/ */
private List<JwCZInfoDetail> infos; private List<JwCZInfoDetail> infos;
/**
* 计算工龄天数
*/
private double jsglts;
/**
* 工龄补贴月标准
*/
private double glbtybz;
/**
* 工龄补贴日标准
*/
private double glbtrbz;
// /** // /**
// * 考勤月份中境外应常驻天数 // * 考勤月份中境外应常驻天数
// */ // */

View File

@ -43,4 +43,21 @@ public class JwCZInfoDetail {
* 天数 * 天数
*/ */
private Integer days; private Integer days;
/**
* 计算工龄天数
*/
private double jsglts;
/**
* 工龄补贴月标准
*/
private double glbtybz;
/**
* 工龄补贴日标准
*/
private double glbtrbz;
} }

View File

@ -0,0 +1,9 @@
package com.engine.bjcj220907.entity;
/**
* @author Harryxzy
* @date 2022/09/28 15:58
* @description
*/
public class jkdqbt {
}

View File

@ -49,10 +49,13 @@ public class GetKQ4OverseasAllowanceCountServiceImpl extends Service implements
Map<String, Object> temp = new HashMap<String, Object>(); Map<String, Object> temp = new HashMap<String, Object>();
temp.put("data", JSONObject.toJSONString(paramsMap)); temp.put("data", JSONObject.toJSONString(paramsMap));
temp.put("reportType", "month"); temp.put("reportType", "month");
baseBean.writeLog("开始执行GetKQReportCmd");
Map execute = commandExecutor.execute(new GetKQReportCmd(temp,user)); Map execute = commandExecutor.execute(new GetKQReportCmd(temp,user));
baseBean.writeLog("GetKQReportCmd执行成功");
// 获取列数据 // 获取列数据
columnsList = (List<Map>) execute.get("columns"); columnsList = (List<Map>) execute.get("columns");
List c = new ArrayList(); List c = new ArrayList();
String[] gwhgDataIndex={""};
columnsList.stream().forEach(column->{ columnsList.stream().forEach(column->{
if(column.get("title").equals("旷工")){ if(column.get("title").equals("旷工")){
c.add(column.get("dataIndex")); c.add(column.get("dataIndex"));
@ -60,39 +63,37 @@ public class GetKQ4OverseasAllowanceCountServiceImpl extends Service implements
if(column.get("title").equals("出差及请假")){ if(column.get("title").equals("出差及请假")){
List<Map> children =(List<Map>) column.get("children"); List<Map> children =(List<Map>) column.get("children");
children.stream().forEach(i->{ children.stream().forEach(i->{
if((!i.get("title").equals("境内年假")) && (!i.get("title").equals("境外年假")) && (!i.get("title").equals("奖励假")) && (!i.get("title").equals("工伤")) && (!i.get("title").equals("隔离假")) ){ if((!i.get("title").equals("境内年假")) && (!i.get("title").equals("境外年假")) && (!i.get("title").equals("工伤"))){
c.add(i.get("dataIndex")); c.add(i.get("dataIndex"));
} }
if(i.get("title").equals("公务回国") ){
gwhgDataIndex[0] =(String) column.get("dataIndex");
}
}); });
} }
}); });
baseBean.writeLog("计算缺勤列:"+c); baseBean.writeLog("计算缺勤列:"+c);
dataList = (List<Map<String, String>>) execute.get("datas"); dataList = (List<Map<String, String>>) execute.get("datas");
// 获取每个人的缺勤天数 // 获取每个人的缺勤天数及公务回国天数
Map<String, Double> qqDays = new HashMap<>(); Map<String, Double> qqDays = new HashMap<>();
// dataList.stream().forEach(i->{ String[] gwhgS= {""};
// if(attend4MonthBonus.getUser()!=null){ dataList.stream().forEach(i->{
// if(i.get("resourceId").equals(attend4MonthBonus.getUser())){ double[] qq={0.0};
// double[] qq={0.0}; c.stream().forEach(j->{
// c.stream().forEach(j->{ // 累加各种请假天数
// // 累加各种请假天数 qq[0]+=Double.parseDouble(i.get(j));
// qq[0]+=Double.parseDouble(i.get(j)); });
// }); String qqStr = i.get("resourceId") +"-qq";
// String s = i.get("resourceId") +"-"+ sdf2.format(attend4MonthBonus.getEndDate()); qqDays.put(qqStr,qq[0]);
// qqDays.put(s,qq[0]); String gwhgStr = i.get("resourceId") + "-gwhg";
// } if(!gwhgDataIndex[0].equals("")){
// }else{ gwhgS[0] = i.get(gwhgDataIndex[0]);
// double[] qq={0.0}; }else {
// c.stream().forEach(j->{ gwhgS[0] ="0";
// // 累加各种请假天数 }
// qq[0]+=Double.parseDouble(i.get(j)); qqDays.put(gwhgStr,Double.valueOf(gwhgS[0]));
// }); });
// String s = i.get("resourceId") +"-"+ sdf2.format(attend4MonthBonus.getEndDate()); baseBean.writeLog("获取的考勤缺勤及公务回国天数,{}", JSONUtils.toJSONString(qqDays));
// qqDays.put(s,qq[0]);
// }
//
// });
baseBean.writeLog("获取的考勤缺勤天数,{}", JSONUtils.toJSONString(qqDays));
return qqDays; return qqDays;
} catch (Exception e) { } catch (Exception e) {
baseBean.writeLog("获取考勤数据失败{}", e); baseBean.writeLog("获取考勤数据失败{}", e);

View File

@ -45,29 +45,35 @@ public class OverseasAllowanceCountServiceImpl extends Service implements Overse
// 境外津贴包含境外津贴天标准+境外工龄补贴月标准+艰苦地区补贴天标准 // 境外津贴包含境外津贴天标准+境外工龄补贴月标准+艰苦地区补贴天标准
// 获取境外津贴(天标准) --计算当月应常驻天数 // 获取境外津贴(天标准) --计算当月应常驻天数
// 获取所有人的境外常驻信息 // 获取所有人的境外常驻信息
List<JwCZInfoDetail> czInfos = getMonthBonusDAO().getCZInfo(); List<JwCZInfoDetail> czInfos = getOverseasAllowanceDAO().getCZInfo();
baseBean.writeLog("获取所有人的境外常驻信息,共:"+czInfos.size()); baseBean.writeLog("获取所有人的境外常驻信息,共:"+czInfos.size());
// 将境外常驻信息格式化
List<JwCZInfo> jwCZInfos = MonthBonusCountServiceImpl.formatJwCZInfo(czInfos);
baseBean.writeLog("将境外常驻信息格式化");
// 考勤开始日期 // 考勤开始日期
Calendar startAttendanceCal = BjcjCommonUtils.getStartAttendanceCal(countCal.getTime()); Calendar startAttendanceCal = BjcjCommonUtils.getStartAttendanceCal(countCal.getTime());
// 考勤结束日期 // 考勤结束日期
Calendar endAttendanceCal = BjcjCommonUtils.getEndAttendanceCal(countCal.getTime()); Calendar endAttendanceCal = BjcjCommonUtils.getEndAttendanceCal(countCal.getTime());
baseBean.writeLog("考勤开始日期:"+startAttendanceCal.getTime()+",考勤结束日期:"+endAttendanceCal); baseBean.writeLog("考勤开始日期:"+startAttendanceCal.getTime()+",考勤结束日期:"+endAttendanceCal);
// 将境外常驻信息格式化
List<JwCZInfo> jwCZInfos = formatJwCZInfo(czInfos,startAttendanceCal,endAttendanceCal);
baseBean.writeLog("将境外常驻信息格式化");
// 如果用户在考勤周期内存在境外常驻信息则过滤出来并且计算当月应常驻天数 // 如果用户在考勤周期内存在境外常驻信息则过滤出来并且计算当月应常驻天数
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(users,startAttendanceCal); Map<Integer, XcdjJwjtParam> usersXSDJ = getOverseasAllowanceDAO().getXCDJByUsers(users,startAttendanceCal);
baseBean.writeLog("获取所有员工考勤所属月的薪酬等级及所对应的境外津贴标准:"+usersXSDJ.size()); baseBean.writeLog("获取所有员工考勤所属月的薪酬等级及所对应的境外津贴标准,共:"+usersXSDJ.size());
// 封装薪酬等级境外津贴标准 // 获取公务回国天数 缺勤天数
getXcdjAndJwjtbz(results,usersXSDJ);
// 获取公务回国天数 公务回国工作日天数
Attend4MonthBonus build = Attend4MonthBonus.builder().beginDate(startAttendanceCal.getTime()).endDate(endAttendanceCal.getTime()).build(); Attend4MonthBonus build = Attend4MonthBonus.builder().beginDate(startAttendanceCal.getTime()).endDate(endAttendanceCal.getTime()).build();
GetKQ4OverseasAllowanceCountService().getKQDatas(build); Map<String, Double> kqDatas = GetKQ4OverseasAllowanceCountService().getKQDatas(build);
baseBean.writeLog("调用考勤接口获取公务回国天数 及 公务回国工作日天数"+usersXSDJ.size()); baseBean.writeLog("调用考勤接口获取公务回国天数 及 缺勤天数,共:"+usersXSDJ.size());
// 封装薪酬等级境外津贴标准考勤天数
getXcdjAndJwjtbz(results,usersXSDJ,kqDatas);
// TODO:验证一下188 陈涛有没有考勤数据 结果不再是0.0
baseBean.writeLog("封装薪酬等级、境外津贴标准、考勤天数、境外实际常驻天数并计算实出勤天数、境外津贴,共:"+results.size());
// 处理艰苦地区补贴
} }
/** /**
@ -100,8 +106,7 @@ public class OverseasAllowanceCountServiceImpl extends Service implements Overse
} else { } else {
// 开始常驻日期在 考勤开始日期前应出勤日期为自然日 // 开始常驻日期在 考勤开始日期前应出勤日期为自然日
int days = BjcjCommonUtils.getDays(startAttendanceCal.getTime(), endAttendanceCal.getTime()); int days = BjcjCommonUtils.getDays(startAttendanceCal.getTime(), endAttendanceCal.getTime());
// czInfo.setYczDays(days); JWJT build = JWJT.builder().user(czInfo.getXm()).jwycq(days).gngzts(0.0).kqMonth(endAttendanceCal.getTime()).build();
JWJT build = JWJT.builder().user(czInfo.getXm()).jwycq(days).gngzts(0.0).build();
results.add(build); results.add(build);
return true; return true;
} }
@ -144,7 +149,7 @@ public class OverseasAllowanceCountServiceImpl extends Service implements Overse
aCal.add(Calendar.DATE,-1); aCal.add(Calendar.DATE,-1);
} }
} }
JWJT build = JWJT.builder().user(czInfo.getXm()).jwycq(ycq[0]).gngzts(gnycq[0]).build(); JWJT build = JWJT.builder().user(czInfo.getXm()).jwycq(ycq[0]).gngzts(gnycq[0]).kqMonth(endAttendanceCal.getTime()).build();
results.add(build); results.add(build);
return true; return true;
} }
@ -154,17 +159,47 @@ public class OverseasAllowanceCountServiceImpl extends Service implements Overse
return results; return results;
} }
/*** /**
* @description 将获取到的薪酬等级与境外津贴标准与人员对应 * @description 将获取到的缺勤天数请假公务回国天数薪酬等级与境外津贴标准与人员对应并计算出实出勤天数
* @return void * @return void
* @author Harryxzy * @author Harryxzy
* @date 2022/9/27 15:37 * @date 2022/9/27 15:37
*/ */
public void getXcdjAndJwjtbz(List<JWJT> results ,Map<Integer, XcdjJwjtParam> usersXSDJ){ public void getXcdjAndJwjtbz(List<JWJT> results ,Map<Integer, XcdjJwjtParam> usersXSDJ,Map<String, Double> kqDatas){
results.stream().forEach(item-> { results.stream().forEach(item-> {
XcdjJwjtParam param = usersXSDJ.get(Integer.valueOf(item.getUser())); XcdjJwjtParam param = usersXSDJ.get(Integer.valueOf(item.getUser()));
item.setXcdj(param.getXcdj()); item.setXcdj(param.getXcdj());
item.setJwjtbz(param.getJwjtbz()); item.setJwjtbz(param.getJwjtbz());
if(kqDatas.get(item.getUser() + "-qq") == null){
// 目前该员工没有考勤数据
item.setQq(0.0);
item.setGwhg(0.0);
baseBean.writeLog("员工" +item.getUser()+"没有考勤数据!请核对考勤报表");
}else{
item.setQq(kqDatas.get(item.getUser()+"-qq"));
item.setGwhg(kqDatas.get(item.getUser()+"-gwhg"));
}
item.setJwscq(item.getJwycq()-item.getQq()-item.getGwhg());
item.setJwjt(item.getJwscq()*item.getJwjtbz());
}); });
} }
/**
* @description 境外常驻信息格式化
* @return void
* @author Harryxzy
* @date 2022/9/28 17:07
*/
public static List<JwCZInfo> formatJwCZInfo(List<JwCZInfoDetail> czInfos,Calendar startAttendanceCal,Calendar endAttendanceCal) {
Map<String, List<JwCZInfoDetail>> groupByName = czInfos.stream().collect(Collectors.groupingBy(item -> item.getXm()));
int days = BjcjCommonUtils.getDays(startAttendanceCal.getTime(), endAttendanceCal.getTime());
List<JwCZInfo> formatJwCZInfos = new ArrayList<>();
for (Map.Entry<String, List<JwCZInfoDetail>> entry : groupByName.entrySet()) {
List<JwCZInfoDetail> values = entry.getValue();
JwCZInfo build = new JwCZInfo().builder().xm(values.get(0).getXm()).jsglts(values.get(0).getJsglts()).glbtybz(values.get(0).getGlbtybz()).glbtrbz(values.get(0).getGlbtybz()/days).infos(entry.getValue()).build();
formatJwCZInfos.add(build);
}
return formatJwCZInfos;
}
} }