编制信息更新 流程明细处理 新增

pull/281/head
Chengliang 7 months ago
parent 6c973d86cd
commit bb021a6f45

@ -96,7 +96,7 @@
<select id="listDeptsByIds" resultType="java.util.Map">
select
id as "id",
departmentName as "name"
departmentMark as "name"
from hrmdepartment t
WHERE id IN
<foreach collection="ids" open="(" item="id" separator="," close=")">

@ -380,7 +380,7 @@ public class JobServiceImpl extends Service implements JobService {
String jobNo = (String) params.get("job_no");
// 判断是否开启自动编号
jobNo = repeatDetermine(jobNo);
jobNo = repeatDetermine(jobNo,searchParam.getEcJobTitle(),searchParam.getEcDepartment());
params.put("job_no", jobNo);
return getExtService(user).updateExtForm(user, EXTEND_TYPE, JCL_ORG_JOB, params, "", null);
}
@ -401,7 +401,7 @@ public class JobServiceImpl extends Service implements JobService {
String oldJobNo = oldJobPO.getJobNo();
String jobNo = searchParam.getJobNo();
if (!jobNo.equals(oldJobNo)) {
jobNo = repeatDetermine(jobNo);
jobNo = repeatDetermine(jobNo,searchParam.getEcJobTitle(),searchParam.getEcDepartment());
params.put("job_no", jobNo);
}
@ -739,7 +739,8 @@ public class JobServiceImpl extends Service implements JobService {
*
* @return
*/
public String repeatDetermine(String jobNo) {
public String repeatDetermine(String jobNo,Integer jobTitle,Integer departmentId) {
JobTitlesComInfo jb = new JobTitlesComInfo();
CodeRulePO codeRuleByType = MapperProxyFactory.getProxy(CodeRuleMapper.class).getCodeRuleByType(RuleCodeType.JOBTITLES.getValue());
if (StringUtils.isNotBlank(jobNo)) {
jobNo = CodeRuleUtil.generateCode(RuleCodeType.JOBTITLES, jobNo);
@ -748,7 +749,11 @@ public class JobServiceImpl extends Service implements JobService {
OrganizationAssert.isEmpty(list, SystemEnv.getHtmlLabelName(547137, user.getLanguage()));
} else {
//OrganizationAssert.isTrue(null != codeRuleByType && "1".equals(codeRuleByType.getSerialEnable()), SystemEnv.getHtmlLabelName(547430,user.getLanguage()));
jobNo = autoCreateCompanyNo();
//jobNo = autoCreateCompanyNo();
String jobTitlescode = jb.getJobTitlescode(String.valueOf(jobTitle));
if (!"".equals(jobTitlescode)) {
jobNo = jobTitlescode+"-"+departmentId;
}
}
return jobNo;
}

@ -0,0 +1,169 @@
package weaver.interfaces.organization.action;
import cn.hutool.core.collection.CollectionUtil;
import com.engine.organization.entity.hrmresource.po.ResourcePO;
import com.engine.organization.entity.job.po.JobPO;
import com.engine.organization.entity.staff.po.StaffPO;
import com.engine.organization.enums.DeleteTypeEnum;
import com.engine.organization.mapper.job.JobMapper;
import com.engine.organization.mapper.staff.StaffMapper;
import com.engine.organization.util.db.MapperProxyFactory;
import weaver.conn.RecordSet;
import weaver.general.Util;
import weaver.hrm.job.JobTitlesComInfo;
import weaver.interfaces.workflow.action.Action;
import weaver.soa.workflow.request.RequestInfo;
import java.util.*;
/**
* @Author liang.cheng
* @Date 2024/9/25 2:03 PM
* @Description:
* @Version 1.0
*/
public class WorkflowStaffOperateAction 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);
String detaiTable = String.format("%s%s",mainTable,"_dt1");
//1.获取表单数据
rs.executeQuery("select a.bzfa,b.fb,b.bm,b.gw,b.bzs,b.zzs from "+mainTable+" as a \n" +
"right join "+detaiTable+" as b on a.id = b.mainid where a.requestid = ?",requestid);
List<StaffPO> staffList = new ArrayList<>();
while (rs.next()) {
StaffPO build = StaffPO.builder()
.planId(Util.getIntValue(rs.getString("bzfa")))
.compId(Util.getIntValue(rs.getString("fb")))
.deptId(Util.getIntValue(rs.getString("bm")))
.jobId(Util.getIntValue(rs.getString("gw")))
.staffNum(Util.getIntValue(rs.getString("bzs")))
.permanentNum(Util.getIntValue(rs.getString("zzs")))
.build();
staffList.add(build);
}
if (CollectionUtil.isEmpty(staffList)) {
requestInfo.getRequestManager().setMessagecontent("未找到明细数据");
return Action.FAILURE_AND_CONTINUE;
}
Integer planId = staffList.get(0).getPlanId();
//2.数据处理Ec岗位id替换为聚才林岗位id 不存在情况下新增岗位数据
buildJobTitle(staffList);
//3.根据方案id获取当前已有编制信息与流程明细比较已存在的更新未存在的新增
List<StaffPO> hStaffList = new ArrayList<>();
rs.executeQuery("select id,comp_id,dept_id,job_id,freeze_num from jcl_org_staff where plan_id = ? and delete_type = 0",planId);
while (rs.next()) {
StaffPO build = StaffPO.builder()
.id((long) Util.getIntValue(rs.getString("id")))
.compId(Util.getIntValue(rs.getString("comp_id")))
.deptId(Util.getIntValue(rs.getString("dept_id")))
.jobId(Util.getIntValue(rs.getString("job_id")))
.freezeNum(Util.getIntValue(rs.getString("freeze_num")))
.build();
hStaffList.add(build);
}
//新增的编制信息数据List
List<StaffPO> iStaffList = new ArrayList<>();
Map<String, StaffPO> hStaffMap = new HashMap<>();
for (StaffPO staff : hStaffList) {
String key = staff.getCompId() + "_" + staff.getDeptId() + "_" + staff.getJobId();
hStaffMap.put(key, staff);
}
for (StaffPO staff : staffList) {
String key = staff.getCompId() + "_" + staff.getDeptId() + "_" + staff.getJobId();
if (hStaffMap.containsKey(key)) {
StaffPO matchedStaff = hStaffMap.get(key);
matchedStaff.setPermanentNum(staff.getPermanentNum());
matchedStaff.setStaffNum(staff.getStaffNum());
}else {
iStaffList.add(staff);
}
}
//更新
hStaffList.forEach(item -> {
//todo 冻结数还原为0根据需求而定
buildStaffPO(item);
rs.executeUpdate("update jcl_org_staff set staff_num = ?,permanent_num = ?,lack_status = ? where id = ?",
item.getStaffNum(),item.getPermanentNum(),item.getLackStatus(),item.getId());
});
//插入
iStaffList.forEach(staffPO -> {
staffPO.setFreezeNum(0);
staffPO.setControlPolicy(1);
staffPO.setDeleteType(0);
staffPO.setCreateTime(new Date());
staffPO.setUpdateTime(new Date());
staffPO.setCreator(1L);
buildStaffPO(staffPO);
MapperProxyFactory.getProxy(StaffMapper.class).insertIgnoreNull(staffPO);
});
return Action.FAILURE_AND_CONTINUE;
}
/**
* Ec
* @param staffList
*/
private void buildJobTitle(List<StaffPO> staffList) {
JobTitlesComInfo jb = new JobTitlesComInfo();
staffList.forEach(item -> {
ResourcePO resourcePo = ResourcePO.builder().subcompanyid1(item.getCompId()).departmentid(item.getDeptId()).jobtitle(item.getJobId()).build();
JobPO jobByResource = MapperProxyFactory.getProxy(JobMapper.class).getJobByResource(resourcePo);
if (jobByResource == null) {
//岗位不存在新增
JobPO jobPO = JobPO.builder()
.ecCompany(resourcePo.getSubcompanyid1())
.ecDepartment(resourcePo.getDepartmentid())
.ecJobTitle(resourcePo.getJobtitle())
.isKey(0)
.deleteType(DeleteTypeEnum.NOT_DELETED.getValue())
.createTime(new Date())
.updateTime(new Date())
.build();
String jobTitlescode = jb.getJobTitlescode(String.valueOf(resourcePo.getJobtitle()));
if (!"".equals(jobTitlescode)) {
jobPO.setJobNo(jobTitlescode+"-"+resourcePo.getDepartmentid());
}
MapperProxyFactory.getProxy(JobMapper.class).insertIgnoreNull(jobPO);
item.setJobId(Math.toIntExact(jobPO.getId()));
}else {
item.setJobId(Math.toIntExact(jobByResource.getId()));
}
});
}
private static void buildStaffPO(StaffPO staffPO) {
List<Integer> number = Arrays.asList(staffPO.getPermanentNum(),staffPO.getFreezeNum());
Integer sums = number.stream()
.mapToInt(Integer::intValue)
.sum();
Integer a = staffPO.getStaffNum();
staffPO.setLackStatus((a.compareTo(sums) < 0) ? 3 : ((a.compareTo(sums) == 0) ? 2 : 1));
}
}
Loading…
Cancel
Save