平安校园
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

PersonApi.cs 17 KiB

2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447
  1. using Masuit.Tools.Systems;
  2. using MoYu.FriendlyException;
  3. using MoYu.RemoteRequest;
  4. using MoYu.RemoteRequest.Extensions;
  5. using Newtonsoft.Json.Linq;
  6. using SafeCampus.Application.Manager.DeepelephManager;
  7. using SafeCampus.Web.Core.Controllers.Application.Business.Dto.Person;
  8. namespace SafeCampus.Web.Core.Controllers.Application.Business;
  9. /// <summary>
  10. /// 人员管理接口
  11. /// </summary>
  12. [Route("/business/[controller]")]
  13. [ApiDescriptionSettings(ApiGroupConsts.SYSTEM_Business, Order = 98,Tag = "人员管理")]
  14. public class PersonApi : IDynamicApiController
  15. {
  16. private readonly IDeepelephManager _deepelephManager;
  17. public PersonApi(IDeepelephManager deepelephManager)
  18. {
  19. _deepelephManager = deepelephManager;
  20. }
  21. /// <summary>
  22. /// 新增人员
  23. /// </summary>
  24. /// <param name="info">人员信息</param>
  25. /// <returns></returns>
  26. public async Task<dynamic> CreatePersonA(PersonModel info)
  27. {
  28. var appSettings = App.GetOptionsMonitor<AppInfoOptions>();
  29. var str = await $"{appSettings.SXAPIURL}/dfield-api/ecology/person/create"
  30. .SetBody(new
  31. {
  32. token = _deepelephManager.GetToken(),
  33. tenantCode = appSettings.TenantCode,
  34. poiId = appSettings.PoiId,
  35. personId = Guid.NewGuid().ToString("N"),
  36. age = info.Age,
  37. name = info.Name,
  38. gender = info.Gender,
  39. phone = info.Phone,
  40. exData = info.ExData,
  41. faces = info.Faces
  42. })
  43. .SetContentType("application/json")
  44. .PostAsAsync<string>();
  45. var model = JsonConvert.DeserializeObject<JObject>(str);
  46. if ((bool)model["success"])
  47. {
  48. if (!string.IsNullOrEmpty(info.PersonSetId))
  49. {
  50. await $"{appSettings.SXAPIURL}/dfield-api/ecology/person/set/bind"
  51. .SetBody(new
  52. {
  53. token = _deepelephManager.GetToken(),
  54. tenantCode = appSettings.TenantCode,
  55. poiId = appSettings.PoiId,
  56. personSetId = info.PersonSetId,
  57. personIds = new List<string> { model["data"].ToString() }
  58. })
  59. .SetContentType("application/json")
  60. .PostAsAsync<string>();
  61. //var model1 = JsonConvert.DeserializeObject<JObject>(str);
  62. //if ((bool)model1["success"])
  63. //{
  64. // return model["data"];
  65. //}
  66. }
  67. return model["data"];
  68. }
  69. throw Oops.Oh(model["message"].ToString());
  70. }
  71. /// <summary>
  72. /// 人脸图片上传
  73. /// </summary>
  74. /// <param name="input"></param>
  75. /// <returns></returns>
  76. public async Task<dynamic> UploadFile([FromForm] BaseFileInput input)
  77. {
  78. var appSettings = App.GetOptionsMonitor<AppInfoOptions>();
  79. var jsonparam = JsonConvert.SerializeObject(new
  80. {
  81. token = _deepelephManager.GetToken(),
  82. tenantCode = appSettings.TenantCode,
  83. poiId = appSettings.PoiId,
  84. usageScenario = "personSet"
  85. });
  86. var str = await $"{appSettings.SXAPIURL}/dfield-api/ecology/common/upload-file"
  87. .SetFiles(HttpFile.Create("file", input.File.OpenReadStream(), input.File.FileName))
  88. .SetBody(new
  89. {
  90. param = jsonparam
  91. })
  92. .SetContentType("multipart/form-data")
  93. .PostAsAsync<string>();
  94. var model = JsonConvert.DeserializeObject<JObject>(str);
  95. if ((bool)model["success"])
  96. {
  97. var strCheck = await $"{appSettings.SXAPIURL}/dfield-api/ecology/person/faceQuality/check"
  98. .SetBody(new
  99. {
  100. token = _deepelephManager.GetToken(),
  101. tenantCode = appSettings.TenantCode,
  102. poiId = appSettings.PoiId,
  103. faceSizeLimit = 60,
  104. qualityScore = 30,
  105. faceUrl = model["data"]["httpUrl"].ToString()
  106. })
  107. .SetContentType("application/json")
  108. .PostAsAsync<string>();
  109. var modelCheck = JsonConvert.DeserializeObject<JObject>(strCheck);
  110. if ((bool)modelCheck["success"])
  111. {
  112. if ((bool)modelCheck["data"]["pass"])
  113. {
  114. return model["data"]["httpUrl"].ToString();
  115. }
  116. throw Oops.Oh(modelCheck["data"]["message"].ToString());
  117. }
  118. else
  119. {
  120. throw Oops.Oh("人脸效验失败!");
  121. }
  122. }
  123. throw Oops.Oh(model["message"].ToString());
  124. }
  125. /// <summary>
  126. /// 删除人员
  127. /// </summary>
  128. /// <param name="personId"></param>
  129. /// <returns></returns>
  130. public async Task<dynamic> DeletePersonD(string id)
  131. {
  132. var appSettings = App.GetOptionsMonitor<AppInfoOptions>();
  133. var str = await $"{appSettings.SXAPIURL}/dfield-api/ecology/person/delete"
  134. .SetBody(new
  135. {
  136. token = _deepelephManager.GetToken(),
  137. tenantCode = appSettings.TenantCode,
  138. poiId = appSettings.PoiId,
  139. personId = id,
  140. })
  141. .SetContentType("application/json")
  142. .PostAsAsync<string>();
  143. var model = JsonConvert.DeserializeObject<JObject>(str);
  144. if ((bool)model["success"])
  145. {
  146. return model["data"].ToString() == id;
  147. }
  148. throw Oops.Oh(model["message"].ToString());
  149. }
  150. /// <summary>
  151. /// 更新人员信息,如果人员不存在,则创建人员;如果人员存在,则覆盖信息。
  152. /// </summary>
  153. /// <param name="info"></param>
  154. /// <returns></returns>
  155. public async Task<dynamic> UpdatePersionU(PersonModel info)
  156. {
  157. var appSettings = App.GetOptionsMonitor<AppInfoOptions>();
  158. var str = await $"{appSettings.SXAPIURL}/dfield-api/ecology/person/createOrOverride"
  159. .SetBody(new
  160. {
  161. token = _deepelephManager.GetToken(),
  162. tenantCode = appSettings.TenantCode,
  163. poiId = appSettings.PoiId,
  164. personId = info.PersonId,
  165. age = info.Age,
  166. name = info.Name,
  167. gender = info.Gender,
  168. phone = info.Phone,
  169. exData = info.ExData,
  170. faces = info.Faces
  171. })
  172. .SetContentType("application/json")
  173. .PostAsAsync<string>();
  174. var model = JsonConvert.DeserializeObject<JObject>(str);
  175. if ((bool)model["success"])
  176. {
  177. if (!string.IsNullOrEmpty(info.PersonSetId))
  178. {
  179. var perInfo = await $"{appSettings.SXAPIURL}/dfield-api/ecology/person/query"
  180. .SetBody(new
  181. {
  182. token = _deepelephManager.GetToken(),
  183. tenantCode = appSettings.TenantCode,
  184. poiId = appSettings.PoiId,
  185. personId = info.PersonId,
  186. })
  187. .SetContentType("application/json")
  188. .PostAsAsync<string>();
  189. var permodel = JsonConvert.DeserializeObject<JObject>(perInfo);
  190. if ((bool)permodel["success"])
  191. {
  192. if (permodel["data"]["personSets"].Count() > 0)
  193. {
  194. var old = permodel["data"]["personSets"][0]["personSetId"].ToString();
  195. if (old != info.PersonSetId)
  196. {
  197. //解绑旧班级
  198. await $"{appSettings.SXAPIURL}/dfield-api/ecology/person/set/unbind"
  199. .SetBody(new
  200. {
  201. token = _deepelephManager.GetToken(),
  202. tenantCode = appSettings.TenantCode,
  203. poiId = appSettings.PoiId,
  204. personId = info.PersonId,
  205. personSetId = old,
  206. })
  207. .SetContentType("application/json")
  208. .PostAsAsync<string>();
  209. //绑定新班级
  210. await $"{appSettings.SXAPIURL}/dfield-api/ecology/person/set/bind"
  211. .SetBody(new
  212. {
  213. token = _deepelephManager.GetToken(),
  214. tenantCode = appSettings.TenantCode,
  215. poiId = appSettings.PoiId,
  216. personSetId = info.PersonSetId,
  217. personIds = new List<string> { info.PersonId }
  218. })
  219. .SetContentType("application/json")
  220. .PostAsAsync<string>();
  221. }
  222. }
  223. else
  224. {
  225. //绑定新班级
  226. await $"{appSettings.SXAPIURL}/dfield-api/ecology/person/set/bind"
  227. .SetBody(new
  228. {
  229. token = _deepelephManager.GetToken(),
  230. tenantCode = appSettings.TenantCode,
  231. poiId = appSettings.PoiId,
  232. personSetId = info.PersonSetId,
  233. personIds = new List<string> { model["data"].ToString() }
  234. })
  235. .SetContentType("application/json")
  236. .PostAsAsync<string>();
  237. }
  238. }
  239. }
  240. return model["data"];
  241. }
  242. throw Oops.Oh(model["message"].ToString());
  243. }
  244. /// <summary>
  245. /// 分页查询人员信息
  246. /// </summary>
  247. /// <param name="search">查询条件</param>
  248. /// <returns></returns>
  249. public async Task<dynamic> PageQuery(PersonSearch search)
  250. {
  251. var appSettings = App.GetOptionsMonitor<AppInfoOptions>();
  252. var str = await $"{appSettings.SXAPIURL}/dfield-api/ecology/person/pageQuery"
  253. .SetBody(new
  254. {
  255. token = _deepelephManager.GetToken(),
  256. tenantCode = appSettings.TenantCode,
  257. poiId = appSettings.PoiId,
  258. personSetId = search.PersonSetId,
  259. personId = search.PersonId,
  260. personName = search.PersonName,
  261. pageIndex = search.PageNum,
  262. pageSize = search.PageSize,
  263. })
  264. .SetContentType("application/json")
  265. .PostAsAsync<string>();
  266. var model = JsonConvert.DeserializeObject<JObject>(str);
  267. if (!(bool)model["success"]) throw Oops.Oh(model["message"].ToString());
  268. if (model["data"] != null)
  269. {
  270. return new
  271. {
  272. pageNum = search.PageNum,
  273. pageSize = model["pageSize"],
  274. total = model["totalCount"],
  275. pages = model["pageIndex"],
  276. list = model["data"]
  277. };
  278. }
  279. return new
  280. {
  281. pageNum = search.PageNum,
  282. pageSize = 0,
  283. total = 0,
  284. pages = 0,
  285. list = new List<string>()
  286. };
  287. }
  288. /// <summary>
  289. /// 查看人员详情
  290. /// </summary>
  291. /// <param name="personId">人员id</param>
  292. /// <returns></returns>
  293. public async Task<dynamic> GetPersionById(ControllersIdInput input)
  294. {
  295. var appSettings = App.GetOptionsMonitor<AppInfoOptions>();
  296. var str = await $"{appSettings.SXAPIURL}/dfield-api/ecology/person/query"
  297. .SetBody(new
  298. {
  299. token = _deepelephManager.GetToken(),
  300. tenantCode = appSettings.TenantCode,
  301. poiId = appSettings.PoiId,
  302. personId = input.Id,
  303. })
  304. .SetContentType("application/json")
  305. .PostAsAsync<string>();
  306. var model = JsonConvert.DeserializeObject<JObject>(str);
  307. if ((bool)model["success"])
  308. {
  309. if (model["data"]["personSets"].Count() > 0)
  310. {
  311. model["data"]["personSetId"] = model["data"]["personSets"][0]["personSetId"];
  312. model["data"]["personSetName"] = model["data"]["personSets"][0]["personSetName"];
  313. }
  314. else
  315. {
  316. model["data"]["personSetId"] = null;
  317. model["data"]["personSetName"] = null;
  318. }
  319. return model["data"];
  320. }
  321. throw Oops.Oh(model["message"].ToString());
  322. }
  323. /// <summary>
  324. /// 添加人脸
  325. /// </summary>
  326. /// <param name="info">人脸信息</param>
  327. /// <returns></returns>
  328. public async Task<dynamic> AddFaceA(PersonFaceInfo info)
  329. {
  330. var appSettings = App.GetOptionsMonitor<AppInfoOptions>();
  331. var str = await $"{appSettings.SXAPIURL}/dfield-api/ecology/person/addFace"
  332. .SetBody(new
  333. {
  334. token = _deepelephManager.GetToken(),
  335. tenantCode = appSettings.TenantCode,
  336. poiId = appSettings.PoiId,
  337. personId = info.PersonId,
  338. info.faceSizeLimit,
  339. info.qualityScore,
  340. faces = new List<Faces>
  341. {
  342. new Faces
  343. {
  344. faceUrl = info.faceUrl,
  345. faceId=Guid.NewGuid().ToString("N"),
  346. }
  347. }
  348. })
  349. .SetContentType("application/json")
  350. .PostAsAsync<string>();
  351. var model = JsonConvert.DeserializeObject<JObject>(str);
  352. if ((bool)model["success"])
  353. {
  354. return true;
  355. }
  356. throw Oops.Oh(model["message"].ToString());
  357. }
  358. /// <summary>
  359. /// 删除人脸
  360. /// </summary>
  361. /// <param name="info">删除信息</param>
  362. /// <returns></returns>
  363. [HttpPost]
  364. public async Task<dynamic> DeleteFaceD(PersonFaceDel info)
  365. {
  366. var appSettings = App.GetOptionsMonitor<AppInfoOptions>();
  367. var str = await $"{appSettings.SXAPIURL}/dfield-api/ecology/person/removeFace"
  368. .SetBody(new
  369. {
  370. token = _deepelephManager.GetToken(),
  371. tenantCode = appSettings.TenantCode,
  372. poiId = appSettings.PoiId,
  373. info.personId,
  374. info.faceIds
  375. })
  376. .SetContentType("application/json")
  377. .PostAsAsync<string>();
  378. var model = JsonConvert.DeserializeObject<JObject>(str);
  379. if ((bool)model["success"])
  380. {
  381. return true;
  382. }
  383. throw Oops.Oh(model["message"].ToString());
  384. }
  385. /// <summary>
  386. /// 人员和底库绑定
  387. /// </summary>
  388. /// <param name="info"></param>
  389. /// <returns></returns>
  390. public async Task<dynamic> PersonBindDfie(PersonDfieDfie info)
  391. {
  392. var appSettings = App.GetOptionsMonitor<AppInfoOptions>();
  393. var str = await $"{appSettings.SXAPIURL}/dfield-api/ecology/person/set/bind"
  394. .SetBody(new
  395. {
  396. token = _deepelephManager.GetToken(),
  397. tenantCode = appSettings.TenantCode,
  398. poiId = appSettings.PoiId,
  399. personSetId = info.PersonSetId,
  400. personIds = info.PersonIds
  401. })
  402. .SetContentType("application/json")
  403. .PostAsAsync<string>();
  404. var model = JsonConvert.DeserializeObject<JObject>(str);
  405. if ((bool)model["success"])
  406. {
  407. return true;
  408. }
  409. throw Oops.Oh(model["message"].ToString());
  410. }
  411. /// <summary>
  412. /// 人员与底库解绑
  413. /// </summary>
  414. /// <returns></returns>
  415. public async Task<dynamic> PersonUnBindDfie(PersonUnBindDfieInput input)
  416. {
  417. var appSettings = App.GetOptionsMonitor<AppInfoOptions>();
  418. var str = await $"{appSettings.SXAPIURL}/dfield-api/ecology/person/set/unbind"
  419. .SetBody(new
  420. {
  421. token = _deepelephManager.GetToken(),
  422. tenantCode = appSettings.TenantCode,
  423. poiId = appSettings.PoiId,
  424. personId = input.PersonId,
  425. personSetId = input.PersonSetId,
  426. })
  427. .SetContentType("application/json")
  428. .PostAsAsync<string>();
  429. var model = JsonConvert.DeserializeObject<JObject>(str);
  430. if ((bool)model["success"])
  431. {
  432. return true;
  433. }
  434. throw Oops.Oh(model["message"].ToString());
  435. }
  436. }