lihang
2023-06-06 8ea4c69b64b5088d7821f7bc3dd8f724b78b314d
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/LinkTypeAttributeServiceImpl.java
@@ -1,18 +1,27 @@
package com.vci.ubcs.omd.service.impl;
import com.alibaba.cloud.commons.lang.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.vci.ubcs.omd.constant.BtmTypeFieldConstant;
import com.vci.ubcs.omd.entity.LinkType;
import com.vci.ubcs.omd.entity.LinkTypeAttribute;
import com.vci.ubcs.omd.mapper.LinkTypeAttributeMapper;
import com.vci.ubcs.omd.service.IAttributeService;
import com.vci.ubcs.omd.service.ILinkTypeAttributeService;
import com.vci.ubcs.omd.vo.BtmTypeAttributeVO;
import com.vci.ubcs.omd.vo.LinkTypeAttributeVO;
import com.vci.ubcs.omd.vo.LinkTypeVO;
import com.vci.ubcs.omd.wrapper.LinkTypeAttributeWrapper;
import com.vci.ubcs.starter.web.enumpck.VciFieldTypeEnum;
import com.vci.ubcs.starter.web.util.VciBaseUtil;
import org.checkerframework.checker.units.qual.A;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
/**
 * Description: 链接类型包含属性的服务
@@ -56,4 +65,80 @@
      VciBaseUtil.alertNotNull(oid);
      return baseMapper.selectOne(Wrappers.<LinkTypeAttribute>query().lambda().eq(LinkTypeAttribute::getOid,oid));
   }
   /**
    * 根据链接类型获取默认字段
    *
    * @param linkTypeVO 链接类型
    * @return 执行结果
    */
   @Override
   public List<LinkTypeAttributeVO> getDefaultAttributes(LinkTypeVO linkTypeVO) {
      Objects.requireNonNull(linkTypeVO,"链接类型不能为空");
      List<LinkTypeAttributeVO> list = new ArrayList<>();
      // 业务类型的基本字段
      BtmTypeFieldConstant.LINK_TYPE_FIELD_MAP.forEach((id, name) -> {
         LinkTypeAttributeVO vo = new LinkTypeAttributeVO();
         vo.setId(id);
         vo.setName(name);
         vo.setPkLinkType(linkTypeVO.getOid());
         if (StringUtils.equals(id,"oid")){
            vo.setNullableFlag(false);
         }else {
            vo.setNullableFlag(true);
         }
         if (Arrays.asList("createtime","lastmodifytime","owner").contains(id)){
            vo.setAttrDataType(VciFieldTypeEnum.VTDateTime.name());
            vo.setAttributeLength(6);
         }else {
            vo.setAttrDataType(VciFieldTypeEnum.VTString.name());
            vo.setAttributeLength(150);
         }
         list.add(vo);
      });
      return list;
   }
   /**
    * 根据链接类型获取所有的字段
    *
    * @param linkTypeVO 链接类型
    * @return 执行结果
    */
   @Override
   public List<LinkTypeAttributeVO> getAllAttributes(LinkTypeVO linkTypeVO) {
      Objects.requireNonNull(linkTypeVO,"链接类型不能为空");
      List<LinkTypeAttributeVO> attributes = getAttributesNoDefault(linkTypeVO);
      attributes.addAll(getDefaultAttributes(linkTypeVO));
      return attributes;
   }
   /**
    * 获取非默认字段的链接类型属性
    *
    * @param linkTypeVO 链接类型
    * @return
    */
   @Override
   public List<LinkTypeAttributeVO> getAttributesNoDefault(LinkTypeVO linkTypeVO) {
      Objects.requireNonNull(linkTypeVO,"链接类型不能为空");
      return LinkTypeAttributeWrapper.build().listEntityVO(baseMapper.selectList(Wrappers.<LinkTypeAttribute>query().lambda().eq(LinkTypeAttribute::getPkLinkType, linkTypeVO.getOid())));
   }
   /**
    * 批量获取非默认字段的链接类型属性
    *
    * @param linkTypeDOList 链接类型
    * @return 执行结果
    */
   @Override
   public Map<String, List<LinkTypeAttributeVO>> batchGetAttributesNoDefault(List<LinkType> linkTypeDOList) {
      VciBaseUtil.alertNotNull(linkTypeDOList,"链接类型集合");
      Set<String> oidSet = linkTypeDOList.stream().map(LinkType::getOid).collect(Collectors.toSet());
      if (CollectionUtils.isEmpty(oidSet)){
         return new HashMap<>();
      }
      List<LinkTypeAttribute> attributes = baseMapper.selectList(Wrappers.<LinkTypeAttribute>query().lambda().in(LinkTypeAttribute::getPkLinkType, oidSet));
      return LinkTypeAttributeWrapper.build().listEntityVO(Optional.ofNullable(attributes).orElseGet(ArrayList::new)).stream().collect(Collectors.groupingBy(LinkTypeAttributeVO::getPkLinkType));
   }
}