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;
|
|
/// <summary>
|
/// 微信转账队列处理
|
/// </summary>
|
[Subscribe(InitQMessages.WxTransferMSQ)]
|
public async void WxTransferMSQInit(string msg)
|
{
|
_ezCoreNetRedisService = App.GetService<IEzCoreNetRedisService>();
|
_wecharPayServicecs = App.GetService<IWecharPayServicecs>();
|
_mapper = App.GetService<IMapper>();
|
|
var userdata= JsonConvert.DeserializeObject<WxTransferMsqModels>(msg);
|
if( userdata != null ) {
|
|
throw Oops.Oh($"队列WxTransferMSQInit 处理失败,没有获取到用户信息+++++++++{msg}");
|
}
|
var UserRs = new BaseRepository<User>();
|
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<UserWorker>();
|
|
|
var UserTiXianDetailwork = new BaseRepository<UserTiXianDetail>();
|
|
var WeChatTransferOrderwork = new BaseRepository<WeChatTransferOrder>();
|
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<WeChatTransferItem>()
|
|
|
};
|
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<CreateTransferBatchRequest>(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<IEzCoreNetRedisService>();
|
_wecharPayServicecs = App.GetService<IWecharPayServicecs>();
|
_mapper = App.GetService<IMapper>();
|
|
|
var WeChatTransferOrderwork = new BaseRepository<WeChatTransferOrder>();
|
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<CreateTransferBatchRequest>(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<IEzCoreNetRedisService>();
|
_wecharPayServicecs = App.GetService<IWecharPayServicecs>();
|
_mapper = App.GetService<IMapper>();
|
|
|
var WeChatTransferOrderwork = new BaseRepository<WeChatTransferOrder>();
|
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<CreateTransferBatchRequest>(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;
|
}
|
|
|
}
|
}
|
}
|