From 2ff05c20638f4dae1abdf04c2f5f3178c3e3650d Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Wed, 28 Sep 2022 15:58:46 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B7=A5=E9=BE=84=E8=A1=A5=E8=B4=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bjcj220907/dao/OverseasAllowanceDAO.java | 45 ++++++++++++ src/com/engine/bjcj220907/entity/JWJT.java | 54 ++++++++++++++- .../engine/bjcj220907/entity/JwCZInfo.java | 15 ++++ .../bjcj220907/entity/JwCZInfoDetail.java | 17 +++++ src/com/engine/bjcj220907/entity/jkdqbt.java | 9 +++ ...tKQ4OverseasAllowanceCountServiceImpl.java | 51 +++++++------- .../OverseasAllowanceCountServiceImpl.java | 69 ++++++++++++++----- 7 files changed, 217 insertions(+), 43 deletions(-) create mode 100644 src/com/engine/bjcj220907/entity/jkdqbt.java diff --git a/src/com/engine/bjcj220907/dao/OverseasAllowanceDAO.java b/src/com/engine/bjcj220907/dao/OverseasAllowanceDAO.java index 1259446..e540f74 100644 --- a/src/com/engine/bjcj220907/dao/OverseasAllowanceDAO.java +++ b/src/com/engine/bjcj220907/dao/OverseasAllowanceDAO.java @@ -1,5 +1,6 @@ package com.engine.bjcj220907.dao; +import com.engine.bjcj220907.entity.JwCZInfoDetail; import com.engine.bjcj220907.entity.XcdjJwjtParam; import weaver.conn.RecordSet; import weaver.general.BaseBean; @@ -17,6 +18,50 @@ public class OverseasAllowanceDAO { BaseBean baseBean = new BaseBean(); + /*** + * @description 获取所有人的境外常驻信息 + * @return void + * @author Harryxzy + * @date 2022/9/28 16:06 + */ + public List 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 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 计算考勤所属月境外常驻员工的薪酬等级 * @return Map diff --git a/src/com/engine/bjcj220907/entity/JWJT.java b/src/com/engine/bjcj220907/entity/JWJT.java index c935f37..2a71751 100644 --- a/src/com/engine/bjcj220907/entity/JWJT.java +++ b/src/com/engine/bjcj220907/entity/JWJT.java @@ -5,6 +5,8 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import java.util.Date; + /** * @author Harryxzy * @date 2022/09/26 17:19 @@ -17,20 +19,45 @@ import lombok.NoArgsConstructor; public class JWJT { /** - * 境外津贴 + * 用户名 */ private String user; + /** + * 考勤月份 + */ + private Date kqMonth; + /** * 境外应常驻天数 */ private double jwycq; + /** + * 境外实际常驻天数 境外应常驻天数-请假天数(不含年假、奖励假)-公务回国天数 + */ + private double jwscq; + /** * 国内工作天数(工作日) */ private double gngzts; + /** + * 缺勤天数(请假) + */ + private double qq; + + /** + * 公务回国天数(包含周末) + */ + private double gwhg; + + /** + * 公务回国工作日天数 + */ + private double gwhgWorkdays; + /** * 薪酬等级 */ @@ -40,4 +67,29 @@ public class JWJT { * 境外津贴标准 */ private double jwjtbz; + + /** + * 境外津贴=境外实际常驻天数*境外津贴标准 + */ + private double jwjt; + + /** + * 境外工龄补贴月标准 + */ + private double jwglbtybz; + + /** + * 境外工龄补贴日标准 + */ + private double jwglbtrbz; + + /** + * 境外工龄天数 + */ + private double jwgl; + + /** + * 艰苦地区补贴 + */ + } diff --git a/src/com/engine/bjcj220907/entity/JwCZInfo.java b/src/com/engine/bjcj220907/entity/JwCZInfo.java index c23df04..1c87fff 100644 --- a/src/com/engine/bjcj220907/entity/JwCZInfo.java +++ b/src/com/engine/bjcj220907/entity/JwCZInfo.java @@ -27,6 +27,21 @@ public class JwCZInfo { */ private List infos; + /** + * 计算工龄天数 + */ + private double jsglts; + + /** + * 工龄补贴月标准 + */ + private double glbtybz; + + /** + * 工龄补贴日标准 + */ + private double glbtrbz; + // /** // * 考勤月份中境外应常驻天数 // */ diff --git a/src/com/engine/bjcj220907/entity/JwCZInfoDetail.java b/src/com/engine/bjcj220907/entity/JwCZInfoDetail.java index eabc08e..8350ff6 100644 --- a/src/com/engine/bjcj220907/entity/JwCZInfoDetail.java +++ b/src/com/engine/bjcj220907/entity/JwCZInfoDetail.java @@ -43,4 +43,21 @@ public class JwCZInfoDetail { * 天数 */ private Integer days; + + /** + * 计算工龄天数 + */ + private double jsglts; + + /** + * 工龄补贴月标准 + */ + private double glbtybz; + + /** + * 工龄补贴日标准 + */ + private double glbtrbz; + + } diff --git a/src/com/engine/bjcj220907/entity/jkdqbt.java b/src/com/engine/bjcj220907/entity/jkdqbt.java new file mode 100644 index 0000000..993ac7f --- /dev/null +++ b/src/com/engine/bjcj220907/entity/jkdqbt.java @@ -0,0 +1,9 @@ +package com.engine.bjcj220907.entity; + +/** + * @author Harryxzy + * @date 2022/09/28 15:58 + * @description + */ +public class jkdqbt { +} diff --git a/src/com/engine/bjcj220907/service/impl/GetKQ4OverseasAllowanceCountServiceImpl.java b/src/com/engine/bjcj220907/service/impl/GetKQ4OverseasAllowanceCountServiceImpl.java index 34fe33b..56f432e 100644 --- a/src/com/engine/bjcj220907/service/impl/GetKQ4OverseasAllowanceCountServiceImpl.java +++ b/src/com/engine/bjcj220907/service/impl/GetKQ4OverseasAllowanceCountServiceImpl.java @@ -49,10 +49,13 @@ public class GetKQ4OverseasAllowanceCountServiceImpl extends Service implements Map temp = new HashMap(); temp.put("data", JSONObject.toJSONString(paramsMap)); temp.put("reportType", "month"); + baseBean.writeLog("开始执行GetKQReportCmd"); Map execute = commandExecutor.execute(new GetKQReportCmd(temp,user)); + baseBean.writeLog("GetKQReportCmd执行成功"); // 获取列数据 columnsList = (List) execute.get("columns"); List c = new ArrayList(); + String[] gwhgDataIndex={""}; columnsList.stream().forEach(column->{ if(column.get("title").equals("旷工")){ c.add(column.get("dataIndex")); @@ -60,39 +63,37 @@ public class GetKQ4OverseasAllowanceCountServiceImpl extends Service implements if(column.get("title").equals("出差及请假")){ List children =(List) column.get("children"); 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")); } + if(i.get("title").equals("公务回国") ){ + gwhgDataIndex[0] =(String) column.get("dataIndex"); + } }); } }); baseBean.writeLog("计算缺勤列:"+c); dataList = (List>) execute.get("datas"); - // 获取每个人的缺勤天数 + // 获取每个人的缺勤天数、及公务回国天数 Map qqDays = new HashMap<>(); -// dataList.stream().forEach(i->{ -// if(attend4MonthBonus.getUser()!=null){ -// if(i.get("resourceId").equals(attend4MonthBonus.getUser())){ -// double[] qq={0.0}; -// c.stream().forEach(j->{ -// // 累加各种请假天数 -// qq[0]+=Double.parseDouble(i.get(j)); -// }); -// String s = i.get("resourceId") +"-"+ sdf2.format(attend4MonthBonus.getEndDate()); -// qqDays.put(s,qq[0]); -// } -// }else{ -// double[] qq={0.0}; -// c.stream().forEach(j->{ -// // 累加各种请假天数 -// qq[0]+=Double.parseDouble(i.get(j)); -// }); -// String s = i.get("resourceId") +"-"+ sdf2.format(attend4MonthBonus.getEndDate()); -// qqDays.put(s,qq[0]); -// } -// -// }); - baseBean.writeLog("获取的考勤缺勤天数,{}", JSONUtils.toJSONString(qqDays)); + String[] gwhgS= {""}; + dataList.stream().forEach(i->{ + double[] qq={0.0}; + c.stream().forEach(j->{ + // 累加各种请假天数 + qq[0]+=Double.parseDouble(i.get(j)); + }); + String qqStr = i.get("resourceId") +"-qq"; + qqDays.put(qqStr,qq[0]); + String gwhgStr = i.get("resourceId") + "-gwhg"; + if(!gwhgDataIndex[0].equals("")){ + gwhgS[0] = i.get(gwhgDataIndex[0]); + }else { + gwhgS[0] ="0"; + } + qqDays.put(gwhgStr,Double.valueOf(gwhgS[0])); + }); + baseBean.writeLog("获取的考勤缺勤及公务回国天数,{}", JSONUtils.toJSONString(qqDays)); return qqDays; } catch (Exception e) { baseBean.writeLog("获取考勤数据失败{}", e); diff --git a/src/com/engine/bjcj220907/service/impl/OverseasAllowanceCountServiceImpl.java b/src/com/engine/bjcj220907/service/impl/OverseasAllowanceCountServiceImpl.java index 698e5ef..678d6c9 100644 --- a/src/com/engine/bjcj220907/service/impl/OverseasAllowanceCountServiceImpl.java +++ b/src/com/engine/bjcj220907/service/impl/OverseasAllowanceCountServiceImpl.java @@ -45,29 +45,35 @@ public class OverseasAllowanceCountServiceImpl extends Service implements Overse // 境外津贴包含:境外津贴(天标准)+境外工龄补贴(月标准)+艰苦地区补贴(天标准) // 获取境外津贴(天标准) --计算当月应常驻天数 // 获取所有人的境外常驻信息 - List czInfos = getMonthBonusDAO().getCZInfo(); + List czInfos = getOverseasAllowanceDAO().getCZInfo(); baseBean.writeLog("获取所有人的境外常驻信息,共:"+czInfos.size()); - // 将境外常驻信息格式化 - List jwCZInfos = MonthBonusCountServiceImpl.formatJwCZInfo(czInfos); - baseBean.writeLog("将境外常驻信息格式化"); // 考勤开始日期 Calendar startAttendanceCal = BjcjCommonUtils.getStartAttendanceCal(countCal.getTime()); // 考勤结束日期 Calendar endAttendanceCal = BjcjCommonUtils.getEndAttendanceCal(countCal.getTime()); baseBean.writeLog("考勤开始日期:"+startAttendanceCal.getTime()+",考勤结束日期:"+endAttendanceCal); + // 将境外常驻信息格式化 + List jwCZInfos = formatJwCZInfo(czInfos,startAttendanceCal,endAttendanceCal); + baseBean.writeLog("将境外常驻信息格式化"); // 如果用户在考勤周期内存在境外常驻信息则过滤出来,并且计算当月应常驻天数 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(users,startAttendanceCal); - baseBean.writeLog("获取所有员工考勤所属月的薪酬等级及所对应的境外津贴标准:"+usersXSDJ.size()); - // 封装薪酬等级、境外津贴标准 - getXcdjAndJwjtbz(results,usersXSDJ); - // 获取公务回国天数 及 公务回国工作日天数 + baseBean.writeLog("获取所有员工考勤所属月的薪酬等级及所对应的境外津贴标准,共:"+usersXSDJ.size()); + // 获取公务回国天数 及 缺勤天数 Attend4MonthBonus build = Attend4MonthBonus.builder().beginDate(startAttendanceCal.getTime()).endDate(endAttendanceCal.getTime()).build(); - GetKQ4OverseasAllowanceCountService().getKQDatas(build); - baseBean.writeLog("调用考勤接口获取公务回国天数 及 公务回国工作日天数"+usersXSDJ.size()); + Map kqDatas = GetKQ4OverseasAllowanceCountService().getKQDatas(build); + 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 { // 开始常驻日期在 考勤开始日期前(应出勤日期为自然日) int days = BjcjCommonUtils.getDays(startAttendanceCal.getTime(), endAttendanceCal.getTime()); -// czInfo.setYczDays(days); - JWJT build = JWJT.builder().user(czInfo.getXm()).jwycq(days).gngzts(0.0).build(); + JWJT build = JWJT.builder().user(czInfo.getXm()).jwycq(days).gngzts(0.0).kqMonth(endAttendanceCal.getTime()).build(); results.add(build); return true; } @@ -144,7 +149,7 @@ public class OverseasAllowanceCountServiceImpl extends Service implements Overse 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); return true; } @@ -154,17 +159,47 @@ public class OverseasAllowanceCountServiceImpl extends Service implements Overse return results; } - /*** - * @description 将获取到的薪酬等级与境外津贴标准与人员对应 + /** + * @description 将获取到的缺勤天数(请假)、公务回国天数、薪酬等级与境外津贴标准与人员对应并计算出实出勤天数 * @return void * @author Harryxzy * @date 2022/9/27 15:37 */ - public void getXcdjAndJwjtbz(List results ,Map usersXSDJ){ + public void getXcdjAndJwjtbz(List results ,Map usersXSDJ,Map kqDatas){ results.stream().forEach(item-> { XcdjJwjtParam param = usersXSDJ.get(Integer.valueOf(item.getUser())); item.setXcdj(param.getXcdj()); 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 formatJwCZInfo(List czInfos,Calendar startAttendanceCal,Calendar endAttendanceCal) { + Map> groupByName = czInfos.stream().collect(Collectors.groupingBy(item -> item.getXm())); + int days = BjcjCommonUtils.getDays(startAttendanceCal.getTime(), endAttendanceCal.getTime()); + List formatJwCZInfos = new ArrayList<>(); + for (Map.Entry> entry : groupByName.entrySet()) { + List 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; + } }