InviteLogApplication.cs 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. using Abp.Collections.Extensions;
  2. using Hotline.Snapshot;
  3. using Mapster;
  4. using Newtonsoft.Json.Linq;
  5. using SnapshotWinFormsApp.Application.Dtos;
  6. using SnapshotWinFormsApp.Application.Interfaces;
  7. using SnapshotWinFormsApp.Entities.NewHotline;
  8. using SnapshotWinFormsApp.Entities.OldHotline;
  9. using SnapshotWinFormsApp.Repository;
  10. using SnapshotWinFormsApp.Repository.Interfaces;
  11. using SqlSugar;
  12. using System;
  13. using System.Collections.Generic;
  14. using System.ComponentModel;
  15. using System.Linq;
  16. using System.Linq.Dynamic.Core.Tokenizer;
  17. using System.Text;
  18. using System.Threading.Tasks;
  19. namespace SnapshotWinFormsApp.Application;
  20. [Description("邀请码记录")]
  21. public class InviteLogApplication : ImportApplicationBase<SSP_InviteLogEntity, InviteCodeRecord, string, OldInviteLogEntity>, IImportApplication
  22. {
  23. private readonly ITargetRepository<InviteCode> _newInviteCodeRepo;
  24. private readonly ITargetRepository<InviteCodeRecord> _newInviteLogRepo;
  25. private readonly ITargetRepository<Citizen> _userInfoRepo;
  26. private readonly ITargetRepository<ThirdAccount> _thirdAccountRepo;
  27. private IList<InviteCode> invities;
  28. private IList<ThirdAccount> thirdAccounts;
  29. public InviteLogApplication(CreateInstanceInDto inDto) : base(inDto)
  30. {
  31. _newInviteCodeRepo = new TargetRepository<InviteCode>(inDto);
  32. _thirdAccountRepo = new TargetRepository<ThirdAccount>(inDto);
  33. invities = _newInviteCodeRepo.GetAll();
  34. thirdAccounts = _thirdAccountRepo.GetAll();
  35. }
  36. public override ISugarQueryable<OldInviteLogEntity> GetSourceList(CreateInstanceInDto inDto)
  37. {
  38. return _sugarClient.Queryable<SSP_InviteLogEntity>()
  39. .LeftJoin<SSP_InviteEntity>((log, invite) => log.SSPI_CodeID == invite.SIC_Byte)
  40. .LeftJoin<WeChatUserEntity>((log, invite, user) => user.WUR_Openid == log.SSPI_Openid)
  41. .Select((log, invite, user) => new OldInviteLogEntity
  42. {
  43. Id = log.Id,
  44. Name = user.WUR_WebUserName,
  45. OrgName = invite.SIC_BMName,
  46. InviteCode = log.SSPI_Code,
  47. WXOpenId = log.SSPI_Openid,
  48. PhoneNumber = user.WUR_PhoneNum,
  49. });
  50. }
  51. public override async Task<bool> HasOldDataAsync(string tableName, OldInviteLogEntity item, CancellationToken token)
  52. {
  53. return await _newInviteLogRepo.Queryable().AnyAsync(m => m.Id == item.Id, token);
  54. }
  55. public override async Task<InviteCodeRecord> GetTargetAsync(OldInviteLogEntity source, CancellationToken token)
  56. {
  57. var target = source.Adapt<InviteCodeRecord>();
  58. target.OrgId = invities.FirstOrDefault(m => m.OrgName == source.OrgName)?.Id ?? string.Empty;
  59. return await Task.FromResult(target);
  60. }
  61. public override async Task InsertAfterAsync(Action<string> log, OldInviteLogEntity item, InviteCodeRecord target, CancellationToken token)
  62. {
  63. var userId = thirdAccounts.Where(m => m.OpenId == item.WXOpenId).Select(m => m.ExternalId).FirstOrDefault();
  64. if (userId.IsNullOrEmpty()) return;
  65. await _userInfoRepo.Updateable()
  66. .SetColumns(m => m.InvitationCode, item.InviteCode)
  67. .Where(m => m.Id == userId)
  68. .ExecuteCommandAsync(token);
  69. }
  70. }