yuxc
2023-05-06 a6e6575bc3d668e14009ed0e931a376f1a4d86ff
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeKeyattrrepeatServiceImpl.java
@@ -16,15 +16,30 @@
 */
package com.vci.ubcs.code.service.impl;
import com.alibaba.nacos.common.utils.StringUtils;
import com.vci.ubcs.code.bo.CodeClassifyFullInfoBO;
import com.vci.ubcs.code.entity.CodeKeyattrrepeatEntity;
import com.vci.ubcs.code.mapper.CodeButtonMapper;
import com.vci.ubcs.code.enumpack.FrameworkDataLCStatus;
import com.vci.ubcs.code.vo.CodeKeyattrrepeatVO;
import com.vci.ubcs.code.mapper.CodeKeyattrrepeatMapper;
import com.vci.ubcs.code.service.ICodeKeyattrrepeatService;
import org.springblade.core.mp.base.BaseServiceImpl;
import com.vci.ubcs.code.vo.pagemodel.CodeClassifyVO;
import com.vci.ubcs.code.vo.pagemodel.CodeKeyAttrRepeatRuleVO;
import com.vci.ubcs.starter.exception.VciBaseException;
import com.vci.ubcs.starter.web.util.BeanUtilForVCI;
import com.vci.ubcs.starter.web.util.VciBaseUtil;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.stream.Collectors;
import static com.vci.ubcs.code.constant.FrameWorkLangCodeConstant.DATA_OID_NOT_EXIST;
/**
 * 关键属性查重规则 服务实现类
@@ -43,5 +58,135 @@
      return page.setRecords(codeKeyattrrepeatMapper.selectPlCodeKeyattrrepeatPage(page, plCodeKeyattrrepeat));
   }
   /**
    * 主键批量获取关键数据查重规则
    *
    * @param oidCollections 主键集合,但是受性能影响,建议一次查询不超过10000个
    * @return 关键数据查重规则显示对象
    */
   @Override
   public List<CodeKeyAttrRepeatRuleVO> listCodeKeyAttrRepeatRuleByOids(Collection<String> oidCollections) {
      VciBaseUtil.alertNotNull(oidCollections,"数据对象主键集合");
      List<CodeKeyattrrepeatEntity> codeKeyAttrRepeatRuleDOList = listCodeKeyAttrRepeatRuleDOByOidCollections(oidCollections);
      return codeKeyAttrRepeatRuleDO2VOs(codeKeyAttrRepeatRuleDOList);
   }
   /**
    * 批量数据对象转换为显示对象
    * @param codeKeyattrrepeatEntityS 数据对象列表
    * @return 显示对象
    */
   @Override
   public List<CodeKeyAttrRepeatRuleVO> codeKeyAttrRepeatRuleDO2VOs(Collection<CodeKeyattrrepeatEntity>  codeKeyattrrepeatEntityS){
      List<CodeKeyAttrRepeatRuleVO> voList = new ArrayList<CodeKeyAttrRepeatRuleVO>();
      if(!CollectionUtils.isEmpty(codeKeyattrrepeatEntityS)){
         for(CodeKeyattrrepeatEntity s: codeKeyattrrepeatEntityS){
            CodeKeyAttrRepeatRuleVO vo =  codeKeyAttrRepeatRuleDO2VO(s);
            if(vo != null){
               voList.add(vo);
            }
         }
      }
      return voList;
   }
   /**
    * 使用主键集合查询数据对象
    * @param oidCollections 主键的集合
    * @return 数据对象列表
    */
   private List<CodeKeyattrrepeatEntity> listCodeKeyAttrRepeatRuleDOByOidCollections(Collection<String> oidCollections){
      List<CodeKeyattrrepeatEntity> codeKeyAttrRepeatRuleDOList = new ArrayList<CodeKeyattrrepeatEntity>();
      if(!CollectionUtils.isEmpty(oidCollections)){
         Collection<Collection<String>> oidCollectionsList = VciBaseUtil.switchCollectionForOracleIn(oidCollections);
         for(Collection<String> oids: oidCollectionsList){
            List<CodeKeyattrrepeatEntity> tempDOList =  codeKeyattrrepeatMapper.selectBatchIds(oids);
            if(!CollectionUtils.isEmpty(tempDOList)){
               codeKeyAttrRepeatRuleDOList.addAll(tempDOList);
            }
         }
      }
      return  codeKeyAttrRepeatRuleDOList;
   }
   /**
    * 数据对象转换为显示对象
    * @param  codeKeyattrrepeatEntity 数据对象
    * @return 显示对象
    */
   @Override
   public  CodeKeyAttrRepeatRuleVO codeKeyAttrRepeatRuleDO2VO(CodeKeyattrrepeatEntity codeKeyattrrepeatEntity) {
      CodeKeyAttrRepeatRuleVO vo = new CodeKeyAttrRepeatRuleVO();
      if(codeKeyattrrepeatEntity != null) {
         BeanUtilForVCI.copyPropertiesIgnoreCase(codeKeyattrrepeatEntity, vo);
         //如果有lcstatus的类的话
         vo.setLcStatusText(FrameworkDataLCStatus.getTextByValue(vo.getLcStatus()));
      }
      return vo;
   }
   /**
    * 使用分类的全部信息来获取关键属性判断规则的内容
    *
    * @param classifyFullInfo 主题库分类的全部信息
    * @return 规则的显示对象
    */
   @Override
   public CodeKeyattrrepeatVO getRuleByClassifyFullInfo(CodeClassifyFullInfoBO classifyFullInfo) {
      VciBaseUtil.alertNotNull(classifyFullInfo,"主题库分类的信息");
      String keyAttrRuleOid = classifyFullInfo.getCurrentClassifyVO().getCodekeyattrrepeatoid();
      if(StringUtils.isBlank(keyAttrRuleOid)){
         //我们根据上级的分类,按照层级倒序排列
         if(!CollectionUtils.isEmpty(classifyFullInfo.getParentClassifyVOs())){
            //有上级分类的情况下才去查询
            List<CodeClassifyVO> sortedClassifyVO = classifyFullInfo.getParentClassifyVOs().stream().sorted(((o1, o2) -> o1.getDataLevel().compareTo(o2.getDataLevel()))).collect(Collectors.toList());
            for(int i = sortedClassifyVO.size() -1;i>=0;i--){
               CodeClassifyVO record = sortedClassifyVO.get(i);
               if(StringUtils.isNotBlank(record.getCodekeyattrrepeatoid())){
                  keyAttrRuleOid = record.getCodekeyattrrepeatoid();
                  break;
               }
            }
         }
      }
      if(StringUtils.isNotBlank(keyAttrRuleOid)){
         CodeKeyAttrRepeatRuleVO objectByOid = getObjectByOid(keyAttrRuleOid);
         CodeKeyattrrepeatVO codeKeyattrrepeatVO = new CodeKeyattrrepeatVO();
         BeanUtils.copyProperties(objectByOid,codeKeyattrrepeatVO);
         return codeKeyattrrepeatVO;
      }
      //关键属性的规则可以为空,为空的时候就代表不控制,
      return null;
   }
   /**
    * 主键获取关键数据查重规则
    * @param oid 主键
    * @return 关键数据查重规则显示对象
    */
   @Override
   public  CodeKeyAttrRepeatRuleVO getObjectByOid(String oid){
      CodeKeyAttrRepeatRuleVO codeKeyAttrRepeatRuleVO = codeKeyAttrRepeatRuleDO2VO(selectByOid(oid));
      CodeKeyattrrepeatVO codeKeyattrrepeatVO = new CodeKeyattrrepeatVO();
      BeanUtils.copyProperties(codeKeyAttrRepeatRuleVO,codeKeyattrrepeatVO);
      return codeKeyAttrRepeatRuleVO;
   }
   /**
    * 主键查询数据对象
    * @param oid 主键
    * @return  数据对象
    * @throws VciBaseException 参数为空,并且数据不存在的时候会抛出异常
    */
   private CodeKeyattrrepeatEntity selectByOid(String oid) {
      VciBaseUtil.alertNotNull(oid,"主键");
      CodeKeyattrrepeatEntity codeKeyAttrRepeatRuleDO = codeKeyattrrepeatMapper.selectById(oid.trim());
//         .selectByPrimaryKey(oid.trim());
      if(codeKeyAttrRepeatRuleDO == null || StringUtils.isBlank(codeKeyAttrRepeatRuleDO.getOid())){
         throw new VciBaseException(DATA_OID_NOT_EXIST);
      }
      return codeKeyAttrRepeatRuleDO;
   }
}