using DocumentFormat.OpenXml.Office2016.Drawing.ChartDrawing; using IRaCIS.Application.Contracts; using IRaCIS.Core.Application.Service.DTO; using Microsoft.AspNetCore.Builder; using Microsoft.EntityFrameworkCore.Metadata.Internal; using Microsoft.Extensions.Configuration; using NPOI.HPSF; using NPOI.SS.Formula.Functions; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace IRaCIS.Core.Application.Service { public class CodeTemplateService(IRepository _dicRepository,IMapper _mapper, IConfiguration _configuration) : ServiceBase { static string GetCSharpType(Type type) { if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>)) { var underlyingType = Nullable.GetUnderlyingType(type); return $"{GetCSharpType(underlyingType)}?"; } return type switch { _ when type == typeof(int) => "int", _ when type == typeof(long) => "long", _ when type == typeof(short) => "short", _ when type == typeof(byte) => "byte", _ when type == typeof(bool) => "bool", _ when type == typeof(decimal) => "decimal", _ when type == typeof(double) => "double", _ when type == typeof(float) => "float", _ when type == typeof(Guid) => "Guid", _ when type == typeof(DateTime) => "DateTime", _ when type == typeof(string) => "string", _ => type.Name // 非常见类型,返回 .NET 类型名称 }; } /// /// 获取数据库的表信息 以及字段信息 /// /// /// /// public List GetDataBaseTableList(string tableName, string comment) { var contextOptions = new DbContextOptionsBuilder().UseSqlServer(_configuration.GetSection("ConnectionStrings:RemoteNew").Value).Options; using var dbContext = new IRaCISDBContext(contextOptions); var dbModel = dbContext.Model; var list = dbModel.GetEntityTypes().Where(t => t.GetTableName().IsNotNullOrEmpty()) .WhereIf(tableName.IsNotNullOrEmpty(), t => t.GetTableName()!.Contains(tableName)) .WhereIf(comment.IsNotNullOrEmpty(), t => t.GetComment().Contains(comment)) .Select(t => new TemplateTable() { TableName = t.GetTableName()!, TablePropertyList = t.GetProperties().Select(property => new TemplateTableProperty() { PropertyName = property.Name, ColumnName = property.GetColumnName(), IsNullable = property.IsNullable, IsPrimarykey = property.IsKey(), CSharpType = GetCSharpType(property.ClrType), Comment = property.GetComment() ?? string.Empty }).ToList() }).ToList(); return list; } /// /// 根据字典名 code 生成枚举定义 /// /// /// public async Task GenerateEnumDefine(string code) { var searchList = await _dicRepository.Where(t => t.Parent.Code == code && t.ParentId != null && t.IsEnable).ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); // StringBuilder 用于构建枚举代码字符串 var enumCode = new StringBuilder(); // 生成枚举定义 enumCode.AppendLine($"public enum {code}"); enumCode.AppendLine("{"); foreach (var item in searchList) { // 添加 XML 注释作为枚举描述 enumCode.AppendLine($" /// "); enumCode.AppendLine($" /// {item.ValueCN}"); // 假设你有一个描述字段 enumCode.AppendLine($" /// "); // 每个枚举值生成 enumCode.AppendLine($" {item.Value.Trim().Replace(" ", "")} = {item.Code},"); } enumCode.AppendLine("}"); // 返回生成的枚举代码 var enumStr = enumCode.ToString(); return ResponseOutput.Ok(enumStr); } } }