master
2022-03-25 adc0a1df2d5bc0842b5d4b950380a5b7ce469711
src/app/modules/base/utils/createEntity.ts
@@ -2,191 +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(`/**
  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;
                }
    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(`/**
  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--------------------`);
    }
    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, 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(`/**
  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(`创建成功!`)
                })
        }
    }
    columnstr.push(`@Provide()\n`)
    columnstr.push(`@CoolController({ \n`)
    columnstr.push(`  api: ['add', 'delete', 'update', 'list','page','info'],\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());
  }
}