郑州市第一人民医院

KnowledgeController.cs 19KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Threading.Tasks;
  5. using Microsoft.AspNetCore.Http;
  6. using Microsoft.AspNetCore.Mvc;
  7. using CallCenterApi.IRepositories;
  8. using Microsoft.Extensions.Logging;
  9. using MadRunFabric.Model;
  10. using MadRunFabric.Common;
  11. using Microsoft.AspNetCore.Authorization;
  12. using Newtonsoft.Json;
  13. using Newtonsoft.Json.Linq;
  14. using MongoDB.Driver;
  15. using MadRunFabric.Model.CallCenterApi;
  16. using System.Security.Claims;
  17. using SignTokenApi.IRepositories;
  18. using CallCenterApi.Input;
  19. namespace CallCenterApi.Controllers
  20. {
  21. /// <summary>
  22. /// 知识库控制器
  23. /// </summary>
  24. [Authorize]
  25. [ApiVersion("6.0")]
  26. [Produces("application/json")]
  27. [Route("api/[controller]")]
  28. public class KnowledgeController : BaseController
  29. {
  30. private readonly ILogger<KnowledgeController> _logger;
  31. private readonly IKnowledge_BaseRepository _knowledge_baseRepository;
  32. private readonly IKnowledge_TypeRepository _knowledge_typeRepository;
  33. public KnowledgeController(ILogger<KnowledgeController> logger, IKnowledge_TypeRepository knowledge_typeRepository, IKnowledge_BaseRepository knowledge_baseRepository)
  34. {
  35. _logger = logger;
  36. _knowledge_baseRepository = knowledge_baseRepository;
  37. _knowledge_typeRepository = knowledge_typeRepository;
  38. }
  39. #region 知识库分类
  40. /// <summary>
  41. /// 获取
  42. /// </summary>
  43. [HttpGet("gettypelist")]
  44. public async Task<IActionResult> GetTypeListAsync(string id)
  45. {
  46. if (id != null)
  47. {
  48. //1级
  49. var listmodel= new List<Knowledge_Type>();
  50. var list = await _knowledge_typeRepository.Get(p => p.id == id&& p.isdelete == 0);
  51. foreach (var item in list)
  52. {
  53. //2级
  54. listmodel.Add(item);
  55. var list1= await _knowledge_typeRepository.Get(p => p.parentid == item.id && p.isdelete == 0);
  56. foreach (var item1 in list1)
  57. {
  58. //3级
  59. listmodel.Add(item1);
  60. var list2 = await _knowledge_typeRepository.Get(p => p.parentid == item1.id && p.isdelete == 0);
  61. foreach (var item2 in list2)
  62. {
  63. //4级
  64. listmodel.Add(item2);
  65. var list3 = await _knowledge_typeRepository.Get(p => p.parentid == item2.id && p.isdelete == 0);
  66. foreach (var item3 in list3)
  67. {
  68. //5级
  69. listmodel.Add(item3);
  70. var list4 = await _knowledge_typeRepository.Get(p => p.parentid == item3.id && p.isdelete == 0);
  71. foreach (var item4 in list4)
  72. {
  73. listmodel.Add(item4);
  74. var list5 = await _knowledge_typeRepository.Get(p => p.parentid == item4.id && p.isdelete == 0);
  75. foreach (var item5 in list5)
  76. {
  77. listmodel.Add(item5);
  78. }
  79. }
  80. }
  81. }
  82. }
  83. }
  84. return Success("获取成功", listmodel);
  85. }
  86. else
  87. {
  88. var list = await _knowledge_typeRepository.Get(p => p.isdelete == 0);
  89. return Success("获取成功", list);
  90. }
  91. }
  92. /// <summary>
  93. /// 获取树结构
  94. /// </summary>
  95. [HttpGet("gettypetreelist")]
  96. public async Task<IActionResult> GetTypeTreeListAsync()
  97. {
  98. var list = (await _knowledge_typeRepository.Get(p => p.isdelete == 0)).ToList();
  99. return Success("获取成功", gettreeinfo(list, null));
  100. }
  101. /// <summary>
  102. /// 循环获取树结构
  103. /// </summary>
  104. /// <param name="list"></param>
  105. /// <param name="pid"></param>
  106. /// <returns></returns>
  107. public object gettreeinfo(List<Knowledge_Type> list, string pid)
  108. {
  109. var children = list.Where(p => p.parentid == pid).Select(p => new {
  110. p.id,
  111. p.name,
  112. p.sort,
  113. p.parentid,
  114. children = gettreeinfo(list, p.id)
  115. });
  116. return children;
  117. }
  118. /// <summary>
  119. /// 获取
  120. /// </summary>
  121. [HttpGet("gettypesingle")]
  122. public async Task<IActionResult> GetTypeSingleAsync(string id)
  123. {
  124. var model = await _knowledge_typeRepository.GetSingle(id);
  125. var typenames = await GetTypeNameAsync(model.id);
  126. var typeids = await GetTypeIdAsync(model.id);
  127. var obj = new
  128. {
  129. model,
  130. typeids = typeids.Split(","),
  131. typenames = typenames.Split(",")
  132. };
  133. return Success("获取成功", obj);
  134. }
  135. /// <summary>
  136. /// 添加
  137. /// </summary>
  138. [HttpPost("addtype")]
  139. public async Task<IActionResult> AddTypeAsync(string parentid, string code, string name, string remark, int sort)
  140. {
  141. if (string.IsNullOrEmpty(name))
  142. {
  143. return Error("名称不能为空");
  144. }
  145. Knowledge_Type clmodel = new Knowledge_Type();
  146. string optuser = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value;
  147. string optusername = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Name).Value;
  148. clmodel.parentid = parentid;
  149. clmodel.code = code;
  150. clmodel.name = name;
  151. clmodel.remark = remark;
  152. clmodel.sort = sort;
  153. clmodel.createuser = optuser;
  154. clmodel.createusername = optusername;
  155. clmodel.isdelete = 0;
  156. clmodel.createtime = DateTime.Now;
  157. bool bl = await _knowledge_typeRepository.Add(clmodel);
  158. if (bl)
  159. {
  160. return Success("保存成功");
  161. }
  162. else
  163. return Error("保存失败");
  164. }
  165. /// <summary>
  166. /// 修改
  167. /// </summary>
  168. [HttpPost("updatetype")]
  169. public async Task<IActionResult> UpdateTypeAsync(string id, string parentid, string code, string name, string remark, int sort)
  170. {
  171. if (string.IsNullOrEmpty(name))
  172. {
  173. return Error("名称不能为空");
  174. }
  175. string optuser = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value;
  176. string optusername = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Name).Value;
  177. var cls = await _knowledge_typeRepository.Get(p => p.id == id && p.isdelete == 0);
  178. var clmodel = cls.FirstOrDefault();
  179. clmodel.parentid = parentid;
  180. clmodel.code = code;
  181. clmodel.name = name;
  182. clmodel.remark = remark;
  183. clmodel.sort = sort;
  184. var res = await _knowledge_typeRepository.UpdateOne(clmodel);
  185. if (res)
  186. {
  187. return Success("保存成功");
  188. }
  189. else
  190. return Error("保存失败");
  191. }
  192. /// <summary>
  193. /// 删除
  194. /// </summary>
  195. /// <param name="ids"></param>
  196. /// <returns></returns>
  197. [HttpPost("deletetype")]
  198. public async Task<IActionResult> RemoveTypeAsync(string[] ids, int channel = 1)
  199. {
  200. string optuser = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value;
  201. string optusername = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Name).Value;
  202. //使用逻辑删除
  203. //物理删除的数据无法恢复
  204. var res = 0;
  205. if (ids != null && ids.Length > 0)
  206. {
  207. foreach (var id in ids)
  208. {
  209. if (await DeleteTypeAsync(id, optuser))
  210. {
  211. res += 1;
  212. }
  213. }
  214. if (res == ids.Length)
  215. return Success("删除成功");
  216. else if (res > 0 && res < ids.Length)
  217. return Error("部分删除失败");
  218. else
  219. return Error("删除失败");
  220. }
  221. else
  222. return Error("请选择要删除的记录");
  223. }
  224. /// <summary>
  225. /// 循环删除分类
  226. /// </summary>
  227. /// <param name="typeid"></param>
  228. /// <returns></returns>
  229. public async Task<bool> DeleteTypeAsync(string typeid, string usercode)
  230. {
  231. bool bl = false;
  232. var typeinfo = await _knowledge_typeRepository.GetSingle(typeid);
  233. if (typeinfo != null)
  234. {
  235. //if (typeinfo.parentid != null)
  236. //{
  237. // await DeleteTypeAsync(typeinfo.parentid, usercode);
  238. //}
  239. var zlist = await _knowledge_typeRepository.Get(p => p.parentid == typeinfo.id && p.isdelete == 0);
  240. foreach (var z in zlist)
  241. {
  242. await DeleteTypeAsync(z.id, usercode);
  243. }
  244. typeinfo.isdelete = 1;
  245. typeinfo.deleteuser = usercode;
  246. typeinfo.deletetime = DateTime.Now;
  247. bl = await _knowledge_typeRepository.UpdateOne(typeinfo);
  248. }
  249. return bl;
  250. }
  251. #endregion
  252. #region 知识库
  253. /// <summary>
  254. /// 分页获取
  255. /// </summary>
  256. [HttpGet("getlistbypage")]
  257. public async Task<IActionResult> GetListsByPageAsync(string key, string typeid, string stime, string etime, int pageindex = 1, int pagesize = 10)
  258. {
  259. if (typeid != null)
  260. {
  261. //1级
  262. var listmodel = new List<Knowledge_Type>();
  263. var listmobase = new List<object>();
  264. int recordCount = 0;
  265. int count = 0;
  266. var list = await _knowledge_typeRepository.Get(p => p.id == typeid && p.isdelete == 0);
  267. foreach (var item in list)
  268. {
  269. //2级
  270. listmodel.Add(item);
  271. var list1 = await _knowledge_typeRepository.Get(p => p.parentid == item.id && p.isdelete == 0);
  272. foreach (var item1 in list1)
  273. {
  274. //3级
  275. listmodel.Add(item1);
  276. var list2 = await _knowledge_typeRepository.Get(p => p.parentid == item1.id && p.isdelete == 0);
  277. foreach (var item2 in list2)
  278. {
  279. //4级
  280. listmodel.Add(item2);
  281. var list3 = await _knowledge_typeRepository.Get(p => p.parentid == item2.id && p.isdelete == 0);
  282. foreach (var item3 in list3)
  283. {
  284. //5级
  285. listmodel.Add(item3);
  286. var list4 = await _knowledge_typeRepository.Get(p => p.parentid == item3.id && p.isdelete == 0);
  287. foreach (var item4 in list4)
  288. {
  289. listmodel.Add(item4);
  290. var list5 = await _knowledge_typeRepository.Get(p => p.parentid == item4.id && p.isdelete == 0);
  291. foreach (var item5 in list5)
  292. {
  293. listmodel.Add(item5);
  294. }
  295. }
  296. }
  297. }
  298. }
  299. }
  300. foreach (var item in listmodel)
  301. {
  302. var result = _knowledge_baseRepository.GetListsByPage(key, item.id, stime, etime, pageindex, pagesize, out recordCount);
  303. count += recordCount;
  304. foreach (var item1 in result.ToList())
  305. {
  306. listmobase.Add(item1);
  307. }
  308. }
  309. var obj = new
  310. {
  311. rows = listmobase.ToList(),
  312. total = count
  313. };
  314. return Success("获取成功", obj);
  315. }
  316. else {
  317. int recordCount = 0;
  318. var result = _knowledge_baseRepository.GetListsByPage(key, typeid, stime, etime, pageindex, pagesize, out recordCount);
  319. var obj = new
  320. {
  321. rows = result.ToList(),
  322. total = recordCount
  323. };
  324. return Success("获取成功", obj);
  325. }
  326. }
  327. /// <summary>
  328. /// 获取
  329. /// </summary>
  330. [HttpGet("getsingle")]
  331. public async Task<IActionResult> GetSingleAsync(string id)
  332. {
  333. //var model = _knowledge_baseRepository.GetDetails(id);
  334. var model = await _knowledge_baseRepository.GetSingle(id);
  335. var typenames = await GetTypeNameAsync(model.typeid);
  336. var typeids = await GetTypeIdAsync(model.typeid);
  337. var obj = new
  338. {
  339. model,
  340. typeids = typeids.Split(","),
  341. typenames = typenames.Split(",")
  342. };
  343. return Success("获取成功", obj);
  344. }
  345. /// <summary>
  346. /// 循环获取分类名称
  347. /// </summary>
  348. /// <param name="typeid"></param>
  349. /// <returns></returns>
  350. public async Task<string> GetTypeNameAsync(string typeid)
  351. {
  352. string type = string.Empty;
  353. var typeinfo = await _knowledge_typeRepository.GetSingle(typeid);
  354. if (typeinfo != null)
  355. {
  356. if (typeinfo.parentid != null)
  357. {
  358. type = await GetTypeNameAsync(typeinfo.parentid);
  359. }
  360. if (string.IsNullOrEmpty(type))
  361. {
  362. type = typeinfo.name;
  363. }
  364. else
  365. {
  366. type += "," + typeinfo.name;
  367. }
  368. }
  369. return type;
  370. }
  371. /// <summary>
  372. /// 循环获取分类id
  373. /// </summary>
  374. /// <param name="typeid"></param>
  375. /// <returns></returns>
  376. public async Task<string> GetTypeIdAsync(string typeid)
  377. {
  378. string type = string.Empty;
  379. var typeinfo = await _knowledge_typeRepository.GetSingle(typeid);
  380. if (typeinfo != null)
  381. {
  382. if (typeinfo.parentid != null)
  383. {
  384. type = await GetTypeIdAsync(typeinfo.parentid);
  385. }
  386. if (string.IsNullOrEmpty(type))
  387. {
  388. type = typeinfo.id;
  389. }
  390. else
  391. {
  392. type += "," + typeinfo.id;
  393. }
  394. }
  395. return type;
  396. }
  397. /// <summary>
  398. /// 添加
  399. /// </summary>
  400. [HttpPost("add")]
  401. public async Task<IActionResult> AddAsync(string typeid, string title, string content, string remark)
  402. {
  403. Knowledge_Base clmodel = new Knowledge_Base();
  404. string optuser = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value;
  405. string optusername = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Name).Value;
  406. clmodel.typeid = typeid;
  407. clmodel.title = title;
  408. clmodel.content = content;
  409. clmodel.remark = remark;
  410. clmodel.createuser = optuser;
  411. clmodel.createusername = optusername;
  412. clmodel.isdelete = 0;
  413. clmodel.createtime = DateTime.Now;
  414. bool bl = await _knowledge_baseRepository.Add(clmodel);
  415. if (bl)
  416. {
  417. return Success("保存成功");
  418. }
  419. else
  420. return Error("保存失败");
  421. }
  422. /// <summary>
  423. /// 修改
  424. /// </summary>
  425. [HttpPost("update")]
  426. public async Task<IActionResult> UpdateAsync(string id, string typeid, string title, string content, string remark)
  427. {
  428. string optuser = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value;
  429. string optusername = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Name).Value;
  430. var cls = await _knowledge_baseRepository.Get(p => p.id == id && p.isdelete == 0);
  431. var clmodel = cls.FirstOrDefault();
  432. clmodel.typeid = typeid;
  433. clmodel.title = title;
  434. clmodel.content = content;
  435. clmodel.remark = remark;
  436. var res = await _knowledge_baseRepository.UpdateOne(clmodel);
  437. if (res)
  438. {
  439. return Success("保存成功");
  440. }
  441. else
  442. return Error("保存失败");
  443. }
  444. /// <summary>
  445. /// 删除
  446. /// </summary>
  447. /// <param name="ids"></param>
  448. /// <returns></returns>
  449. [HttpPost("delete")]
  450. public async Task<IActionResult> RemoveAsync(string[] ids, int channel = 1)
  451. {
  452. string optuser = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Sid).Value;
  453. string optusername = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Name).Value;
  454. //使用逻辑删除
  455. //物理删除的数据无法恢复
  456. var res = 0;
  457. if (ids != null && ids.Length > 0)
  458. {
  459. foreach (var id in ids)
  460. {
  461. var ml = await _knowledge_baseRepository.GetSingle(id);
  462. ml.isdelete = 1;
  463. ml.deleteuser = optuser;
  464. ml.deletetime = DateTime.Now;
  465. if (await _knowledge_baseRepository.UpdateOne(ml))
  466. {
  467. res += 1;
  468. }
  469. }
  470. if (res == ids.Length)
  471. return Success("删除成功");
  472. else if (res > 0 && res < ids.Length)
  473. return Error("部分删除失败");
  474. else
  475. return Error("删除失败");
  476. }
  477. else
  478. return Error("请选择要删除的记录");
  479. }
  480. #endregion
  481. }
  482. }