package com.boco.nbd.wios.flow.util; import cn.hutool.core.text.StrBuilder; import cn.hutool.core.util.StrUtil; import io.swagger.annotations.ApiModelProperty; import javax.persistence.Column; import java.util.Date; import java.util.Locale; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * @author:cao hai * @date:2022/6/27 14:01 * @version:V1.0 * @description:TODO ClassInitUtil * @modify: */ public class ClassInitUtil { private static final String SPLIT_CHAR = "\\n"; private static final String SPLIT_FIELD = "\\s+"; private static final String LINE_CHAR = "_"; private static final String COMMENT = "COMMENT"; private static final String VARCHAR_CHAR = "varchar"; private static final String INT_CHAR = "int"; private static final String TINYINT_CHAR = "tinyint"; private static final String LONG_CHAR = "int(11)"; private static final String DATETIME_CHAR = "datetime"; /** * 下划线正则 */ public final static Pattern LINE_PATTERN = Pattern.compile("_(\\w)"); /** * 生成class 内容 * * @param str * @return */ public static String createClass(String str) { String[] items = str.split(SPLIT_CHAR); StringBuffer buffer = new StringBuffer(); for (String item : items) { String fieldDescribe = ""; String fieldName = ""; String fieldType = ""; String[] info = item.trim().split(COMMENT); if (info.length >= 2) { fieldDescribe = info[info.length - 1].trim().replace("'", ""); fieldDescribe = fieldDescribe.substring(0, fieldDescribe.length() - 1); } String[] fieldInfo = info[0].trim().split(SPLIT_FIELD); if (fieldInfo.length < 3) { continue; } fieldName = fieldInfo[0].trim().replace("`", ""); fieldType = fieldInfo[1].trim(); buffer.append("@Column(name =\"" + fieldName + "\")" + System.lineSeparator()); buffer.append("@ApiModelProperty(value = \"" + fieldDescribe + "\")" + System.lineSeparator()); buffer.append("private "); buffer.append(getType(fieldType) + " "); buffer.append(lineToHump(fieldName) + " "); buffer.append(";" + System.lineSeparator()); buffer.append(System.lineSeparator()); } return buffer.toString(); } /** * 获取类型 * * @param type * @return */ private static String getType(String type) { if (type.startsWith(VARCHAR_CHAR)) { return String.class.getSimpleName(); } if (type.startsWith(INT_CHAR) || type.startsWith(TINYINT_CHAR)) { return Integer.class.getSimpleName(); } if (type.startsWith(LONG_CHAR)) { return Long.class.getSimpleName(); } if (type.startsWith(DATETIME_CHAR)) { return Date.class.getSimpleName(); } return ""; } /** * 下划线转驼峰 * * @param str * @return */ public static String lineToHump(String str) { if (StrUtil.isEmpty(str)) { return ""; } String regex = "^[A-Z0-9]+$"; //处理已经是大写格式的时候,正则处理存在问题,只有大写字母、数字组成的不处理 if (Pattern.matches(regex, str)) { return str.toLowerCase(Locale.ROOT); } //已经是驼峰不处理 if (str.contains(LINE_CHAR)) { str = str.toLowerCase(Locale.ROOT); StringBuffer buffer = new StringBuffer(); Matcher matcher = LINE_PATTERN.matcher(str); while (matcher.find()) { matcher.appendReplacement(buffer, matcher.group(1).toUpperCase(Locale.ROOT)); } matcher.appendTail(buffer); return buffer.toString(); } return str; } }