From d9cc795f64c2d66f0f9ad46c166d727323b8177e Mon Sep 17 00:00:00 2001 From: Administrator <704728292@qq.com> Date: Fri, 15 Dec 2023 10:07:59 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AF=B7=E5=81=87=E8=B0=83=E4=BC=91=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=90=8C=E6=AD=A5=E5=BB=BA=E6=A8=A1=20=E6=89=B9?= =?UTF-8?q?=E9=87=8F=E5=AF=BC=E5=85=A5=E6=9B=B4=E6=96=B0=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sskj/action/WorkLeaveAction.java | 917 ++++++++++++++++++ .../sskj/action/WorkOverTimeAction.java | 298 ++++++ .../interfaces/sskj/job/SyncNdzpDataJob.java | 71 ++ workflow/request/getDfpdUserInfo.jsp | 104 ++ workflow/request/getDjpdUserInfo.jsp | 118 +++ 5 files changed, 1508 insertions(+) create mode 100644 src/weaver/interfaces/sskj/action/WorkLeaveAction.java create mode 100644 src/weaver/interfaces/sskj/action/WorkOverTimeAction.java create mode 100644 src/weaver/interfaces/sskj/job/SyncNdzpDataJob.java create mode 100644 workflow/request/getDfpdUserInfo.jsp create mode 100644 workflow/request/getDjpdUserInfo.jsp diff --git a/src/weaver/interfaces/sskj/action/WorkLeaveAction.java b/src/weaver/interfaces/sskj/action/WorkLeaveAction.java new file mode 100644 index 0000000..a10fa9a --- /dev/null +++ b/src/weaver/interfaces/sskj/action/WorkLeaveAction.java @@ -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> 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 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 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 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 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 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 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 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 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 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 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 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 getMonthMainId(String tableName, String bm, String xm, String fromDate) { + Map 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> getKqFlowLeaveInfo(String requestId) { + List> 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 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 getMainInfo(RequestInfo requestInfo) { + Map 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; + } + + +} diff --git a/src/weaver/interfaces/sskj/action/WorkOverTimeAction.java b/src/weaver/interfaces/sskj/action/WorkOverTimeAction.java new file mode 100644 index 0000000..356e222 --- /dev/null +++ b/src/weaver/interfaces/sskj/action/WorkOverTimeAction.java @@ -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> list = getKqFlowOverTimeInfo(requestId); + //遍历数据更新 + for (Map 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 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 getDtlTableName(String changetype,String name){ + Map 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> getKqFlowOverTimeInfo(String requestId){ + List> 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 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 getMainInfo(RequestInfo requestInfo){ + Map 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; + } + + +} diff --git a/src/weaver/interfaces/sskj/job/SyncNdzpDataJob.java b/src/weaver/interfaces/sskj/job/SyncNdzpDataJob.java new file mode 100644 index 0000000..37f67aa --- /dev/null +++ b/src/weaver/interfaces/sskj/job/SyncNdzpDataJob.java @@ -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()); + } + } + +} diff --git a/workflow/request/getDfpdUserInfo.jsp b/workflow/request/getDfpdUserInfo.jsp new file mode 100644 index 0000000..e02a5a0 --- /dev/null +++ b/workflow/request/getDfpdUserInfo.jsp @@ -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> getAllDfpdData() { + List> 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 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> list = getAllDfpdData(); + RecordSet rs = new RecordSet(); + for (Map 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); + } + } + + } +%> diff --git a/workflow/request/getDjpdUserInfo.jsp b/workflow/request/getDjpdUserInfo.jsp new file mode 100644 index 0000000..f9aad5a --- /dev/null +++ b/workflow/request/getDjpdUserInfo.jsp @@ -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> getAllDjpdData() { + List> 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 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> list = getAllDjpdData(); + RecordSet rs = new RecordSet(); + for (Map 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")); + } + } + } +%>