// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。 // // 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。 // // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任! namespace Admin.NET.Core.Service; /// /// 系统代码生成配置服务 🧩 /// [ApiDescriptionSettings(Order = 260, Description = "代码生成配置")] public class SysCodeGenConfigService : IDynamicApiController, ITransient { private readonly ISqlSugarClient _db; public SysCodeGenConfigService(ISqlSugarClient db) { _db = db; } /// /// 获取代码生成配置列表 🔖 /// /// /// [DisplayName("获取代码生成配置列表")] public async Task> GetList([FromQuery] CodeGenConfig input) { return await _db.Queryable() .Where(u => u.CodeGenId == input.CodeGenId) .Select() .Mapper(u => { u.NetType = (u.EffectType == "EnumSelector" || u.EffectType == "ConstSelector" ? u.DictTypeCode : u.NetType); }) .OrderBy(u => new { u.OrderNo, u.Id }) .ToListAsync(); } /// /// 更新代码生成配置 🔖 /// /// /// [ApiDescriptionSettings(Name = "Update"), HttpPost] [DisplayName("更新代码生成配置")] public async Task UpdateCodeGenConfig(List inputList) { if (inputList == null || inputList.Count < 1) return; await _db.Updateable(inputList.Adapt>()) .IgnoreColumns(u => new { u.ColumnLength, u.ColumnName, u.PropertyName }) .ExecuteCommandAsync(); } /// /// 删除代码生成配置 /// /// /// [NonAction] public async Task DeleteCodeGenConfig(long codeGenId) { await _db.Deleteable().Where(u => u.CodeGenId == codeGenId).ExecuteCommandAsync(); } /// /// 获取代码生成配置详情 🔖 /// /// /// [DisplayName("获取代码生成配置详情")] public async Task GetDetail([FromQuery] CodeGenConfig input) { return await _db.Queryable().SingleAsync(u => u.Id == input.Id); } /// /// 批量增加代码生成配置 /// /// /// [NonAction] public void AddList(List tableColumnOutputList, SysCodeGen codeGenerate) { if (tableColumnOutputList == null) return; var codeGenConfigs = new List(); var orderNo = 100; foreach (var tableColumn in tableColumnOutputList) { if (_db.Queryable().Any(u => u.ColumnName == tableColumn.ColumnName && u.CodeGenId == codeGenerate.Id)) continue; var codeGenConfig = new SysCodeGenConfig(); var YesOrNo = YesNoEnum.Y.ToString(); if (Convert.ToBoolean(tableColumn.ColumnKey)) { YesOrNo = YesNoEnum.N.ToString(); } if (CodeGenUtil.IsCommonColumn(tableColumn.PropertyName)) { codeGenConfig.WhetherCommon = YesNoEnum.Y.ToString(); YesOrNo = YesNoEnum.N.ToString(); } else { codeGenConfig.WhetherCommon = YesNoEnum.N.ToString(); } codeGenConfig.CodeGenId = codeGenerate.Id; codeGenConfig.ColumnName = tableColumn.ColumnName; // 字段名 codeGenConfig.PropertyName = tableColumn.PropertyName;// 实体属性名 codeGenConfig.ColumnLength = tableColumn.ColumnLength;// 长度 codeGenConfig.ColumnComment = tableColumn.ColumnComment; codeGenConfig.NetType = tableColumn.NetType; codeGenConfig.WhetherRetract = YesNoEnum.N.ToString(); // 生成代码时,主键并不是必要输入项,故一定要排除主键字段 //codeGenConfig.WhetherRequired = (tableColumn.IsNullable || tableColumn.IsPrimarykey) ? YesNoEnum.N.ToString() : YesNoEnum.Y.ToString(); #region 添加校验规则 //添加校验规则 codeGenConfig.Id = YitIdHelper.NextId(); //验证规则 List ruleItems = new List(); if (!tableColumn.IsNullable && !tableColumn.IsPrimarykey) { ruleItems.Add(new VerifyRuleItem() { Key = codeGenConfig.Id, Type = "required", Message = $"{tableColumn.ColumnComment}不能为空", }); } codeGenConfig.WhetherRequired = ruleItems.Any(t => t.Type == "required") ? YesNoEnum.Y.ToString() : YesNoEnum.N.ToString(); codeGenConfig.Rules = ruleItems.ToJson(); #endregion 添加校验规则 codeGenConfig.QueryWhether = YesNoEnum.N.ToString(); codeGenConfig.WhetherAddUpdate = YesOrNo; codeGenConfig.WhetherTable = YesOrNo; codeGenConfig.ColumnKey = tableColumn.ColumnKey; codeGenConfig.DataType = tableColumn.DataType; codeGenConfig.EffectType = CodeGenUtil.DataTypeToEff(codeGenConfig.NetType); codeGenConfig.QueryType = GetDefaultQueryType(codeGenConfig); // QueryTypeEnum.eq.ToString(); codeGenConfig.OrderNo = orderNo; codeGenConfig.DefaultValue = GetDefaultValue(tableColumn.DefaultValue); codeGenConfigs.Add(codeGenConfig); orderNo += 10; // 每个配置排序间隔10 } // 多库代码生成---这里要切回主库 var provider = _db.AsTenant().GetConnectionScope(SqlSugarConst.MainConfigId); provider.Insertable(codeGenConfigs).ExecuteCommand(); } /// /// 默认查询类型 /// /// /// private static string GetDefaultQueryType(SysCodeGenConfig codeGenConfig) { return (codeGenConfig.NetType?.TrimEnd('?')) switch { "string" => "like", "DateTime" => "~", _ => "==", }; } /// /// 获取默认值 /// /// /// private static string? GetDefaultValue(string dataValue) { if (dataValue == null) return null; string value = ""; // 正则表达式模式 // \( 和 \) 用来匹配字面量的括号 // .+ 用来匹配一个或多个任意字符,但不包括换行符 string pattern = @"\((.+)\)";//适合MSSQL其他数据库没有测试 // 使用 Regex 类进行匹配 Match match = Regex.Match(dataValue, pattern); // 如果找到了匹配项 if (match.Success) { // 提取括号内的值 value = match.Groups[1].Value.Trim('\''); } else { value = dataValue; } return value; } }