diff --git a/src/com/engine/newwaymask/entity/JobRecord.java b/src/com/engine/newwaymask/entity/JobRecord.java index 1e768e5..aeb1323 100644 --- a/src/com/engine/newwaymask/entity/JobRecord.java +++ b/src/com/engine/newwaymask/entity/JobRecord.java @@ -35,4 +35,7 @@ public class JobRecord { private Integer requestId; private Integer lastId; + + //岗位所属编制 + private Integer staffBelong; } diff --git a/src/com/engine/newwaymask/entity/StaffDutyResult.java b/src/com/engine/newwaymask/entity/StaffDutyResult.java new file mode 100644 index 0000000..cd5af7d --- /dev/null +++ b/src/com/engine/newwaymask/entity/StaffDutyResult.java @@ -0,0 +1,29 @@ +package com.engine.newwaymask.entity; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Author liang.cheng + * @Date 2025/4/21 16:48 + * @Description: 编制执行结果统一返回 + * @Version 1.0 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class StaffDutyResult { + + private boolean status; + + private String message; + + private Integer frozenNums; + + private Integer onJobNums; + + private Integer restNums; +} diff --git a/src/com/engine/newwaymask/entity/StaffPlan.java b/src/com/engine/newwaymask/entity/StaffPlan.java index 70fb9e7..a1c6662 100644 --- a/src/com/engine/newwaymask/entity/StaffPlan.java +++ b/src/com/engine/newwaymask/entity/StaffPlan.java @@ -17,10 +17,20 @@ import lombok.NoArgsConstructor; @NoArgsConstructor public class StaffPlan { + private Integer id; + private Integer jobId; private Integer staffBelong; private Integer jobType; + private Integer staffPlanNums; + + private Integer frozenNums; + + private Integer onJobNums; + + private Integer restNums; + } diff --git a/src/com/engine/newwaymask/enums/StaffOptTypeEnum.java b/src/com/engine/newwaymask/enums/StaffOptTypeEnum.java new file mode 100644 index 0000000..d8ca4a6 --- /dev/null +++ b/src/com/engine/newwaymask/enums/StaffOptTypeEnum.java @@ -0,0 +1,32 @@ +package com.engine.newwaymask.enums; + +/** + * @Author liang.cheng + * @Date 2025/4/21 16:57 + * @Description: + * @Version 1.0 + */ +public enum StaffOptTypeEnum { + + ENTRY(0, "入职类型"), + TRANSFER(2, "调动类型"), + DIMISSION(1, "离职类型"); + + private Integer value; + + private String desc; + + StaffOptTypeEnum(Integer value, String desc) { + this.value = value; + this.desc = desc; + } + + public Integer getValue() { + return value; + } + + public String getDesc() { + return desc; + } + +} diff --git a/src/com/engine/newwaymask/service/StaffDutyService.java b/src/com/engine/newwaymask/service/StaffDutyService.java index 303e144..3358096 100644 --- a/src/com/engine/newwaymask/service/StaffDutyService.java +++ b/src/com/engine/newwaymask/service/StaffDutyService.java @@ -1,5 +1,11 @@ package com.engine.newwaymask.service; +import com.engine.newwaymask.entity.JobRecord; +import com.engine.newwaymask.entity.StaffDutyResult; +import com.engine.newwaymask.entity.StaffPlan; + +import java.util.List; + /** * @Author liang.cheng * @Date 2025/4/21 15:30 @@ -7,4 +13,35 @@ package com.engine.newwaymask.service; * @Version 1.0 */ public interface StaffDutyService { + + + /** + * @Description: 获取当前任职数据 + * @Author: liang.cheng + * @Date: 2025/4/21 16:12 + * @param: [reqyestId] + * @return: java.util.List + */ + List selectJobRecords(String requestId); + + + /** + * @Description: 获取需要更新的编制执行情况数据 + * @Author: liang.cheng + * @Date: 2025/4/21 17:37 + * @param: [workflowRequestParam] + * @return: java.util.List + */ + List selectStaffPlans(JobRecord jobRecord,boolean isAll); + + /** + * @Description: 入职类型 + * @Author: liang.cheng + * @Date: 2025/4/21 17:04 + * @param: [] + * @return: com.engine.newwaymask.entity.StaffDutyResult + */ + StaffDutyResult entryWorkflow(String requestId); + + } diff --git a/src/com/engine/newwaymask/service/impl/StaffDutyServiceImpl.java b/src/com/engine/newwaymask/service/impl/StaffDutyServiceImpl.java index c6b1c3d..e83eba8 100644 --- a/src/com/engine/newwaymask/service/impl/StaffDutyServiceImpl.java +++ b/src/com/engine/newwaymask/service/impl/StaffDutyServiceImpl.java @@ -1,7 +1,17 @@ package com.engine.newwaymask.service.impl; import com.engine.core.impl.Service; +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.Util; +import weaver.conn.RecordSet; +import weaver.general.StringUtil; +import weaver.general.TimeUtil; + +import java.util.*; +import java.util.stream.Collectors; /** * @Author liang.cheng @@ -12,5 +22,117 @@ import com.engine.newwaymask.service.StaffDutyService; public class StaffDutyServiceImpl extends Service implements StaffDutyService { + @Override + public List selectJobRecords(String requestId) { + + List jobRecords = new ArrayList<>(); + RecordSet rs = new RecordSet(); + + String sql = "select a.id,a.rzry,a.rzlx,a.gwzt,a.sydrzid,a.gw,a.ksrq,a.jsrq,b.gwszbz from uf_rzxxb a\n" + + "left join uf_gwgl b on a.gw = b.id \n" + + "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; + } + + String currentDate = TimeUtil.getCurrentDateString(); + + rs.executeQuery(sql,currentDate,currentDate); + + + while (rs.next()) { + jobRecords.add(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"))) + .build()); + } + + //同一人员如果出现多条生效数据 根据建模id取最大那条 + return jobRecords.stream() + // 过滤无效数据:resourceId和id均非空 + .filter(record -> record.getResourceId() != null && record.getId() != null) + // 分组并取每组id最大的记录 + .collect(Collectors.groupingBy( + JobRecord::getResourceId, + LinkedHashMap::new, + Collectors.collectingAndThen( + Collectors.maxBy(Comparator.comparing( + JobRecord::getId, + Comparator.nullsLast(Integer::compare) + )), + Optional::get + ) + )) + .values() + .stream() + .collect(Collectors.toList()); + + } + + @Override + public List selectStaffPlans(JobRecord jobRecord,boolean isAll) { + List staffPlans = new ArrayList<>(); + RecordSet rs = new RecordSet(); + String sql = "select id,gw,bzgz,rzlx,zbzjhs,djbzs,zbrs,syrs from uf_bzjh where sfzxbb = 0"; + + //全部计算功能 + if (isAll) { + rs.executeQuery(sql); + while (rs.next()) { + staffPlans.add(StaffPlan.builder() + .id(Util.getIntValue(rs.getString("id"))) + .jobId(Util.getIntValue(rs.getString("gw"))) + .staffPlanNums(Util.getIntValue(rs.getString("zbzjhs"),0)) + .frozenNums(Util.getIntValue(rs.getString("djbzs"),0)) + .onJobNums(Util.getIntValue(rs.getString("zbrs"),0)) + .restNums(Util.getIntValue(rs.getString("syrs"),0)) + .build()); + } + }else { + sql += " and gw = ? and bzgz = ? and rzlx = ?"; + rs.executeQuery(sql,jobRecord.getJobId(),jobRecord.getStaffBelong(),jobRecord.getJobType()); + while (rs.next()) { + staffPlans.add(StaffPlan.builder() + .id(Util.getIntValue(rs.getString("id"))) + .jobId(Util.getIntValue(rs.getString("gw"))) + .staffPlanNums(Util.getIntValue(rs.getString("zbzjhs"),0)) + .frozenNums(Util.getIntValue(rs.getString("djbzs"),0)) + .onJobNums(Util.getIntValue(rs.getString("zbrs"),0)) + .restNums(Util.getIntValue(rs.getString("syrs"),0)) + .build()); + } + } + return staffPlans; + } + + @Override + public StaffDutyResult entryWorkflow(String requestId) { + + StaffDutyResult result = new StaffDutyResult(); + //1.获取任职数据信息 + List jobRecords = selectJobRecords(requestId); + if (jobRecords.size() == 0) { + result.setMessage(String.format("未查询到requestId:%s所对应的任职记录数据,请检查流程转建模配置",requestId)); + result.setStatus(false); + } + + //2.获取需要更新的编制执行情况数据 + List staffPlans = selectStaffPlans(jobRecords.get(0), false); + if (staffPlans.size() == 0) { + result.setMessage(String.format("requestId:%s所对应的任职记录数据在当前编制计划中未匹配,请检查参数",requestId)); + result.setStatus(false); + } + + //3.若匹配多条数据 获取id 较大的那条数据作为最新数据 + + + + + return result; + } }