diff --git a/src/com/engine/organization/entity/staff/po/StaffPlanPO.java b/src/com/engine/organization/entity/staff/po/StaffPlanPO.java index 99e05a2c..dc802d5f 100644 --- a/src/com/engine/organization/entity/staff/po/StaffPlanPO.java +++ b/src/com/engine/organization/entity/staff/po/StaffPlanPO.java @@ -49,6 +49,9 @@ public class StaffPlanPO { private String ecCompany; /** * 控制维度 + * 1:分部 + * 2:部门 + * 3:岗位 */ private String controlDimension; /** diff --git a/src/com/engine/organization/mapper/trigger/HrmResourceTriggerMapper.java b/src/com/engine/organization/mapper/trigger/HrmResourceTriggerMapper.java index 7679459d..c47d0b38 100644 --- a/src/com/engine/organization/mapper/trigger/HrmResourceTriggerMapper.java +++ b/src/com/engine/organization/mapper/trigger/HrmResourceTriggerMapper.java @@ -4,6 +4,8 @@ import com.engine.organization.entity.cusfielddata.po.CusFieldData; import org.apache.ibatis.annotations.Param; import weaver.hrm.passwordprotection.domain.HrmResource; +import java.util.List; + /** * @author:dxfeng * @createTime: 2022/09/01 @@ -14,4 +16,8 @@ public interface HrmResourceTriggerMapper { CusFieldData getCusFieldDataById(@Param("fObjId") Integer fObjId); + List getFidsByFleader(@Param("fLeader") String fLeader, @Param("currentDate") String currentDate); + + int updateLeaders(@Param("currentDate") String currentDate,@Param("fLeader") String fLeader, @Param("fLeaderImg") String fLeaderImg, @Param("fLeaderName") String fLeaderName, @Param("fLeaderJobId") Integer fLeaderJobId, @Param("fLeaderJob") String fLeaderJob, @Param("fLeaderLv") String fLeaderLv, @Param("fLeaderSt") String fLeaderSt); + } diff --git a/src/com/engine/organization/mapper/trigger/HrmResourceTriggerMapper.xml b/src/com/engine/organization/mapper/trigger/HrmResourceTriggerMapper.xml index 6b7a5d0e..5650f4a2 100644 --- a/src/com/engine/organization/mapper/trigger/HrmResourceTriggerMapper.xml +++ b/src/com/engine/organization/mapper/trigger/HrmResourceTriggerMapper.xml @@ -1,6 +1,19 @@ + + update jcl_org_map + + fleaderimg = #{fLeaderImg}, + fleadername = #{fLeaderName}, + fleaderjobid = #{fLeaderJobId}, + fleaderjob = #{fLeaderJob}, + fleaderlv = #{fLeaderLv}, + fleaderst = #{fLeaderSt}, + + where fleader = #{fLeader} AND fdatebegin <= #{currentDate} + AND fdateend >= #{currentDate} + + \ No newline at end of file diff --git a/src/com/engine/organization/mapper/trigger/StaffTriggerMapper.java b/src/com/engine/organization/mapper/trigger/StaffTriggerMapper.java new file mode 100644 index 00000000..f03e7cc0 --- /dev/null +++ b/src/com/engine/organization/mapper/trigger/StaffTriggerMapper.java @@ -0,0 +1,22 @@ +package com.engine.organization.mapper.trigger; + +import org.apache.ibatis.annotations.Param; + +/** + * @author:dxfeng + * @createTime: 2022/09/21 + * @version: 1.0 + */ +public interface StaffTriggerMapper { + int countCompanyUsers(@Param("ecCompanyId") Long ecCompanyId); + + int countDepartmentUsers(@Param("ecDepartmentId") Long ecDepartmentId); + + int countCompanyStaffNum(@Param("currentDate") String currentDate, @Param("companyId") Long companyId); + + int countDepartmentStaffNum(@Param("currentDate") String currentDate, @Param("departmentId") Long departmentId); + + int countJobStaffNum(@Param("currentDate") String currentDate, @Param("jobId") Long jobId); + + int updateOrgStaffs(@Param("currentDate") String currentDate, @Param("fType") String fType, @Param("fObjId") String fObjId, @Param("fPlan") Integer fPlan, @Param("fOnJob") Integer fOnJob); +} diff --git a/src/com/engine/organization/mapper/trigger/StaffTriggerMapper.xml b/src/com/engine/organization/mapper/trigger/StaffTriggerMapper.xml new file mode 100644 index 00000000..2573f258 --- /dev/null +++ b/src/com/engine/organization/mapper/trigger/StaffTriggerMapper.xml @@ -0,0 +1,55 @@ + + + + + update jcl_org_map + + FPLAN = #{fPlan}, + FONJOB = #{fOnJob}, + + where FTYPE =#{fType} and FOBJID=#{fObjId} + AND FDATEBEGIN <= #{currentDate} + AND FDATEEND >= #{currentDate} + + + + + + + + + \ No newline at end of file diff --git a/src/com/engine/organization/service/impl/StaffServiceImpl.java b/src/com/engine/organization/service/impl/StaffServiceImpl.java index 98e3d8c7..99675106 100644 --- a/src/com/engine/organization/service/impl/StaffServiceImpl.java +++ b/src/com/engine/organization/service/impl/StaffServiceImpl.java @@ -25,6 +25,7 @@ import com.engine.organization.mapper.staff.StaffMapper; import com.engine.organization.mapper.staff.StaffPlanMapper; import com.engine.organization.mapper.staff.StaffsMapper; import com.engine.organization.service.StaffService; +import com.engine.organization.thread.StaffTriggerRunnable; import com.engine.organization.util.*; import com.engine.organization.util.browser.OrganizationBrowserUtil; import com.engine.organization.util.db.DBType; @@ -103,7 +104,10 @@ public class StaffServiceImpl extends Service implements StaffService { if (null != jclDepartmentId) { staffPO.setDeptId(jclDepartmentId.getId()); } - return getStaffMapper().insertIgnoreNull(staffPO); + int ignoreNull = getStaffMapper().insertIgnoreNull(staffPO); + // 同步组织架构图编制信息 + new Thread(new StaffTriggerRunnable(staffPO)).start(); + return ignoreNull; } @Override @@ -137,7 +141,10 @@ public class StaffServiceImpl extends Service implements StaffService { OrganizationAssert.isFalse(staffPO.getStaffNum() < 0, "调整后编制数小于0,请更正"); StaffBO.buildStaffDesc(staffPO); // 更新主表 - return getStaffMapper().updateStaff(staffPO); + int updateStaff = getStaffMapper().updateStaff(staffPO); + // 同步组织架构图编制信息 + new Thread(new StaffTriggerRunnable(staffPO)).start(); + return updateStaff; } @@ -145,7 +152,12 @@ public class StaffServiceImpl extends Service implements StaffService { public int deleteByIds(Collection ids) { HasRightUtil.hasRight(user, RIGHT_NAME, false); OrganizationAssert.notEmpty(ids, "请选择要删除的数据"); - return getStaffMapper().deleteByIds(ids); + List staffsByIds = getStaffMapper().getStaffsByIds(ids); + int deleteByIds = getStaffMapper().deleteByIds(ids); + for (StaffPO staffsById : staffsByIds) { + new Thread(new StaffTriggerRunnable(staffsById)).start(); + } + return deleteByIds; } @Override diff --git a/src/com/engine/organization/thread/HrmResourceTriggerRunnable.java b/src/com/engine/organization/thread/HrmResourceTriggerRunnable.java index 26de1bef..9ae6ad7c 100644 --- a/src/com/engine/organization/thread/HrmResourceTriggerRunnable.java +++ b/src/com/engine/organization/thread/HrmResourceTriggerRunnable.java @@ -81,6 +81,7 @@ public class HrmResourceTriggerRunnable implements Runnable { getCompTriggerMapper().updateMap(jclMap.getFType(), jclMap.getFObjId(), jclMap.getFDateBegin(), time); if (0 == delete) { MapperProxyFactory.getProxy(JclOrgMapper.class).insertMap(jclMap); + getHrmResourceTriggerMapper().updateLeaders(currentDate,hrmResource.getId().toString(), jclMap.getFLeaderImg(), jclMap.getFLeaderName(), jclMap.getFLeaderJobId(), jclMap.getFLeaderJob(), jclMap.getFLeaderLv(), jclMap.getFLeaderSt()); } } diff --git a/src/com/engine/organization/thread/OrganizationSyncEc.java b/src/com/engine/organization/thread/OrganizationSyncEc.java index 0cfed56e..a3cddfb4 100644 --- a/src/com/engine/organization/thread/OrganizationSyncEc.java +++ b/src/com/engine/organization/thread/OrganizationSyncEc.java @@ -248,16 +248,25 @@ public class OrganizationSyncEc { // 修改后不存在共用、新建岗位,更新原有岗位下人员的岗位ID if (EcHrmRelationUtil.isNotExistJob(newName, jclJobId)) { - // 不存在则新建职务 - map.put("operateIp", Util.null2String(user.getLoginip())); - map.put("jobtitlemark", newName); - map.put("jobtitlename", newName); - map.put("jobactivityid", Util.null2String(params.get("jobactivityid"))); - map.put("jobresponsibility", Util.null2String(params.get("work_duty"))); - map.put("jobcompetency", Util.null2String(params.get("work_authority"))); - map.put("jobtitleremark", Util.null2String(params.get("description"))); - map.put("jobtitlecode", Util.null2String(params.get("job_no")) + "_" + System.currentTimeMillis()); - this.resultMap = ServiceUtil.getService(HrmJobServiceImpl.class, user).addJobTitle(map, user); + RecordInfo hrmJobActivity = getSystemDataMapper().getHrmJobTitleByName(newName); + //存在且已封存,对岗位解封 + if (null != hrmJobActivity) { + map.put("ids", hrmJobActivity.getId()); + map.put("canceled", "docanceled"); + this.resultMap = ServiceUtil.getService(HrmJobServiceImpl.class, user).doCanceled(map, user); + } else { + // 不存在则新建职务 + map.put("operateIp", Util.null2String(user.getLoginip())); + map.put("jobtitlemark", newName); + map.put("jobtitlename", newName); + map.put("jobactivityid", Util.null2String(params.get("jobactivityid"))); + map.put("jobresponsibility", Util.null2String(params.get("work_duty"))); + map.put("jobcompetency", Util.null2String(params.get("work_authority"))); + map.put("jobtitleremark", Util.null2String(params.get("description"))); + map.put("jobtitlecode", Util.null2String(params.get("job_no"))); + + this.resultMap = ServiceUtil.getService(HrmJobServiceImpl.class, user).addJobTitle(map, user); + } } else { this.resultMap = new HashMap<>(); this.resultMap.put("sign", "1"); diff --git a/src/com/engine/organization/thread/StaffTriggerRunnable.java b/src/com/engine/organization/thread/StaffTriggerRunnable.java new file mode 100644 index 00000000..c23ab1ea --- /dev/null +++ b/src/com/engine/organization/thread/StaffTriggerRunnable.java @@ -0,0 +1,74 @@ +package com.engine.organization.thread; + +import com.engine.organization.entity.staff.po.StaffPO; +import com.engine.organization.entity.staff.po.StaffPlanPO; +import com.engine.organization.mapper.staff.StaffMapper; +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 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 StaffMapper getStaffMapper() { + return MapperProxyFactory.getProxy(StaffMapper.class); + } + + private StaffPlanMapper getStaffPlanMapper() { + return MapperProxyFactory.getProxy(StaffPlanMapper.class); + } + + private StaffTriggerMapper getStaffTriggerMapper() { + return MapperProxyFactory.getProxy(StaffTriggerMapper.class); + } + + public StaffTriggerRunnable(StaffPO staffPO) { + this.staffPO = staffPO; + } + + @Override + public void run() { + String currentDate = OrganizationDateUtil.getFormatLocalDate(new java.util.Date()); + if (null != staffPO) { + StaffPlanPO staffPlanByID = getStaffPlanMapper().getStaffPlanByID(staffPO.getPlanId()); + if (null != staffPlanByID && StringUtils.isNotBlank(staffPlanByID.getControlDimension())) { + String fType = staffPlanByID.getControlDimension(); + int fPlan = 0; + int fOnJob = 0; + String fObjId = ""; + switch (fType) { + case "1": + // 更新分部编制 + fObjId = Util.null2String(staffPO.getCompId()); + fOnJob = getStaffTriggerMapper().countCompanyUsers(staffPO.getEcCompany()); + fPlan = getStaffTriggerMapper().countCompanyStaffNum(currentDate, staffPO.getCompId()); + break; + case "2": + // 更新部门编制 + fObjId = Util.null2String(staffPO.getDeptId()); + fOnJob = getStaffTriggerMapper().countDepartmentUsers(staffPO.getEcDepartment()); + fPlan = getStaffTriggerMapper().countDepartmentStaffNum(currentDate, staffPO.getDeptId()); + break; + case "3": + // 更新岗位编制 + fObjId = Util.null2String(staffPO.getJobId()); + fOnJob = 10; + fPlan = getStaffTriggerMapper().countJobStaffNum(currentDate, staffPO.getJobId()); + break; + default: + break; + } + // 更新对应的编制数 + getStaffTriggerMapper().updateOrgStaffs(currentDate, fType, fObjId, fPlan, fOnJob); + } + } + } +} diff --git a/src/weaver/interfaces/organization/action/StaffChangeAction.java b/src/weaver/interfaces/organization/action/StaffChangeAction.java index 3db8b6bc..4f8a01e6 100644 --- a/src/weaver/interfaces/organization/action/StaffChangeAction.java +++ b/src/weaver/interfaces/organization/action/StaffChangeAction.java @@ -5,6 +5,7 @@ import com.engine.organization.entity.staff.po.StaffPO; import com.engine.organization.entity.staff.po.StaffsPO; import com.engine.organization.mapper.staff.StaffMapper; import com.engine.organization.mapper.staff.StaffsMapper; +import com.engine.organization.thread.StaffTriggerRunnable; import com.engine.organization.util.db.MapperProxyFactory; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; @@ -129,6 +130,8 @@ public class StaffChangeAction implements Action { // 编制描述 StaffBO.buildStaffDesc(staffPO); MapperProxyFactory.getProxy(StaffMapper.class).updateStaff(staffPO); + // 同步组织架构图编制信息 + new Thread(new StaffTriggerRunnable(staffPO)).start(); return SUCCESS; }