ApiPubController.cs 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341
  1. using Attribute;
  2. using Common;
  3. using Dto;
  4. using Vo;
  5. using Enums;
  6. using Filters;
  7. using Infrastructure;
  8. using Infrastructure.Model;
  9. using Mapster;
  10. using Microsoft.AspNetCore.Mvc;
  11. using Middleware;
  12. using Model;
  13. using Services;
  14. using Model.Base;
  15. using Microsoft.AspNetCore.Authorization;
  16. using Model.Customer;
  17. using Base;
  18. using LitJson;
  19. namespace Controllers
  20. {
  21. /// <summary>
  22. /// ApiInfo)Controller
  23. /// </summary>
  24. // [Route("ApiInfo")]
  25. // [ApiExplorerSettings(GroupName = "ApiInfo")]
  26. public class ApiPubController : BaseController
  27. {
  28. private readonly IApiInfoService _ApiInfoService;
  29. private readonly IApiGroupService _ApiGroupService;
  30. private readonly ISysMenuService _SysMenuService;
  31. public ApiPubController(IApiInfoService ApiInfoService, IApiGroupService ApiGroupService, ISysMenuService SysMenuService)
  32. {
  33. _ApiInfoService = ApiInfoService;
  34. _ApiGroupService = ApiGroupService;
  35. _SysMenuService = SysMenuService;
  36. }
  37. #region 通用-接收接口数据通知
  38. [HttpPost]
  39. [Route("/noauth/api/notice")]
  40. public string notice(string value)
  41. {
  42. JsonData data = JsonMapper.ToObject(value);
  43. Dictionary<string, object> obj = new Dictionary<string, object>();
  44. for (int i = 0; i < data.Count; i++)
  45. {
  46. string id = data[i]["id"].ToString();
  47. string groupName = data[i]["group_name"].ToString();
  48. string groupRemark = data[i]["group_remark"].ToString();
  49. int groupKind = int.Parse(data[i]["group_kind"].ToString());
  50. int groupId = 0;
  51. ApiGroup group = _ApiGroupService.GetFirst(m => m.groupName == groupName && m.groupKind == groupKind);
  52. if(group == null)
  53. {
  54. groupId = _ApiGroupService.Add(new ApiGroup()
  55. {
  56. createDate = DateTime.Now,
  57. groupName = groupName,
  58. groupRemark = groupRemark,
  59. groupKind = groupKind,
  60. groupVersion = "1",
  61. });
  62. }
  63. else
  64. {
  65. groupId = group.id;
  66. group.updateDate = DateTime.Now;
  67. group.groupRemark = groupRemark;
  68. int groupVersion = int.Parse(group.groupVersion) + 1;
  69. group.groupVersion = groupVersion.ToString();
  70. _ApiGroupService.Update(group, true);
  71. }
  72. JsonData apiList = data[i]["child"];
  73. for (int j = 0; j < apiList.Count; j++)
  74. {
  75. string ApiRouter = apiList[j]["api_router"].ToString();
  76. string ApiPort = apiList[j]["api_port"].ToString();
  77. string ApiHost = apiList[j]["api_host"].ToString();
  78. string ApiKey = apiList[j]["api_key"].ToString();
  79. string ApiName = apiList[j]["api_name"].ToString();
  80. string ApiMethod = apiList[j]["api_method"].ToString();
  81. ApiInfo apiInfo = _ApiInfoService.GetFirst(m => m.groupId == groupId && m.apiKey == ApiKey);
  82. if(apiInfo == null)
  83. {
  84. _ApiInfoService.Add(new ApiInfo()
  85. {
  86. createDate = DateTime.Now,
  87. apiKey = ApiKey,
  88. apiRouter = ApiRouter,
  89. apiPort = int.Parse(Function.CheckInt(ApiPort)),
  90. apiHost = ApiHost,
  91. apiName = ApiName,
  92. apiMethod = ApiMethod,
  93. groupId = groupId,
  94. });
  95. if(groupKind == 1)
  96. {
  97. string ApiPath = apiList[j]["api_path"].ToString();
  98. string ApiEnName = apiList[j]["api_en_name"].ToString();
  99. string rootPath = ApiPath.Split('/')[1];
  100. SysMenu rootMenu = _SysMenuService.GetFirst(m => m.enName == rootPath) ?? new SysMenu();
  101. if(!_SysMenuService.Any(m => m.enName == ApiEnName))
  102. {
  103. int menuId = _SysMenuService.InsertReturnIdentity(new SysMenu()
  104. {
  105. name = ApiName.Split('-')[0],
  106. enName = ApiEnName,
  107. path = ApiPath,
  108. parentId = rootMenu.menuId,
  109. visible = "1",
  110. keepAlive = "1",
  111. menuType = "0",
  112. CreateBy = "admin",
  113. CreateTime = DateTime.Now,
  114. UpdateBy = "admin",
  115. UpdateTime = DateTime.Now,
  116. });
  117. _SysMenuService.InsertReturnIdentity(new SysMenu()
  118. {
  119. name = "新增",
  120. permission = "add",
  121. parentId = menuId,
  122. visible = "1",
  123. keepAlive = "1",
  124. menuType = "1",
  125. CreateBy = "admin",
  126. CreateTime = DateTime.Now,
  127. UpdateBy = "admin",
  128. UpdateTime = DateTime.Now,
  129. });
  130. _SysMenuService.InsertReturnIdentity(new SysMenu()
  131. {
  132. name = "修改",
  133. permission = "update",
  134. parentId = menuId,
  135. visible = "1",
  136. keepAlive = "1",
  137. menuType = "1",
  138. CreateBy = "admin",
  139. CreateTime = DateTime.Now,
  140. UpdateBy = "admin",
  141. UpdateTime = DateTime.Now,
  142. });
  143. _SysMenuService.InsertReturnIdentity(new SysMenu()
  144. {
  145. name = "删除",
  146. permission = "delete",
  147. parentId = menuId,
  148. visible = "1",
  149. keepAlive = "1",
  150. menuType = "1",
  151. CreateBy = "admin",
  152. CreateTime = DateTime.Now,
  153. UpdateBy = "admin",
  154. UpdateTime = DateTime.Now,
  155. });
  156. }
  157. }
  158. }
  159. else
  160. {
  161. apiInfo.apiRouter = ApiRouter;
  162. apiInfo.apiPort = int.Parse(Function.CheckInt(ApiPort));
  163. apiInfo.apiHost = ApiHost;
  164. apiInfo.apiName = ApiName;
  165. apiInfo.apiMethod = ApiMethod;
  166. _ApiInfoService.Update(apiInfo, true);
  167. }
  168. }
  169. }
  170. return "success";
  171. }
  172. #endregion
  173. #region 通用-获取接口列表
  174. [Route("/noauth/api/list")]
  175. public JsonResult list(string value)
  176. {
  177. if(string.IsNullOrEmpty(value))
  178. {
  179. return Json(new AppResultJson() { Status = "-1", Info = "" });
  180. }
  181. value = DesDecrypt(value);
  182. JsonData data = JsonMapper.ToObject(value);
  183. Dictionary<string, int> groupobj = new Dictionary<string, int>();
  184. Dictionary<string, object> obj = new Dictionary<string, object>();
  185. if(value.Contains("\"groups\""))
  186. {
  187. JsonData groupJson = data["groups"];
  188. for(int i = 0; i < groupJson.Count; i ++)
  189. {
  190. string name = groupJson[i]["name"].ToString();
  191. int version = int.Parse(groupJson[i]["version"].ToString());
  192. groupobj.Add(name, version);
  193. }
  194. }
  195. var groups = _ApiGroupService.GetList(m => m.groupKind == 0);
  196. foreach(var group in groups)
  197. {
  198. int curVersion = int.Parse(Function.CheckInt(group.groupVersion));
  199. if(groupobj.Any(m => m.Key == group.groupName && m.Value < curVersion))
  200. {
  201. Dictionary<string, object> groupData = new Dictionary<string, object>();
  202. var apis = _ApiInfoService.GetList(m => m.groupId == group.id).ToList();
  203. foreach(var api in apis)
  204. {
  205. Dictionary<string, object> apiData = new Dictionary<string, object>();
  206. string url = api.apiHost;
  207. if(api.apiPort != 80 && api.apiPort != 443)
  208. {
  209. url += ":" + api.apiPort;
  210. }
  211. url += api.apiRouter;
  212. apiData.Add("name", api.apiName);
  213. apiData.Add("url", url);
  214. apiData.Add("method", api.apiMethod);
  215. groupData.Add(api.apiKey, apiData);
  216. }
  217. groupData.Add("groupVersion", group.groupVersion);
  218. groupData.Add("groupInfo", group.groupRemark);
  219. obj.Add(group.groupName, groupData);
  220. }
  221. }
  222. return Json(new AppResultJson() { Status = "1", Info = "", Data = obj });
  223. }
  224. #endregion
  225. #region 通用-获取接口列表
  226. [Route("/noauth/api/groups")]
  227. public JsonResult groups(string value)
  228. {
  229. if(string.IsNullOrEmpty(value))
  230. {
  231. return Json(new AppResultJson() { Status = "-1", Info = "" });
  232. }
  233. value = DesDecrypt(value);
  234. JsonData data = JsonMapper.ToObject(value);
  235. string key = data["key"].ToString();
  236. if(key != "tel#2024")
  237. {
  238. return Json(new AppResultJson() { Status = "-1", Info = "无权限" });
  239. }
  240. var groups = _ApiGroupService.GetList(m => m.groupKind == 0).Select(m => m.groupName).ToList();
  241. return Json(new AppResultJson() { Status = "1", Info = "", Data = groups });
  242. }
  243. #endregion
  244. #region 通用-获取接口列表(后台)
  245. [Route("/noauth/api/listforadmin")]
  246. public JsonResult listForAdmin(string value)
  247. {
  248. if(string.IsNullOrEmpty(value))
  249. {
  250. return Json(new AppResultJson() { Status = "-1", Info = "" });
  251. }
  252. value = DesDecrypt(value);
  253. JsonData data = JsonMapper.ToObject(value);
  254. Dictionary<string, int> groupobj = new Dictionary<string, int>();
  255. Dictionary<string, object> obj = new Dictionary<string, object>();
  256. if(value.Contains("\"groups\""))
  257. {
  258. JsonData groupJson = data["groups"];
  259. for(int i = 0; i < groupJson.Count; i ++)
  260. {
  261. string name = groupJson[i]["name"].ToString();
  262. int version = int.Parse(groupJson[i]["version"].ToString());
  263. groupobj.Add(name, version);
  264. }
  265. }
  266. var groups = _ApiGroupService.GetList(m => m.groupKind == 1);
  267. foreach(var group in groups)
  268. {
  269. int curVersion = int.Parse(Function.CheckInt(group.groupVersion));
  270. if(groupobj.Any(m => m.Key == group.groupName && m.Value < curVersion))
  271. {
  272. Dictionary<string, object> groupData = new Dictionary<string, object>();
  273. var apis = _ApiInfoService.GetList(m => m.groupId == group.id).ToList();
  274. foreach(var api in apis)
  275. {
  276. Dictionary<string, object> apiData = new Dictionary<string, object>();
  277. string url = api.apiHost;
  278. if(api.apiPort != 80 && api.apiPort != 443)
  279. {
  280. url += ":" + api.apiPort;
  281. }
  282. url += api.apiRouter;
  283. apiData.Add("name", api.apiName);
  284. apiData.Add("url", url);
  285. apiData.Add("method", api.apiMethod);
  286. groupData.Add(api.apiKey, apiData);
  287. }
  288. groupData.Add("groupVersion", group.groupVersion);
  289. groupData.Add("groupInfo", group.groupRemark);
  290. obj.Add(group.groupName, groupData);
  291. }
  292. }
  293. return Json(new AppResultJson() { Status = "1", Info = "", Data = obj });
  294. }
  295. #endregion
  296. #region 通用-获取接口列表(后台)
  297. [Route("/noauth/api/groupsforadmin")]
  298. public JsonResult groupsForAdmin(string value)
  299. {
  300. if(string.IsNullOrEmpty(value))
  301. {
  302. return Json(new AppResultJson() { Status = "-1", Info = "" });
  303. }
  304. value = DesDecrypt(value);
  305. JsonData data = JsonMapper.ToObject(value);
  306. string key = data["key"].ToString();
  307. if(key != "tel#2024")
  308. {
  309. return Json(new AppResultJson() { Status = "-1", Info = "无权限" });
  310. }
  311. var groups = _ApiGroupService.GetList(m => m.groupKind == 1).Select(m => m.groupName).ToList();
  312. return Json(new AppResultJson() { Status = "1", Info = "", Data = groups });
  313. }
  314. #endregion
  315. #region 获取OSS参数
  316. [Route("/noauth/api/ossparam")]
  317. public JsonResult ossParam(string value)
  318. {
  319. OssConfigs ossConfigs = new();
  320. AppSettings.Bind("OssConfigs", ossConfigs);
  321. Dictionary<string, object> Obj = new Dictionary<string, object>();
  322. Obj.Add("AccessId", ossConfigs.Key);
  323. Obj.Add("AccessKey", ossConfigs.Secret);
  324. return Json(new AppResultJson() { Status = "-1", Info = "", Data = Obj });
  325. }
  326. #endregion
  327. }
  328. }