dangsn
2024-12-03 d0ae279ff3b83358d1c07f4481a041c4ad335026
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsAttributeServiceImpl.java
@@ -4,19 +4,17 @@
import com.vci.client.common.datatype.VTInteger;
import com.vci.client.common.datatype.VTLong;
import com.vci.client.common.datatype.VTString;
import com.vci.client.mw.ClientSessionUtility;
import com.vci.common.utility.ObjectUtility;
import com.vci.corba.common.PLException;
import com.vci.corba.omd.atm.AttributeDef;
import com.vci.corba.omd.ltm.LinkType;
import com.vci.corba.omd.vrm.VersionRule;
import com.vci.dto.OsAttributeDTO;
import com.vci.dto.OsEnumDTO;
import com.vci.dto.OsEnumItemDTO;
import com.vci.enumpck.UI.ItemTypeEnum;
import com.vci.model.OsAttributeDO;
import com.vci.omd.dataType.VTDataType;
import com.vci.omd.objects.OtherInfo;
import com.vci.pagemodel.*;
import com.vci.pagemodel.OsAttributeVO;
import com.vci.pagemodel.OsEnumVO;
import com.vci.po.OsAttributePO;
import com.vci.po.OsEnumPO;
import com.vci.starter.poi.bo.ReadExcelOption;
import com.vci.starter.poi.bo.WriteExcelData;
import com.vci.starter.poi.bo.WriteExcelOption;
@@ -27,15 +25,12 @@
import com.vci.starter.web.exception.VciBaseException;
import com.vci.starter.web.pagemodel.*;
import com.vci.starter.web.util.*;
import com.vci.model.OsAttributeDO;
import com.vci.web.enumpck.ItemTypeEnum;
import com.vci.web.enumpck.PortalVITypeFlag;
import com.vci.web.properties.UsedNames;
import com.vci.web.service.OsAttributeServiceI;
import com.vci.web.service.OsBaseServiceI;
import com.vci.web.service.OsEnumServiceI;
import com.vci.web.service.OsLinkTypeServiceI;
import com.vci.web.util.Func;
import com.vci.starter.web.util.Lcm.Func;
import com.vci.web.util.PlatformClientUtil;
import com.vci.web.util.WebUtil;
import org.apache.commons.lang3.StringUtils;
@@ -46,16 +41,12 @@
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.web.multipart.MultipartFile;
import javax.swing.*;
import java.awt.*;
import java.io.File;
import java.util.*;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
//import static com.vci.client.omd.attribpool.ui.VTDataTypePanel.*;
import static com.vci.omd.constants.AttributeConstants.*;
/**
@@ -166,7 +157,7 @@
   }
   /**
    * 够着属性树节点
    * 构造属性树节点
    * @param parentTreeList
    * @param refTypeName
    * @param refFlag
@@ -227,7 +218,6 @@
            pTree.setExpanded(true);
         }
      }
   }
   /**
@@ -341,7 +331,10 @@
            attributeVO.setLastModifyTime(new Date(attribItem.modifyTime));
            attributeVO.setTs(VciDateUtil.str2Date(attribItem.ts,VciDateUtil.DateTimeMillFormat));
         }catch (Throwable e){
            e.printStackTrace();
            String errorLog = "属性DO转VO时出错,原因:"+VciBaseUtil.getExceptionMessage(e);
            logger.error(errorLog);
            throw new VciBaseException(errorLog);
         }
         attributeVO.setLastModifier(attribItem.modifier);
         attributeVO.setName(attribItem.label);
@@ -517,6 +510,32 @@
   }
   /**
    * 使用属性编号获取对象--批量
    *
    * @param attrCodes 属性的英文名称
    * @param attributeVOMap 属性对象
    * @return 属性的显示对象
    */
   @Override
   public List<OsAttributeVO> listAttrByIds(Collection<String> attrCodes,Map<String, OsAttributeVO> attributeVOMap) {
      if(CollectionUtils.isEmpty(attrCodes)){
         return null;
      }
      if(attributeVOMap == null){
         attributeVOMap = self.selectAllAttributeMap();
      }
      List<OsAttributeVO> attributeVOS = new ArrayList<>();
      Map<String, OsAttributeVO> finalAttributeVOMap = attributeVOMap;
      attrCodes.stream().forEach(attrCode->{
         OsAttributeVO attributeVO = finalAttributeVOMap.getOrDefault(attrCode.toLowerCase(),null);
         if(attributeVO!=null){
            attributeVOS.add(attributeVO);
         }
      });
      return attributeVOS;
   }
   /**
    * 批量添加属性
    *
    * @param attribItemList 属性的列表
@@ -612,9 +631,10 @@
      //检查默认值与属性类型是否匹配
      checkDefValue(osAttributeDTO);
      boolean compatible = isCompatible(osAttributeVO,osAttributeDTO);
      boolean hasInstance = hasInstance(osAttributeDTO.getName());
      //产生数据, 并且不兼容
      if(hasInstance && !compatible){
      //boolean hasInstance = hasInstance(osAttributeDTO.getId()); //不判断是否产生数据只要被引用就需要进一步判断类型是否兼容
      boolean checkAttrIsUse = this.checkAttrIsUse(osAttributeDTO.getId());
      //TODO:按照以前操作配置文档中的逻辑应该是:不论是否产生数据只要被引用就需要要判断类型是否兼容(如VTString不能转为VTIntger或VTLong)
      if(checkAttrIsUse/*hasInstance*/ && !compatible){
         throw new PLException("500",new String[]{"无效变更, 不兼容已产生的数据!"});
      }
      String userId = WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUserId();
@@ -764,6 +784,26 @@
    */
   private boolean hasInstance(String abName) throws PLException {
      return osBtmService.hasInstance(abName) && osLinkTypeServiceI.hasInstance(abName);
   }
   /**
    * 查看属性是否被引用
    * @param abName
    * @return false未被引用 true被引用
    */
   private boolean checkAttrIsUse(String abName) throws PLException {
      if(Func.isBlank(abName)){
         return false;
      }
      String[] btNames = platformClientUtil.getBtmService().getBTNamesByAPName(abName);
      if(Func.isNotEmpty(btNames)){
         return true;
      }
      String[] ltNames = platformClientUtil.getLinkTypeService().getLTNamesByAPName(abName);
      if(Func.isNotEmpty(ltNames)){
         return true;
      }
      return false;
   }
   /**
@@ -947,11 +987,14 @@
         throw new PLException("500",new String[]{"请选择要查询应用范围的属性!"});
      }
      String[] btNames = platformClientUtil.getBtmService().getBTNamesByAPName(attributeName);
      if(Func.isEmpty(btNames)){
      String[] ltNames = platformClientUtil.getLinkTypeService().getLTNamesByAPName(attributeName);
      String[] mergedArray = Stream.concat(Stream.of(btNames), Stream.of(ltNames)).toArray(String[]::new);
      if(Func.isEmpty(mergedArray)){
         return new ArrayList<>();
      }
      List<Map<String,String>> btmNameMapList = new ArrayList<>();
      Arrays.stream(btNames).forEach(btName->{
      Arrays.stream(mergedArray).forEach(btName->{
         Map<String, String> itemMap = new HashMap<>();
         itemMap.put("attributeName",attributeName);
         itemMap.put("source",btName);
@@ -1171,7 +1214,7 @@
               }
               osAttributeDTO.setBtmTypeId(osAttributePO.getEnumId());
            }
            osAttributeDTO.setOid(VciBaseUtil.getPk().toUpperCase(Locale.ROOT));
            osAttributeDTO.setOid(ObjectUtility.getNewObjectID36());
            osAttributeDTO.setId(osAttributePO.getId());
            osAttributeDTO.setName(osAttributePO.getName());
            osAttributeDTO.setDescription(osAttributePO.getDescription());