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 * @Date 2025/4/21 15:31 * @Description: TODO * @Version 1.0 */ 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; } }