需求调整

This commit is contained in:
Harryxzy 2023-01-05 09:41:58 +08:00
parent 29b4c1c1a6
commit eaad032a14
12 changed files with 177 additions and 57 deletions

View File

@ -1,5 +1,7 @@
package com.engine.bjcj220907.constant;
import com.ibm.icu.text.SimpleDateFormat;
/**
* @author Harryxzy
* @date 2022/09/05 13:07
@ -7,6 +9,8 @@ package com.engine.bjcj220907.constant;
*/
public class AbroadBusinessCountConstant {
public static final SimpleDateFormat YYYYMMddSdf = new SimpleDateFormat("yyyy-MM-dd");
/**
* 工作类型为境外出差
*/

View File

@ -4,6 +4,7 @@ package com.engine.bjcj220907.dao;
import com.engine.bjcj220907.constant.AbroadBusinessCountConstant;
import com.engine.bjcj220907.entity.AbroadBusiness;
import com.engine.bjcj220907.entity.AbroadBusinessResult;
import com.engine.bjcj220907.entity.JKDQBT;
import weaver.conn.RecordSet;
import weaver.formmode.setup.ModeRightInfo;
import weaver.general.BaseBean;
@ -11,10 +12,7 @@ import weaver.general.TimeUtil;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.*;
/**
@ -35,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 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 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()){
@ -47,6 +45,7 @@ public class AbroadBusinessDAO {
.jwgzdw(rs.getInt("JWGZDW1"))
.jwgzkssj(startDate)
.jwgzjssj(endDate)
.lcbh(rs.getString("lcbh"))
.build();
abroadBusinesses.add(build);
} catch (ParseException e) {
@ -90,23 +89,24 @@ public class AbroadBusinessDAO {
}
sql="SELECT XCDJ,gj ,xd,JWJTBZ,CCBTBZ from uf_xcdj WHERE gj="+gj+" and xd="+xd;
rs.execute(sql);
result.setJwjtbz(0.0);
result.setCcbtbz(0.0);
while (rs.next()){
result.setJwjtbz(rs.getInt("JWJTBZ"));
result.setCcbtbz(rs.getInt("CCBTBZ"));
result.setJwjtbz(rs.getDouble("JWJTBZ"));
result.setCcbtbz(rs.getDouble("CCBTBZ"));
}
if(gj == null){
result.setGj("");
}else{
result.setGj(gj);
}
if(xd == null){
result.setXd("");
}else{
result.setXd(xd);
}
result.setGj(gj);
result.setXd(xd);
result.setXcdj(rs.getString("XCDJ"));
Integer jwgzdw = result.getJwgzdw();
if(jwgzdw != null){
sql="select btbz from uf_dqbtbz where id ="+jwgzdw;
rs.execute(sql);
while (rs.next()){
double btbz = rs.getDouble("btbz");
result.setDqbtbz(btbz);
}
}
result.setXcdj(rs.getString("XCDJ"));
}
@ -118,8 +118,6 @@ public class AbroadBusinessDAO {
*/
public void insertResult(List<AbroadBusinessResult> results,Date searchMonth){
RecordSet rs = new RecordSet();
// 境外出差天数模块的id
Integer fieldValue = Integer.valueOf( baseBean.getPropValue("bjcjczjs", "uf_jwccts_ModuleID"));
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
@ -135,19 +133,52 @@ public class AbroadBusinessDAO {
String ccMonth = sdf2.format(result.getMonth());
double JWJTJE = result.getJwjtbz() * result.getAbroadAllowanceDays();
double DQCCBTJE = result.getCcbtbz() * result.getBasicAllowanceDays();
double jkdqbtje = result.getDqbtbz() * result.getBasicAllowanceDays();
String sql ="insert into uf_jwccts(formmodeid,modedatacreater,modedatacreatertype,modedatacreatedate,modedatacreatetime,XM,GJ,XD,XCDJ,CCYF,CCBTBZ,JWJTBZ,DQBTBZ,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)" +
"values('"+fieldValue+"','1','0','"+currDate+"','"+currTime+"',"+result.getUser()+",'"+result.getGj()+"','"+result.getXd()+"','"+result.getXcdj()+"','" +ccMonth+"',"+result.getCcbtbz()+","
+result.getJwjtbz()+","+result.getDqbtbz()+","+result.getBasicAllowanceDays()+","+result.getAbroadAllowanceDays()+","+result.getTotalDays()+",'"+sendMonth+"',"+
JWJTJE+","+DQCCBTJE+","+jkdqbtje+","+(JWJTJE+DQCCBTJE+jkdqbtje)+")";
+result.getJwjtbz()+","+result.getBasicAllowanceDays()+","+result.getAbroadAllowanceDays()+","+result.getTotalDays()+",'"+sendMonth+"',"+
JWJTJE+","+DQCCBTJE+","+result.getJkdqbtje()+","+(JWJTJE+DQCCBTJE+result.getJkdqbtje())+")";
rs.execute(sql);
String sql2 ="select max(id) as id from uf_jwccts";
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_jwccts_DT1(MAINID,LCBH,BCCCTS,JKDQBZ,JKDQBTJE)" +
" select "+mainId+" , '"+first.getLcbh()+"' , "+first.getDays()+" , "+first.getJkdqbtbz()+" , "+first.getJkdqbt()+" from dual");
for(int j=1;j<jkdqbts.size();j++){
JKDQBT jkdqbt = jkdqbts.get(j);
sql3.append(" union select "+mainId+" , '"+jkdqbt.getLcbh()+"' , "+jkdqbt.getDays()+" , "+jkdqbt.getJkdqbtbz()+" , "+jkdqbt.getJkdqbt()+ " from dual");
}
rs.execute(sql3.toString());
// 权限重构
while (rs.next()) {
ModeRightInfo ModeRightInfo = new ModeRightInfo();
ModeRightInfo.setNewRight(true);
ModeRightInfo.editModeDataShare(1, fieldValue, rs.getInt("id"));
ModeRightInfo.editModeDataShare(1, fieldValue, mainId);
}
}
}
/**
* @description 获取所有的境外工作单位补助
* @return Map<Double, Double>
* @author Harryxzy
* @date 2022/12/30 10:24
*/
public Map<Integer, Double> getAllJwgzDW() {
RecordSet rs = new RecordSet();
Map<Integer, Double> result = new HashMap<>();
String sql="select id,btbz from uf_dqbtbz ";
rs.execute(sql);
while (rs.next()){
int dqId = rs.getInt("id");
double btbz = rs.getDouble("btbz");
result.put(dqId,btbz);
}
return result;
}
}

View File

@ -48,9 +48,9 @@ public class OverseasAllowanceDAO {
String jwgzdw1 = rs.getString("JWGZDW1");
double dqbtbz = rs.getDouble("DQBTBZ");
int lx = rs.getInt("lx");
if(jwgzdw1 == ""){
if(jwgzdw1 == ""){
jwgzdw1="0";
}
}
if(dqbtbz == -1){
dqbtbz =0.0;
}
@ -58,6 +58,9 @@ public class OverseasAllowanceDAO {
// 境外工龄未满1年
btbz=0.0;
}
if(jsglts == -1){
jsglts = 0.0;
}
if(jwgzksrqStr!=null && jwgzksrqStr.length()!=0){
jwgzksrq = sdf.parse(jwgzksrqStr);
}

View File

@ -45,4 +45,9 @@ public class AbroadBusiness {
*/
private Integer jwgzdw;
/**
* 流程编号
*/
private String lcbh;
}

View File

@ -32,4 +32,9 @@ public class AbroadBusinessDetail {
*/
private Date date;
/**
* 流程编号
*/
private String lcbh;
}

View File

@ -6,6 +6,7 @@ import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
import java.util.List;
/**
* @author Harryxzy
@ -54,17 +55,17 @@ public class AbroadBusinessResult {
/**
* 出差补贴标准
*/
private Integer ccbtbz;
private double ccbtbz;
/**
* 境外津贴标准
*/
private Integer jwjtbz;
private double jwjtbz;
/**
* 地区补贴标准
*/
private double dqbtbz;
// private double dqbtbz;
/**
* 出差补贴标准天数
@ -89,7 +90,17 @@ public class AbroadBusinessResult {
/**
* 境外工作单位
*/
private Integer jwgzdw;
// private Integer jwgzdw;
/**
* 艰苦地区补贴
*/
private List<JKDQBT> jkdqbts;
/**
* 艰苦地区补贴金额
*/
private double jkdqbtje;

View File

@ -52,4 +52,9 @@ public class JKDQBT {
* 艰苦地区结束时间
*/
private Date jkdqJssj;
/**
* 流程编号
*/
private String lcbh;
}

View File

@ -1,11 +1,9 @@
package com.engine.bjcj220907.service.impl;
import com.engine.bjcj220907.constant.AbroadBusinessCountConstant;
import com.engine.bjcj220907.dao.AbroadBusinessDAO;
import com.engine.bjcj220907.entity.AbroadBusiness;
import com.engine.bjcj220907.entity.AbroadBusinessCountParam;
import com.engine.bjcj220907.entity.AbroadBusinessDetail;
import com.engine.bjcj220907.entity.AbroadBusinessResult;
import com.engine.bjcj220907.entity.*;
import com.engine.bjcj220907.service.AbroadBusinessCountService;
import com.engine.core.impl.Service;
import weaver.general.BaseBean;
@ -61,7 +59,7 @@ 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()).build());
abroadBusinessDetails.add(AbroadBusinessDetail.builder().xm(business.getUser()).date(tempStart.getTime()).jwgzdw(business.getJwgzdw()).lcbh(business.getLcbh()).build());
tempStart.add(Calendar.DAY_OF_YEAR, 1);
}
}
@ -71,7 +69,7 @@ public class AbroadBusinessCountServiceImpl extends Service implements AbroadBus
searchCal.setTime(param.getMonth());
int year = searchCal.get(Calendar.YEAR);
int month = searchCal.get(Calendar.MONTH)+1;
int totalDays = searchCal.getActualMaximum(Calendar.DAY_OF_MONTH);
// int totalDays = searchCal.getActualMaximum(Calendar.DAY_OF_MONTH);
searchCal.set(Calendar.DAY_OF_MONTH,28);
searchCal.set(Calendar.HOUR_OF_DAY, 23);
searchCal.set(Calendar.MINUTE, 59);
@ -128,6 +126,7 @@ public class AbroadBusinessCountServiceImpl extends Service implements AbroadBus
int thisMonthCount=0;
// 本月境外津贴标准天数
int thisMonthAbroadCount=0;
List<String> jkdqbtDates = new ArrayList<>();
if(detailDate.contains(firstDay)){
// 出差明细中包含计算周期的第一天需要判断前30天
Calendar lastMonthLastDayCal = Calendar.getInstance();
@ -139,15 +138,17 @@ public class AbroadBusinessCountServiceImpl extends Service implements AbroadBus
for(int i=detailDate.indexOf((lastMonthLastDayCal.getTime())); i>0;i--){
lastMonthLastDayCal.add(Calendar.DATE,-1);
if( detailDate.get(i-1).equals(lastMonthLastDayCal.getTime())){
// 连续
lastMonthCount++;
}
else{
} else{
// 不连续
break;
}
}
}
if(lastMonthCount == 30){
thisMonthAbroadCount++;
jkdqbtDates.add(AbroadBusinessCountConstant.YYYYMMddSdf.format(firstDay));
}else{
thisMonthCount++;
}
@ -164,7 +165,7 @@ public class AbroadBusinessCountServiceImpl extends Service implements AbroadBus
}
List<Date> searchMonthDetailDate = searchMonthDetails.stream().map(AbroadBusinessDetail::getDate).collect(Collectors.toList());
if((searchMonthDetailDate.size() + lastMonthCount) <=30){
// 前30天连续出差天数+本计算周期天数 没有超过30天
// 前30天连续出差天数+本计算周期出差天数 没有超过30天
thisMonthCount = searchMonthDetailDate.size();
}else{
// 超过30天
@ -178,8 +179,11 @@ public class AbroadBusinessCountServiceImpl extends Service implements AbroadBus
if(searchMonthDetailDate.size()<=30){
thisMonthCount=searchMonthDetailDate.size();
}else{
// 本月计算周期签到31天
thisMonthCount=30;
thisMonthAbroadCount=1;
// 计算周期最后一天是长期出差
jkdqbtDates.add(AbroadBusinessCountConstant.YYYYMMddSdf.format(searchCal.getTime()));
}
}
}else{
@ -196,12 +200,13 @@ public class AbroadBusinessCountServiceImpl extends Service implements AbroadBus
for(int i=1;i<searchMonthDetailDate.size();i++){
if(searchMonthDetailDate.get(i).equals(firstCal.getTime())){
// 连续
firstCal.add(Calendar.DATE,1);
if(totalContinueDays >= 30){
thisMonthAbroadCount++;
jkdqbtDates.add(AbroadBusinessCountConstant.YYYYMMddSdf.format(firstCal.getTime()));
}else{
thisMonthCount++;
}
firstCal.add(Calendar.DATE,1);
totalContinueDays++;
}else{
// 不连续,计算余下出差天数加入出差补贴标准天数
@ -215,7 +220,9 @@ 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()).jwgzdw(detail.get(0).getJwgzdw()).build();
.month(param.getMonth()).sendMonth(sendMonth.getTime()).build();
// 处理艰苦地区补助
handleJkdqbt(build, searchMonthDetails, jkdqbtDates);
results.add(build);
baseBean.writeLog("用户:"+detail.get(0).getXm()+"前30天连续出差天数"+lastMonthCount+"本周期短期出差天数:"+thisMonthCount+"长期出差天数:"+thisMonthAbroadCount);
}
@ -224,13 +231,57 @@ public class AbroadBusinessCountServiceImpl extends Service implements AbroadBus
getAbroadBusinessDAO().getJobInfo(result);
return result;
}).collect(Collectors.toList());
baseBean.writeLog("开始获取并计算艰苦地区补助");
getDqBonus(results);
// 计算结果插入建模表中
baseBean.writeLog("计算结果插入建模表中");
getAbroadBusinessDAO().insertResult(results,param.getMonth());
baseBean.writeLog("计算结果插入建模表中"+results);
getAbroadBusinessDAO().insertResult(results,param.getMonth());
return "success";
}
/**
* @description 开始获取并计算艰苦地区补助
* @return void
* @author Harryxzy
* @date 2022/12/30 10:15
*/
private void getDqBonus(List<AbroadBusinessResult> results) {
Map<Integer, Double> btbz = getAbroadBusinessDAO().getAllJwgzDW();
results.stream().forEach(result -> {
double[] jkdqbtje = {0.0};
result.getJkdqbts().stream().forEach(jkdq -> {
Double bz = btbz.get(jkdq.getJkdq());
if (bz != null && !Objects.equals(bz,0)){
jkdq.setJkdqbtbz(bz);
jkdq.setJkdqbt(bz * jkdq.getDays());
}
jkdqbtje[0] += jkdq.getJkdqbt();
});
result.setJkdqbtje(jkdqbtje[0]);
});
}
/**
* @description 处理艰苦地区补助信息
* @return void
* @author Harryxzy
* @date 2022/12/29 15:22
*/
private void handleJkdqbt(AbroadBusinessResult result, List<AbroadBusinessDetail> searchMonthDetails, List<String> jkdqbtDates) {
// 获取连续出差超过30天部分的出差信息
List<AbroadBusinessDetail> jkdqbtDetail = searchMonthDetails.stream().filter(detail -> jkdqbtDates.contains(AbroadBusinessCountConstant.YYYYMMddSdf.format(detail.getDate()))).collect(Collectors.toList());
// 根据境外工作单位分组
Map<String, List<AbroadBusinessDetail>> gorupByLcbh = jkdqbtDetail.stream().collect(Collectors.groupingBy(AbroadBusinessDetail::getLcbh));
List<JKDQBT> jkdqbts = new ArrayList<>();
if(gorupByLcbh != null && gorupByLcbh.size()>0){
for(Map.Entry<String, List<AbroadBusinessDetail>> entrySet : gorupByLcbh.entrySet()){
Integer jwgzdw = entrySet.getValue().get(0).getJwgzdw();
jkdqbts.add(JKDQBT.builder().days(entrySet.getValue().size()).jkdq(jwgzdw).lcbh(entrySet.getValue().get(0).getLcbh()).build());
}
}
result.setJkdqbts(jkdqbts);
}
// 获取搜索月28号到上月29号30天前的出差明细
public List<AbroadBusinessDetail> getThisAndLastMonthBusinessDetail(List<AbroadBusinessDetail> abroadBusinessDetails,Date endDate,Date startDate){
List<AbroadBusinessDetail> thisAndLastMonthBusinessDay = abroadBusinessDetails.stream().filter(date ->{

View File

@ -70,7 +70,6 @@ public class EmployeeIdentifiedServiceImpl extends Service implements EmployeeId
}
flag =true;
}
// 入职
if(Objects.equals(info.getRz(), -1) ){
if(info.getRzrq() != null){

View File

@ -61,7 +61,8 @@ public class GetKQ4MonthBonusServiceImpl extends Service implements GetKQ4MonthB
if(column.get("title").equals("出差及请假")){
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("隔离假")) ){
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("公务回国")) ){
c.add(i.get("dataIndex"));
}
});

View File

@ -61,7 +61,7 @@ public class GetKQ4OverseasAllowanceCountServiceImpl extends Service implements
});
}
});
baseBean.writeLog("公务回国dataIndex"+gwhgDataIndex[0]);
// baseBean.writeLog("公务回国dataIndex"+gwhgDataIndex[0]);
dataList = (List<Map<String, Object>>) execute.get("datas");
// 获取每个人的缺勤日期及公务回国天数
Map<String, Object> qqDays = new HashMap<>();
@ -91,13 +91,13 @@ public class GetKQ4OverseasAllowanceCountServiceImpl extends Service implements
Map attCalMap =(Map) o;
attCal = (String)attCalMap.get("text");
}catch (Exception e){
baseBean.writeLog("考勤数据:"+o+"转换为Map失败");
// baseBean.writeLog("考勤数据:"+o+"转换为Map失败");
attCal="休息";
}
if( (attCal.contains("旷工")) || ( (!attCal.equals("")) && (!attCal.contains("休息")) && (!attCal.equals("")) && (!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("第三国出差/境外国内出差")) ) ){
// 存在缺勤
qqDate.add(a);
baseBean.writeLog(attCal+"缺勤");
// baseBean.writeLog(attCal+"缺勤");
}
});
String qqStr = i.get("resourceId") +"-qq";
@ -108,7 +108,7 @@ public class GetKQ4OverseasAllowanceCountServiceImpl extends Service implements
}else {
gwhgS[0] ="0";
}
baseBean.writeLog("公务回国PUT"+gwhgStr+","+Double.valueOf(gwhgS[0]));
// baseBean.writeLog("公务回国PUT"+gwhgStr+","+Double.valueOf(gwhgS[0]));
qqDays.put(gwhgStr,Double.valueOf(gwhgS[0]));
}
});

View File

@ -307,6 +307,9 @@ public class OverseasAllowanceCountServiceImpl extends Service implements Overse
item.setJwjtbz(param.getJwjtbz());
item.setSxbzhjbz(param.getSxbzhj());
item.setSxbzhjrbz(param.getSxbzhj()/21.75);
if(item.getUser().equals("109")){
System.out.println("hi");
}
if(kqDatas.get(item.getUser() + "-qq") == null){
// 目前该员工没有考勤数据
item.setGnQq(0.0);
@ -324,10 +327,11 @@ public class OverseasAllowanceCountServiceImpl extends Service implements Overse
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());
// 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());
@ -365,6 +369,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()))){