|
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
}
|