#weaver-ningbojinghua-2# 周末班加班转调休更新,去掉休息时间 #2

Merged
shilei merged 1 commits from shilei into main 1 year ago

@ -24,6 +24,8 @@ import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.Map.Entry;
import java.util.stream.Collectors;
import org.apache.commons.lang3.StringUtils;
import weaver.common.DateUtil;
import weaver.conn.RecordSet;
import weaver.formmode.setup.ModeRightInfo;
@ -106,6 +108,8 @@ public class KQOverTimeRuleCalBiz {
computingModeMap,kqTimesArrayComInfo,uuid,singleRs);
}
}
fromDate=preFromDate.format(dateFormatter);
updateTiaoXiu(resourceid, fromDate, toDate);
}catch (Exception e){
kqLog.info("加班生成数据报错:KQOverTimeRuleCalBiz:");
StringWriter errorsWriter = new StringWriter();
@ -114,6 +118,116 @@ public class KQOverTimeRuleCalBiz {
}
}
/**
*
* @param resourceid
* @param fromDate
* @param toDate
*/
public void updateTiaoXiu(String resourceid, String fromDate, String toDate){
//假期类型的缓存类
KQLeaveRulesComInfo rulesComInfo = new KQLeaveRulesComInfo();
//[调休]的假期类型的ID
String leaveRulesId = "";
//找到[调休]的假期类型ID
rulesComInfo.setTofirstRow();
while (rulesComInfo.next()) {
if (KQLeaveRulesBiz.isTiaoXiu(rulesComInfo.getId())) {
if("1".equals(rulesComInfo.getIsEnable())){
leaveRulesId = rulesComInfo.getId();
break;
}
}
}
RecordSet recordSet = new RecordSet();
String sql = " select * from kq_balanceOfLeave " +
" where (isDelete is null or isDelete<>1) and resourceId=" + resourceid +
" and leaveRulesId=" + leaveRulesId +
" and effectiveDate>='" + fromDate + "' and effectiveDate<='" +toDate+"'"+
" order by belongYear asc,effectiveDate asc,id asc ";
recordSet.executeQuery(sql);
String all_tiaoxiuids = "";
BigDecimal duration = new BigDecimal("0");
while (recordSet.next()) {
//额外
BigDecimal extraAmount = new BigDecimal(Util.null2s(recordSet.getString("extraAmount"), "0"));
//加班生成调休
BigDecimal tiaoxiuAmount = new BigDecimal(Util.null2s(recordSet.getString("tiaoxiuamount"), "0"));
//已休
BigDecimal usedAmount = new BigDecimal(Util.null2s(recordSet.getString("usedAmount"), "0"));
if (extraAmount.add(tiaoxiuAmount).subtract(usedAmount).doubleValue() >= 0) {
continue;
}
String id = recordSet.getString("id");
if(id.length() > 0 && Util.getIntValue(id) > 0){
all_tiaoxiuids += ","+id;
duration =duration.add(extraAmount).add(tiaoxiuAmount).subtract(usedAmount);
}
}
duration = duration.abs();
List<String> updateList = new ArrayList<String>();
sql = " select * from kq_balanceOfLeave " +
" where (isDelete is null or isDelete<>1) and resourceId=" + resourceid +
" and leaveRulesId=" + leaveRulesId +
" and effectiveDate>='" + fromDate + "'"+
" order by belongYear asc,effectiveDate asc,id asc ";
recordSet.executeQuery(sql);
int total = recordSet.getCounts();
int index = 0;
while (recordSet.next()) {
index++;
String id = recordSet.getString("id");
//额外
BigDecimal extraAmount = new BigDecimal(Util.null2s(recordSet.getString("extraAmount"), "0"));
//加班生成调休
BigDecimal tiaoxiuAmount = new BigDecimal(Util.null2s(recordSet.getString("tiaoxiuamount"), "0"));
//已休
BigDecimal usedAmount = new BigDecimal(Util.null2s(recordSet.getString("usedAmount"), "0"));
if (extraAmount.add(tiaoxiuAmount).subtract(usedAmount).doubleValue() <= 0) {
continue;
}
BigDecimal temp = extraAmount.add(tiaoxiuAmount).subtract(usedAmount).subtract(duration);
/*该假期剩余假期余额不足以扣减,记录错误日志,退出方法*/
if (index == total && temp.doubleValue() < 0) {
kqLog.info("该人员的该假期所有的剩余假期余额都不足以扣减。" +
"resourceId=" + resourceid + ",date=" + fromDate + ",ruleId=" + leaveRulesId + ",duration=" + duration + ",extraAmount=" + extraAmount.doubleValue() + ",usedAmount=" + usedAmount.doubleValue());
String newUsedAmount = usedAmount.add(duration).setScale(5, RoundingMode.HALF_UP).toPlainString();
String updateSql = "update kq_balanceOfLeave set usedAmount=" + (newUsedAmount) + " where id=" + id;
updateList.add(updateSql);
break;
}
if (temp.doubleValue() >= 0) {
String newUsedAmount = usedAmount.add(duration).setScale(5, RoundingMode.HALF_UP).toPlainString();
String updateSql = "update kq_balanceOfLeave set usedAmount=" + (newUsedAmount) + " where id=" + id;
updateList.add(updateSql);
break;
} else {
duration = duration.add(usedAmount).subtract(extraAmount).subtract(tiaoxiuAmount);
String newUsedAmount = extraAmount.add(tiaoxiuAmount).setScale(5, RoundingMode.HALF_UP).toPlainString();
String updateSql = "update kq_balanceOfLeave set usedAmount=" + (newUsedAmount) + " where id=" + id;
updateList.add(updateSql);
continue;
}
}
if(all_tiaoxiuids.length() > 0) {
all_tiaoxiuids = all_tiaoxiuids.substring(1);
updateList.add("update kq_balanceOfLeave set isDelete=1 where id in (" +all_tiaoxiuids+")");
}
kqLog.info("updateList:"+updateList);
/*SQL操作批处理*/
for (int i = 0; i < updateList.size(); i++) {
boolean flag = recordSet.executeUpdate(updateList.get(i));
if (!flag) {
kqLog.info("刷新加班流程数据失败:数据库更新失败" );
return;
}
}
}
/**
*
* @param resourceid
@ -584,6 +698,40 @@ public class KQOverTimeRuleCalBiz {
String overtimeid = get_overtime_uuid(overtime_uuid);
kqEventLogBiz.updateOvertimeId(uuid, overtimeid);
new BaseBean().writeLog("tiaoxiuId---2"+tiaoxiuId);
if(StringUtils.isNotBlank(tiaoxiuId)){
if (isRestSerial(searIdFrom,rs)) {
Double sc = divide(String.valueOf(across_mins),"60");
new BaseBean().writeLog("更新kq_balanceOfLeave的sc"+across_mins);
sc = recalculateOverTime(sc,searIdFrom, fromdatedb, fromtimedb, todatedb, totimedb, rs, singleRs);
new BaseBean().writeLog("重新计算后的sc"+sc);
String sql = " select * from kq_balanceOfLeave where id = "+tiaoxiuId ;
rs.executeQuery(sql);
if(rs.next()){
String tiaoxiuamount = Util.null2String(rs.getString("tiaoxiuamount"));
new BaseBean().writeLog("系统计算的调休是:"+tiaoxiuamount);
}
sql = "update kq_balanceOfLeave set tiaoxiuamount="+sc+" where id = "+tiaoxiuId ;
new BaseBean().writeLog("重新计算sql"+sql);
boolean isTrue = rs.executeUpdate(sql);
new BaseBean().writeLog("重新计算更新:"+isTrue);
new BaseBean().writeLog("overtime_uuid"+overtime_uuid);
// if(StringUtils.isNotBlank(overtime_uuid)){
// int duration_min = (int)sc.doubleValue()*60;
// sql = " update kq_flow_overtime set duration_min='"+duration_min+"' where uuid='"+overtime_uuid+"'" ;
// new BaseBean().writeLog("重新计算kq_flow_overtime的sql"+sql);
// isTrue = rs.executeUpdate(sql);
// new BaseBean().writeLog("kq_flow_overtime重新计算更新"+isTrue);
// }
}
}
}
}
}else{
@ -906,8 +1054,39 @@ public class KQOverTimeRuleCalBiz {
String overtimeid = get_overtime_uuid(overtime_uuid);
kqEventLogBiz.updateOvertimeId(uuid, overtimeid);
}
new BaseBean().writeLog("tiaoxiuId---"+tiaoxiuId);
if(StringUtils.isNotBlank(tiaoxiuId)) {
if (isRestSerial(searIdFrom, rs)) {
Double sc = divide(String.valueOf(mins), "60");
new BaseBean().writeLog("更新kq_balanceOfLeave的sc" + mins);
sc = recalculateOverTime(sc, searIdFrom, signinDate, signinTime, signoutDate, signoutTime, rs, singleRs);
new BaseBean().writeLog("重新计算后的sc" + sc);
String sql = " select * from kq_balanceOfLeave where id = " + tiaoxiuId;
rs.executeQuery(sql);
if (rs.next()) {
String tiaoxiuamount = Util.null2String(rs.getString("tiaoxiuamount"));
new BaseBean().writeLog("系统计算的调休是:" + tiaoxiuamount);
}
sql = "update kq_balanceOfLeave set tiaoxiuamount=" + sc + " where id = " + tiaoxiuId;
new BaseBean().writeLog("重新计算sql" + sql);
boolean isTrue = rs.executeUpdate(sql);
new BaseBean().writeLog("重新计算更新:" + isTrue);
new BaseBean().writeLog("overtime_uuid" + overtime_uuid);
// if(StringUtils.isNotBlank(overtime_uuid)){
// int duration_min = (int)sc.doubleValue()*60;
// sql = " update kq_flow_overtime set duration_min='"+duration_min+"' where uuid='"+overtime_uuid+"'" ;
// new BaseBean().writeLog("重新计算kq_flow_overtime的sql"+sql);
// isTrue = rs.executeUpdate(sql);
// new BaseBean().writeLog("kq_flow_overtime重新计算更新"+isTrue);
// }
}
}
}
}
}else{
logOvertimeMap(overtimeLogMap, "打卡区间不正确|"+flow_cross_key, mapKey+"|"+"打卡区间,得到打卡时长|over_count");

Loading…
Cancel
Save