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 javax.annotation.PostConstruct; import javax.annotation.Resource; import javax.smartcardio.ATR; import java.util.List; /** * Description: * * @author LiHang * @date 2023/4/24 */ public class DllMySqlMapperProcessor extends DllMapperProcessor { @Resource private DllOracleMapper realMapper; private static DllMapper mapper; @PostConstruct public void init() { mapper = realMapper; } public DllMySqlMapperProcessor() { super(mapper); } public static class SINGLE { public static DllMySqlMapperProcessor INSTANCE = new DllMySqlMapperProcessor(); } @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 VTTime: case VTDateTime: sb.append(dealDateTimeCreateSql(a)); case VTFilePath: sb.append("VARCHAR").append("(100)").append(SPACE); break; case VTClob: sb.append("LONGTEXT").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 dealNumberCreateSql(OmdBtmTypeAttributeVO attributeVO) { StringBuilder sb = new StringBuilder(); if (VciFieldTypeEnum.VTInteger.name().equalsIgnoreCase(attributeVO.getAttrDataType())) { sb.append("INT").append(SPACE); } else { sb.append("BIGINT").append(SPACE); } sb.append(dealDefaultAndNull(attributeVO)); return sb.toString(); } /** * 处理浮点数类型的sql转换 * * @param attributeVO 属性 * @return sql */ @Override public String dealDoubleCreateSql(OmdBtmTypeAttributeVO attributeVO) { StringBuilder sb = new StringBuilder(); Integer length = attributeVO.getPrecisionLength(); if (length == null || length == 0) { length = 20; } Integer scaleLength = attributeVO.getScaleLength(); if (scaleLength == null) { scaleLength = 2; } sb.append("DOUBLE").append("(").append(String.valueOf(length.intValue())) .append(",").append(String.valueOf(scaleLength.intValue())) .append(")").append(SPACE); sb.append(dealDefaultAndNull(attributeVO)); return sb.toString(); } /** * 处理布尔类型的sql转换 * * @param attributeVO 属性 * @return sql */ @Override public String dealBooleanCreateSql(OmdBtmTypeAttributeVO attributeVO) { return "VARCHAR (5) " + SPACE + dealDefaultAndNull(attributeVO); } /** * 处理日期时间类型的sql转换 * * @param attributeVO 属性 * @return sql */ @Override public String dealDateTimeCreateSql(OmdBtmTypeAttributeVO attributeVO) { return "DATETIME" + SPACE + dealDefaultAndNull(attributeVO); } }