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(); } }