移动系统liao
2024-10-14 18a4451e5b7bf8f7f6a260796acb24adb3b2ccda
修正提现逻辑,实现重新建单支付 API
4个文件已修改
641 ■■■■■ 已修改文件
cylsg/EzInitQ/PayServiceMessageQ.cs 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cylsg/EzJob/WeChatJob.cs 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cylsg/cylsg.Application/Transfer/UserTransfer.cs 585 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cylsg/cylsg.Model/TransferOrder/WeChartTransferOrder.cs 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cylsg/EzInitQ/PayServiceMessageQ.cs
@@ -175,7 +175,9 @@
                    retdata.BatchStatus= ret.BatchStatus;
                    retdata.UpDataBy = "微信付款请求之后";
                     retdata.UpDataTime= DateTime.Now;
                      await WeChatTransferOrderwork.UpdateAsync(retdata);
                    retdata.ErrorMsg = ret.ErrorMessage;
                    retdata.ErrorCode = ret.ErrorCode;
                    await WeChatTransferOrderwork.UpdateAsync(retdata);
                }
                else
                    throw Oops.Oh($"微信请求付款失败+++++++++++++{ret.ToString()}+++++++++++msg{msg}");
@@ -228,6 +230,9 @@
                retdata.BatchStatus = ret.BatchStatus;
                retdata.UpDataBy = "微信付款请求之后";
                retdata.UpDataTime = DateTime.Now;
                retdata.ErrorMsg = ret.ErrorMessage;
                retdata.ErrorCode = ret.ErrorCode;
                await WeChatTransferOrderwork.UpdateAsync(retdata);
            }
            else
@@ -253,7 +258,7 @@
            _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).Includes(x=>x.user).Where(x => x.Id == msg.toInt()).FirstAsync();
@@ -263,11 +268,7 @@
                return;
            }
            if (!string.IsNullOrEmpty(TransferOrder.BatchStatus))
            {
                return;
            }
            var UserWork = new BaseRepository<UserWorker>();
            var userWk = await UserWork.GetFirstAsync(x => x.UserId == TransferOrder.UserID);
            if (userWk == null)
@@ -286,6 +287,8 @@
            requit.BatchRemark = $"{TransferOrder.user.ItCode}{userWk.name?.Substring(0,2)}{userWk.IdCode}";
            var ret = await _wecharPayServicecs.Transfer(requit);
            if (ret.IsSuccessful())
            {
                var retdata = await WeChatTransferOrderwork.GetByIdAsync(TransferOrder.Id);
@@ -293,8 +296,8 @@
                retdata.BatchStatus = ret.BatchStatus;
                retdata.UpDataBy = "再次微信付款请求";
                retdata.UpDataTime = DateTime.Now;
                retdata.ErrorMsg = null;
                retdata.ErrorCode = null;
                retdata.ErrorMsg = ret.ErrorMessage;
                retdata.ErrorCode = ret.ErrorCode;
                await WeChatTransferOrderwork.UpdateAsync(retdata);
            }
            else
@@ -307,6 +310,9 @@
                retdata.UpDataTime = DateTime.Now;
                await WeChatTransferOrderwork.UpdateAsync(retdata);
                Log.Error($"WxTransfer微信支付处理 失败,传递Id为{msg} 错误原因:{retdata.ErrorMsg}");
                return;
            }
cylsg/EzJob/WeChatJob.cs
@@ -33,7 +33,10 @@
            }
            var WeChatTransferOrderRs = new BaseRepository<WeChatTransferOrder>();
            var OderList = await WeChatTransferOrderRs.AsQueryable().Includes(x=>x.TransferDetailList).Where(x => (x.BatchId != null && x.BatchId != "")&&(x.BatchStatus==null|| x.BatchStatus == "ACCEPTED" || x.BatchStatus == "PROCESSING")).ToListAsync();
            var OderList = await WeChatTransferOrderRs.AsQueryable().Includes(x=>x.TransferDetailList).Where(x => (x.BatchId != null && x.BatchId != "")&&(
            (x.BatchStatus==null&&x.ErrorCode!= "INVALID_REQUEST") //代表支付时立即报错,不予查询
            || x.BatchStatus == "ACCEPTED" || x.BatchStatus == "PROCESSING")
            && x.IsSetOK==false).ToListAsync();
            foreach( var o in OderList )
            {
@@ -60,6 +63,8 @@
                            o.FailNum = ret.TransferBatch.FailNumber;
                            o.SuccessNum = ret.TransferBatch.SuccessNumber;
                            o.SuccessAmount= ret.TransferBatch.SuccessAmount;
                            o.ErrorCode = ret.ErrorCode;
                            o.ErrorMsg = ret.ErrorCode;
                            foreach (var item in o.TransferDetailList)
                            {
                                var del =ret.TransferDetailList.Where(x=>x.OutDetailNumber==item.OutDetailNumber).FirstOrDefault();
cylsg/cylsg.Application/Transfer/UserTransfer.cs
@@ -81,7 +81,7 @@
                    }
                    if (string.IsNullOrEmpty(user.WxOpenId))
                    {
                        throw Oops.Oh($"用户微信OpenID确实");
                        throw Oops.Oh($"用户微信确认失败");
                    }
                    var uw = await rs.GetFirstAsync(x => x.UserId == userid);
                    if (uw == null)
@@ -256,7 +256,7 @@
        /// </summary>
        [AllowAnonymous]
        [HttpPost]
        //[ApiExplorerSettings(IgnoreApi = true)]
        [ApiExplorerSettings(IgnoreApi = true)]
        public async Task<TransferOderOut> GetTransferOder(SearchTransferOder param)
        {
@@ -280,15 +280,19 @@
                    SearchList= SearchList.And(x => x.BatchStatus != lis);
                }
            }
            if(param.IsSetOK!=null)
            {
                SearchList = SearchList.And(x =>x.IsSetOK==param.IsSetOK);
            }
            if (param.HasSendOk == false)
                SearchList= SearchList.And(x => x.FailNum >0||x.BatchStatus!= "FINISHED");
            else
                //有一笔大余0 的视为失败
                SearchList= SearchList.And(x => x.FailNum ==0&&x.BatchStatus== "FINISHED");
                SearchList= SearchList.And(x => x.FailNum ==0&&x.BatchStatus=="FINISHED");
             var data=await WeChatTransferOrderwork.AsQueryable().Where(SearchList).Select(x=>new WeChatTransferOrder
             {
               BatchRemark= SqlFunc.Subqueryable<UserWorker>().Where(uw=>uw.UserId==x.UserID).Select(uw => uw.name+ uw.IdCode)   
             }).ToPageListAsync(pageModel.PageIndex, pageModel.PageSize,pageModel.TotalCount);
             },true).ToPageListAsync(pageModel.PageIndex, pageModel.PageSize,pageModel.TotalCount);
            //var data = await WeChatTransferOrderwork.GetPageListAsync(SearchList, pageModel);
              
            return new TransferOderOut
@@ -328,6 +332,538 @@
        }
        /// <summary>
        /// 重新建单 支付
        /// </summary>
        /// <param name="id"> 订单ID</param>
        /// <returns></returns>
        [AllowAnonymous]
        [HttpGet]
        [ApiExplorerSettings(IgnoreApi = true)]
        public async Task ReSendCreadTransferMoney([FromQuery] string id)
        {
            var itmsRes = new BaseRepository<WeChatTransferOrder>();
            if (string.IsNullOrEmpty(id))
                throw Oops.Oh("参数错误");
          var TOrder =  await itmsRes.GetByIdAsync(id.toInt());
            if (TOrder == null)
            {
                throw Oops.Oh("没有订单需要处理");
            }
            if(TOrder.IsSetOK ==true)
            {
                throw Oops.Oh("已经处理不再处理");
            }
           if(!(TOrder.ErrorCode== "INVALID_REQUEST"&&TOrder.ErrorMsg== "对应单号已超出重试期,请查单确认后决定是否换单请求"))
            {
                //不满足冲洗支付要求
                throw Oops.Oh("不满足重新支付要求");
            }
            var rs = new BaseRepository<UserWorker>();
            var userid = TOrder.UserID;
            var Money =  (TOrder.FailAmount??0)/100m;
            if(Money<0.03m)
            {
                throw Oops.Oh("失败金额不足0.3元不能再次发起支付");
            }
            if (await _redisService.TryLock(StaticStringDef.TransferMoneyLockKey + userid.ToString(), 300))
            {
                try
                {
                    var UserRs = new BaseRepository<User>();
                    var user = await UserRs.GetByIdAsync(userid);
                    if (user == null)
                    {
                        throw Oops.Oh($"没有找到用户");
                    }
                    if (string.IsNullOrEmpty(user.WxOpenId))
                    {
                        throw Oops.Oh($"用户微信OpenID确认");
                    }
                    var uw = await rs.GetFirstAsync(x => x.UserId == userid);
                    if (uw == null)
                    {
                        throw Oops.Oh("该用户没有收入");
                    }
                    var totle = _redisService.Get<decimal>(StaticStringDef.TransferMoneyManKey + userid.ToString());
                    if (totle + Money > 2000)
                    {
                        throw Oops.Oh("提现金额不可超出2000");
                    }
                    var UserTiXianDetailwork = new BaseRepository<UserTiXianDetail>();
                    var WeChatTransferOrderwork = new BaseRepository<WeChatTransferOrder>();
                    if ((uw != null) && (((uw.TiXianZonge ?? 0) - (uw.YiTiXianJine ?? 0)) >= Money))
                    {
                        //满足条件,发起支付
                        var TransferOrder = new WeChatTransferOrder
                        {
                            CreateBy = uw.UserId.ToString(),
                            CreateTime = DateTime.Now,
                            //  BatchId = _redisService.Get32sn(),
                            OutBatchNumber = _redisService.Get32sn(),
                            Remake = "川印工资支付",
                            TransferDetailList = new List<WeChatTransferItem>(),
                            UserID = uw.UserId,
                            RemakeDes = "补充发起支付" ,
                            WeChatTransferOrderPrId = TOrder.Id
                        };
                        try
                        {
                            await UserTiXianDetailwork.AsTenant().BeginTranAsync();
                            var moneylist = Money;
                            var maxPayItem = Convert.ToDecimal(App.Configuration["WechartPay:PayMoneyMax"].toInt()); ;
                            while ((moneylist > maxPayItem))
                            {
                                TransferOrder.TransferDetailList.Add(new WeChatTransferItem
                                {
                                    CreateBy = uw.UserId.ToString(),
                                    CreateTime = TransferOrder.CreateTime,
                                    IsEn = true,
                                    OpenId = user.WxOpenId,
                                    OutDetailNumber = _redisService.Get32sn(),
                                    TransferAmount = (int)maxPayItem * 100,
                                    TransferRemark = "川印工资支付"
                                });;
                                moneylist -= maxPayItem;
                            }
                            if (moneylist <= 0.3m)
                            {
                                //如果这里低于0.3毛,将社区预检,留下次处理
                                Money -= moneylist;
                            }
                            else
                            {
                                TransferOrder.TransferDetailList.Add(new WeChatTransferItem
                                {
                                    CreateBy = uw.UserId.ToString(),
                                    CreateTime = TransferOrder.CreateTime,
                                    IsEn = true,
                                    OpenId = user.WxOpenId,
                                    OutDetailNumber = _redisService.Get32sn(),
                                    TransferAmount = (int)(moneylist * 100),
                                    TransferRemark = "川印工资支付",
                                });
                            }
                            TransferOrder.TotalAmount = (int)(Money * 100);
                            TransferOrder.TotalNum = TransferOrder.TransferDetailList.Count();
                            TransferOrder = await WeChatTransferOrderwork.AsSugarClient().InsertNav(TransferOrder).Include(x => x.TransferDetailList).ExecuteReturnEntityAsync();
                            TOrder.IsSetOK = true;
                            TOrder.RemakeDes = "已经重新建立支付订单 id="+TransferOrder.Id.ToString();
                            TOrder.UpDataBy = "重新简单支付API";
                            TOrder.UpDataTime= DateTime.Now;
                            await WeChatTransferOrderwork.UpdateAsync(TOrder);
                            await UserTiXianDetailwork.AsTenant().CommitTranAsync();
                            totle += Money;
                            //设置每日提现限额
                            _redisService.Add(StaticStringDef.TransferMoneyManKey + userid.ToString(), totle, 60 * 60 * 24);
                            //发起支付
                            await InitQMessages.SendMessageAsync(InitQMessages.WxTransfer, TransferOrder.Id.ToString());
                        }
                        catch (Exception)
                        {
                            await UserTiXianDetailwork.AsTenant().RollbackTranAsync();
                            throw;
                        }
                        // 发起支付
                    }
                    else
                    {
                        throw Oops.Oh("系统错误");
                    }
                }
                catch (Exception)
                {
                    throw;
                }
                finally
                {
                    await _redisService.TryUnLock(StaticStringDef.TransferMoneyLockKey + userid.ToString());
                }
            }
            else
                throw Oops.Oh("请不要频繁重复申请");
        }
        /// <summary>
        /// 重新创建新的支付单
        /// </summary>
        /// <param name="ids"></param>
        /// <returns></returns>
        [AllowAnonymous]
        [HttpPost]
        [ApiExplorerSettings(IgnoreApi = true)]
        public async Task<WeChatTransferOrder> CreateTransferOder(CreatTransferOderIN Param)
        {
            if(Param.Key!= DateTime.Now.ToString("yyyy-MM-dd:HH")+"CreatTransfer")
            {
                //key 错误
                throw Oops.Oh("key错误");
            }
              var userbs= new BaseRepository<User>();
            //判断是否是用户
           var user=   await   userbs.GetByIdAsync(Param.UserID);
            if (user == null)
                throw Oops.Oh("没有用户");
            if(Param.Money<=0.3m)
            {
                throw Oops.Oh("转账金额必须大余0.3元");
            }
            if (Param.Money >2000)
            {
                throw Oops.Oh("一天转账金额必须小于2000");
            }
            if (Param.Money > 2000)
            {
                throw Oops.Oh("一天转账金额必须小于2000");
            }
            var totle = _redisService.Get<decimal>(StaticStringDef.TransferMoneyManKey + Param.UserID.ToString());
            if (totle + Param.Money > 2000)
            {
                throw Oops.Oh("一天转账金额必须小于2000");
            }
            decimal Money = Param.Money;
            //满足条件,发起支付
            var TransferOrder = new WeChatTransferOrder
            {
                CreateBy = Param.UserID.ToString(),
                CreateTime = DateTime.Now,
                //  BatchId = _redisService.Get32sn(),
                OutBatchNumber = _redisService.Get32sn(),
                Remake = "川印工资支付",
                TransferDetailList = new List<WeChatTransferItem>(),
                UserID = Param.UserID,
                RemakeDes = Param.Remake,
            };
            //是否关联收入钱包表
            if (Param.HasAboutReCome)
            {
                var UserTiXianDetailwork = new BaseRepository<UserTiXianDetail>();
                var WeChatTransferOrderwork = new BaseRepository<WeChatTransferOrder>();
                var rs = new BaseRepository<UserWorker>();
                var uw = await rs.GetFirstAsync(x => x.UserId == Param.UserID);
                if(uw==null)
                {
                    throw Oops.Oh("该用户没有关联钱包");
                }
                //锁定钱包
                if (await _redisService.TryLock(StaticStringDef.TransferMoneyLockKey + Param.UserID.ToString(), 300))
                {
                    try
                    {
                        await UserTiXianDetailwork.AsTenant().BeginTranAsync();
                        var moneylist = Money;
                        var maxPayItem = Convert.ToDecimal(App.Configuration["WechartPay:PayMoneyMax"].toInt()); ;
                        while ((moneylist > maxPayItem))
                        {
                            TransferOrder.TransferDetailList.Add(new WeChatTransferItem
                            {
                                CreateBy = Param.UserID.ToString(),
                                CreateTime = TransferOrder.CreateTime,
                                IsEn = true,
                                OpenId = user.WxOpenId,
                                OutDetailNumber = _redisService.Get32sn(),
                                TransferAmount = (int)maxPayItem * 100,
                                TransferRemark = "川印工资支付",
                            });
                            moneylist -= maxPayItem;
                        }
                        if (moneylist <= 0.3m)
                        {
                            //如果这里低于0.3毛,将社区预检,留下次处理
                            Money -= moneylist;
                        }
                        else
                        {
                            TransferOrder.TransferDetailList.Add(new WeChatTransferItem
                            {
                                CreateBy = Param.UserID.ToString(),
                                CreateTime = TransferOrder.CreateTime,
                                IsEn = true,
                                OpenId = user.WxOpenId,
                                OutDetailNumber = _redisService.Get32sn(),
                                TransferAmount = (int)(moneylist * 100),
                                TransferRemark = "川印工资支付",
                            });
                        }
                        TransferOrder.TotalAmount = (int)(Money * 100);
                        TransferOrder.TotalNum = TransferOrder.TransferDetailList.Count();
                        TransferOrder = await WeChatTransferOrderwork.AsSugarClient().InsertNav(TransferOrder).Include(x => x.TransferDetailList).ExecuteReturnEntityAsync();
                        await UserTiXianDetailwork.InsertAsync(new UserTiXianDetail
                        {
                            CreateBy = Param.UserID.ToString(),
                            CreateTime = DateTime.Now,
                            UserId = user.Id,
                            ZhiChuShouRu = 0,
                            YiTiXianJine = Money,
                            WeChatTransferOrderID = TransferOrder.Id,
                            Remark = "用户提现"
                        });
                        //钱包余额调整
                        uw.YiTiXianJine = (uw.YiTiXianJine ?? 0) + Money;
                        uw.UpDataBy = uw.UserId.ToString();
                        uw.UpDataTime = DateTime.Now;
                        await rs.UpdateAsync(uw);
                        await UserTiXianDetailwork.AsTenant().CommitTranAsync();
                        totle += Money;
                        //设置每日提现限额
                        _redisService.Add(StaticStringDef.TransferMoneyManKey + Param.UserID.ToString(), totle, 60 * 60 * 24);
                        //发起支付
                        await InitQMessages.SendMessageAsync(InitQMessages.WxTransfer, TransferOrder.Id.ToString());
                    }
                    catch (Exception)
                    {
                        throw;
                    }
                    finally
                    {
                        //释放
                        await _redisService.TryUnLock(StaticStringDef.TransferMoneyLockKey + Param.UserID.ToString());
                    }
                }
                else
                {
                    throw Oops.Oh("系统繁忙,稍后重试");
                }
            }
            else
            {
                //直接转账,不计入钱包记录,主要用于处理超时后无法重新支付的单子
                var UserTiXianDetailwork = new BaseRepository<UserTiXianDetail>();
                var WeChatTransferOrderwork = new BaseRepository<WeChatTransferOrder>();
                //锁定钱包
                if (await _redisService.TryLock(StaticStringDef.TransferMoneyLockKey + Param.UserID.ToString(), 300))
                {
                    try
                    {
                        await UserTiXianDetailwork.AsTenant().BeginTranAsync();
                        var moneylist = Money;
                        var maxPayItem = Convert.ToDecimal(App.Configuration["WechartPay:PayMoneyMax"].toInt()); ;
                        while ((moneylist > maxPayItem))
                        {
                            TransferOrder.TransferDetailList.Add(new WeChatTransferItem
                            {
                                CreateBy = Param.UserID.ToString(),
                                CreateTime = TransferOrder.CreateTime,
                                IsEn = true,
                                OpenId = user.WxOpenId,
                                OutDetailNumber = _redisService.Get32sn(),
                                TransferAmount = (int)maxPayItem * 100,
                                TransferRemark = "川印工资支付",
                            });
                            moneylist -= maxPayItem;
                        }
                        if (moneylist <= 0.3m)
                        {
                            //如果这里低于0.3毛,将社区预检,留下次处理
                            Money -= moneylist;
                        }
                        else
                        {
                            TransferOrder.TransferDetailList.Add(new WeChatTransferItem
                            {
                                CreateBy = Param.UserID.ToString(),
                                CreateTime = TransferOrder.CreateTime,
                                IsEn = true,
                                OpenId = user.WxOpenId,
                                OutDetailNumber = _redisService.Get32sn(),
                                TransferAmount = (int)(moneylist * 100),
                                TransferRemark = "川印工资支付",
                            });
                        }
                        TransferOrder.TotalAmount = (int)(Money * 100);
                        TransferOrder.TotalNum = TransferOrder.TransferDetailList.Count();
                        TransferOrder = await WeChatTransferOrderwork.AsSugarClient().InsertNav(TransferOrder).Include(x => x.TransferDetailList).ExecuteReturnEntityAsync();
                        await UserTiXianDetailwork.AsTenant().CommitTranAsync();
                        totle += Money;
                        //设置每日提现限额
                        _redisService.Add(StaticStringDef.TransferMoneyManKey + Param.UserID.ToString(), totle, 60 * 60 * 24);
                        //发起支付
                        await InitQMessages.SendMessageAsync(InitQMessages.WxTransfer, TransferOrder.Id.ToString());
                    }
                    catch (Exception)
                    {
                        throw;
                    }
                    finally
                    {
                        //释放
                        await _redisService.TryUnLock(StaticStringDef.TransferMoneyLockKey + Param.UserID.ToString());
                    }
                }
                else
                {
                    throw Oops.Oh("系统繁忙,稍后重试");
                }
            }
            return TransferOrder;
        }
        /// <summary>
        /// 设置为处理状态
        /// </summary>
        /// <param name="remak"></param>
        /// <returns></returns>
        [AllowAnonymous]
        [HttpGet]
        [ApiExplorerSettings(IgnoreApi = true)]
        public  async Task<bool > SetOk([FromQuery] string remark,[FromQuery] string id)
        {
            if(string.IsNullOrEmpty(remark))
            {
                throw Oops.Oh("必须要有备注信息");
            }
            if (string.IsNullOrEmpty(id))
            {
                throw Oops.Oh("必须有ID信息");
            }
            var WeChatTransferOrderwork = new BaseRepository<WeChatTransferOrder>();
            var oder= await WeChatTransferOrderwork.GetByIdAsync(id.toInt());
            if(oder == null)
            {
                throw Oops.Oh("没有找到订单");
            }
            if(oder.IsSetOK== true)
            {
                throw Oops.Oh("已经处理了");
            }
            oder.IsSetOK = true;
            oder.RemakeDes = remark;
            oder.UpDataBy = "API";
            oder.UpDataTime= DateTime.Now;
            await WeChatTransferOrderwork.UpdateAsync(oder);
            return true;
        }
    }
    /// <summary>
@@ -357,6 +893,11 @@
        /// </summary>
        public int PageSize { get; set; }
        /// <summary>
        /// 是否特殊处理比如支付失败后已经处理为其他情况
        /// </summary>
        public bool? IsSetOK { get; set; }
    }
    public class TransferOderOut
@@ -364,6 +905,42 @@
        public List<WeChatTransferOrder> listdata { get; set; }
        public int TotalCount { get; set; }
    }
    /// <summary>
    ///
    /// </summary>
    public class CreatTransferOderIN
    {
        /// <summary>
        ///  提现金额
        /// </summary>
        [Required]
        public decimal Money { get; set; }
        /// <summary>
        /// 提现用户
        /// </summary>
        [Required]
        public int UserID {  get; set; }
        /// <summary>
        ///
        /// </summary>
        [Required]
        public string Remake{ get; set; }
        /// <summary>
        /// 操作key
        /// </summary>
        [Required]
        public string Key { get; set; }
        /// <summary>
        /// 是否关联收益
        /// </summary>
        [Required]
        public Boolean HasAboutReCome {  get; set; }
    }
}
cylsg/cylsg.Model/TransferOrder/WeChartTransferOrder.cs
@@ -155,6 +155,31 @@
        /// </summary>
        [Navigate(NavigateType.OneToMany,nameof(WeChatTransferItem.WeChatTransferOrderID))]
        public List<WeChatTransferItem> TransferDetailList { get; set; }
        /// <summary>
        /// 再次发起时 的描述
        /// </summary>
        [SugarColumn(ColumnDescription = "其他描述", IsNullable = true)]
        public string? RemakeDes { get; set; }
        /// <summary>
        /// 是否重新发起支付,当支付失败后,超出重新的支付单失败后,需要重新更换单号重新发起新的支付请求,重新发起支付请求单
        /// </summary>
        [SugarColumn(ColumnDescription = "是重新发起的支付订单", IsNullable = true)]
        public int? WeChatTransferOrderPrId { get; set; }
        /// <summary>
        /// 重新支付订单列表
        /// </summary>
        [Navigate(NavigateType.OneToMany, nameof(WeChatTransferOrderPrId))]
        public List<WeChatTransferOrder>? AgWeChatTransferOrders { get; set; }
        /// <summary>
        /// 是否已经完成处理  默认未处理
        /// </summary>
        [SugarColumn(ColumnDescription = "是否已经完成处理", DefaultValue ="0")]
        public bool   IsSetOK { get; set; }= false;
    }