From a347c6a7d66e79e78c4ec550c48dcf1e7705622b Mon Sep 17 00:00:00 2001 From: MaxKey Date: Thu, 16 Nov 2023 09:13:09 +0800 Subject: [PATCH] reorg Organization NamePath --- .../mapper/OrganizationsMapper.java | 5 +- .../service/OrganizationsService.java | 77 ++++++++++++++++++- 2 files changed, 80 insertions(+), 2 deletions(-) diff --git a/maxkey-persistence/src/main/java/org/dromara/maxkey/persistence/mapper/OrganizationsMapper.java b/maxkey-persistence/src/main/java/org/dromara/maxkey/persistence/mapper/OrganizationsMapper.java index b45a39b6..50d88b50 100644 --- a/maxkey-persistence/src/main/java/org/dromara/maxkey/persistence/mapper/OrganizationsMapper.java +++ b/maxkey-persistence/src/main/java/org/dromara/maxkey/persistence/mapper/OrganizationsMapper.java @@ -18,11 +18,14 @@ package org.dromara.maxkey.persistence.mapper; import java.util.List; - +import org.apache.ibatis.annotations.Update; import org.dromara.maxkey.entity.Organizations; import org.dromara.mybatis.jpa.IJpaMapper; public interface OrganizationsMapper extends IJpaMapper { public List queryOrgs(Organizations organization); + + @Update("update mxk_organizations set codepath = #{codePath} , namepath = #{namePath} where id = #{id}") + boolean updateNamePath(Organizations organization); } diff --git a/maxkey-persistence/src/main/java/org/dromara/maxkey/persistence/service/OrganizationsService.java b/maxkey-persistence/src/main/java/org/dromara/maxkey/persistence/service/OrganizationsService.java index 27b63c32..62b4b8bd 100644 --- a/maxkey-persistence/src/main/java/org/dromara/maxkey/persistence/service/OrganizationsService.java +++ b/maxkey-persistence/src/main/java/org/dromara/maxkey/persistence/service/OrganizationsService.java @@ -18,7 +18,11 @@ package org.dromara.maxkey.persistence.service; import java.sql.Types; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; + +import org.apache.commons.lang3.StringUtils; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellType; import org.dromara.maxkey.entity.Organizations; @@ -27,13 +31,17 @@ import org.dromara.maxkey.provision.ProvisionAction; import org.dromara.maxkey.provision.ProvisionService; import org.dromara.maxkey.provision.ProvisionTopic; import org.dromara.mybatis.jpa.JpaService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; @Repository public class OrganizationsService extends JpaService{ - + static final Logger _logger = LoggerFactory.getLogger(OrganizationsService.class); + @Autowired ProvisionService provisionService; @@ -91,6 +99,73 @@ public class OrganizationsService extends JpaService{ return false; } + public void reorgNamePath(String instId) { + _logger.debug("instId {}", instId); + if(StringUtils.isBlank(instId)) { + instId = "1"; + } + + HashMap reorgOrgMap = new HashMap<>(); + List orgList = find(" where instid ='" + instId + "'"); + List originOrgList = new ArrayList<>(); + Organizations rootOrg = null; + for (Organizations org : orgList) { + reorgOrgMap.put(org.getId(), org); + if (isRootOrg(org)) { + rootOrg = org; + } + Organizations cloneOrg = new Organizations(); + BeanUtils.copyProperties(org, cloneOrg); + originOrgList.add(cloneOrg); + } + try { + reorg(reorgOrgMap, orgList, rootOrg); + _logger.debug("reorged ."); + long reorgCount = 0; + for (Organizations originOrg : originOrgList) { + Organizations reorgOrg = reorgOrgMap.get( originOrg.getId()); + _logger.trace("reorged Organization {}" ,reorgOrg); + if(originOrg.getNamePath()== null || !originOrg.getNamePath().equals(reorgOrg.getNamePath())) { + _logger.debug("update reorgCount {} , Organization {}" ,++reorgCount,reorgOrg); + getMapper().updateNamePath(reorgOrg); + } + } + _logger.debug("reorg finished ."); + } catch (Exception e) { + _logger.error("reorgNamePath Exception ", e); + } + } + + public static boolean isRootOrg(Organizations rootOrg){ + if(rootOrg.getParentId() == null + || rootOrg.getParentId().equalsIgnoreCase("-1") + || rootOrg.getParentId().equalsIgnoreCase("0") + || rootOrg.getParentId().equalsIgnoreCase(rootOrg.getId()) + || rootOrg.getParentId().equalsIgnoreCase(rootOrg.getInstId())) { + return true; + } + return false; + } + + void reorg(HashMap orgMap, List orgList,Organizations rootOrg) { + if (isRootOrg(rootOrg)) { + rootOrg.setCodePath("/" + rootOrg.getId()+"/"); + rootOrg.setNamePath("/" + rootOrg.getOrgName()+"/"); + } else { + Organizations parent = orgMap.get(rootOrg.getParentId()); + rootOrg.setCodePath(parent.getCodePath() + rootOrg.getId()+ "/"); + rootOrg.setNamePath(parent.getNamePath() + rootOrg.getOrgName()+ "/"); + } + rootOrg.setReorgNamePath(true); + + for (Organizations org : orgList) { + if (org.isReorgNamePath()) + continue; + if (org.getParentId().equalsIgnoreCase(rootOrg.getId())) { + reorg(orgMap, orgList, org); + } + } + } /** * 根据数据格式返回数据 *