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-hrm-organization/src/com/engine/organization/thread/StaffTriggerRunnable.java

146 lines
6.2 KiB
Java

package com.engine.organization.thread;
import com.engine.organization.entity.commom.RecordInfo;
import com.engine.organization.entity.company.po.CompPO;
import com.engine.organization.entity.department.po.DepartmentPO;
import com.engine.organization.entity.job.po.JobPO;
import com.engine.organization.entity.staff.po.StaffPO;
import com.engine.organization.entity.staff.po.StaffPlanPO;
import com.engine.organization.mapper.comp.CompMapper;
import com.engine.organization.mapper.department.DepartmentMapper;
import com.engine.organization.mapper.hrmresource.SystemDataMapper;
import com.engine.organization.mapper.job.JobMapper;
import com.engine.organization.mapper.staff.StaffPlanMapper;
import com.engine.organization.mapper.trigger.StaffTriggerMapper;
import com.engine.organization.util.OrganizationDateUtil;
import com.engine.organization.util.db.MapperProxyFactory;
import com.engine.organization.util.relation.EcHrmRelationUtil;
import org.apache.commons.lang3.StringUtils;
import weaver.general.Util;
/**
* @author:dxfeng
* @createTime: 2022/09/21
* @version: 1.0
*/
public class StaffTriggerRunnable implements Runnable {
StaffPO staffPO;
private StaffPlanMapper getStaffPlanMapper() {
return MapperProxyFactory.getProxy(StaffPlanMapper.class);
}
private StaffTriggerMapper getStaffTriggerMapper() {
return MapperProxyFactory.getProxy(StaffTriggerMapper.class);
}
private CompMapper getCompMapper() {
return MapperProxyFactory.getProxy(CompMapper.class);
}
private DepartmentMapper getDepartmentMapper() {
return MapperProxyFactory.getProxy(DepartmentMapper.class);
}
private JobMapper getJobMapper() {
return MapperProxyFactory.getProxy(JobMapper.class);
}
private final String currentDate;
public StaffTriggerRunnable(StaffPO staffPO) {
this.staffPO = staffPO;
currentDate = OrganizationDateUtil.getFormatLocalDate(new java.util.Date());
}
@Override
public void run() {
if (null != staffPO) {
StaffPlanPO staffPlanByID = getStaffPlanMapper().getStaffPlanByID(staffPO.getPlanId());
if (null != staffPlanByID && StringUtils.isNotBlank(staffPlanByID.getControlDimension())) {
String fType = staffPlanByID.getControlDimension();
switch (fType) {
case "1":
// 更新分部编制
refreshCompanyStaff(staffPO.getCompId(), 0);
break;
case "2":
// 更新部门编制
refreshCompanyStaff(staffPO.getCompId(), 0);
refreshDepartmentStaff(staffPO.getDeptId(), 0);
break;
case "3":
// 更新岗位编制
refreshCompanyStaff(staffPO.getCompId(), 0);
refreshDepartmentStaff(staffPO.getDeptId(), 0);
refreshJobStaff(staffPO.getJobId(), 0);
break;
default:
break;
}
}
}
}
private void refreshCompanyStaff(Long companyId, Integer fPlan) {
if (null == companyId) {
return;
}
CompPO compPO = getCompMapper().listById(companyId);
if (null != compPO) {
String ecCompanyId = EcHrmRelationUtil.getEcCompanyId(Util.null2String(companyId));
String fObjId = Util.null2String(companyId);
int fOnJob = getStaffTriggerMapper().countCompanyUsers(ecCompanyId);
Integer staffSum = getStaffTriggerMapper().countCompanyStaffNum(currentDate, companyId);
fPlan += null == staffSum ? 0 : staffSum;
getStaffTriggerMapper().updateOrgStaffs(currentDate, "1", fObjId, fPlan < 0 ? 0 : fPlan, fOnJob);
if (null != compPO.getParentCompany() && 0 != compPO.getParentCompany()) {
refreshCompanyStaff(compPO.getParentCompany(), fPlan);
} else {
refreshGroupStaff(fPlan);
}
}
}
private void refreshDepartmentStaff(Long departmentId, Integer fPlan) {
if (null == departmentId) {
return;
}
DepartmentPO deptById = getDepartmentMapper().getDeptById(departmentId);
if (null != deptById) {
String ecDepartmentId = EcHrmRelationUtil.getEcDepartmentId(Util.null2String(departmentId));
String fObjId = Util.null2String(departmentId);
int fOnJob = getStaffTriggerMapper().countDepartmentUsers(ecDepartmentId);
Integer staffSum = getStaffTriggerMapper().countDepartmentStaffNum(currentDate, departmentId);
fPlan += null == staffSum ? 0 : staffSum;
getStaffTriggerMapper().updateOrgStaffs(currentDate, "2", fObjId, fPlan < 0 ? 0 : fPlan, fOnJob);
if (null != deptById.getParentDept() && 0 != deptById.getParentDept()) {
refreshDepartmentStaff(deptById.getParentDept(), fPlan);
}
}
}
private void refreshJobStaff(Long jobId, Integer fPlan) {
if (null == jobId) {
return;
}
JobPO jobById = getJobMapper().getJobById(jobId);
if (null != jobById) {
String fObjId = Util.null2String(jobId);
RecordInfo hrmJobTitleByName = MapperProxyFactory.getProxy(SystemDataMapper.class).getHrmJobTitleByName(jobById.getJobName());
int fOnJob = getStaffTriggerMapper().countJobUsers(hrmJobTitleByName.getId());
Integer staffSum = getStaffTriggerMapper().countJobStaffNum(currentDate, jobId);
fPlan += null == staffSum ? 0 : staffSum;
getStaffTriggerMapper().updateOrgStaffs(currentDate, "3", fObjId, fPlan < 0 ? 0 : fPlan, fOnJob);
//if (null != jobById.getParentJob() && 0 != jobById.getParentJob()) {
// refreshJobStaff(jobById.getParentJob(), fPlan);
//}
}
}
private void refreshGroupStaff(Integer fPlan) {
Integer fOnJob = getStaffTriggerMapper().countAllusers();
getStaffTriggerMapper().updateOrgStaffs(currentDate, "0", "0", fPlan < 0 ? 0 : fPlan, fOnJob);
}
}