diff --git a/src/com/engine/bjcj220907/dao/AbroadBusinessDAO.java b/src/com/engine/bjcj220907/dao/AbroadBusinessDAO.java index 095fe1c..0802c19 100644 --- a/src/com/engine/bjcj220907/dao/AbroadBusinessDAO.java +++ b/src/com/engine/bjcj220907/dao/AbroadBusinessDAO.java @@ -33,7 +33,7 @@ public class AbroadBusinessDAO { public List getList(){ RecordSet rs = new RecordSet(); ArrayList abroadBusinesses = new ArrayList(); - String sql ="select DISTINCT XM,JWGZKSRQ,JWGZJSRQ,JWGZDW1,lcbh from uf_njjmb_dt1 t LEFT JOIN uf_njjmb m on t.MAINID=m.id WHERE lx='"+ AbroadBusinessCountConstant.ABROADBUSINESS_LX +"'order by JWGZKSRQ ASC"; + String sql ="select DISTINCT XM,JWGZKSRQ,JWGZJSRQ,JWGZDW1,lcbh,jsglts from uf_njjmb_dt1 t LEFT JOIN uf_njjmb m on t.MAINID=m.id WHERE lx='"+ AbroadBusinessCountConstant.ABROADBUSINESS_LX +"'order by JWGZKSRQ ASC"; rs.execute(sql); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); while (rs.next()){ @@ -46,6 +46,7 @@ public class AbroadBusinessDAO { .jwgzkssj(startDate) .jwgzjssj(endDate) .lcbh(rs.getString("lcbh")) + .jsglts(rs.getDouble("JSGLTS")) .build(); abroadBusinesses.add(build); } catch (ParseException e) { @@ -133,10 +134,10 @@ public class AbroadBusinessDAO { String ccMonth = sdf2.format(result.getMonth()); double JWJTJE = result.getJwjtbz() * result.getAbroadAllowanceDays(); double DQCCBTJE = result.getCcbtbz() * result.getBasicAllowanceDays(); - String sql ="insert into UF_JWCCTS(formmodeid,modedatacreater,modedatacreatertype,modedatacreatedate,modedatacreatetime,XM,GJ,XD,XCDJ,CCYF,CCBTBZ,JWJTBZ,CCBTTS,JWJTTS,JWCCTS,FFYF,JWJTJE,DQCCBTJE,jkdqbtje,CCBTHJ)" + + String sql ="insert into UF_JWCCTS(formmodeid,modedatacreater,modedatacreatertype,modedatacreatedate,modedatacreatetime,XM,GJ,XD,XCDJ,CCYF,CCBTBZ,JWJTBZ,CCBTTS,JWJTTS,JWCCTS,FFYF,JWJTJE,DQCCBTJE,jkdqbtje,CCBTHJ,GL)" + "values('"+fieldValue+"','1','0','"+currDate+"','"+currTime+"',"+result.getUser()+",'"+result.getGj()+"','"+result.getXd()+"','"+result.getXcdj()+"','" +ccMonth+"',"+result.getCcbtbz()+"," +result.getJwjtbz()+","+result.getBasicAllowanceDays()+","+result.getAbroadAllowanceDays()+","+result.getTotalDays()+",'"+sendMonth+"',"+ - JWJTJE+","+DQCCBTJE+","+result.getJkdqbtje()+","+(JWJTJE+DQCCBTJE+result.getJkdqbtje())+")"; + JWJTJE+","+DQCCBTJE+","+result.getJkdqbtje()+","+(JWJTJE+DQCCBTJE+result.getJkdqbtje())+" , " + result.getJsglnf() + ")"; rs.execute(sql); String sql2 ="select max(id) as id from UF_JWCCTS"; rs.execute(sql2); diff --git a/src/com/engine/bjcj220907/dao/MonthBonusDAO.java b/src/com/engine/bjcj220907/dao/MonthBonusDAO.java index 2c02e0b..fd8f9d4 100644 --- a/src/com/engine/bjcj220907/dao/MonthBonusDAO.java +++ b/src/com/engine/bjcj220907/dao/MonthBonusDAO.java @@ -4,6 +4,7 @@ import com.engine.bjcj220907.entity.CountMonthBonus; import com.engine.bjcj220907.entity.CountMonthBonusParam; import com.engine.bjcj220907.entity.DepartureInfo; import com.engine.bjcj220907.entity.JwCZInfoDetail; +import org.apache.commons.lang3.StringUtils; import weaver.conn.RecordSet; import weaver.conn.RecordSetTrans; import weaver.formmode.setup.ModeRightInfo; @@ -348,12 +349,12 @@ public class MonthBonusDAO { public List getDepartureInfo(Date bonusSendMonth) { RecordSet rs = new RecordSet(); ArrayList departure = new ArrayList<>(); - String sql="select xm,lzrq from uf_rybs where ryzt=4 and (sfyjhsjx=0 or sfyjhsjx is null)"; + String sql="select xm,lzrq from uf_rybs where lz=0 and (sfyjhsjx=0 or sfyjhsjx is null)"; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); rs.execute(sql); while (rs.next()){ try { - Date lzrq = sdf.parse(rs.getString("lzrq")); +// Date lzrq = sdf.parse(rs.getString("lzrq")); DepartureInfo build = DepartureInfo.builder().xm(rs.getInt("xm")).lzrq(sdf.parse(rs.getString("LZRQ"))).build(); departure.add(build); } catch (ParseException e) { @@ -372,7 +373,7 @@ public class MonthBonusDAO { public List getHaveSendDepartureInfo() { RecordSet rs = new RecordSet(); ArrayList departure = new ArrayList<>(); - String sql="select xm,lzrq from uf_rybs where ryzt=4 and sfyjhsjx=1"; + String sql="select xm,lzrq from uf_rybs where lz=0 and sfyjhsjx=1"; rs.execute(sql); while (rs.next()){ DepartureInfo build = DepartureInfo.builder().xm(rs.getInt("xm")).build(); @@ -381,6 +382,41 @@ public class MonthBonusDAO { return departure; } + /*** + * @description 获取所有人的入职日期、离职日期、其他缺勤天数 + * @return List + * @author Harryxzy + * @date 2023/02/05 10:47 + */ + public List getRybsInfo() { + RecordSet rs = new RecordSet(); + ArrayList departure = new ArrayList<>(); + String sql="select xm,lzrq,rzrq,rzqqts,lzqqts from uf_rybs where sfyjhsjx!=1 or sfyjhsjx is null"; + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + rs.execute(sql); + while (rs.next()){ + try { + String lzrqStr = rs.getString("LZRQ"); + String rzrqStr = rs.getString("RZRQ"); + Date rzrq = null; + Date lzrq = null; + if(StringUtils.isNotEmpty(rzrqStr)){ + rzrq = sdf.parse(rzrqStr); + } + if(StringUtils.isNotEmpty(lzrqStr)){ + lzrq = sdf.parse(lzrqStr); + } + int rzqqts = rs.getInt("rzqqts") == -1 ? 0 : rs.getInt("rzqqts"); + int lzqqts = rs.getInt("lzqqts") == -1 ? 0 : rs.getInt("lzqqts"); + DepartureInfo build = DepartureInfo.builder().xm(rs.getInt("xm")).lzrq(lzrq).rzrq(rzrq).rzqqts(rzqqts ).lzqqts(lzqqts).build(); + departure.add(build); + }catch (ParseException e) { + baseBean.writeLog("所有人的入职日期、离职日期、其他缺勤天数 日期格式化错误"); + } + } + return departure; + } + /*** * @description 获取绩效日期的ID * @return Integer diff --git a/src/com/engine/bjcj220907/entity/AbroadBusiness.java b/src/com/engine/bjcj220907/entity/AbroadBusiness.java index 42fe55d..e8adf1b 100644 --- a/src/com/engine/bjcj220907/entity/AbroadBusiness.java +++ b/src/com/engine/bjcj220907/entity/AbroadBusiness.java @@ -50,4 +50,9 @@ public class AbroadBusiness { */ private String lcbh; + /** + * 计算工龄天数 + */ + private Double jsglts; + } diff --git a/src/com/engine/bjcj220907/entity/AbroadBusinessDetail.java b/src/com/engine/bjcj220907/entity/AbroadBusinessDetail.java index ee0b998..2f05aee 100644 --- a/src/com/engine/bjcj220907/entity/AbroadBusinessDetail.java +++ b/src/com/engine/bjcj220907/entity/AbroadBusinessDetail.java @@ -37,4 +37,9 @@ public class AbroadBusinessDetail { */ private String lcbh; + /** + * 计算工龄天数 + */ + private Double jsglts; + } diff --git a/src/com/engine/bjcj220907/entity/AbroadBusinessResult.java b/src/com/engine/bjcj220907/entity/AbroadBusinessResult.java index 34bd641..d7e83ac 100644 --- a/src/com/engine/bjcj220907/entity/AbroadBusinessResult.java +++ b/src/com/engine/bjcj220907/entity/AbroadBusinessResult.java @@ -102,6 +102,16 @@ public class AbroadBusinessResult { */ private double jkdqbtje; + /** + * 计算工龄天数 + */ + private Double jsglts; + + /** + * 计算工龄年份 + */ + private Integer jsglnf; + } diff --git a/src/com/engine/bjcj220907/entity/DepartureInfo.java b/src/com/engine/bjcj220907/entity/DepartureInfo.java index 4353655..eb6355a 100644 --- a/src/com/engine/bjcj220907/entity/DepartureInfo.java +++ b/src/com/engine/bjcj220907/entity/DepartureInfo.java @@ -26,4 +26,19 @@ public class DepartureInfo { * 离职日期 */ private Date lzrq; + + /** + * 入职日期 + */ + private Date rzrq; + + /** + * 入职缺勤天数 + */ + private Integer rzqqts; + + /** + * 离职缺勤天数 + */ + private Integer lzqqts; } diff --git a/src/com/engine/bjcj220907/service/impl/AbroadBusinessCountServiceImpl.java b/src/com/engine/bjcj220907/service/impl/AbroadBusinessCountServiceImpl.java index 80540c1..9a3a6da 100644 --- a/src/com/engine/bjcj220907/service/impl/AbroadBusinessCountServiceImpl.java +++ b/src/com/engine/bjcj220907/service/impl/AbroadBusinessCountServiceImpl.java @@ -59,11 +59,11 @@ public class AbroadBusinessCountServiceImpl extends Service implements AbroadBus tempEnd.set(Calendar.MILLISECOND, 0); tempEnd.add(Calendar.DATE, 1); while (tempStart.before(tempEnd)) { - abroadBusinessDetails.add(AbroadBusinessDetail.builder().xm(business.getUser()).date(tempStart.getTime()).jwgzdw(business.getJwgzdw()).lcbh(business.getLcbh()).build()); + abroadBusinessDetails.add(AbroadBusinessDetail.builder().xm(business.getUser()).date(tempStart.getTime()).jwgzdw(business.getJwgzdw()).lcbh(business.getLcbh()).jsglts(business.getJsglts()).build()); tempStart.add(Calendar.DAY_OF_YEAR, 1); } } - baseBean.writeLog("将所有出差记录转换为明细完成共"+abroadBusinesses.size()+"条明细"); + baseBean.writeLog("将所有出差记录转换为明细完成共"+abroadBusinessDetails.size()+"条明细"); // 查询月份的年月(当月的28号11:59:59) Calendar searchCal = Calendar.getInstance(); searchCal.setTime(param.getMonth()); @@ -220,7 +220,7 @@ public class AbroadBusinessCountServiceImpl extends Service implements AbroadBus } AbroadBusinessResult build = AbroadBusinessResult.builder().user(detail.get(0).getXm()).basicAllowanceDays(thisMonthCount).abroadAllowanceDays(thisMonthAbroadCount).totalDays(thisMonthCount + thisMonthAbroadCount) - .month(param.getMonth()).sendMonth(sendMonth.getTime()).build(); + .month(param.getMonth()).sendMonth(sendMonth.getTime()).jsglts(detail.get(0).getJsglts()).build(); // 处理艰苦地区补助 handleJkdqbt(build, searchMonthDetails, jkdqbtDates); results.add(build); @@ -231,7 +231,7 @@ public class AbroadBusinessCountServiceImpl extends Service implements AbroadBus getAbroadBusinessDAO().getJobInfo(result); return result; }).collect(Collectors.toList()); - baseBean.writeLog("开始获取并计算艰苦地区补助"); + baseBean.writeLog("开始获取并计算艰苦地区补助,并计算境外工龄年份"); getDqBonus(results); // 计算结果插入建模表中 baseBean.writeLog("计算结果插入建模表中"+results); @@ -239,6 +239,7 @@ public class AbroadBusinessCountServiceImpl extends Service implements AbroadBus return "success"; } + /** * @description 开始获取并计算艰苦地区补助 * @return void @@ -258,6 +259,15 @@ public class AbroadBusinessCountServiceImpl extends Service implements AbroadBus jkdqbtje[0] += jkdq.getJkdqbt(); }); result.setJkdqbtje(jkdqbtje[0]); + // 处理境外工龄 + int jwgl; + if(result.getJsglts() == null || Objects.equals(result.getJsglts(),-1) ){ + jwgl = 0; + }else{ + jwgl = (int)Math.floor(result.getJsglts() / 365); + jwgl = jwgl < 0 ? 0 : jwgl; + } + result.setJsglnf(jwgl); }); } diff --git a/src/com/engine/bjcj220907/service/impl/GetKQ4MonthBonusServiceImpl.java b/src/com/engine/bjcj220907/service/impl/GetKQ4MonthBonusServiceImpl.java index 162e908..88c1b99 100644 --- a/src/com/engine/bjcj220907/service/impl/GetKQ4MonthBonusServiceImpl.java +++ b/src/com/engine/bjcj220907/service/impl/GetKQ4MonthBonusServiceImpl.java @@ -62,7 +62,7 @@ public class GetKQ4MonthBonusServiceImpl extends Service implements GetKQ4MonthB 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("隔离假")) - && (!i.get("title").equals("境外出差")) && (!i.get("title").equals("境内出差")) && (!i.get("title").equals("第三国出差/境外国内出差")) && (!i.get("title").equals("公务回国")) ){ + && (!i.get("title").equals("境外出差")) && (!i.get("title").equals("境内出差")) && (!i.get("title").equals("第三国出差/境外国内出差")) && (!i.get("title").equals("公务回国")) && (!i.get("title").equals("路程假")) ){ c.add(i.get("dataIndex")); } }); diff --git a/src/com/engine/bjcj220907/service/impl/GetKQ4OverseasAllowanceCountServiceImpl.java b/src/com/engine/bjcj220907/service/impl/GetKQ4OverseasAllowanceCountServiceImpl.java index 9ec46dc..32eee6b 100644 --- a/src/com/engine/bjcj220907/service/impl/GetKQ4OverseasAllowanceCountServiceImpl.java +++ b/src/com/engine/bjcj220907/service/impl/GetKQ4OverseasAllowanceCountServiceImpl.java @@ -95,7 +95,7 @@ public class GetKQ4OverseasAllowanceCountServiceImpl extends Service implements // baseBean.writeLog("考勤数据:"+o+"转换为Map失败"); attCal="休息"; } - if( (attCal.contains("旷工")) || ( (!attCal.equals("√")) && (!attCal.contains("休息")) && (!attCal.equals("")) && (!attCal.contains("境内年假")) && (!attCal.contains("境外年假")) && (!attCal.contains("公务回国")) && (!attCal.contains("工伤")) && (!attCal.contains("奖励假")) && (!attCal.contains("第三国出差/境外国内出差")) ) ){ + if( (attCal.contains("旷工")) || ( (!attCal.equals("√")) && (!attCal.contains("休息")) && (!attCal.equals("")) && (!attCal.contains("境内年假")) && (!attCal.contains("境外年假")) && (!attCal.contains("公务回国")) && (!attCal.contains("工伤")) && (!attCal.contains("奖励假")) && (!attCal.contains("第三国出差/境外国内出差")) && (!attCal.contains("路程假")) ) ){ // 存在缺勤 qqDate.add(a); // baseBean.writeLog(attCal+"缺勤"); diff --git a/src/com/engine/bjcj220907/service/impl/MonthBonusCountServiceImpl.java b/src/com/engine/bjcj220907/service/impl/MonthBonusCountServiceImpl.java index 6ffaead..81f5efe 100644 --- a/src/com/engine/bjcj220907/service/impl/MonthBonusCountServiceImpl.java +++ b/src/com/engine/bjcj220907/service/impl/MonthBonusCountServiceImpl.java @@ -7,6 +7,7 @@ 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 com.engine.salary.util.SalaryEntityUtil; import weaver.general.BaseBean; import java.text.SimpleDateFormat; @@ -46,10 +47,20 @@ public class MonthBonusCountServiceImpl extends Service implements MonthBonusCou bonusCal.setTime(bonusMonth); int bonusYear = bonusCal.get(Calendar.YEAR); int bonusSeason =bonusCal.get(Calendar.MONTH)/3+1; - // 获取已经tr并且已经发放过绩效的人员信息 + // 获取已经离职并且已经发放过绩效的人员信息 baseBean.writeLog("获取已经离职并且已经发放过绩效的人员信息"); List haveSendDepartureInfo = getMonthBonusDAO().getHaveSendDepartureInfo().stream().map(i->i.getXm()).collect(Collectors.toList()); - baseBean.writeLog("获取已经离职并且已经发放过绩效的人员信息"+haveSendDepartureInfo+" 共:"+haveSendDepartureInfo.size()); + baseBean.writeLog("获取已经离职并且已经发放过绩效的人员信息 共:"+haveSendDepartureInfo.size()); + // 获取所有人的入职日期、离职日期、其他缺勤天数 + List rybsInfo = getMonthBonusDAO().getRybsInfo(); + baseBean.writeLog("获取所有人的入职日期、离职日期、其他缺勤天数"+rybsInfo); + Map rybsInfoMap = SalaryEntityUtil.convert2Map(rybsInfo, DepartureInfo::getXm); + // 入职日期小于绩效所属月的不核算绩效 + rybsInfo.stream().forEach(info -> { + if(BjcjCommonUtils.isBeforeMonth(param.getBonusMonth(),info.getRzrq())){ + haveSendDepartureInfo.add(info.getXm()); + } + }); // 获取所有人的绩效等级 --> 绩效系数 List result = getMonthBonusDAO().getJXInfo(bonusSendMonth,bonusMonth,bonusYear,bonusSeason,haveSendDepartureInfo); baseBean.writeLog("获取所有人的绩效等级、绩效系数等信息,共计:"+result.size()); @@ -64,6 +75,10 @@ public class MonthBonusCountServiceImpl extends Service implements MonthBonusCou Calendar countCal = Calendar.getInstance(); countCal.setTime(bonusMonth); countCal.add(Calendar.MONTH,1); + // 核算月在员工入职日期前 + if(rybsInfoMap.get(info.getXm()) != null && BjcjCommonUtils.isBeforeMonth(countCal.getTime(),rybsInfoMap.get(info.getXm()).getRzrq())){ + continue; + } while (countCal.getTime().before(info.getLzrq()) || countCal.getTime().equals(info.getLzrq())){ int year = countCal.get(Calendar.YEAR); int season =countCal.get(Calendar.MONTH)/3+1; @@ -111,6 +126,7 @@ public class MonthBonusCountServiceImpl extends Service implements MonthBonusCou // 计算考勤月内的月度绩效信息 baseBean.writeLog("计算考勤月内的月度绩效信息"); result = result.stream().map(item -> { + DepartureInfo userInfo = rybsInfoMap.get(new Integer(item.getXm())); if(!jwCZUsers.contains(item.getXm())){ // 用户不存在境外常驻信息(全勤21.75) item.setYcq(21.75); @@ -118,6 +134,14 @@ public class MonthBonusCountServiceImpl extends Service implements MonthBonusCou if(qqDatas.containsKey( (item.getXm()+"-"+sdf.format(item.getKqyf())) )){ qq = qqDatas.get((item.getXm()+"-"+sdf.format(item.getKqyf()))); } + // 是否是入职月或离职月 加上其他缺勤天数 + if(userInfo != null && BjcjCommonUtils.isEqualsMonth(userInfo.getRzrq(),item.getKqyf()) ){ + qq = qq + userInfo.getRzqqts(); + } + if(userInfo != null && BjcjCommonUtils.isEqualsMonth(userInfo.getLzrq(),item.getKqyf())){ + qq = qq + userInfo.getLzqqts(); + } + if(qq>21.75){ // 境内员工,并且缺勤天数大于21.75,可能导致负数因此修正缺勤天数为21.75 qq = 21.75; @@ -210,6 +234,13 @@ public class MonthBonusCountServiceImpl extends Service implements MonthBonusCou if(qqDatas.containsKey( (item.getXm()+"-"+sdf.format(item.getKqyf())) )){ qq = qqDatas.get((item.getXm()+"-"+sdf.format(item.getKqyf()))); } + // 是否是入职月或离职月 加上其他缺勤天数 + if(userInfo != null && BjcjCommonUtils.isEqualsMonth(userInfo.getRzrq(),item.getKqyf()) ){ + qq = qq + userInfo.getRzqqts(); + } + if(userInfo != null && BjcjCommonUtils.isEqualsMonth(userInfo.getLzrq(),item.getKqyf())){ + qq = qq + userInfo.getLzqqts(); + } if(ycq[0]==21.75 && qq>21.75){ // 没有境外常驻信息,并且缺勤天数大于21.75,可能导致负数因此修正缺勤天数为21.75 qq = 21.75; @@ -232,47 +263,50 @@ public class MonthBonusCountServiceImpl extends Service implements MonthBonusCou // 处理离职人员离职所在月份的数据 // 将离职信息转为map - baseBean.writeLog("处理离职人员离职所在月份的数据"); - Map map = departureInfo.stream().collect(Collectors.toMap(DepartureInfo::getXm,d->d.getLzrq())); - departureTemp.stream().forEach(i-> { - // 离职日期 - Date date = map.get(Integer.valueOf(i.getXm())); - Date kqyf = i.getKqyf(); - if( date.getMonth() == kqyf.getMonth()){ - // 是离职所在月份,获取离职日期重新计算该月缺勤日期以及绩效 - Calendar deparLastDay = Calendar.getInstance(); - deparLastDay.setTime(date); - deparLastDay.add(Calendar.DATE,1); - Calendar deaprAttendEndDay = BjcjCommonUtils.getEndAttendanceCal(kqyf); - double[] sqq={0.0}; - if(Math.abs(i.getYcq()-21.75) < 0.000000002){ - int[] qq={0}; - Calendar countCal = Calendar.getInstance(); - countCal.setTime(deaprAttendEndDay.getTime()); - // 均为境内,取离职日后一天-考勤最后一天的工作日 - while (deparLastDay.getTime().before(countCal.getTime()) || deparLastDay.getTime().equals(countCal.getTime())){ - if( (countCal.get(Calendar.DAY_OF_WEEK) != 1) && (countCal.get(Calendar.DAY_OF_WEEK)!=7) ){ - qq[0]++; - } - countCal.add(Calendar.DATE,-1); - } - sqq[0] = i.getQq()+qq[0]; - }else{ - // 存在境外,取离职日后一天-考勤最后一天的自然日 - sqq[0] = i.getQq()+BjcjCommonUtils.getDays(deparLastDay.getTime(), deaprAttendEndDay.getTime()); - } - i.setQq(sqq[0]); - // 重新计算1、实出勤天数 =应出勤天数-缺勤天数 2、奖金基数(考勤)= 月度绩效奖金基数-月度绩效基数/满勤*缺勤天数 3、奖金实发放额= 奖金基数(考勤)*个人绩效系数 - double scqTemp =i.getYcq()-sqq[0]; - if (scqTemp<0){ - scqTemp=0.0; - } - i.setScq(scqTemp); - double jjjskq = i.getYdjjjxjs() - i.getYdjjjxjs() / i.getYcq() * sqq[0]; - i.setJjjskq(jjjskq); - i.setYfje(i.getGrjxxs()*jjjskq); - } - }); +// baseBean.writeLog("处理离职人员离职所在月份的数据"); +// Map map = departureInfo.stream().collect(Collectors.toMap(DepartureInfo::getXm,d->d.getLzrq())); +// departureTemp.stream().forEach(i-> { +// // 离职日期 +// Date date = map.get(Integer.valueOf(i.getXm())); +// Date kqyf = i.getKqyf(); +// if( date.getMonth() == kqyf.getMonth()){ +// // 是离职所在月份,获取离职日期重新计算该月缺勤日期以及绩效 +// Calendar deparLastDay = Calendar.getInstance(); +// deparLastDay.setTime(date); +// deparLastDay.add(Calendar.DATE,1); +// Calendar deaprAttendEndDay = BjcjCommonUtils.getEndAttendanceCal(kqyf); +// double[] sqq={0.0}; +// if(Math.abs(i.getYcq()-21.75) < 0.000000002){ +// int[] qq={0}; +// Calendar countCal = Calendar.getInstance(); +// countCal.setTime(deaprAttendEndDay.getTime()); +// // 均为境内,取离职日后一天-考勤最后一天的工作日 +// while (deparLastDay.getTime().before(countCal.getTime()) || deparLastDay.getTime().equals(countCal.getTime())){ +// if( (countCal.get(Calendar.DAY_OF_WEEK) != 1) && (countCal.get(Calendar.DAY_OF_WEEK)!=7) ){ +// qq[0]++; +// } +// countCal.add(Calendar.DATE,-1); +// } +// sqq[0] = i.getQq()+qq[0]; +// }else{ +// // 存在境外,取离职日后一天-考勤最后一天的自然日 +// sqq[0] = i.getQq()+BjcjCommonUtils.getDays(deparLastDay.getTime(), deaprAttendEndDay.getTime()); +// } +// DepartureInfo userRyInfo = rybsInfoMap.get(Integer.valueOf(i.getXm())); +// sqq[0] = i.getQq() + userRyInfo.getQtqqts(); +// +// i.setQq(sqq[0]); +// // 重新计算1、实出勤天数 =应出勤天数-缺勤天数 2、奖金基数(考勤)= 月度绩效奖金基数-月度绩效基数/满勤*缺勤天数 3、奖金实发放额= 奖金基数(考勤)*个人绩效系数 +// double scqTemp =i.getYcq()-sqq[0]; +// if (scqTemp<0){ +// scqTemp=0.0; +// } +// i.setScq(scqTemp); +// double jjjskq = i.getYdjjjxjs() - i.getYdjjjxjs() / i.getYcq() * sqq[0]; +// i.setJjjskq(jjjskq); +// i.setYfje(i.getGrjxxs()*jjjskq); +// } +// }); // 先删除建模中脏数据 getMonthBonusDAO().clear(bonusMonth,bonusSendMonth,haveSendDepartureInfo); baseBean.writeLog("先删除建模中脏数据"+bonusMonth+bonusSendMonth+haveSendDepartureInfo); diff --git a/src/com/engine/bjcj220907/service/impl/OverseasAllowanceCountServiceImpl.java b/src/com/engine/bjcj220907/service/impl/OverseasAllowanceCountServiceImpl.java index 8766936..8ff3258 100644 --- a/src/com/engine/bjcj220907/service/impl/OverseasAllowanceCountServiceImpl.java +++ b/src/com/engine/bjcj220907/service/impl/OverseasAllowanceCountServiceImpl.java @@ -131,7 +131,7 @@ public class OverseasAllowanceCountServiceImpl extends Service implements Overse } } item.setGngzts( item.getGngzts() -gnRestDays ); - baseBean.writeLog(item.getUser() + "休息" + gnRestDays + "天"); +// baseBean.writeLog(item.getUser() + "休息" + gnRestDays + "天"); } }); } @@ -342,89 +342,100 @@ public class OverseasAllowanceCountServiceImpl extends Service implements Overse * @date 2022/9/27 15:37 */ public void getXcdjAndJwjtbz(List results ,Map usersXSDJ,Map kqDatas,Map validGwhgAndCountWorkdays,List jwCZInfos){ - Map> czInfos = jwCZInfos.stream().collect(Collectors.toMap(JwCZInfo::getXm, JwCZInfo::getInfos)); - results.stream().forEach(item-> { - XcdjJwjtParam param = usersXSDJ.get(Integer.valueOf(item.getUser())); - item.setXcdj(param.getXcdj()); - item.setJwjtbz(param.getJwjtbz()); - item.setSxbzhjbz(param.getSxbzhj()); - // 方案一: + try { + Map> czInfos = jwCZInfos.stream().collect(Collectors.toMap(JwCZInfo::getXm, JwCZInfo::getInfos)); + results.stream().forEach(item-> { + XcdjJwjtParam param = usersXSDJ.get(Integer.valueOf(item.getUser())); + if(param != null){ + item.setXcdj(param.getXcdj()); + item.setJwjtbz(param.getJwjtbz()); + item.setSxbzhjbz(param.getSxbzhj()); + }else{ + item.setXcdj(""); + item.setJwjtbz(0.0); + item.setSxbzhjbz(0.0); + } + // 方案一: // item.setSxbzhjrbz(param.getSxbzhj()/21.75); - // 方案二:不考虑公务回国工作日天数 四项补贴合计天标准:按照四项补贴合计÷(境外应常驻天数+国内应出勤天数) - if(!Objects.equals(param.getSxbzhj(),0.0)){ - item.setSxbzhjrbz(param.getSxbzhj() / (item.getJwycq() + item.getGngzts())); - }else { - item.setSxbzhjrbz(0.0); - } - if(kqDatas.get(item.getUser() + "-qq") == null){ - // 目前该员工没有考勤数据 - item.setGnQq(0.0); - item.setJwQq(0.0); - item.setGwhg(0.0); - baseBean.writeLog("员工" +item.getUser()+"没有考勤数据!请核对考勤报表"); - }else{ - List qqDate =(List ) kqDatas.get(item.getUser() + "-qq"); - double gnQqDays=0.0; - double jwQqDays=0.0; - // 判断是境内缺勤还是境外缺勤 - List jwCZInfoDetails = czInfos.get(item.getUser()); - if(jwCZInfoDetails != null && jwCZInfoDetails.size()>0){ - for(Date d : qqDate){ - Boolean flag = false; - for(int i=0; (i qqDate =(List ) kqDatas.get(item.getUser() + "-qq"); + double gnQqDays=0.0; + double jwQqDays=0.0; + // 判断是境内缺勤还是境外缺勤 + List jwCZInfoDetails = czInfos.get(item.getUser()); + if(jwCZInfoDetails != null && jwCZInfoDetails.size()>0){ + for(Date d : qqDate){ + Boolean flag = false; + for(int i=0; (i - + -