CreateDocHtml.cs 51 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025
  1. using DocTools.Entity;
  2. using DocTools.Entity.Doc;
  3. using DocTools.Helper;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. namespace DocTools
  8. {
  9. public class CreateDocHtml
  10. {
  11. private static Dictionary<string, string> PublicEnumDic = new Dictionary<string, string>();
  12. private static string FileName = "demoHtml.html";
  13. /// <summary>
  14. /// 创建最基础json信息
  15. /// </summary>
  16. /// <returns></returns>
  17. public ResultEntity CreateDocProjectString(string version = "", string fileName = "")
  18. {
  19. if (!string.IsNullOrEmpty(fileName))
  20. {
  21. FileName = fileName;
  22. }
  23. var result = new ResultEntity()
  24. {
  25. create_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
  26. id = "216603",
  27. name = "新版杏聆荟RPC接口文档",
  28. project_id = "2116053",
  29. project_name = "新版杏聆荟RPC接口文档" + version,
  30. publisher = "mr_kazuta",
  31. target_id = "2116053",
  32. target_type = "project"
  33. };
  34. var projectEntity = new ProjectEntity();
  35. var envItem = new EnvEntity()
  36. {
  37. env_id = "-1",
  38. list = new NullParameterEntity(),
  39. name = "默认环境"
  40. };
  41. projectEntity.envs.Add(envItem);
  42. var respParam = new ResponseParameterEntity()
  43. {
  44. description = "",
  45. is_checked = 1,
  46. key = "",
  47. type = "Text",
  48. value = ""
  49. };
  50. var varsItem = new VarsEntity()
  51. {
  52. variable = new List<NullParameterEntity>(),
  53. script = new ScriptEntity(),
  54. methods = new List<string>() { "POST", "GET", "PUT", "PATCH", "DELETE", "COPY", "HEAD", "OPTIONS", "LINK", "UNLINK", "PURGE", "LOCK", "UNLOCK", "PROPFIND", "VIEW" },
  55. mark = new List<MarkEntity>() {
  56. new MarkEntity() { key = "developing", name = "开发中" },
  57. new MarkEntity() { key = "complated", name = "已完成" },
  58. new MarkEntity() { key = "modifying", name = "需修改" },
  59. },
  60. request = new VarsRequestEntity()
  61. {
  62. body = new List<ResponseParameterEntity>() { respParam },
  63. cookie = new List<ResponseParameterEntity>() { respParam },
  64. header = new List<ResponseParameterEntity>() { respParam },
  65. query = new List<ResponseParameterEntity>() { respParam },
  66. }
  67. };
  68. projectEntity.vars = varsItem;
  69. result.project = projectEntity;
  70. result.targets = GetTargetsFolderString();
  71. return result;
  72. }
  73. /// <summary>
  74. /// 创建文件夹
  75. /// </summary>
  76. /// <returns></returns>
  77. public List<FolderChildrenEntity> GetTargetsFolderString()
  78. {
  79. var resultList = new List<FolderChildrenEntity>();
  80. List<APIModuleEntity> apiModuleList = LoadData.PackageInterfaceMemberInfo() ?? new List<APIModuleEntity>();
  81. for (int i = 0; i < apiModuleList.Count; i++)
  82. {
  83. var customerAPI = new FolderChildrenEntity();
  84. customerAPI.is_doc = "0";
  85. customerAPI.local_parent_id = "0";
  86. customerAPI.local_target_id = Guid.NewGuid().ToString();
  87. customerAPI.mark = "complated";
  88. customerAPI.method = "POST";
  89. customerAPI.name = apiModuleList[i].Example;
  90. customerAPI.script = new ScriptEntity();
  91. customerAPI.sort = 7 + i;
  92. customerAPI.status = 1;
  93. customerAPI.target_id = CommonHelper.GetSpecicalTargetIndex();
  94. customerAPI.target_type = "folder";
  95. customerAPI.update_dtime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  96. customerAPI.request = new FoldRequestEntity()
  97. {
  98. body = new List<NullParameterEntity>(),
  99. header = new List<NullParameterEntity>(),
  100. query = new List<NullParameterEntity>(),
  101. //description = "新版杏聆荟RPC接口文档"
  102. description = null
  103. };
  104. customerAPI.children = GetCustomerChildrenList(customerAPI, apiModuleList[i]);
  105. resultList.Add(customerAPI);
  106. }
  107. return resultList;
  108. }
  109. private string CreateFolderHtml(Dictionary<string, string> dic,string apiName)
  110. {
  111. string allHtml = "";
  112. if (dic?.Count > 0)
  113. {
  114. allHtml = "<div style=\"overflow: hidden;height: 100%;\" class=\"preview-markdown\"><h3 class=\"title\"><a href=\"javascript:;\" class=\"maodian\"></a>" + apiName + "下属服务<i class=\"fa fa-angle-down\"></i></h3>";
  115. var tableHtml = "<table><tbody><tr><th>服务名</th><th>查看详情</th></tr>";
  116. foreach (var key in dic.Keys)
  117. {
  118. tableHtml += "<tr><td>" + key + "</td><td><a target=\"_blank\" style=\"text-decoration: underline;color: blue;\" href=\"/" + FileName + "#" + dic[key] + "\">详情</a></td></tr>";
  119. }
  120. tableHtml += "</tbody></table>";
  121. allHtml += tableHtml + "</div>";
  122. }
  123. return allHtml;
  124. }
  125. /// <summary>
  126. /// 客户端api接口
  127. /// </summary>
  128. /// <returns></returns>
  129. public List<object> GetCustomerChildrenList(FolderChildrenEntity customerAPI, APIModuleEntity apiModuleEntity)
  130. {
  131. var dic = new Dictionary<string, string>();
  132. var list = new List<object>();
  133. if (apiModuleEntity.IsShowEnumFolder)
  134. {
  135. var dicEnum = new Dictionary<string, string>();
  136. FolderChildrenEntity enumFolderEntity = new FolderChildrenEntity();
  137. enumFolderEntity.is_doc = "0";
  138. enumFolderEntity.local_parent_id = customerAPI.local_target_id;
  139. enumFolderEntity.local_target_id = Guid.NewGuid().ToString();
  140. enumFolderEntity.mark = "complated";
  141. enumFolderEntity.method = "POST";
  142. enumFolderEntity.name = "枚举代码";
  143. enumFolderEntity.sort = 17;
  144. enumFolderEntity.status = 1;
  145. enumFolderEntity.target_id = CommonHelper.GetSpecicalTargetIndex();
  146. enumFolderEntity.target_type = "folder";
  147. enumFolderEntity.update_dtime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  148. enumFolderEntity.script = new ScriptEntity();
  149. enumFolderEntity.request = new FoldRequestEntity();
  150. List<MemberEntity> memberList = LoadData.GetInterfaceConfigToCache();
  151. var enumList = memberList.FindAll(c => c.ParamName.Contains("T:WingInterfaceLibrary.Enum.") && !string.IsNullOrEmpty(c.Remarks));
  152. for (int i = 0; i < enumList.Count; i++)
  153. {
  154. var item = enumList[i];
  155. if (item.ParamName.Contains("WingInterfaceLibrary.Enum.RpcExceptionEnum."))
  156. {
  157. continue;
  158. }
  159. var enumEntity = GetSpecialEnum(item.ParamName.Replace("T:", ""), enumFolderEntity.local_target_id, item.Remarks, i);
  160. enumFolderEntity.children.Add(enumEntity);
  161. dicEnum.Add(enumEntity.name, enumEntity.local_target_id);
  162. }
  163. enumFolderEntity.tableHtml = CreateFolderHtml(dicEnum, enumFolderEntity.name);
  164. list.Add(enumFolderEntity);
  165. dic.Add(enumFolderEntity.name, enumFolderEntity.local_target_id);
  166. }
  167. //定义api下属文件夹
  168. //这里可以是多个文件夹
  169. List<InterfaceInfoEntity> interfaceList = apiModuleEntity.MainModelList;
  170. for (int i = 0; i < interfaceList.Count; i++)
  171. {
  172. var interfaceItem = interfaceList[i];
  173. FolderChildrenEntity folderEntity = new FolderChildrenEntity();
  174. folderEntity.is_doc = "0";
  175. folderEntity.local_parent_id = customerAPI.local_target_id;
  176. folderEntity.local_target_id = Guid.NewGuid().ToString();
  177. folderEntity.mark = "complated";
  178. folderEntity.method = "POST";
  179. folderEntity.name = interfaceItem.Value;
  180. folderEntity.sort = i + 1 + customerAPI.sort;
  181. folderEntity.status = 1;
  182. folderEntity.target_id = CommonHelper.GetSpecicalTargetIndex();
  183. folderEntity.target_type = "folder";
  184. folderEntity.update_dtime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  185. folderEntity.script = new ScriptEntity();
  186. folderEntity.request = new FoldRequestEntity();
  187. folderEntity.children = GetInterfaceChildrenList(folderEntity, interfaceItem.Url, interfaceItem.InterfaceList);
  188. list.Add(folderEntity);
  189. dic.Add(folderEntity.name, folderEntity.local_target_id);
  190. }
  191. customerAPI.tableHtml = CreateFolderHtml(dic, customerAPI.name);
  192. return list;
  193. }
  194. /// <summary>
  195. /// 获取分类下的接口
  196. /// </summary>
  197. /// <returns></returns>
  198. public List<object> GetInterfaceChildrenList(FolderChildrenEntity folderEntity, string url, List<InterfaceBasicInfoEntity> interfaceList)
  199. {
  200. var dicInterface = new Dictionary<string, string>();
  201. var exclusiveList = new List<string>() { "IClientLogService", "IEmailService", "ISMSService" };
  202. List<object> resultList = new List<object>();
  203. for (int i = 0; i < interfaceList.Count; i++)
  204. {
  205. var dicMethod = new Dictionary<string, string>();
  206. var interfaceEntity = interfaceList[i];
  207. if (exclusiveList.Contains(interfaceEntity.InterfaceName))
  208. {
  209. continue;
  210. }
  211. FolderChildrenEntity folderChildEntity = new FolderChildrenEntity();
  212. folderChildEntity.index = 4;
  213. folderChildEntity.is_doc = "0";
  214. folderChildEntity.local_parent_id = folderEntity.local_target_id;
  215. folderChildEntity.local_target_id = Guid.NewGuid().ToString();
  216. folderChildEntity.mark = "complated";
  217. folderChildEntity.method = "POST";
  218. folderChildEntity.name = interfaceEntity.InterfaceSummary;
  219. folderChildEntity.sort = Convert.ToInt32(folderEntity.sort.ToString() + i);
  220. folderChildEntity.status = 1;
  221. folderChildEntity.target_id = CommonHelper.GetSpecicalTargetIndex();
  222. folderChildEntity.target_type = "folder";
  223. folderChildEntity.update_dtime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  224. folderChildEntity.script = new ScriptEntity();
  225. folderChildEntity.request = new FoldRequestEntity();
  226. folderChildEntity.children = new List<object>();
  227. for (int j = 0; j < interfaceEntity.MethodList.Count; j++)
  228. {
  229. var methodEntity = interfaceEntity.MethodList[j];
  230. ChildrenEntity childEntity = new ChildrenEntity();
  231. childEntity.is_doc = "0";
  232. childEntity.index = 5;
  233. childEntity.local_parent_id = folderChildEntity.local_target_id;
  234. childEntity.local_target_id = Guid.NewGuid().ToString();
  235. childEntity.mark = "complated";
  236. childEntity.method = methodEntity.SubmitType;
  237. childEntity.name = methodEntity.Summary;
  238. childEntity.sort = Convert.ToInt32(folderChildEntity.sort.ToString() + j);
  239. childEntity.status = 1;
  240. childEntity.target_id = CommonHelper.GetSpecicalTargetIndex();
  241. childEntity.target_type = "api";
  242. childEntity.update_dtime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  243. if (methodEntity.SubmitType == "PUT")
  244. {
  245. var responseEntity = new ResponseEntity()
  246. {
  247. error = new ResponseResultEntity()
  248. {
  249. raw = "{\n\t\"IsSuccess\": \"False\", //是否成功: True - 表示成功,False - 表示失败\n\t\"Msg\": \"\" //错误信息内容\n}",
  250. parameter = new List<ResponseParameterEntity>()
  251. {
  252. new ResponseParameterEntity()
  253. {
  254. description = "是否成功: True-表示成功,False-表示失败",
  255. is_checked = 1,
  256. key = "IsSuccess",
  257. type = "Text",
  258. field_type = "Boolean",
  259. value = "False"
  260. },
  261. new ResponseParameterEntity()
  262. {
  263. description= "错误信息内容",
  264. is_checked = 1,
  265. key = "Msg",
  266. type = "Text",
  267. field_type = "String",
  268. value = "Upload Fail"
  269. }
  270. }
  271. },
  272. success = new ResponseResultEntity()
  273. {
  274. raw = "{\n\t\"IsSuccess\": \"True\", //是否成功: True-表示成功,False-表示失败\n\t\"Msg\": \"\" //错误信息,如果成功,则为空\n}",
  275. parameter = new List<ResponseParameterEntity>()
  276. {
  277. new ResponseParameterEntity()
  278. {
  279. description = "是否成功: True-表示成功,False-表示失败",
  280. is_checked = 1,
  281. key = "IsSuccess",
  282. type = "Text",
  283. field_type = "Boolean",
  284. value = "True"
  285. },
  286. new ResponseParameterEntity()
  287. {
  288. description= "错误信息,如果成功,则为空",
  289. is_checked = 1,
  290. key = "Msg",
  291. type = "Text",
  292. field_type = "String",
  293. value = ""
  294. }
  295. }
  296. }
  297. };
  298. var fileInfo = methodEntity.RequestList?.FirstOrDefault()?.ParamPropertyList?.Find(c => c.Name == "File") ?? new ParamPropertyEntity();
  299. var dafultFieldType = CommonHelper.GetJsonDataTypeByString(fileInfo.TypeFullName);
  300. var requestBodyEntity = new RequestBodyEntity()
  301. {
  302. mode = "form-data",
  303. parameter = new List<ResponseParameterEntity>()
  304. {
  305. new ResponseParameterEntity()
  306. {
  307. description = fileInfo.Desc,
  308. is_checked = 1,
  309. key = fileInfo.Name,
  310. type = dafultFieldType,
  311. not_null = "1",
  312. field_type = dafultFieldType,
  313. value = fileInfo.DefaultValue
  314. }
  315. },
  316. raw = "",
  317. raw_para = new List<ResponseParameterEntity>()
  318. };
  319. var headerParameterRequest = new List<object>();
  320. var headerParamList = methodEntity.RequestList?.FirstOrDefault()?.ParamPropertyList?.FindAll(c => c.Name != "File") ?? new List<ParamPropertyEntity>();
  321. if (headerParamList?.Count > 0)
  322. {
  323. foreach (var headerItem in headerParamList)
  324. {
  325. headerParameterRequest.Add(new ResponseParameterEntity()
  326. {
  327. description = headerItem.Desc,
  328. is_checked = 1,
  329. key = headerItem.Name,
  330. type = "Text",
  331. not_null = "1",
  332. field_type = headerItem.TypeFullName,
  333. value = headerItem.DefaultValue
  334. });
  335. }
  336. }
  337. var headerRequest = new
  338. {
  339. parameter = headerParameterRequest
  340. };
  341. childEntity.request = new RequestEntity()
  342. {
  343. url = url + (interfaceEntity.InterfaceName.Contains("Storage") ? "Storage" : interfaceEntity.InterfaceName),
  344. resful = new RequestParameterEntity(),
  345. query = new RequestParameterEntity(),
  346. header = headerRequest,
  347. Event = new ScriptEntity(),
  348. description = "",
  349. cookie = new RequestParameterEntity(),
  350. body = requestBodyEntity
  351. };
  352. childEntity.response = responseEntity;
  353. }
  354. else
  355. {
  356. var errorParameter = new ResponseResultEntity()
  357. {
  358. raw = "{\n\t\"jsonrpc\": \"2.0\", //rpc版本\n\t\"id\": 1, //结果Id\n\t\"error\": {\n\t\t\"code\": 1002, //错误码\n\t\t\"message\": \"Permission validation error\" //错误信息\n\t}\n}",
  359. parameter = new List<ResponseParameterEntity>()
  360. {
  361. new ResponseParameterEntity()
  362. {
  363. description = "rpc版本",
  364. is_checked = 1,
  365. key = "jsonrpc",
  366. type = "Text",
  367. field_type = "Number",
  368. value = "2.0"
  369. },
  370. new ResponseParameterEntity()
  371. {
  372. description = "结果Id",
  373. is_checked = 1,
  374. key = "id",
  375. type = "Text",
  376. field_type = "Number",
  377. value = "1"
  378. },
  379. new ResponseParameterEntity()
  380. {
  381. description = "错误响应",
  382. is_checked = 1,
  383. key = "error",
  384. type = "Text",
  385. field_type = "Object",
  386. value = ""
  387. },
  388. new ResponseParameterEntity()
  389. {
  390. description = "错误码",
  391. is_checked = 1,
  392. key = "error.code",
  393. type = "Text",
  394. field_type = "Number",
  395. value = "1002"
  396. },
  397. new ResponseParameterEntity()
  398. {
  399. description = "错误信息",
  400. is_checked = 1,
  401. key = "error.message",
  402. type = "Text",
  403. field_type = "String",
  404. value = "Permission validation error"
  405. }
  406. }
  407. };
  408. var successParameter = new ResponseResultEntity()
  409. {
  410. parameter = new List<ResponseParameterEntity>()
  411. {
  412. new ResponseParameterEntity()
  413. {
  414. description = "rpc版本",
  415. is_checked = 1,
  416. key = "jsonrpc",
  417. type = "Text",
  418. field_type = "Number",
  419. value = "2.0"
  420. },
  421. new ResponseParameterEntity()
  422. {
  423. description = "结果Id",
  424. is_checked = 1,
  425. key = "id",
  426. type = "Text",
  427. field_type = "Number",
  428. value = "1"
  429. }
  430. },
  431. error_result = new List<ExceptionResultEntity>()
  432. };
  433. //计算响应列表枚举
  434. if (methodEntity.ParaList?.Count > 0)
  435. {
  436. foreach (var item in methodEntity.ParaList)
  437. {
  438. var gere = GetExceptionResultEnum(item);
  439. successParameter.error_result.Add(gere);
  440. }
  441. }
  442. var rawResultStr = "";
  443. if (methodEntity.ResponseList?.Count > 0)
  444. {
  445. var returnTypeStr = CommonHelper.GetJsonDataTypeByString(methodEntity.ResponseList.FirstOrDefault().TypeFullName);
  446. var resultObject = new ResponseParameterEntity()
  447. {
  448. description = "结果集",
  449. is_checked = 1,
  450. key = "result",
  451. type = "Text",
  452. field_type = returnTypeStr,
  453. value = ((returnTypeStr != "Object" && returnTypeStr != "Array") ? methodEntity.ResponseList.FirstOrDefault().DefaultValue : "")
  454. };
  455. successParameter.parameter.Add(resultObject);
  456. var rList = GetChildParameterEntity(returnTypeStr, methodEntity.ResponseList, "result");
  457. if (rList?.Count > 0)
  458. {
  459. rawResultStr += returnTypeStr == "Array" ? "[" : "";
  460. successParameter.parameter.AddRange(rList);
  461. rawResultStr += "{";
  462. rawResultStr += DealWithString(GetChildParameterString(returnTypeStr, methodEntity.ResponseList));
  463. //foreach (var rItem in rList)
  464. //{
  465. // rawResultStr += "\n\t\t\""+ rItem.key.Replace("result[0].","").Replace("result.", "") + "\": \""+ rItem.value + "\",";
  466. //}
  467. rawResultStr = rawResultStr.TrimEnd(',');
  468. rawResultStr += "\n\t}";
  469. rawResultStr += returnTypeStr == "Array" ? "]" : "";
  470. }
  471. else
  472. {
  473. rawResultStr = methodEntity.ResponseList.FirstOrDefault().DefaultValue;
  474. }
  475. successParameter.raw = "{\n\t\"jsonrpc\": \"2.0\", //rpc版本\n\t\"id\": 1, //结果Id\n\t\"result\": " + rawResultStr + "\n}";
  476. }
  477. else
  478. {
  479. rawResultStr = methodEntity.Returns;
  480. successParameter.raw = "{\n\t\"jsonrpc\": \"2.0\", //rpc版本\n\t\"id\": 1, //结果Id\n\t\"result\": " + rawResultStr + "\n}";
  481. }
  482. childEntity.response = new ResponseEntity()
  483. {
  484. error = errorParameter,
  485. success = successParameter
  486. };
  487. string rawStr = "";
  488. var requestRawPara = new List<ResponseParameterEntity>()
  489. {
  490. new ResponseParameterEntity()
  491. {
  492. description = "rpc版本",
  493. is_checked = 1,
  494. key = "jsonrpc",
  495. not_null = "1",
  496. type = "Text",
  497. field_type = "Number",
  498. value = "2.0"
  499. },
  500. new ResponseParameterEntity()
  501. {
  502. description = "结果Id",
  503. is_checked = 1,
  504. key = "id",
  505. not_null = "1",
  506. type = "Text",
  507. field_type = "Number",
  508. value = "1"
  509. },
  510. new ResponseParameterEntity()
  511. {
  512. description = "rpc接口名",
  513. is_checked = 1,
  514. key = "method",
  515. not_null = "1",
  516. type = "Text",
  517. field_type = "String",
  518. value = methodEntity.MethodName
  519. }
  520. };
  521. var paramTypeStr = CommonHelper.GetJsonDataTypeByString(methodEntity.ParamTypeFullName);
  522. var paramObject = new ResponseParameterEntity()
  523. {
  524. description = methodEntity.RequestList.FirstOrDefault().Desc,
  525. is_checked = 1,
  526. key = "params",
  527. not_null = "1",
  528. type = "Text",
  529. field_type = "Array",
  530. value = ""//methodEntity.ParamText
  531. };
  532. requestRawPara.Add(paramObject);
  533. if (methodEntity.RequestList?.Count > 0)
  534. {
  535. var rList = GetChildParameterEntity(paramTypeStr, methodEntity.RequestList, "params");
  536. var rawRequestParamStr = "";
  537. if (rList?.Count > 0)
  538. {
  539. requestRawPara.AddRange(rList);
  540. rawRequestParamStr += "{";
  541. rawRequestParamStr += DealWithString(GetChildParameterString(paramTypeStr, methodEntity.RequestList));
  542. //foreach (var rItem in rList)
  543. //{
  544. // rawRequestParamStr += "\n\t\t\"" + rItem.key.Replace("params[0].", "") + "\": \"" + rItem.value + "\",";
  545. //}
  546. rawRequestParamStr = rawRequestParamStr.TrimEnd(',');
  547. rawRequestParamStr += "\n\t}";
  548. }
  549. rawStr = "{\n\t\"jsonrpc\": \"2.0\", //rpc版本\n\t\"method\": \"" + methodEntity.MethodName + "\", //rpc接口名\n\t\"params\": [" + rawRequestParamStr + "],\n\t\"id\": 1 //结果Id\n}";
  550. }
  551. else
  552. {
  553. rawStr = "{\n\t\"jsonrpc\": \"2.0\", //rpc版本\n\t\"method\": \"" + methodEntity.MethodName + "\", //rpc接口名\n\t\"params\": [],\n\t\"id\": 1 //结果Id\n}";
  554. }
  555. var requestBodyEntity = new RequestBodyEntity()
  556. {
  557. mode = "json",
  558. parameter = new List<ResponseParameterEntity>(),
  559. raw = rawStr,
  560. raw_para = requestRawPara
  561. };
  562. childEntity.request = new RequestEntity()
  563. {
  564. url = url + interfaceEntity.InterfaceName,
  565. resful = new RequestParameterEntity(),
  566. query = new RequestParameterEntity(),
  567. header = new RequestParameterEntity(),
  568. Event = new ScriptEntity(),
  569. description = "",
  570. cookie = new RequestParameterEntity(),
  571. body = requestBodyEntity
  572. };
  573. }
  574. folderChildEntity.children.Add(childEntity);
  575. dicMethod.Add(childEntity.name, childEntity.local_target_id);
  576. }
  577. folderChildEntity.tableHtml = CreateFolderHtml(dicMethod, folderChildEntity.name);
  578. resultList.Add(folderChildEntity);
  579. dicInterface.Add(folderChildEntity.name, folderChildEntity.local_target_id);
  580. }
  581. folderEntity.tableHtml = CreateFolderHtml(dicInterface, folderEntity.name);
  582. return resultList;
  583. }
  584. private string DealWithString(string resultStr)
  585. {
  586. if (string.IsNullOrEmpty(resultStr))
  587. {
  588. return "";
  589. }
  590. string newStr = "";
  591. int lastIndex = resultStr.LastIndexOf(',');
  592. var lastStr = resultStr.Substring(lastIndex);
  593. if (!lastStr.Contains("\n"))
  594. {
  595. newStr = resultStr.Substring(0, lastIndex) + resultStr.Substring(lastIndex + 1);
  596. }
  597. return newStr;
  598. }
  599. public List<ResponseParameterEntity> GetChildParameterEntity(string returnTypeStr, List<ParamPropertyEntity> responseList, string typeStr, int level = 2)
  600. {
  601. List<ResponseParameterEntity> resultList = new List<ResponseParameterEntity>();
  602. if (returnTypeStr == "Object")
  603. {
  604. var res = responseList.FirstOrDefault();
  605. if (res.ParamPropertyList?.Count > 0)
  606. {
  607. foreach (var responseItem in res.ParamPropertyList)
  608. {
  609. var childTypeStr = CommonHelper.GetJsonDataTypeByString(responseItem.TypeFullName);
  610. var generalTypeStr = CommonHelper.GetJsonDataTypeByString(responseItem.GenericityType);
  611. var childObject = new ResponseParameterEntity()
  612. {
  613. file_name = FileName,
  614. description = responseItem.Desc,
  615. is_checked = 0,
  616. type = "Text",
  617. field_type = childTypeStr,
  618. value = responseItem.DefaultValue
  619. };
  620. //if (childTypeStr.Contains("Enum"))
  621. //{
  622. // childObject.field_type = "<a href=\"#"+ childTypeStr + "\">" + childObject.field_type + "</a>";
  623. //}
  624. if (childTypeStr.Contains("Enum"))
  625. {
  626. //var key = "WingInterfaceLibrary.Enum." + childTypeStr;
  627. var key = childTypeStr;
  628. if (PublicEnumDic.Keys.Contains(key))
  629. {
  630. childObject.field_type_value = 1;
  631. childObject.field_type_target_id = PublicEnumDic[key];
  632. }
  633. var arr = childTypeStr.Split('.');
  634. childObject.field_type = arr[arr.Length - 1];
  635. }
  636. if (childTypeStr == "Array" && generalTypeStr != "Object")
  637. {
  638. childObject.value = "[" + responseItem.DefaultValue + "]";
  639. }
  640. childObject.key = typeStr + "." + responseItem.Name;
  641. if (typeStr == "params")
  642. {
  643. childObject.key = typeStr + "[0]." + responseItem.Name;
  644. }
  645. if (typeStr != "result")
  646. {
  647. childObject.not_null = responseItem.IsNotNull;
  648. }
  649. resultList.Add(childObject);
  650. if (responseItem.ParamPropertyList?.Count > 0)
  651. {
  652. var childList = GetChildParameterEntity(childTypeStr, responseItem.ParamPropertyList, childObject.key, 1);
  653. resultList.AddRange(childList);
  654. }
  655. }
  656. }
  657. }
  658. else if (returnTypeStr == "Array")
  659. {
  660. ParamPropertyEntity res = null;
  661. if (level == 2)
  662. {
  663. res = responseList.FirstOrDefault()?.ParamPropertyList?.FirstOrDefault();
  664. }
  665. else
  666. {
  667. res = responseList.FirstOrDefault();
  668. }
  669. if (res?.ParamPropertyList?.Count > 0)
  670. {
  671. foreach (var responseItem in res.ParamPropertyList)
  672. {
  673. var childTypeStr = CommonHelper.GetJsonDataTypeByString(responseItem.TypeFullName);
  674. var generalTypeStr = CommonHelper.GetJsonDataTypeByString(responseItem.GenericityType);
  675. var childObject = new ResponseParameterEntity()
  676. {
  677. file_name = FileName,
  678. description = responseItem.Desc,
  679. is_checked = 0,
  680. type = "Text",
  681. field_type = childTypeStr,
  682. value = responseItem.DefaultValue
  683. };
  684. //if (childTypeStr.Contains("Enum"))
  685. //{
  686. // childObject.field_type = "<a href=\"#" + childTypeStr + "\">" + childObject.field_type + "</a>";
  687. //}
  688. if (childTypeStr.Contains("Enum"))
  689. {
  690. //var key = "WingInterfaceLibrary.Enum." + childTypeStr;
  691. var key = childTypeStr;
  692. if (PublicEnumDic.Keys.Contains(key))
  693. {
  694. childObject.field_type_value = 1;
  695. childObject.field_type_target_id = PublicEnumDic[key];
  696. }
  697. var arr = childTypeStr.Split('.');
  698. childObject.field_type = arr[arr.Length - 1];
  699. }
  700. if (childTypeStr == "Array" && generalTypeStr != "Object")
  701. {
  702. childObject.value = "[" + responseItem.DefaultValue + "]";
  703. }
  704. childObject.key = typeStr + "[0]." + responseItem.Name;
  705. if (typeStr != "result")
  706. {
  707. childObject.not_null = responseItem.IsNotNull;
  708. }
  709. resultList.Add(childObject);
  710. if (responseItem.ParamPropertyList?.Count > 0)
  711. {
  712. var childList = GetChildParameterEntity(childTypeStr, responseItem.ParamPropertyList, childObject.key, 1);
  713. resultList.AddRange(childList);
  714. }
  715. }
  716. }
  717. }
  718. else
  719. {
  720. }
  721. return resultList;
  722. }
  723. /// <summary>
  724. /// 拼接显示的字符串
  725. /// </summary>
  726. /// <param name="returnTypeStr">返回类型</param>
  727. /// <param name="responseList">响应列表</param>
  728. /// <param name="level">数据层级</param>
  729. /// <param name="retract">缩进大小</param>
  730. /// <returns></returns>
  731. public string GetChildParameterString(string returnTypeStr, List<ParamPropertyEntity> responseList, int level = 2, int retract = 0)
  732. {
  733. List<string> typeList = new List<string>() { "Boolean", "Double", "Float", "Number", "Integer" };
  734. string resultStr = "";
  735. string retractStr = "";
  736. for (int i = 0; i < (retract + 1); i++)
  737. {
  738. if (i == 0)
  739. {
  740. retractStr += "\t\t";
  741. }
  742. else
  743. {
  744. retractStr += "\t";
  745. }
  746. }
  747. if (returnTypeStr == "Object")
  748. {
  749. var res = responseList.FirstOrDefault();
  750. if (res.ParamPropertyList?.Count > 0)
  751. {
  752. foreach (var responseItem in res.ParamPropertyList)
  753. {
  754. var childTypeStr = CommonHelper.GetJsonDataTypeByString(responseItem.TypeFullName);
  755. var generalTypeStr = CommonHelper.GetJsonDataTypeByString(responseItem.GenericityType);
  756. if (childTypeStr == "Object")
  757. {
  758. retract++;
  759. resultStr += "\n" + retractStr + "\"" + responseItem.Name + "\":{";
  760. }
  761. else if (childTypeStr == "Array")
  762. {
  763. retract++;
  764. if (generalTypeStr == "Object")
  765. {
  766. resultStr += "\n" + retractStr + "\"" + responseItem.Name + "\":[{";
  767. }
  768. else if (generalTypeStr == "Array")
  769. {
  770. resultStr += "\n" + retractStr + "\"" + responseItem.Name + "\":[[{";
  771. }
  772. else
  773. {
  774. resultStr += "\n" + retractStr + "\"" + responseItem.Name + "\":[" + responseItem.DefaultValue + " //" + responseItem.Desc;
  775. }
  776. }
  777. else
  778. {
  779. if (typeList.Contains(childTypeStr) || childTypeStr.Contains("Enum"))
  780. {
  781. resultStr += "\n" + retractStr + "\"" + responseItem.Name + "\": " + responseItem.DefaultValue + ", //" + responseItem.Desc;
  782. }
  783. else
  784. {
  785. resultStr += "\n" + retractStr + "\"" + responseItem.Name + "\": \"" + responseItem.DefaultValue + "\", //" + responseItem.Desc;
  786. }
  787. }
  788. if (responseItem.ParamPropertyList?.Count > 0)
  789. {
  790. var childStr = DealWithString(GetChildParameterString(childTypeStr, responseItem.ParamPropertyList, 1, retract));
  791. resultStr += childStr;
  792. }
  793. if (childTypeStr == "Object")
  794. {
  795. resultStr += "\n" + retractStr + "},";
  796. }
  797. else if (childTypeStr == "Array")
  798. {
  799. if (generalTypeStr == "Object")
  800. {
  801. resultStr += "\n" + retractStr + "}],";
  802. }
  803. else if (generalTypeStr == "Array")
  804. {
  805. resultStr += "\n" + retractStr + "}]],";
  806. }
  807. else
  808. {
  809. resultStr += "],";
  810. }
  811. }
  812. else
  813. {
  814. }
  815. }
  816. }
  817. }
  818. else if (returnTypeStr == "Array")
  819. {
  820. ParamPropertyEntity res = null;
  821. if (level == 2)
  822. {
  823. res = responseList.FirstOrDefault()?.ParamPropertyList?.FirstOrDefault();
  824. }
  825. else
  826. {
  827. res = responseList.FirstOrDefault();
  828. }
  829. if (res?.ParamPropertyList?.Count > 0)
  830. {
  831. foreach (var responseItem in res.ParamPropertyList)
  832. {
  833. var childTypeStr = CommonHelper.GetJsonDataTypeByString(responseItem.TypeFullName);
  834. var generalTypeStr = CommonHelper.GetJsonDataTypeByString(responseItem.GenericityType);
  835. if (childTypeStr == "Object")
  836. {
  837. retract++;
  838. resultStr += "\n" + retractStr + "\"" + responseItem.Name + "\":{";
  839. }
  840. else if (childTypeStr == "Array")
  841. {
  842. retract++;
  843. if (generalTypeStr == "Object")
  844. {
  845. resultStr += "\n" + retractStr + "\"" + responseItem.Name + "\":[{";
  846. }
  847. else if (generalTypeStr == "Array")
  848. {
  849. resultStr += "\n" + retractStr + "\"" + responseItem.Name + "\":[[{";
  850. }
  851. else
  852. {
  853. resultStr += "\n" + retractStr + "\"" + responseItem.Name + "\":[" + responseItem.DefaultValue + " //" + responseItem.Desc;
  854. }
  855. }
  856. else
  857. {
  858. if (typeList.Contains(childTypeStr) || childTypeStr.Contains("Enum"))
  859. {
  860. resultStr += "\n" + retractStr + "\"" + responseItem.Name + "\": " + responseItem.DefaultValue + ", //" + responseItem.Desc;
  861. }
  862. else
  863. {
  864. resultStr += "\n" + retractStr + "\"" + responseItem.Name + "\": \"" + responseItem.DefaultValue + "\", //" + responseItem.Desc;
  865. }
  866. }
  867. if (responseItem.ParamPropertyList?.Count > 0)
  868. {
  869. var childStr = DealWithString(GetChildParameterString(childTypeStr, responseItem.ParamPropertyList, 1, retract));
  870. resultStr += childStr;
  871. }
  872. if (childTypeStr == "Object")
  873. {
  874. resultStr += "\n" + retractStr + "},";
  875. }
  876. else if (childTypeStr == "Array")
  877. {
  878. if (generalTypeStr == "Object")
  879. {
  880. resultStr += "\n" + retractStr + "}],";
  881. }
  882. else if (generalTypeStr == "Array")
  883. {
  884. resultStr += "\n" + retractStr + "}]],";
  885. }
  886. else
  887. {
  888. resultStr += "],";
  889. }
  890. }
  891. else
  892. {
  893. }
  894. }
  895. }
  896. }
  897. return resultStr;
  898. }
  899. public ExceptionResultEntity GetExceptionResultEnum(string enumNamespace)
  900. {
  901. var resultEntity = new ExceptionResultEntity();
  902. List<MemberEntity> memberList = LoadData.GetInterfaceConfigToCache();
  903. var enumInfo = memberList.Find(c => c.ParamName.Contains("T:WingInterfaceLibrary.Enum.RpcExceptionEnum." + enumNamespace) && !string.IsNullOrEmpty(c.Remarks));
  904. if (enumInfo != null)
  905. {
  906. //获取错误枚举、上传文件类型枚举
  907. var enumList = memberList.FindAll(c => c.ParamName.Contains(enumInfo.ParamName.Replace("T:", "")));
  908. if (enumList?.Count > 0)
  909. {
  910. foreach (var item in enumList)
  911. {
  912. if (item.ParamName.Equals(enumInfo.ParamName))
  913. {
  914. //title,name,和header
  915. resultEntity.title = item.Summary;
  916. resultEntity.name = enumNamespace;
  917. resultEntity.header = item.Remarks.Split('|').ToArray().Select(c => c.Trim()).ToList();
  918. }
  919. else
  920. {
  921. var ece = new ExceptionContentEntity();
  922. ece.content_data = item.Summary.Split('|').ToArray().Select(c => c.Trim()).ToList();
  923. //content
  924. resultEntity.content.Add(ece);
  925. }
  926. }
  927. }
  928. }
  929. return resultEntity;
  930. }
  931. /// <summary>
  932. /// 加载指定枚举注释到文档中
  933. /// </summary>
  934. /// <param name="enumNamespace">枚举的命名空间</param>
  935. /// <param name="local_target_id">上级id</param>
  936. /// <param name="formatterDesc">枚举展示格式标题</param>
  937. /// <param name="index">顺序</param>
  938. /// <returns>封装好的实体</returns>
  939. public ChildrenEntity GetSpecialEnum(string enumNamespace, string local_target_id, string formatterDesc = "代码 | 错误描述", int index = 0)
  940. {
  941. var enumName = string.Empty;
  942. var errorEnumStr = string.Empty;
  943. List<MemberEntity> memberList = LoadData.GetInterfaceConfigToCache();
  944. //获取错误枚举、上传文件类型枚举
  945. var enumList = memberList.FindAll(c => c.ParamName.Contains(enumNamespace));
  946. if (enumList?.Count > 0)
  947. {
  948. foreach (var item in enumList)
  949. {
  950. if (item.ParamName.Equals("T:" + enumNamespace))
  951. {
  952. enumName = item.Summary;
  953. }
  954. else
  955. {
  956. errorEnumStr += "\n" + item.Summary;
  957. }
  958. }
  959. }
  960. var errorEntity = new ChildrenEntity()
  961. {
  962. is_doc = "0",
  963. local_parent_id = local_target_id,
  964. local_target_id = Guid.NewGuid().ToString(),
  965. mark = "complated",
  966. method = "POST",
  967. name = enumName,
  968. sort = index,
  969. status = 1,
  970. target_id = CommonHelper.GetSpecicalTargetIndex(),
  971. target_type = "doc",
  972. update_dtime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
  973. response = new ResponseEntity()
  974. {
  975. error = new ResponseResultEntity()
  976. {
  977. parameter = new List<ResponseParameterEntity>(),
  978. raw = ""
  979. },
  980. success = new ResponseResultEntity()
  981. {
  982. raw = "",
  983. parameter = new List<ResponseParameterEntity>()
  984. }
  985. },
  986. request = new RequestEntity()
  987. {
  988. url = "",
  989. resful = new RequestParameterEntity(),
  990. query = new RequestParameterEntity(),
  991. header = new RequestParameterEntity(),
  992. Event = new ScriptEntity(),
  993. description = formatterDesc + "\n--- | ---" + errorEnumStr,
  994. cookie = new RequestParameterEntity(),
  995. body = new RequestBodyEntity()
  996. {
  997. mode = "form-data",
  998. parameter = new List<ResponseParameterEntity>(),
  999. raw = "",
  1000. raw_para = new List<ResponseParameterEntity>()
  1001. }
  1002. }
  1003. };
  1004. if (!PublicEnumDic.Keys.Contains(enumNamespace))
  1005. {
  1006. PublicEnumDic.Add(enumNamespace, errorEntity.local_target_id);
  1007. }
  1008. return errorEntity;
  1009. }
  1010. }
  1011. }