| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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.*; |
| | | |
| | | /** |
| | |
| | | private Integer NAME_MAX_LENGTH = 28; |
| | | |
| | | /** |
| | | * 系统中变量配置文件中配置的key |
| | | * 数据库中的一些关键字 |
| | | */ |
| | | private final String SYSUSEDNAMES = "sysUsedNames"; |
| | | |
| | | /** |
| | | * 数据库中关键字配置文件中配置的key |
| | | */ |
| | | private final String DATABASEUSEDNAMES = "dataBaseUsedNames"; |
| | | private final List<String> DATABASEUSEDNAMELIST = Arrays.asList( |
| | | "ACCESS", "ADD", "ALL", "ALTER", "AND", "ANY", "AS", "ASC", "AUDIT", "BETWEEN", |
| | | "BY", "CHAR", "CHECK", "CLUSTER", "COLUMN", "COMMENT", "COMPRESS", "CONNECT", |
| | | "CREATE", "CURRENT", "DATE", "DECIMAL", "DEFAULT", "DELETE", "DESC", "DISTINCT", |
| | | "DROP", "ELSE", "EXCLUSIVE", "EXISTS", "FILE", "FLOAT", "FOR", "FROM", "GRANT", "GROUP", |
| | | "HAVING", "IDENTIFIED", "IMMEDIATE", "IN", "INCREMENT", "INDEX", "INITIAL", |
| | | "INSERT", "INTEGER", "INTERSECT", "INTO", "IS", "LEVEL", "LIKE", "LOCK", "LONG", |
| | | "MAXEXTENTS", "MINUS", "MLSLABEL", "MODE", "MODIFY", "NOAUDIT", "NOCOMPRESS", |
| | | "NOT", "NOWAIT", "NULL", "NUMBER", "OF", "OFFLINE", "ON", "ONLINE", "OPTION", "OR", "ORDER", |
| | | "P", "CTFREE", "PRIOR", "PRIVILEGES", "PUBLIC", "RAW", "RENAME", "RESOURCE", "REVOKE", |
| | | "ROW", "ROWID", "ROWNUM", "ROWS", "SELECT", "SESSION", "SET", "SHARE", "SIZE", "SMALLINT", |
| | | "START", "SUCCESSFUL", "SYNONYM", "SYSDATE", "TABLE", "THEN", "TO", "TRIGGER", "UID", "UNION", |
| | | "UNIQUE", "UPDATE", "USER", "VALIDATE", "VALUES", "VARCHAR", "VARCHAR2", "VIEW", |
| | | "WHENEVER", "WHERE", "WITH"); |
| | | |
| | | /** |
| | | * 链接类型服务 |
| | |
| | | } |
| | | |
| | | /** |
| | | * 够着属性树节点 |
| | | * 构造属性树节点 |
| | | * @param parentTreeList |
| | | * @param refTypeName |
| | | * @param refFlag |
| | |
| | | pTree.setExpanded(true); |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | /** |
| | |
| | | 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); |
| | |
| | | //检查默认值与属性类型是否匹配 |
| | | 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(); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 查看属性是否被引用 |
| | | * @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; |
| | | } |
| | | |
| | | /** |
| | | * 检查属性名称是否符合规范 |
| | | * @param attributeName |
| | | * @return 没有返回值,存在问题直接抛出错误 |
| | |
| | | * @param abName |
| | | * @return |
| | | */ |
| | | private boolean usedBySystem(String abName) { |
| | | private boolean usedBySystem(String abName) throws PLException { |
| | | boolean flag = false; |
| | | String[] names = UsedNames.getProperty(SYSUSEDNAMES).toUpperCase().split(","); |
| | | List<String> nameList = Arrays.asList(names); |
| | | AttributeDef[] sysAttributeDefs = platformClientUtil.getBtmService().getSysAttributeDefs(); |
| | | List<String> nameList = null; |
| | | if(Func.isNotEmpty(sysAttributeDefs)){ |
| | | nameList = Arrays.stream(sysAttributeDefs) |
| | | .map(item -> item.name.toUpperCase(Locale.ROOT)).collect(Collectors.toList()); |
| | | } |
| | | if(nameList.contains(abName.toUpperCase())){ |
| | | flag = true; |
| | | } |
| | |
| | | */ |
| | | private boolean usedByDataBase(String abName){ |
| | | boolean flag = false; |
| | | String[] names = UsedNames.getProperty(DATABASEUSEDNAMES).toUpperCase().split(","); |
| | | List<String> nameList = Arrays.asList(names); |
| | | if(nameList.contains(abName.toUpperCase())){ |
| | | if(DATABASEUSEDNAMELIST.contains(abName.toUpperCase())){ |
| | | flag = true; |
| | | } |
| | | return flag; |
| | |
| | | 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); |
| | |
| | | } |
| | | 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()); |