TencentOCRController.cs 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440
  1. using OASystem.API.OAMethodLib;
  2. using OASystem.Domain.Dtos.CRM;
  3. using OASystem.Domain.Dtos.Tencent;
  4. using OASystem.Domain.ViewModels.TencentOCR;
  5. using OASystem.Infrastructure.Repositories.CRM;
  6. using StackExchange.Redis;
  7. using System.Net.NetworkInformation;
  8. using TencentCloud.Ocr.V20181119.Models;
  9. using Ubiety.Dns.Core;
  10. namespace OASystem.API.Controllers
  11. {
  12. /// <summary>
  13. /// TencentOCR 识别
  14. /// </summary>
  15. [Route("api/[controller]/[action]")]
  16. //[ApiController]
  17. public class TencentOCRController : ControllerBase
  18. {
  19. private readonly VisaDeleClientRepository _visaDeleClientRepository;
  20. public TencentOCRController(VisaDeleClientRepository visaDeleClientRepository)
  21. {
  22. this._visaDeleClientRepository = visaDeleClientRepository;
  23. }
  24. /// <summary>
  25. /// 通用印刷体
  26. /// </summary>
  27. /// <param name="dto"></param>
  28. /// <returns></returns>
  29. [HttpPost]
  30. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  31. public async Task<IActionResult> GetGeneralBasic(GeneralBasicOCRDto dto)
  32. {
  33. string[] picBase64Array = dto.picBase64.Split(';');
  34. string picFormat = picBase64Array[0].Split('/')[1];
  35. if (!TencentOCRTools.ImageType(picFormat))
  36. {
  37. return Ok(JsonView("图片格式不正确!只支持 PNG、JPG、JPEG、BMP 格式!"));
  38. }
  39. double strSize = 1024 * 1024 * 7;
  40. if (dto.picBase64.Length > strSize)
  41. {
  42. return Ok(JsonView("图片不能大于7M!"));
  43. }
  44. var gbData = TencentOCRTools.GetOCR((int)TencentOCR.TencentOCREnum.GeneralBasic, dto);
  45. if (gbData.Code != 0)
  46. {
  47. return Ok(JsonView(gbData.Msg));
  48. }
  49. if (gbData.Data == null)
  50. {
  51. return Ok(JsonView(gbData.Msg));
  52. }
  53. return Ok(JsonView(gbData.Data));
  54. }
  55. /// <summary>
  56. /// 身份证识别(国徽面/反面)
  57. /// 获取身份证返回数据
  58. /// </summary>
  59. /// <param name="dto"></param>
  60. /// <returns></returns>
  61. [HttpPost]
  62. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  63. public async Task<IActionResult> GetIDCard(IDCardOCRDto dto)
  64. {
  65. string[] picBase64Array = dto.picBase64.Split(';');
  66. string picFormat = picBase64Array[0].Split('/')[1];
  67. if (!TencentOCRTools.ImageType(picFormat))
  68. {
  69. return Ok(JsonView("图片格式不正确!只支持 PNG、JPG、JPEG、BMP 格式!"));
  70. }
  71. double strSize = 1024 * 1024 * 7;
  72. if (dto.picBase64.Length > strSize)
  73. {
  74. return Ok(JsonView("图片不能大于7M!"));
  75. }
  76. var idCardData = TencentOCRTools.GetOCR((int)TencentOCR.TencentOCREnum.IDCard, dto);
  77. if (idCardData.Code != 0)
  78. {
  79. return Ok(JsonView(idCardData.Msg));
  80. }
  81. if (idCardData.Data == null)
  82. {
  83. return Ok(JsonView(idCardData.Msg));
  84. }
  85. bool cerdStatus = await _visaDeleClientRepository.SetCrmUpdPassIdCardOCR(
  86. new SetCrmUpdPassIdCardOCRDto
  87. {
  88. UserId = dto.UserId,
  89. ClientName = idCardData.Data.Name,
  90. Sex = idCardData.Data.Sex == "男" ? 0 : 1,
  91. CerdNo = idCardData.Data.IdNum,
  92. CerdAddress = idCardData.Data.Address,
  93. });
  94. IDCardOCRView iDCardOCRView = new IDCardOCRView()
  95. {
  96. Status = cerdStatus,
  97. Name = idCardData.Data.Name,
  98. Sex = idCardData.Data.Sex,
  99. Nation = idCardData.Data.Nation,
  100. Birth = idCardData.Data.Birth,
  101. Address = idCardData.Data.Address,
  102. IdNum = idCardData.Data.IdNum,
  103. Authority = idCardData.Data.Authority,
  104. ValidDate = idCardData.Data.ValidDate
  105. };
  106. return Ok(JsonView(iDCardOCRView));
  107. }
  108. /// <summary>
  109. /// 户口簿识别
  110. /// 获取户口簿返回数据
  111. /// </summary>
  112. /// <param name="dto"></param>
  113. /// <returns></returns>
  114. [HttpPost]
  115. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  116. public async Task<IActionResult> GetResidenceBookletOCR(ResidenceBookletOCRDto dto)
  117. {
  118. double strSize = 1024 * 1024 * 7;
  119. if (dto.picBase64.Length > strSize)
  120. {
  121. return Ok(JsonView("图片不能大于7M!"));
  122. }
  123. var residenceBookData = TencentOCRTools.GetOCR((int)TencentOCR.TencentOCREnum.ResidenceBooklet, dto);
  124. if (residenceBookData.Code != 0)
  125. {
  126. return Ok(JsonView(residenceBookData.Msg));
  127. }
  128. if (residenceBookData.Data == null)
  129. {
  130. return Ok(JsonView(residenceBookData.Msg));
  131. }
  132. return Ok(JsonView(residenceBookData.Data));
  133. }
  134. /// <summary>
  135. /// 营业执照识别
  136. /// 获取营业执照返回数据
  137. /// </summary>
  138. /// <param name="dto"></param>
  139. /// <returns></returns>
  140. [HttpPost]
  141. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  142. public async Task<IActionResult> GetBizLicenseOCR(BizLicenseOCRDto dto)
  143. {
  144. double strSize = 1024 * 1024 * 7;
  145. if (dto.picBase64.Length > strSize)
  146. {
  147. return Ok(JsonView("图片不能大于7M!"));
  148. }
  149. var residenceBookData = TencentOCRTools.GetOCR((int)TencentOCR.TencentOCREnum.BizLicense, dto);
  150. if (residenceBookData.Code != 0)
  151. {
  152. return Ok(JsonView(residenceBookData.Msg));
  153. }
  154. if (residenceBookData.Data == null)
  155. {
  156. return Ok(JsonView(residenceBookData.Msg));
  157. }
  158. return Ok(JsonView(residenceBookData.Data));
  159. }
  160. /// <summary>
  161. /// 营业执照识别
  162. /// 获取营业执照返回数据
  163. /// </summary>
  164. /// <param name="dto"></param>
  165. /// <returns></returns>
  166. [HttpPost]
  167. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  168. public async Task<IActionResult> GetOrgCodeCertOCR(OrgCodeCertOCRDto dto)
  169. {
  170. double strSize = 1024 * 1024 * 7;
  171. if (dto.picBase64.Length > strSize)
  172. {
  173. return Ok(JsonView("图片不能大于7M!"));
  174. }
  175. var occData = TencentOCRTools.GetOCR((int)TencentOCR.TencentOCREnum.OrgCodeCert, dto);
  176. if (occData.Code != 0)
  177. {
  178. return Ok(JsonView(occData.Msg));
  179. }
  180. if (occData.Data == null)
  181. {
  182. return Ok(JsonView(occData.Msg));
  183. }
  184. return Ok(JsonView(occData.Data));
  185. }
  186. /// <summary>
  187. /// 行驶证识别
  188. /// 获取行驶证返回数据
  189. /// CardSide=0 主页正面(有红色印章的一面),CardSide=1 行驶证副页正面(有号码号牌的一面),CardSide=2 行驶证主页正面和副页正面。
  190. /// </summary>
  191. /// <param name="dto"></param>
  192. /// <returns></returns>
  193. [HttpPost]
  194. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  195. public async Task<IActionResult> GetVehicleLicense(VehicleLicenseOCRDto dto)
  196. {
  197. double strSize = 1024 * 1024 * 7;
  198. if (dto.picBase64.Length > strSize)
  199. {
  200. return Ok(JsonView("图片不能大于7M!"));
  201. }
  202. var vehicleLicenseData = TencentOCRTools.GetOCR((int)TencentOCR.TencentOCREnum.VehicleLicense, dto);
  203. if (vehicleLicenseData.Code != 0)
  204. {
  205. return Ok(JsonView(vehicleLicenseData.Msg));
  206. }
  207. if (vehicleLicenseData.Data == null)
  208. {
  209. return Ok(JsonView(vehicleLicenseData.Msg));
  210. }
  211. return Ok(JsonView(vehicleLicenseData.Data));
  212. }
  213. /// <summary>
  214. /// 房产证识别
  215. /// 获取房产证返回数据
  216. /// </summary>
  217. /// <param name="dto"></param>
  218. /// <returns></returns>
  219. [HttpPost]
  220. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  221. public async Task<IActionResult> GetPropOwnerCert(PropOwnerCertOCRDto dto)
  222. {
  223. double strSize = 1024 * 1024 * 7;
  224. if (dto.picBase64.Length > strSize)
  225. {
  226. return Ok(JsonView("图片不能大于7M!"));
  227. }
  228. var pcData = TencentOCRTools.GetOCR((int)TencentOCR.TencentOCREnum.PropOwnerCert, dto);
  229. if (pcData.Code != 0)
  230. {
  231. return Ok(JsonView(pcData.Msg));
  232. }
  233. if (pcData.Data == null)
  234. {
  235. return Ok(JsonView(pcData.Msg));
  236. }
  237. return Ok(JsonView(pcData.Data));
  238. }
  239. /// <summary>
  240. /// 结婚证识别
  241. /// 获取结婚证返回数据
  242. /// </summary>
  243. /// <param name="dto"></param>
  244. /// <returns></returns>
  245. [HttpPost]
  246. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  247. public async Task<IActionResult> GetMarriageLicense(MarriageLicenseOCRDto dto)
  248. {
  249. double strSize = 1024 * 1024 * 7;
  250. if (dto.picBase64.Length > strSize)
  251. {
  252. return Ok(JsonView("图片不能大于7M!"));
  253. }
  254. var mlData = TencentOCRTools.GetOCR((int)TencentOCR.TencentOCREnum.GeneralBasic, dto);
  255. if (mlData.Code != 0)
  256. {
  257. return Ok(JsonView(mlData.Msg));
  258. }
  259. if (mlData.Data == null)
  260. {
  261. return Ok(JsonView(mlData.Msg));
  262. }
  263. return Ok(JsonView(mlData.Data));
  264. }
  265. /// <summary>
  266. /// 统一信用代码识别
  267. /// 获取统一信用代码返回数据
  268. /// </summary>
  269. /// <param name="dto"></param>
  270. /// <returns></returns>
  271. [HttpPost]
  272. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  273. public async Task<IActionResult> GetUniformCreditCode(UniformCreditCodeOCRDto dto)
  274. {
  275. double strSize = 1024 * 1024 * 7;
  276. if (dto.picBase64.Length > strSize)
  277. {
  278. return Ok(JsonView("图片不能大于7M!"));
  279. }
  280. var gbData = TencentOCRTools.GetOCR((int)TencentOCR.TencentOCREnum.GeneralBasic, dto);
  281. if (gbData.Code != 0)
  282. {
  283. return Ok(JsonView(gbData.Msg));
  284. }
  285. if (gbData.Data == null)
  286. {
  287. return Ok(JsonView(gbData.Msg));
  288. }
  289. return Ok(JsonView(gbData.Data));
  290. }
  291. /// <summary>
  292. /// 护照识别(中国大陆地区护照)
  293. /// 获取护照识别(中国大陆地区护照)返回数据
  294. /// </summary>
  295. /// <param name="dto"></param>
  296. /// <returns></returns>
  297. [HttpPost]
  298. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  299. public async Task<IActionResult> GetPassport(PassportOCRDto dto)
  300. {
  301. double strSize = 1024 * 1024 * 7;
  302. if (dto.picBase64.Length > strSize)
  303. {
  304. return Ok(JsonView("图片不能大于7M!"));
  305. }
  306. var pData = TencentOCRTools.GetOCR((int)TencentOCR.TencentOCREnum.Passport, dto);
  307. if (pData.Code != 0)
  308. {
  309. return Ok(JsonView(pData.Msg));
  310. }
  311. if (pData.Data == null)
  312. {
  313. return Ok(JsonView(pData.Msg));
  314. }
  315. return Ok(JsonView(pData.Data));
  316. }
  317. /// <summary>
  318. /// 护照识别(港澳台地区及境外护照)
  319. /// 获取护照识别(港澳台地区及境外护照)返回数据
  320. /// </summary>
  321. /// <param name="dto"></param>
  322. /// <returns></returns>
  323. [HttpPost]
  324. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  325. public async Task<IActionResult> GetMLIDPassport(PassportOCRDto dto)
  326. {
  327. double strSize = 1024 * 1024 * 7;
  328. if (dto.picBase64.Length > strSize)
  329. {
  330. return Ok(JsonView("图片不能大于7M!"));
  331. }
  332. var mlidpData = TencentOCRTools.GetOCR((int)TencentOCR.TencentOCREnum.MLIDPassport, dto);
  333. if (mlidpData.Code != 0)
  334. {
  335. return Ok(JsonView(mlidpData.Msg));
  336. }
  337. if (mlidpData.Data == null)
  338. {
  339. return Ok(JsonView(mlidpData.Msg));
  340. }
  341. return Ok(JsonView(mlidpData.Data));
  342. }
  343. /// <summary>
  344. /// 名片识别
  345. /// 获取名片 返回数据
  346. /// </summary>
  347. /// <param name="dto"></param>
  348. /// <returns></returns>
  349. [HttpPost]
  350. [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
  351. public async Task<IActionResult> GetBusinessCard(BusinessCardOCRDto dto)
  352. {
  353. double strSize = 1024 * 1024 * 7;
  354. if (dto.picBase64.Length > strSize)
  355. {
  356. return Ok(JsonView("图片不能大于7M!"));
  357. }
  358. var mlidpData = TencentOCRTools.GetOCR((int)TencentOCR.TencentOCREnum.BusinessCard, dto);
  359. if (mlidpData.Code != 0)
  360. {
  361. return Ok(JsonView(mlidpData.Msg));
  362. }
  363. if (mlidpData.Data == null)
  364. {
  365. return Ok(JsonView(mlidpData.Msg));
  366. }
  367. return Ok(JsonView(mlidpData.Data));
  368. }
  369. }
  370. }