diff --git a/src/com/engine/organization/entity/map/JclOrgMap.java b/src/com/engine/organization/entity/map/JclOrgMap.java index e584c393..f8467bd6 100644 --- a/src/com/engine/organization/entity/map/JclOrgMap.java +++ b/src/com/engine/organization/entity/map/JclOrgMap.java @@ -34,4 +34,18 @@ public class JclOrgMap { Integer fIsVitual; Date fDateBegin; Date fDateEnd; + + public Integer getFPlan() { + if (null == fPlan) { + fPlan = 0; + } + return fPlan; + } + + public Integer getFOnJob() { + if (null == fOnJob) { + fOnJob = 0; + } + return fOnJob; + } } diff --git a/src/com/engine/organization/mapper/jclorgmap/JclOrgMapper.java b/src/com/engine/organization/mapper/jclorgmap/JclOrgMapper.java index d813aeba..68faf43a 100644 --- a/src/com/engine/organization/mapper/jclorgmap/JclOrgMapper.java +++ b/src/com/engine/organization/mapper/jclorgmap/JclOrgMapper.java @@ -3,6 +3,8 @@ package com.engine.organization.mapper.jclorgmap; import com.engine.organization.entity.map.JclOrgMap; import org.apache.ibatis.annotations.Param; +import java.util.List; + /** * @author:dxfeng * @createTime: 2022/09/01 @@ -16,4 +18,12 @@ public interface JclOrgMapper { int deleteMap(@Param("ftype") String ftype, @Param("fobjid") String fobjid, @Param("currentDate") String currentDate); int updateMap(@Param("ftype") String ftype, @Param("fobjid") String fobjid, @Param("currentDate") String currentDate, @Param("yesterday") String yesterday); + + JclOrgMap getJclOrgMapByFParentId(@Param("currentDate") String currentDate, @Param("fparentid") String fparentid); + + JclOrgMap getJclOrgMapById(@Param("currentDate") String currentDate, @Param("id") String id); + + JclOrgMap getSumPlanAndJobByFParentId(@Param("currentDate") String currentDate, @Param("fparentid") String fparentid); + + int updateMapById(@Param("id") Integer id,@Param("fplan") Integer fplan,@Param("fonjob") Integer fonjob,@Param("currentDate") String currentDate); } diff --git a/src/com/engine/organization/mapper/jclorgmap/JclOrgMapper.xml b/src/com/engine/organization/mapper/jclorgmap/JclOrgMapper.xml index 428e7595..e72f55a3 100644 --- a/src/com/engine/organization/mapper/jclorgmap/JclOrgMapper.xml +++ b/src/com/engine/organization/mapper/jclorgmap/JclOrgMapper.xml @@ -35,4 +35,35 @@ AND FDATEBEGIN <= #{currentDate} AND FDATEEND >= #{currentDate} + + + + + update jcl_org_map + + fplan=#{fplan}, + fonjob=#{fonjob}, + + where id=#{id} + AND FDATEBEGIN <= #{currentDate} + AND FDATEEND >= #{currentDate} + \ No newline at end of file diff --git a/src/com/engine/organization/service/impl/OrgChartServiceImpl.java b/src/com/engine/organization/service/impl/OrgChartServiceImpl.java index 385f27a5..80acd803 100644 --- a/src/com/engine/organization/service/impl/OrgChartServiceImpl.java +++ b/src/com/engine/organization/service/impl/OrgChartServiceImpl.java @@ -43,10 +43,8 @@ public class OrgChartServiceImpl extends Service implements OrgChartService { fclasslist.add(item); } - rs.executeQuery("select id, fnumber, fname from jcl_org_map where ftype in (0, 1) order by ftype , id "); + rs.executeQuery("select distinct id, fnumber, fname, ftype from jcl_org_map where ftype in (0, 1) order by ftype , id "); List> companylist = new ArrayList<>(); - Map defaultCompanyItem = new HashMap<>(); - companylist.add(defaultCompanyItem); while (rs.next()) { Map item = new HashMap<>(); item.put("id", rs.getString("id")); @@ -134,9 +132,11 @@ public class OrgChartServiceImpl extends Service implements OrgChartService { list.add(item); } - int currentLevel = 0; + int currentLevel = 1; if (currentLevel + 1 <= Integer.parseInt(level)) { findCompanyItemByParantId(id, currentLevel + 1, level, rs, list, whereSql, true); + } else { + findCompanyItemByParantId(id, currentLevel + 1, level, rs, list, whereSql, false); } result.put("api_status", true); @@ -227,7 +227,7 @@ public class OrgChartServiceImpl extends Service implements OrgChartService { // 获取根节点 RecordSet rs = new RecordSet(); - rs.executeQuery("select t.id, t.fname, t.ftype, t.fparentid, t.fleadername,t.fobjid,t.fecid, t.fleaderimg, t.fleaderjob, t.fplan, t.fonjob, t.fnumber, t.fleader from jcl_org_map t " + whereSql + whereItemSql); + rs.executeQuery("select t.id, t.fname, t.ftype, t.fparentid, t.fleadername,t.fobjid,t.fecid, t.fleaderimg, t.fleaderjob, t.fplan, t.fonjob, t.fnumber, t.fleader, t.fleaderlv, t.fleaderst,t.fecid from jcl_org_map t " + whereSql + whereItemSql); List> list = new ArrayList<>(); String id = null; if (rs.next()) { @@ -247,12 +247,17 @@ public class OrgChartServiceImpl extends Service implements OrgChartService { item.put("fnumber", rs.getString("fnumber")); item.put("fleader", rs.getString("fleader")); item.put("fobjid",rs.getString("fobjid")); + item.put("fleaderlv",rs.getString("fleaderlv")); + item.put("fleaderst",rs.getString("fleaderst")); + item.put("fecid",rs.getString("fecid")); list.add(item); } int currentLevel = 1; if (currentLevel + 1 <= Integer.parseInt(level)) { findUserItemByParantId(id, currentLevel + 1, level, rs, list, whereSql, true); + }else{ + findUserItemByParantId(id, currentLevel + 1, level, rs, list, whereSql, false); } result.put("api_status", true); @@ -268,7 +273,7 @@ public class OrgChartServiceImpl extends Service implements OrgChartService { whereSql += " and fparentid in (" + ids + ") "; RecordSet rs = new RecordSet(); - rs.executeQuery("select t.id, t.fname, t.ftype, t.fparentid, t.fleadername, t.fleaderimg, t.fleaderjob, t.fplan, t.fonjob, t.fnumber, t.fleader from jcl_org_map t " + whereSql); + rs.executeQuery("select t.id, t.fname, t.ftype, t.fparentid, t.fleadername, t.fleaderimg, t.fleaderjob, t.fplan, t.fonjob, t.fnumber, t.fleader,t.fleaderlv, t.fleaderst,t.fobjid from jcl_org_map t " + whereSql); List> currentList = new ArrayList<>(); while (rs.next()) { Map item = new HashMap<>(); @@ -284,6 +289,9 @@ public class OrgChartServiceImpl extends Service implements OrgChartService { item.put("fnumber", rs.getString("fnumber")); item.put("hasChildren", hasChildren(rs.getString("id"), false)); item.put("fleader", rs.getString("fleader")); + item.put("fleaderlv",rs.getString("fleaderlv")); + item.put("fleaderst",rs.getString("fleaderst")); + item.put("fobjid",rs.getString("fobjid")); currentList.add(item); } @@ -319,7 +327,7 @@ public class OrgChartServiceImpl extends Service implements OrgChartService { whereSql += " and fparentid in (" + ids + ") "; RecordSet rs = new RecordSet(); - rs.executeQuery("select id, fname, ftype, fparentid, fnumber from jcl_org_map " + whereSql); + rs.executeQuery("select id, fname, ftype, fparentid, fnumber,fobjid from jcl_org_map " + whereSql); List> currentList = new ArrayList<>(); while (rs.next()) { Map item = new HashMap<>(); @@ -328,6 +336,7 @@ public class OrgChartServiceImpl extends Service implements OrgChartService { item.put("ftype", rs.getString("ftype")); item.put("parentId", rs.getString("fparentid")); item.put("fnumber", rs.getString("fnumber")); + item.put("fobjid", rs.getString("fobjid")); item.put("hasChildren", hasChildren(rs.getString("id"), true)); currentList.add(item); } @@ -340,7 +349,7 @@ public class OrgChartServiceImpl extends Service implements OrgChartService { private void findUserItemByParantId(String id, int currentLevel, String level, RecordSet rs, List> list, String whereSql, boolean expand) { - rs.executeQuery("select t.id, t.fname, t.ftype, t.fparentid,t.fleader, t.fleadername, t.fleaderimg, t.fleaderjob, t.fplan, t.fonjob, t.fnumber,t.fobjid,fecid from jcl_org_map t " + whereSql + " and t.fparentid = " + id); + rs.executeQuery("select t.id, t.fname, t.ftype, t.fparentid,t.fobjparentid,t.fleader, t.fleadername, t.fleaderimg, t.fleaderjob, t.fplan, t.fonjob, t.fnumber,t.fobjid,t.fecid,t.fleaderlv, t.fleaderst from jcl_org_map t " + whereSql + " and t.fparentid = " + id); List> currentList = new ArrayList<>(); while (rs.next()) { Map item = new HashMap<>(); @@ -348,6 +357,7 @@ public class OrgChartServiceImpl extends Service implements OrgChartService { item.put("fname", rs.getString("fname")); item.put("ftype", rs.getString("ftype")); item.put("parentId", rs.getString("fparentid")); + item.put("fobjparentId", rs.getString("fobjparentid")); item.put("fleadername", rs.getString("fleadername")); item.put("fleaderimg", rs.getString("fleaderimg")); item.put("fleaderjob", rs.getString("fleaderjob")); @@ -358,6 +368,8 @@ public class OrgChartServiceImpl extends Service implements OrgChartService { item.put("fobjid", rs.getString("fobjid")); item.put("fecid", rs.getString("fecid")); item.put("fleader", rs.getString("fleader")); + item.put("fleaderlv", rs.getString("fleaderlv")); + item.put("fleaderst", rs.getString("fleaderst")); item.put("hasChildren", hasChildren(rs.getString("id"), false)); currentList.add(item); } diff --git a/src/com/engine/organization/thread/DepartmentTriggerRunnable.java b/src/com/engine/organization/thread/DepartmentTriggerRunnable.java index 66f30569..2e8ee8cf 100644 --- a/src/com/engine/organization/thread/DepartmentTriggerRunnable.java +++ b/src/com/engine/organization/thread/DepartmentTriggerRunnable.java @@ -13,6 +13,7 @@ import com.engine.organization.util.OrganizationDateUtil; import com.engine.organization.util.db.MapperProxyFactory; import org.apache.commons.collections.CollectionUtils; import weaver.common.DateUtil; +import weaver.general.Util; import weaver.hrm.passwordprotection.domain.HrmResource; import java.sql.Date; @@ -28,6 +29,7 @@ public class DepartmentTriggerRunnable implements Runnable { private final DepartmentPO oldDepartment; private final DepartmentPO newDepartment; + private Long oldDepartmentID; private CompTriggerMapper getCompTriggerMapper() { return MapperProxyFactory.getProxy(CompTriggerMapper.class); @@ -42,10 +44,15 @@ public class DepartmentTriggerRunnable implements Runnable { this.newDepartment = newDepartment; } - public DepartmentTriggerRunnable(Long departmentId) { + public DepartmentTriggerRunnable(Long departmentId) { this.oldDepartment = new DepartmentPO(); this.newDepartment = MapperProxyFactory.getProxy(DepartmentMapper.class).getDeptById(departmentId); } + public DepartmentTriggerRunnable(Long oldDepartmentID,Long departmentId) { + this.oldDepartment = new DepartmentPO(); + this.newDepartment = MapperProxyFactory.getProxy(DepartmentMapper.class).getDeptById(departmentId); + this.oldDepartmentID = oldDepartmentID; + } public DepartmentTriggerRunnable(DepartmentPO newDepartment) { this.oldDepartment = new DepartmentPO(); @@ -60,11 +67,13 @@ public class DepartmentTriggerRunnable implements Runnable { if (CollectionUtils.isEmpty(diffFields)) { return; } + // 判断 if (diffFields.contains("deptName") || diffFields.contains("deptPrincipal") || diffFields.contains("parentComp") || diffFields.contains("parentDept") || diffFields.contains("forbiddenTag") || diffFields.contains("deleteType")) { JclOrgMap jclMap = new JclOrgMap(); jclMap.setFType(2); int st = 100000000; + // 更新逻辑 jclMap.setFObjId(newDepartment.getId().intValue()); jclMap.setId(newDepartment.getId().intValue() + st); @@ -77,7 +86,6 @@ public class DepartmentTriggerRunnable implements Runnable { jclMap.setFEcId(getDepartmentTriggerMapper().getEcDepartmentIdByUuid(jclMap.getUuid())); - jclMap.setFClass(0); jclMap.setFClassName("行政维度"); HrmResource hrmResourceById = getCompTriggerMapper().getHrmResourceById(jclMap.getFLeader()); @@ -101,9 +109,18 @@ public class DepartmentTriggerRunnable implements Runnable { jclMap.setFDateEnd(new Date(OrganizationDateUtil.stringToDate("2099-12-31").getTime())); JclOrgMap jclOrgMapByObjID = MapperProxyFactory.getProxy(JclOrgMapper.class).getJclOrgMapByObjID(currentDate, ModuleTypeEnum.departmentfielddefined.getValue().toString(), jclMap.getFObjId().toString()); + + // 取出部门下级在编、在岗数 + JclOrgMap jclOrgMap = MapperProxyFactory.getProxy(JclOrgMapper.class).getSumPlanAndJobByFParentId(currentDate, jclMap.getId().toString()); if (null != jclOrgMapByObjID) { - jclMap.setFPlan(jclOrgMapByObjID.getFPlan()); - jclMap.setFOnJob(jclOrgMapByObjID.getFOnJob()); + if(null != jclOrgMap) { + jclMap.setFPlan(jclOrgMapByObjID.getFPlan() + jclOrgMap.getFPlan()); + jclMap.setFOnJob(jclOrgMapByObjID.getFOnJob() + jclOrgMap.getFOnJob()); + }else{ + jclMap.setFPlan(jclOrgMapByObjID.getFPlan()); + jclMap.setFOnJob(jclOrgMapByObjID.getFOnJob()); + } + } else { jclMap.setFPlan(0); jclMap.setFOnJob(0); @@ -119,6 +136,63 @@ public class DepartmentTriggerRunnable implements Runnable { if (1 != newDepartment.getDeleteType() && 1 != newDepartment.getForbiddenTag()) { MapperProxyFactory.getProxy(JclOrgMapper.class).insertMap(jclMap); + updateParentPlanAndJob(currentDate,jclOrgMapByObjID.getFParentId().toString()); + } + } + } + + private void updateParentPlanAndJob(String currentDate,String parentId){ + // 获取上级部门 + JclOrgMap parentJclOrgMap = MapperProxyFactory.getProxy(JclOrgMapper.class).getJclOrgMapById(currentDate, parentId); + if(null != parentJclOrgMap){ + // 上级部门当前在编、在岗数 + JclOrgMap jclOrgMapSum = MapperProxyFactory.getProxy(JclOrgMapper.class).getSumPlanAndJobByFParentId(currentDate, parentJclOrgMap.getId().toString()); + + parentJclOrgMap.setFPlan(jclOrgMapSum.getFPlan()); + parentJclOrgMap.setFOnJob(jclOrgMapSum.getFOnJob()); + parentJclOrgMap.setFDateBegin(new Date(OrganizationDateUtil.stringToDate(currentDate).getTime())); + parentJclOrgMap.setFDateEnd(new Date(OrganizationDateUtil.stringToDate("2099-12-31").getTime())); + + Calendar cal = Calendar.getInstance(); + cal.setTime(parentJclOrgMap.getFDateBegin()); + Calendar calendar = DateUtil.addDay(cal, -1); + Date time = new Date(calendar.getTime().getTime()); + getCompTriggerMapper().deleteMap(parentJclOrgMap.getFType(), parentJclOrgMap.getFObjId(), parentJclOrgMap.getFDateBegin()); + getCompTriggerMapper().updateMap(parentJclOrgMap.getFType(), parentJclOrgMap.getFObjId(), parentJclOrgMap.getFDateBegin(), time); + MapperProxyFactory.getProxy(JclOrgMapper.class).insertMap(parentJclOrgMap); + if(-1 != parentJclOrgMap.getFParentId() && null != parentJclOrgMap.getFParentId()){ + updateParentPlanAndJob(currentDate,parentJclOrgMap.getFParentId().toString()); + } + } + } + + /** + * 更新原本部门的在编、在岗数 + * @param + * @return + */ + private void updatePrimaryPlanAndJob(String currentDate, Long oldDepartmentID) { + + DepartmentPO oldDepartmentPO = MapperProxyFactory.getProxy(DepartmentMapper.class).getDeptById(oldDepartmentID); + + JclOrgMap jclOrgMap = MapperProxyFactory.getProxy(JclOrgMapper.class).getJclOrgMapById(currentDate, Util.null2String(oldDepartmentPO.getId())); + if (null != jclOrgMap) { + JclOrgMap jclOrgMapSum = MapperProxyFactory.getProxy(JclOrgMapper.class).getSumPlanAndJobByFParentId(currentDate, jclOrgMap.getId().toString()); + jclOrgMap.setFPlan(jclOrgMapSum.getFPlan()); + jclOrgMap.setFOnJob(jclOrgMapSum.getFOnJob()); + jclOrgMap.setFDateBegin(new Date(OrganizationDateUtil.stringToDate(currentDate).getTime())); + jclOrgMap.setFDateEnd(new Date(OrganizationDateUtil.stringToDate("2099-12-31").getTime())); + + Calendar cal = Calendar.getInstance(); + cal.setTime(jclOrgMap.getFDateBegin()); + Calendar calendar = DateUtil.addDay(cal, -1); + Date time = new Date(calendar.getTime().getTime()); + getCompTriggerMapper().deleteMap(jclOrgMap.getFType(), jclOrgMap.getFObjId(), jclOrgMap.getFDateBegin()); + getCompTriggerMapper().updateMap(jclOrgMap.getFType(), jclOrgMap.getFObjId(), jclOrgMap.getFDateBegin(), time); + MapperProxyFactory.getProxy(JclOrgMapper.class).insertMap(jclOrgMap); + + if(1 != jclOrgMap.getFType()){ + updateParentPlanAndJob(currentDate,jclOrgMap.getFParentId().toString()); } } } diff --git a/src/com/engine/organization/thread/StaffTriggerRunnable.java b/src/com/engine/organization/thread/StaffTriggerRunnable.java index 4e95e6be..f4523d0f 100644 --- a/src/com/engine/organization/thread/StaffTriggerRunnable.java +++ b/src/com/engine/organization/thread/StaffTriggerRunnable.java @@ -76,6 +76,40 @@ public class StaffTriggerRunnable implements Runnable { yesterday = DateUtil.addDate(currentDate, -1); } + public StaffTriggerRunnable(Integer fobjId,String controlDimension) { + if (null != fobjId && StringUtils.isNotBlank(controlDimension)) { + switch (controlDimension){ + case "1": + CompPO compPO = getCompMapper().listById((long) fobjId); + if (null != compPO) { + this.staffPO = StaffPO.builder().compId(compPO.getParentCompany()).build(); + this.staffPlanByID = StaffPlanPO.builder().controlDimension(controlDimension).build(); + } + break; + case "2": + DepartmentPO departmentPO = getDepartmentMapper().getDeptById((long) fobjId); + if (null != departmentPO) { + this.staffPO = StaffPO.builder().compId(departmentPO.getParentComp()).deptId(departmentPO.getParentDept()).build(); + this.staffPlanByID = StaffPlanPO.builder().controlDimension(controlDimension).build(); + }break; + case "3": + JobPO jobById = getJobMapper().getJobById((long) fobjId); + if (null != jobById) { + this.staffPO = StaffPO.builder().compId(jobById.getParentComp()).deptId(jobById.getParentDept()).jobId(jobById.getId()).build(); + this.staffPlanByID = StaffPlanPO.builder().controlDimension("3").build(); + }break; + default: + break; + } + + } + currentDate = OrganizationDateUtil.getFormatLocalDate(new java.util.Date()); + yesterday = DateUtil.addDate(currentDate, -1); + } + + + + @Override public void run() { if (null != staffPO) {