CreateDocHtml.cs 50 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016
  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. if (PublicEnumDic.Keys.Contains(key))
  628. {
  629. childObject.field_type_value = 1;
  630. childObject.field_type_target_id = PublicEnumDic[key];
  631. }
  632. }
  633. if (childTypeStr == "Array" && generalTypeStr != "Object")
  634. {
  635. childObject.value = "[" + responseItem.DefaultValue + "]";
  636. }
  637. childObject.key = typeStr + "." + responseItem.Name;
  638. if (typeStr != "result")
  639. {
  640. childObject.key = typeStr + "[0]." + responseItem.Name;
  641. childObject.not_null = responseItem.IsNotNull;
  642. }
  643. resultList.Add(childObject);
  644. if (responseItem.ParamPropertyList?.Count > 0)
  645. {
  646. var childList = GetChildParameterEntity(childTypeStr, responseItem.ParamPropertyList, childObject.key, 1);
  647. resultList.AddRange(childList);
  648. }
  649. }
  650. }
  651. }
  652. else if (returnTypeStr == "Array")
  653. {
  654. ParamPropertyEntity res = null;
  655. if (level == 2)
  656. {
  657. res = responseList.FirstOrDefault()?.ParamPropertyList?.FirstOrDefault();
  658. }
  659. else
  660. {
  661. res = responseList.FirstOrDefault();
  662. }
  663. if (res?.ParamPropertyList?.Count > 0)
  664. {
  665. foreach (var responseItem in res.ParamPropertyList)
  666. {
  667. var childTypeStr = CommonHelper.GetJsonDataTypeByString(responseItem.TypeFullName);
  668. var generalTypeStr = CommonHelper.GetJsonDataTypeByString(responseItem.GenericityType);
  669. var childObject = new ResponseParameterEntity()
  670. {
  671. file_name = FileName,
  672. description = responseItem.Desc,
  673. is_checked = 0,
  674. type = "Text",
  675. field_type = childTypeStr,
  676. value = responseItem.DefaultValue
  677. };
  678. //if (childTypeStr.Contains("Enum"))
  679. //{
  680. // childObject.field_type = "<a href=\"#" + childTypeStr + "\">" + childObject.field_type + "</a>";
  681. //}
  682. if (childTypeStr.Contains("Enum"))
  683. {
  684. var key = "WingInterfaceLibrary.Enum." + childTypeStr;
  685. if (PublicEnumDic.Keys.Contains(key))
  686. {
  687. childObject.field_type_value = 1;
  688. childObject.field_type_target_id = PublicEnumDic[key];
  689. }
  690. }
  691. if (childTypeStr == "Array" && generalTypeStr != "Object")
  692. {
  693. childObject.value = "[" + responseItem.DefaultValue + "]";
  694. }
  695. childObject.key = typeStr + "[0]." + responseItem.Name;
  696. if (typeStr != "result")
  697. {
  698. childObject.not_null = responseItem.IsNotNull;
  699. }
  700. resultList.Add(childObject);
  701. if (responseItem.ParamPropertyList?.Count > 0)
  702. {
  703. var childList = GetChildParameterEntity(childTypeStr, responseItem.ParamPropertyList, childObject.key, 1);
  704. resultList.AddRange(childList);
  705. }
  706. }
  707. }
  708. }
  709. else
  710. {
  711. }
  712. return resultList;
  713. }
  714. /// <summary>
  715. /// 拼接显示的字符串
  716. /// </summary>
  717. /// <param name="returnTypeStr">返回类型</param>
  718. /// <param name="responseList">响应列表</param>
  719. /// <param name="level">数据层级</param>
  720. /// <param name="retract">缩进大小</param>
  721. /// <returns></returns>
  722. public string GetChildParameterString(string returnTypeStr, List<ParamPropertyEntity> responseList, int level = 2, int retract = 0)
  723. {
  724. List<string> typeList = new List<string>() { "Boolean", "Double", "Float", "Number", "Integer" };
  725. string resultStr = "";
  726. string retractStr = "";
  727. for (int i = 0; i < (retract + 1); i++)
  728. {
  729. if (i == 0)
  730. {
  731. retractStr += "\t\t";
  732. }
  733. else
  734. {
  735. retractStr += "\t";
  736. }
  737. }
  738. if (returnTypeStr == "Object")
  739. {
  740. var res = responseList.FirstOrDefault();
  741. if (res.ParamPropertyList?.Count > 0)
  742. {
  743. foreach (var responseItem in res.ParamPropertyList)
  744. {
  745. var childTypeStr = CommonHelper.GetJsonDataTypeByString(responseItem.TypeFullName);
  746. var generalTypeStr = CommonHelper.GetJsonDataTypeByString(responseItem.GenericityType);
  747. if (childTypeStr == "Object")
  748. {
  749. retract++;
  750. resultStr += "\n" + retractStr + "\"" + responseItem.Name + "\":{";
  751. }
  752. else if (childTypeStr == "Array")
  753. {
  754. retract++;
  755. if (generalTypeStr == "Object")
  756. {
  757. resultStr += "\n" + retractStr + "\"" + responseItem.Name + "\":[{";
  758. }
  759. else if (generalTypeStr == "Array")
  760. {
  761. resultStr += "\n" + retractStr + "\"" + responseItem.Name + "\":[[{";
  762. }
  763. else
  764. {
  765. resultStr += "\n" + retractStr + "\"" + responseItem.Name + "\":[" + responseItem.DefaultValue + " //" + responseItem.Desc;
  766. }
  767. }
  768. else
  769. {
  770. if (typeList.Contains(childTypeStr) || childTypeStr.Contains("Enum"))
  771. {
  772. resultStr += "\n" + retractStr + "\"" + responseItem.Name + "\": " + responseItem.DefaultValue + ", //" + responseItem.Desc;
  773. }
  774. else
  775. {
  776. resultStr += "\n" + retractStr + "\"" + responseItem.Name + "\": \"" + responseItem.DefaultValue + "\", //" + responseItem.Desc;
  777. }
  778. }
  779. if (responseItem.ParamPropertyList?.Count > 0)
  780. {
  781. var childStr = DealWithString(GetChildParameterString(childTypeStr, responseItem.ParamPropertyList, 1, retract));
  782. resultStr += childStr;
  783. }
  784. if (childTypeStr == "Object")
  785. {
  786. resultStr += "\n" + retractStr + "},";
  787. }
  788. else if (childTypeStr == "Array")
  789. {
  790. if (generalTypeStr == "Object")
  791. {
  792. resultStr += "\n" + retractStr + "}],";
  793. }
  794. else if (generalTypeStr == "Array")
  795. {
  796. resultStr += "\n" + retractStr + "}]],";
  797. }
  798. else
  799. {
  800. resultStr += "],";
  801. }
  802. }
  803. else
  804. {
  805. }
  806. }
  807. }
  808. }
  809. else if (returnTypeStr == "Array")
  810. {
  811. ParamPropertyEntity res = null;
  812. if (level == 2)
  813. {
  814. res = responseList.FirstOrDefault()?.ParamPropertyList?.FirstOrDefault();
  815. }
  816. else
  817. {
  818. res = responseList.FirstOrDefault();
  819. }
  820. if (res?.ParamPropertyList?.Count > 0)
  821. {
  822. foreach (var responseItem in res.ParamPropertyList)
  823. {
  824. var childTypeStr = CommonHelper.GetJsonDataTypeByString(responseItem.TypeFullName);
  825. var generalTypeStr = CommonHelper.GetJsonDataTypeByString(responseItem.GenericityType);
  826. if (childTypeStr == "Object")
  827. {
  828. retract++;
  829. resultStr += "\n" + retractStr + "\"" + responseItem.Name + "\":{";
  830. }
  831. else if (childTypeStr == "Array")
  832. {
  833. retract++;
  834. if (generalTypeStr == "Object")
  835. {
  836. resultStr += "\n" + retractStr + "\"" + responseItem.Name + "\":[{";
  837. }
  838. else if (generalTypeStr == "Array")
  839. {
  840. resultStr += "\n" + retractStr + "\"" + responseItem.Name + "\":[[{";
  841. }
  842. else
  843. {
  844. resultStr += "\n" + retractStr + "\"" + responseItem.Name + "\":[" + responseItem.DefaultValue + " //" + responseItem.Desc;
  845. }
  846. }
  847. else
  848. {
  849. if (typeList.Contains(childTypeStr) || childTypeStr.Contains("Enum"))
  850. {
  851. resultStr += "\n" + retractStr + "\"" + responseItem.Name + "\": " + responseItem.DefaultValue + ", //" + responseItem.Desc;
  852. }
  853. else
  854. {
  855. resultStr += "\n" + retractStr + "\"" + responseItem.Name + "\": \"" + responseItem.DefaultValue + "\", //" + responseItem.Desc;
  856. }
  857. }
  858. if (responseItem.ParamPropertyList?.Count > 0)
  859. {
  860. var childStr = DealWithString(GetChildParameterString(childTypeStr, responseItem.ParamPropertyList, 1, retract));
  861. resultStr += childStr;
  862. }
  863. if (childTypeStr == "Object")
  864. {
  865. resultStr += "\n" + retractStr + "},";
  866. }
  867. else if (childTypeStr == "Array")
  868. {
  869. if (generalTypeStr == "Object")
  870. {
  871. resultStr += "\n" + retractStr + "}],";
  872. }
  873. else if (generalTypeStr == "Array")
  874. {
  875. resultStr += "\n" + retractStr + "}]],";
  876. }
  877. else
  878. {
  879. resultStr += "],";
  880. }
  881. }
  882. else
  883. {
  884. }
  885. }
  886. }
  887. }
  888. return resultStr;
  889. }
  890. public ExceptionResultEntity GetExceptionResultEnum(string enumNamespace)
  891. {
  892. var resultEntity = new ExceptionResultEntity();
  893. List<MemberEntity> memberList = LoadData.GetInterfaceConfigToCache();
  894. var enumInfo = memberList.Find(c => c.ParamName.Contains("T:WingInterfaceLibrary.Enum.RpcExceptionEnum." + enumNamespace) && !string.IsNullOrEmpty(c.Remarks));
  895. if (enumInfo != null)
  896. {
  897. //获取错误枚举、上传文件类型枚举
  898. var enumList = memberList.FindAll(c => c.ParamName.Contains(enumInfo.ParamName.Replace("T:", "")));
  899. if (enumList?.Count > 0)
  900. {
  901. foreach (var item in enumList)
  902. {
  903. if (item.ParamName.Equals(enumInfo.ParamName))
  904. {
  905. //title,name,和header
  906. resultEntity.title = item.Summary;
  907. resultEntity.name = enumNamespace;
  908. resultEntity.header = item.Remarks.Split('|').ToArray().Select(c => c.Trim()).ToList();
  909. }
  910. else
  911. {
  912. var ece = new ExceptionContentEntity();
  913. ece.content_data = item.Summary.Split('|').ToArray().Select(c => c.Trim()).ToList();
  914. //content
  915. resultEntity.content.Add(ece);
  916. }
  917. }
  918. }
  919. }
  920. return resultEntity;
  921. }
  922. /// <summary>
  923. /// 加载指定枚举注释到文档中
  924. /// </summary>
  925. /// <param name="enumNamespace">枚举的命名空间</param>
  926. /// <param name="local_target_id">上级id</param>
  927. /// <param name="formatterDesc">枚举展示格式标题</param>
  928. /// <param name="index">顺序</param>
  929. /// <returns>封装好的实体</returns>
  930. public ChildrenEntity GetSpecialEnum(string enumNamespace, string local_target_id, string formatterDesc = "代码 | 错误描述", int index = 0)
  931. {
  932. var enumName = string.Empty;
  933. var errorEnumStr = string.Empty;
  934. List<MemberEntity> memberList = LoadData.GetInterfaceConfigToCache();
  935. //获取错误枚举、上传文件类型枚举
  936. var enumList = memberList.FindAll(c => c.ParamName.Contains(enumNamespace));
  937. if (enumList?.Count > 0)
  938. {
  939. foreach (var item in enumList)
  940. {
  941. if (item.ParamName.Equals("T:" + enumNamespace))
  942. {
  943. enumName = item.Summary;
  944. }
  945. else
  946. {
  947. errorEnumStr += "\n" + item.Summary;
  948. }
  949. }
  950. }
  951. var errorEntity = new ChildrenEntity()
  952. {
  953. is_doc = "0",
  954. local_parent_id = local_target_id,
  955. local_target_id = Guid.NewGuid().ToString(),
  956. mark = "complated",
  957. method = "POST",
  958. name = enumName,
  959. sort = index,
  960. status = 1,
  961. target_id = CommonHelper.GetSpecicalTargetIndex(),
  962. target_type = "doc",
  963. update_dtime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
  964. response = new ResponseEntity()
  965. {
  966. error = new ResponseResultEntity()
  967. {
  968. parameter = new List<ResponseParameterEntity>(),
  969. raw = ""
  970. },
  971. success = new ResponseResultEntity()
  972. {
  973. raw = "",
  974. parameter = new List<ResponseParameterEntity>()
  975. }
  976. },
  977. request = new RequestEntity()
  978. {
  979. url = "",
  980. resful = new RequestParameterEntity(),
  981. query = new RequestParameterEntity(),
  982. header = new RequestParameterEntity(),
  983. Event = new ScriptEntity(),
  984. description = formatterDesc + "\n--- | ---" + errorEnumStr,
  985. cookie = new RequestParameterEntity(),
  986. body = new RequestBodyEntity()
  987. {
  988. mode = "form-data",
  989. parameter = new List<ResponseParameterEntity>(),
  990. raw = "",
  991. raw_para = new List<ResponseParameterEntity>()
  992. }
  993. }
  994. };
  995. if (!PublicEnumDic.Keys.Contains(enumNamespace))
  996. {
  997. PublicEnumDic.Add(enumNamespace, errorEntity.local_target_id);
  998. }
  999. return errorEntity;
  1000. }
  1001. }
  1002. }