请假调休数据同步建模

批量导入更新数据
dev-chenwnj
Administrator 1 year ago
parent f52e8484df
commit d9cc795f64

@ -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;
}
}

@ -0,0 +1,298 @@
package weaver.interfaces.sskj.action;
import cn.hutool.core.date.DateUtil;
import com.engine.kq.biz.KQTimesArrayComInfo;
import com.engine.sskj.util.SskjUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import weaver.conn.RecordSet;
import weaver.general.BaseBean;
import weaver.general.Util;
import weaver.interfaces.workflow.action.Action;
import weaver.soa.workflow.request.*;
import java.util.*;
/**
*
*/
@Slf4j
public class WorkOverTimeAction implements Action {
@Override
public String execute(RequestInfo requestInfo) {
BaseBean bb = new BaseBean();
RecordSet rs = new RecordSet();
SskjUtil sskjUtil = new SskjUtil();
KQTimesArrayComInfo kqTimesArrayComInfo = new KQTimesArrayComInfo();
//获取流程requestId
String requestId = Util.null2String(requestInfo.getRequestid());
// 根据requestId查询考勤建模表信息
List<Map<String, String>> list = getKqFlowOverTimeInfo(requestId);
//遍历数据更新
for (Map<String, String> map : list) {
// 部门
String bm = map.get("departmentid");
// 姓名
String xm = map.get("resourceid");
//日期
String fromdate = map.get("fromdate").substring(0, 7);
// 加班类型
String changetype = map.get("changetype");
// 加班类别
String field28 = map.get("field28");
// 获取建模主表名称
String mainTableName = getMainTableName(field28);
// 1.先判断建模主表是否有记录
String id = "";
String sql2 = " select id from " + mainTableName + " where bm = ? and xm = ? and ny = ? and jblb = ? ";
log.info("-WorkOverTimeAction- sql2{}",sql2);
rs.executeQuery(sql2, bm,xm,fromdate,field28);
if (rs.next()) {
id = rs.getString("id");
}
log.info("-WorkOverTimeAction- id{}",id);
Map<String, String> tableNameMap = getDtlTableName(changetype, mainTableName);
String dtlTableName = tableNameMap.get("dtlTableName");
String updateName = tableNameMap.get("updateName");
log.info("-WorkOverTimeAction- tableNameMap{}",tableNameMap);
String insert_detail;
String updateSql;
String conOvertimeModeId = "";
if (StringUtils.isBlank(id)) {
// 2. 新增主表信息,再新增明细表信息
String insert_main = "insert into " + mainTableName + " (bm,xm,ny,jblb,formmodeid, modedatacreater, modedatacreatertype, modedatacreatedate, modedatacreatetime, MODEUUID) " +
" values (?,?,?,?,?,?,?,?,?,?) ";
// 3.权限重构
if(StringUtils.equals(mainTableName,"uf_jbtxdyfjs")){
//当月
conOvertimeModeId = bb.getPropValue("project_sskj", "workOvertimeDyModeId");
}else{
//隔月
conOvertimeModeId = bb.getPropValue("project_sskj", "workOvertimeGyModeId");
}
Integer modedatacreater = 1;
Integer modedatacreatertype = 0;
String modedatacreatedate = DateUtil.format(new Date(), "yyyy-MM-dd");
String modedatacreatetime = DateUtil.format(new Date(), "HH:mm:ss");
String uuid = UUID.randomUUID().toString();
log.info("-WorkOverTimeAction-insert_main sql[{}]",insert_main);
boolean b = rs.executeUpdate(insert_main, bm, xm, fromdate,field28, conOvertimeModeId, modedatacreater, modedatacreatertype, modedatacreatedate, modedatacreatetime, uuid);
log.info("addFlag{}" , b);
if (b) {
String billid = "-1";
// 2. 先查询主表id
//String main_id = "";
//String sql3 = " select id from " + mainTableName + " where bm = ? and xm = ? and ny = ? and jblb = ? ";
String sql3 = " select id from " + mainTableName + " where MODEUUID = ? ";
log.info("-WorkOverTimeAction- sql3{}",sql3);
rs.executeQuery(sql3, uuid);
if (rs.next()) {
billid = Util.null2String(rs.getString("id"));
}
log.info("billid{}" , billid);
sskjUtil.modePerRecon(modedatacreater, conOvertimeModeId, billid);
// 3.新增明细表数据,需先判断加班类型
insert_detail = "insert into "+ dtlTableName + " (mainid,jbry,szbm,gw,ksrq,kssj,jsrq,jssj,jbsch,xglc,lcgzrq) values (?,?,?,?,?,?,?,?,?,?,?) ";
rs.executeUpdate(insert_detail, billid,xm,bm,map.get("jobtitle"), map.get("fromdate"),
map.get("fromtime"), map.get("todate"),map.get("totime"),map.get("duration"),requestId,map.get("belongdate"));
// 4.更新主表信息
updateSql = "update " + mainTableName + " set " + updateName + "= ?,jbzsy = ? where id = ? ";
log.info("更新首条加班时长到主表-sql:{}",updateSql);
rs.executeUpdate(updateSql,map.get("duration"),map.get("duration"),billid);
}else{
log.info("加班申请流程转建模数据失败!");
return Action.FAILURE_AND_CONTINUE;
}
} else {
// 更新主表信息之前,先查询有没有事假记录
boolean b1 = sskjUtil.handleCasLeave(xm, map.get("belongdate"), requestId, Double.parseDouble(map.get("duration")));
log.info("处理有事假情况结果-b1:{}",b1);
if(!b1){
log.info("加班申请流程转建模数据失败!");
return Action.FAILURE_AND_CONTINUE;
}
// 1.直接增加明细表数据
insert_detail = "insert into "+ dtlTableName + " (mainid,jbry,szbm,gw,ksrq,kssj,jsrq,jssj,jbsch,xglc,lcgzrq) values (?,?,?,?,?,?,?,?,?,?,?)";
boolean b = rs.executeUpdate(insert_detail, id, xm, bm, map.get("jobtitle"), map.get("fromdate"),
map.get("fromtime"), map.get("todate"), map.get("totime"), map.get("duration"),requestId,map.get("belongdate"));
if(!b){
log.info("加班申请流程转建模数据失败!");
return Action.FAILURE_AND_CONTINUE;
}
// 明细表加班时长求和
//String value = "";
String sum = "";
String sql = "select sum(jbsch) as num from "+ dtlTableName + " b WHERE b.mainid = ? ";
rs.executeQuery(sql, id);
if (rs.next()) {
//value = rs.getString(updateName);
sum = rs.getString("num");
}
double updateValue = Double.parseDouble(sum);
log.info("加班累计时长-updateValue:{}",updateValue);
// 更新最终求和到主表待更新字段
updateSql = "update " + mainTableName + " set " + updateName + " = ? where id = ? ";
log.info("更新累计加班时长到主表-sql:{}",updateSql);
rs.executeUpdate(updateSql,updateValue,id);
String balance = getOvertimeBalance(mainTableName, bm, xm, map.get("fromdate"), field28);
log.info("加班总剩余-balance:{}",balance);
// 更新最终求和到主表待更新字段
updateSql = "update " + mainTableName + " set jbzsy = ? where id = ? ";
log.info("更新累计加班时长到主表-sql:{}",updateSql);
rs.executeUpdate(updateSql,balance,id);
}
log.info("-WorkOverTimeAction-insert_detail sql[{}]",insert_detail);
}
log.info("加班申请流程转建模数据成功!");
return Action.SUCCESS;
}
/**
*
*
* @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;
}
/**
* 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;
}
/**
* changetype
* */
public static Map<String,String> getDtlTableName(String changetype,String name){
Map<String,String> map = new HashMap<>();
//1-节假日、2-工作日、3-休息日
String dtlTableName = "";
String updateName = "";
if(StringUtils.equals(changetype,"1")){
dtlTableName = name+"_dt1";
updateName = "jrjb";
}else if(StringUtils.equals(changetype,"2")){
dtlTableName = name+"_dt3";
updateName = "psjb";
}else if(StringUtils.equals(changetype,"3")){
dtlTableName = name+"_dt4";
updateName = "zmjb";
}
map.put("dtlTableName",dtlTableName);
map.put("updateName",updateName);
log.info("获取明细表信息-map{}",map);
return map;
}
/**
* requestInfo
* */
public static List<Map<String,String>> getKqFlowOverTimeInfo(String requestId){
List<Map<String,String>> list = new ArrayList<>();
RecordSet rs = new RecordSet();
String resourceid;
String fromdate;
String fromtime;
String todate;
String totime;
String belongdate;
String duration;
String changetype;
String departmentid;
String jobtitle;
String field28;
String sql = "select resourceid,fromdate,fromtime,todate,totime,belongdate,duration,changetype,departmentid,jobtitle,field28 from kq_flow_split_overtime 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");
belongdate = rs.getString("belongdate");
duration = rs.getString("duration");
changetype = rs.getString("changetype");
departmentid = rs.getString("departmentid");
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("belongdate",belongdate);
map.put("duration",duration);
map.put("changetype",changetype);
map.put("departmentid",departmentid);
map.put("jobtitle",jobtitle);
map.put("field28",field28);
list.add(map);
}
log.info("getKqFlowOverTimeInfo-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;
}
}

@ -0,0 +1,71 @@
package weaver.interfaces.sskj.job;
import org.apache.commons.lang3.StringUtils;
import weaver.conn.RecordSet;
import weaver.general.BaseBean;
import weaver.general.Util;
import weaver.interfaces.schedule.BaseCronJob;
/**
* Created with IntelliJ IDEA.
*
* @Auther: xuxy
* @Date: 2023/11/10/10:03
* @Description:
*/
public class SyncNdzpDataJob extends BaseCronJob {
@Override
public void execute() {
new BaseBean();
BaseBean bb = new BaseBean();
bb.writeLog("年度计划招聘申请同步招聘人数信息!!!");
try {
//获取年度计划招聘申请
RecordSet rs = new RecordSet();
String sql = "SELECT a.nf,b.id,b.bm,b.xygw,b.xqrs,b.jhnzprs,b.jhwzprs from uf_ndzpjhsq a left join uf_ndzpjhsq_dt1 b on a.id = b.mainid";
rs.executeQuery(sql);
bb.writeLog("SELECT uf_ndzpjhsq,uf_ndzpjhsq_dt1.sql:" + sql);
while (rs.next()) {
String nf = Util.null2String(rs.getString("nf"));
String id = Util.null2String(rs.getString("id"));
String bm = Util.null2String(rs.getString("bm"));
String xygw = Util.null2String(rs.getString("xygw"));
String xqrs = Util.null2String(rs.getString("xqrs"));
String jhnzprs = Util.null2String(rs.getString("jhnzprs"));
String jhwzprs = Util.null2String(rs.getString("jhwzprs"));
//根据结果查询当年、部门、现有岗位的入职人数
String str = " SELECT count(*) as num from hrmresource WHERE companystartdate=? and departmentid = ? and jobtitle = ? ";
bb.writeLog("SELECT hrmresource.sql:" + str);
rs.executeQuery(str, nf, bm, xygw);
String num = "";
if (rs.next()) {
num = Util.null2String(rs.getString("num"));
//计算人数
jhnzprs = num;
if (Util.getIntValue(jhnzprs) > Util.getIntValue(xqrs)) {
jhnzprs = xqrs;
jhwzprs = String.valueOf(Util.getIntValue(num) - Util.getIntValue(xqrs));
} else {
jhnzprs = xqrs;
jhwzprs = "0";
}
}
//如果num为空设置内外招聘人员为默认值0
if(StringUtils.isBlank(num)){
jhnzprs = "0";
jhwzprs = "0";
}
//回填计划招聘人数信息到明细表
String sql2 = "update uf_ndzpjhsq_dt1 set jhnzprs = ?,jhwzprs = ? where id = ? ";
rs.executeUpdate(sql2, jhnzprs, jhwzprs, id);
bb.writeLog("update uf_ndzpjhsq_dt1.sql2:" + sql2);
}
} catch (Exception e) {
e.printStackTrace();
bb.writeLog(e);
bb.writeLog("年度计划招聘申请同步招聘人数信息--error"+e.getMessage());
}
}
}

@ -0,0 +1,104 @@
<%@ page import="com.alibaba.fastjson.JSONObject" %>
<%@ page import="weaver.conn.RecordSet" %>
<%@ page import="weaver.general.Util" %>
<%@ page import="weaver.general.BaseBean" %>
<%@ page import="org.apache.commons.lang3.StringUtils" %>
<%@ page import="java.math.BigDecimal" %>
<%@ page import="java.text.DecimalFormat" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.Map" %>
<%@ page import="java.util.HashMap" %>
<%--
User: xuxy
Design Ideas
天华化工-查询-得分评定员工身份信息
--%>
<%@ page contentType="text/html;charset=UTF-8" %>
<%! org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger("getDfpdUserInfo"); %>
<%
JSONObject data = new JSONObject();
try {
//1.查询得分评定建模表部门为空的台账,并更新相关信息
updateAllDfpdData();
} catch (Exception e) {
new BaseBean().writeLog("getUserInfo---Exception:" + e.getMessage());
}
out.print(data.toJSONString());
%>
<%!
public List<Map<String,String>> getAllDfpdData() {
List<Map<String,String>> list = new ArrayList<>();
RecordSet rs = new RecordSet();
rs.execute("select gh,yxbz,jxkh,jxpf from uf_glgbryjxhzb where bm is null");
while (rs.next()) {
Map<String,String> map = new HashMap<>();
String gh = Util.null2String(rs.getString("gh"));
String yxbz = Util.null2String(rs.getString("yxbz"));
String jxkh = Util.null2String(rs.getString("jxkh"));
String jxpf = Util.null2String(rs.getString("jxpf"));
log.info("-getAllDfpdData-gh:{},yxbz:{},jxkh:{},jxpf:{}", gh,yxbz,jxkh,jxpf);
map.put("gh",gh);
map.put("yxbz",yxbz);
map.put("jxkh",jxkh);
map.put("jxpf",jxpf);
log.info("-getAllDjpdData-gh:{},yxbz:{},jxkh:{},jxpf:{}", gh, yxbz, jxkh, jxpf);
list.add(map);
}
log.info("getAllDfpdData-最终输出的list-----------list{}",list);
return list;
}
%>
<%!
public void updateAllDfpdData() {
List<Map<String, String>> list = getAllDfpdData();
RecordSet rs = new RecordSet();
for (Map<String, String> map : list) {
//通过gh查询员工部门等信息
String departmentid = "";
String JOBTITLE = "";
String companystartdate = "";
String status = "";
rs.execute("select departmentid,JOBTITLE,companystartdate,status from hrmresource where workcode = '" + map.get("gh") + "'");
if (rs.next()) {
departmentid = Util.null2String(rs.getString("departmentid"));
JOBTITLE = Util.null2String(rs.getString("JOBTITLE"));
companystartdate = Util.null2String(rs.getString("companystartdate"));
status = Util.null2String(rs.getString("status"));
}
log.info("-getAllDfpdData-departmentid:{},JOBTITLE:{},companystartdate:{},status:{}", departmentid,JOBTITLE,companystartdate,status);
// 先计算核算结果
BigDecimal hsjg;
DecimalFormat df = new DecimalFormat("#0.00");
// 更新对应的建模表数据
if(StringUtils.equals(status,"1")) {
//判断绩效等级
hsjg = new BigDecimal(map.get("yxbz")).multiply(new BigDecimal(map.get("jxkh"))).multiply(BigDecimal.valueOf(0.0001)).multiply(new BigDecimal(map.get("jxpf")));
log.info("-getAllDfpdData-hsjg1:{}", hsjg);
//绩效评分大于等于60
if(new BigDecimal(map.get("jxpf")).compareTo(BigDecimal.valueOf(60))>=0){
hsjg = hsjg.multiply(BigDecimal.valueOf(2));
log.info("-getAllDfpdData-hsjg2:{}", hsjg);
}
String value = df.format(hsjg);
String updateSql = "update uf_glgbryjxhzb set bm = ?,gw=?,rzrq=?,sfzz=?,hsjgz=? where gh = ? ";
log.info("-getAllDfpdData-updateSql1:{}", updateSql);
rs.executeUpdate(updateSql,departmentid,JOBTITLE,companystartdate,status,value,map.get("gh"));
}else {
String updateSql = "update uf_glgbryjxhzb set bm = ?,gw=?,rzrq=?,sfzz=? where gh = ? ";
rs.executeUpdate(updateSql,departmentid,JOBTITLE,companystartdate,status,map.get("gh"));
log.info("-getAllDfpdData-updateSql2:{}", updateSql);
}
}
}
%>

@ -0,0 +1,118 @@
<%@ page import="com.alibaba.fastjson.JSONObject" %>
<%@ page import="weaver.conn.RecordSet" %>
<%@ page import="weaver.general.Util" %>
<%@ page import="weaver.general.BaseBean" %>
<%@ page import="org.apache.commons.lang3.StringUtils" %>
<%@ page import="java.math.BigDecimal" %>
<%@ page import="java.text.DecimalFormat" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.Map" %>
<%@ page import="java.util.HashMap" %>
<%--
User: xuxy
Design Ideas
天华化工-查询-等级评定员工身份信息
--%>
<%@ page contentType="text/html;charset=UTF-8" %>
<%! org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger("getDjpdUserInfo"); %>
<%
JSONObject data = new JSONObject();
try {
//1.查询建模表部门为空的台账,并更新相关信息
updateAllDjpdData();
} catch (Exception e) {
new BaseBean().writeLog("getUserInfo---Exception:" + e.getMessage());
}
out.print(data.toJSONString());
%>
<%!
public List<Map<String,String>> getAllDjpdData() {
List<Map<String,String>> list = new ArrayList<>();
RecordSet rs = new RecordSet();
rs.execute("select gh,yxbz,jxkh,jxpf,jxdj from uf_xzryjxkhhzb where bm is null");
while (rs.next()) {
Map<String,String> map = new HashMap<>();
String gh = Util.null2String(rs.getString("gh"));
String yxbz = Util.null2String(rs.getString("yxbz"));
String jxkh = Util.null2String(rs.getString("jxkh"));
String jxpf = Util.null2String(rs.getString("jxpf"));
String jxdj = Util.null2String(rs.getString("jxdj"));
map.put("gh",gh);
map.put("yxbz",yxbz);
map.put("jxkh",jxkh);
map.put("jxpf",jxpf);
map.put("jxdj",jxdj);
log.info("-getAllDjpdData-gh:{},yxbz:{},jxkh:{},jxpf:{},jxdj:{}", gh, yxbz, jxkh, jxpf, jxdj);
list.add(map);
}
return list;
}
%>
<%!
public void updateAllDjpdData() {
List<Map<String,String>> list = getAllDjpdData();
RecordSet rs = new RecordSet();
for (Map<String, String> map : list) {
//通过gh查询员工部门等信息
String departmentid = "";
String JOBTITLE = "";
String companystartdate = "";
String status = "";
rs.execute("select departmentid,JOBTITLE,companystartdate,status from hrmresource where workcode = '" + map.get("gh") + "'");
if (rs.next()) {
departmentid = Util.null2String(rs.getString("departmentid"));
JOBTITLE = Util.null2String(rs.getString("JOBTITLE"));
companystartdate = Util.null2String(rs.getString("companystartdate"));
status = Util.null2String(rs.getString("status"));
}
log.info("-getAllDjpdData-departmentid:{},JOBTITLE:{},companystartdate:{},status:{}", departmentid,JOBTITLE,companystartdate,status);
// 先计算核算结果
BigDecimal hsjg;
String value = "";
DecimalFormat df = new DecimalFormat("#0.00");
// 更新对应的建模表数据
if(StringUtils.equals(status,"1")) {
String updateSql = "";
//判断绩效等级
hsjg = new BigDecimal(map.get("yxbz")).multiply(new BigDecimal(map.get("jxkh"))).multiply(BigDecimal.valueOf(0.01));
log.info("-getAllDjpdData-hsjg:{}", hsjg);
if (StringUtils.equals(map.get("jxdj"), "0")||StringUtils.equals(map.get("jxdj"), "1")||StringUtils.equals(map.get("jxdj"), "2")) {
if (StringUtils.equals(map.get("jxdj"), "0")) {
hsjg = hsjg.multiply(BigDecimal.valueOf(0.4));
} else if (StringUtils.equals(map.get("jxdj"), "1")) {
hsjg = hsjg.multiply(BigDecimal.valueOf(0.2));
} else if (StringUtils.equals(map.get("jxdj"), "2")) {
hsjg = hsjg.multiply(BigDecimal.valueOf(0.0));
}
log.info("-getAllDjpdData-value1:{}", value);
updateSql = "update uf_xzryjxkhhzb set bm = ?,gw=?,rzrq=?,sfzz=?,hsjgz=? where gh = ? ";
}else{
if (StringUtils.equals(map.get("jxdj"), "3")) {
hsjg = hsjg.multiply(BigDecimal.valueOf(0.2));
}else if (StringUtils.equals(map.get("jxdj"), "4")) {
hsjg = hsjg.multiply(BigDecimal.valueOf(0.4));
}
log.info("-getAllDjpdData-value2:{}", value);
updateSql = "update uf_xzryjxkhhzb set bm = ?,gw=?,rzrq=?,sfzz=?,hsjgf=? where gh = ? ";
}
value = df.format(hsjg);
log.info("-getAllDjpdData-updateSql1:{}", updateSql);
rs.executeUpdate(updateSql,departmentid,JOBTITLE,companystartdate,status,value,map.get("gh"));
}else {
String updateSql = "update uf_xzryjxkhhzb set bm = ?,gw=?,rzrq=?,sfzz=? where gh = ? ";
log.info("-getAllDjpdData-updateSql2:{}", updateSql);
rs.executeUpdate(updateSql,departmentid,JOBTITLE,companystartdate,status,map.get("gh"));
}
}
}
%>
Loading…
Cancel
Save