| | |
| | | package com.vci.ubcs.ddl.processor.dll; |
| | | |
| | | import com.vci.ubcs.ddl.mapper.DllMapper; |
| | | import com.vci.ubcs.ddl.bo.DdlFieldMappingAttrBO; |
| | | import com.vci.ubcs.ddl.mapper.*; |
| | | import com.vci.ubcs.omd.vo.BtmTypeAttributeVO; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import com.vci.ubcs.starter.exception.VciBaseException; |
| | | import com.vci.ubcs.starter.web.enumpck.VciFieldTypeEnum; |
| | | import com.vci.ubcs.starter.web.util.VciBaseUtil; |
| | | import org.apache.commons.collections4.BidiMap; |
| | | import org.apache.commons.collections4.bidimap.DualHashBidiMap; |
| | | import org.springblade.core.tool.utils.BeanUtil; |
| | | import org.springblade.core.tool.utils.StringPool; |
| | | import org.springblade.core.tool.utils.StringUtil; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * Description:DLL的处理接口 |
| | |
| | | * @author LiHang |
| | | * @date 2023/4/24 |
| | | */ |
| | | public abstract class DllMapperProcessor implements DllBehavior { |
| | | public abstract class DllMapperProcessor { |
| | | |
| | | private final static BidiMap<VciFieldTypeEnum, DdlFieldMappingAttrBO> FIELD_MAPPING_MAP; |
| | | |
| | | static { |
| | | FIELD_MAPPING_MAP = new DualHashBidiMap<>(); |
| | | FIELD_MAPPING_MAP.put(VciFieldTypeEnum.VTInteger,new DdlFieldMappingAttrBO("NUMBER",22,null,true,null)); |
| | | FIELD_MAPPING_MAP.put(VciFieldTypeEnum.VTLong,new DdlFieldMappingAttrBO("NUMBER",22,null,true,null)); |
| | | FIELD_MAPPING_MAP.put(VciFieldTypeEnum.VTDouble,new DdlFieldMappingAttrBO("NUMBER",26,8,true,null)); |
| | | FIELD_MAPPING_MAP.put(VciFieldTypeEnum.VTBoolean,new DdlFieldMappingAttrBO("VARCHAR2",5,null,true,null)); |
| | | FIELD_MAPPING_MAP.put(VciFieldTypeEnum.VTDate,new DdlFieldMappingAttrBO("TIMESTAMP",6,null,true,null)); |
| | | FIELD_MAPPING_MAP.put(VciFieldTypeEnum.VTTime,new DdlFieldMappingAttrBO("TIMESTAMP",6,null,true,null)); |
| | | FIELD_MAPPING_MAP.put(VciFieldTypeEnum.VTDateTime,new DdlFieldMappingAttrBO("TIMESTAMP",6,null,true,null)); |
| | | FIELD_MAPPING_MAP.put(VciFieldTypeEnum.VTFilePath,new DdlFieldMappingAttrBO("VARCHAR2",100,null,true,null)); |
| | | FIELD_MAPPING_MAP.put(VciFieldTypeEnum.VTClob,new DdlFieldMappingAttrBO("VTClob",null,null,true,null)); |
| | | FIELD_MAPPING_MAP.put(VciFieldTypeEnum.VTString,new DdlFieldMappingAttrBO("VARCHAR2",255,null,true,null)); |
| | | } |
| | | |
| | | protected abstract DdlFieldMappingAttrBO getMappingBO(VciFieldTypeEnum fieldTypeEnum); |
| | | |
| | | protected final DdlFieldMappingAttrBO getMappingBOInMap(VciFieldTypeEnum fieldTypeEnum,BidiMap<VciFieldTypeEnum, DdlFieldMappingAttrBO> map){ |
| | | if (!map.containsKey(fieldTypeEnum)){ |
| | | throw new VciBaseException("找不到字段的映射"); |
| | | } |
| | | DdlFieldMappingAttrBO bo = map.get(fieldTypeEnum); |
| | | return BeanUtil.copy(bo,DdlFieldMappingAttrBO.class); |
| | | } |
| | | |
| | | protected static BidiMap<VciFieldTypeEnum,DdlFieldMappingAttrBO> getMappingMapCopy(){ |
| | | BidiMap<VciFieldTypeEnum, DdlFieldMappingAttrBO> map = new DualHashBidiMap<>(); |
| | | map.putAll(FIELD_MAPPING_MAP); |
| | | return map; |
| | | } |
| | | |
| | | /** |
| | | * 按数据库字段类型列举所有的VCI字段类型 |
| | | * @param columnStr 数据库字段类型 |
| | | * @return VCI字段类型 |
| | | */ |
| | | public List<VciFieldTypeEnum> listFieldByColumnStr(String columnStr){ |
| | | return listFieldInMapByColumnStr(columnStr,FIELD_MAPPING_MAP); |
| | | } |
| | | |
| | | protected final List<VciFieldTypeEnum> listFieldInMapByColumnStr(String columnStr,BidiMap<VciFieldTypeEnum,DdlFieldMappingAttrBO> map){ |
| | | VciBaseUtil.alertNotNull(columnStr,"数据库字段类型",map,"字段映射集合"); |
| | | List<VciFieldTypeEnum> fieldTypeList = new ArrayList<>(); |
| | | map.values().stream().filter(s -> StringUtil.equals(s.getDataType(),columnStr)).forEach(s -> { |
| | | fieldTypeList.add(map.getKey(s)); |
| | | }); |
| | | return fieldTypeList; |
| | | } |
| | | |
| | | private DllMapper mapper; |
| | | |
| | |
| | | return mapper.countAll(tableName); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * 处理整数类型的sql转换 |
| | | * |
| | | * 获取字段创建sql |
| | | * @param fieldType VT字段类型 |
| | | * @param attributeVO 属性 |
| | | * @return sql |
| | | */ |
| | | @Override |
| | | public String dealNumberCreateSql(BtmTypeAttributeVO attributeVO) { |
| | | StringBuilder snb = new StringBuilder().append(NUMBER + SPACE); |
| | | dealDefaultAndNull(attributeVO); |
| | | return snb.toString(); |
| | | } |
| | | |
| | | /** |
| | | * 调用处理默认值和非空 |
| | | * |
| | | * @param attributeVO 属性 |
| | | * @return 执行结果 |
| | | */ |
| | | @Override |
| | | public String dealDefaultAndNull(BtmTypeAttributeVO attributeVO) { |
| | | String value = ""; |
| | | if (StringUtils.isNotBlank(attributeVO.getDefaultValue())) { |
| | | value += dealDefaultValue(attributeVO.getDefaultValue()); |
| | | public String getColumnTypeSql(VciFieldTypeEnum fieldType,BtmTypeAttributeVO attributeVO){ |
| | | DdlFieldMappingAttrBO mappingBO = getMappingBO(fieldType); |
| | | mappingBO.setDataLength(attributeVO.getAttributeLength()); |
| | | if (fieldType.equals(VciFieldTypeEnum.VTDouble)){ |
| | | mappingBO.setDataPrecision(attributeVO.getPrecisionLength()); |
| | | } |
| | | mappingBO.setNullable(attributeVO.isNullableFlag()); |
| | | mappingBO.setDefaultValue(attributeVO.getDefaultValue()); |
| | | return mappingBO.toString() + (StringUtil.equals(attributeVO.getId(),"OID") ? StringPool.SPACE + "primary key" + StringPool.SPACE : ""); |
| | | |
| | | if (!attributeVO.isNullableFlag()){ |
| | | value += dealNullableSql(attributeVO); |
| | | } |
| | | return value; |
| | | } |
| | | |
| | | /** |
| | | * 处理默认值 |
| | | * |
| | | * @return sql |
| | | */ |
| | | @Override |
| | | public String dealDefaultValue(String defualValule) { |
| | | return DEFAULT + SPACE + defualValule + SPACE; |
| | | } |
| | | |
| | | /** |
| | | * 处理浮点数类型的sql转换 |
| | | * |
| | | * @param attributeVO 属性 |
| | | * @return sql |
| | | */ |
| | | @Override |
| | | public String dealDoubleCreateSql(BtmTypeAttributeVO attributeVO) { |
| | | Integer length = attributeVO.getPrecisionLength(); |
| | | if(length == null || length == 0){ |
| | | length = 20; |
| | | } |
| | | Integer scaleLength = attributeVO.getScaleLength(); |
| | | if(scaleLength == null){ |
| | | scaleLength = 2; |
| | | } |
| | | StringBuilder sb = new StringBuilder().append(NUMBER).append("(").append(String.valueOf(length.intValue())) |
| | | .append(",").append(String.valueOf(scaleLength.intValue())) |
| | | .append(")").append(SPACE); |
| | | sb.append(dealDefaultAndNull(attributeVO)); |
| | | return sb.toString(); |
| | | } |
| | | |
| | | /** |
| | | * 处理非空 |
| | | * |
| | | * @return sql |
| | | */ |
| | | @Override |
| | | public String dealNullableSql(BtmTypeAttributeVO attributeVO) { |
| | | if (!attributeVO.isNullableFlag()) { |
| | | return SPACE + "not null" + SPACE; |
| | | } |
| | | return ""; |
| | | } |
| | | |
| | | /** |
| | | * 处理布尔类型的sql转换 |
| | | * |
| | | * @param attributeVO 属性 |
| | | * @return sql |
| | | */ |
| | | @Override |
| | | public String dealBooleanCreateSql(BtmTypeAttributeVO attributeVO) { |
| | | return "VARCHAR (5) " + SPACE + dealDefaultAndNull(attributeVO); |
| | | } |
| | | |
| | | /** |
| | | * 处理日期时间类型的sql转换 |
| | | * |
| | | * @param attributeVO 属性 |
| | | * @return sql |
| | | */ |
| | | @Override |
| | | public String dealDateTimeCreateSql(BtmTypeAttributeVO attributeVO) { |
| | | return "DATETIME" + SPACE + dealDefaultAndNull(attributeVO); |
| | | } |
| | | |
| | | /** |
| | | * 处理字符串类型的sql转换 |
| | | * |
| | | * @param attributeVO 属性 |
| | | * @return sql |
| | | */ |
| | | @Override |
| | | public String dealStringCreateSql(BtmTypeAttributeVO attributeVO) { |
| | | StringBuilder sb = new StringBuilder(); |
| | | Integer length2 = attributeVO.getAttributeLength(); |
| | | if (length2 == null) { |
| | | length2 = 250; |
| | | } |
| | | sb.append("VARCHAR").append("("). |
| | | append(String.valueOf(length2.intValue())).append(")").append(SPACE); |
| | | if (OID.equalsIgnoreCase(attributeVO.getId())) { |
| | | sb.append(" primary key "); |
| | | //强制设置OID为主键 |
| | | } |
| | | sb.append(dealDefaultAndNull(attributeVO)); |
| | | return sb.toString(); |
| | | } |
| | | } |