|
|
|
@ -0,0 +1,917 @@
|
|
|
|
|
package weaver.interfaces.sskj.action;
|
|
|
|
|
|
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
|
|
import weaver.conn.RecordSet;
|
|
|
|
|
import weaver.general.Util;
|
|
|
|
|
import weaver.interfaces.workflow.action.Action;
|
|
|
|
|
import weaver.soa.workflow.request.*;
|
|
|
|
|
|
|
|
|
|
import java.text.ParseException;
|
|
|
|
|
import java.text.SimpleDateFormat;
|
|
|
|
|
import java.util.*;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 调休申请流程转建模数据
|
|
|
|
|
*/
|
|
|
|
|
@Slf4j
|
|
|
|
|
public class WorkLeaveAction implements Action {
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public String execute(RequestInfo requestInfo) {
|
|
|
|
|
RecordSet rs = new RecordSet();
|
|
|
|
|
//获取流程requestId
|
|
|
|
|
String requestId = Util.null2String(requestInfo.getRequestid());
|
|
|
|
|
// 根据requestId查询考勤建模表信息
|
|
|
|
|
List<Map<String, String>> list = getKqFlowLeaveInfo(requestId);
|
|
|
|
|
// 记录调休分片扣除后余额(隔月)
|
|
|
|
|
double txye = 0;
|
|
|
|
|
// 记录调休分片扣除后余额(三月)
|
|
|
|
|
double fpyeTwo = 0;
|
|
|
|
|
double fpye = 0;
|
|
|
|
|
//本月-- 假设:平时=a,休息日=b,节假日=c
|
|
|
|
|
double a = 0;
|
|
|
|
|
double b = 0;
|
|
|
|
|
double c = 0;
|
|
|
|
|
//隔月-- 假设:平时=a1,休息日=b1,节假日=c1
|
|
|
|
|
double a1 = 0;
|
|
|
|
|
double b1 = 0;
|
|
|
|
|
double c1 = 0;
|
|
|
|
|
//隔月循坏次数累加,本月循环次数累加
|
|
|
|
|
int numLast2 = 0;
|
|
|
|
|
int numLast = 0;
|
|
|
|
|
int numNow =0;
|
|
|
|
|
//隔2月-- 假设:平时=a2,休息日=b2,节假日=c2
|
|
|
|
|
double a2 = 0;
|
|
|
|
|
double b2 = 0;
|
|
|
|
|
double c2 = 0;
|
|
|
|
|
//遍历数据更新
|
|
|
|
|
for (int i = 0; i < list.size(); i++) {
|
|
|
|
|
Map<String, String> map = list.get(i);
|
|
|
|
|
String mainTableName;
|
|
|
|
|
// 获取部门、姓名、请假月份
|
|
|
|
|
String departmentid = map.get("departmentid");
|
|
|
|
|
String resourceid = map.get("resourceid");
|
|
|
|
|
String fromdate = map.get("fromdate");
|
|
|
|
|
// 请假时长
|
|
|
|
|
String durationdb = map.get("durationdb");
|
|
|
|
|
// 加班类别为:本月发放
|
|
|
|
|
String field28 = map.get("field28");
|
|
|
|
|
// 计算本月剩余加班时长
|
|
|
|
|
mainTableName = getMainTableName(field28);
|
|
|
|
|
String nowBalance = getOvertimeBalance(mainTableName, departmentid, resourceid, fromdate,field28);
|
|
|
|
|
// 判断请假类型上是否为:调休
|
|
|
|
|
if (!StringUtils.equals(map.get("newleavetype"), "5")) {
|
|
|
|
|
return Action.FAILURE_AND_CONTINUE;
|
|
|
|
|
}
|
|
|
|
|
if (StringUtils.equals(field28, "4")) {
|
|
|
|
|
// 请假时长
|
|
|
|
|
double duration = Double.parseDouble(map.get("duration"));
|
|
|
|
|
|
|
|
|
|
// 判断剩余时长是否大于请假时长
|
|
|
|
|
if (Double.parseDouble("".equals(nowBalance)?"0":nowBalance) < Double.parseDouble(durationdb)) {
|
|
|
|
|
return Action.FAILURE_AND_CONTINUE;
|
|
|
|
|
}
|
|
|
|
|
// 获取建模主表名称
|
|
|
|
|
mainTableName = getMainTableName(field28);
|
|
|
|
|
// 1.查询建模表主键id + 各假期类型对应的值
|
|
|
|
|
String id = "";
|
|
|
|
|
String psjb = "";
|
|
|
|
|
String zmjb = "";
|
|
|
|
|
String jrjb = "";
|
|
|
|
|
String psjbsy = "";
|
|
|
|
|
String zmjbsy = "";
|
|
|
|
|
String jrjbsy = "";
|
|
|
|
|
String sql2 = " select id,psjb,psjbsy,zmjb,zmjbsy,jrjb,jrjbsy from " + mainTableName + " where bm = ? and xm = ? and ny = ? and jblb = ?";
|
|
|
|
|
log.info("-WorkLeaveAction- sql2:{}", sql2);
|
|
|
|
|
rs.executeQuery(sql2, departmentid, resourceid, fromdate.substring(0, 7),field28);
|
|
|
|
|
if (rs.next()) {
|
|
|
|
|
id = rs.getString("id");
|
|
|
|
|
psjb = rs.getString("psjb");
|
|
|
|
|
zmjb = rs.getString("zmjb");
|
|
|
|
|
jrjb = rs.getString("jrjb");
|
|
|
|
|
psjbsy = rs.getString("psjbsy");
|
|
|
|
|
zmjbsy = rs.getString("zmjbsy");
|
|
|
|
|
jrjbsy = rs.getString("jrjbsy");
|
|
|
|
|
}
|
|
|
|
|
log.info("-WorkLeaveAction- id:{},psjb:{},zmjb:{},jrjb:{}", id,psjb,zmjb,jrjb);
|
|
|
|
|
// 赋值给变量:a,b,c
|
|
|
|
|
if(i==0){
|
|
|
|
|
if(!StringUtils.equals(psjbsy,"")){
|
|
|
|
|
a = Double.parseDouble(psjbsy);
|
|
|
|
|
}else{
|
|
|
|
|
a = Double.parseDouble("".equals(psjb)?"0":psjb);
|
|
|
|
|
}
|
|
|
|
|
if(!StringUtils.equals(zmjbsy,"")){
|
|
|
|
|
b = Double.parseDouble(zmjbsy);
|
|
|
|
|
}else{
|
|
|
|
|
b = Double.parseDouble("".equals(zmjb)?"0":zmjb);
|
|
|
|
|
}
|
|
|
|
|
if(!StringUtils.equals(jrjbsy,"")){
|
|
|
|
|
c = Double.parseDouble(jrjbsy);
|
|
|
|
|
}else{
|
|
|
|
|
c = Double.parseDouble("".equals(jrjb)?"0":jrjb);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
String dtlTableName = mainTableName + "_dt2";
|
|
|
|
|
log.info("-WorkLeaveAction- dtlTableName:{}", dtlTableName);
|
|
|
|
|
String insert_detail;
|
|
|
|
|
// 1.直接增加明细表数据
|
|
|
|
|
insert_detail = "insert into " + dtlTableName + " (mainid,qjr,qjlx,ksrq,kssj,jsrq,jssj,qjsc,qjyy,jblc) values (?,?,?,?,?,?,?,?,?,?)";
|
|
|
|
|
log.info("-WorkLeaveAction-insert_detail sql:[{}]", insert_detail);
|
|
|
|
|
boolean d = rs.executeUpdate(insert_detail, id, resourceid, "5", fromdate,
|
|
|
|
|
map.get("fromtime"), map.get("todate"), map.get("totime"), duration, "",requestId);
|
|
|
|
|
if (!d) {
|
|
|
|
|
log.info("调休申请流程转建模数据失败!");
|
|
|
|
|
return Action.FAILURE_AND_CONTINUE;
|
|
|
|
|
}
|
|
|
|
|
// 增加判断,加班时长扣除顺序:平时>休息日>节假日
|
|
|
|
|
holidayDeduction(a,b,c,duration,mainTableName,id,psjb,zmjb,jrjb,departmentid,resourceid,fromdate,field28);
|
|
|
|
|
|
|
|
|
|
} else if (StringUtils.equals(field28, "5")) {
|
|
|
|
|
double duration = Double.parseDouble(map.get("duration"));
|
|
|
|
|
//隔月发放
|
|
|
|
|
//1.查询上个月是否有加班剩余时长:lastSum , 本月剩余:nowSum
|
|
|
|
|
try {
|
|
|
|
|
// 上月
|
|
|
|
|
String lastMonth = getLastMonth(fromdate);
|
|
|
|
|
log.info("-WorkLeaveAction- lastMonth:{}", lastMonth);
|
|
|
|
|
// 上月加班剩余
|
|
|
|
|
String lastBalance = "";
|
|
|
|
|
if (i == 0) {
|
|
|
|
|
lastBalance = getOvertimeBalance(mainTableName, departmentid, resourceid, lastMonth,field28);
|
|
|
|
|
txye = Double.parseDouble("".equals(lastBalance)?"0":lastBalance);
|
|
|
|
|
log.info("-WorkLeaveAction- lastBalance:{},txye:{}", lastBalance,txye);
|
|
|
|
|
}
|
|
|
|
|
String insert1 = "insert into " + mainTableName + "_dt2" + " (mainid,qjr,qjlx,ksrq,kssj,jsrq,jssj,qjsc,qjyy,jblc) values (?,?,?,?,?,?,?,?,?,?)";
|
|
|
|
|
// 上月和本月剩余和小于请假时长
|
|
|
|
|
if ((Double.parseDouble("".equals(lastBalance)?"0":lastBalance) + Double.parseDouble("".equals(nowBalance)?"0":nowBalance)) < Double.parseDouble(durationdb)) {
|
|
|
|
|
return Action.FAILURE_AND_CONTINUE;
|
|
|
|
|
} else {
|
|
|
|
|
// 上个月加班不为空
|
|
|
|
|
if (StringUtils.isNotBlank(lastBalance)) {
|
|
|
|
|
numLast++;
|
|
|
|
|
// 查询上个月的主表id
|
|
|
|
|
Map<String, String> mainMap = getMonthMainId(mainTableName, departmentid, resourceid, lastMonth);
|
|
|
|
|
String mainId = mainMap.get("mainId");
|
|
|
|
|
String psjb = mainMap.get("psjb");
|
|
|
|
|
String zmjb = mainMap.get("zmjb");
|
|
|
|
|
String jrjb = mainMap.get("jrjb");
|
|
|
|
|
String psjbsy = mainMap.get("psjbsy");
|
|
|
|
|
String zmjbsy = mainMap.get("zmjbsy");
|
|
|
|
|
String jrjbsy = mainMap.get("jrjbsy");
|
|
|
|
|
// 第一次循坏给全局变量赋值:各类型加班数
|
|
|
|
|
// 赋值给变量:a1,b1,c1
|
|
|
|
|
if(numLast==1){
|
|
|
|
|
if(!StringUtils.equals(psjbsy,"")){
|
|
|
|
|
a1 = Double.parseDouble(psjbsy);
|
|
|
|
|
}else{
|
|
|
|
|
a1 = Double.parseDouble("".equals(psjb)?"0":psjb);
|
|
|
|
|
}
|
|
|
|
|
if(!StringUtils.equals(zmjbsy,"")){
|
|
|
|
|
b1 = Double.parseDouble(zmjbsy);
|
|
|
|
|
}else{
|
|
|
|
|
b1 = Double.parseDouble("".equals(zmjb)?"0":zmjb);
|
|
|
|
|
}
|
|
|
|
|
if(!StringUtils.equals(jrjbsy,"")){
|
|
|
|
|
c1 = Double.parseDouble(jrjbsy);
|
|
|
|
|
}else{
|
|
|
|
|
c1 = Double.parseDouble("".equals(jrjb)?"0":jrjb);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// 上个月时长够用,直接插入明细表2
|
|
|
|
|
if (Double.parseDouble("".equals(lastBalance)?"0":lastBalance) > Double.parseDouble(durationdb)) {
|
|
|
|
|
rs.executeUpdate(insert1, mainId, resourceid, "5", fromdate,
|
|
|
|
|
map.get("fromtime"), map.get("todate"), map.get("totime"), duration, "",requestId);
|
|
|
|
|
// 上个月加班够用,按顺序抵扣:平时》周末》节假日
|
|
|
|
|
holidayDeduction(a1,b1,c1,duration,mainTableName,mainId,psjb,zmjb,jrjb,departmentid,resourceid,fromdate,field28);
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
// 不够用,要插入2条明细
|
|
|
|
|
if (duration < txye) {
|
|
|
|
|
//小于上月剩余,插入上月明细
|
|
|
|
|
rs.executeUpdate(insert1, mainId, resourceid, "5", fromdate,
|
|
|
|
|
map.get("fromtime"), map.get("todate"), map.get("totime"), duration, "",requestId);
|
|
|
|
|
txye = txye - duration;
|
|
|
|
|
log.info("-WorkLeaveAction- txye2:{}", txye);
|
|
|
|
|
// 只要插入1条调休明细就执行一次顺序
|
|
|
|
|
holidayDeduction(a1,b1,c1,duration,mainTableName,mainId,psjb,zmjb,jrjb,departmentid,resourceid,fromdate,field28);
|
|
|
|
|
} else {
|
|
|
|
|
if (txye >= 0) {
|
|
|
|
|
if(txye>0){
|
|
|
|
|
// 上月还有剩余,但是不够扣除
|
|
|
|
|
rs.executeUpdate(insert1, mainId, resourceid, "5", fromdate,
|
|
|
|
|
map.get("fromtime"), map.get("todate"), map.get("totime"), fpye, "",requestId);
|
|
|
|
|
// 只要插入1条调休明细就执行一次顺序
|
|
|
|
|
holidayDeduction(a1,b1,c1,fpye,mainTableName,mainId,psjb,zmjb,jrjb,departmentid,resourceid,fromdate,field28);
|
|
|
|
|
}
|
|
|
|
|
// 需要用到本月数据
|
|
|
|
|
numNow++;
|
|
|
|
|
|
|
|
|
|
//本月剩余:
|
|
|
|
|
double value = duration - fpye;
|
|
|
|
|
// 查询本月的主表id
|
|
|
|
|
Map<String, String> mainMapNow = getMonthMainId(mainTableName, departmentid, resourceid, fromdate);
|
|
|
|
|
String mainIdNow = mainMapNow.get("mainId");
|
|
|
|
|
String psjbNow = mainMapNow.get("psjb");
|
|
|
|
|
String zmjbNow = mainMapNow.get("zmjb");
|
|
|
|
|
String jrjbNow = mainMapNow.get("jrjb");
|
|
|
|
|
String psjbsyNow = mainMapNow.get("psjbsy");
|
|
|
|
|
String zmjbsyNow = mainMapNow.get("zmjbsy");
|
|
|
|
|
String jrjbsyNow = mainMapNow.get("jrjbsy");
|
|
|
|
|
// 赋值给变量:a,b,c
|
|
|
|
|
if(numNow==1){
|
|
|
|
|
if(!StringUtils.equals(psjbsyNow,"")){
|
|
|
|
|
a = Double.parseDouble(psjbsyNow);
|
|
|
|
|
}else{
|
|
|
|
|
a = Double.parseDouble("".equals(psjbNow)?"0":psjbNow);
|
|
|
|
|
}
|
|
|
|
|
if(!StringUtils.equals(zmjbsyNow,"")){
|
|
|
|
|
b = Double.parseDouble(zmjbsyNow);
|
|
|
|
|
}else{
|
|
|
|
|
b = Double.parseDouble("".equals(zmjbNow)?"0":zmjbNow);
|
|
|
|
|
}
|
|
|
|
|
if(!StringUtils.equals(jrjbsyNow,"")){
|
|
|
|
|
c = Double.parseDouble(jrjbsyNow);
|
|
|
|
|
}else{
|
|
|
|
|
c = Double.parseDouble("".equals(jrjbNow)?"0":jrjbNow);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
log.info("-WorkLeaveAction5555- nowMonth-mainMapNow:{}", mainMapNow);
|
|
|
|
|
rs.executeUpdate(insert1, mainIdNow, resourceid, "5", fromdate,
|
|
|
|
|
map.get("fromtime"), map.get("todate"), map.get("totime"), value, "",requestId);
|
|
|
|
|
// 上月加班剩余清零
|
|
|
|
|
txye = 0;
|
|
|
|
|
// 只要插入1条调休明细就执行一次顺序
|
|
|
|
|
holidayDeduction(a,b,c,value,mainTableName,mainIdNow,psjbNow,zmjbNow,jrjbNow,departmentid,resourceid,fromdate,field28);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
numNow++;
|
|
|
|
|
//为空,本月插入一条就行
|
|
|
|
|
// 查询本月的主表id
|
|
|
|
|
Map<String, String> mainMapNow = getMonthMainId(mainTableName, departmentid, resourceid, fromdate);
|
|
|
|
|
log.info("-WorkLeaveAction- lastMonth-mainMapNow3:{}", mainMapNow);
|
|
|
|
|
String mainIdNow = mainMapNow.get("mainId");
|
|
|
|
|
String psjbNow = mainMapNow.get("psjb");
|
|
|
|
|
String zmjbNow = mainMapNow.get("zmjb");
|
|
|
|
|
String jrjbNow = mainMapNow.get("jrjb");
|
|
|
|
|
String psjbsyNow = mainMapNow.get("psjbsy");
|
|
|
|
|
String zmjbsyNow = mainMapNow.get("zmjbsy");
|
|
|
|
|
String jrjbsyNow = mainMapNow.get("jrjbsy");
|
|
|
|
|
// 赋值给变量:a,b,c
|
|
|
|
|
if(numNow==1){
|
|
|
|
|
if(!StringUtils.equals(psjbsyNow,"")){
|
|
|
|
|
a = Double.parseDouble(psjbsyNow);
|
|
|
|
|
}else{
|
|
|
|
|
a = Double.parseDouble("".equals(psjbNow)?"0":psjbNow);
|
|
|
|
|
}
|
|
|
|
|
if(!StringUtils.equals(zmjbsyNow,"")){
|
|
|
|
|
b = Double.parseDouble(zmjbsyNow);
|
|
|
|
|
}else{
|
|
|
|
|
b = Double.parseDouble("".equals(zmjbNow)?"0":zmjbNow);
|
|
|
|
|
}
|
|
|
|
|
if(!StringUtils.equals(jrjbsyNow,"")){
|
|
|
|
|
c = Double.parseDouble(jrjbsyNow);
|
|
|
|
|
}else{
|
|
|
|
|
c = Double.parseDouble("".equals(jrjbNow)?"0":jrjbNow);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
rs.executeUpdate(insert1, mainIdNow, resourceid, "5", fromdate,
|
|
|
|
|
map.get("fromtime"), map.get("todate"), map.get("totime"), duration, "",requestId);
|
|
|
|
|
// 只要插入1条调休明细就执行一次顺序
|
|
|
|
|
holidayDeduction(a,b,c,duration,mainTableName,mainIdNow,psjbNow,zmjbNow,jrjbNow,departmentid,resourceid,fromdate,field28);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} catch (ParseException e) {
|
|
|
|
|
return Action.FAILURE_AND_CONTINUE;
|
|
|
|
|
}
|
|
|
|
|
} else if (StringUtils.equals(field28, "6")) {
|
|
|
|
|
double duration = Double.parseDouble(map.get("duration"));
|
|
|
|
|
//三月发放
|
|
|
|
|
//1.查询上上个月、上个月、本月加班剩余时长:lastTwoSum , lastSum , 本月剩余:nowSum
|
|
|
|
|
// 上上月
|
|
|
|
|
String lastTwoMonth;
|
|
|
|
|
// 上月
|
|
|
|
|
String lastMonth;
|
|
|
|
|
try {
|
|
|
|
|
lastTwoMonth = getLastTwoMonth(fromdate);
|
|
|
|
|
lastMonth = getLastTwoMonth(fromdate);
|
|
|
|
|
// 上上个月加班剩余
|
|
|
|
|
String lastTwoBalance = "";
|
|
|
|
|
// 上个月加班剩余
|
|
|
|
|
String lastBalance = "";
|
|
|
|
|
if (i == 0) {
|
|
|
|
|
lastTwoBalance = getOvertimeBalance(mainTableName, departmentid, resourceid, lastTwoMonth,field28);
|
|
|
|
|
fpyeTwo = Double.parseDouble("".equals(lastTwoBalance)?"0":lastTwoBalance);
|
|
|
|
|
|
|
|
|
|
lastBalance = getOvertimeBalance(mainTableName, departmentid, resourceid, lastMonth,field28);
|
|
|
|
|
fpye = Double.parseDouble("".equals(lastBalance)?"0":lastBalance);
|
|
|
|
|
log.info("-WorkLeaveAction- lastTwoMonth-lastTwoBalance:{},lastTwoBalance:{},lastTwoBalance:{},lastTwoBalance:{}" +
|
|
|
|
|
lastTwoBalance, fpyeTwo,lastBalance,fpye);
|
|
|
|
|
}
|
|
|
|
|
String insert1 = "insert into " + mainTableName + "_dt2" + " (mainid,qjr,qjlx,ksrq,kssj,jsrq,jssj,qjsc,qjyy,jblc) values (?,?,?,?,?,?,?,?,?,?)";
|
|
|
|
|
// 上月和本月剩余和小于请假时长
|
|
|
|
|
if (Double.parseDouble("".equals(lastTwoBalance)?"0":lastTwoBalance) + Double.parseDouble("".equals(lastBalance)?"0":lastBalance) + Double.parseDouble("".equals(nowBalance)?"0":nowBalance) < Double.parseDouble(durationdb)) {
|
|
|
|
|
return Action.FAILURE_AND_CONTINUE;
|
|
|
|
|
} else {
|
|
|
|
|
// 加班时长够用
|
|
|
|
|
// 上上个月时长够用,直接插入明细表2
|
|
|
|
|
if (StringUtils.isNotBlank(lastTwoBalance)) {
|
|
|
|
|
numLast2++;
|
|
|
|
|
// 查询上上个月的主表id
|
|
|
|
|
Map<String, String> mainMapLast2 = getMonthMainId(mainTableName, departmentid, resourceid, lastTwoMonth);
|
|
|
|
|
String mainIdLast2 = mainMapLast2.get("mainId");
|
|
|
|
|
String psjbLast2 = mainMapLast2.get("psjb");
|
|
|
|
|
String zmjbLast2 = mainMapLast2.get("zmjb");
|
|
|
|
|
String jrjbLast2 = mainMapLast2.get("jrjb");
|
|
|
|
|
String psjbsyLast2 = mainMapLast2.get("psjbsy");
|
|
|
|
|
String zmjbsyLast2 = mainMapLast2.get("zmjbsy");
|
|
|
|
|
String jrjbsyLast2 = mainMapLast2.get("jrjbsy");
|
|
|
|
|
log.info("-WorkLeaveAction- lastTwoMonth-mainMapLast2:{}", mainMapLast2);
|
|
|
|
|
// 赋值给变量:a2,b2,c2
|
|
|
|
|
if(numLast2==1){
|
|
|
|
|
if(!StringUtils.equals(psjbsyLast2,"")){
|
|
|
|
|
a2 = Double.parseDouble(psjbsyLast2);
|
|
|
|
|
}else{
|
|
|
|
|
a2 = Double.parseDouble("".equals(psjbLast2)?"0":psjbLast2);
|
|
|
|
|
}
|
|
|
|
|
if(!StringUtils.equals(zmjbsyLast2,"")){
|
|
|
|
|
b2 = Double.parseDouble(zmjbsyLast2);
|
|
|
|
|
}else{
|
|
|
|
|
b2 = Double.parseDouble("".equals(zmjbLast2)?"0":zmjbLast2);
|
|
|
|
|
}
|
|
|
|
|
if(!StringUtils.equals(jrjbsyLast2,"")){
|
|
|
|
|
c2 = Double.parseDouble(jrjbsyLast2);
|
|
|
|
|
}else{
|
|
|
|
|
c2 = Double.parseDouble("".equals(jrjbLast2)?"0":jrjbLast2);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// 上上个月加班大于
|
|
|
|
|
if (Double.parseDouble("".equals(lastTwoBalance)?"0":lastTwoBalance) > Double.parseDouble(durationdb)) {
|
|
|
|
|
// 全部插入上上个月
|
|
|
|
|
rs.executeUpdate(insert1, mainIdLast2, resourceid, "5", fromdate,
|
|
|
|
|
map.get("fromtime"), map.get("todate"), map.get("totime"), duration, "",requestId);
|
|
|
|
|
// 只要插入1条调休明细就执行一次顺序
|
|
|
|
|
holidayDeduction(a2,b2,c2,duration,mainTableName,mainIdLast2,psjbLast2,zmjbLast2,jrjbLast2,departmentid,resourceid,fromdate,field28);
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
// 不够用,要插入上个月明细2
|
|
|
|
|
if (duration < fpyeTwo) {
|
|
|
|
|
//小于上上月剩余,插入上上月明细
|
|
|
|
|
rs.executeUpdate(insert1, mainIdLast2, resourceid, "5", fromdate,
|
|
|
|
|
map.get("fromtime"), map.get("todate"), map.get("totime"), duration, "",requestId);
|
|
|
|
|
fpyeTwo = fpyeTwo - duration;
|
|
|
|
|
log.info("-WorkLeaveAction- lastTwoMonth-fpyeTwo2:{}", fpyeTwo);
|
|
|
|
|
// 只要插入1条调休明细就执行一次顺序
|
|
|
|
|
holidayDeduction(a2,b2,c2,duration,mainTableName,mainIdLast2,psjbLast2,zmjbLast2,jrjbLast2,departmentid,resourceid,fromdate,field28);
|
|
|
|
|
} else {
|
|
|
|
|
if (fpyeTwo >= 0) {
|
|
|
|
|
//特殊情况fpyeTwo=0,上上月不用插入明细了。。。。。
|
|
|
|
|
if(fpyeTwo>0){
|
|
|
|
|
// 上上月还有剩余,但是不够扣除
|
|
|
|
|
rs.executeUpdate(insert1, mainIdLast2, resourceid, "5", fromdate,
|
|
|
|
|
map.get("fromtime"), map.get("todate"), map.get("totime"), fpyeTwo, "",requestId);
|
|
|
|
|
// 只要插入1条调休明细就执行一次顺序
|
|
|
|
|
holidayDeduction(a2,b2,c2,fpyeTwo,mainTableName,mainIdLast2,psjbLast2,zmjbLast2,jrjbLast2,departmentid,resourceid,fromdate,field28);
|
|
|
|
|
fpyeTwo = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//剩余
|
|
|
|
|
double value = duration - fpyeTwo;
|
|
|
|
|
log.info("-WorkLeaveAction- lastTwoMonth-value:{}", value);
|
|
|
|
|
|
|
|
|
|
// 判断上个月是否有剩余
|
|
|
|
|
if (StringUtils.isNotBlank(lastBalance)) {
|
|
|
|
|
numLast++;
|
|
|
|
|
// 查询上月的主表id
|
|
|
|
|
Map<String, String> mainMapLast = getMonthMainId(mainTableName, departmentid, resourceid, lastMonth);
|
|
|
|
|
log.info("-WorkLeaveAction- lastMonth-mainMapLast:{}", mainMapLast);
|
|
|
|
|
String mainIdLast = mainMapLast.get("mainId");
|
|
|
|
|
String psjbLast = mainMapLast.get("psjb");
|
|
|
|
|
String zmjbLast = mainMapLast.get("zmjb");
|
|
|
|
|
String jrjbLast = mainMapLast.get("jrjb");
|
|
|
|
|
String psjbsyLast = mainMapLast2.get("psjbsy");
|
|
|
|
|
String zmjbsyLast = mainMapLast2.get("zmjbsy");
|
|
|
|
|
String jrjbsyLast = mainMapLast2.get("jrjbsy");
|
|
|
|
|
// 赋值给变量:a,b,c
|
|
|
|
|
if(numLast==1){
|
|
|
|
|
if(!StringUtils.equals(psjbsyLast,"")){
|
|
|
|
|
a1 = Double.parseDouble(psjbsyLast);
|
|
|
|
|
}else{
|
|
|
|
|
a1 = Double.parseDouble("".equals(psjbLast)?"0":psjbLast);
|
|
|
|
|
}
|
|
|
|
|
if(!StringUtils.equals(zmjbsyLast,"")){
|
|
|
|
|
b1 = Double.parseDouble(zmjbsyLast);
|
|
|
|
|
}else{
|
|
|
|
|
b1 = Double.parseDouble("".equals(zmjbLast)?"0":zmjbLast);
|
|
|
|
|
}
|
|
|
|
|
if(!StringUtils.equals(jrjbsyLast,"")){
|
|
|
|
|
c1 = Double.parseDouble(jrjbsyLast);
|
|
|
|
|
}else{
|
|
|
|
|
c1 = Double.parseDouble("".equals(jrjbLast)?"0":jrjbLast);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(fpye > value){
|
|
|
|
|
// 上月剩余大于,直接抵扣
|
|
|
|
|
rs.executeUpdate(insert1, mainIdLast, resourceid, "5", fromdate,
|
|
|
|
|
map.get("fromtime"), map.get("todate"), map.get("totime"), value, "",requestId);
|
|
|
|
|
fpye = fpye - value;
|
|
|
|
|
log.info("-WorkLeaveAction- lastTwoMonth-fpye3:{}", fpye);
|
|
|
|
|
// 只要插入1条调休明细就执行一次顺序
|
|
|
|
|
holidayDeduction(a1,b1,c1,value,mainTableName,mainIdLast,psjbLast,zmjbLast,jrjbLast,departmentid,resourceid,fromdate,field28);
|
|
|
|
|
|
|
|
|
|
}else{
|
|
|
|
|
// 否则,上个月也不够 本月接着扣除
|
|
|
|
|
double value2 = value - Double.parseDouble("".equals(lastBalance)?"0":lastBalance);
|
|
|
|
|
log.info("-WorkLeaveAction- lastTwoMonth-value2:{}", value2);
|
|
|
|
|
rs.executeUpdate(insert1, mainIdLast, resourceid, "5", fromdate,
|
|
|
|
|
map.get("fromtime"), map.get("todate"), map.get("totime"), lastBalance, "",requestId);
|
|
|
|
|
// 只要插入1条调休明细就执行一次顺序
|
|
|
|
|
holidayDeduction(a1,b1,c1,Double.parseDouble("".equals(lastBalance)?"0":lastBalance),mainTableName,mainIdLast,psjbLast,zmjbLast,jrjbLast,departmentid,resourceid,fromdate,field28);
|
|
|
|
|
//本月剩余:
|
|
|
|
|
numNow++;
|
|
|
|
|
// 查询本月的主表id
|
|
|
|
|
Map<String, String> mainMap = getMonthMainId(mainTableName, departmentid, resourceid, fromdate);
|
|
|
|
|
String mainId = mainMap.get("mainId");
|
|
|
|
|
String psjb = mainMap.get("psjb");
|
|
|
|
|
String zmjb = mainMap.get("zmjb");
|
|
|
|
|
String jrjb = mainMap.get("jrjb");
|
|
|
|
|
String psjbsy = mainMap.get("psjbsy");
|
|
|
|
|
String zmjbsy = mainMap.get("zmjbsy");
|
|
|
|
|
String jrjbsy = mainMap.get("jrjbsy");
|
|
|
|
|
// 赋值给变量:a,b,c
|
|
|
|
|
if(numNow==1){
|
|
|
|
|
if(!StringUtils.equals(psjbsy,"")){
|
|
|
|
|
a = Double.parseDouble(psjbsy);
|
|
|
|
|
}else{
|
|
|
|
|
a = Double.parseDouble("".equals(psjb)?"0":psjb);
|
|
|
|
|
}
|
|
|
|
|
if(!StringUtils.equals(zmjbsy,"")){
|
|
|
|
|
b = Double.parseDouble(zmjbsy);
|
|
|
|
|
}else{
|
|
|
|
|
b = Double.parseDouble("".equals(zmjb)?"0":zmjb);
|
|
|
|
|
}
|
|
|
|
|
if(!StringUtils.equals(jrjbsy,"")){
|
|
|
|
|
c = Double.parseDouble(jrjbsy);
|
|
|
|
|
}else{
|
|
|
|
|
c = Double.parseDouble("".equals(jrjb)?"0":jrjb);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
log.info("-WorkLeaveAction- nowMonth-mainMap:{}", mainMap);
|
|
|
|
|
rs.executeUpdate(insert1, mainId, resourceid, "5", fromdate,
|
|
|
|
|
map.get("fromtime"), map.get("todate"), map.get("totime"), value2, "",requestId);
|
|
|
|
|
fpye = 0;
|
|
|
|
|
// 只要插入1条调休明细就执行一次顺序
|
|
|
|
|
holidayDeduction(a,b,c,value2,mainTableName,mainId,psjb,zmjb,jrjb,departmentid,resourceid,fromdate,field28);
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
numNow++;
|
|
|
|
|
// 上月为空,本月全部抵扣
|
|
|
|
|
// 查询本月的主表id
|
|
|
|
|
Map<String, String> mainMap = getMonthMainId(mainTableName, departmentid, resourceid, fromdate);
|
|
|
|
|
log.info("-WorkLeaveAction- nowMonth2-mainMap2:{}", mainMap);
|
|
|
|
|
String mainId = mainMap.get("mainId");
|
|
|
|
|
String psjb = mainMap.get("psjb");
|
|
|
|
|
String zmjb = mainMap.get("zmjb");
|
|
|
|
|
String jrjb = mainMap.get("jrjb");
|
|
|
|
|
String psjbsy = mainMap.get("psjbsy");
|
|
|
|
|
String zmjbsy = mainMap.get("zmjbsy");
|
|
|
|
|
String jrjbsy = mainMap.get("jrjbsy");
|
|
|
|
|
// 赋值给变量:a,b,c
|
|
|
|
|
if(numNow==1){
|
|
|
|
|
if(!StringUtils.equals(psjbsy,"")){
|
|
|
|
|
a = Double.parseDouble(psjbsy);
|
|
|
|
|
}else{
|
|
|
|
|
a = Double.parseDouble("".equals(psjb)?"0":psjb);
|
|
|
|
|
}
|
|
|
|
|
if(!StringUtils.equals(zmjbsy,"")){
|
|
|
|
|
b = Double.parseDouble(zmjbsy);
|
|
|
|
|
}else{
|
|
|
|
|
b = Double.parseDouble("".equals(zmjb)?"0":zmjb);
|
|
|
|
|
}
|
|
|
|
|
if(!StringUtils.equals(jrjbsy,"")){
|
|
|
|
|
c = Double.parseDouble(jrjbsy);
|
|
|
|
|
}else{
|
|
|
|
|
c = Double.parseDouble("".equals(jrjb)?"0":jrjb);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
rs.executeUpdate(insert1, mainId, resourceid, "5", fromdate,
|
|
|
|
|
map.get("fromtime"), map.get("todate"), map.get("totime"), value, "",requestId);
|
|
|
|
|
fpyeTwo = 0;
|
|
|
|
|
// 只要插入1条调休明细就执行一次顺序
|
|
|
|
|
holidayDeduction(a,b,c,value,mainTableName,mainId,psjb,zmjb,jrjb,departmentid,resourceid,fromdate,field28);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
// 上月和本月剩余和小于请假时长
|
|
|
|
|
if ((Double.parseDouble("".equals(lastBalance)?"0":lastBalance) + Double.parseDouble("".equals(nowBalance)?"0":nowBalance)) < Double.parseDouble(durationdb)) {
|
|
|
|
|
return Action.FAILURE_AND_CONTINUE;
|
|
|
|
|
} else {
|
|
|
|
|
// 上个月时长够用,直接插入明细表2
|
|
|
|
|
if (StringUtils.isNotBlank(lastBalance)) {
|
|
|
|
|
numLast++;
|
|
|
|
|
// 查询上个月的主表id
|
|
|
|
|
Map<String,String> mainMapLast = getMonthMainId(mainTableName, departmentid, resourceid, lastMonth);
|
|
|
|
|
log.info("-WorkLeaveAction- lastMonth-mainMapLast3:{}", mainMapLast);
|
|
|
|
|
String mainIdLast = mainMapLast.get("mainId");
|
|
|
|
|
String psjbLast = mainMapLast.get("psjb");
|
|
|
|
|
String zmjbLast = mainMapLast.get("zmjb");
|
|
|
|
|
String jrjbLast = mainMapLast.get("jrjb");
|
|
|
|
|
String psjbsyLast = mainMapLast.get("psjbsy");
|
|
|
|
|
String zmjbsyLast = mainMapLast.get("zmjbsy");
|
|
|
|
|
String jrjbsyLast = mainMapLast.get("jrjbsy");
|
|
|
|
|
// 赋值给变量:a,b,c
|
|
|
|
|
if(numLast==1){
|
|
|
|
|
if(!StringUtils.equals(psjbsyLast,"")){
|
|
|
|
|
a1 = Double.parseDouble(psjbsyLast);
|
|
|
|
|
}else{
|
|
|
|
|
a1 = Double.parseDouble("".equals(psjbLast)?"0":psjbLast);
|
|
|
|
|
}
|
|
|
|
|
if(!StringUtils.equals(zmjbsyLast,"")){
|
|
|
|
|
b1 = Double.parseDouble(zmjbsyLast);
|
|
|
|
|
}else{
|
|
|
|
|
b1 = Double.parseDouble("".equals(zmjbLast)?"0":zmjbLast);
|
|
|
|
|
}
|
|
|
|
|
if(!StringUtils.equals(jrjbsyLast,"")){
|
|
|
|
|
c1 = Double.parseDouble(jrjbsyLast);
|
|
|
|
|
}else{
|
|
|
|
|
c1 = Double.parseDouble("".equals(jrjbLast)?"0":jrjbLast);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// 上个月加班够用
|
|
|
|
|
if (Double.parseDouble("".equals(lastBalance)?"0":lastBalance) > Double.parseDouble(durationdb)) {
|
|
|
|
|
rs.executeUpdate(insert1, mainIdLast, resourceid, "5", fromdate,
|
|
|
|
|
map.get("fromtime"), map.get("todate"), map.get("totime"), duration, "",requestId);
|
|
|
|
|
// 只要插入1条调休明细就执行一次顺序
|
|
|
|
|
holidayDeduction(a1,b1,c1,duration,mainTableName,mainIdLast,psjbLast,zmjbLast,jrjbLast,departmentid,resourceid,fromdate,field28);
|
|
|
|
|
} else {
|
|
|
|
|
// 不够用,要插入2条明细
|
|
|
|
|
if (duration < fpye) {
|
|
|
|
|
//小于上月剩余,插入上月明细
|
|
|
|
|
rs.executeUpdate(insert1, mainIdLast, resourceid, "5", fromdate,
|
|
|
|
|
map.get("fromtime"), map.get("todate"), map.get("totime"), duration, "",requestId);
|
|
|
|
|
fpye = fpye - duration;
|
|
|
|
|
log.info("-WorkLeaveAction- lastTwoMonth-fpye6:{}", fpye);
|
|
|
|
|
// 只要插入1条调休明细就执行一次顺序
|
|
|
|
|
holidayDeduction(a1,b1,c1,duration,mainTableName,mainIdLast,psjbLast,zmjbLast,jrjbLast,departmentid,resourceid,fromdate,field28);
|
|
|
|
|
} else {
|
|
|
|
|
if (fpye >= 0) {
|
|
|
|
|
if(fpye>0){
|
|
|
|
|
// 上月还有剩余,但是不够扣除
|
|
|
|
|
rs.executeUpdate(insert1, mainIdLast, resourceid, "5", fromdate,
|
|
|
|
|
map.get("fromtime"), map.get("todate"), map.get("totime"), fpye, "",requestId);
|
|
|
|
|
// 只要插入1条调休明细就执行一次顺序
|
|
|
|
|
holidayDeduction(a1,b1,c1,fpye,mainTableName,mainIdLast,psjbLast,zmjbLast,jrjbLast,departmentid,resourceid,fromdate,field28);
|
|
|
|
|
}
|
|
|
|
|
numNow++;
|
|
|
|
|
//本月剩余:
|
|
|
|
|
double value = duration - fpye;
|
|
|
|
|
log.info("-WorkLeaveAction- lastTwoMonth-value5:{}", value);
|
|
|
|
|
// 查询本月的主表id
|
|
|
|
|
Map<String,String> mainMap = getMonthMainId(mainTableName, departmentid, resourceid, fromdate);
|
|
|
|
|
String mainId = mainMap.get("mainId");
|
|
|
|
|
String psjb = mainMap.get("psjb");
|
|
|
|
|
String zmjb = mainMap.get("zmjb");
|
|
|
|
|
String jrjb = mainMap.get("jrjb");
|
|
|
|
|
String psjbsy = mainMap.get("psjbsy");
|
|
|
|
|
String zmjbsy = mainMap.get("zmjbsy");
|
|
|
|
|
String jrjbsy = mainMap.get("jrjbsy");
|
|
|
|
|
// 赋值给变量:a,b,c
|
|
|
|
|
if(numNow==1){
|
|
|
|
|
if(!StringUtils.equals(psjbsy,"")){
|
|
|
|
|
a = Double.parseDouble(psjbsy);
|
|
|
|
|
}else{
|
|
|
|
|
a = Double.parseDouble("".equals(psjb)?"0":psjb);
|
|
|
|
|
}
|
|
|
|
|
if(!StringUtils.equals(zmjbsy,"")){
|
|
|
|
|
b = Double.parseDouble(zmjbsy);
|
|
|
|
|
}else{
|
|
|
|
|
b = Double.parseDouble("".equals(zmjb)?"0":zmjb);
|
|
|
|
|
}
|
|
|
|
|
if(!StringUtils.equals(jrjbsy,"")){
|
|
|
|
|
b = Double.parseDouble(jrjbsy);
|
|
|
|
|
}else{
|
|
|
|
|
c = Double.parseDouble("".equals(jrjb)?"0":jrjb);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
rs.executeUpdate(insert1, mainId, resourceid, "5", fromdate,
|
|
|
|
|
map.get("fromtime"), map.get("todate"), map.get("totime"), value, "",requestId);
|
|
|
|
|
// 上月加班剩余清零
|
|
|
|
|
fpye = 0;
|
|
|
|
|
// 只要插入1条调休明细就执行一次顺序
|
|
|
|
|
holidayDeduction(a,b,c,value,mainTableName,mainId,psjb,zmjb,jrjb,departmentid,resourceid,fromdate,field28);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
numNow++;
|
|
|
|
|
//为空,本月插入一条就行
|
|
|
|
|
// 查询本月的主表id
|
|
|
|
|
Map<String,String> mainMap = getMonthMainId(mainTableName, departmentid, resourceid, fromdate);
|
|
|
|
|
log.info("-WorkLeaveAction- nowMonth-mainMap555:{}", mainMap);
|
|
|
|
|
String mainId = mainMap.get("mainId");
|
|
|
|
|
String psjb = mainMap.get("psjb");
|
|
|
|
|
String zmjb = mainMap.get("zmjb");
|
|
|
|
|
String jrjb = mainMap.get("jrjb");
|
|
|
|
|
String psjbsy = mainMap.get("psjbsy");
|
|
|
|
|
String zmjbsy = mainMap.get("zmjbsy");
|
|
|
|
|
String jrjbsy = mainMap.get("jrjbsy");
|
|
|
|
|
// 赋值给变量:a,b,c
|
|
|
|
|
if(numNow==1){
|
|
|
|
|
if(!StringUtils.equals(psjbsy,"")){
|
|
|
|
|
a = Double.parseDouble(psjbsy);
|
|
|
|
|
}else{
|
|
|
|
|
a = Double.parseDouble("".equals(psjb)?"0":psjb);
|
|
|
|
|
}
|
|
|
|
|
if(!StringUtils.equals(zmjbsy,"")){
|
|
|
|
|
b = Double.parseDouble(zmjbsy);
|
|
|
|
|
}else{
|
|
|
|
|
b = Double.parseDouble("".equals(zmjb)?"0":zmjb);
|
|
|
|
|
}
|
|
|
|
|
if(!StringUtils.equals(jrjbsy,"")){
|
|
|
|
|
b = Double.parseDouble(jrjbsy);
|
|
|
|
|
}else{
|
|
|
|
|
c = Double.parseDouble("".equals(jrjb)?"0":jrjb);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
rs.executeUpdate(insert1, mainId, resourceid, "5", fromdate,
|
|
|
|
|
map.get("fromtime"), map.get("todate"), map.get("totime"), duration, "",requestId);
|
|
|
|
|
// 只要插入1条调休明细就执行一次顺序
|
|
|
|
|
holidayDeduction(a,b,c,duration,mainTableName,mainId,psjb,zmjb,jrjb,departmentid,resourceid,fromdate,field28);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
} catch (ParseException e) {
|
|
|
|
|
return Action.FAILURE_AND_CONTINUE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
log.info("调休申请流程转建模数据成功!");
|
|
|
|
|
return Action.SUCCESS;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 假期余额按顺序扣除(提取公共方法)
|
|
|
|
|
*
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
public static void holidayDeduction(double a, double b, double c, double duration,String mainTableName,String id,String psjb,
|
|
|
|
|
String zmjb,String jrjb,String bm,String xm,String fromDate,String field28) {
|
|
|
|
|
RecordSet rs = new RecordSet();
|
|
|
|
|
log.info("-holidayDeduction- a:{},b:{},c:{},duration:{},mainTableName:{},id:{},psjb:{},zmjb:{},jrjb:{}",
|
|
|
|
|
a,b,c,duration,mainTableName,id,psjb,zmjb,jrjb);
|
|
|
|
|
// 增加判断,加班时长扣除顺序:平时>休息日>节假日
|
|
|
|
|
String updateSql;
|
|
|
|
|
double value = 0;
|
|
|
|
|
// 1.平时加班够用
|
|
|
|
|
if(a>duration){
|
|
|
|
|
a = a-duration;
|
|
|
|
|
value = Double.parseDouble("".equals(psjb)?"0":psjb) - a;
|
|
|
|
|
// 抵扣 = a - value
|
|
|
|
|
// 更新主表:平时加班汇总字段:a-duration
|
|
|
|
|
updateSql = "update " + mainTableName+ " set psjbsy = ? , psjbdk = ? where id = ? ";
|
|
|
|
|
log.info("-holidayDeduction- updateSql1:{}", updateSql);
|
|
|
|
|
rs.executeUpdate(updateSql,a,value,id);
|
|
|
|
|
// 更新加班总剩余
|
|
|
|
|
String balance = getOvertimeBalance(mainTableName, bm, xm, fromDate, field28);
|
|
|
|
|
updateSql = "update " + mainTableName+ " set jbzsy = ? where id = ? ";
|
|
|
|
|
log.info("-holidayDeduction更新加班总剩余- updateSql:{}", updateSql);
|
|
|
|
|
rs.executeUpdate(updateSql,balance,id);
|
|
|
|
|
}else {
|
|
|
|
|
// 2.平时加班不够,休息日加班补上
|
|
|
|
|
if(a+b>duration){
|
|
|
|
|
//a = 0;
|
|
|
|
|
// 平时加班清零:0,然 duration-a
|
|
|
|
|
b = a+b-duration;
|
|
|
|
|
value = Double.parseDouble("".equals(zmjb)?"0":zmjb)-b;
|
|
|
|
|
// 更新主表:休息日加班汇总字段
|
|
|
|
|
updateSql = "update " + mainTableName+ " set psjbsy = ? , psjbdk = ?, zmjbsy = ?,zmjbdk = ? where id = ? ";
|
|
|
|
|
log.info("-holidayDeduction- updateSql2:{}", updateSql);
|
|
|
|
|
rs.executeUpdate(updateSql,"0.0",psjb,b,value,id);
|
|
|
|
|
// 更新加班总剩余
|
|
|
|
|
String balance = getOvertimeBalance(mainTableName, bm, xm, fromDate, field28);
|
|
|
|
|
updateSql = "update " + mainTableName+ " set jbzsy = ? where id = ? ";
|
|
|
|
|
log.info("-holidayDeduction更新加班总剩余- updateSql:{}", updateSql);
|
|
|
|
|
rs.executeUpdate(updateSql,balance,id);
|
|
|
|
|
}else{
|
|
|
|
|
// 3.周末加班也不够,节假日加班补上
|
|
|
|
|
// 平时、休息日加班都清零
|
|
|
|
|
// a = 0;
|
|
|
|
|
//b = 0;
|
|
|
|
|
c = a+b+c-duration;
|
|
|
|
|
value = Double.parseDouble("".equals(jrjb)?"0":jrjb)-c;
|
|
|
|
|
// 更新主表:节假日
|
|
|
|
|
updateSql = "update " + mainTableName+ " set psjbsy = ? , psjbdk = ? , zmjbsy = ? ,zmjbdk=?, jrjbsy = ?,jrjbdk=? where id = ? ";
|
|
|
|
|
rs.executeUpdate(updateSql,"0.0",psjb,"0.0",zmjb,c,value,id);
|
|
|
|
|
log.info("-holidayDeduction- updateSql3:{}", updateSql);
|
|
|
|
|
// 更新加班总剩余
|
|
|
|
|
String balance = getOvertimeBalance(mainTableName, bm, xm, fromDate, field28);
|
|
|
|
|
updateSql = "update " + mainTableName+ " set jbzsy = ? where id = ? ";
|
|
|
|
|
log.info("-holidayDeduction更新加班总剩余- updateSql:{}", updateSql);
|
|
|
|
|
rs.executeUpdate(updateSql,balance,id);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 查询月主表id
|
|
|
|
|
*
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
public static Map<String,String> getMonthMainId(String tableName, String bm, String xm, String fromDate) {
|
|
|
|
|
Map<String,String> map = new HashMap<>();
|
|
|
|
|
RecordSet rs = new RecordSet();
|
|
|
|
|
String mainId = "";
|
|
|
|
|
String psjb = "";
|
|
|
|
|
String zmjb = "";
|
|
|
|
|
String jrjb = "";
|
|
|
|
|
String psjbsy = "";
|
|
|
|
|
String zmjbsy = "";
|
|
|
|
|
String jrjbsy = "";
|
|
|
|
|
String sql = " select id,psjb,psjbsy,zmjb,zmjbsy,jrjb,jrjbsy from " + tableName + " where bm = ? and xm = ? and ny = ? ";
|
|
|
|
|
log.info("-getLastMonthMainId- sql:{}", sql);
|
|
|
|
|
rs.executeQuery(sql, bm, xm, fromDate.substring(0, 7));
|
|
|
|
|
if (rs.next()) {
|
|
|
|
|
mainId = rs.getString("id");
|
|
|
|
|
psjb = rs.getString("psjb");
|
|
|
|
|
zmjb = rs.getString("zmjb");
|
|
|
|
|
jrjb = rs.getString("jrjb");
|
|
|
|
|
psjbsy = rs.getString("psjbsy");
|
|
|
|
|
zmjbsy = rs.getString("zmjbsy");
|
|
|
|
|
jrjbsy = rs.getString("jrjbsy");
|
|
|
|
|
map.put("mainId",mainId);
|
|
|
|
|
map.put("psjb",psjb);
|
|
|
|
|
map.put("zmjb",zmjb);
|
|
|
|
|
map.put("jrjb",jrjb);
|
|
|
|
|
map.put("psjbsy",psjbsy);
|
|
|
|
|
map.put("zmjbsy",zmjbsy);
|
|
|
|
|
map.put("jrjbsy",jrjbsy);
|
|
|
|
|
}
|
|
|
|
|
log.info("-getLastMonthMainId- mainId:{},psjb:{},zmjb:{},jrjb:{}", mainId,psjb,zmjb,jrjb);
|
|
|
|
|
return map;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 获取当前月加班余额
|
|
|
|
|
*
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
public static String getOvertimeBalance(String tableName, String bm, String xm, String fromDate,String field28) {
|
|
|
|
|
RecordSet rs = new RecordSet();
|
|
|
|
|
String jbzsy = "";
|
|
|
|
|
String sql = " select IF(IF(psjbsy is null,psjb,psjbsy) is null,0,IF(psjbsy is null,psjb,psjbsy)) + " +
|
|
|
|
|
" IF(IF(zmjbsy is null,zmjb,zmjbsy) is null,0,IF(zmjbsy is null,zmjb,zmjbsy)) + " +
|
|
|
|
|
" IF(IF(jrjbsy is null,jrjb,jrjbsy) is null,0,IF(jrjbsy is null,jrjb,jrjbsy)) as jbzsy from " + tableName + " where bm = ? and xm = ? and ny = ? and jblb = ?";
|
|
|
|
|
log.info("-getOvertimeBalance- sql:{}", sql);
|
|
|
|
|
rs.executeQuery(sql, bm, xm, fromDate.substring(0, 7),field28);
|
|
|
|
|
if (rs.next()) {
|
|
|
|
|
jbzsy = rs.getString("jbzsy");
|
|
|
|
|
}
|
|
|
|
|
log.info("-getOvertimeBalance- jbzsy:{}", jbzsy);
|
|
|
|
|
return jbzsy;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 获取当前月的上一个月
|
|
|
|
|
*
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
public static String getLastMonth(String fromDate) throws ParseException {
|
|
|
|
|
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM");
|
|
|
|
|
Date date = format.parse(fromDate);
|
|
|
|
|
Calendar calendar = Calendar.getInstance();
|
|
|
|
|
calendar.setTime(date); // 设置为当前时间
|
|
|
|
|
calendar.add(Calendar.MONTH, -1);
|
|
|
|
|
date = calendar.getTime();
|
|
|
|
|
return format.format(date);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 获取当前月的上两个月
|
|
|
|
|
*
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
public static String getLastTwoMonth(String fromDate) throws ParseException {
|
|
|
|
|
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM");
|
|
|
|
|
Date date = format.parse(fromDate);
|
|
|
|
|
Calendar calendar = Calendar.getInstance();
|
|
|
|
|
calendar.setTime(date); // 设置为当前时间
|
|
|
|
|
calendar.add(Calendar.MONTH, -2);
|
|
|
|
|
date = calendar.getTime();
|
|
|
|
|
return format.format(date);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 根据field28获取建模主表名称
|
|
|
|
|
*/
|
|
|
|
|
public static String getMainTableName(String field28) {
|
|
|
|
|
String mainTableName = "";
|
|
|
|
|
if (StringUtils.equals(field28, "4")) {//当月发放
|
|
|
|
|
mainTableName = "uf_jbtxdyfjs";
|
|
|
|
|
} else if (StringUtils.equals(field28, "5") || StringUtils.equals(field28, "6")) {//隔月发放/三月发放
|
|
|
|
|
mainTableName = "uf_jbtxgyfff";
|
|
|
|
|
} else {
|
|
|
|
|
//默认值(暂时)
|
|
|
|
|
mainTableName = "uf_jbtxdyfjs";
|
|
|
|
|
}
|
|
|
|
|
return mainTableName;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 根据requestInfo获取考勤表数据
|
|
|
|
|
*/
|
|
|
|
|
public static List<Map<String, String>> getKqFlowLeaveInfo(String requestId) {
|
|
|
|
|
List<Map<String, String>> list = new ArrayList<>();
|
|
|
|
|
RecordSet rs = new RecordSet();
|
|
|
|
|
String resourceid;
|
|
|
|
|
String fromdate;
|
|
|
|
|
String fromtime;
|
|
|
|
|
String todate;
|
|
|
|
|
String totime;
|
|
|
|
|
String duration;
|
|
|
|
|
String newleavetype;//请假类型
|
|
|
|
|
String departmentid;
|
|
|
|
|
String jobtitle;
|
|
|
|
|
String durationdb;
|
|
|
|
|
String field28;
|
|
|
|
|
|
|
|
|
|
String sql = "select resourceid,fromdate,fromtime,todate,totime,duration,newleavetype,departmentid,jobtitle,durationdb,field28 from kq_flow_split_leave a left join " +
|
|
|
|
|
"cus_fielddata b on a.resourceid = b.id where SCOPE = 'HrmCustomFieldByInfoType' and SCOPEID = '3' and a.requestId = ?";
|
|
|
|
|
rs.executeQuery(sql, requestId);
|
|
|
|
|
while (rs.next()) {
|
|
|
|
|
Map<String, String> map = new HashMap<>();
|
|
|
|
|
resourceid = rs.getString("resourceid");
|
|
|
|
|
fromdate = rs.getString("fromdate");
|
|
|
|
|
fromtime = rs.getString("fromtime");
|
|
|
|
|
todate = rs.getString("todate");
|
|
|
|
|
totime = rs.getString("totime");
|
|
|
|
|
duration = rs.getString("duration");
|
|
|
|
|
newleavetype = rs.getString("newleavetype");
|
|
|
|
|
departmentid = rs.getString("departmentid");
|
|
|
|
|
durationdb = rs.getString("durationdb");
|
|
|
|
|
jobtitle = rs.getString("jobtitle");
|
|
|
|
|
field28 = rs.getString("field28");
|
|
|
|
|
map.put("resourceid", resourceid);
|
|
|
|
|
map.put("fromdate", fromdate);
|
|
|
|
|
map.put("fromtime", fromtime);
|
|
|
|
|
map.put("todate", todate);
|
|
|
|
|
map.put("totime", totime);
|
|
|
|
|
map.put("duration", duration);
|
|
|
|
|
map.put("newleavetype", newleavetype);
|
|
|
|
|
map.put("departmentid", departmentid);
|
|
|
|
|
map.put("jobtitle", jobtitle);
|
|
|
|
|
map.put("durationdb", durationdb);
|
|
|
|
|
map.put("field28", field28);
|
|
|
|
|
list.add(map);
|
|
|
|
|
}
|
|
|
|
|
log.info("getKqFlowLeaveInfo-list:{}", list);
|
|
|
|
|
return list;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 根据requestInfo获取主表数据
|
|
|
|
|
*/
|
|
|
|
|
public static Map<String, Object> getMainInfo(RequestInfo requestInfo) {
|
|
|
|
|
Map<String, Object> map = new HashMap();
|
|
|
|
|
Property[] property = requestInfo.getMainTableInfo().getProperty();
|
|
|
|
|
for (int i = 0; i < property.length; i++) {
|
|
|
|
|
map.put(property[i].getName().toLowerCase(), Util.null2String(property[i].getValue()));
|
|
|
|
|
}
|
|
|
|
|
return map;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 根据requestInfo获取明细表数据
|
|
|
|
|
*/
|
|
|
|
|
public static List getDetailInfo(RequestInfo requestInfo, int num) {
|
|
|
|
|
DetailTable detailTable = requestInfo.getDetailTableInfo().getDetailTable(num);
|
|
|
|
|
//dtltable数组中的行数据集合
|
|
|
|
|
Row[] rows = detailTable.getRow();
|
|
|
|
|
List sublist = new ArrayList();
|
|
|
|
|
for (int i = 0; i < rows.length; i++) {
|
|
|
|
|
Row row = rows[i];
|
|
|
|
|
Map onerow = new HashMap();
|
|
|
|
|
sublist.add(onerow);
|
|
|
|
|
Cell[] cells = row.getCell();
|
|
|
|
|
for (int j = 0; j < cells.length; j++) {
|
|
|
|
|
Cell cell = cells[j];
|
|
|
|
|
onerow.put(cell.getName(), Util.null2String(cell.getValue()));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return sublist;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|