#
Junjie
2024-07-02 d4f427bf7c0ff1cf0ed1ac420bba8a063f9ef840
zy-asrs-framework/src/main/java/com/zy/asrs/framework/generators/BetterGenerator.java
@@ -41,6 +41,7 @@
    public String username;
    public String password;
    public String table;
    public String tableName;
    public String packagePath;
    public boolean controller = true;
    public boolean service = true;
@@ -70,6 +71,8 @@
    private String systemPackagePath;
    private String systemPackage;
    private String itemName;
    private String tableColumns;
    private String formEditColumns;
    public void build() throws Exception {
        init();
@@ -161,6 +164,8 @@
            }
        }
        itemName = packagePathSplit[packagePathSplit.length - 1];
        tableColumns = createTableColumns();
        formEditColumns = createFormEditColumns();
    }
    private String readFile(String template){
@@ -188,6 +193,7 @@
        if(!writerFile.exists()){
            content=content.
                    replaceAll("@\\{TABLENAME}", table)
                    .replaceAll("@\\{TABLEDESC}", tableName)
                    .replaceAll("@\\{ENTITYIMPORT}", entityImport)
                    .replaceAll("@\\{ENTITYCONTENT}", entityContent)
                    .replaceAll("@\\{ENTITYNAME}", fullEntityName)
@@ -209,6 +215,8 @@
                    .replaceAll("@\\{PRIMARYKEYCOLUMN0}", GeneratorUtils.firstCharConvert(primaryKeyColumn, true))
                    .replaceAll("@\\{UPCASEMARJORCOLUMN}", GeneratorUtils.firstCharConvert(primaryKeyColumn, false))
                    .replaceAll("@\\{SYSTEMPACKAGE}",systemPackage)
                    .replaceAll("@\\{TABLECOLUMNS}", tableColumns)
                    .replaceAll("@\\{FORMEDITCOLUMNS}", formEditColumns)
            ;
            writerFile.createNewFile();
            BufferedWriter writer=new BufferedWriter(new FileWriter(writerFile));
@@ -224,7 +232,13 @@
    private void gainDbInfo() throws Exception {
        Connection conn;
        if (null == this.sqlOsType) {
            throw new RuntimeException("请指定数据库类型!");
            throw new RuntimeException("请选择sqlOsType!");
        }
        if (null == this.table) {
            throw new RuntimeException("请输入table!");
        }
        if (null == this.tableName) {
            throw new RuntimeException("请输入tableName!");
        }
        switch (this.sqlOsType) {
            case MYSQL:
@@ -753,17 +767,202 @@
    /************************************** Index动态字段 *******************************************/
    /**********************************************************************************************/
    private String createTableColumns() {
        StringBuilder sb = new StringBuilder();
        for (Column column : columns) {
            if (column.isPrimaryKey()
                    || column.getHumpName().equals("deleted")
                    || column.getHumpName().equals("hostId")
            ) {
                continue;
            }
            sb.append("        {\n")
                    .append("            title: '").append(column.getComment()).append("',\n")
                    .append("            dataIndex: '");
            if ("Date".equals(column.getType()) || !Cools.isEmpty(column.getEnums()) || !Cools.isEmpty(column.getForeignKeyMajor())){
                // 时间、枚举  格式化  主键修饰
                sb.append(column.getHumpName()).append("\\$");
            } else {
                sb.append(column.getHumpName());
            }
            sb.append("',\n")
                    .append("            valueType: 'text',\n")
                    .append("            hidden: false,\n")
                    .append("            width: 140,\n");
            if (column.isMajor()) {
                sb.append("            copyable: true,\n");
            }
            sb.append("            filterDropdown: (props) => <").append(getAntProFilterType(column)).append("\n")
                    .append("                name='").append(column.getHumpName()).append("'\n");
            if (!Cools.isEmpty(column.getForeignKey())) {
                sb.append("                major='").append(GeneratorUtils.firstCharConvert(column.getForeignKey())).append("'\n");
            }
            sb.append("                {...props}\n")
                    .append("                actionRef={actionRef}\n")
                    .append("                setSearchParam={setSearchParam}\n");
            if (!Cools.isEmpty(column.getEnums())) {
                sb.append("                data={[\n");
                for (Map<String, Object> map : column.getEnums()) {
                    for (Map.Entry<String, Object> entry : map.entrySet()){
                        sb.append("                    { label: '").append(entry.getValue()).append("', value: ").append(entry.getKey()).append(" },\n");
                    }
                }
                sb.append("                ]}\n");
            }
            sb.append("            />,\n")
                    .append("        },\n");
        }
        return sb.toString();
    }
    private String getAntProFilterType(Column column){
        String filter = "TextFilter";
        switch (column.getType()) {
            case "Boolean":
                filter = "TextFilter";
                break;
            case "Short":
                filter = "TextFilter";
                break;
            case "Integer":
                filter = "TextFilter";
                break;
            case "Long":
                filter = "TextFilter";
                break;
            case "Double":
                filter = "TextFilter";
                break;
            case "String":
                filter = "TextFilter";
                break;
            case "Date":
                filter = "DatetimeRangeFilter";
                break;
            default:
                break;
        }
        if (!Cools.isEmpty(column.getEnums())) {
            filter = "SelectFilter";
        }
        if (!Cools.isEmpty(column.getForeignKey())) {
            filter = "LinkFilter";
        }
        return filter;
    }
    /**********************************************************************************************/
    /************************************** Edit动态字段 ********************************************/
    /**********************************************************************************************/
    private String createFormEditColumns() {
        StringBuilder sb = new StringBuilder();
        int times = 0;
        boolean has = false;boolean init = false;
        for (Column column : columns) {
            if (column.isPrimaryKey()
                    || column.getHumpName().equals("deleted")
                    || column.getHumpName().equals("hostId")
            ) {
                continue;
            }
            if (times%2 == 0) {
                sb.append("                    <ProForm.Group>\n");
                has = true;init=true;
            }
            String itemType = "ProFormText";
            String precision = "";
            switch (column.getType()) {
                case "Boolean":
                    itemType = "ProFormText";
                    break;
                case "Short":
                    itemType = "ProFormDigit";
                    precision = "0";
                    break;
                case "Integer":
                    itemType = "ProFormDigit";
                    precision = "0";
                    break;
                case "Long":
                    itemType = "ProFormDigit";
                    precision = "0";
                    break;
                case "Double":
                    itemType = "ProFormDigit";
                    precision = "2";
                    break;
                case "String":
                    itemType = "ProFormText";
                    break;
                case "Date":
                    itemType = "ProFormDateTimePicker";
                    break;
                default:
                    break;
            }
            if (!Cools.isEmpty(column.getEnums())) {
                itemType = "ProFormSelect";
            }
            if (!Cools.isEmpty(column.getForeignKey())) {
                itemType = "ProFormSelect";
            }
            sb.append("                        <").append(itemType).append("\n")
                    .append("                            name=\"").append(column.getHumpName()).append("\"\n")
                    .append("                            label=\"").append(column.getComment()).append("\"\n")
                    .append("                            colProps={{ md: 12, xl: 12 }}\n");
            // 数字小数点
            if (!Cools.isEmpty(precision) && Cools.isEmpty(column.getEnums())) {
                sb.append("                            fieldProps={{ precision: ").append(precision).append(" }}\n");
            }
            // 非空
            if (column.isNotNull()) {
                sb.append("                            rules={[{ required: true }]}\n");
            }
            // 枚举
            if (!Cools.isEmpty(column.getEnums())) {
                sb.append("                            options={[\n");
                for (Map<String, Object> map : column.getEnums()) {
                    for (Map.Entry<String, Object> entry : map.entrySet()){
                        sb.append("                                { label: '").append(entry.getValue()).append("', value: ").append(entry.getKey()).append(" },\n");
                    }
                }
                sb.append("                            ]}\n");
            }
            // 时间
            if ("Date".equals(column.getType())) {
                sb.append("                            transform={(value) => moment(value).toISOString()}\n");
            }
            // 关联表
            if (!Cools.isEmpty(column.getForeignKey())) {
                sb.append("                            showSearch\n")
                        .append("                            debounceTime={300}\n")
                        .append("                            request={async ({ keyWords }) => {\n")
                        .append("                                const resp = await Http.doPostForm('api/").append(GeneratorUtils.firstCharConvert(column.getForeignKey())).append("/query', { condition: keyWords });\n")
                        .append("                                return resp.data;\n")
                        .append("                            }}\n");
            }
            sb.append("                        />\n");
            if (times%2 != 0) {
                sb.append("                    </ProForm.Group>\n");
                has = false;
            }
            times++;
        }
        if (init && has) {
            sb.append("                    </ProForm.Group>\n");
        }
        return sb.toString();
    }
}