bjcj-调整考勤

This commit is contained in:
Harryxzy 2023-02-07 11:30:46 +08:00
parent 8cec2b35bf
commit d98138653b
13 changed files with 292 additions and 123 deletions

View File

@ -33,7 +33,7 @@ public class AbroadBusinessDAO {
public List<AbroadBusiness> getList(){
RecordSet rs = new RecordSet();
ArrayList<AbroadBusiness> abroadBusinesses = new ArrayList<AbroadBusiness>();
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);

View File

@ -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<DepartureInfo> getDepartureInfo(Date bonusSendMonth) {
RecordSet rs = new RecordSet();
ArrayList<DepartureInfo> 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<DepartureInfo> getHaveSendDepartureInfo() {
RecordSet rs = new RecordSet();
ArrayList<DepartureInfo> 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<DepartureInfo>
* @author Harryxzy
* @date 2023/02/05 10:47
*/
public List<DepartureInfo> getRybsInfo() {
RecordSet rs = new RecordSet();
ArrayList<DepartureInfo> 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

View File

@ -50,4 +50,9 @@ public class AbroadBusiness {
*/
private String lcbh;
/**
* 计算工龄天数
*/
private Double jsglts;
}

View File

@ -37,4 +37,9 @@ public class AbroadBusinessDetail {
*/
private String lcbh;
/**
* 计算工龄天数
*/
private Double jsglts;
}

View File

@ -102,6 +102,16 @@ public class AbroadBusinessResult {
*/
private double jkdqbtje;
/**
* 计算工龄天数
*/
private Double jsglts;
/**
* 计算工龄年份
*/
private Integer jsglnf;
}

View File

@ -26,4 +26,19 @@ public class DepartureInfo {
* 离职日期
*/
private Date lzrq;
/**
* 入职日期
*/
private Date rzrq;
/**
* 入职缺勤天数
*/
private Integer rzqqts;
/**
* 离职缺勤天数
*/
private Integer lzqqts;
}

View File

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

View File

@ -62,7 +62,7 @@ public class GetKQ4MonthBonusServiceImpl extends Service implements GetKQ4MonthB
List<Map> children =(List<Map>) 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"));
}
});

View File

@ -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+"缺勤");

View File

@ -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<Integer> haveSendDepartureInfo = getMonthBonusDAO().getHaveSendDepartureInfo().stream().map(i->i.getXm()).collect(Collectors.toList());
baseBean.writeLog("获取已经离职并且已经发放过绩效的人员信息"+haveSendDepartureInfo+" 共:"+haveSendDepartureInfo.size());
baseBean.writeLog("获取已经离职并且已经发放过绩效的人员信息 共:"+haveSendDepartureInfo.size());
// 获取所有人的入职日期离职日期其他缺勤天数
List<DepartureInfo> rybsInfo = getMonthBonusDAO().getRybsInfo();
baseBean.writeLog("获取所有人的入职日期、离职日期、其他缺勤天数"+rybsInfo);
Map<Integer,DepartureInfo> rybsInfoMap = SalaryEntityUtil.convert2Map(rybsInfo, DepartureInfo::getXm);
// 入职日期小于绩效所属月的不核算绩效
rybsInfo.stream().forEach(info -> {
if(BjcjCommonUtils.isBeforeMonth(param.getBonusMonth(),info.getRzrq())){
haveSendDepartureInfo.add(info.getXm());
}
});
// 获取所有人的绩效等级 --> 绩效系数
List<CountMonthBonus> 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<Integer, Date> 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<Integer, Date> 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);

View File

@ -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<JWJT> results ,Map<Integer, XcdjJwjtParam> usersXSDJ,Map<String, Object> kqDatas,Map<Integer, Integer> validGwhgAndCountWorkdays,List<JwCZInfo> jwCZInfos){
Map<String, List<JwCZInfoDetail>> 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<String, List<JwCZInfoDetail>> 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<Date> qqDate =(List <Date>) kqDatas.get(item.getUser() + "-qq");
double gnQqDays=0.0;
double jwQqDays=0.0;
// 判断是境内缺勤还是境外缺勤
List<JwCZInfoDetail> jwCZInfoDetails = czInfos.get(item.getUser());
if(jwCZInfoDetails != null && jwCZInfoDetails.size()>0){
for(Date d : qqDate){
Boolean flag = false;
for(int i=0; (i<jwCZInfoDetails.size() && flag == false) ;i++){
JwCZInfoDetail detail = jwCZInfoDetails.get(i);
// 方案二不考虑公务回国工作日天数 四项补贴合计天标准按照四项补贴合计÷境外应常驻天数+国内应出勤天数
if(param != null && !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<Date> qqDate =(List <Date>) kqDatas.get(item.getUser() + "-qq");
double gnQqDays=0.0;
double jwQqDays=0.0;
// 判断是境内缺勤还是境外缺勤
List<JwCZInfoDetail> jwCZInfoDetails = czInfos.get(item.getUser());
if(jwCZInfoDetails != null && jwCZInfoDetails.size()>0){
for(Date d : qqDate){
Boolean flag = false;
for(int i=0; (i<jwCZInfoDetails.size() && flag == false) ;i++){
JwCZInfoDetail detail = jwCZInfoDetails.get(i);
// Calendar k = Calendar.getInstance();
// k.setTime(detail.getJwczksrq());
// setLastMinute(k);
// detail.setJwczksrq(k.getTime());
if(detail.getJwczjsrq() != null){
Calendar j = Calendar.getInstance();
j.setTime(detail.getJwczjsrq());
setLastMinute(j);
detail.setJwczjsrq(j.getTime());
}
if(detail.getLx()==0){
// 开始常驻
if(detail.getJwczksrq().before(d) || detail.getJwczksrq().equals(d)){
// 在境外常驻期内的缺勤
jwQqDays++;
flag=true;
if(detail.getJwczjsrq() != null){
Calendar j = Calendar.getInstance();
j.setTime(detail.getJwczjsrq());
setLastMinute(j);
detail.setJwczjsrq(j.getTime());
}
}else {
// 结束常驻
if(detail.getJwczjsrq().before(d)){
// 境外常驻结束日期在缺勤日前
if(detail.getLx()==0){
// 开始常驻
if(detail.getJwczksrq().before(d) || detail.getJwczksrq().equals(d)){
// 在境外常驻期内的缺勤
jwQqDays++;
flag=true;
}
}else {
// 结束常驻
if(detail.getJwczjsrq().before(d)){
// 境外常驻结束日期在缺勤日前
gnQqDays++;
flag=true;
}
if(BjcjCommonUtils.isBetween(d,detail.getJwczksrq(),detail.getJwczjsrq())){
// 在境外常驻期内的缺勤
jwQqDays++;
flag=true;
}
}
if( (i+1 == jwCZInfoDetails.size()) && (flag == false)){
gnQqDays++;
flag=true;
}
if(BjcjCommonUtils.isBetween(d,detail.getJwczksrq(),detail.getJwczjsrq())){
// 在境外常驻期内的缺勤
jwQqDays++;
flag=true;
}
}
if( (i+1 == jwCZInfoDetails.size()) && (flag == false)){
gnQqDays++;
}
}
}
item.setGnQq(gnQqDays);
item.setJwQq(jwQqDays);
item.setGwhg((Double) kqDatas.get(item.getUser()+"-gwhg"));
item.setGwhgWorkdays((Double) kqDatas.get(item.getUser()+"-gwhg"));
}
item.setGnQq(gnQqDays);
item.setJwQq(jwQqDays);
item.setGwhg((Double) kqDatas.get(item.getUser()+"-gwhg"));
item.setGwhgWorkdays((Double) kqDatas.get(item.getUser()+"-gwhg"));
}
item.setJwscq(item.getJwycq()-item.getJwQq()-item.getGwhg());
item.setGnscq(item.getGngzts() - item.getGnQq());
item.setJwjt(item.getJwscq()*item.getJwjtbz());
// 方案二不考虑公务回国工作日
item.setJwscq(item.getJwycq()-item.getJwQq()-item.getGwhg());
item.setGnscq(item.getGngzts() - item.getGnQq());
item.setJwjt(item.getJwscq()*item.getJwjtbz());
// 方案二不考虑公务回国工作日
// if(validGwhgAndCountWorkdays.containsKey(Integer.valueOf(item.getUser()))){
// // 该员工有公务回国数据
// Integer workDays = validGwhgAndCountWorkdays.get(Integer.valueOf(item.getUser()));
// item.setGwhgWorkdays(workDays);
// }
});
});
}catch (Exception e){
baseBean.writeLog("eeeeeeeeeeeeeeee");
baseBean.writeLog(e);
}
}
private void setLastMinute(Calendar c){

View File

@ -1,5 +1,6 @@
package com.engine.bjcj220907.utils;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
@ -93,4 +94,45 @@ public class BjcjCommonUtils {
}
return false;
}
public static boolean isBeforeMonth(Date a,Date b){
try {
if(a == null || b == null){
return false;
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd");
Date formatA = sdf.parse(sdf2.format(a));
Date formatB = sdf.parse(sdf2.format(b));
if( formatA.before(formatB) ){
return true;
}
return false;
}catch (Exception e){
}
return false;
}
public static boolean isEqualsMonth(Date a,Date b){
try {
if(a == null || b == null){
return false;
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd");
Date formatA = sdf.parse(sdf2.format(a));
Date formatB = sdf.parse(sdf2.format(b));
if( formatA.equals(formatB) ){
return true;
}
return false;
}catch (Exception e){
}
return false;
}
}

View File

@ -7,10 +7,10 @@
<map>
<entry key="com.zeroturnaround.jrebel.FormatVersion" value="7.0.0" />
<entry key="jrebelEnabled" value="true" />
<entry key="lastExternalPluginCheckTime" value="1672968433903" />
<entry key="lastExternalPluginCheckTime" value="1675584210944" />
</map>
</option>
<option name="version" value="11" />
<option name="version" value="13" />
</configuration>
</facet>
</component>