| package com.zy.asrs.framework.generators.domain; | 
|   | 
| import com.zy.asrs.framework.common.Cools; | 
| import com.zy.asrs.framework.generators.CoolGenerator; | 
| import com.zy.asrs.framework.generators.constant.SqlOsType; | 
| import com.zy.asrs.framework.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; | 
|   | 
| /** | 
|  * Created by vincent on 2019-06-18 | 
|  */ | 
| 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; // 外健实例名(大驼峰,如sys_user ==> User) | 
|     private String foreignKeyMajor; // 外键(小驼峰) | 
|     private List<Map<String, Object>> enums; // 枚举值 | 
|     private Integer length; // 字段长度 | 
|   | 
|     public Column(Connection conn, String name, String type, String comment, boolean primaryKey, boolean mainKey, boolean notNull, Integer length, boolean init, SqlOsType sqlOsType) { | 
|         this.name = name; | 
|         this.type = type; | 
|         this.comment = ""; | 
|         if (!Cools.isEmpty(comment)){ | 
|             // 枚举 | 
|             Pattern pattern1 = Pattern.compile("(.+?)(?=\\{)"); | 
|             Matcher matcher1 = pattern1.matcher(comment); | 
|             // 外键 | 
|             Pattern pattern11 = Pattern.compile("(.+?)(?=\\[)"); | 
|             Matcher matcher11 = pattern11.matcher(comment); | 
|             // 枚举 | 
|             if (matcher1.find()) { | 
|                 this.comment = matcher1.group(); | 
|                 Pattern pattern2 = Pattern.compile("(?<=\\{)(.+?)(?=})"); | 
|                 Matcher matcher2 = pattern2.matcher(comment); | 
|                 if (matcher2.find()) { | 
|                     String group = matcher2.group(); | 
|                     if (!Cools.isEmpty(group)) { | 
|                         String[] values = group.split(","); | 
|                         this.enums = new ArrayList<>(); | 
|                         for (String val : values) { | 
|                             Map<String, Object> map = new HashMap<>(); | 
|                             String[] split = val.split(":"); | 
|                             map.put(split[0], split[1]); | 
|                             enums.add(map); | 
|                         } | 
|                     } | 
|                 } | 
|             //  外键 | 
|             } else if (matcher11.find()){ | 
|                 this.comment = matcher11.group(); | 
|                 Pattern pattern22 = Pattern.compile("(?<=\\[)(.+?)(?=])"); | 
|                 Matcher matcher22 = pattern22.matcher(comment); | 
|                 if (matcher22.find()) { | 
|                     String group = matcher22.group(); | 
|                     if (!Cools.isEmpty(group)) { | 
|                         this.foreignKey = GeneratorUtils.getNameSpace(group); | 
|                         List<Column> foreignColumns = new ArrayList<>(); | 
|                         if (init) { | 
|                             try { | 
|                                 switch (sqlOsType) { | 
|                                     case MYSQL: | 
|                                         foreignColumns = CoolGenerator.getMysqlColumns(conn, group, false, sqlOsType); | 
|                                         break; | 
|                                     case SQL_SERVER: | 
|                                         foreignColumns = CoolGenerator.getSqlServerColumns(conn, group, false, sqlOsType); | 
|                                         break; | 
|                                     default: | 
|                                         break; | 
|                                 } | 
|   | 
|                             } catch (Exception e){ | 
|                                 e.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; | 
|             } | 
|         } | 
| //        if (primaryKey || mainKey){ | 
| //            this.primaryKey = true; | 
| //        } else { | 
| //            this.primaryKey = false; | 
| //        } | 
|         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(final String name) { | 
|         this.name = name; | 
|     } | 
|   | 
|     public String getType() { | 
|         return type; | 
|     } | 
|   | 
|     public void setType(final String type) { | 
|         this.type = type; | 
|     } | 
|   | 
|     public String getComment() { | 
|         return comment; | 
|     } | 
|   | 
|     public String getWholeComment() { | 
|         if (!Cools.isEmpty(this.enums)){ | 
|             StringBuilder sb = new StringBuilder(" "); | 
|             for (Map<String, Object> val : enums){ | 
|                 for (Map.Entry<String, Object> entry : val.entrySet()){ | 
|                     sb.append(entry.getKey()) | 
|                             .append(": ") | 
|                             .append(entry.getValue()) | 
|                             .append("  "); | 
|                 } | 
|             } | 
|             return comment + sb.toString(); | 
|         } | 
|         return comment; | 
|     } | 
|   | 
|     public void setComment(final String comment) { | 
|         this.comment = comment; | 
|     } | 
|   | 
|     public String getHumpName() { | 
|         return humpName; | 
|     } | 
|   | 
| //    public boolean isPrimaryKey() { | 
| //        return primaryKey || mainKey; | 
| //    } | 
|   | 
|     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(final boolean notNull) { | 
|         this.notNull = notNull; | 
|     } | 
|   | 
|     public String getForeignKey() { | 
|         return foreignKey; | 
|     } | 
|   | 
|     public void setForeignKey(final String foreignKey) { | 
|         this.foreignKey = foreignKey; | 
|     } | 
|   | 
|     public String getForeignKeyMajor() { | 
|         return foreignKeyMajor; | 
|     } | 
|   | 
|     public void setForeignKeyMajor(final 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(final Integer length) { | 
|         this.length = length; | 
|     } | 
|   | 
|     public boolean isMajor() { | 
|         return major; | 
|     } | 
|   | 
|     public void setMajor(final boolean major) { | 
|         this.major = major; | 
|     } | 
|   | 
|     public boolean isImage() { | 
|         return image; | 
|     } | 
|   | 
|     public void setImage(final 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 "Column{" + | 
|                 "name='" + name + '\'' + | 
|                 ", type='" + type + '\'' + | 
|                 ", comment='" + comment + '\'' + | 
|                 ", humpName='" + humpName + '\'' + | 
|                 ", primaryKey=" + primaryKey + | 
|                 ", notNull=" + notNull + | 
|                 ", major=" + major + | 
|                 ", image=" + image + | 
|                 ", foreignKey='" + foreignKey + '\'' + | 
|                 ", foreignKeyMajor='" + foreignKeyMajor + '\'' + | 
|                 ", enums=" + enums + | 
|                 ", length=" + length + | 
|                 '}'; | 
|     } | 
|   | 
| } |