From 18e9101c315dcafa2704e3fbc54b95678274376e Mon Sep 17 00:00:00 2001 From: Chengliang <1546584672@qq.com> Date: Tue, 22 Apr 2025 18:45:10 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B7=AF=E7=BB=B4=E5=85=89=E7=BC=96=E5=88=B6?= =?UTF-8?q?=E9=9C=80=E6=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/newwaymask/web/StaffDutyAction.java | 10 + .../newwaymask/entity/StaffDutyResult.java | 8 +- .../engine/newwaymask/entity/StaffPlan.java | 13 ++ .../newwaymask/service/StaffDutyService.java | 24 ++- .../service/impl/StaffDutyServiceImpl.java | 198 +++++++++++++++++- .../action/StaffByEndWorkflowAction.java | 46 +++- .../action/StaffBySubmitWorkflowAction.java | 8 +- 7 files changed, 282 insertions(+), 25 deletions(-) create mode 100644 src/com/api/newwaymask/web/StaffDutyAction.java diff --git a/src/com/api/newwaymask/web/StaffDutyAction.java b/src/com/api/newwaymask/web/StaffDutyAction.java new file mode 100644 index 0000000..1a8a85f --- /dev/null +++ b/src/com/api/newwaymask/web/StaffDutyAction.java @@ -0,0 +1,10 @@ +package com.api.newwaymask.web; + +/** + * @Author liang.cheng + * @Date 2025/4/22 18:07 + * @Description: + * @Version 1.0 + */ +public class StaffDutyAction { +} diff --git a/src/com/engine/newwaymask/entity/StaffDutyResult.java b/src/com/engine/newwaymask/entity/StaffDutyResult.java index cd5af7d..2e1e4ad 100644 --- a/src/com/engine/newwaymask/entity/StaffDutyResult.java +++ b/src/com/engine/newwaymask/entity/StaffDutyResult.java @@ -17,13 +17,9 @@ import lombok.NoArgsConstructor; @NoArgsConstructor public class StaffDutyResult { - private boolean status; + private Boolean status; private String message; - private Integer frozenNums; - - private Integer onJobNums; - - private Integer restNums; + private StaffPlan staffPlan; } diff --git a/src/com/engine/newwaymask/entity/StaffPlan.java b/src/com/engine/newwaymask/entity/StaffPlan.java index a1c6662..c05f0ff 100644 --- a/src/com/engine/newwaymask/entity/StaffPlan.java +++ b/src/com/engine/newwaymask/entity/StaffPlan.java @@ -33,4 +33,17 @@ public class StaffPlan { private Integer restNums; + @Override + public String toString() { + return "StaffPlan{" + + "id=" + id + + ", 岗位id=" + jobId + + ", 编制归属=" + staffBelong + + ", 任职类型=" + jobType + + ", 总编制计划数=" + staffPlanNums + + ", 冻结编制数=" + frozenNums + + ", 在编人数=" + onJobNums + + ", 剩余人数=" + restNums + + '}'; + } } diff --git a/src/com/engine/newwaymask/service/StaffDutyService.java b/src/com/engine/newwaymask/service/StaffDutyService.java index 3358096..92e0431 100644 --- a/src/com/engine/newwaymask/service/StaffDutyService.java +++ b/src/com/engine/newwaymask/service/StaffDutyService.java @@ -41,7 +41,29 @@ public interface StaffDutyService { * @param: [] * @return: com.engine.newwaymask.entity.StaffDutyResult */ - StaffDutyResult entryWorkflow(String requestId); + StaffDutyResult entryWorkflow(String requestId,String operateType); + + + + /** + * @Description: 离职类型 + * @Author: liang.cheng + * @Date: 2025/4/22 16:04 + * @param: [requestId, operateType] + * @return: com.engine.newwaymask.entity.StaffDutyResult + */ + StaffDutyResult leaveWorkflow(String requestId,String operateType); + + + + /** + * @Description: 调动类型 + * @Author: liang.cheng + * @Date: 2025/4/22 16:04 + * @param: [requestId, operateType] + * @return: com.engine.newwaymask.entity.StaffDutyResult + */ + StaffDutyResult transferWorkflow(String requestId,String operateType); } diff --git a/src/com/engine/newwaymask/service/impl/StaffDutyServiceImpl.java b/src/com/engine/newwaymask/service/impl/StaffDutyServiceImpl.java index e83eba8..5a90b61 100644 --- a/src/com/engine/newwaymask/service/impl/StaffDutyServiceImpl.java +++ b/src/com/engine/newwaymask/service/impl/StaffDutyServiceImpl.java @@ -5,8 +5,10 @@ import com.engine.newwaymask.entity.JobRecord; import com.engine.newwaymask.entity.StaffDutyResult; import com.engine.newwaymask.entity.StaffPlan; import com.engine.newwaymask.service.StaffDutyService; +import com.weaver.general.BaseBean; import com.weaver.general.Util; import weaver.conn.RecordSet; +import weaver.conn.RecordSetTrans; import weaver.general.StringUtil; import weaver.general.TimeUtil; @@ -33,7 +35,7 @@ public class StaffDutyServiceImpl extends Service implements StaffDutyService { "left join uf_zt c on a.gwzt = c.id \n" + "where c.on_job = 0 and a.ksrq <= ? and a.jsrq >= ?"; if (!StringUtil.isEmpty(requestId)) { - sql += " and a.requestid = "+requestId; + sql += " and a.lcid = "+requestId; } String currentDate = TimeUtil.getCurrentDateString(); @@ -48,6 +50,7 @@ public class StaffDutyServiceImpl extends Service implements StaffDutyService { .lastId(Util.getIntValue(rs.getString("sydrzid"))) .jobId(Util.getIntValue(rs.getString("gw"))) .staffBelong(Util.getIntValue(rs.getString("gwszbz"))) + .jobType(Util.getIntValue(rs.getString("rzlx"))) .build()); } @@ -110,7 +113,164 @@ public class StaffDutyServiceImpl extends Service implements StaffDutyService { } @Override - public StaffDutyResult entryWorkflow(String requestId) { + public StaffDutyResult entryWorkflow(String requestId,String operateType) { + + StaffDutyResult result = buildStaffPlan(requestId); + if (!result.getStatus()) { + return result; + } + + StaffPlan staffPlan = result.getStaffPlan(); + BaseBean bb = new BaseBean(); + bb.writeLog(String.format("entryWorkflow requestid:%s 更新前编制方案信息: %s",requestId,staffPlan.toString())); + + //4.增加在编数 更新剩余数(业务上说明无脑加减) + Integer onJob = staffPlan.getOnJobNums() + 1; + LinkedList numbers = new LinkedList<>(Arrays.asList(staffPlan.getStaffPlanNums(), staffPlan.getFrozenNums(), onJob)); + int rest = numbers.stream() + .findFirst() + .map(first -> first - numbers.stream().skip(1).mapToInt(Integer::intValue).sum()) + .orElse(0); + + //5.编制计划表更新 + Boolean flag = updateStaffPlan(onJob, rest, staffPlan.getId()); + if (flag) { + result.setStatus(true); + result.setMessage(String.format("编制信息id:%s所对应数据更新成功",staffPlan.getId())); + } + +// //4.流程提交 +// if ("submit".equals(operateType)) { +// //1.增加冻结数,更新剩余数 +// } +// //5.流程退回 +// if ("reject".equals(operateType)) { +// //1.减少冻结数,更新剩余数 +// } +// //6.流程归档 +// if ("".equals(operateType)) { +// //1.减少冻结数,增加在编数 更新剩余数 +// } + + return result; + } + + @Override + public StaffDutyResult leaveWorkflow(String requestId, String operateType) { + StaffDutyResult result = buildStaffPlan(requestId); + if (!result.getStatus()) { + return result; + } + + StaffPlan staffPlan = result.getStaffPlan(); + BaseBean bb = new BaseBean(); + bb.writeLog(String.format("leaveWorkflow requestid:%s 更新前编制方案信息: %s",requestId,staffPlan.toString())); + + //4.减少在编数 更新剩余数 + Integer onJob = staffPlan.getOnJobNums() - 1; + LinkedList numbers = new LinkedList<>(Arrays.asList(staffPlan.getStaffPlanNums(), staffPlan.getFrozenNums(), onJob)); + int rest = numbers.stream() + .findFirst() + .map(first -> first - numbers.stream().skip(1).mapToInt(Integer::intValue).sum()) + .orElse(0); + + //5.编制计划表更新 + Boolean flag = updateStaffPlan(onJob, rest, staffPlan.getId()); + if (flag) { + result.setStatus(true); + result.setMessage(String.format("编制信息id:%s所对应数据更新成功",staffPlan.getId())); + } + return result; + } + + @Override + public StaffDutyResult transferWorkflow(String requestId, String operateType) { + + StaffDutyResult result = new StaffDutyResult(); + //1.获取任职数据信息 + List jobRecords = selectJobRecords(requestId); + if (jobRecords.size() == 0) { + result.setMessage(String.format("未查询到requestId:%s所对应的调入后任职记录数据,请检查流程转建模配置",requestId)); + result.setStatus(false); + return result; + } + + //2.获取需要更新的编制执行情况数据 + JobRecord jobRecord = jobRecords.get(0); + List staffPlans = selectStaffPlans(jobRecord, false); + if (staffPlans.size() == 0) { + result.setMessage(String.format("requestId:%s所对应的调入后任职记录数据在当前编制计划中未匹配到,请检查参数",requestId)); + result.setStatus(false); + return result; + } + + //3.若匹配多条数据 获取id 较大的那条数据作为最新数据 + StaffPlan staffPlanTo = staffPlans.stream() + .filter(Objects::nonNull) + .max(Comparator.comparing(StaffPlan::getId)) + .orElse(null); + + BaseBean bb = new BaseBean(); + bb.writeLog(String.format("transferWorkflow requestid:%s 调入后岗位对应编制方案信息: %s",requestId,staffPlanTo.toString())); + + //调出前岗位信息所对应编制信息 + JobRecord jobRecordFrom = selectJobRecordById(staffPlanTo.getId()); + if (Objects.isNull(jobRecordFrom)) { + result.setMessage(String.format("未查询到requestId:%s所对应的调出前岗位对应任职记录数据,请检查任职记录表",requestId)); + result.setStatus(false); + return result; + } + + List staffPlansFrom = selectStaffPlans(jobRecordFrom, false); + if (staffPlansFrom.size() == 0) { + result.setMessage(String.format("requestId:%s所对应的调出前岗位任职记录数据在当前编制计划中未匹配到,请检查参数",requestId)); + result.setStatus(false); + return result; + } + + StaffPlan staffPlanFrom = staffPlans.stream() + .filter(Objects::nonNull) + .max(Comparator.comparing(StaffPlan::getId)) + .orElse(null); + bb.writeLog(String.format("transferWorkflow requestid:%s 调出前岗位对应编制方案信息: %s",requestId,staffPlanFrom.toString())); + + + //调出前岗位对应编制方案增加在编数 更新剩余数 + //4.(业务上说明无脑加减) + Integer onJobFrom = staffPlanFrom.getOnJobNums() + 1; + LinkedList numberFrom = new LinkedList<>(Arrays.asList(staffPlanFrom.getStaffPlanNums(), staffPlanFrom.getFrozenNums(), onJobFrom)); + int restFrom = numberFrom.stream() + .findFirst() + .map(first -> first - numberFrom.stream().skip(1).mapToInt(Integer::intValue).sum()) + .orElse(0); + + //4.调入后岗位对应编制方案减少在编数 更新剩余数 + Integer onJobTo = staffPlanTo.getOnJobNums() - 1; + LinkedList numberTo = new LinkedList<>(Arrays.asList(staffPlanTo.getStaffPlanNums(), staffPlanTo.getFrozenNums(), onJobTo)); + int restTo = numberTo.stream() + .findFirst() + .map(first -> first - numberTo.stream().skip(1).mapToInt(Integer::intValue).sum()) + .orElse(0); + + RecordSetTrans trans = new RecordSetTrans(); + try { + trans.setAutoCommit(false); + + trans.executeUpdate("update uf_bzjh set zbrs = ?,syrs = ? where id = ?", onJobFrom, restFrom, staffPlanFrom.getId()); + trans.executeUpdate("update uf_bzjh set zbrs = ?,syrs = ? where id = ?", onJobTo, restTo, staffPlanTo.getId()); + trans.commit(); + + }catch (Exception e) { + trans.rollback(); + result.setMessage("编制信息更新失败,请联系管理员"); + result.setStatus(false); + } + + return null; + } + + + private StaffDutyResult buildStaffPlan(String requestId) { StaffDutyResult result = new StaffDutyResult(); //1.获取任职数据信息 @@ -118,21 +278,51 @@ public class StaffDutyServiceImpl extends Service implements StaffDutyService { if (jobRecords.size() == 0) { result.setMessage(String.format("未查询到requestId:%s所对应的任职记录数据,请检查流程转建模配置",requestId)); result.setStatus(false); + return result; } //2.获取需要更新的编制执行情况数据 List staffPlans = selectStaffPlans(jobRecords.get(0), false); if (staffPlans.size() == 0) { - result.setMessage(String.format("requestId:%s所对应的任职记录数据在当前编制计划中未匹配,请检查参数",requestId)); + result.setMessage(String.format("requestId:%s所对应的任职记录数据在当前编制计划中未匹配到,请检查参数",requestId)); result.setStatus(false); + return result; } //3.若匹配多条数据 获取id 较大的那条数据作为最新数据 + StaffPlan staffPlan = staffPlans.stream() + .filter(Objects::nonNull) + .max(Comparator.comparing(StaffPlan::getId)) + .orElse(null); + result.setStatus(true); + result.setStaffPlan(staffPlan); + return result; + } + private Boolean updateStaffPlan(Integer onJob,Integer rest,Integer id) { + //5.编制计划表更新 + RecordSet rs = new RecordSet(); + return rs.executeUpdate("update uf_bzjh set zbrs = ?,syrs = ? where id = ?", onJob, rest, id); + } - return result; + + private JobRecord selectJobRecordById(Integer id) { + RecordSet rs = new RecordSet(); + JobRecord jobRecord = null; + rs.executeQuery("select a.id,a.rzlx,a.gw,b.gwszbz from uf_rzxxb a left join uf_gwgl b on a.gw = b.id where a.id = ?",id); + if (rs.next()) { + return JobRecord.builder() + .id(Util.getIntValue(rs.getString("id"))) + .resourceId(Util.getIntValue(rs.getString("rzry"))) + .lastId(Util.getIntValue(rs.getString("sydrzid"))) + .jobId(Util.getIntValue(rs.getString("gw"))) + .staffBelong(Util.getIntValue(rs.getString("gwszbz"))) + .jobType(Util.getIntValue(rs.getString("rzlx"))) + .build(); + } + return jobRecord; } } diff --git a/src/weaver/interfaces/newwaymask/action/StaffByEndWorkflowAction.java b/src/weaver/interfaces/newwaymask/action/StaffByEndWorkflowAction.java index f8017bd..c9ba48d 100644 --- a/src/weaver/interfaces/newwaymask/action/StaffByEndWorkflowAction.java +++ b/src/weaver/interfaces/newwaymask/action/StaffByEndWorkflowAction.java @@ -1,12 +1,16 @@ package weaver.interfaces.newwaymask.action; +import com.engine.newwaymask.entity.StaffDutyResult; +import com.engine.newwaymask.service.impl.StaffDutyServiceImpl; +import com.weaver.general.Util; +import weaver.conn.RecordSet; import weaver.interfaces.workflow.action.Action; import weaver.soa.workflow.request.RequestInfo; /** * @Author liang.cheng * @Date 2025/4/1 11:48 - * @Description: 流程更新编制信息(归档 + 退回) + * @Description: 流程更新编制信息(归档) * @Version 1.0 */ public class StaffByEndWorkflowAction implements Action { @@ -14,12 +18,38 @@ public class StaffByEndWorkflowAction implements Action { @Override public String execute(RequestInfo requestInfo) { - - - - - - - return null; + String requestid = requestInfo.getRequestid(); + int formid = Math.abs(requestInfo.getRequestManager().getFormid()); + RecordSet rs = new RecordSet(); + String mainTable = String.format("%s%s", "formtable_main_", formid); + rs.executeQuery("select bzlx from "+mainTable+" where requestid = ?",requestid); + rs.next(); + int bzlx = Util.getIntValue(rs.getString("bzlx")); + StaffDutyServiceImpl staffDutyService = new StaffDutyServiceImpl(); + StaffDutyResult result = new StaffDutyResult(); + switch(bzlx) { + case 0: + result = staffDutyService.entryWorkflow(requestid, ""); + break; + case 1: + result = staffDutyService.transferWorkflow(requestid, ""); + break; + case 2: + result = staffDutyService.leaveWorkflow(requestid, ""); + break; + default: + result.setStatus(false); + result.setMessage("流程表单未配置编制类型字段,分类无法匹配"); + break; + } + + + if (result.getStatus()) { + requestInfo.getRequestManager().setMessagecontent(result.getMessage()); + return Action.SUCCESS; + }else { + requestInfo.getRequestManager().setMessagecontent(result.getMessage()); + return Action.FAILURE_AND_CONTINUE; + } } } diff --git a/src/weaver/interfaces/newwaymask/action/StaffBySubmitWorkflowAction.java b/src/weaver/interfaces/newwaymask/action/StaffBySubmitWorkflowAction.java index fd229ee..991c869 100644 --- a/src/weaver/interfaces/newwaymask/action/StaffBySubmitWorkflowAction.java +++ b/src/weaver/interfaces/newwaymask/action/StaffBySubmitWorkflowAction.java @@ -6,7 +6,7 @@ import weaver.soa.workflow.request.RequestInfo; /** * @Author liang.cheng * @Date 2025/4/1 11:48 - * @Description: 流程更新编制信息(提交) + * @Description: 流程更新编制信息(提交 + 退回) * @Version 1.0 */ public class StaffBySubmitWorkflowAction implements Action { @@ -14,10 +14,6 @@ public class StaffBySubmitWorkflowAction implements Action { @Override public String execute(RequestInfo requestInfo) { - - - - - return null; + return null; } }