VerificationCodeService.cs 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. using GxPress.Service.Interface.VerificationCode;
  2. using GxPress.Repository.Interface.VerificationCode;
  3. using System.Threading.Tasks;
  4. using System;
  5. using Datory;
  6. using GxPress.Request.App.VerificationCode;
  7. namespace GxPress.Service.Implement.VerificationCode
  8. {
  9. public class VerificationCodeService : IVerificationCodeService
  10. {
  11. private readonly IVerificationCodeRepository verificationCodeRepository;
  12. public VerificationCodeService(IVerificationCodeRepository verificationCodeRepository)
  13. {
  14. this.verificationCodeRepository = verificationCodeRepository;
  15. }
  16. /// <summary>
  17. /// 生成验证码
  18. /// </summary>
  19. /// <returns></returns>
  20. public async Task<string> GetCodeAsync(int userId)
  21. {
  22. var r1 = new Random();
  23. var code = r1.Next(100000, 999999);
  24. var entity = new Entity.VerificationCode.VerificationCode();
  25. entity.UserId = userId;
  26. entity.TypeId = 1;
  27. entity.ExpireTime = 5;
  28. entity.Code = code;
  29. entity.IsDisable = false;
  30. await verificationCodeRepository.InsertAsync(entity);
  31. return code.ToString();
  32. }
  33. /// <summary>
  34. /// 生成验证码
  35. /// </summary>
  36. /// <returns></returns>
  37. public async Task<bool> ConfirmationCodeAsync(VerificationCodeRequest request)
  38. {
  39. var verificationCode = await verificationCodeRepository.GetAsync(Q.Where(nameof(Entity.VerificationCode.VerificationCode.Code), request.Code).Where(nameof(Entity.VerificationCode.VerificationCode.IsDisable), false).OrderByDesc(nameof(Entity.VerificationCode.VerificationCode.CreatedDate)));
  40. if (verificationCode == null)
  41. throw new Exception("不存在");
  42. var createdDate = Convert.ToDateTime(verificationCode.CreatedDate).AddMinutes(verificationCode.ExpireTime);
  43. if (createdDate < DateTime.Now)
  44. {
  45. throw new Exception("验证码过期");
  46. }
  47. verificationCode.IsDisable = true;
  48. await verificationCodeRepository.UpdateAsync(verificationCode);
  49. return true;
  50. }
  51. /// <summary>
  52. /// 持久连接验证码
  53. /// </summary>
  54. /// <returns></returns>
  55. public async Task<bool> LastingConfirmationCodeAsync(VerificationCodeRequest request)
  56. {
  57. var userVerificationCode = await verificationCodeRepository.GetAsync(Q.Where(nameof(Entity.VerificationCode.VerificationCode.Code), request.Code).OrderByDesc(nameof(Entity.VerificationCode.VerificationCode.CreatedDate)));
  58. if (userVerificationCode == null)
  59. return false;
  60. var newUserVerificationCode = await verificationCodeRepository.GetAsync(Q.Where(nameof(Entity.VerificationCode.VerificationCode.UserId), userVerificationCode.UserId).OrderByDesc(nameof(Entity.VerificationCode.VerificationCode.CreatedDate)));
  61. if (!userVerificationCode.Code.Equals(newUserVerificationCode.Code))
  62. return false;
  63. var createdDate = Convert.ToDateTime(userVerificationCode.CreatedDate).AddMinutes(userVerificationCode.ExpireTime);
  64. if (createdDate < DateTime.Now)
  65. {
  66. return false;
  67. }
  68. return true;
  69. }
  70. }
  71. }