From a1d8c1ee03d783773b823289385ace0eae2f7dc1 Mon Sep 17 00:00:00 2001 From: liuliang <401809302@qq.com> Date: Wed, 21 Aug 2024 17:02:06 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B5=81=E7=A8=8B=E5=88=A0=E9=99=A4=E3=80=81?= =?UTF-8?q?=E6=B5=81=E7=A8=8B=E5=BC=BA=E5=88=B6=E6=94=B6=E5=9B=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../workflow/KQDoDeleteProxyCmd.java | 73 ++++++++ .../workflow/KQDoRepossessedProxyCmd.java | 45 ++++- .../job/AttendanceAnalysisJob.java | 3 +- .../commonutil/PersongroupCommonUtil.java | 2 +- .../workflow/enums/WorkFlowTypeEnum.java | 40 +++++ .../tactics/AskForLeaveWorkflowDataReset.java | 160 ++++++++++++++++++ .../proxy/tactics/WorkFlowHandleTacis.java | 13 ++ .../engine/jucailinkq/common/util/Utils.java | 1 + 8 files changed, 326 insertions(+), 11 deletions(-) create mode 100644 src/com/customization/jucailinkq/workflow/KQDoDeleteProxyCmd.java create mode 100644 src/com/engine/jucailinkq/attendance/workflow/enums/WorkFlowTypeEnum.java create mode 100644 src/com/engine/jucailinkq/attendance/workflow/proxy/tactics/AskForLeaveWorkflowDataReset.java create mode 100644 src/com/engine/jucailinkq/attendance/workflow/proxy/tactics/WorkFlowHandleTacis.java diff --git a/src/com/customization/jucailinkq/workflow/KQDoDeleteProxyCmd.java b/src/com/customization/jucailinkq/workflow/KQDoDeleteProxyCmd.java new file mode 100644 index 0000000..d517a0b --- /dev/null +++ b/src/com/customization/jucailinkq/workflow/KQDoDeleteProxyCmd.java @@ -0,0 +1,73 @@ +package com.customization.jucailinkq.workflow; + +import com.engine.core.cfg.annotation.CommandDynamicProxy; +import com.engine.core.interceptor.AbstractCommandProxy; +import com.engine.core.interceptor.Command; +import com.engine.jucailinkq.attendance.workflow.proxy.tactics.WorkFlowHandleTacis; +import com.engine.jucailinkq.common.util.DbTools; +import com.engine.jucailinkq.common.util.Utils; +import com.engine.workflow.cmd.monitor.DoDeleteCmd; +import com.engine.workflow.cmd.monitor.DoRepossessedCmd; +import weaver.conn.RecordSet; +import weaver.general.BaseBean; +import weaver.workflow.workflow.RequestForceDrawBack; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + + +/** + * 流程删除代理类 + */ +@CommandDynamicProxy(target = DoDeleteCmd.class, desc="流程删除") +public class KQDoDeleteProxyCmd extends AbstractCommandProxy> { + private List rulers; + { + rulers = new Utils().getAllClassByInterface(WorkFlowHandleTacis.class); + + } + @Override + public Map execute(Command> command) { + + BaseBean bb = new BaseBean(); + bb.writeLog("KQDoDeleteProxyCmd start"); + DoDeleteCmd doDeleteCmd = (DoDeleteCmd)command; + Map params = doDeleteCmd.getParams(); + + String multiRequestIds = params.get("multiRequestIds").toString(); + + + + + Map resultMap = nextExecute(command); + + + + String sql = "select requestid,workflowid from workflow_requestbase_dellog where requestid in ("+multiRequestIds+")"; + List> dataList = DbTools.getSqlToList(sql); + bb.writeLog("KQDoDeleteProxyCmd requestId"+dataList.toString()); + + sql = "select ljid,lclx,lcbd from uf_jcl_kq_kqlcsz where zt=0"; + List> list = DbTools.getSqlToList(sql); + Map>> groupByMap = list.stream().collect(Collectors.groupingBy(e->e.get("ljid").toString())); + + for (Map dataMap:dataList){ + String requestid = dataMap.get("requestid").toString(); + String workflowid = dataMap.get("workflowid").toString(); + if (groupByMap.get(workflowid) != null && groupByMap.get(workflowid).size()>0){ + Map map = groupByMap.get(workflowid).get(0); + String workflowType = map.get("lclx").toString(); + for (WorkFlowHandleTacis workFlowHandleTacis :rulers){ + if (workFlowHandleTacis.support(workflowType)){ + map.put("requestId",requestid); + map.put("operate","dodelete"); + workFlowHandleTacis.reset(map); + } + } + } + } + bb.writeLog("KQDoDeleteProxyCmd requestMap"+resultMap.toString()); + return resultMap; + } +} diff --git a/src/com/customization/jucailinkq/workflow/KQDoRepossessedProxyCmd.java b/src/com/customization/jucailinkq/workflow/KQDoRepossessedProxyCmd.java index 9d5569d..4ff6de7 100644 --- a/src/com/customization/jucailinkq/workflow/KQDoRepossessedProxyCmd.java +++ b/src/com/customization/jucailinkq/workflow/KQDoRepossessedProxyCmd.java @@ -3,39 +3,66 @@ package com.customization.jucailinkq.workflow; import com.engine.core.cfg.annotation.CommandDynamicProxy; import com.engine.core.interceptor.AbstractCommandProxy; import com.engine.core.interceptor.Command; +import com.engine.jucailinkq.attendance.workflow.proxy.tactics.WorkFlowHandleTacis; +import com.engine.jucailinkq.common.util.DbTools; +import com.engine.jucailinkq.common.util.Utils; import com.engine.workflow.cmd.monitor.DoRepossessedCmd; -import lombok.extern.slf4j.Slf4j; import weaver.conn.RecordSet; import weaver.general.BaseBean; import weaver.workflow.workflow.RequestForceDrawBack; +import java.util.List; import java.util.Map; +import java.util.stream.Collectors; /** * 流程强制收回代理类 */ -@Slf4j @CommandDynamicProxy(target = DoRepossessedCmd.class, desc="流程强制收回") public class KQDoRepossessedProxyCmd extends AbstractCommandProxy> { + private List rulers; + { + rulers = new Utils().getAllClassByInterface(WorkFlowHandleTacis.class); + + } @Override public Map execute(Command> command) { BaseBean bb = new BaseBean(); - bb.writeLog("DoRepossessedProxyCmd start"); - log.info("DoRepossessedProxyCmd start"); + bb.writeLog("KQDoRepossessedProxyCmd start"); + Map resultMap = nextExecute(command); + String sql = "select ljid,lclx,lcbd from uf_jcl_kq_kqlcsz where zt=0"; + List> list = DbTools.getSqlToList(sql); + Map>> groupByMap = list.stream().collect(Collectors.groupingBy(e->e.get("ljid").toString())); + RecordSet rs = new RecordSet(); Map requestMap = (Map)resultMap.get("result"); - bb.writeLog("DoRepossessedProxyCmd requestMap"+requestMap.toString()); + bb.writeLog("KQDoRepossessedProxyCmd requestMap"+requestMap.toString()); requestMap.entrySet().forEach(e->{ String requestId = e.getKey(); - String status = e.getValue().toString(); - if (status.equals(RequestForceDrawBack.SUCCESS)){ + int status = Integer.valueOf(e.getValue().toString()); + if (status == RequestForceDrawBack.SUCCESS){ rs.executeProc("workflow_Requestbase_SByID", requestId); - int workflowid = rs.getInt("workflowid"); - bb.writeLog("DoRepossessedProxyCmd workflowid"+workflowid); + if (rs.next()) { + String workflowid = rs.getString("workflowid"); + bb.writeLog("KQDoRepossessedProxyCmd workflowid"+workflowid); + bb.writeLog("KQDoRepossessedProxyCmd groupByMap"+groupByMap.toString()); + if (groupByMap.get(workflowid) != null && groupByMap.get(workflowid).size()>0){ + Map map = groupByMap.get(workflowid).get(0); + String workflowType = map.get("lclx").toString(); + bb.writeLog("KQDoRepossessedProxyCmd workflowType"+workflowType); + for (WorkFlowHandleTacis workFlowHandleTacis :rulers){ + if (workFlowHandleTacis.support(workflowType)){ + map.put("requestId",requestId); + map.put("operate","dorepossesse"); + workFlowHandleTacis.reset(map); + } + } + } + } } }); diff --git a/src/com/engine/jucailinkq/attendance/attendanceanalysis/job/AttendanceAnalysisJob.java b/src/com/engine/jucailinkq/attendance/attendanceanalysis/job/AttendanceAnalysisJob.java index 47b2be4..5bcd020 100644 --- a/src/com/engine/jucailinkq/attendance/attendanceanalysis/job/AttendanceAnalysisJob.java +++ b/src/com/engine/jucailinkq/attendance/attendanceanalysis/job/AttendanceAnalysisJob.java @@ -44,7 +44,8 @@ public class AttendanceAnalysisJob extends BaseCronJob { log.info("********AttendanceAnalysisJob executeDate :[{}]********",executeDate); if (executeDate == null || "".equals(executeDate)){ - executeDate = DateUtil.getCurrentTime().split(" ")[0]; + + executeDate = com.time.util.DateUtil.getCurrentTime("yyyy-MM-dd"); } String queryUserSql = "select id,departmentid,subcompanyid1 from hrmresource where status <> '5' and status <> '4' and status <> '7'"; diff --git a/src/com/engine/jucailinkq/attendance/component/persongroup/commonutil/PersongroupCommonUtil.java b/src/com/engine/jucailinkq/attendance/component/persongroup/commonutil/PersongroupCommonUtil.java index c118c55..ac36b54 100644 --- a/src/com/engine/jucailinkq/attendance/component/persongroup/commonutil/PersongroupCommonUtil.java +++ b/src/com/engine/jucailinkq/attendance/component/persongroup/commonutil/PersongroupCommonUtil.java @@ -398,7 +398,7 @@ public class PersongroupCommonUtil { } }else if (!"".equals(sqltj)){ sqltj = Utils.converSQL(sqltj); - log.info("getPersonnelGroupingByPerson sqltj : [{}]",sqltj); + log.debug("getPersonnelGroupingByPerson sqltj : [{}]",sqltj); List> dataList = DbTools.getSqlToList(sqltj); for (Map dataMap :dataList){ String hrmId = Util.null2String(dataMap.get("id")); diff --git a/src/com/engine/jucailinkq/attendance/workflow/enums/WorkFlowTypeEnum.java b/src/com/engine/jucailinkq/attendance/workflow/enums/WorkFlowTypeEnum.java new file mode 100644 index 0000000..b8eb8b8 --- /dev/null +++ b/src/com/engine/jucailinkq/attendance/workflow/enums/WorkFlowTypeEnum.java @@ -0,0 +1,40 @@ +package com.engine.jucailinkq.attendance.workflow.enums; + +import com.finance.toolkit.BaseEnum; + +/** + * 出差请假方式 + */ +public enum WorkFlowTypeEnum implements BaseEnum { + ASKFORLEAVE("0","请假流程"), + BATCH_ASKFORLEAVE("1","批量请假流程"), + EVECTION("2","出差流程"), + CLOCK_IN("3","补打卡流程"), + REBACK_ASKFORLEAVE("4","销假流程"), + REBACK_EVECTION("5","销差流程"), + OVERTIME_PLAN("6","加班计划流程"), + OVERTIME_RESULTS("7","加班结果流程"), + ATTENDANCE_ALLOWANCE("8","出勤津贴确认流程"), + SCHEDULE_CHANGE("9","排班异动流程"), + GROUPS_CHANGE("10","调动分组流程"); + + + private String key; + private String value; + + WorkFlowTypeEnum(String key, String value){ + this.key=key; + this.value=value; + } + + + @Override + public String getKey() { + return this.key; + } + + @Override + public String getValue() { + return this.value; + } +} diff --git a/src/com/engine/jucailinkq/attendance/workflow/proxy/tactics/AskForLeaveWorkflowDataReset.java b/src/com/engine/jucailinkq/attendance/workflow/proxy/tactics/AskForLeaveWorkflowDataReset.java new file mode 100644 index 0000000..4c840a3 --- /dev/null +++ b/src/com/engine/jucailinkq/attendance/workflow/proxy/tactics/AskForLeaveWorkflowDataReset.java @@ -0,0 +1,160 @@ +package com.engine.jucailinkq.attendance.workflow.proxy.tactics; + +import com.alibaba.fastjson.JSONObject; +import com.engine.jucailinkq.attendance.workflow.enums.WorkFlowTypeEnum; +import com.engine.jucailinkq.common.util.CommonUtil; +import com.engine.jucailinkq.common.util.DbTools; +import com.engine.jucailinkq.common.util.Utils; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import lombok.extern.slf4j.Slf4j; +import weaver.general.Util; +import weaver.interfaces.workflow.action.Action; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 请假流程删除、退回等进行假期余额重置 + */ +@Slf4j +public class AskForLeaveWorkflowDataReset implements WorkFlowHandleTacis{ + @Override + public boolean support(String personClassfiy) { + if (personClassfiy.equals(WorkFlowTypeEnum.ASKFORLEAVE.getKey())){ + return true; + } + return false; + } + + @Override + public void reset(Map requestMap) { + log.info("AskForLeaveWorkflow requestMap: [{}]",requestMap); + String tableName = requestMap.get("lcbd").toString(); + String requestId = requestMap.get("requestId").toString(); + String operate = requestMap.get("operate").toString(); + + Map mainMap = null; + List> detailTableData = null; + List> detailTable2 = null; + + + if (operate.equals("dodelete")){ + //删除流程 + String sql = "select deletetabledata from workflow_requestdeletelog where request_id=? and (isvalid is null or isvalid <> '1')"; + List> deleteDataList = DbTools.getSqlToList(sql,requestId); + if (deleteDataList.size() > 0){ + String deletetabledata = deleteDataList.get(0).get("deletetabledata").toString(); + Map>> map = (Map>>) JSONObject.parse(deletetabledata); + mainMap = keyToLowerMap(map.get(tableName).get(0)); + detailTableData = keyToLowerList(map.get(tableName+"_dt1")); + detailTable2 = keyToLowerList(map.get(tableName+"_dt2")); + } + }else { + String sql = "select * from "+tableName+" where requestid=?"; + mainMap = DbTools.getSqlToList(sql,requestId).get(0); + + // 流程表单明细表1数据 + sql = "select * from "+tableName+"_dt1 where mainid=?"; + detailTableData = DbTools.getSqlToList(sql,mainMap.get("id")); + + //流程表单明细表2数据 + sql = "select * from "+tableName+"_dt2 where mainid=?"; + detailTable2 = DbTools.getSqlToList(sql,mainMap.get("id")); + } + log.info("detailTableData : [{}]",detailTableData); + log.info("BatchAskForLeaveWorkFlowBackAction-detailTable2Data : [{}]",detailTable2); + if (mainMap == null || detailTable2 == null || detailTableData == null){ + return; + } + + String sql = "select id, jlzt from uf_jcl_kq_qjjl where djid = " + requestId; + Map qjllData = DbTools.getSqlToMap(sql); + String jlzt = Util.null2String(qjllData.get("jlzt")); + + + sql = "select id,jqid,sxrq,ktsc,yxsc,wxsc,yqsxrq,ztsc from uf_jcl_kq_jqye order by sxrq"; + + List> holidayBalanceList = DbTools.getSqlToList(sql); + + Map holidayBalanceMap = holidayBalanceList.stream().collect(Collectors.toMap(e->e.get("id").toString(), e->e)); + + try { + if (detailTable2.size() > 0) { + Map balanceMap = Maps.newHashMap(); + for (Map data : detailTable2){ + String jqye = Util.null2String(data.get("jqye")); + double sysc = Double.valueOf(data.get("sysc").toString()); + double havedSysc= balanceMap.get(jqye) ==null?0:Double.valueOf(balanceMap.get(jqye).toString()); + sysc = Utils.add(sysc,havedSysc); + balanceMap.put(jqye,sysc); + } + log.info("balanceMap : [{}]",balanceMap); + for (Map.Entry entry:balanceMap.entrySet()){ + String id = entry.getKey(); + double ztsc = Double.valueOf(entry.getValue().toString()); + Map map = (Map)holidayBalanceMap.get(id); + boolean updateSign = true; + log.info("jlzt : [{}]",jlzt); + if ("1".equals(jlzt)) { + double havedyxsc = Util.null2String(map.get("yxsc")).equals("") ? 0 : Double.valueOf(map.get("yxsc").toString()); + + double updatedyxsc = Utils.subtract(havedyxsc,ztsc); + + log.info("updatedyxsc : [{}],id:[{}]",updatedyxsc,id); + String updateSql = "update uf_jcl_kq_jqye set yxsc=? where id=?"; + updateSign = DbTools.update(updateSql,updatedyxsc,id); + } else if("0".equals(jlzt)){ + double havedztsc = Util.null2String(map.get("ztsc")).equals("") ? 0 : Double.valueOf(map.get("ztsc").toString()); + double havedwxsc = Util.null2String(map.get("wxsc")).equals("") ? 0 : Double.valueOf(map.get("wxsc").toString()); + + double updatedztsc = Utils.subtract(havedztsc,ztsc); + double updatedwxsc = Utils.add(havedwxsc,ztsc); + + log.info("updatedwxsc : [{}],updatedztsc:[{}],id:[{}]",updatedwxsc,updatedztsc,id); + String updateSql = "update uf_jcl_kq_jqye set wxsc=?,ztsc=? where id=?"; + updateSign = DbTools.update(updateSql,updatedwxsc,updatedztsc,id); + } + + log.info("updateSign : [{}]",updateSign); + } + } + + //删除请假记录 + if ("1".equals(jlzt) || "0".equals(jlzt)) { + String qjjlMainId = Util.null2String(qjllData.get("id")); + if (!"".equals(qjjlMainId)) { + String delteSql = "delete from uf_jcl_kq_qjjl_dt1 where mainid = " + qjjlMainId; + boolean delSignDt1 = DbTools.update(delteSql); + delteSql = "delete from uf_jcl_kq_qjjl_dt2 where mainid = " + qjjlMainId; + boolean delSignDt2 = DbTools.update(delteSql); + delteSql = "delete from uf_jcl_kq_qjjl where id = " + qjjlMainId; + boolean delSignMain = DbTools.update(delteSql); + if (!delSignDt1 || !delSignDt2 || !delSignMain) { + String message = "删除假期记录失败"; + log.error(message); + } + } + } + + }catch (Exception e){ + log.error("BatchAskForLeaveWorkFlowBackAction error : [{}]",e); + } + } + + public Map keyToLowerMap(Map map){ + Map resultMap = Maps.newHashMap(); + map.entrySet().forEach(e->{ + resultMap.put(e.getKey().toLowerCase(),e.getValue()); + }); + return resultMap; + } + public List> keyToLowerList(List> list){ + List> resultList = Lists.newArrayList(); + for (Map map:list){ + resultList.add(keyToLowerMap(map)); + } + return resultList; + } +} diff --git a/src/com/engine/jucailinkq/attendance/workflow/proxy/tactics/WorkFlowHandleTacis.java b/src/com/engine/jucailinkq/attendance/workflow/proxy/tactics/WorkFlowHandleTacis.java new file mode 100644 index 0000000..e48206d --- /dev/null +++ b/src/com/engine/jucailinkq/attendance/workflow/proxy/tactics/WorkFlowHandleTacis.java @@ -0,0 +1,13 @@ +package com.engine.jucailinkq.attendance.workflow.proxy.tactics; + +import java.util.Map; + +/** + * 流程处理策略 + */ +public interface WorkFlowHandleTacis { + + boolean support(String personClassfiy); + + void reset(Map requestMap); +} diff --git a/src/com/engine/jucailinkq/common/util/Utils.java b/src/com/engine/jucailinkq/common/util/Utils.java index 2b767bf..22c1620 100644 --- a/src/com/engine/jucailinkq/common/util/Utils.java +++ b/src/com/engine/jucailinkq/common/util/Utils.java @@ -1168,6 +1168,7 @@ public class Utils { public static String converSQL(String sqltj){ sqltj = sqltj.replace("select","select"); sqltj = sqltj.replace("SELECT","select"); + sqltj = sqltj.replace("Select","select"); sqltj = sqltj.replace("and","and"); sqltj = sqltj.replace("AND","and"); sqltj = sqltj.replace("or","or");