// Admin.NET 项目的版æƒã€å•†æ ‡ã€ä¸“利和其他相关æƒåˆ©å‡å—ç›¸åº”æ³•å¾‹æ³•è§„çš„ä¿æŠ¤ã€‚ä½¿ç”¨æœ¬é¡¹ç›®åº”éµå®ˆç›¸å…³æ³•律法规和许å¯è¯çš„è¦æ±‚。 // // 本项目主è¦éµå¾ª MIT 许å¯è¯å’Œ Apache 许å¯è¯ï¼ˆç‰ˆæœ¬ 2.0)进行分å‘和使用。许å¯è¯ä½äºŽæºä»£ç æ ‘æ ¹ç›®å½•ä¸çš„ LICENSE-MIT å’Œ LICENSE-APACHE 文件。 // // ä¸å¾—利用本项目从事å±å®³å›½å®¶å®‰å…¨ã€æ‰°ä¹±ç¤¾ä¼šç§©åºã€ä¾µçŠ¯ä»–äººåˆæ³•æƒç›Šç‰æ³•å¾‹æ³•è§„ç¦æ¢çš„æ´»åЍï¼ä»»ä½•基于本项目二次开å‘è€Œäº§ç”Ÿçš„ä¸€åˆ‡æ³•å¾‹çº çº·å’Œè´£ä»»ï¼Œæˆ‘ä»¬ä¸æ‰¿æ‹…ä»»ä½•è´£ä»»ï¼ namespace Admin.NET.Core.Service; /// <summary> /// APIJSONæœåŠ¡ 🧩 /// </summary> [ApiDescriptionSettings(Order = 100)] public class APIJSONService : IDynamicApiController, ITransient { private readonly ISqlSugarClient _db; private readonly IdentityService _identityService; private readonly TableMapper _tableMapper; private readonly SelectTable _selectTable; public APIJSONService(ISqlSugarClient db, IdentityService identityService, TableMapper tableMapper) { _db = db; _tableMapper = tableMapper; _identityService = identityService; _selectTable = new SelectTable(_identityService, _tableMapper, _db); } /// <summary> /// ç»Ÿä¸€æŸ¥è¯¢å…¥å£ ðŸ”– /// </summary> /// <param name="jobject"></param> /// <remarks>傿•°ï¼š{"[]":{"SYSLOGOP":{}}}</remarks> /// <returns></returns> [HttpPost("get")] [DisplayName("APIJSON统一查询")] public JObject Query([FromBody] JObject jobject) { return _selectTable.Query(jobject); } /// <summary> /// 查询 🔖 /// </summary> /// <param name="table"></param> /// <param name="jobject"></param> /// <returns></returns> [HttpPost("get/{table}")] [DisplayName("APIJSON查询")] public JObject QueryByTable([FromRoute] string table, [FromBody] JObject jobject) { var ht = new JObject { { table + "[]", jobject } }; // è‡ªåŠ¨æ·»åŠ æ€»è®¡æ•°é‡ if (jobject["query"] != null && jobject["query"].ToString() != "0" && jobject["total@"] == null) ht.Add("total@", ""); // æ¯é¡µæœ€å¤§1000æ¡æ•°æ® if (jobject["count"] != null && int.Parse(jobject["count"].ToString()) > 1000) throw Oops.Bah("countåˆ†é¡µæ•°é‡æœ€å¤§ä¸èƒ½è¶…过1000"); jobject.Remove("@debug"); var hasTableKey = false; var ignoreConditions = new List<string> { "page", "count", "query" }; var tableConditions = new JObject(); // 表的其它查询æ¡ä»¶ï¼Œæ¯”如过滤ã€å—æ®µç‰ foreach (var item in jobject) { if (item.Key.Equals(table, StringComparison.CurrentCultureIgnoreCase)) { hasTableKey = true; break; } if (!ignoreConditions.Contains(item.Key.ToLower())) tableConditions.Add(item.Key, item.Value); } foreach (var removeKey in tableConditions) { jobject.Remove(removeKey.Key); } if (!hasTableKey) jobject.Add(table, tableConditions); return Query(ht); } /// <summary> /// 新增 🔖 /// </summary> /// <param name="tables">è¡¨å¯¹è±¡æˆ–æ•°ç»„ï¼Œè‹¥æ²¡æœ‰ä¼ Id则åŽç«¯ç”ŸæˆId</param> /// <returns></returns> [HttpPost("add")] [DisplayName("APIJSON新增")] [UnitOfWork] public JObject Add([FromBody] JObject tables) { var ht = new JObject(); foreach (var table in tables) { var talbeName = table.Key.Trim(); var role = _identityService.GetRole(); if (!role.Insert.Table.Contains(talbeName, StringComparer.CurrentCultureIgnoreCase)) throw Oops.Bah($"没æƒé™æ·»åŠ {talbeName}"); JToken result; // æ‰¹é‡æ’å…¥ if (table.Value is JArray) { var ids = new List<object>(); foreach (var record in table.Value) { var cols = record.ToObject<JObject>(); var id = _selectTable.InsertSingle(talbeName, cols, role); ids.Add(id); } result = JToken.FromObject(new { id = ids, count = ids.Count }); } // 啿¡æ’å…¥ else { var cols = table.Value.ToObject<JObject>(); var id = _selectTable.InsertSingle(talbeName, cols, role); result = JToken.FromObject(new { id }); } ht.Add(talbeName, result); } return ht; } /// <summary> /// æ›´æ–°ï¼ˆåªæ”¯æŒId作为æ¡ä»¶ï¼‰ 🔖 /// </summary> /// <param name="tables">支æŒå¤šè¡¨ã€å¤šIdæ‰¹é‡æ›´æ–°</param> /// <returns></returns> [HttpPost("update")] [DisplayName("APIJSONæ›´æ–°")] [UnitOfWork] public JObject Edit([FromBody] JObject tables) { var ht = new JObject(); foreach (var table in tables) { var tableName = table.Key.Trim(); var role = _identityService.GetRole(); var count = _selectTable.UpdateSingleTable(tableName, table.Value, role); ht.Add(tableName, JToken.FromObject(new { count })); } return ht; } /// <summary> /// åˆ é™¤ï¼ˆæ”¯æŒéžIdæ¡ä»¶ã€æ”¯æŒæ‰¹é‡ï¼‰ 🔖 /// </summary> /// <param name="tables"></param> /// <returns></returns> [HttpPost("delete")] [DisplayName("APIJSONåˆ é™¤")] [UnitOfWork] public JObject Delete([FromBody] JObject tables) { var ht = new JObject(); var role = _identityService.GetRole(); foreach (var table in tables) { var talbeName = table.Key.Trim(); if (role.Delete == null || role.Delete.Table == null) throw Oops.Bah("deleteæƒé™æœªé…ç½®"); if (!role.Delete.Table.Contains(talbeName, StringComparer.CurrentCultureIgnoreCase)) throw Oops.Bah($"没æƒé™åˆ 除{talbeName}"); //if (!value.ContainsKey("id")) // throw Oops.Bah("æœªä¼ ä¸»é”®id"); var value = JObject.Parse(table.Value.ToString()); var sb = new StringBuilder(100); var parameters = new List<SugarParameter>(); foreach (var f in value) { if (f.Value is JArray) { sb.Append($"{f.Key} in (@{f.Key}) and "); var paraArray = FuncList.TransJArrayToSugarPara(f.Value); parameters.Add(new SugarParameter($"@{f.Key}", paraArray)); } else { sb.Append($"{f.Key}=@{f.Key} and "); parameters.Add(new SugarParameter($"@{f.Key}", FuncList.TransJObjectToSugarPara(f.Value))); } } if (!parameters.Any()) throw Oops.Bah("è¯·è¾“å…¥åˆ é™¤æ¡ä»¶"); var whereSql = sb.ToString().TrimEnd(" and "); var count = _db.Deleteable<object>().AS(talbeName).Where(whereSql, parameters).ExecuteCommand(); // æ— å®žä½“åˆ é™¤ value.Add("count", count); // 命䏿•°é‡ ht.Add(talbeName, value); } return ht; } }