wangrong
2022-03-23 9e3033c25283dff92244ccc0156b3ad1ee409767
src/app/modules/base/utils/createEntity.ts
@@ -2,180 +2,191 @@
import * as fs from 'fs';
/**
 * 不需要登录的后台接口
 */
 * 不需要登录的后台接口
 */
@Provide()
export class CreateEntityUtil {
    createEntity(table) {
        console.log('生成综合实体类任务开始执行');
        let EntityName = this.firstToUpper3(table.entityName)
        let columnstr = [];
        columnstr.push(`import { EntityModel } from '@midwayjs/orm';\n`)
        columnstr.push(`import { BaseEntity } from '@cool-midway/core';\n`)
        columnstr.push(`import { Column, Double } from 'typeorm';\n`)
        columnstr.push(`/**
        * ${table.comment}
        */\n`)
        columnstr.push(`@EntityModel('${table.name}') \n`)
        columnstr.push(`export class ${EntityName} extends BaseEntity { \n`)
        table.tbcolumn.forEach(item => {
            if (item?.table_name == table.name) {
                let fieldType = 'string';  //nullable length  primary  enum   enumName  width
                let matResult = item.column_type.match(/\(([^)]*)\)/);
                let length = 0;
                if (matResult) {
                    length = matResult[1];
                }
                switch (item.data_type) {
                    case 'varchar':
                        fieldType = 'string'
                        item.column_default = !isNaN(item.column_default) ? item.column_default : '';
                        columnstr.push(`@Column({ comment:'${item.column_comment}', type:'${item.data_type}', default:'${item.column_default}', length:${length}})\n`)
                        break;
                    case 'text':
                        fieldType = 'string'
                        item.column_default = !isNaN(item.column_default) ? item.column_default : '';
                        columnstr.push(`@Column({ comment:'${item.column_comment}', type:'${item.data_type}', default:'${item.column_default}'})\n`)
                        break;
                    case 'int':
                        fieldType = 'number'
                        item.column_default = !isNaN(Number(item.column_default)) ? item.column_default : 0;
                        columnstr.push(`@Column({ comment:'${item.column_comment}', type:'${item.data_type}', default:${item.column_default}, width:${length}})\n`)
                        break;
                    case 'bigint':
                        fieldType = 'number'
                        item.column_default = !isNaN(Number(item.column_default)) ? item.column_default : 0;
                        columnstr.push(`@Column({ comment:'${item.column_comment}', type:'${item.data_type}', default:${item.column_default}}, width:${length})\n`)
                        break;
                    case 'tinyint':
                        fieldType = 'number'
                        item.column_default = !isNaN(Number(item.column_default)) ? item.column_default : 0;
                        columnstr.push(`@Column({ comment:'${item.column_comment}', type:'${item.data_type}', default:${item.column_default}, width:${length}})\n`)
                        break;
                    case 'datetime':
                        fieldType = 'Date'
                        item.column_default = item.column_default != 'null' ? item.column_default : `${new Date()}`;
                        columnstr.push(`@Column({ comment:'${item.column_comment}', type:'${item.data_type}'})\n`)
                        break;
                    case 'double':
                        item.column_default = !isNaN(Number(item.column_default)) ? item.column_default : 0;
                        fieldType = 'Double'
                        columnstr.push(`@Column({ comment:'${item.column_comment}', type:'${item.data_type}', default:${item.column_default}})\n`)
                        break;
                    case 'decimal':
                        item.column_default = !isNaN(Number(item.column_default)) ? item.column_default : 0;
                        fieldType = 'Double'
                        columnstr.push(`@Column({ comment:'${item.column_comment}', type:'${item.data_type}', default:${item.column_default}})\n`)
                        break;
                    default:
                        break;
                }
    createEntity(table) {
        console.log('生成综合实体类任务开始执行');
        let EntityName = this.firstToUpper3(table.entityName)
        let columnstr = [];
        columnstr.push(`import { EntityModel } from '@midwayjs/orm';\n`)
        columnstr.push(`import { BaseEntity } from '@cool-midway/core';\n`)
        columnstr.push(`import { Column, Double } from 'typeorm';\n`)
        columnstr.push(`/**
        * ${table.comment}
        */\n`)
        columnstr.push(`@EntityModel('${table.name}') \n`)
        columnstr.push(`export class ${EntityName} extends BaseEntity { \n`)
        table.tbcolumn.forEach(item => {
            if (item?.table_name == table.name) {
                let fieldType = 'string';  //nullable length  primary  enum   enumName  width
                let matResult = item.column_type.match(/\(([^)]*)\)/);
                let length = 0;
                if (matResult) {
                    length = matResult[1];
                }
                switch (item.data_type) {
                    case 'varchar':
                        fieldType = 'string'
                        item.column_default = !isNaN(item.column_default) ? item.column_default : '';
                        columnstr.push(`@Column({ comment:'${item.column_comment}', type:'${item.data_type}', default:'${item.column_default}', length:${length}})\n`)
                        break;
                    case 'text':
                        fieldType = 'string'
                        item.column_default = !isNaN(item.column_default) ? item.column_default : '';
                        columnstr.push(`@Column({ comment:'${item.column_comment}', type:'${item.data_type}', default:'${item.column_default}'})\n`)
                        break;
                    case 'int':
                        fieldType = 'number'
                        item.column_default = !isNaN(Number(item.column_default)) ? item.column_default : 0;
                        columnstr.push(`@Column({ comment:'${item.column_comment}', type:'${item.data_type}', default:${item.column_default}, width:${length}})\n`)
                        break;
                    case 'bigint':
                        fieldType = 'number'
                        item.column_default = !isNaN(Number(item.column_default)) ? item.column_default : 0;
                        columnstr.push(`@Column({ comment:'${item.column_comment}', type:'${item.data_type}', default:${item.column_default}}, width:${length})\n`)
                        break;
                    case 'tinyint':
                        fieldType = 'number'
                        item.column_default = !isNaN(Number(item.column_default)) ? item.column_default : 0;
                        columnstr.push(`@Column({ comment:'${item.column_comment}', type:'${item.data_type}', default:${item.column_default}, width:${length}})\n`)
                        break;
                    case 'datetime':
                        fieldType = 'Date'
                        item.column_default = item.column_default != 'null' ? item.column_default : `${new Date()}`;
                        columnstr.push(`@Column({ comment:'${item.column_comment}', type:'${item.data_type}'})\n`)
                        break;
                    case 'double':
                        item.column_default = !isNaN(Number(item.column_default)) ? item.column_default : 0;
                        fieldType = 'Double'
                        columnstr.push(`@Column({ comment:'${item.column_comment}', type:'${item.data_type}', default:${item.column_default}})\n`)
                        break;
                    case 'decimal':
                        item.column_default = !isNaN(Number(item.column_default)) ? item.column_default : 0;
                        fieldType = 'Double'
                        columnstr.push(`@Column({ comment:'${item.column_comment}', type:'${item.data_type}', default:${item.column_default}})\n`)
                        break;
                    default:
                        break;
                }
                // let fieldType = item.data_type=='varchar' ? 'string' : item.data_type=='int' ? 'number' : item.data_type=='bigint' ? 'number' : item.data_type=='tinyint' ? 'number'
                columnstr.push(`${item.column_name}: ${fieldType};\n`)
                columnstr.push(`\n`)
            }
                // let fieldType = item.data_type=='varchar' ? 'string' : item.data_type=='int' ? 'number' : item.data_type=='bigint' ? 'number' : item.data_type=='tinyint' ? 'number'
                columnstr.push(`${item.column_name}: ${fieldType};\n`)
                columnstr.push(`\n`)
            }
        });
        columnstr.push(`}`)
        if (fs.existsSync(`../../business/entity/${table.entityName}.ts`)) {
            console.log(' file is exists')
        } else {
            console.log(' file is not exists')
            // API
            fs.writeFile(`./src/app/modules/business/entity/${table.entityName}.ts`,
                columnstr.join(''), (error) => {
                    // 创建失败
                    if (error) {
                        console.log(`创建失败:${error}`)
                    }
                    // 创建成功
                    console.log(`创建成功!`)
                })
        }
        console.log(`--------------------生成实体类结束${table.entityName}Service--------------------`);
    }
        });
        columnstr.push(`}`)
        if (fs.existsSync(`../../business/entity/${table.entityName}.ts`)) {
            console.log(' file is exists')
        } else {
            console.log(' file is not exists')
            // API
            fs.writeFile(`./src/app/modules/business/entity/${table.entityName}.ts`,
                columnstr.join(''), (error) => {
                    // 创建失败
                    if (error) {
                        console.log(`创建失败:${error}`)
                    }
                    // 创建成功
                    console.log(`创建成功!`)
                })
        }
        console.log(`--------------------生成实体类结束${table.entityName}Service--------------------`);
    }
    createService(table) {
        console.log('生成服务类开始执行');
        let EntityName = this.firstToUpper3(table.entityName)
        let columnstr = [];
        columnstr.push(`import { Provide } from '@midwayjs/decorator';\n`)
        columnstr.push(`import { BaseService } from '@cool-midway/core';\n`)
        columnstr.push(`import { InjectEntityModel } from '@midwayjs/orm';\n`)
        columnstr.push(`import { Repository } from 'typeorm';\n`)
        columnstr.push(`import { DataService } from '../../base/service/dataapi/dataapi';\n`)
        columnstr.push(`import { ${EntityName} } from '../entity/${table.entityName}';\n`)
        columnstr.push(`/**
        * ${table.comment}
        */\n`)
        columnstr.push(`@Provide()\n`)
        columnstr.push(`export class ${EntityName}Service extends DataService { \n`)
        columnstr.push(`    @InjectEntityModel(${EntityName}) \n`)
        columnstr.push(`    ${table.entityName}: Repository<${EntityName}> \n`);
        columnstr.push(`}`)
        if (fs.existsSync(`../../business/service/${table.entityName}.ts`)) {
            console.log(' file is exists')
        } else {
            console.log(' file is not exists')
            // API
            fs.writeFile(`./src/app/modules/business/service/${table.entityName}.ts`,
                columnstr.join(''), (error) => {
                    // 创建失败
                    if (error) {
                        console.log(`创建失败:${error}`)
                    }
                    // 创建成功
                    console.log(`创建成功!`)
                })
        }
        console.log(`--------------------生成服务类结束${EntityName}Service--------------------`);
    }
    createService(table) {
        console.log('生成服务类开始执行');
        let EntityName = this.firstToUpper3(table.entityName)
        let columnstr = [];
        columnstr.push(`import { Provide } from '@midwayjs/decorator';\n`)
        columnstr.push(`import { BaseService } from '@cool-midway/core';\n`)
        columnstr.push(`import { InjectEntityModel } from '@midwayjs/orm';\n`)
        columnstr.push(`import { Repository } from 'typeorm';\n`)
        columnstr.push(`import { DataService } from '../../base/service/dataapi/dataapi';\n`)
        columnstr.push(`import { ${EntityName} } from '../entity/${table.entityName}';\n`)
        columnstr.push(`/**
        * ${table.comment}
        */\n`)
        columnstr.push(`@Provide()\n`)
        columnstr.push(`export class ${EntityName}Service extends DataService { \n`)
        columnstr.push(`    @InjectEntityModel(${EntityName}) \n`)
        columnstr.push(`    ${table.entityName}: Repository<${EntityName}> \n`);
        columnstr.push(`}`)
        if (fs.existsSync(`../../business/service/${table.entityName}.ts`)) {
            console.log(' file is exists')
        } else {
            console.log(' file is not exists')
            // API
            fs.writeFile(`./src/app/modules/business/service/${table.entityName}.ts`,
                columnstr.join(''), (error) => {
                    // 创建失败
                    if (error) {
                        console.log(`创建失败:${error}`)
                    }
                    // 创建成功
                    console.log(`创建成功!`)
                })
        }
        console.log(`--------------------生成服务类结束${EntityName}Service--------------------`);
    }
    createController(table) {
        console.log('生成控制类开始执行');
        let EntityName = this.firstToUpper3(table.entityName)
        let columnstr = [];
        columnstr.push(`import { ALL, Body, Inject, Post, Provide } from '@midwayjs/decorator';\n`)
        columnstr.push(`import { CoolController, BaseController } from '@cool-midway/core';\n`)
        columnstr.push(`import { ${EntityName} } from '../entity/${table.entityName}';\n`)
        columnstr.push(`import { ${EntityName}Service } from '../service/${table.entityName}';\n`)
        columnstr.push(`import { DataController } from '../../base/controller/dataController';\n`)
        columnstr.push(`/**
        * ${table.comment}
        */\n`)
        columnstr.push(`@Provide()\n`)
        columnstr.push(`@CoolController({ \n`)
        columnstr.push(`  api: ['add', 'delete', 'update', 'list'],\n`)
        columnstr.push(`  entity: ${EntityName},\n`)
        columnstr.push(`  service: ${EntityName}Service,\n`)
        columnstr.push(`})\n`)
        columnstr.push(`export class ${EntityName}Controller extends DataController {\n`)
        columnstr.push(`  @Inject()\n`)
        columnstr.push(`  ${table.entityName}Service: ${EntityName}Service;\n`)
        columnstr.push(`}`)
        if (fs.existsSync(`../../business/controller/${table.entityName}.ts`)) {
            console.log(' file is exists')
        } else {
            console.log(' file is not exists')
            // API
            fs.writeFile(`./src/app/modules/business/controller/${table.entityName}.ts`,
                columnstr.join(''), (error) => {
                    // 创建失败
                    if (error) {
                        console.log(`创建失败:${error}`)
                    }
                    // 创建成功
                    console.log(`创建成功!`)
                })
        }
    }
    createController(table) {
        console.log('生成控制类开始执行');
        let EntityName = this.firstToUpper3(table.entityName)
        let columnstr = [];
        columnstr.push(`import { ALL, Body, Get, Inject, Post, Provide, Query } from '@midwayjs/decorator';\n`)
        columnstr.push(`import { CoolController, BaseController } from '@cool-midway/core';\n`)
        columnstr.push(`import { ${EntityName} } from '../../entity/${table.entityName}';\n`)
        columnstr.push(`import { ${EntityName}Service } from '../../service/${table.entityName}';\n`)
        columnstr.push(`import { DataController } from '../../../base/controller/dataController';\n`)
        columnstr.push(`/**
        * ${table.comment}
        */\n`)
        columnstr.push(`@Provide()\n`)
        columnstr.push(`@CoolController({ \n`)
        columnstr.push(`  api: ['add', 'delete', 'update', 'list'],\n`)
        columnstr.push(`  entity: ${EntityName},\n`)
        columnstr.push(`  service: ${EntityName}Service,\n`)
        columnstr.push(`})\n`)
        columnstr.push(`export class ${EntityName}Controller extends DataController {\n`)
        columnstr.push(`  @Inject()\n`)
        columnstr.push(`  ${table.entityName}Service: ${EntityName}Service;\n`)
        columnstr.push(`  \n`)
        columnstr.push(`  /**\n  * 获得数据\n  */\n`)
        columnstr.push(`   @Get('/getdata', { summary: '数据接口' })\n`)
        columnstr.push(`   async getData(@Query(ALL) params: any) {\n`)
        columnstr.push(`      return this.ok(await this.dataService.getData(params));\n`)
        columnstr.push(`   }\n`)
        columnstr.push(`  /**\n  * 获得数据\n  */\n`)
        columnstr.push(`   @Get('/postdata', { summary: '数据接口' })\n`)
        columnstr.push(`   async postData(@Query(ALL) params: any) {\n`)
        columnstr.push(`      return this.ok(await this.dataService.getData(params));\n`)
        columnstr.push(`   }\n`)
        columnstr.push(`}`)
        if (fs.existsSync(`../../business/controller/admin/${table.entityName}.ts`)) {
            console.log(' file is exists')
        } else {
            console.log(' file is not exists')
            // API
            fs.writeFile(`./src/app/modules/business/controller/admin/${table.entityName}.ts`,
                columnstr.join(''), (error) => {
                    // 创建失败
                    if (error) {
                        console.log(`创建失败:${error}`)
                    }
                    // 创建成功
                    console.log(`创建成功!`)
                })
        }
    }
    firstToUpper3(str){
        return str.toLowerCase().replace(/( |^)[a-z]/g,(L)=>L.toUpperCase());
    }
    firstToUpper3(str){
        return str.toLowerCase().replace(/( |^)[a-z]/g,(L)=>L.toUpperCase());
    }
}