Compare commits
No commits in common. "e664f8ae61381b8f0d6d66409f554ede7e6078ef" and "46f1c9fde12e979b87f692ff6f392489491cbe4f" have entirely different histories.
e664f8ae61
...
46f1c9fde1
|
|
@ -1,11 +1,15 @@
|
|||
/weaver-develop.iml
|
||||
/out/
|
||||
.idea/
|
||||
/target/
|
||||
|
||||
HELP.md
|
||||
target/
|
||||
|
||||
.idea
|
||||
|
||||
/test
|
||||
/src/rebel.xml
|
||||
/src/META-INF
|
||||
/WEB-INF/config
|
||||
/log
|
||||
/src/META-INF/
|
||||
/src/test/
|
||||
|
||||
/log
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="weaver-develop:jar">
|
||||
<output-path>$PROJECT_DIR$/out/artifacts/weaver_develop_jar</output-path>
|
||||
<root id="archive" name="weaver-develop.jar">
|
||||
<element id="module-output" name="weaver-develop" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="CompilerConfiguration">
|
||||
<annotationProcessing>
|
||||
<profile default="true" name="Default" enabled="true" />
|
||||
</annotationProcessing>
|
||||
</component>
|
||||
</project>
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
<component name="libraryTable">
|
||||
<library name="classbean">
|
||||
<CLASSES>
|
||||
<root url="file://$PROJECT_DIR$/../../../../weaver/ecology/classbean" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES />
|
||||
</library>
|
||||
</component>
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
<component name="libraryTable">
|
||||
<library name="lib">
|
||||
<CLASSES>
|
||||
<root url="file://$PROJECT_DIR$/../../../../weaver/ecology/WEB-INF/lib" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES>
|
||||
<root url="file://$PROJECT_DIR$/../../../../weaver/ecology/WEB-INF/lib" />
|
||||
</SOURCES>
|
||||
<jarDirectory url="file://$PROJECT_DIR$/../../../../weaver/ecology/WEB-INF/lib" recursive="false" />
|
||||
<jarDirectory url="file://$PROJECT_DIR$/../../../../weaver/ecology/WEB-INF/lib" recursive="false" type="SOURCES" />
|
||||
</library>
|
||||
</component>
|
||||
|
|
@ -1,2 +0,0 @@
|
|||
#岗位新 (基本信息)
|
||||
jobTitle=field45
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
Manifest-Version: 1.0
|
||||
Main-Class: test.MainTest
|
||||
|
||||
|
|
@ -1,13 +0,0 @@
|
|||
package com.api.newwaymask.web;
|
||||
|
||||
import javax.ws.rs.Path;
|
||||
|
||||
/**
|
||||
* @Author liang.cheng
|
||||
* @Date 2025/4/22 18:07
|
||||
* @Description:
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Path("/newwaymask/staff")
|
||||
public class StaffDutyAction extends com.engine.newwaymask.web.StaffDutyAction {
|
||||
}
|
||||
|
|
@ -1,24 +0,0 @@
|
|||
package com.engine.newwaymask.entity;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class HrmResource {
|
||||
|
||||
private Integer id;
|
||||
|
||||
private Integer subCompany;
|
||||
|
||||
private Integer department;
|
||||
|
||||
private Integer jobTitle;
|
||||
|
||||
private Integer status;
|
||||
}
|
||||
|
|
@ -1,41 +0,0 @@
|
|||
package com.engine.newwaymask.entity;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* @Author liang.cheng
|
||||
* @Date 2025/4/21 14:06
|
||||
* @Description:
|
||||
* @Version 1.0
|
||||
*/
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class JobRecord {
|
||||
|
||||
private Integer id;
|
||||
|
||||
private Integer resourceId;
|
||||
|
||||
private Integer jobId;
|
||||
|
||||
private Integer jobStatus;
|
||||
|
||||
private Integer jobType;
|
||||
|
||||
private String startDate;
|
||||
|
||||
private String endDate;
|
||||
|
||||
private Integer requestId;
|
||||
|
||||
private Integer lastId;
|
||||
|
||||
//岗位所属编制
|
||||
private Integer staffBelong;
|
||||
}
|
||||
|
|
@ -1,38 +0,0 @@
|
|||
package com.engine.newwaymask.entity;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* @Author liang.cheng
|
||||
* @Date 2025/4/23 10:04
|
||||
* @Description: 复合键
|
||||
* @Version 1.0
|
||||
*/
|
||||
public class Key {
|
||||
|
||||
private final Integer jobId;
|
||||
private final Integer staffBelong;
|
||||
private final Integer jobType;
|
||||
|
||||
public Key(Integer jobId, Integer staffBelong, Integer jobType) {
|
||||
this.jobId = jobId;
|
||||
this.staffBelong = staffBelong;
|
||||
this.jobType = jobType;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o){ return true;}
|
||||
if (o == null || getClass() != o.getClass()) {return false;}
|
||||
Key key = (Key) o;
|
||||
return Objects.equals(jobId, key.jobId) &&
|
||||
Objects.equals(staffBelong, key.staffBelong) &&
|
||||
Objects.equals(jobType, key.jobType);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(jobId, staffBelong, jobType);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,25 +0,0 @@
|
|||
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 StaffPlan staffPlan;
|
||||
}
|
||||
|
|
@ -1,49 +0,0 @@
|
|||
package com.engine.newwaymask.entity;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* @Author liang.cheng
|
||||
* @Date 2025/4/21 10:40
|
||||
* @Description: 编制执行情况 uf_bzjh
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
@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;
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "StaffPlan{" +
|
||||
"id=" + id +
|
||||
", 岗位id=" + jobId +
|
||||
", 编制归属=" + staffBelong +
|
||||
", 任职类型=" + jobType +
|
||||
", 总编制计划数=" + staffPlanNums +
|
||||
", 冻结编制数=" + frozenNums +
|
||||
", 在编人数=" + onJobNums +
|
||||
", 剩余人数=" + restNums +
|
||||
'}';
|
||||
}
|
||||
}
|
||||
|
|
@ -1,32 +0,0 @@
|
|||
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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,78 +0,0 @@
|
|||
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;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @Author liang.cheng
|
||||
* @Date 2025/4/21 15:30
|
||||
* @Description: TODO
|
||||
* @Version 1.0
|
||||
*/
|
||||
public interface StaffDutyService {
|
||||
|
||||
|
||||
/**
|
||||
* @Description: 获取当前任职数据
|
||||
* @Author: liang.cheng
|
||||
* @Date: 2025/4/21 16:12
|
||||
* @param: [reqyestId]
|
||||
* @return: java.util.List<com.engine.newwaymask.entity.JobRecord>
|
||||
*/
|
||||
List<JobRecord> selectJobRecords(String requestId);
|
||||
|
||||
|
||||
/**
|
||||
* @Description: 获取需要更新的编制执行情况数据
|
||||
* @Author: liang.cheng
|
||||
* @Date: 2025/4/21 17:37
|
||||
* @param: [workflowRequestParam]
|
||||
* @return: java.util.List<com.engine.newwaymask.entity.StaffPlan>
|
||||
*/
|
||||
List<StaffPlan> 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,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);
|
||||
|
||||
|
||||
/**
|
||||
* @Description: 全部计算功能
|
||||
* @Author: liang.cheng
|
||||
* @Date: 2025/4/23 09:33
|
||||
* @param: []
|
||||
* @return: java.util.Map<java.lang.String,java.lang.Object>
|
||||
*/
|
||||
Map<String,Object> calculateAll();
|
||||
}
|
||||
|
|
@ -1,362 +0,0 @@
|
|||
package com.engine.newwaymask.service.impl;
|
||||
|
||||
import com.engine.core.impl.Service;
|
||||
import com.engine.newwaymask.entity.JobRecord;
|
||||
import com.engine.newwaymask.entity.Key;
|
||||
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;
|
||||
|
||||
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.lcqqid = "+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")))
|
||||
.jobType(Util.getIntValue(rs.getString("rzlx")))
|
||||
.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")))
|
||||
.jobType(Util.getIntValue(rs.getString("rzlx")))
|
||||
.staffBelong(Util.getIntValue(rs.getString("bzgz")))
|
||||
.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")))
|
||||
.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")))
|
||||
.build());
|
||||
}
|
||||
}
|
||||
return staffPlans;
|
||||
}
|
||||
|
||||
@Override
|
||||
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<Integer> 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<Integer> 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<JobRecord> 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<StaffPlan> 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<StaffPlan> 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<Integer> 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<Integer> 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();
|
||||
String currentTime = TimeUtil.getCurrentTimeString();
|
||||
|
||||
try {
|
||||
trans.setAutoCommit(false);
|
||||
|
||||
trans.executeUpdate("update uf_bzjh set zbrs = ?,syrs = ?,modedatamodifydatetime = ? where id = ?", onJobFrom, restFrom,currentTime, staffPlanFrom.getId());
|
||||
trans.executeUpdate("update uf_bzjh set zbrs = ?,syrs = ?,modedatamodifydatetime = ? where id = ?", onJobTo, restTo,currentTime, staffPlanTo.getId());
|
||||
trans.commit();
|
||||
|
||||
}catch (Exception e) {
|
||||
trans.rollback();
|
||||
result.setMessage("编制信息更新失败,请联系管理员");
|
||||
result.setStatus(false);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Object> calculateAll() {
|
||||
|
||||
List<JobRecord> jobRecords = selectJobRecords("");
|
||||
List<StaffPlan> staffPlans = selectStaffPlans(null, true);
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
|
||||
Map<Key, Integer> countMap = new HashMap<>();
|
||||
for (JobRecord record : jobRecords) {
|
||||
Key key = new Key(record.getJobId(), record.getStaffBelong(), record.getJobType());
|
||||
countMap.put(key, countMap.getOrDefault(key, 0) + 1);
|
||||
}
|
||||
|
||||
for (StaffPlan plan : staffPlans) {
|
||||
Key key = new Key(plan.getJobId(), plan.getStaffBelong(), plan.getJobType());
|
||||
Integer onJob = countMap.getOrDefault(key, 0);
|
||||
LinkedList<Integer> numbers = new LinkedList<>(Arrays.asList(plan.getStaffPlanNums(), plan.getFrozenNums(), onJob));
|
||||
int rest = numbers.stream()
|
||||
.findFirst()
|
||||
.map(first -> first - numbers.stream().skip(1).mapToInt(Integer::intValue).sum())
|
||||
.orElse(0);
|
||||
updateStaffPlan(onJob, rest, plan.getId());
|
||||
}
|
||||
|
||||
map.put("size",staffPlans.size());
|
||||
|
||||
return map;
|
||||
}
|
||||
|
||||
|
||||
private StaffDutyResult buildStaffPlan(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);
|
||||
return result;
|
||||
}
|
||||
|
||||
//2.获取需要更新的编制执行情况数据
|
||||
List<StaffPlan> staffPlans = selectStaffPlans(jobRecords.get(0), false);
|
||||
if (staffPlans.size() == 0) {
|
||||
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();
|
||||
String currentTime = TimeUtil.getCurrentTimeString();
|
||||
return rs.executeUpdate("update uf_bzjh set zbrs = ?,syrs = ?,modedatamodifydatetime = ? where id = ?", onJob, rest,currentTime, id);
|
||||
}
|
||||
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,50 +0,0 @@
|
|||
package com.engine.newwaymask.web;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.alibaba.fastjson.serializer.SerializerFeature;
|
||||
import com.engine.common.util.ServiceUtil;
|
||||
import com.engine.newwaymask.service.StaffDutyService;
|
||||
import com.engine.newwaymask.service.impl.StaffDutyServiceImpl;
|
||||
import weaver.hrm.HrmUserVarify;
|
||||
import weaver.hrm.User;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.ws.rs.GET;
|
||||
import javax.ws.rs.POST;
|
||||
import javax.ws.rs.Path;
|
||||
import javax.ws.rs.Produces;
|
||||
import javax.ws.rs.core.Context;
|
||||
import javax.ws.rs.core.MediaType;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @Author liang.cheng
|
||||
* @Date 2025/4/22 18:50
|
||||
* @Description:
|
||||
* @Version 1.0
|
||||
*/
|
||||
public class StaffDutyAction {
|
||||
|
||||
private StaffDutyService getService(User user) {
|
||||
return ServiceUtil.getService(StaffDutyServiceImpl.class, user);
|
||||
}
|
||||
|
||||
|
||||
@GET
|
||||
@Path("/calculateAll")
|
||||
@Produces(MediaType.TEXT_PLAIN)
|
||||
public String calculateAll(@Context HttpServletRequest request, @Context HttpServletResponse response){
|
||||
Map<String, Object> data = new HashMap<>(8);
|
||||
try {
|
||||
User user = HrmUserVarify.getUser(request, response);
|
||||
data.putAll(getService(user).calculateAll());
|
||||
data.put("code", 200);
|
||||
} catch (Exception e) {
|
||||
data.put("code", 500);
|
||||
data.put("msg", "catch exception : " + e.getMessage());
|
||||
}
|
||||
return JSONObject.toJSONString(data, SerializerFeature.DisableCircularReferenceDetect);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
package test;
|
||||
|
||||
/**
|
||||
* @Author weaver_cl
|
||||
* @Description:
|
||||
* @Date 2022/10/9
|
||||
* @Version V1.0
|
||||
**/
|
||||
public class MainTest {
|
||||
|
||||
public static void main(String[] args) {
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -1,56 +0,0 @@
|
|||
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: 流程更新编制信息(归档)
|
||||
* @Version 1.0
|
||||
*/
|
||||
public class StaffByEndWorkflowAction implements Action {
|
||||
|
||||
@Override
|
||||
public String execute(RequestInfo requestInfo) {
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
return Action.SUCCESS;
|
||||
|
||||
// if (result.getStatus()) {
|
||||
// requestInfo.getRequestManager().setMessagecontent(result.getMessage());
|
||||
// return Action.SUCCESS;
|
||||
// }else {
|
||||
// requestInfo.getRequestManager().setMessagecontent(result.getMessage());
|
||||
// return Action.FAILURE_AND_CONTINUE;
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
|
@ -1,19 +0,0 @@
|
|||
package weaver.interfaces.newwaymask.action;
|
||||
|
||||
import weaver.interfaces.workflow.action.Action;
|
||||
import weaver.soa.workflow.request.RequestInfo;
|
||||
|
||||
/**
|
||||
* @Author liang.cheng
|
||||
* @Date 2025/4/1 11:48
|
||||
* @Description: 流程更新编制信息(提交 + 退回)
|
||||
* @Version 1.0
|
||||
*/
|
||||
public class StaffBySubmitWorkflowAction implements Action {
|
||||
|
||||
@Override
|
||||
public String execute(RequestInfo requestInfo) {
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,54 +0,0 @@
|
|||
package weaver.interfaces.newwaymask.cron;
|
||||
|
||||
import com.engine.newwaymask.entity.HrmResource;
|
||||
import com.weaver.general.Util;
|
||||
import weaver.conn.RecordSet;
|
||||
import weaver.general.TimeUtil;
|
||||
import weaver.interfaces.schedule.BaseCronJob;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author liang.cheng
|
||||
* @Date 2025/4/1 11:22
|
||||
* @Description: 定时更新人员最新部门和岗位数据 分部 状态
|
||||
* @Version 1.0
|
||||
*/
|
||||
public class ResourceCardUpdateCron extends BaseCronJob {
|
||||
|
||||
|
||||
@Override
|
||||
public void execute() {
|
||||
|
||||
RecordSet rs = new RecordSet();
|
||||
String currentDate = TimeUtil.getCurrentDateString();
|
||||
List<HrmResource> hrmResourceList = new ArrayList<>();
|
||||
rs.executeQuery("select a.rzry,a.fb,a.bm,a.gw,b.zt from uf_rzxxb a left join uf_gwztysgxb b\n" +
|
||||
"on a.gwzt = b.gwzt where a.rzlx = 0 and a.ksrq = ?",currentDate);
|
||||
|
||||
while (rs.next()) {
|
||||
hrmResourceList.add(HrmResource.builder()
|
||||
.id(Util.getIntValue(rs.getString("rzry")))
|
||||
.subCompany(Util.getIntValue(rs.getString("fb")))
|
||||
.department(Util.getIntValue(rs.getString("bm")))
|
||||
.jobTitle(Util.getIntValue(rs.getString("gw")))
|
||||
.status(Util.getIntValue(rs.getString("zt")))
|
||||
.build());
|
||||
}
|
||||
|
||||
String jobTitle = rs.getPropValue("newwaysecond", "jobTitle");
|
||||
|
||||
hrmResourceList.forEach(item -> {
|
||||
//1.更新人员表
|
||||
rs.executeUpdate("update hrmResource set subcompanyid1 = ?,departmentid = ?,status = ? where id = ?",item.getSubCompany(),
|
||||
item.getDepartment(),item.getStatus(),item.getId());
|
||||
|
||||
//2.更新自定义表
|
||||
rs.executeUpdate("update cus_fielddata set "+jobTitle+" = ? where scope = 'HrmCustomFieldByInfoType' and scopeid = -1 and id = ?",item.getJobTitle(),item.getId());
|
||||
|
||||
});
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue