@ -10,6 +10,7 @@ import com.engine.common.util.ServiceUtil;
import com.engine.core.impl.Service ;
import com.engine.hrm.entity.RuleCodeType ;
import com.engine.organization.component.OrganizationWeaTable ;
import com.engine.organization.entity.DeleteParam ;
import com.engine.organization.entity.codesetting.po.CodeRulePO ;
import com.engine.organization.entity.commom.RecordInfo ;
import com.engine.organization.entity.company.bo.CompBO ;
@ -38,6 +39,7 @@ import com.engine.organization.mapper.job.JobMapper;
import com.engine.organization.service.DepartmentService ;
import com.engine.organization.service.ExtService ;
import com.engine.organization.thread.DepartmentTriggerRunnable ;
import com.engine.organization.thread.HrmResourceTriggerRunnable ;
import com.engine.organization.thread.JobTriggerRunnable ;
import com.engine.organization.thread.OrganizationSyncEc ;
import com.engine.organization.util.* ;
@ -50,6 +52,7 @@ import com.engine.organization.util.relation.EcHrmRelationUtil;
import com.engine.organization.util.tree.SearchTreeUtil ;
import org.apache.commons.collections4.CollectionUtils ;
import org.apache.commons.lang.StringUtils ;
import weaver.conn.RecordSet ;
import weaver.general.StringUtil ;
import weaver.general.Util ;
import weaver.hrm.User ;
@ -293,6 +296,8 @@ public class DepartmentServiceImpl extends Service implements DepartmentService
params . put ( "ec_company" , EcHrmRelationUtil . getEcCompanyId ( jclDepartmentId . getParentComp ( ) + "" ) ) ;
}
} else {
params . put ( "parent_dept" , "" ) ;
}
new OrganizationSyncEc ( user , LogModuleNameEnum . DEPARTMENT , OperateTypeEnum . UPDATE , params ) . sync ( ) ;
// 更新主表数据
@ -307,7 +312,8 @@ public class DepartmentServiceImpl extends Service implements DepartmentService
// 刷新岗位所属分部
refreshJobComp ( searchParam . getId ( ) , parentComp ) ;
List < DepartmentPO > childList = getDepartmentMapper ( ) . getDeptListByPId ( searchParam . getId ( ) ) ;
forbiddenChildTag ( parentComp , childList , false ) ;
String ecCompanyId = EcHrmRelationUtil . getEcCompanyId ( Util . null2String ( parentComp ) ) ;
forbiddenChildTag ( parentComp , ecCompanyId , childList ) ;
return searchParam . getId ( ) ;
}
@ -549,19 +555,20 @@ public class DepartmentServiceImpl extends Service implements DepartmentService
@Override
public int mergeDepartment ( DepartmentMergeParam mergeParam ) {
//TODO 逻辑重写,被合并部门,子元素全部转移。被合并部门删除、封存
HasRightUtil . hasRight ( user , RIGHT_NAME , false ) ;
int updateCount ;
// 被合并部门
Long ecParamDepartment = mergeParam . getDepartment ( ) ;
DepartmentPO jclDepartmentId = EcHrmRelationUtil . getJclDepartmentId ( ecParamDepartment + "" ) ;
Long jclParamDepartment = jclDepartmentId . getId ( ) ;
OrganizationAssert . isFalse ( mergeParam . getId ( ) . equals ( jclParamDepartment ) , "所选部门与待合并部门一致,无需操作" ) ;
DepartmentPO targetDepartment = EcHrmRelationUtil . getJclDepartmentId ( ecParamDepartment + "" ) ;
// 断言判断
OrganizationAssert . isFalse ( null = = targetDepartment , "被合并部门数据有误,暂时无法合并" ) ;
OrganizationAssert . isFalse ( mergeParam . getId ( ) . equals ( targetDepartment . getId ( ) ) , "所选部门与待合并部门一致,无需操作" ) ;
OrganizationAssert . notNull ( mergeParam . getDepartment ( ) , "请选择需要合并的部门" ) ;
OrganizationAssert . notBlank ( mergeParam . getMergeName ( ) , "请输入合并后的名称" ) ;
// 合并到的部门
DepartmentPO targetDepartment = getDepartmentMapper ( ) . getDeptById ( jclParamDepartment ) ;
// 不可选择合并的数据,本身及子部门
Set < Long > disableIds = new HashSet < > ( ) ;
// 添加选择部门本身
disableIds . add ( mergeParam . getId ( ) ) ;
List < DepartmentPO > deptListByPId = getDepartmentMapper ( ) . getDeptListByPId ( mergeParam . getId ( ) ) ;
if ( CollectionUtils . isNotEmpty ( deptListByPId ) ) {
@ -569,31 +576,62 @@ public class DepartmentServiceImpl extends Service implements DepartmentService
}
OrganizationAssert . isFalse ( disableIds . contains ( targetDepartment . getId ( ) ) , "请勿选择当前部门本身及其子部门" ) ;
//TODO 被合并部门
// 查询该部门下一级部门
List < DepartmentPO > firstChildDeptList = getDepartmentMapper ( ) . getDeptListByPId ( mergeParam . getId ( ) ) ;
// 更新所属部门、所属分部
for ( DepartmentPO departmentPO : firstChildDeptList ) {
departmentPO . setParentDept ( targetDepartment . getId ( ) ) ;
departmentPO . setEcDepartment ( ecParamDepartment ) ;
departmentPO . setParentComp ( targetDepartment . getParentComp ( ) ) ;
departmentPO . setEcCompany ( targetDepartment . getEcCompany ( ) ) ;
updateEcDepartment ( departmentPO ) ;
getDepartmentMapper ( ) . updateBaseDept ( departmentPO ) ;
// 更新组织架构图
new Thread ( new DepartmentTriggerRunnable ( departmentPO . getId ( ) ) ) . start ( ) ;
}
// 查询该部门一级岗位、更新岗位所属分部、所属部门
List < JobPO > firstChildJobList = getJobMapper ( ) . listJobsByDepartmentId ( mergeParam . getId ( ) ) ;
// 批量更新部门、所属分部
RecordSet rs = new RecordSet ( ) ;
String targetEcDeptId = EcHrmRelationUtil . getEcDepartmentId ( targetDepartment . getId ( ) . toString ( ) ) ;
String mergeEcDeptId = EcHrmRelationUtil . getEcDepartmentId ( mergeParam . getId ( ) . toString ( ) ) ;
rs . executeUpdate ( "update jcl_org_job set parent_comp =?,ec_company =?,parent_dept =?,ec_department =? where parent_dept =?" , targetDepartment . getParentComp ( ) , targetDepartment . getEcCompany ( ) , targetDepartment . getId ( ) , targetEcDeptId , mergeParam . getId ( ) ) ;
// 更新岗位组织架构图
for ( JobPO jobPO : firstChildJobList ) {
// 刷新组织架构图
new Thread ( new JobTriggerRunnable ( jobPO . getId ( ) ) ) . start ( ) ;
}
// 更新当前部门下的人员
List < Long > hrmResourceIds = getSystemDataMapper ( ) . getHrmResourceIdsByDept ( mergeEcDeptId ) ;
rs . executeUpdate ( "update hrmresource set SUBCOMPANYID1 =?,DEPARTMENTID =? where DEPARTMENTID =?" , targetDepartment . getEcCompany ( ) , targetEcDeptId , mergeEcDeptId ) ;
// 更新人员组织架构图
for ( Long hrmResourceId : hrmResourceIds ) {
new Thread ( new HrmResourceTriggerRunnable ( hrmResourceId ) ) . start ( ) ;
}
// 更新子部门下岗位的所属分部
for ( DepartmentPO departmentPO : firstChildDeptList ) {
List < DepartmentPO > deptList = getDepartmentMapper ( ) . getDeptListByPId ( departmentPO . getId ( ) ) ;
forbiddenChildTag ( targetDepartment . getParentComp ( ) , Util . null2String ( targetDepartment . getEcCompany ( ) ) , deptList ) ;
}
// 原部门删除
DepartmentPO mergeDepartment = getDepartmentMapper ( ) . getDeptById ( mergeParam . getId ( ) ) ;
mergeDepartment . setDeptName ( mergeParam . getMergeName ( ) ) ;
mergeDepartment . setDeptNameShort ( mergeParam . getMergeName ( ) ) ;
mergeDepartment . setParentDept ( jclParamDepartment ) ;
mergeDepartment . setEcDepartment ( ecParamDepartment ) ;
mergeDepartment . setParentComp ( targetDepartment . getParentComp ( ) ) ;
mergeDepartment . setEcCompany ( targetDepartment . getEcCompany ( ) ) ;
// 禁用
mergeDepartment . setForbiddenTag ( 1 ) ;
// 更新EC表部门
updateEcDepartment ( mergeDepartment ) ;
// 封存EC表部门
cancelEcDepartment ( mergeDepartment . getId ( ) ) ;
updateCount = getDepartmentMapper ( ) . updateBaseDept ( mergeDepartment ) ;
Map < String , Object > map = new HashMap < > ( ) ;
map . put ( "id" , mergeParam . getId ( ) ) ;
new OrganizationSyncEc ( user , LogModuleNameEnum . DEPARTMENT , OperateTypeEnum . CANCELED , map ) . sync ( ) ;
// 删除拓展表、明细表
MapperProxyFactory . getProxy ( ExtMapper . class ) . deleteByID ( "jcl_org_deptext" , mergeParam . getId ( ) ) ;
MapperProxyFactory . getProxy ( ExtDTMapper . class ) . deleteByMainID ( "jcl_org_deptext_dt1" , mergeParam . getId ( ) ) ;
getDepartmentMapper ( ) . deleteByIds ( DeleteParam . builder ( ) . ids ( mergeParam . getId ( ) . toString ( ) ) . build ( ) . getIds ( ) ) ;
// 更新组织架构图
new Thread ( new DepartmentTriggerRunnable ( mergeDepartment . getId ( ) ) ) . start ( ) ;
// 刷新岗位分部
refreshJobComp ( mergeDepartment . getId ( ) , mergeDepartment . getParentComp ( ) ) ;
// 合并后部门及子部门禁用
List < DepartmentPO > deptList = getDepartmentMapper ( ) . getDeptListByPId ( mergeParam . getId ( ) ) ;
forbiddenChildTag ( targetDepartment . getParentComp ( ) , deptList , true ) ;
return updateCount ;
new Thread ( new DepartmentTriggerRunnable ( mergeDepartment ) ) . start ( ) ;
// 更新部门合并后名称
targetDepartment . setDeptName ( mergeParam . getMergeName ( ) ) ;
targetDepartment . setDeptNameShort ( mergeParam . getMergeName ( ) ) ;
updateEcDepartment ( targetDepartment ) ;
getDepartmentMapper ( ) . updateBaseDept ( targetDepartment ) ;
// 更新组织架构图
new Thread ( new DepartmentTriggerRunnable ( targetDepartment . getId ( ) ) ) . start ( ) ;
return 0 ;
}
@Override
@ -656,7 +694,8 @@ public class DepartmentServiceImpl extends Service implements DepartmentService
// 刷新岗位分部
refreshJobComp ( deptById . getId ( ) , deptById . getParentComp ( ) ) ;
List < DepartmentPO > deptList = getDepartmentMapper ( ) . getDeptListByPId ( deptById . getId ( ) ) ;
forbiddenChildTag ( deptById . getParentComp ( ) , deptList , false ) ;
String ecCompanyId = EcHrmRelationUtil . getEcCompanyId ( Util . null2String ( deptById . getParentComp ( ) ) ) ;
forbiddenChildTag ( deptById . getParentComp ( ) , ecCompanyId , deptList ) ;
// 递归更新下级部门、岗位
return updateBaseDept ;
}
@ -667,19 +706,11 @@ public class DepartmentServiceImpl extends Service implements DepartmentService
* @param parentComp
* @param deptList
* /
void forbiddenChildTag ( Long parentComp , List< DepartmentPO > deptList , boolean isForbidden ) {
void forbiddenChildTag ( Long parentComp , String ecCompanyId , List< DepartmentPO > deptList ) {
if ( CollectionUtils . isNotEmpty ( deptList ) ) {
for ( DepartmentPO departmentPO : deptList ) {
departmentPO . setParentComp ( parentComp ) ;
String ecCompanyId = EcHrmRelationUtil . getEcCompanyId ( parentComp + "" ) ;
if ( StringUtils . isNotBlank ( ecCompanyId ) ) {
departmentPO . setEcCompany ( Long . parseLong ( ecCompanyId ) ) ;
}
if ( isForbidden ) {
departmentPO . setForbiddenTag ( 1 ) ;
// 封存EC表部门
cancelEcDepartment ( departmentPO . getId ( ) ) ;
}
departmentPO . setEcCompany ( Long . parseLong ( ecCompanyId ) ) ;
// 更新EC表部门
updateEcDepartment ( departmentPO ) ;
@ -688,8 +719,16 @@ public class DepartmentServiceImpl extends Service implements DepartmentService
new Thread ( new DepartmentTriggerRunnable ( departmentPO . getId ( ) ) ) . start ( ) ;
// 刷新岗位所属分部
refreshJobComp ( departmentPO . getId ( ) , parentComp ) ;
// 更新当前部门下的人员
List < Long > hrmResourceIds = getSystemDataMapper ( ) . getHrmResourceIdsByDept ( departmentPO . getId ( ) . toString ( ) ) ;
String ecDepartmentId = EcHrmRelationUtil . getEcDepartmentId ( departmentPO . getId ( ) . toString ( ) ) ;
new RecordSet ( ) . executeUpdate ( "update hrmresource set SUBCOMPANYID1 =? where DEPARTMENTID =?" , ecCompanyId , ecDepartmentId ) ;
// 更新人员组织架构图
for ( Long hrmResourceId : hrmResourceIds ) {
new Thread ( new HrmResourceTriggerRunnable ( hrmResourceId ) ) . start ( ) ;
}
List < DepartmentPO > childList = getDepartmentMapper ( ) . getDeptListByPId ( departmentPO . getId ( ) ) ;
forbiddenChildTag ( parentComp , childList , isForbidden ) ;
forbiddenChildTag ( parentComp , ecCompanyId, childList ) ;
}
}
}
@ -883,6 +922,10 @@ public class DepartmentServiceImpl extends Service implements DepartmentService
if ( CollectionUtils . isNotEmpty ( jobPOS ) ) {
String ecCompanyId = EcHrmRelationUtil . getEcCompanyId ( parentComp . toString ( ) ) ;
getJobMapper ( ) . updateJobCompany ( jobPOS . stream ( ) . map ( JobPO : : getId ) . collect ( Collectors . toList ( ) ) , parentComp , ecCompanyId ) ;
for ( JobPO jobPO : jobPOS ) {
// 刷新组织架构图
new Thread ( new JobTriggerRunnable ( jobPO . getId ( ) ) ) . start ( ) ;
}
}
}