平安校园
25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.
 
 
 
 
 
 

362 satır
13 KiB

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