wang1
2023-05-31 db1c3c5b3670639fd1dfc5de0fe75ce6f02f732e
Source/UBCS/ubcs-service/ubcs-webservice/src/main/java/com/vci/ubcs/code/webservice/service/impl/DockingPreClassifyServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,135 @@
package com.vci.ubcs.code.webservice.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.vci.ubcs.code.webservice.mapper.DockingPreClassifyMapper;
import com.vci.ubcs.code.webservice.service.IDockingPreApplyFormService;
import com.vci.ubcs.code.webservice.service.IDockingPreAttrMappingService;
import com.vci.ubcs.code.webservice.service.IDockingPreClassifyService;
import com.vci.ubcs.code.webservice.service.IDockingPreViewModelService;
import com.vci.ubcs.code.webservice.wrapper.DockingPreClassifyWrapper;
import com.vci.ubcs.starter.revision.model.TreeQueryObject;
import com.vci.ubcs.starter.revision.model.TreeWrapperOptions;
import com.vci.ubcs.starter.revision.service.RevisionModelUtil;
import com.vci.ubcs.starter.util.MdmBtmTypeConstant;
import com.vci.ubcs.starter.web.pagemodel.Tree;
import com.vci.ubcs.code.webservice.entity.DockingPreClassify;
import com.vci.ubcs.code.webservice.vo.DockingPreClassifyVO;
import com.vci.ubcs.code.webservice.vo.DockingPreViewModelVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.*;
/**
 * é›†å›¢åˆ†ç±»ä¸šåŠ¡æœåŠ¡
 * @author xiejun
 * @date 2023-05-23
 */
@Service
@Slf4j
public class DockingPreClassifyServiceImpl extends ServiceImpl<DockingPreClassifyMapper, DockingPreClassify> implements IDockingPreClassifyService {
   /**
    * ä¸Šçº§èŠ‚ç‚¹çš„å±žæ€§åç§°
    */
   public static  final String PARENT_FIELD_NAME = "pid";
   /***
    * é›†å›¢åˆ†ç±»å±žæ€§
    */
   @Resource
   private DockingPreClassifyMapper dockingPreClassifyMapper;
   /***
    * é›†å›¢åˆ†ç±»å±žæ€§
    */
   @Resource
   private IDockingPreViewModelService dockingPreViewModelService;
   /***
    *集团集成配置服务
    */
   @Resource
   private IDockingPreAttrMappingService dockingPreAttrMappingService;
   /**
    * å¯¹è±¡çš„æ“ä½œ
    */
   @Resource
   private RevisionModelUtil revisionModelUtil;
   /***
    * é›†å›¢åˆ†ç±»æ ‘对象查
    *@param treeQueryObject é›†å›¢åˆ†ç±»æŸ¥è¯¢å¯¹è±¡
    *@return è¿”回分类树对象
    */
   @Override
   public List<Tree> treeCompanyGroupClassify(TreeQueryObject treeQueryObject) {
      log.info("获取集团分类树start...");
      Map<String,String> conditionMap= treeQueryObject.getConditionMap();
      if(conditionMap==null){
         conditionMap=new HashMap<>();
      }
      TreeWrapperOptions treeWrapperOptions = new TreeWrapperOptions(PARENT_FIELD_NAME.toLowerCase(Locale.ROOT));
      treeWrapperOptions.copyFromTreeQuery(treeQueryObject);
      List<DockingPreClassifyVO> dockingPreClassifyVOS= getCompanyGourpClassByParentId(treeQueryObject.getParentOid(),true);
      List<Tree> tree= revisionModelUtil.doList2Trees(dockingPreClassifyVOS,treeWrapperOptions,(DockingPreClassifyVO s) ->{
         //可以在这里处理树节点的显示
         return s.getId() + " " + s.getName();//(FrameworkDataLCStatus.DISABLED.getValue().equalsIgnoreCase(s.getLcStatus()) ? (" ã€åœç”¨ã€‘ ") : "");
      });
      setTreeConig(tree,conditionMap);
      log.info("获取集团分类树end...");
      return tree;
   }
   private void setTreeConig(List<Tree> tree,Map<String,String >conditionMap){
      boolean checkHasChild=false;
      Iterator var6 =  tree.listIterator();
      while(var6.hasNext()){
         Tree trees = (Tree) var6.next();
         List<Tree> childrenList=trees.getChildren();
         if(childrenList.size()>0){
            checkHasChild=true;
         }
         boolean checkHas=false;
         //如果与条件传过来的值匹配的上则设置为选中
         if(conditionMap.containsKey(MdmBtmTypeConstant.CODE_CLASSIFY_OID_FIELD)){
            String codeClassifyId=conditionMap.get(MdmBtmTypeConstant.CODE_CLASSIFY_OID_FIELD);
            checkHas = dockingPreAttrMappingService.checkHasConfigByTragetCodeclassifyId(codeClassifyId, trees.getOid());
         }
         if (checkHas) {
            trees.setChecked(true);
         }
         if(checkHasChild){
            trees.setLeaf(false);
         }else{
            trees.setLeaf(true);
         }
         if(checkHasChild) {
            setTreeConig(childrenList,conditionMap);
         }
      }
   }
   /***
    * æ ¹æ®çˆ¶åˆ†ç±»id查询层级树数据对象集合
    * @param pid é›†å›¢åˆ†ç±»çš„oid
    * @return è¿”回层级树数据对象集合
    */
   private List<DockingPreClassifyVO> getCompanyGourpClassByParentId(String pid,boolean isContainView){
      log.info("根据父分类pid->"+pid+"查询层级树数据对象集合start...");
      List<DockingPreClassify> doList =dockingPreClassifyMapper.selectCompanyGroupClassifyVOByTree(pid);
      List<DockingPreClassifyVO>dockingPreClassifyVOS= DockingPreClassifyWrapper.build().entityVOs(doList);
      if(isContainView){
         dockingPreClassifyVOS.stream().forEach(dockingPreClassifyVO -> {
         List<DockingPreViewModelVO> dockingViewVOS=   dockingPreViewModelService.selectDockingPreViewModelByClassId(dockingPreClassifyVO.getOid(),isContainView);
            dockingPreClassifyVO.setDockingPreViewModelVOList(dockingViewVOS);
         });
      }
      log.info("根据父分类pid->"+pid+"查询层级树数据对象集合end...");
      return dockingPreClassifyVOS;
   }
}