ludc
2024-01-17 2ff8dd1f7d2f71944c25c9e116d12d9fb418ac0a
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyServiceImpl.java
@@ -49,6 +49,7 @@
import com.vci.ubcs.starter.web.util.LangBaseUtil;
import com.vci.ubcs.starter.web.util.VciBaseUtil;
import com.vci.ubcs.system.cache.NacosConfigCache;
import com.vci.ubcs.system.feign.ISysClient;
import org.apache.poi.hssf.util.HSSFColor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -92,7 +93,7 @@
   private IBtmTypeClient btmTypeClient;
   @Resource
   private CommonsMapper commonsMapper;
   private ISysClient sysClient;
   /**
    * 日志
@@ -509,7 +510,7 @@
    * @return 主题库分类显示树
    */
   @Override
   public List<Tree> referTree(TreeQueryObject treeQueryObject) {
   public List<Tree> referTree(TreeQueryObject treeQueryObject) throws ServiceException{
      if(treeQueryObject == null){
         treeQueryObject = new TreeQueryObject();
      }
@@ -519,7 +520,7 @@
      if(treeQueryObject.getConditionMap().containsKey(LC_STATUS)) {
         treeQueryObject.getConditionMap().remove(LC_STATUS);
      }
      if(treeQueryObject.getExtandParamsMap() ==null || !treeQueryObject.getExtandParamsMap().containsKey(REFER_SHOW_DISABLED_QUERY_KEY)) {
      if(treeQueryObject.getExtandParamsMap() == null || !treeQueryObject.getExtandParamsMap().containsKey(REFER_SHOW_DISABLED_QUERY_KEY)) {
      }
      treeQueryObject.getConditionMap().put(LC_STATUS, FRAMEWORK_DATA_ENABLED);
      return treeCodeClassify(treeQueryObject);
@@ -549,7 +550,7 @@
    * @return 主题库分类 显示树
    */
   @Override
   public List<Tree> treeCodeClassify(TreeQueryObject treeQueryObject) {
   public List<Tree> treeCodeClassify(TreeQueryObject treeQueryObject) throws ServiceException{
      List<CodeClassify> doList = null;
      String id = null;
      String lcStatus = null;
@@ -582,18 +583,67 @@
         return s.getId() + " " + s.getName() + (FrameworkDataLCStatus.DISABLED.getValue().equalsIgnoreCase(s
            .getLcStatus()) ? (" 【停用】 ") : "");
      });
      Iterator var6 =  tree.listIterator();
      while(var6.hasNext()){
         Tree trees = (Tree) var6.next();
         boolean checkHasChild=codeClassifyMapper.checkHasChild(trees.getOid());
         if(checkHasChild){
            trees.setLeaf(false);
         }else{
            trees.setLeaf(true);
      //超管显示所有分类
      if(VciBaseUtil.checkAdminTenant()){
         Iterator var6 =  tree.listIterator();
         while(var6.hasNext()){
            Tree trees = (Tree) var6.next();
            boolean checkHasChild=codeClassifyMapper.checkHasChild(trees.getOid());
            if(checkHasChild){
               trees.setLeaf(false);
            }else{
               trees.setLeaf(true);
            }
         }
      }else {
         // 那些分类具备查看权限
         R<List<String>> viewClassByRoleIds = sysClient.getViewClassByRoleIds(Arrays.asList(AuthUtil.getUser().getRoleId().split(",")),treeQueryObject.getConditionMap().getOrDefault("authType","classify_auth"),treeQueryObject.getConditionMap().getOrDefault("menuCode","classify_view"));
         // 请求失败或者请求得到的具备查看权限的分类id集合为空
         if(!viewClassByRoleIds.isSuccess() && viewClassByRoleIds.getData().isEmpty()){
            throw new ServiceException("主数据查看权限未配置,或配置有误!");
         }
         // 过滤
         filterTreeNodes(tree,viewClassByRoleIds.getData());
      }
      return tree;
   }
   /**
    * 分类授权过滤掉没有权限的分类
    * @param trees
    * @param classifyIds
    */
   private void filterTreeNodes(List<Tree> trees, List<String> classifyIds) {
      Iterator<Tree> iterator = trees.iterator();
      while (iterator.hasNext()) {
         Tree tree = iterator.next();
         Boolean checkHasChild = codeClassifyMapper.checkHasChild(tree.getOid());
         tree.setLeaf(!checkHasChild);
         if (classifyIds.contains(tree.getOid())) {
            // 如果顶层节点存在于 classifyIds 中,直接保留其子节点集合
            continue;
         }
         if (tree.getChildren() != null && !tree.getChildren().isEmpty()) {
            filterTreeNodes(tree.getChildren(), classifyIds);
         }
         if (!hasMatchingChild(tree, classifyIds)) {
            iterator.remove();
         }
      }
   }
   private boolean hasMatchingChild(Tree tree, List<String> classifyIds) {
      if (classifyIds.contains(tree.getOid())) {
         return true;
      }
      if (tree.getChildren() != null) {
         for (Tree child : tree.getChildren()) {
            if (hasMatchingChild(child, classifyIds)) {
               return true;
            }
         }
      }
      return false;
   }
   /**
@@ -700,7 +750,6 @@
    */
   @Override
   public R flowingDependencyGen(String classifyOid) {
      //查询此分类下面的所有分类
      List<CodeClassify>  codeClassifyList=codeClassifyMapper.selectAllClassifyByOid(classifyOid,AuthUtil.getTenantId(),null);
      //查询码值表,获取最大流水
@@ -708,6 +757,17 @@
         .map(classfiy -> classfiy.getOid()).collect(Collectors.joining("','")) + "'","'${sav}'");
      //往流水表里面加数据,有则更新,无则添加数据。
      for (CodeAllCode codeAllCodeVO : codeAllCodeVOS) {
         if(Func.isEmpty(codeAllCodeVO.getSerialUnit())){
            throw new ServiceException("编码为:" + codeAllCodeVO.getId() + "的码值数据流水依赖不能为空!");
         }
         try {
            CodeRuleVO codeRuleVO = codeRuleService.getObjectByOid(codeAllCodeVO.getCodeRuleOid());
            if(Func.isEmpty(codeRuleVO)){
               continue;
            }
         }catch (Exception e){
            continue;
         }
         QueryWrapper<CodeBasicSec> secWrapper = new QueryWrapper<>();
         secWrapper.eq("PKCODERULE",codeAllCodeVO.getCodeRuleOid());
         secWrapper.eq("SECTYPE","codeserialsec");
@@ -1408,6 +1468,19 @@
   }
   /**
    * 查询所有上层父节点的oid
    * @param oid
    * @return
    */
   @Override
   public List<String> selectAllParentOid(String oid){
      if(Func.isBlank(oid)){
         return new ArrayList<>();
      }
      return this.codeClassifyMapper.selectAllParentOid(oid);
   }
   /**
    * 使用分类主键获取分类相关的所有信息
    *
    * @param codeClassifyOid 分类的主键