示例#1
0
        public static void HuoqiClaimTransferToCompanyWhenNeeded(TimerMsg.Type timerType, bool onTime)
        {
            if (timerType != TimerMsg.Type.AutoRepayTimer)
            {
                return;
            }

            using (var ts = new TransactionScope())
            {
                // 将需要转让的债权由中间人购买,转手之后设置为 TransferredUnpaid
                var context      = new Agp2pDataContext();
                var companyUsers = context.dt_users.Where(u => u.dt_user_groups.title == AutoRepay.AgentGroup).ToList();
                if (!companyUsers.Any())
                {
                    throw new InvalidOperationException("请先往“中间户”的会员组添加会员");
                }

                // 接手昨日/更早的提现
                var needTransferClaims = context.li_claims.Where(
                    c =>
                    c.projectId != c.profitingProjectId && c.status == (int)Agp2pEnums.ClaimStatusEnum.NeedTransfer &&
                    !c.Children.Any() && c.createTime.Date < DateTime.Today)
                                         .ToList();

                if (!needTransferClaims.Any())
                {
                    return;
                }

                //根据活期项目发送还款请求
                needTransferClaims.ToLookup(c => c.li_projects_profiting).ForEach(groupByProj =>
                {
                    //找出活期项目对应的中间人
                    var huoqiProj             = groupByProj.Key;
                    var loaner                = huoqiProj.li_risks.li_loaners.dt_users;
                    var needTransferClaimsSum = groupByProj.Sum(c => c.principal);
                    if (loaner.li_wallets.idle_money < needTransferClaimsSum)
                    {
                        throw new InvalidOperationException("警告:中间人的余额不足以接手需要转让的债权");
                    }

                    //创建自动还款托管接口请求
                    var autoRepayReqMsg = new AutoRepayReqMsg(loaner.id, huoqiProj.id, needTransferClaimsSum.ToString("f"));
                    MessageBus.Main.PublishAsync(autoRepayReqMsg, ar =>
                    {
                        //处理请求同步返回结果
                        var repayRespMsg        = BaseRespMsg.NewInstance <RepayRespMsg>(autoRepayReqMsg.SynResult);
                        repayRespMsg.HuoqiRepay = true;
                        MessageBus.Main.PublishAsync(repayRespMsg, result =>
                        {
                            if (repayRespMsg.HasHandle)
                            {
                                //托管还款完成后才接手转出的债权
                                context.RecaptureHuoqiClaim(groupByProj.ToList(), DateTime.Now);
                            }
                        });
                    });
                });


                ts.Complete();
            }
        }