境外津贴核算web完成

This commit is contained in:
Harryxzy 2022-10-24 18:01:00 +08:00
parent e00115028c
commit 9e452c17a7
6 changed files with 118 additions and 21 deletions

View File

@ -1,9 +1,10 @@
package com.engine.bjcj220907.dao;
import com.engine.bjcj220907.entity.JwCZInfoDetail;
import com.engine.bjcj220907.entity.XcdjJwjtParam;
import com.engine.bjcj220907.entity.*;
import weaver.conn.RecordSet;
import weaver.formmode.setup.ModeRightInfo;
import weaver.general.BaseBean;
import weaver.general.TimeUtil;
import java.text.SimpleDateFormat;
import java.util.*;
@ -26,8 +27,9 @@ public class OverseasAllowanceDAO {
*/
public List<JwCZInfoDetail> getCZInfo(Date startAttendanceCal,Date endAttendanceCal) {
RecordSet rs = new RecordSet();
String sql="select xm,jwgzksrq,jwgzjsrq,lx,jsglts,g.jwglbtbz,jwgzdw1, a.btbz dqbtbz " +
String sql="select xm,certificatenum,jwgzksrq,jwgzjsrq,lx,jsglts,g.jwglbtbz,jwgzdw1, a.btbz dqbtbz " +
"from UF_NJJMB_DT1 d LEFT JOIN UF_NJJMB m on d.MAINID=m.id " +
"LEFT JOIN HRMRESOURCE h on m.xm=h.id " +
"LEFT JOIN UF_DQBTBZ a on d.jwgzdw1=a.id "+
"LEFT JOIN uf_jwgl g on g.jwgl=case when floor(jsglts/365)>5 then 5 else floor(jsglts/365) end " +
"WHERE lx in(0,1) " +
@ -62,7 +64,7 @@ public class OverseasAllowanceDAO {
if(jwgzjsrqStr!=null && jwgzjsrqStr.length()!=0){
jwgzjsrq = sdf.parse(jwgzjsrqStr);
}
JwCZInfoDetail build = JwCZInfoDetail.builder().xm(rs.getString("xm")).lx(lx).jwczksrq(jwgzksrq).jwczjsrq(jwgzjsrq).jsglts(jsglts).glbtybz(btbz).jkdqbtbz(dqbtbz).jkdq(Integer.valueOf(jwgzdw1)).build();
JwCZInfoDetail build = JwCZInfoDetail.builder().xm(rs.getString("xm")).sfzh(rs.getString("certificatenum")).lx(lx).jwczksrq(jwgzksrq).jwczjsrq(jwgzjsrq).jsglts(jsglts).glbtybz(btbz).jkdqbtbz(dqbtbz).jkdq(Integer.valueOf(jwgzdw1)).build();
results.add(build);
}catch (Exception e){
baseBean.writeLog(e);
@ -196,4 +198,55 @@ public class OverseasAllowanceDAO {
}
return gwhg;
}
/**
* @description 插入境外津贴核算结果
* @return void
* @author Harryxzy
* @date 2022/10/24 9:45
*/
public void insertOverseasAllowance(List<JWJT> results) {
Integer fieldValue = Integer.valueOf( baseBean.getPropValue("bjcjydjx", "jwjt_module_id"));
baseBean.writeLog("获取境外津贴建模中模块id"+fieldValue);
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM");
Calendar sendMonthCal = Calendar.getInstance();
sendMonthCal.setTime(results.get(0).getKqMonth());
sendMonthCal.add(Calendar.MONTH,1);
String currTime = sdf.format(new Date());
String currDate = TimeUtil.getCurrentDateString();
RecordSet rs = new RecordSet();
results.stream().forEach(result -> {
double gnQq = result.getGnQq();
double jwQq = result.getJwQq();
String sql = "insert into uf_jwcz(formmodeid,modedatacreater,modedatacreatertype,modedatacreatedate,modedatacreatetime,xm,gnycqts,gnscqts,sfzh,xcdj,jwjtbz,jwglbtbzybz,jwglbtbztbz,sxbthjybz,czyf," +
"jwyczts,jwsjczts,qjtscgs,gwhgts,gwhggzrts,jwjtje,jkdqbtje,jwgl,jwglbtje,sxbtje,jwjtjehj,ffyf)" +
"values('"+fieldValue+"','1','0','"+currDate+"','"+currTime+"',"+result.getUser()+","+result.getGngzts()+","+result.getGnscq()+",'"+result.getSfzh()+"','"+result.getXcdj()+"'," +
result.getJwjtbz()+","+result.getJwglbtybz()+","+result.getJwglbtrbz()+","+result.getSxbzhjbz()+",'"+sdf2.format(result.getKqMonth())+"'," +result.getJwycq()+","+result.getJwscq()+"," +
(gnQq+jwQq)+","+result.getGwhg()+","+result.getGwhgWorkdays()+","+result.getJwjt()+","+result.getJkdqbthj()+","+result.getJwgl()+","+result.getJwycq()*result.getJwglbtrbz() +"," +
result.getSxbzhj()+","+(result.getJwjt()+result.getJwycq()*result.getJwglbtrbz()+result.getJkdqbthj())+",'"+sdf2.format(sendMonthCal.getTime())+"')";
rs.execute(sql);
String sql2 = "select max(id) as id from uf_jwcz";
rs.execute(sql2);
int mainId = 0;
while (rs.next()) {
mainId = rs.getInt("id");
}
List<JKDQBT> jkdqbts = result.getJkdqbts();
JKDQBT first = jkdqbts.get(0);
StringBuilder sql3 = new StringBuilder( "insert into UF_JWCZ_DT1(MAINID,LX,JKDQBTBZ,TS,JKDQBTJE,DQ)" +
" select "+mainId+" , "+first.getLx()+" , "+first.getJkdqbtbz()+" , "+first.getDays()+" , "+first.getJkdqbt()+",'"+first.getJkdq()+"' from dual");
for(int i=1;i<jkdqbts.size();i++){
JKDQBT jkdqbt = jkdqbts.get(i);
sql3.append(" union select "+mainId+" , "+jkdqbt.getLx()+" , "+jkdqbt.getJkdqbtbz()+" , "+jkdqbt.getDays()+" , "+jkdqbt.getJkdqbt()+" , '"+jkdqbt.getJkdq() + "' from dual");
}
rs.execute(sql3.toString());
while (rs.next()) {
ModeRightInfo ModeRightInfo = new ModeRightInfo();
ModeRightInfo.setNewRight(true);
ModeRightInfo.editModeDataShare(1, fieldValue,mainId);
}
});
}
}

View File

@ -24,6 +24,11 @@ public class JWJT {
*/
private String user;
/**
* 身份证号
*/
private String sfzh;
/**
* 考勤月份
*/
@ -35,15 +40,20 @@ public class JWJT {
private double jwycq;
/**
* 境外实际常驻天数 境外应常驻天数-请假天数不含年假奖励假-公务回国天数
* 境外实际常驻天数 境外应常驻天数-境外请假天数不含年假奖励假-公务回国天数
*/
private double jwscq;
/**
* 国内工作天数工作日
* 国内工作天数工作日
*/
private double gngzts;
/**
* 国内实出勤
*/
private double gnscq;
/**
* 国内缺勤天数(请假)
*/
@ -100,6 +110,11 @@ public class JWJT {
*/
private List<JKDQBT> jkdqbts;
/**
* 艰苦地区补贴合计
*/
private double jkdqbthj;
/**
* 四项补助合计月标准
*/

View File

@ -22,6 +22,11 @@ public class JwCZInfo {
*/
private String xm;
/**
* 身份证号
*/
private String sfzh;
/**
* 境外常驻详细信息
*/

View File

@ -24,6 +24,12 @@ public class JwCZInfoDetail {
*/
private String xm;
/**
* 身份证号
*/
private String sfzh;
/**
* 类型 0开始常驻1结束常驻 6公务回国
*/

View File

@ -81,9 +81,7 @@ public class GetKQ4OverseasAllowanceCountServiceImpl extends Service implements
attDateList.stream().forEach(a -> {
Map attCalMap =(Map) i.get(sdf.format(a));
String attCal = (String)attCalMap.get("text");
if( (!attCal.equals("")) && (!attCal.contains("休息")) && (!attCal.equals("")) && ( (attCal.contains("旷工")) || (attCal.contains("事假")) || (attCal.contains("病假")) || (attCal.contains("丧假")) || (attCal.contains("产假")) || (attCal.contains("婚假"))
|| (attCal.contains("探亲假")) || (attCal.contains("陪产假")) || (attCal.contains("待岗")) || (attCal.contains("隔离假")) || (attCal.contains("哺乳假")) || (attCal.contains("产检假")) || (attCal.contains("计划生育假"))
|| (attCal.contains("第三国出差/境外国内出差")) || (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("奖励假")) ) ){
// 存在缺勤
qqDate.add(a);
}

View File

@ -79,15 +79,35 @@ public class OverseasAllowanceCountServiceImpl extends Service implements Overse
// 处理第三国出差(2)境外国内出差3艰苦地区补贴
Map<Integer, List<JwCZInfoDetail>> dsgccJkdq = getOverseasAllowanceDAO().getDsgcc();
baseBean.writeLog("获取第三国出差(2)、境外国内出差3艰苦地区补贴,共:"+dsgccJkdq.size());
baseBean.writeLog("第三国出差(2)、境外国内出差3艰苦地区补贴:"+dsgccJkdq);
// 封装第三国出差数境外国内出差据到result中
getDsgcc(results,dsgccJkdq,startAttendanceCal.getTime(),endAttendanceCal.getTime());
// 处理四项补贴月标准
// 计算艰苦地区补贴合计
coutJkdqbthj(results);
// 四项补贴合计天标准*公务回国工作日天数+境外国内出差工作日天数+国内工作日天数
countSxbthj(results);
baseBean.writeLog("计算四项补贴合计");
baseBean.writeLog("计算四项补贴合计:"+results.size());
// 将结果插入建模表中
getOverseasAllowanceDAO().insertOverseasAllowance(results);
baseBean.writeLog("将结果插入建模表中");
}
/**
* @description 计算艰苦地区补贴合计
* @return void
* @author Harryxzy
* @date 2022/10/24 14:11
*/
private void coutJkdqbthj(List<JWJT> results) {
results.stream().forEach(result->{
double[] total={0.0};
List<JKDQBT> jkdqbts = result.getJkdqbts();
jkdqbts.stream().forEach(j -> {
total[0]=total[0]+j.getJkdqbt();
});
result.setJkdqbthj(total[0]);
});
}
/**
@ -120,7 +140,7 @@ public class OverseasAllowanceCountServiceImpl extends Service implements Overse
// 存入常驻天数用于计算艰苦地区补贴
// int days1 = BjcjCommonUtils.getDays(detail.getJwczksrq(), endAttendanceCal.getTime());
detail.setDays(days);
JKDQBT jk = JKDQBT.builder().lx(detail.getLx()).days(days).jkdq(detail.getJkdq()).jkdqbtbz(detail.getJkdqbtbz()).build();
JKDQBT jk = JKDQBT.builder().lx(detail.getLx()).days(days).jkdq(detail.getJkdq()).jkdqbtbz(detail.getJkdqbtbz()).jkdqbt((days*detail.getJkdqbtbz())).build();
jkdqbts.add(jk);
} else {
// 开始常驻日期在 考勤开始日期前应出勤日期为自然日
@ -128,8 +148,8 @@ public class OverseasAllowanceCountServiceImpl extends Service implements Overse
// 存入常驻天数用于计算艰苦地区补贴
// int days1 = BjcjCommonUtils.getDays(startAttendanceCal.getTime(), endAttendanceCal.getTime());
detail.setDays(days);
JKDQBT jk = JKDQBT.builder().lx(detail.getLx()).days(days).jkdq(detail.getJkdq()).jkdqbtbz(detail.getJkdqbtbz()).build();
JWJT build = JWJT.builder().user(czInfo.getXm()).jwycq(days).gngzts(0.0).kqMonth(endAttendanceCal.getTime()).build();
JKDQBT jk = JKDQBT.builder().lx(detail.getLx()).days(days).jkdq(detail.getJkdq()).jkdqbtbz(detail.getJkdqbtbz()).jkdqbt((days*detail.getJkdqbtbz())).build();
JWJT build = JWJT.builder().user(czInfo.getXm()).sfzh(czInfo.getSfzh()).jwycq(days).gngzts(0.0).kqMonth(endAttendanceCal.getTime()).jwgl(czInfo.getJsglts()).jwglbtybz(czInfo.getGlbtybz()).jwglbtrbz(czInfo.getGlbtrbz()).build();
ArrayList<JKDQBT> jkdqbtList = new ArrayList<>();
jkdqbtList.add(jk);
build.setJkdqbts(jkdqbtList);
@ -161,7 +181,7 @@ public class OverseasAllowanceCountServiceImpl extends Service implements Overse
}
int days = BjcjCommonUtils.getDays(countStartCal.getTime(), countEndCal.getTime());
detail.setDays(days);
JKDQBT jk = JKDQBT.builder().lx(detail.getLx()).days(days).jkdq(detail.getJkdq()).jkdqbtbz(detail.getJkdqbtbz()).build();
JKDQBT jk = JKDQBT.builder().lx(detail.getLx()).days(days).jkdq(detail.getJkdq()).jkdqbtbz(detail.getJkdqbtbz()).jkdqbt((days*detail.getJkdqbtbz())).build();
jkdqbts.add(jk);
}
if (i == czDetails.size() - 1) {
@ -190,7 +210,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]).kqMonth(endAttendanceCal.getTime()).build();
JWJT build = JWJT.builder().user(czInfo.getXm()).sfzh(czInfo.getSfzh()).jwycq(ycq[0]).gngzts(gnycq[0]).kqMonth(endAttendanceCal.getTime()).jwgl(czInfo.getJsglts()).jwglbtybz(czInfo.getGlbtybz()).jwglbtrbz(czInfo.getGlbtrbz()).build();
build.setJkdqbts(jkdqbts);
results.add(build);
return true;
@ -256,7 +276,6 @@ public class OverseasAllowanceCountServiceImpl extends Service implements Overse
gnQqDays++;
flag=true;
}
// todo 看一下这个时分秒
if(BjcjCommonUtils.isBetween(d,detail.getJwczksrq(),detail.getJwczjsrq())){
// 在境外常驻期内的缺勤
jwQqDays++;
@ -274,6 +293,7 @@ public class OverseasAllowanceCountServiceImpl extends Service implements Overse
item.setGwhg((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()))){
// 该员工有公务回国数据
@ -302,7 +322,7 @@ public class OverseasAllowanceCountServiceImpl extends Service implements Overse
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())
JwCZInfo build = new JwCZInfo().builder().xm(values.get(0).getXm()).sfzh(values.get(0).getSfzh()).jsglts(values.get(0).getJsglts())
.glbtybz(values.get(0).getGlbtybz()).glbtrbz(values.get(0).getGlbtybz()/days)
.infos(entry.getValue()).build();
formatJwCZInfos.add(build);
@ -340,7 +360,7 @@ public class OverseasAllowanceCountServiceImpl extends Service implements Overse
countEndCal.setTime(endAttendance);
}
int days = BjcjCommonUtils.getDays(countStartCal.getTime(), countEndCal.getTime());
JKDQBT jk = JKDQBT.builder().lx(detail.getLx()).days(days).jkdq(detail.getJkdq()).jkdqbtbz(detail.getJkdqbtbz()).build();
JKDQBT jk = JKDQBT.builder().lx(detail.getLx()).days(days).jkdq(detail.getJkdq()).jkdqbtbz(detail.getJkdqbtbz()).jkdqbt((days * detail.getJkdqbtbz())).build();
jwjt.getJkdqbts().add(jk);
}
}
@ -357,7 +377,7 @@ public class OverseasAllowanceCountServiceImpl extends Service implements Overse
private void countSxbthj(List<JWJT> results) {
results.stream().forEach(result->{
// 获取员工的公务回国工作日天数和国内工作日天数 * 四项补助日标准
result.setSxbzhj((result.getGngzts()+result.getGwhgWorkdays()) * result.getSxbzhjrbz());
result.setSxbzhj((result.getGnscq()+result.getGwhgWorkdays()) * result.getSxbzhjrbz());
});
}