From 13b31b2ca2a5f8600002a042b536c9d5529842e3 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期一, 09 三月 2026 19:21:18 +0800
Subject: [PATCH] #

---
 src/main/java/com/core/generators/domain/Column.java |  265 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 265 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/core/generators/domain/Column.java b/src/main/java/com/core/generators/domain/Column.java
new file mode 100644
index 0000000..cd4314e
--- /dev/null
+++ b/src/main/java/com/core/generators/domain/Column.java
@@ -0,0 +1,265 @@
+package com.core.generators.domain;
+
+import com.core.common.Cools;
+import com.core.generators.CoolGenerator;
+import com.core.generators.constant.SqlOsType;
+import com.core.generators.utils.GeneratorUtils;
+
+import java.sql.Connection;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class Column {
+
+    private String name;
+    private String type;
+    private String comment;
+    private String humpName;
+    private boolean primaryKey;
+    private boolean mainKey;
+    private boolean notNull;
+    private boolean major;
+    private boolean image;
+    private boolean checkBox;
+    private String foreignKey;
+    private String foreignKeyMajor;
+    private List<Map<String, Object>> enums;
+    private Integer length;
+
+    public Column(Connection connection, String name, String type, String comment, boolean primaryKey,
+                  boolean mainKey, boolean notNull, Integer length, boolean withForeignKey, SqlOsType sqlOsType) {
+        this.name = name;
+        this.type = type;
+        this.comment = "";
+        if (!Cools.isEmpty(comment)) {
+            Pattern enumTitlePattern = Pattern.compile("(.+?)(?=\\{)");
+            Matcher enumTitleMatcher = enumTitlePattern.matcher(comment);
+            Pattern foreignTitlePattern = Pattern.compile("(.+?)(?=\\[)");
+            Matcher foreignTitleMatcher = foreignTitlePattern.matcher(comment);
+            if (enumTitleMatcher.find()) {
+                this.comment = enumTitleMatcher.group();
+                Pattern enumPattern = Pattern.compile("(?<=\\{)(.+?)(?=})");
+                Matcher enumMatcher = enumPattern.matcher(comment);
+                if (enumMatcher.find()) {
+                    String enumText = enumMatcher.group();
+                    if (!Cools.isEmpty(enumText)) {
+                        String[] enumArr = enumText.split(",");
+                        this.enums = new ArrayList<>();
+                        for (String item : enumArr) {
+                            Map<String, Object> map = new HashMap<>();
+                            String[] pair = item.split(":");
+                            if (pair.length >= 2) {
+                                map.put(pair[0], pair[1]);
+                                this.enums.add(map);
+                            }
+                        }
+                    }
+                }
+            } else if (foreignTitleMatcher.find()) {
+                this.comment = foreignTitleMatcher.group();
+                Pattern foreignPattern = Pattern.compile("(?<=\\[)(.+?)(?=])");
+                Matcher foreignMatcher = foreignPattern.matcher(comment);
+                if (foreignMatcher.find()) {
+                    String foreignTable = foreignMatcher.group();
+                    if (!Cools.isEmpty(foreignTable)) {
+                        this.foreignKey = GeneratorUtils.getNameSpace(foreignTable);
+                        List<Column> foreignColumns = new ArrayList<>();
+                        if (withForeignKey) {
+                            try {
+                                switch (sqlOsType) {
+                                    case MYSQL:
+                                        foreignColumns = CoolGenerator.getMysqlColumns(connection, foreignTable, false, sqlOsType);
+                                        break;
+                                    case SQL_SERVER:
+                                        foreignColumns = CoolGenerator.getSqlServerColumns(connection, foreignTable, false, sqlOsType);
+                                        break;
+                                    default:
+                                        break;
+                                }
+                            } catch (Exception ex) {
+                                ex.printStackTrace();
+                            }
+                        }
+                        if (!Cools.isEmpty(foreignColumns)) {
+                            for (Column column : foreignColumns) {
+                                if (column.isMajor()) {
+                                    this.foreignKeyMajor = GeneratorUtils.firstCharConvert(column.getHumpName(), false);
+                                }
+                            }
+                            if (Cools.isEmpty(this.foreignKeyMajor)) {
+                                this.foreignKeyMajor = "Id";
+                            }
+                        }
+                    }
+                }
+            } else {
+                this.comment = comment;
+            }
+            if (comment.endsWith("(*)")) {
+                this.comment = comment.substring(0, comment.length() - 3);
+                this.major = true;
+            }
+            if (comment.endsWith("(img)")) {
+                this.comment = comment.substring(0, comment.length() - 5);
+                this.image = true;
+            }
+            if (comment.endsWith("(checkbox)")) {
+                this.comment = comment.substring(0, comment.length() - 10);
+                this.checkBox = true;
+            }
+        }
+        this.primaryKey = primaryKey;
+        this.mainKey = mainKey;
+        this.notNull = notNull;
+        this.length = length;
+        this.humpName = GeneratorUtils._convert(name);
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getComment() {
+        return comment;
+    }
+
+    public String getWholeComment() {
+        if (!Cools.isEmpty(this.enums)) {
+            StringBuilder builder = new StringBuilder("");
+            for (Map<String, Object> map : this.enums) {
+                for (Map.Entry<String, Object> entry : map.entrySet()) {
+                    builder.append(entry.getKey()).append(":").append(entry.getValue()).append("  ");
+                }
+            }
+            return new StringBuilder().append(this.comment).append(builder.toString()).toString();
+        }
+        return this.comment;
+    }
+
+    public void setComment(String comment) {
+        this.comment = comment;
+    }
+
+    public String getHumpName() {
+        return humpName;
+    }
+
+    public boolean isPrimaryKey() {
+        return primaryKey;
+    }
+
+    public boolean isOnly() {
+        return primaryKey;
+    }
+
+    public void setPrimaryKey(boolean primaryKey) {
+        this.primaryKey = primaryKey;
+    }
+
+    public boolean isNotNull() {
+        return notNull;
+    }
+
+    public void setNotNull(boolean notNull) {
+        this.notNull = notNull;
+    }
+
+    public String getForeignKey() {
+        return foreignKey;
+    }
+
+    public void setForeignKey(String foreignKey) {
+        this.foreignKey = foreignKey;
+    }
+
+    public String getForeignKeyMajor() {
+        return foreignKeyMajor;
+    }
+
+    public void setForeignKeyMajor(String foreignKeyMajor) {
+        this.foreignKeyMajor = foreignKeyMajor;
+    }
+
+    public List<Map<String, Object>> getEnums() {
+        return enums;
+    }
+
+    public void setEnums(List<Map<String, Object>> enums) {
+        this.enums = enums;
+    }
+
+    public Integer getLength() {
+        return length;
+    }
+
+    public void setLength(Integer length) {
+        this.length = length;
+    }
+
+    public boolean isMajor() {
+        return major;
+    }
+
+    public void setMajor(boolean major) {
+        this.major = major;
+    }
+
+    public boolean isImage() {
+        return image;
+    }
+
+    public void setImage(boolean image) {
+        this.image = image;
+    }
+
+    public boolean isCheckBox() {
+        return checkBox;
+    }
+
+    public void setCheckBox(boolean checkBox) {
+        this.checkBox = checkBox;
+    }
+
+    public boolean isMainKey() {
+        return mainKey;
+    }
+
+    public void setMainKey(boolean mainKey) {
+        this.mainKey = mainKey;
+    }
+
+    @Override
+    public String toString() {
+        return new StringBuilder()
+                .append("Column{name='").append(name).append('\'')
+                .append(", type='").append(type).append('\'')
+                .append(", comment='").append(comment).append('\'')
+                .append(", humpName='").append(humpName).append('\'')
+                .append(", primaryKey=").append(primaryKey)
+                .append(", notNull=").append(notNull)
+                .append(", major=").append(major)
+                .append(", image=").append(image)
+                .append(", foreignKey='").append(foreignKey).append('\'')
+                .append(", foreignKeyMajor='").append(foreignKeyMajor).append('\'')
+                .append(", enums=").append(enums)
+                .append(", length=").append(length)
+                .append('}')
+                .toString();
+    }
+}

--
Gitblit v1.9.1