/***********************************************************************
* Project: baifenBinfa
* ProjectName: 百分兵法管理系统
* Web: http://chuanyin.com
* Author:
* Email:
* CreateTime: 202403/02
* Description: 暂无
***********************************************************************/
using System;
using System.CodeDom;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using AutoMapper;
using Chuanyin.Attribute;
using CoreCms.Net.Configuration;
using CoreCms.Net.IRepository.UnitOfWork;
using CoreCms.Net.IServices;
using CoreCms.Net.Loging;
using CoreCms.Net.Model.Entities.Distribution;
using CoreCms.Net.Model.ViewModels.Basics;
using CoreCms.Net.Model.ViewModels.UI;
using CoreCms.Net.Repository.UnitOfWork;
using CoreCms.Net.Utility.Helper;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using NPOI.HSSF.UserModel;
namespace CoreCms.Net.Web.Admin.Controllers
{
///
/// 代码生成器
///
[Description("代码生成器")]
[Route("api/[controller]/[action]")]
[ApiController]
//[Authorize(Permissions.Name)]
public class CodeGeneratorController : ControllerBase
{
private readonly ICodeGeneratorServices _codeGeneratorServices;
private readonly IWebHostEnvironment _webHostEnvironment;
private readonly IMapper _mapper;
///
/// 构造函数
///
public CodeGeneratorController(ICodeGeneratorServices codeGeneratorServices, IMapper mapper, IWebHostEnvironment webHostEnvironment)
{
_codeGeneratorServices = codeGeneratorServices;
_mapper = mapper;
_webHostEnvironment = webHostEnvironment;
}
///
/// 获取数据表格列表
///
///
[HttpPost]
[Description("获取数据表格列表")]
public AdminUiCallBack GetTables()
{
var tables = _codeGeneratorServices.GetDbTables();
var fristDb = new SqlSugar.DbTableInfo { Name = "AllTable", Description = "所有数据表含视图" };
tables.Insert(0, fristDb);
var jm = new AdminUiCallBack
{
code = 0,
data = _mapper
.Map, List>(tables)
};
return jm;
}
///
/// 生成代码
///
///
///
///
[HttpPost]
[Description("生成代码")]
public IActionResult CodeGenDown([FromQuery] string tableName, [FromQuery] string fileType)
{
var jm = new AdminUiCallBack();
if (string.IsNullOrEmpty(tableName))
{
jm.msg = "请选择数据库";
return new JsonResult(jm);
}
if (string.IsNullOrEmpty(fileType))
{
jm.msg = "请选择要导出的文件类型";
return new JsonResult(jm);
}
if (tableName == "AllTable")
{
var data = _codeGeneratorServices.CodeGenByAll(fileType);
if (data != null)
{
return File(data, System.Net.Mime.MediaTypeNames.Application.Zip, tableName + "-" + fileType + ".zip");
}
else
{
jm.msg = tableName + "获取数据库字段失败";
return new JsonResult(jm);
}
}
else
{
var data = _codeGeneratorServices.CodeGen(tableName, fileType);
if (data != null)
{
return File(data, System.Net.Mime.MediaTypeNames.Application.Zip, tableName + "-" + fileType + ".zip");
}
else
{
jm.msg = tableName + "获取数据库字段失败";
return new JsonResult(jm);
}
}
}
///
/// 生成代码
///
///
///
///
[HttpPost]
[Description("生成代码Vue")]
public IActionResult CodeGenDownVue([FromQuery] string tableName, [FromQuery] string fileType)
{
var jm = new AdminUiCallBack();
if (string.IsNullOrEmpty(tableName))
{
jm.msg = "请选择数据库";
return new JsonResult(jm);
}
if (string.IsNullOrEmpty(fileType))
{
jm.msg = "请选择要导出的文件类型";
return new JsonResult(jm);
}
if (tableName == "AllTable")
{
var data = _codeGeneratorServices.CodeGenByAll(fileType, true);
if (data != null)
{
return File(data, System.Net.Mime.MediaTypeNames.Application.Zip, tableName + "-" + fileType + ".zip");
}
else
{
jm.msg = tableName + "获取数据库字段失败";
return new JsonResult(jm);
}
}
else
{
var data = _codeGeneratorServices.CodeGen(tableName, fileType, true);
if (data != null)
{
return File(data, System.Net.Mime.MediaTypeNames.Application.Zip, tableName + "-" + fileType + ".zip");
}
else
{
jm.msg = tableName + "获取数据库字段失败";
return new JsonResult(jm);
}
}
}
#region 获取所有表和表名并生成excel
///
/// 获取所有表和表名并生成excel
///
///
[HttpPost]
[Description("获取所有表和表名并生成excel")]
public AdminUiCallBack GetDataBaseTablesToExcel()
{
var jm = new AdminUiCallBack();
//创建Excel文件的对象
var book = new HSSFWorkbook();
//添加一个sheet
var mySheet = book.CreateSheet("Sheet1");
//获取list数据
var listmodel = _codeGeneratorServices.GetDbTables();
var headerStyle = ExcelHelper.GetHeaderStyle(book);
var commonCellStyle = ExcelHelper.GetCommonStyle(book);
//给sheet1添加第一行的头部标题
var headerRow = mySheet.CreateRow(0);
var cell0 = headerRow.CreateCell(0); cell0.SetCellValue("序列"); cell0.CellStyle = headerStyle;
mySheet.SetColumnWidth(0, 10 * 256);
var cell1 = headerRow.CreateCell(1); cell1.SetCellValue("表名"); cell1.CellStyle = headerStyle;
mySheet.SetColumnWidth(1, 50 * 256);
var cell2 = headerRow.CreateCell(2); cell2.SetCellValue("描述"); cell2.CellStyle = headerStyle;
mySheet.SetColumnWidth(2, 50 * 256);
//将数据逐步写入sheet1各个行
for (var i = 0; i < listmodel.Count; i++)
{
var rowtemp = mySheet.CreateRow(i + 1);
var rowtemp01 = rowtemp.CreateCell(0);
rowtemp01.SetCellValue(i);
rowtemp01.CellStyle = commonCellStyle;
var rowtemp02 = rowtemp.CreateCell(1);
rowtemp02.SetCellValue(listmodel[i].Name);
rowtemp02.CellStyle = commonCellStyle;
var rowtemp03 = rowtemp.CreateCell(2);
rowtemp03.SetCellValue(listmodel[i].Description);
rowtemp03.CellStyle = commonCellStyle;
}
// 导出excel
string webRootPath = _webHostEnvironment.WebRootPath;
string tpath = "/files/" + DateTime.Now.ToString("yyyy-MM-dd") + "/";
string fileName = DateTime.Now.ToString("yyyyMMddHHmmssfff") + "-数据库表导出.xls";
string filePath = webRootPath + tpath;
DirectoryInfo di = new DirectoryInfo(filePath);
if (!di.Exists)
{
di.Create();
}
FileStream fileHssf = new FileStream(filePath + fileName, FileMode.Create);
book.Write(fileHssf);
fileHssf.Close();
jm.code = 0;
jm.msg = GlobalConstVars.ExcelExportSuccess;
jm.data = tpath + fileName;
return jm;
}
#endregion
#region 生成或者更新数据库
///
/// 创建和更新数据库
///
///
///
///
[HttpPost]
[Description("创建新表")]
public IActionResult CreateAndUpdateDatabase([FromServices] IUnitOfWork work)
{
var jm = new AdminUiCallBack();
try
{
Type[]? types = AssemblyHelper.DbCodeFirstModes("CoreCms.Net.Model",thisAttribute: typeof(SqlCodeFirstAttribute));
work.GetDbClient().CodeFirst.InitTables(types??new Type[] { });
jm.code = 0;
jm.msg = "创建成功";
return new JsonResult(jm);
}
catch (Exception e)
{
jm.msg = e.Message + ":-----" + e.StackTrace;
return new JsonResult(jm);
}
}
#endregion
}
}