using cylsg.Core; using cylsg.Model.TransferOrder; using cylsg.Model.UserModel; using cylsg.utility.Extend; using EzCoreNet.Redis; using EzInitqMessageDef; using EzWechat; using Furion; using Furion.DatabaseAccessor; using Furion.FriendlyException; using Furion.Logging; using InitQ.Abstractions; using InitQ.Attributes; using Mapster; using MapsterMapper; using Newtonsoft.Json; using SKIT.FlurlHttpClient.Wechat.TenpayV3.Models; using SqlSugar.Extensions; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace EzInitQ { public class PayServiceMessageQ: IRedisSubscribe { private IEzCoreNetRedisService _ezCoreNetRedisService; private IWecharPayServicecs _wecharPayServicecs; private IMapper _mapper; /// /// 微信转账队列处理 /// [Subscribe(InitQMessages.WxTransferMSQ)] public async void WxTransferMSQInit(string msg) { _ezCoreNetRedisService = App.GetService(); _wecharPayServicecs = App.GetService(); _mapper = App.GetService(); var userdata= JsonConvert.DeserializeObject(msg); if( userdata != null ) { throw Oops.Oh($"队列WxTransferMSQInit 处理失败,没有获取到用户信息+++++++++{msg}"); } var UserRs = new BaseRepository(); var user = await UserRs.GetByIdAsync(userdata.UserID); if(user !=null) { throw Oops.Oh($"队列WxTransferMSQInit 处理失败,没有获取到用户信息++++++++{msg}"); } if(string.IsNullOrEmpty( user.WxOpenId)) { throw Oops.Oh($"队列WxTransferMSQInit 处理失败,没有获取到openID+++++++++{msg}"); } var uWorkRs = new BaseRepository(); var UserTiXianDetailwork = new BaseRepository(); var WeChatTransferOrderwork = new BaseRepository(); var uWork = await uWorkRs.GetFirstAsync(x=>x.UserId==user.Id); if((uWork != null)& ((uWork.TiXianZonge - uWork.YiTiXianJine) > userdata.money)) { var TransferOrder = new WeChatTransferOrder { CreateBy = uWork.UserId.ToString(), CreateTime = DateTime.Now, BatchId = _ezCoreNetRedisService.Get32sn(), OutBatchNumber = _ezCoreNetRedisService.Get32sn(), Remake = "川印工资支付", TransferDetailList = new List() }; try { //满足条件,发起支付 await UserTiXianDetailwork.AsTenant().BeginTranAsync(); var moneylist= userdata.money; if(moneylist<=0.3m) { //放弃处理,低于0.3毛不能发起转账 throw Oops.Oh($"队列WxTransferMSQInit 处理失败,转账金额低于0.3元+++++++++{msg}"); } var maxPayItem = Convert.ToDecimal(App.Configuration["WechartPay:PayMoneyMax"].toInt()); ; while ((moneylist > maxPayItem)) { TransferOrder.TransferDetailList.Add(new WeChatTransferItem { CreateBy = uWork.UserId.ToString(), CreateTime = TransferOrder.CreateTime, IsEn = true, OpenId = user.WxOpenId, OutDetailNumber = _ezCoreNetRedisService.Get32sn(), TransferAmount = (int )maxPayItem * 100, TransferRemark="川印工资支付", }); moneylist -= maxPayItem; } if (moneylist <= 0.3m) { //如果这里低于0.3毛,将社区预检,留下次处理 userdata.money -= moneylist; } else { TransferOrder.TransferDetailList.Add(new WeChatTransferItem { CreateBy = uWork.UserId.ToString(), CreateTime = TransferOrder.CreateTime, IsEn = true, OpenId = user.WxOpenId, OutDetailNumber = _ezCoreNetRedisService.Get32sn(), TransferAmount = (int)(moneylist * 100), TransferRemark = "川印工资支付", }); } TransferOrder = await WeChatTransferOrderwork.AsSugarClient().InsertNav(TransferOrder).Include(x=>x.TransferDetailList).ExecuteReturnEntityAsync(); await UserTiXianDetailwork.InsertAsync(new UserTiXianDetail { CreateBy = uWork.UserId.ToString(), CreateTime = DateTime.Now, UserId = user.Id, ZhiChuShouRu= 0, YiTiXianJine=userdata.money, WeChatTransferOrderID= TransferOrder.Id, }); //钱包余额调整 uWork.YiTiXianJine += userdata.money; uWork.UpDataBy = uWork.UserId.ToString(); uWork.UpDataTime = DateTime.Now; await uWorkRs.UpdateAsync(uWork); await UserTiXianDetailwork.AsTenant().CommitTranAsync(); } catch (Exception) { await UserTiXianDetailwork.AsTenant().RollbackTranAsync(); throw; } // 发起支付 var requit = _mapper.Map(TransferOrder); var ret= await _wecharPayServicecs.Transfer(requit); if (ret.IsSuccessful()) { var retdata= await WeChatTransferOrderwork.GetByIdAsync(TransferOrder.Id); retdata.BatchId = ret.BatchId; retdata.BatchStatus= ret.BatchStatus; retdata.UpDataBy = "微信付款请求之后"; retdata.UpDataTime= DateTime.Now; await WeChatTransferOrderwork.UpdateAsync(retdata); } else throw Oops.Oh($"微信请求付款失败+++++++++++++{ret.ToString()}+++++++++++msg{msg}"); } } [Subscribe(InitQMessages.WxTransfer)] public async void WxTransfer(string msg) { _ezCoreNetRedisService = App.GetService(); _wecharPayServicecs = App.GetService(); _mapper = App.GetService(); var WeChatTransferOrderwork = new BaseRepository(); var TransferOrder = await WeChatTransferOrderwork.AsQueryable().Includes(x => x.TransferDetailList).Where(x=>x.Id==msg.toInt()).FirstAsync(); if(TransferOrder == null) { Log.Error($"WxTransfer微信支付处理 失败,原因是没有找到TransferOrder ,传递Id为{msg}"); return; } if(!string.IsNullOrEmpty(TransferOrder.BatchStatus)) { return; } // 发起支付 var requit = _mapper.Map(TransferOrder); requit.AppId = App.Configuration["WechatAPP:AppId"]; requit.BatchName = "小镇临时工工资转账"; requit.BatchRemark = "川印临时工工资,操过200的多笔支付"; var ret = await _wecharPayServicecs.Transfer(requit); if (ret.IsSuccessful()) { var retdata = await WeChatTransferOrderwork.GetByIdAsync(TransferOrder.Id); retdata.BatchId = ret.BatchId; retdata.BatchStatus = ret.BatchStatus; retdata.UpDataBy = "微信付款请求之后"; retdata.UpDataTime = DateTime.Now; await WeChatTransferOrderwork.UpdateAsync(retdata); } else { var retdata = await WeChatTransferOrderwork.GetByIdAsync(TransferOrder.Id); retdata.ErrorCode = ret.ErrorCode; retdata.ErrorMsg = ret.ErrorMessage; retdata.BatchStatus = ret.BatchStatus; retdata.UpDataBy = "微信付款请求之后"; retdata.UpDataTime = DateTime.Now; await WeChatTransferOrderwork.UpdateAsync(retdata); Log.Error($"WxTransfer微信支付处理 失败,传递Id为{msg} 错误原因:{retdata.ErrorMsg}"); return; } } [Subscribe(InitQMessages.WxTransferAg)] public async void WxTransferAg(string msg) { _ezCoreNetRedisService = App.GetService(); _wecharPayServicecs = App.GetService(); _mapper = App.GetService(); var WeChatTransferOrderwork = new BaseRepository(); var TransferOrder = await WeChatTransferOrderwork.AsQueryable().Includes(x => x.TransferDetailList).Where(x => x.Id == msg.toInt()).FirstAsync(); if (TransferOrder == null) { Log.Error($" 再次调用WxTransfer微信支付处理 失败,原因是没有找到TransferOrder ,传递Id为{msg}"); return; } if (!string.IsNullOrEmpty(TransferOrder.BatchStatus)) { return; } // 发起支付 var requit = _mapper.Map(TransferOrder); requit.AppId = App.Configuration["WechatAPP:AppId"]; requit.BatchName = "小镇临时工工资转账"; requit.BatchRemark = "川印临时工工资,操过200的多笔支付"; var ret = await _wecharPayServicecs.Transfer(requit); if (ret.IsSuccessful()) { var retdata = await WeChatTransferOrderwork.GetByIdAsync(TransferOrder.Id); retdata.BatchId = ret.BatchId; retdata.BatchStatus = ret.BatchStatus; retdata.UpDataBy = "再次微信付款请求"; retdata.UpDataTime = DateTime.Now; await WeChatTransferOrderwork.UpdateAsync(retdata); } else { var retdata = await WeChatTransferOrderwork.GetByIdAsync(TransferOrder.Id); retdata.ErrorCode = ret.ErrorCode; retdata.ErrorMsg = ret.ErrorMessage; retdata.BatchStatus = ret.BatchStatus; retdata.UpDataBy = "再微信付款请求"; retdata.UpDataTime = DateTime.Now; await WeChatTransferOrderwork.UpdateAsync(retdata); Log.Error($"WxTransfer微信支付处理 失败,传递Id为{msg} 错误原因:{retdata.ErrorMsg}"); return; } } } }