SmsCodeLogService.cs 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. using Infrastructure;
  2. using Infrastructure.Attribute;
  3. using ZR.Infrastructure.Helper;
  4. using ZR.Model;
  5. using ZR.Model.Dto;
  6. using ZR.Model.Models;
  7. using ZR.Repository;
  8. using ZR.ServiceCore.Model;
  9. namespace ZR.ServiceCore.Services
  10. {
  11. /// <summary>
  12. /// 短信验证码记录Service业务层处理
  13. /// </summary>
  14. [AppService(ServiceType = typeof(ISmsCodeLogService), ServiceLifetime = LifeTime.Transient)]
  15. public class SmsCodeLogService : BaseService<SmsCodeLog>, ISmsCodeLogService
  16. {
  17. /// <summary>
  18. /// 查询短信验证码记录列表
  19. /// </summary>
  20. /// <param name="parm"></param>
  21. /// <returns></returns>
  22. public PagedInfo<SmsCodeLogDto> GetList(SmscodeLogQueryDto parm)
  23. {
  24. var predicate = Expressionable.Create<SmsCodeLog>();
  25. predicate = predicate.AndIF(parm.Userid != null, it => it.Userid == parm.Userid);
  26. predicate = predicate.AndIF(parm.PhoneNum != null, it => it.PhoneNum == parm.PhoneNum);
  27. predicate = predicate.AndIF(parm.BeginAddTime == null, it => it.AddTime >= DateTime.Now.ToShortDateString().ParseToDateTime());
  28. predicate = predicate.AndIF(parm.BeginAddTime != null, it => it.AddTime >= parm.BeginAddTime);
  29. predicate = predicate.AndIF(parm.EndAddTime != null, it => it.AddTime <= parm.EndAddTime);
  30. predicate = predicate.AndIF(parm.SendType != null, it => it.SendType == parm.SendType);
  31. var response = Queryable()
  32. //.OrderBy("Id desc")
  33. .Where(predicate.ToExpression())
  34. .ToPage<SmsCodeLog, SmsCodeLogDto>(parm);
  35. return response;
  36. }
  37. /// <summary>
  38. /// 获取详情
  39. /// </summary>
  40. /// <param name="Id"></param>
  41. /// <returns></returns>
  42. public SmsCodeLog GetInfo(long Id)
  43. {
  44. var response = Queryable()
  45. .Where(x => x.Id == Id)
  46. .First();
  47. return response;
  48. }
  49. /// <summary>
  50. /// 添加短信验证码记录
  51. /// </summary>
  52. /// <param name="model"></param>
  53. /// <returns></returns>
  54. public SmsCodeLog AddSmscodeLog(SmsCodeLog model)
  55. {
  56. model.AddTime = Context.GetDate();
  57. var smsCode = RandomHelper.GenerateNum(6);
  58. var smsContent = $"验证码{smsCode},有效期10分钟。";
  59. var oneMinus = Queryable().Any(f => f.PhoneNum == model.PhoneNum && SqlFunc.DateDiff(DateType.Minute, f.AddTime, model.AddTime) <= 1);
  60. if (oneMinus)
  61. {
  62. throw new CustomException("请稍后再试");
  63. }
  64. var oneMinusIP = Queryable().Any(f => f.UserIP == model.UserIP && SqlFunc.DateDiff(DateType.Minute, f.AddTime, model.AddTime) <= 1);
  65. if (oneMinusIP)
  66. {
  67. throw new CustomException("请稍后再试");
  68. }
  69. model.SmsCode = smsCode;
  70. model.SmsContent = smsContent;
  71. model.Id = Context.Insertable(model).ExecuteReturnSnowflakeId();
  72. //TODO 发送验证码
  73. CacheService.SetPhoneCode(model.PhoneNum.ToString(), smsCode);
  74. return model;
  75. }
  76. }
  77. }