yuxc
2023-09-09 f6f5e4a28931bdd49b9d0d593d42ef6a291e0f86
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyServiceImpl.java
@@ -4,6 +4,7 @@
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
import com.vci.ubcs.code.bo.CodeClassifyFullInfoBO;
@@ -35,13 +36,16 @@
import com.vci.ubcs.starter.revision.model.TreeWrapperOptions;
import com.vci.ubcs.starter.revision.service.RevisionModelUtil;
import com.vci.ubcs.starter.util.BladeTreeQueryObject;
import com.vci.ubcs.starter.util.DefaultAttrAssimtUtil;
import com.vci.ubcs.starter.util.LocalFileUtil;
import com.vci.ubcs.starter.util.MdmBtmTypeConstant;
import com.vci.ubcs.starter.web.pagemodel.BaseQueryObject;
import com.vci.ubcs.starter.web.pagemodel.DataGrid;
import com.vci.ubcs.starter.web.pagemodel.Tree;
import com.vci.ubcs.starter.web.util.BeanUtilForVCI;
import com.vci.ubcs.starter.web.util.LangBaseUtil;
import com.vci.ubcs.starter.web.util.VciBaseUtil;
import com.vci.ubcs.system.cache.NacosConfigCache;
import org.apache.poi.hssf.util.HSSFColor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -53,6 +57,7 @@
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.Func;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
@@ -79,6 +84,9 @@
   @Resource
   private IBtmTypeClient btmTypeClient;
   @Resource
   private NacosConfigCache nacosConfigCache;
   /**
    * 日志
@@ -119,23 +127,45 @@
   @Override
   public IPage<CodeClassifyVO> selectPlCodeClassifyPage(IPage<CodeClassifyVO> page, CodeClassifyVO plCodeClassify) {
      return page.setRecords(codeClassifyMapper.selectPlCodeClassifyPage(page, plCodeClassify));
      return page.setRecords(codeClassifyMapper.selectPlCodeClassifyPage(page, plCodeClassify,AuthUtil.getTenantId()
         .equals(
            nacosConfigCache
               .getAdminUserInfo()
               .getTenantId()
         ) ? null:AuthUtil.getTenantId()));
   }
   /**
    * 主题库定义表 新增
    * @param
    */
   @Override
   public R addSave(CodeClassify codeClassifyEntity) {
      try {
         VciBaseUtil.alertNotNull(codeClassifyEntity.getId(),"主题库编号不能为空!",codeClassifyEntity.getName(),"主题库名称不能为空!");
      }catch (VciBaseException e){
         return R.fail(e.getMessage());
      }
      if(StringUtils.isNotBlank(codeClassifyEntity.getParentCodeClassifyOid()) && StringUtils.isNotBlank(codeClassifyEntity.getBtmTypeId())){
         return R.fail("只有在顶层的主题库分类才能设置业务类型");
      }
      codeClassifyEntity.setCreator(String.valueOf(AuthUtil.getUser().getUserId()));
      codeClassifyEntity.setCreateTime(new Date());
      codeClassifyEntity.setTs(new Date());
      codeClassifyEntity.setOwner(String.valueOf(AuthUtil.getUser().getUserId()));
      codeClassifyEntity.setLastModifier(String.valueOf(AuthUtil.getUser().getUserId()));
      codeClassifyEntity.setLastModifyTime(new Date());
      codeClassifyEntity.setRevisionSeq(1);
      codeClassifyEntity.setVersionSeq(1);
      if(StringUtils.isEmpty(codeClassifyEntity.getParentCodeClassifyOid()) && StringUtils.isBlank(codeClassifyEntity.getBtmTypeId())){
         return R.fail("主题库关联的业务类型不能为空!");
      }
      QueryWrapper<CodeClassify> classifyQueryWrapper = new QueryWrapper<>();
      classifyQueryWrapper.eq("parentCodeClassifyOid",codeClassifyEntity.getParentCodeClassifyOid());
      classifyQueryWrapper.eq("id",codeClassifyEntity.getId());
      List<CodeClassify> codeClassifyList = baseMapper.selectList(classifyQueryWrapper);
      if(codeClassifyList.size()!=0){
         return R.fail("当前分类下不允许分类编号重复,请检查!!!");
      }
      if(Func.isNotEmpty(codeClassifyEntity.getParentCodeClassifyOid())){
         CodeClassify codeClassify = baseMapper.selectOne(Wrappers.<CodeClassify>query().lambda().eq(CodeClassify::getOid, codeClassifyEntity.getParentCodeClassifyOid()));
         codeClassifyEntity.setBtmTypeId(codeClassify.getBtmTypeId());
         codeClassifyEntity.setBtmTypeName(codeClassify.getBtmTypeName());
      }
      DefaultAttrAssimtUtil.addDefaultAttrAssimt(codeClassifyEntity, MdmBtmTypeConstant.CODE_CLASSIFY);
      codeClassifyEntity.setLcStatus(FRAMEWORK_DATA_ENABLED);
      int insertNumber = codeClassifyMapper.insert(codeClassifyEntity);
      return R.status(SqlHelper.retBool(insertNumber));
   }
@@ -219,13 +249,15 @@
//         .selectOne(Condition.getQueryWrapper(condition,CodeClassify.class));
      if(detail == null){//不是最新的不让改
         throw new ServiceException("当前数据不是最新,请刷新后再修改!");
//         return R.fail("当前数据不是最新,请刷新后再修改!");
      }
      //校验下级是否有引用
      if(checkChildIsLinked(detail.getOid())){
         return R.fail("dataCascadeLinkedNotDelete");
      }
      return R.data(checkHasChild(detail.getOid()));
      if(checkHasChild(detail.getOid())){
         return R.fail("此数据有下级,无法进行删除!");
      }
      return R.status(!checkHasChild(detail.getOid()));
   }
   /**
@@ -281,7 +313,7 @@
      R result = checkIsCanDeleteForDO(codeClassify);
      //先简称是否有关联模板,有模板要先删除
      //先检查是否有关联模板,有模板要先删除
      Map<String,Object> condition = new HashMap<>(2);
      condition.put("codeClassifyOid",codeClassify.getOid());
      List<CodeClassifyTemplate> codeClstemplateEntities = codeClassifyTemplateMapper.selectByMap(condition);
@@ -342,20 +374,32 @@
   @Override
   public R updateLcStatus(String oid, String lcStatus){
      //查询修改前ts
      CodeClassify codeClassify = codeClassifyMapper.selectById(oid);//主要是为了查询ts
      codeClassify.setLcStatus(lcStatus);
      codeClassify.setTs(new Date());
      codeClassify.setLastModifyTime(new Date());
      codeClassify.setLastModifier(String.valueOf(AuthUtil.getUser().getUserId()));
      List<CodeClassify> classifyList = codeClassifyMapper.selectStartWithCurrentOid(oid);
      Date now = new Date();
      String userId = String.valueOf(AuthUtil.getUserId());
      classifyList = classifyList.stream().map(s -> {
         s.setLcStatus(lcStatus);
         s.setTs(now);
         s.setLastModifier(userId);
         s.setLastModifyTime(now);
         return s;
      }).collect(Collectors.toList());
//      //查询修改前ts
//      CodeClassify codeClassify = codeClassifyMapper.selectById(oid);//主要是为了查询ts
//      codeClassify.setLcStatus(lcStatus);
//      codeClassify.setTs(new Date());
//      codeClassify.setLastModifyTime(new Date());
//      codeClassify.setLastModifier(String.valueOf(AuthUtil.getUser().getUserId()));
      //启用、停用
//      int u = codeClassifyMapper.updateLcStatus(oid,lcStatus);
      int count = codeClassifyMapper.updateById(codeClassify);
//      int count = codeClassifyMapper.updateById(codeClassify);
      codeClassifyMapper.batchUpdateLcStatus(classifyList);
//        //处理数据集成逻辑,成功后执行集成第一步,分类数据特殊处理。
//        if(u!=0) {
//            codeDuckingServiceI.insertCache1(lcStatus,lcStatus,DOCKING_DEFAULT_CLASSIFY, DOCKING_DEFAULT_CLASSIFYOID, oid, codeClassifyDO_old.getTs());
//        }
      return R.data(SqlHelper.retBool(count));
//      return R.data(SqlHelper.retBool(count));
      return R.success("");
   }
   /**
@@ -480,12 +524,22 @@
      }
      if(StringUtils.isNotBlank(id) || StringUtils.isNotBlank(lcStatus) ){
         doList = codeClassifyMapper
            .selectCodeClassifyDOByTree(treeQueryObject.getConditionMap().get("id"),treeQueryObject.getConditionMap().get("lcStatus"),treeQueryObject.getParentOid());
            .selectCodeClassifyDOByTree(treeQueryObject.getConditionMap().get("id"),treeQueryObject.getConditionMap().get("lcStatus"),treeQueryObject.getParentOid(), AuthUtil.getTenantId()
               .equals(
                  nacosConfigCache
                     .getAdminUserInfo()
                     .getTenantId()
               ) ? null:AuthUtil.getTenantId());
      }else{
         doList =codeClassifyMapper.selectCodeClassifyVOByTree(treeQueryObject.getParentOid());
         doList =codeClassifyMapper.selectCodeClassifyVOByTree(treeQueryObject.getParentOid(), AuthUtil.getTenantId()
            .equals(
               nacosConfigCache
                  .getAdminUserInfo()
                  .getTenantId()
            ) ? null:AuthUtil.getTenantId());
      }
      List<CodeClassifyVO> voList = codeClassifyDO2VOs(doList);
      TreeWrapperOptions treeWrapperOptions = new TreeWrapperOptions(PARENT_FIELD_NAME.toLowerCase(Locale.ROOT));
      TreeWrapperOptions treeWrapperOptions = new TreeWrapperOptions(PARENT_FIELD_NAME);
      treeWrapperOptions.copyFromTreeQuery(treeQueryObject);
      List<Tree> tree= revisionModelUtil.doList2Trees(voList,treeWrapperOptions,(CodeClassifyVO s) ->{
         //可以在这里处理树节点的显示
@@ -513,10 +567,66 @@
    */
   @Override
   public List<CodeClassifyVO> selectCodeClassifyDOByTree(TreeQueryObject treeQueryObject) {
      List<CodeClassify> doList =codeClassifyMapper.selectCodeClassifyVOByTree(treeQueryObject.getParentOid());
      List<CodeClassify> doList =codeClassifyMapper.selectCodeClassifyVOByTree(treeQueryObject.getParentOid(),AuthUtil.getTenantId());
      List<CodeClassifyVO> voList = codeClassifyDO2VOs(doList);
      return voList;
   }
   /***
    *
    * @param parentOid
    * @return
    */
   @Override
   public List<CodeClassifyVO> selectCodeClassifyVOByParentId(String parentOid) {
      List<CodeClassify> doList =codeClassifyMapper.selectCodeClassifyDOByParentId(parentOid,AuthUtil.getTenantId());
      List<CodeClassifyVO> voList = codeClassifyDO2VOs(doList);
      return voList;
   }
   /**
    * 根据库节点名称获取分类
    * @param libName
    * @return
    */
   @Override
   public List<CodeClassifyVO> getRMLibByName(String libName) {
      List<String> libNameList=new ArrayList<>();
      if(StringUtils.isNotBlank(libName)){
         libNameList=VciBaseUtil.str2List(libName);
      }
      List<CodeClassify> doList =codeClassifyMapper.getRMLibByName(libNameList,"Enabled",AuthUtil.getTenantId()
         .equals(
            nacosConfigCache
               .getAdminUserInfo()
               .getTenantId()
         ) ? null:AuthUtil.getTenantId());
      List<CodeClassifyVO> voList = codeClassifyDO2VOs(doList);
      return voList;
   }
   /***
    * 根据分类描述备注和库节点查询分类信息
    * @param desc
    * @param codeLibName
    * @return
    */
   @Override
   public List<CodeClassifyVO> getRMTypeByDescAndLib(String desc, String codeLibName) {
      List<CodeClassify> doList =codeClassifyMapper.getRMTypeByDesc(desc,"Enabled",AuthUtil.getTenantId());
      if (CollectionUtils.isEmpty(doList)) {
         return new LinkedList<CodeClassifyVO>();
      }
      CodeClassify codeClassify=doList.get(0);
      List<CodeClassify>  codeClassifyList=codeClassifyMapper.selectAllParenClassifytByOid(codeClassify.getOid(),AuthUtil.getTenantId());
      CodeClassify currentLib = codeClassifyList.get(codeClassifyList.size() - 1);
      if (!currentLib.getName().equals(codeLibName)) {
         return new ArrayList<>();
      }
      List<CodeClassifyVO> voList = codeClassifyDO2VOs(codeClassifyList);
      return voList;
   }
   /**
    * 使用编号的路径获取对象
    *
@@ -544,7 +654,6 @@
      List<CodeClassifyVO> voList = codeClassifyDO2VOs(doList);
      return voList;
   }
   //   /**
//    * 根据树形查询对象来查询数据对象
@@ -591,8 +700,8 @@
      Map<String, CodeRuleVO> ruleVOMap = new HashMap<>();
      if(!CollectionUtils.isEmpty(codeRuleOids)){
         VciBaseUtil.switchCollectionForOracleIn(codeRuleOids).stream().forEach(ruleOids->{
//            Collection<CodeRuleVO> ruleVOS = codeRuleService.listCodeRuleByOids(ruleOids);
            Collection<CodeRuleVO> ruleVOS = null;
            Collection<CodeRuleVO> ruleVOS = codeRuleService.listCodeRuleByOids(ruleOids);
            // Collection<CodeRuleVO> ruleVOS = null;
            ruleVOMap.putAll( Optional.ofNullable(ruleVOS).orElseGet(()->new ArrayList<>()).stream().collect(Collectors.toMap(s->s.getOid(),t->t)));
         });
      }
@@ -625,6 +734,7 @@
      excelDataList.add(new WriteExcelData(0,9,"状态"));
      excelDataList.add(new WriteExcelData(0,10,"分类层级"));
      excelDataList.add(new WriteExcelData(0,11,"描述"));
      codeClassifyVOS = codeClassifyVOS.stream().sorted(Comparator.comparing(CodeClassifyVO::getDataLevel)).collect(Collectors.toList());
      for (int i = 0; i < codeClassifyVOS.size(); i++) {
         CodeClassifyVO vo = codeClassifyVOS.get(i);
         excelDataList.add(new WriteExcelData(i+1,0,vo.getId()));
@@ -768,7 +878,7 @@
      Map<String,CodeKeyAttrRepeatRuleVO> keyRuleVOMap =Optional.ofNullable(keyOids.size()==0 ? null: iCodeKeyattrrepeatService.listCodeKeyAttrRepeatRuleByOids(keyOids)
      ).orElse(new ArrayList<>()).stream().collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t,(o1,o2)->o2));
      List<String> btmOids = poList.stream().filter(s -> StringUtils.isNotBlank(s.getKeyRepeatRuleId()))
      List<String> btmOids = poList.stream().filter(s -> StringUtils.isNotBlank(s.getBtmTypeId()))
         .map(CodeClassifyPO::getBtmTypeId).collect(Collectors.toList());
      Map<String, BtmTypeVO> btmVOMap = Optional
         .ofNullable(btmOids.size()==0 ? null: btmTypeClient.selectByIdCollection(btmOids).getData())
@@ -939,7 +1049,7 @@
      Map<String,Object> condition = new HashMap<>(1);
      condition.put("pkbtmtype",topClassifyVO.getBtmTypeId());
      R<BtmTypeVO> btmTypeDetail = btmTypeClient.getDetail(btmTypeOid);
      if(btmTypeDetail.getCode() != 200){
      if(!btmTypeDetail.isSuccess()){
         throw new ServiceException("业务类型feign接口调用出错");
      }
      List<BtmTypeAttributeVO> unDefaultAttributes = btmTypeDetail.getData().getAttributes();
@@ -968,7 +1078,7 @@
         });
      }
      R<BtmTypeVO> btmTypeVOR = btmTypeClient.getDefaultAttrByBtmId(topClassifyVO.getBtmTypeId());
      if(btmTypeVOR.getCode() != 200){
      if(!btmTypeVOR.isSuccess()){
         throw new ServiceException("业务类型feign接口调用出错");
      }
      List<BtmTypeAttributeVO> defaultAttrVOS = btmTypeVOR.getData().getAttributes();