You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
weaver-develop/src/com/engine/newwaymask/service/impl/StaffDutyServiceImpl.java

139 lines
5.4 KiB
Java

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<JobRecord> selectJobRecords(String requestId) {
List<JobRecord> 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<StaffPlan> selectStaffPlans(JobRecord jobRecord,boolean isAll) {
List<StaffPlan> 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<JobRecord> jobRecords = selectJobRecords(requestId);
if (jobRecords.size() == 0) {
result.setMessage(String.format("未查询到requestId:%s所对应的任职记录数据,请检查流程转建模配置",requestId));
result.setStatus(false);
}
//2.获取需要更新的编制执行情况数据
List<StaffPlan> staffPlans = selectStaffPlans(jobRecords.get(0), false);
if (staffPlans.size() == 0) {
result.setMessage(String.format("requestId:%s所对应的任职记录数据在当前编制计划中未匹配,请检查参数",requestId));
result.setStatus(false);
}
//3.若匹配多条数据 获取id 较大的那条数据作为最新数据
return result;
}
}