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(){ public List<AbroadBusiness> getList(){
RecordSet rs = new RecordSet(); RecordSet rs = new RecordSet();
ArrayList<AbroadBusiness> abroadBusinesses = new ArrayList<AbroadBusiness>(); 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); rs.execute(sql);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
while (rs.next()){ while (rs.next()){
@ -46,6 +46,7 @@ public class AbroadBusinessDAO {
.jwgzkssj(startDate) .jwgzkssj(startDate)
.jwgzjssj(endDate) .jwgzjssj(endDate)
.lcbh(rs.getString("lcbh")) .lcbh(rs.getString("lcbh"))
.jsglts(rs.getDouble("JSGLTS"))
.build(); .build();
abroadBusinesses.add(build); abroadBusinesses.add(build);
} catch (ParseException e) { } catch (ParseException e) {
@ -133,10 +134,10 @@ public class AbroadBusinessDAO {
String ccMonth = sdf2.format(result.getMonth()); String ccMonth = sdf2.format(result.getMonth());
double JWJTJE = result.getJwjtbz() * result.getAbroadAllowanceDays(); double JWJTJE = result.getJwjtbz() * result.getAbroadAllowanceDays();
double DQCCBTJE = result.getCcbtbz() * result.getBasicAllowanceDays(); 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()+"," "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+"',"+ +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); rs.execute(sql);
String sql2 ="select max(id) as id from UF_JWCCTS"; String sql2 ="select max(id) as id from UF_JWCCTS";
rs.execute(sql2); 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.CountMonthBonusParam;
import com.engine.bjcj220907.entity.DepartureInfo; import com.engine.bjcj220907.entity.DepartureInfo;
import com.engine.bjcj220907.entity.JwCZInfoDetail; import com.engine.bjcj220907.entity.JwCZInfoDetail;
import org.apache.commons.lang3.StringUtils;
import weaver.conn.RecordSet; import weaver.conn.RecordSet;
import weaver.conn.RecordSetTrans; import weaver.conn.RecordSetTrans;
import weaver.formmode.setup.ModeRightInfo; import weaver.formmode.setup.ModeRightInfo;
@ -348,12 +349,12 @@ public class MonthBonusDAO {
public List<DepartureInfo> getDepartureInfo(Date bonusSendMonth) { public List<DepartureInfo> getDepartureInfo(Date bonusSendMonth) {
RecordSet rs = new RecordSet(); RecordSet rs = new RecordSet();
ArrayList<DepartureInfo> departure = new ArrayList<>(); 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"); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
rs.execute(sql); rs.execute(sql);
while (rs.next()){ while (rs.next()){
try { 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(); DepartureInfo build = DepartureInfo.builder().xm(rs.getInt("xm")).lzrq(sdf.parse(rs.getString("LZRQ"))).build();
departure.add(build); departure.add(build);
} catch (ParseException e) { } catch (ParseException e) {
@ -372,7 +373,7 @@ public class MonthBonusDAO {
public List<DepartureInfo> getHaveSendDepartureInfo() { public List<DepartureInfo> getHaveSendDepartureInfo() {
RecordSet rs = new RecordSet(); RecordSet rs = new RecordSet();
ArrayList<DepartureInfo> departure = new ArrayList<>(); 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); rs.execute(sql);
while (rs.next()){ while (rs.next()){
DepartureInfo build = DepartureInfo.builder().xm(rs.getInt("xm")).build(); DepartureInfo build = DepartureInfo.builder().xm(rs.getInt("xm")).build();
@ -381,6 +382,41 @@ public class MonthBonusDAO {
return departure; 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 * @description 获取绩效日期的ID
* @return Integer * @return Integer

View File

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

View File

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

View File

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

View File

@ -26,4 +26,19 @@ public class DepartureInfo {
* 离职日期 * 离职日期
*/ */
private Date lzrq; 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.set(Calendar.MILLISECOND, 0);
tempEnd.add(Calendar.DATE, 1); tempEnd.add(Calendar.DATE, 1);
while (tempStart.before(tempEnd)) { 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); tempStart.add(Calendar.DAY_OF_YEAR, 1);
} }
} }
baseBean.writeLog("将所有出差记录转换为明细完成共"+abroadBusinesses.size()+"条明细"); baseBean.writeLog("将所有出差记录转换为明细完成共"+abroadBusinessDetails.size()+"条明细");
// 查询月份的年月当月的28号11:59:59 // 查询月份的年月当月的28号11:59:59
Calendar searchCal = Calendar.getInstance(); Calendar searchCal = Calendar.getInstance();
searchCal.setTime(param.getMonth()); 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) 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); handleJkdqbt(build, searchMonthDetails, jkdqbtDates);
results.add(build); results.add(build);
@ -231,7 +231,7 @@ public class AbroadBusinessCountServiceImpl extends Service implements AbroadBus
getAbroadBusinessDAO().getJobInfo(result); getAbroadBusinessDAO().getJobInfo(result);
return result; return result;
}).collect(Collectors.toList()); }).collect(Collectors.toList());
baseBean.writeLog("开始获取并计算艰苦地区补助"); baseBean.writeLog("开始获取并计算艰苦地区补助,并计算境外工龄年份");
getDqBonus(results); getDqBonus(results);
// 计算结果插入建模表中 // 计算结果插入建模表中
baseBean.writeLog("计算结果插入建模表中"+results); baseBean.writeLog("计算结果插入建模表中"+results);
@ -239,6 +239,7 @@ public class AbroadBusinessCountServiceImpl extends Service implements AbroadBus
return "success"; return "success";
} }
/** /**
* @description 开始获取并计算艰苦地区补助 * @description 开始获取并计算艰苦地区补助
* @return void * @return void
@ -258,6 +259,15 @@ public class AbroadBusinessCountServiceImpl extends Service implements AbroadBus
jkdqbtje[0] += jkdq.getJkdqbt(); jkdqbtje[0] += jkdq.getJkdqbt();
}); });
result.setJkdqbtje(jkdqbtje[0]); 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"); 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("奖励假")) && (!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")); c.add(i.get("dataIndex"));
} }
}); });

View File

@ -95,7 +95,7 @@ public class GetKQ4OverseasAllowanceCountServiceImpl extends Service implements
// baseBean.writeLog("考勤数据:"+o+"转换为Map失败"); // baseBean.writeLog("考勤数据:"+o+"转换为Map失败");
attCal="休息"; 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); qqDate.add(a);
// baseBean.writeLog(attCal+"缺勤"); // baseBean.writeLog(attCal+"缺勤");

View File

@ -7,6 +7,7 @@ import com.engine.bjcj220907.service.MonthBonusCountService;
import com.engine.bjcj220907.utils.BjcjCommonUtils; import com.engine.bjcj220907.utils.BjcjCommonUtils;
import com.engine.common.util.ServiceUtil; import com.engine.common.util.ServiceUtil;
import com.engine.core.impl.Service; import com.engine.core.impl.Service;
import com.engine.salary.util.SalaryEntityUtil;
import weaver.general.BaseBean; import weaver.general.BaseBean;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
@ -46,10 +47,20 @@ public class MonthBonusCountServiceImpl extends Service implements MonthBonusCou
bonusCal.setTime(bonusMonth); bonusCal.setTime(bonusMonth);
int bonusYear = bonusCal.get(Calendar.YEAR); int bonusYear = bonusCal.get(Calendar.YEAR);
int bonusSeason =bonusCal.get(Calendar.MONTH)/3+1; int bonusSeason =bonusCal.get(Calendar.MONTH)/3+1;
// 获取已经tr并且已经发放过绩效的人员信息 // 获取已经离职并且已经发放过绩效的人员信息
baseBean.writeLog("获取已经离职并且已经发放过绩效的人员信息"); baseBean.writeLog("获取已经离职并且已经发放过绩效的人员信息");
List<Integer> haveSendDepartureInfo = getMonthBonusDAO().getHaveSendDepartureInfo().stream().map(i->i.getXm()).collect(Collectors.toList()); 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); List<CountMonthBonus> result = getMonthBonusDAO().getJXInfo(bonusSendMonth,bonusMonth,bonusYear,bonusSeason,haveSendDepartureInfo);
baseBean.writeLog("获取所有人的绩效等级、绩效系数等信息,共计:"+result.size()); baseBean.writeLog("获取所有人的绩效等级、绩效系数等信息,共计:"+result.size());
@ -64,6 +75,10 @@ public class MonthBonusCountServiceImpl extends Service implements MonthBonusCou
Calendar countCal = Calendar.getInstance(); Calendar countCal = Calendar.getInstance();
countCal.setTime(bonusMonth); countCal.setTime(bonusMonth);
countCal.add(Calendar.MONTH,1); 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())){ while (countCal.getTime().before(info.getLzrq()) || countCal.getTime().equals(info.getLzrq())){
int year = countCal.get(Calendar.YEAR); int year = countCal.get(Calendar.YEAR);
int season =countCal.get(Calendar.MONTH)/3+1; int season =countCal.get(Calendar.MONTH)/3+1;
@ -111,6 +126,7 @@ public class MonthBonusCountServiceImpl extends Service implements MonthBonusCou
// 计算考勤月内的月度绩效信息 // 计算考勤月内的月度绩效信息
baseBean.writeLog("计算考勤月内的月度绩效信息"); baseBean.writeLog("计算考勤月内的月度绩效信息");
result = result.stream().map(item -> { result = result.stream().map(item -> {
DepartureInfo userInfo = rybsInfoMap.get(new Integer(item.getXm()));
if(!jwCZUsers.contains(item.getXm())){ if(!jwCZUsers.contains(item.getXm())){
// 用户不存在境外常驻信息全勤21.75 // 用户不存在境外常驻信息全勤21.75
item.setYcq(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())) )){ if(qqDatas.containsKey( (item.getXm()+"-"+sdf.format(item.getKqyf())) )){
qq = qqDatas.get((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){ if(qq>21.75){
// 境内员工并且缺勤天数大于21.75可能导致负数因此修正缺勤天数为21.75 // 境内员工并且缺勤天数大于21.75可能导致负数因此修正缺勤天数为21.75
qq = 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())) )){ if(qqDatas.containsKey( (item.getXm()+"-"+sdf.format(item.getKqyf())) )){
qq = qqDatas.get((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){ if(ycq[0]==21.75 && qq>21.75){
// 没有境外常驻信息并且缺勤天数大于21.75可能导致负数因此修正缺勤天数为21.75 // 没有境外常驻信息并且缺勤天数大于21.75可能导致负数因此修正缺勤天数为21.75
qq = 21.75; qq = 21.75;
@ -232,47 +263,50 @@ public class MonthBonusCountServiceImpl extends Service implements MonthBonusCou
// 处理离职人员离职所在月份的数据 // 处理离职人员离职所在月份的数据
// 将离职信息转为map // 将离职信息转为map
baseBean.writeLog("处理离职人员离职所在月份的数据"); // baseBean.writeLog("处理离职人员离职所在月份的数据");
Map<Integer, Date> map = departureInfo.stream().collect(Collectors.toMap(DepartureInfo::getXm,d->d.getLzrq())); // Map<Integer, Date> map = departureInfo.stream().collect(Collectors.toMap(DepartureInfo::getXm,d->d.getLzrq()));
departureTemp.stream().forEach(i-> { // departureTemp.stream().forEach(i-> {
// 离职日期 // // 离职日期
Date date = map.get(Integer.valueOf(i.getXm())); // Date date = map.get(Integer.valueOf(i.getXm()));
Date kqyf = i.getKqyf(); // Date kqyf = i.getKqyf();
if( date.getMonth() == kqyf.getMonth()){ // if( date.getMonth() == kqyf.getMonth()){
// 是离职所在月份,获取离职日期重新计算该月缺勤日期以及绩效 // // 是离职所在月份,获取离职日期重新计算该月缺勤日期以及绩效
Calendar deparLastDay = Calendar.getInstance(); // Calendar deparLastDay = Calendar.getInstance();
deparLastDay.setTime(date); // deparLastDay.setTime(date);
deparLastDay.add(Calendar.DATE,1); // deparLastDay.add(Calendar.DATE,1);
Calendar deaprAttendEndDay = BjcjCommonUtils.getEndAttendanceCal(kqyf); // Calendar deaprAttendEndDay = BjcjCommonUtils.getEndAttendanceCal(kqyf);
double[] sqq={0.0}; // double[] sqq={0.0};
if(Math.abs(i.getYcq()-21.75) < 0.000000002){ // if(Math.abs(i.getYcq()-21.75) < 0.000000002){
int[] qq={0}; // int[] qq={0};
Calendar countCal = Calendar.getInstance(); // Calendar countCal = Calendar.getInstance();
countCal.setTime(deaprAttendEndDay.getTime()); // countCal.setTime(deaprAttendEndDay.getTime());
// 均为境内取离职日后一天-考勤最后一天的工作日 // // 均为境内取离职日后一天-考勤最后一天的工作日
while (deparLastDay.getTime().before(countCal.getTime()) || deparLastDay.getTime().equals(countCal.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) ){ // if( (countCal.get(Calendar.DAY_OF_WEEK) != 1) && (countCal.get(Calendar.DAY_OF_WEEK)!=7) ){
qq[0]++; // qq[0]++;
} // }
countCal.add(Calendar.DATE,-1); // countCal.add(Calendar.DATE,-1);
} // }
sqq[0] = i.getQq()+qq[0]; // sqq[0] = i.getQq()+qq[0];
}else{ // }else{
// 存在境外取离职日后一天-考勤最后一天的自然日 // // 存在境外取离职日后一天-考勤最后一天的自然日
sqq[0] = i.getQq()+BjcjCommonUtils.getDays(deparLastDay.getTime(), deaprAttendEndDay.getTime()); // sqq[0] = i.getQq()+BjcjCommonUtils.getDays(deparLastDay.getTime(), deaprAttendEndDay.getTime());
} // }
i.setQq(sqq[0]); // DepartureInfo userRyInfo = rybsInfoMap.get(Integer.valueOf(i.getXm()));
// 重新计算1实出勤天数 =应出勤天数-缺勤天数 2奖金基数考勤= 月度绩效奖金基数-月度绩效基数/满勤*缺勤天数 3奖金实发放额= 奖金基数考勤*个人绩效系数 // sqq[0] = i.getQq() + userRyInfo.getQtqqts();
double scqTemp =i.getYcq()-sqq[0]; //
if (scqTemp<0){ // i.setQq(sqq[0]);
scqTemp=0.0; // // 重新计算1实出勤天数 =应出勤天数-缺勤天数 2奖金基数考勤= 月度绩效奖金基数-月度绩效基数/满勤*缺勤天数 3奖金实发放额= 奖金基数考勤*个人绩效系数
} // double scqTemp =i.getYcq()-sqq[0];
i.setScq(scqTemp); // if (scqTemp<0){
double jjjskq = i.getYdjjjxjs() - i.getYdjjjxjs() / i.getYcq() * sqq[0]; // scqTemp=0.0;
i.setJjjskq(jjjskq); // }
i.setYfje(i.getGrjxxs()*jjjskq); // 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); getMonthBonusDAO().clear(bonusMonth,bonusSendMonth,haveSendDepartureInfo);
baseBean.writeLog("先删除建模中脏数据"+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 ); 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 * @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){ 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)); try {
results.stream().forEach(item-> { Map<String, List<JwCZInfoDetail>> czInfos = jwCZInfos.stream().collect(Collectors.toMap(JwCZInfo::getXm, JwCZInfo::getInfos));
XcdjJwjtParam param = usersXSDJ.get(Integer.valueOf(item.getUser())); results.stream().forEach(item-> {
item.setXcdj(param.getXcdj()); XcdjJwjtParam param = usersXSDJ.get(Integer.valueOf(item.getUser()));
item.setJwjtbz(param.getJwjtbz()); if(param != null){
item.setSxbzhjbz(param.getSxbzhj()); 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); // item.setSxbzhjrbz(param.getSxbzhj()/21.75);
// 方案二不考虑公务回国工作日天数 四项补贴合计天标准按照四项补贴合计÷境外应常驻天数+国内应出勤天数 // 方案二不考虑公务回国工作日天数 四项补贴合计天标准按照四项补贴合计÷境外应常驻天数+国内应出勤天数
if(!Objects.equals(param.getSxbzhj(),0.0)){ if(param != null && !Objects.equals(param.getSxbzhj(),0.0)){
item.setSxbzhjrbz(param.getSxbzhj() / (item.getJwycq() + item.getGngzts())); item.setSxbzhjrbz(param.getSxbzhj() / (item.getJwycq() + item.getGngzts()));
}else { }else {
item.setSxbzhjrbz(0.0); item.setSxbzhjrbz(0.0);
} }
if(kqDatas.get(item.getUser() + "-qq") == null){ if(kqDatas.get(item.getUser() + "-qq") == null){
// 目前该员工没有考勤数据 // 目前该员工没有考勤数据
item.setGnQq(0.0); item.setGnQq(0.0);
item.setJwQq(0.0); item.setJwQq(0.0);
item.setGwhg(0.0); item.setGwhg(0.0);
baseBean.writeLog("员工" +item.getUser()+"没有考勤数据!请核对考勤报表"); baseBean.writeLog("员工" +item.getUser()+"没有考勤数据!请核对考勤报表");
}else{ }else{
List<Date> qqDate =(List <Date>) kqDatas.get(item.getUser() + "-qq"); List<Date> qqDate =(List <Date>) kqDatas.get(item.getUser() + "-qq");
double gnQqDays=0.0; double gnQqDays=0.0;
double jwQqDays=0.0; double jwQqDays=0.0;
// 判断是境内缺勤还是境外缺勤 // 判断是境内缺勤还是境外缺勤
List<JwCZInfoDetail> jwCZInfoDetails = czInfos.get(item.getUser()); List<JwCZInfoDetail> jwCZInfoDetails = czInfos.get(item.getUser());
if(jwCZInfoDetails != null && jwCZInfoDetails.size()>0){ if(jwCZInfoDetails != null && jwCZInfoDetails.size()>0){
for(Date d : qqDate){ for(Date d : qqDate){
Boolean flag = false; Boolean flag = false;
for(int i=0; (i<jwCZInfoDetails.size() && flag == false) ;i++){ for(int i=0; (i<jwCZInfoDetails.size() && flag == false) ;i++){
JwCZInfoDetail detail = jwCZInfoDetails.get(i); JwCZInfoDetail detail = jwCZInfoDetails.get(i);
// Calendar k = Calendar.getInstance(); // Calendar k = Calendar.getInstance();
// k.setTime(detail.getJwczksrq()); // k.setTime(detail.getJwczksrq());
// setLastMinute(k); // setLastMinute(k);
// detail.setJwczksrq(k.getTime()); // detail.setJwczksrq(k.getTime());
if(detail.getJwczjsrq() != null){ if(detail.getJwczjsrq() != null){
Calendar j = Calendar.getInstance(); Calendar j = Calendar.getInstance();
j.setTime(detail.getJwczjsrq()); j.setTime(detail.getJwczjsrq());
setLastMinute(j); setLastMinute(j);
detail.setJwczjsrq(j.getTime()); detail.setJwczjsrq(j.getTime());
}
if(detail.getLx()==0){
// 开始常驻
if(detail.getJwczksrq().before(d) || detail.getJwczksrq().equals(d)){
// 在境外常驻期内的缺勤
jwQqDays++;
flag=true;
} }
}else { if(detail.getLx()==0){
// 结束常驻 // 开始常驻
if(detail.getJwczjsrq().before(d)){ 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++; 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.setJwscq(item.getJwycq()-item.getJwQq()-item.getGwhg());
item.setJwQq(jwQqDays); item.setGnscq(item.getGngzts() - item.getGnQq());
item.setGwhg((Double) kqDatas.get(item.getUser()+"-gwhg")); item.setJwjt(item.getJwscq()*item.getJwjtbz());
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());
// 方案二不考虑公务回国工作日
// if(validGwhgAndCountWorkdays.containsKey(Integer.valueOf(item.getUser()))){ // if(validGwhgAndCountWorkdays.containsKey(Integer.valueOf(item.getUser()))){
// // 该员工有公务回国数据 // // 该员工有公务回国数据
// Integer workDays = validGwhgAndCountWorkdays.get(Integer.valueOf(item.getUser())); // Integer workDays = validGwhgAndCountWorkdays.get(Integer.valueOf(item.getUser()));
// item.setGwhgWorkdays(workDays); // item.setGwhgWorkdays(workDays);
// } // }
}); });
}catch (Exception e){
baseBean.writeLog("eeeeeeeeeeeeeeee");
baseBean.writeLog(e);
}
} }
private void setLastMinute(Calendar c){ private void setLastMinute(Calendar c){

View File

@ -1,5 +1,6 @@
package com.engine.bjcj220907.utils; package com.engine.bjcj220907.utils;
import java.text.SimpleDateFormat;
import java.util.Calendar; import java.util.Calendar;
import java.util.Date; import java.util.Date;
@ -93,4 +94,45 @@ public class BjcjCommonUtils {
} }
return false; 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> <map>
<entry key="com.zeroturnaround.jrebel.FormatVersion" value="7.0.0" /> <entry key="com.zeroturnaround.jrebel.FormatVersion" value="7.0.0" />
<entry key="jrebelEnabled" value="true" /> <entry key="jrebelEnabled" value="true" />
<entry key="lastExternalPluginCheckTime" value="1672968433903" /> <entry key="lastExternalPluginCheckTime" value="1675584210944" />
</map> </map>
</option> </option>
<option name="version" value="11" /> <option name="version" value="13" />
</configuration> </configuration>
</facet> </facet>
</component> </component>