123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205 |
- using Abp.Extensions;
- using Hotline.Settings;
- using Hotline.Share.Enums.Snapshot;
- using Hotline.Snapshot;
- using Microsoft.Extensions.DependencyInjection;
- using SnapshotWinFormsApp.Application.Dtos;
- using SnapshotWinFormsApp.Application.Interfaces;
- using SnapshotWinFormsApp.Entities.NewHotline;
- using SnapshotWinFormsApp.Entities.OldHotline;
- using SnapshotWinFormsApp.Repository;
- using SnapshotWinFormsApp.Repository.Enum;
- using SnapshotWinFormsApp.Repository.Interfaces;
- using SnapshotWinFormsApp.Tools;
- using SqlSugar;
- using SqlSugar.Extensions;
- using System.ComponentModel;
- namespace SnapshotWinFormsApp.Application;
- [Description("市民红包审核发放记录")]
- public class RedPackAuditApplication : ImportApplicationBase<Flow04_ExpandClapEntity, RedPackAudit, RedPackAuditRecordDto>, IImportApplication
- {
- private readonly ISourceRepository<Flow04_ExpandClapEntity> _flow04ExpandClapRepository;
- private readonly ISelectRepository<User> _userRepo;
- private readonly List<User> Users;
- private readonly IList<SystemOrganize> Organizers;
- private readonly IList<SelectOrderNo> Orders;
- private readonly ITargetRepository<RedPackRecord> _redPackRecordRepository;
- private IList<ThirdAccount> ThirdAccounts;
- private readonly ITargetRepository<SnapshotPointsRecord> _pointsRecordRepository;
- private readonly SnapshotUserInfoApplication _snapshotUserInfoApplication;
- private readonly IList<SelectOrderNo> OrderNos;
- public RedPackAuditApplication(CreateInstanceInDto inDto) : base(inDto)
- {
- _userRepo = new SelectRepository<User>(inDto);
- Users = _userRepo.Queryable().ToList();
- _flow04ExpandClapRepository = new SourceRepository<Flow04_ExpandClapEntity>(inDto);
- Organizers = new SelectRepository<SystemOrganize>(inDto).Queryable().ToList();
- Orders = new SelectRepository<SelectOrderNo>(inDto)
- .Queryable()
- .Where(m => m.CreationTime >= inDto.StartTime && m.CreationTime <= inDto.EndTime)
- .ToList();
- _redPackRecordRepository = new TargetRepository<RedPackRecord>(inDto);
- ThirdAccounts = new TargetRepository<ThirdAccount>(inDto).Queryable().ToList();
- _pointsRecordRepository = new TargetRepository<SnapshotPointsRecord>(inDto);
- _snapshotUserInfoApplication = new SnapshotUserInfoApplication(inDto);
- OrderNos = new SelectRepository<SelectOrderNo>(inDto).Queryable()
- .Where(m => m.CreationTime >= inDto.StartTime && m.CreationTime <= inDto.EndTime)
- .ToList();
- }
- public override async Task<RedPackAudit> GetTargetAsync(RedPackAuditRecordDto source, CancellationToken token)
- {
- var audit = new RedPackAudit();
- audit.InitId();
- audit.OldId = source.Id;
- audit.Status = source.FEC_AuditFlag == null ? ERedPackAuditStatus.Pending
- : source.FEC_AuditFlag == "1" ? ERedPackAuditStatus.Agree : ERedPackAuditStatus.Refuse;
- audit.AuditRemark = source.FEC_AuditOpinion;
- audit.IsSend = source.FEC_ISRedEnvelopes.Trim() == "2";
- audit.AcutalAmount = 0;
- if (source.FER_Money != 0)
- {
- audit.AcutalAmount = source.FER_Money;
- }
- audit.ApprovedAmount = source.FEC_Money;
- audit.ShouldAmount = source.FEC_Money;
- audit.AuditOrgId = Organizers.FirstOrDefault(m => m.oldBmid.ToString() == source.FEC_AuditBMID)?.Id;
- audit.AuditOrgName = source.FEC_AuditBMName;
- audit.AuditId = Users.FirstOrDefault(m => m.OldUserId.ToString() == source.FEC_AuditUserID)?.Id;
- audit.AuditName = source.FEC_AuditUserName;
- audit.AuditTime = source.FEC_AuditTime.ObjToDate();
- var order = Orders.FirstOrDefault(m => m.No == source.FSH_Code.Trim());
- if (order == null)
- {
- Logs.Err($"审核缺少工单数据. OldAuditId: {source.Id}, No: {source.FSH_Code}");
- return null;
- }
- audit.OrderId = order.Id;
- audit.PhoneNumber = source.FSH_LinkTel;
- return audit;
- }
- public override async Task InsertAfterAsync(Action<string> log, RedPackAuditRecordDto item, RedPackAudit target, bool isEnd, CancellationToken token)
- {
- await InsertRecordAsync(log, item, target, isEnd, token);
- await InsertPointsAsync(log, item, target, isEnd, token);
- }
- public override async Task SubmitBluk()
- {
- _redPackRecordRepository.SubmitBluk();
- _pointsRecordRepository.SubmitBluk();
- }
- public async Task InsertPointsAsync(Action<string> log, RedPackAuditRecordDto item, RedPackAudit target, bool isEnd, CancellationToken token)
- {
- if (item.FSH_AddDate.ObjToDate() <= new DateTime(2024, 12, 31, 23, 59, 59)) return;
- if (item.FSH_IndustryName != "安全隐患" && item.FSH_IndustryName != "电气焊作业申报") return;
- if (item.FEC_AuditFlag != "1") return;
- var points = new SnapshotPointsRecord
- {
- UserId = await GetUserIdByOpenIdAsync(log, item.WFAT_WXOpenid, token),
- Source = EPointsSource.Audit,
- Points = 5,
- Direction = EPointsDirection.In,
- OrderId = target.Id,
- CreationTime = item.FSH_AddDate.ObjToDate()
- };
- var orderId = OrderNos.FirstOrDefault(m => m.No == item.FSH_Code.Trim());
- if (orderId == null)
- {
- throw new Exception("工单不存在");
- }
- points.OrderId = orderId.Id;
- if (points.UserId.IsNullOrEmpty())
- {
- var id = await GetUserIdByOpenIdAsync(log, item.WFAT_WXOpenid, token);
- return;
- }
- points.OldId = item.Id;
- _pointsRecordRepository.InsertBulk(points, isEnd);
- }
- public override async Task EndTaskAsync(Action<string> log, CancellationToken token)
- {
- _pointsRecordRepository.SubmitBluk();
- }
- public async Task InsertRecordAsync(Action<string> log, RedPackAuditRecordDto item, RedPackAudit target, bool isEnd, CancellationToken token)
- {
- var record = new RedPackRecord();
- record.InitId();
- record.Id = item.Id;
- record.OrderId = target.OrderId;
- record.RedPackAuditId = target.Id;
- record.Amount = item.FER_Money;
- record.PeopleType = EReadPackUserType.Citizen;
- record.Name = item.FSH_LinkName;
- record.PhoneNumber = item.FER_Tel;
- record.WXOpenId = item.FER_openid;
- record.PickupStatus = ERedPackPickupStatus.Unreceived;
- if (item.FEC_ISRedEnvelopes == "2")
- {
- record.DistributionState = EReadPackSendStatus.Successful;
- record.PickupStatus = ERedPackPickupStatus.Received;
- }
- if (item.FEC_ClapType == "2")
- {
- record.FailCase = ERedPackPickupFailCase.Excuse;
- record.DistributionState = EReadPackSendStatus.Fail;
- record.PickupStatus = ERedPackPickupStatus.Excuse;
- record.Remark = "婉拒红包";
- }
- if (item.FEC_ClapType == "1")
- {
- record.FailCase = ERedPackPickupFailCase.NotContact;
- record.DistributionState = EReadPackSendStatus.Fail;
- record.Remark = "无法联系";
- }
- record.Remark = item.FER_Remarks;
- record.No = item.FSH_Code.Trim();
- _redPackRecordRepository.InsertBulk(record, isEnd);
- }
- public override ISugarQueryable<RedPackAuditRecordDto> GetSourceList(string key = "")
- {
- var query = _flow04ExpandClapRepository.Queryable()
- .LeftJoin<Flow03_Search>((m, order) => m.FEC_FlowID == order.Id)
- .LeftJoin<Flow04_ExpandRed_SMEntity>((m , order, record) => m.FEC_FlowID == record.FER_FlowID)
- .LeftJoin<Web09_FlowAcceptEntity>((m, order, record, user) => user.WFAT_SyncFlowID == order.Id)
- .Where((m, order) => m.FEC_AuditFlag_wgy != "1" && SqlFunc.ToDate(order.FSH_AddDate) >= _instance.StartTime && SqlFunc.ToDate(order.FSH_AddDate) <= _instance.EndTime)
- .Select((m, order, record, user) => new RedPackAuditRecordDto
- {
- FSH_AddDate = SqlFunc.ToDate(order.FSH_AddDate),
- FSH_Code = order.FSH_Code.Trim(),
- FSH_LinkTel = order.FSH_LinkTel,
- FSH_LinkName = order.FSH_LinkName
- }, true);
- var sql = query.ToSqlString();
- return query;
- }
- public async Task<string> GetUserIdByOpenIdAsync(Action<string> log, string openId, CancellationToken token)
- {
- if (openId.IsNullOrEmpty()) return null;
- var user = ThirdAccounts.FirstOrDefault(m => m.OpenId == openId);
- if (user != null) return user.ExternalId;
- var newThirdAccounts = await _snapshotUserInfoApplication.InsertByOpenIdAsync(log, openId, token);
- foreach (var item in newThirdAccounts)
- {
- ThirdAccounts.Add(item);
- }
- user = ThirdAccounts.FirstOrDefault(m => m.OpenId == openId);
- if (user != null) return user.ExternalId;
- throw new Exception($"未找到用户: {openId}");
- }
- }
|