package com.vci.ubcs.ddl.processor.dll; import com.vci.ubcs.ddl.mapper.DllMapper; import com.vci.ubcs.ddl.mapper.DllOracleMapper; import com.vci.ubcs.omd.vo.OmdBtmTypeAttributeVO; import com.vci.ubcs.starter.exception.VciBaseException; import com.vci.ubcs.starter.web.enumpck.VciFieldTypeEnum; import org.apache.commons.lang3.StringUtils; import org.springframework.util.CollectionUtils; import javax.annotation.PostConstruct; import javax.annotation.Resource; import java.util.List; /** * Description: * * @author LiHang * @date 2023/4/24 */ public class DllOracleMapperProcessor extends DllMapperProcessor { @Resource private DllOracleMapper realMapper; private static DllMapper mapper; @PostConstruct public void init(){ mapper = realMapper; } public DllOracleMapperProcessor() { super(mapper); } public static class SINGLE { public static DllOracleMapperProcessor INSTANCE = new DllOracleMapperProcessor(); } @Override public boolean support(String url) { return "oracle.jdbc.OracleDiver".equals(url); } /** * 获取创建的sql语句中属性部分 * * @param attributeVOList 属性的立碑 * @return sql语句 */ @Override public String getCreateSqlByAttributeForBtm(List attributeVOList) { StringBuilder sb = new StringBuilder(); attributeVOList.forEach(a -> { sb.append(a.getId()).append(SPACE); VciFieldTypeEnum fieldTypeEnum = VciFieldTypeEnum.forValue(a.getAttrDataType()); if (fieldTypeEnum == null) { throw new VciBaseException("属性有误"); } switch (fieldTypeEnum) { case VTInteger: case VTLong: sb.append(dealNumberCreateSql(a)); break; case VTDouble: sb.append(dealDoubleCreateSql(a)); break; case VTBoolean: sb.append(dealBooleanCreateSql(a)); break; case VTDate: case VTDateTime: case VTTime: sb.append(dealDateTimeCreateSql(a)); break; case VTFilePath: sb.append(VARCHAR).append("(100)").append(SPACE); break; case VTClob: sb.append("CLOB").append(SPACE); if(!a.isNullableFlag()){ sb.append(SPACE).append("not null").append(SPACE); } break; default: sb.append(dealStringCreateSql(a)); break; } sb.append(",\n\t"); }); return sb.substring(0,sb.lastIndexOf(",")); } /** * 处理字符串类型的sql转换 * * @param attributeVO 属性 * @return sql */ @Override public String dealStringCreateSql(OmdBtmTypeAttributeVO attributeVO) { Integer length2 = attributeVO.getAttributeLength(); StringBuilder sb = new StringBuilder(); 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(); } /** * 处理日期时间类型的sql转换 * * @param attributeVO 属性 * @return sql */ @Override public String dealDateTimeCreateSql(OmdBtmTypeAttributeVO attributeVO) { return TIMESTAMP + SPACE + dealNullableSql(attributeVO); } /** * 处理布尔类型的sql转换 * * @param attributeVO 属性 * @return sql */ @Override public String dealBooleanCreateSql(OmdBtmTypeAttributeVO attributeVO) { return VARCHAR + "(5)" + SPACE + dealDefaultAndNull(attributeVO); } }