示例#1
0
 public static dt_users GetUserInfoByLinq(Agp2pDataContext context = null)
 {
     if (IsUserLogin())
     {
         Model.users model = HttpContext.Current.Session[DTKeys.SESSION_USER_INFO] as Model.users;
         if (model != null)
         {
             //为了能查询到最新的用户信息,必须查询最新的用户资料
             if (context == null)
             {
                 context = new Agp2pDataContext();
             }
             return(context.dt_users.SingleOrDefault(u => u.id == model.id));
         }
     }
     return(null);
 }
示例#2
0
        /// <summary>
        /// 开户处理
        /// </summary>
        /// <param name="msg"></param>
        private static void UserRegister(UserRegisterRespMsg msg)
        {
            try
            {
                //检查请求处理结果
                if (msg.CheckResult())
                {
                    //检查签名
                    if (msg.CheckSignature())
                    {
#if !DEBUG
                        //同步返回平台不做处理
                        if (msg.Result.Equals("00001"))
                        {
                            return;
                        }
#endif

                        Agp2pDataContext context = new Agp2pDataContext();
                        //查找对应的平台账户,更新用户信息
                        var user = context.dt_users.SingleOrDefault(u => u.id == msg.UserIdIdentity);
                        if (user != null)
                        {
                            user.identity_id = msg.UserId;
                            //TODO 丰付企业认证返回anonymous
                            user.real_name = !msg.Name.Equals("anonymous") ? msg.Name : user.real_name;
                            //在开户中进行了实名认证,收取手续费
                            if (string.IsNullOrEmpty(user.token))
                            {
                                UserAuthFee(context, user.id);
                            }
                            context.SubmitChanges();
                            msg.HasHandle = true;
                        }
                        else
                        {
                            msg.Remarks = "没有找到平台账户,UserId:" + msg.UserIdIdentity;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                msg.Remarks = "内部错误:" + ex.Message;
            }
        }
示例#3
0
        private void RptBind(string _keyword)
        {
            page = DTRequest.GetQueryInt("page", 1);
            //txtKeywords.Text = keywords;
            var query = new Agp2pDataContext().li_loaners
                        .Where(q => q.dt_users.real_name.Contains(_keyword) || q.dt_users.mobile.Contains(_keyword) || q.dt_users.id_card_number.Contains(_keyword));

            totalCount         = query.Count();
            rptList.DataSource = query.OrderByDescending(q => q.last_update_time).Skip(pageSize * (page - 1)).Take(pageSize).ToList();
            rptList.DataBind();

            //绑定页码
            txtPageNum.Text = pageSize.ToString();
            string pageUrl = Utils.CombUrlTxt("loaner_list.aspx", "keywords={0}&page={1}", txtKeywords.Text, "__id__");

            PageContent.InnerHtml = Utils.OutPageList(pageSize, page, totalCount, pageUrl, 8);
        }
示例#4
0
        public new static string AjaxDeleteAddress(int addressId)
        {
            var userInfo = GetUserInfoByLinq();

            HttpContext.Current.Response.TrySkipIisCustomErrors = true;
            if (userInfo == null)
            {
                HttpContext.Current.Response.StatusCode = (int)HttpStatusCode.Unauthorized;
                return("请先登录");
            }
            var context     = new Agp2pDataContext();
            var addressBook = context.dt_user_addr_book.SingleOrDefault(b => b.id == addressId);

            context.dt_user_addr_book.DeleteOnSubmit(addressBook);
            context.SubmitChanges();
            return("删除成功");
        }
        public void TestSumapayApi()
        {
            //1.请求前台接口
            //1.1发送请求
            var msgReq = new UserRegisterReqMsg(1030, "18681406981", "罗明星", "440233198602010019", "0");

            MessageBus.Main.Publish(msgReq);
            //正式请求时,进行如下异步调用
            //MessageBus.Main.PublishAsync(msgReq, s =>
            //{
            //    Utils.HttpPost(msgReq.ApiInterface, msgReq.RequestContent);
            //});

            //1.2模拟响应返回
            Agp2pDataContext context = new Agp2pDataContext();
            var responseLog          = new li_pay_response_log()
            {
                request_id       = msgReq.RequestId,
                result           = "00000",
                status           = (int)Agp2pEnums.SumapayResponseEnum.Return,
                response_time    = DateTime.Now,
                response_content = "{request:'" + msgReq.RequestId + "',result:'00000'}"
            };

            context.li_pay_response_log.InsertOnSubmit(responseLog);
            //1.3发送响应消息
            var respMsg = BaseRespMsg.NewInstance <UserRegisterRespMsg>(responseLog.response_content);

            MessageBus.Main.PublishAsync(respMsg,
                                         s =>
            {
                if (respMsg.HasHandle)
                {
                    var req           = context.li_pay_request_log.SingleOrDefault(r => r.id == responseLog.request_id);
                    req.complete_time = DateTime.Now;
                    req.status        = (int)Agp2pEnums.SumapayRequestEnum.Complete;

                    responseLog.user_id = respMsg.UserIdIdentity;
                    responseLog.status  = (int)Agp2pEnums.SumapayResponseEnum.Complete;
                }
                responseLog.remarks = respMsg.Remarks;
                context.SubmitChanges();
                //Assert.IsTrue(s.IsCompleted);
            });
        }
示例#6
0
        private static void HandleBankTransactionCreatedMsg(li_bank_transactions tr)
        {
            if (tr.type != (int)Agp2pEnums.BankTransactionTypeEnum.Withdraw)
            {
                return;
            }

            var context = new Agp2pDataContext();

            var createTime = tr.create_time;
            var content    = $"用户 {tr.li_bank_accounts.dt_users.GetFriendlyUserName()} 于 {createTime} 申请了提现 {tr.value}";

            GetMessageSubscribers(context, Agp2pEnums.ManagerMessageSourceEnum.UserWithdrawApply).ForEach(m =>
            {
                context.AppendAdminMessage(m, Agp2pEnums.ManagerMessageSourceEnum.UserWithdrawApply, "用户申请提现", content, createTime);
            });
            context.SubmitChanges();
            ManagerMessageHubFacade.Instance.OnNewMsg();
        }
示例#7
0
        private static void HandleBankTransactionFinishedMsg(li_bank_transactions tr)
        {
            if (tr.type != (int)Agp2pEnums.BankTransactionTypeEnum.Charge || tr.status != (int)Agp2pEnums.BankTransactionStatusEnum.Confirm)
            {
                return;
            }

            var context = new Agp2pDataContext();

            var createTime = tr.create_time;
            var content    = $"用户 {tr.dt_users.GetFriendlyUserName()} 于 {createTime} 成功充值了 {tr.value}";

            GetMessageSubscribers(context, Agp2pEnums.ManagerMessageSourceEnum.UserRechargeSuccess).ForEach(m =>
            {
                context.AppendAdminMessage(m, Agp2pEnums.ManagerMessageSourceEnum.UserRechargeSuccess, "用户充值成功", content, createTime);
            });
            context.SubmitChanges();
            ManagerMessageHubFacade.Instance.OnNewMsg();
        }
示例#8
0
        private static void HandleProjectRepaidMsg(int repaymentTaskId)
        {
            var context       = new Agp2pDataContext();
            var repaymentTask = context.li_repayment_tasks.Single(task => task.id == repaymentTaskId);

            var content = repaymentTask.li_projects.IsNewbieProject1()
                ? string.Format("新手标于 {0} 回款本金 {1},利息 {2} 到 {3}", repaymentTask.repay_at, repaymentTask.repay_principal,
                                repaymentTask.repay_interest, repaymentTask.dt_users.GetFriendlyUserName())
                : string.Format("项目 {0} 已于 {1} 进行了第 {2} 期回款,共计回款本金:{3},利息:{4}",
                                repaymentTask.li_projects.title, repaymentTask.repay_at, repaymentTask.GetRepaymentTaskProgress(),
                                repaymentTask.repay_principal, repaymentTask.repay_interest);

            GetMessageSubscribers(context, Agp2pEnums.ManagerMessageSourceEnum.ProjectRepaid).ForEach(m =>
            {
                context.AppendAdminMessage(m, Agp2pEnums.ManagerMessageSourceEnum.ProjectRepaid, "项目回款", content, repaymentTask.repay_at.Value);
            });
            context.SubmitChanges();
            ManagerMessageHubFacade.Instance.OnNewMsg();
        }
示例#9
0
        private static void HandleDelayInvest(int projectTransactionId, DateTime investTime)
        {
            var context = new Agp2pDataContext();
            var agent   = context.dt_users.FirstOrDefault(u => u.dt_user_groups.title == AutoRepay.AgentGroup);

            try
            {
                if (agent == null)
                {
                    throw new InvalidOperationException("没有找到中间人组,不能发送提醒短信");
                }

                if (string.IsNullOrWhiteSpace(agent.mobile))
                {
                    throw new InvalidOperationException("中间人没有设置手机,不能发送提醒短信");
                }

                var ptr = context.li_project_transactions.Single(ptr0 => ptr0.id == projectTransactionId);

                var huoqiBuyableClaimsAmount = TransactionFacade.QueryHuoqiBuyableClaimsAmount(context, ptr.li_projects, agent.id);

                var delayInvested = ptr.li_projects.li_project_transactions.Where(
                    tr =>
                    tr.type == (int)Agp2pEnums.ProjectTransactionTypeEnum.Invest &&
                    tr.status == (int)Agp2pEnums.ProjectTransactionStatusEnum.Pending)
                                    .Aggregate(0m, (sum, tr) => sum + tr.principal);

                var msgContent = $"用户总共投资了活期项目 {ptr.li_projects.title} {delayInvested.ToString("c")},但活期债权本金总额({huoqiBuyableClaimsAmount.ToString("c")})不足,请尽快处理";
                var errorMsg   = string.Empty;
                if (!SMSHelper.SendTemplateSms(agent.mobile, msgContent, out errorMsg))
                {
                    context.AppendAdminLogAndSave("Agent", "发送提醒中间人买入债权短信失败:" + errorMsg);
                }
                else
                {
                    context.AppendAdminLogAndSave("Agent", "发送提醒中间人买入债权短信成功:" + msgContent);
                }
            }
            catch (Exception ex)
            {
                context.AppendAdminLogAndSave("Agent", "发送提醒中间人买入债权短信失败:" + ex.GetSimpleCrashInfo());
            }
        }
示例#10
0
        public void Day01()
        {
            Common.DeltaDay(realDate, 0);

            Common.AutoRepaySimulate();

            Common.PublishProject("PT3", 2, 30000, 5);

            var investor = new Agp2pDataContext().dt_users.Single(u => u.user_name == UserA);

            HongBaoActivity.GiveUser(investor.id, 100, 10);
            Common.InvestProject(UserA, "PT3", 5000);
            Common.InvestProject(UserA, "PT3", 5000);

            Common.InvestProject(UserB, "PT3", 20000);
            Common.ProjectStartRepay("PT3");

            Common.AutoRepaySimulate();
        }
示例#11
0
        protected void Page_Load(object sender, EventArgs e)
        {
            string action = DTRequest.GetFormString("action");

            if (action.Equals("recharge") || action.Equals("bankgateway") || action.Equals("wap"))//测试充值
            {
                int    user_id = Utils.StrToInt(DTRequest.GetFormString("user_id"), 0);
                string amount  = DTRequest.GetFormString("amount");
                //创建充值订单
                var context      = new Agp2pDataContext();
                var charge_order = context.Charge(user_id, decimal.Parse(amount), Agp2pEnums.PayApiTypeEnum.Lianlianpay);

                //请求连连快捷支付接口
                var    service   = new LianlianpayService();
                string sHtmlText = "";
                if (action.Equals("recharge"))
                {
                    var sParaTemp = getParamDict(user_id);
                    sHtmlText = service.BuildReChargeFormHtml(sParaTemp, charge_order.no_order, charge_order.create_time.ToString("yyyyMMddHHmmss"), amount, user_id.ToString(), Request.UserHostAddress);
                }
                else if (action.Equals("wap"))
                {
                    //手机端wap支付
                    var sParaTemp = getParamDict(user_id);
                    sHtmlText = service.BuildReChargeFormWapHtml(charge_order.no_order, charge_order.create_time.ToString("yyyyMMddHHmmss"), amount, user_id.ToString(), sParaTemp["id_no"], sParaTemp["acct_name"]);
                }
                else
                {
                    //获取银行编号
                    string bankName = DTRequest.GetFormString("bankcode");
                    int    bankCode = (int)(Agp2pEnums.LianlianpayBankCodeEnum)Enum.Parse(typeof(Agp2pEnums.LianlianpayBankCodeEnum), bankName);

                    SortedDictionary <string, string> sParaTemp = new SortedDictionary <string, string>();
                    sHtmlText = service.BuildReChargeFormBankGateWayHtml(sParaTemp, charge_order.no_order, charge_order.create_time.ToString("yyyyMMddHHmmss"), amount, user_id.ToString(), Request.UserHostAddress, "0" + bankCode);
                }
                Response.Write(sHtmlText);
            }
            else//测试查询支付订单
            {
                var    service    = new LianlianpayService();
                string returnText = service.PostQueryOrder(DTRequest.GetFormString("no_order"), DTRequest.GetFormString("dt_order"));
            }
        }
示例#12
0
        public static void HandleTimerMsg(TimerMsg.Type timerName, bool startUp)
        {
            if (timerName != TimerMsg.Type.AutoRepayTimer)
            {
                return;
            }

            var repayTime = DateTime.Now;
            var context   = new Agp2pDataContext();

            // 找出过期的券并标记为过期
            context.li_activity_transactions.Where(a =>
                                                   a.activity_type == (int)Agp2pEnums.ActivityTransactionActivityTypeEnum.InterestRateTicket &&
                                                   a.status == (int)Agp2pEnums.ActivityTransactionStatusEnum.Acting)
            .AsEnumerable()
            .ForEach(atr => new InterestRateTicket(atr).SetCancelIfExpired());

            context.SubmitChanges();
        }
        protected void btnBuy_OnClick(object sender, EventArgs e)
        {
            var buyAmount = Request["__EVENTARGUMENT"];
            int claimId   = Convert.ToInt32(((LinkButton)sender).CommandArgument);

            selectedAgent = Convert.ToInt32(ddlAgent.SelectedValue);

            try
            {
                TransactionFacade.BuyClaim(context, claimId, selectedAgent, Convert.ToDecimal(buyAmount));
                context = new Agp2pDataContext();
                RptBind();
                JscriptMsg("买入债权成功", "", "Success");
            }
            catch (Exception ex)
            {
                JscriptMsg("买入债权失败:" + ex.Message, "", "Success");
            }
        }
示例#14
0
        private void SetPasswordByMobile(string verifyCode, string pwd, bool forTransactPassword, Action <int, string> callback)
        {
            if (string.IsNullOrWhiteSpace(verifyCode) || string.IsNullOrWhiteSpace(pwd))
            {
                callback((int)HttpStatusCode.BadRequest, "参数不正确");
                return;
            }
            var cachedCode = (string)SessionHelper.Get("mobile_verify_code");

            if (!string.IsNullOrWhiteSpace(cachedCode) && verifyCode == cachedCode)
            {
                var context = new Agp2pDataContext();
                try
                {
                    var user = context.dt_users.SingleOrDefault(u => u.mobile == (string)SessionHelper.Get("verifying_mobile"));
                    if (user == null)
                    {
                        callback((int)HttpStatusCode.NotFound, "不存在设有该电话号码的用户");
                        return;
                    }
                    if (forTransactPassword)
                    {
                        user.pay_password = Utils.MD5(pwd);
                    }
                    else
                    {
                        user.password = DESEncrypt.Encrypt(pwd, user.salt);
                    }
                    context.SubmitChanges();
                    SessionHelper.Remove("mobile_verify_code");
                    callback((int)HttpStatusCode.OK, "密码重置成功");
                }
                catch (Exception ex)
                {
                    callback((int)HttpStatusCode.OK, "密码重置失败,有多个用户的电话号码同时匹配该号码,请联系客服");
                }
            }
            else
            {
                callback((int)HttpStatusCode.PreconditionFailed, "电话验证码不正确或已失效");
            }
        }
        private static void DoHistoryFixing(Agp2pDataContext context, li_wallet_histories his)
        {
            // 计算出偏差:和上一个历史记录对比后得出原待收益
            var prevHis = his.dt_users.li_wallet_histories.OrderByDescending(h => h.create_time)
                          .First(h => h.create_time < his.create_time);
            var originalProfiting = his.profiting_money - prevHis.profiting_money;

            var project        = his.li_project_transactions.li_projects;
            var realInvestment = project.li_project_transactions.Where(
                tr =>
                tr.investor == his.user_id &&
                tr.type == (int)Agp2pEnums.ProjectTransactionTypeEnum.Invest &&
                tr.status == (int)Agp2pEnums.ProjectTransactionStatusEnum.Success).Sum(pt => pt.principal);


            // 计算出正确的待收益金额和:通过 GenerateRepayTransactions
            var myPtr = project.li_repayment_tasks.AsEnumerable().SelectMany(
                t => TransactionFacade.GenerateRepayTransactions(t, t.repay_at ?? t.should_repay_time))
                        .Where(ptr => ptr.investor == his.user_id)
                        .ToList();
            var predictProfiting = myPtr.Sum(pt => pt.interest.GetValueOrDefault());
            var predictInvesting = myPtr.Sum(pt => pt.principal);

            if (realInvestment != predictInvesting)
            {
                throw new Exception("归还的本金不等于投入的本金");
            }

            // 修正往后的历史
            if (predictProfiting != originalProfiting)
            {
                var deltaProfiting = predictProfiting - originalProfiting;
                var prefixHis      = his.dt_users.li_wallet_histories.OrderByDescending(h => h.create_time)
                                     .Where(h => his.create_time <= h.create_time).ToList();
                Debug.WriteLine(string.Format("修正 {0} 用户从 {1} 开始出现待收益偏差:{2},影响历史记录 {3} 条",
                                              his.dt_users.GetFriendlyUserName(), his.create_time, deltaProfiting, prefixHis.Count));
                prefixHis.ForEach(h =>
                {
                    h.profiting_money += deltaProfiting;
                });
            }
        }
示例#16
0
        public new static string AjaxAppendAddress(string address, string area, string postalCode, string orderName, string orderPhone)
        {
            var userInfo = GetUserInfoByLinq();

            HttpContext.Current.Response.TrySkipIisCustomErrors = true;
            if (userInfo == null)
            {
                HttpContext.Current.Response.StatusCode = (int)HttpStatusCode.Unauthorized;
                return("请先登录");
            }

            /*if (!new Regex(@"^\d{11,}$").IsMatch(orderPhone))
             * {
             *  HttpContext.Current.Response.StatusCode = (int) HttpStatusCode.BadRequest;
             *  return "手机号码格式不正确";
             * }*/
            var context      = new Agp2pDataContext();
            var addressCount = context.dt_user_addr_book.Where(a => a.user_id == userInfo.id).Count();

            if (addressCount >= 2)
            {
                return("最多只能添加2个收获地址");
            }
            var addressBook = new dt_user_addr_book
            {
                user_id     = userInfo.id,
                user_name   = userInfo.real_name,
                accept_name = orderName,
                area        = area,
                address     = address,
                mobile      = orderPhone,
                telphone    = orderPhone,
                email       = "",
                post_code   = postalCode,
                is_default  = 0,
                add_time    = DateTime.Now,
            };

            context.dt_user_addr_book.InsertOnSubmit(addressBook);
            context.SubmitChanges();
            return("保存收货地址信息成功");
        }
示例#17
0
        /// <summary>
        /// 个人投标/自动投标 响应
        /// </summary>
        /// <param name="msg"></param>
        private static void Bid(BidRespMsg msg)
        {
            try
            {
                //检查请求处理结果
                if (msg.CheckResult())
                {
                    //检查签名
                    if (msg.CheckSignature())
                    {
#if !DEBUG
                        //同步返回平台不做处理
                        if (msg.Result.Equals("00001")) return;
#endif                  
                        //查找是否使用了加息券
                        var context = new Agp2pDataContext();
                        /*TransactionFacade.Invest((int)msg.UserIdIdentity, msg.ProjectCode,
                            Utils.StrToDecimal(msg.Sum, 0), msg.RequestId, Convert.ToInt32(ticketId));*/
                        var ticketId = context.li_jiaxiquan_transaction.SingleOrDefault(m => m.requestId == msg.RequestId && m.userId == msg.UserIdIdentity).remarks;
                        //查找对应的交易流水
                        var trans = context.li_project_transactions.SingleOrDefault(u => u.no_order == msg.RequestId);
                        if (trans != null)
                        {
                            if (trans.status == (int) Agp2pEnums.ProjectTransactionStatusEnum.Pending)
                            {
                                context.ConfirmProjectTransaction(trans.id, Convert.ToInt32(ticketId));
                                //TODO 检查用户资金信息
                                msg.HasHandle = true;
                            }                                                                     
                        }
                        else
                        {
                            msg.Remarks = "没有找到平台交易流水记录,交易流水号为:" + msg.RequestId;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                msg.Remarks = "内部错误:" + ex.Message;
            }
        }
示例#18
0
        protected string GetQuestionnaireResult(int questionnaireId)
        {
            var context  = new Agp2pDataContext();
            var userInfo = GetUserInfoByLinq(context);
            var score    = 0;

            HttpContext.Current.Response.TrySkipIisCustomErrors = true;
            if (userInfo == null)
            {
                HttpContext.Current.Response.StatusCode = (int)HttpStatusCode.Unauthorized;
                return("请先登录");
            }
            // 返回的格式:{"answer": ["A", "A&B", ...], "score": 999}

            var answers = userInfo.li_questionnaire_results.Where(q => q.questionnaireId == questionnaireId)
                          .OrderBy(q => q.questionId).Select(q => q.answer).ToList();

            score = Convert.ToInt32(SumOfScore((Agp2pEnums.QuestionnaireEnum)questionnaireId, answers));
            return(score.ToString());
        }
示例#19
0
        public static int GiveUser(int userId, decimal value)
        {
            var context = new Agp2pDataContext();

            var trs = new li_activity_transactions
            {
                user_id       = userId,
                create_time   = DateTime.Now,
                value         = 0, // 投资了项目后再设置
                details       = JsonConvert.SerializeObject(new { Value = value }),
                type          = (byte)Agp2pEnums.ActivityTransactionTypeEnum.Gain,
                status        = (byte)Agp2pEnums.ActivityTransactionStatusEnum.Acting,
                activity_type = (byte)Agp2pEnums.ActivityTransactionActivityTypeEnum.TrialTicket,
            };

            context.li_activity_transactions.InsertOnSubmit(trs);
            context.SubmitChanges();

            return(trs.id);
        }
        public void FixProfitingMoneyBias()
        {
            /* 2016-02-15
             * 调试跟踪:
             *  修正 18925950154(覃菲) 用户从 2016/1/18 9:39:45 开始出现待收益偏差:0.01,影响历史记录 26 条
             *  修正 13612512742(陈茂强) 用户从 2016/1/21 9:36:22 开始出现待收益偏差:0.01,影响历史记录 78 条
             *  修正 13612512742(陈茂强) 用户从 2016/1/21 14:06:34 开始出现待收益偏差:-0.01,影响历史记录 75 条
             *  修正 15816951818(庞敏清) 用户从 2016/1/22 16:06:40 开始出现待收益偏差:-0.01,影响历史记录 97 条
             *  修正 13612512742(陈茂强) 用户从 2016/1/25 9:13:54 开始出现待收益偏差:0.01,影响历史记录 60 条
             *  修正 13612512742(陈茂强) 用户从 2016/1/26 16:25:53 开始出现待收益偏差:-0.01,影响历史记录 51 条
             *  修正 13612512742(陈茂强) 用户从 2016/1/28 15:11:21 开始出现待收益偏差:0.01,影响历史记录 39 条
             */
            var context     = new Agp2pDataContext();
            var biasSources = context.li_wallet_histories.Where(h => new DateTime(2016, 1, 18) < h.create_time)
                              .Where(h => h.action_type == (int)Agp2pEnums.WalletHistoryTypeEnum.InvestSuccess).ToList();

            biasSources.ForEach(h => DoHistoryFixing(context, h));

            //context.SubmitChanges();
        }
示例#21
0
        /// <summary>
        /// 重新启动延迟发标的计划任务
        /// </summary>
        public void DelayedRelease()
        {
            var linqContext = new Agp2pDataContext();
            var project     = linqContext.li_projects.Where(p => p.status == (int)Agp2pEnums.ProjectStatusEnum.FinancingAtTime).ToList();

            for (int i = 0; i < project.Count; i++)
            {
                //启动进程
                TimeSpan time = Convert.ToDateTime(project[i].publish_time).Subtract(DateTime.Now);
                if ((int)time.TotalMilliseconds > 600)
                {
                    MessageBus.Main.PublishDelay(new ProjectSchedulePublishMsg(project[i].id), (int)time.TotalMilliseconds);
                }
                else
                {
                    project[i].status = (int)Agp2pEnums.ProjectStatusEnum.Financing;
                }
            }
            linqContext.SubmitChanges();
        }
示例#22
0
        /// <summary>
        /// 发送本息到账请求
        /// </summary>
        /// <param name="projectCode"></param>
        /// <param name="sum"></param>
        /// <param name="repayTaskId">定期为还款计划id,活期为转出人id</param>
        /// <param name="isEarlyPay"></param>
        /// <param name="huoqi"></param>
        /// <param name="callBack"></param>
        public static void SendReturnPrinInte(int projectCode, string sum, int repayTaskId, bool isEarlyPay, bool isHuoqi)
        {
            var context = new Agp2pDataContext();
            //创建本息到账请求并设置分账列表
            var returnPrinInteReqMsg = new ReturnPrinInteReqMsg(projectCode, sum, isHuoqi);
            //定期项目需计算全部投资者本息明细
            var repayRask = context.li_repayment_tasks.SingleOrDefault(r => r.id == repayTaskId);
            var transList = TransactionFacade.GenerateRepayTransactions(repayRask, DateTime.Now);

            returnPrinInteReqMsg.SetSubledgerList(transList);
            returnPrinInteReqMsg.Remarks = $"isEarly=false&repayTaskId={repayTaskId}&isHuoqi={isHuoqi}";
            //发送请求
            MessageBus.Main.PublishAsync(returnPrinInteReqMsg, msg =>
            {
                //处理请求同步返回结果
                var returnPrinInteRespMsg =
                    BaseRespMsg.NewInstance <ReturnPrinInteRespMsg>(msg.SynResult);
                MessageBus.Main.PublishAsync(returnPrinInteRespMsg);
            });
        }
示例#23
0
        public static void DoRepay(TimerMsg.Type timerType, bool onTime)
        {
            if (timerType != TimerMsg.Type.AutoRepayTimer)
            {
                return;
            }
            if (ConfigLoader.loadSiteConfig().enableAutoRepay == 0)
            {
                return;
            }

            var context         = new Agp2pDataContext();
            var shouldRepayTask = context.li_repayment_tasks.Where(
                t =>
                t.status == (int)Agp2pEnums.RepaymentStatusEnum.Unpaid &&
                t.should_repay_time.Date <= DateTime.Today).ToList();

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


            // 优先进行特殊项目的回款
            shouldRepayTask.OrderByDescending(t => t.li_projects.dt_article_category.sort_id).ForEach(ta =>
            {
                //TODO 特殊项目回款处理
                //if (ta.li_projects.IsNewbieProject())
                //{
                //    context.ExecuteRepaymentTask(ta.id);
                //}
                //else
                //调用托管本息到账接口,在本息到账异步响应中执行还款计划
                RequestApiHandle.SendReturnPrinInte(ta.project, (ta.repay_interest + ta.repay_principal).ToString("f"), ta.id, false, ta.li_projects.IsHuoqiProject());
            });

            context.AppendAdminLogAndSave("AutoRepay", "今日待还款项目自动还款:" + shouldRepayTask.Count);

            // 活期项目不发兑付公告
            SendRepayNotice(shouldRepayTask.Where(t => !t.li_projects.IsHuoqiProject()).ToList(), context);
        }
        private IEnumerable <BondTransaction> QueryProjectTransactions()
        {
            var context = new Agp2pDataContext();

            IQueryable <li_company_inoutcome> query =
                context.li_company_inoutcome.Where(
                    ptr => ptr.type == (int)Agp2pEnums.OfflineTransactionTypeEnum.BondFee);

            if (categoryId > 0)
            {
                query = query.Where(q => q.li_projects.category_id == categoryId);
            }
            if (!string.IsNullOrWhiteSpace(txtKeywords.Text))
            {
                query = query.Where(b => b.dt_users.user_name.Contains(txtKeywords.Text) || b.dt_users.real_name.Contains(txtKeywords.Text));
            }

            if (!string.IsNullOrWhiteSpace(txtStartTime.Text))
            {
                query = query.Where(h => Convert.ToDateTime(txtStartTime.Text) <= h.create_time.Date);
            }
            if (!string.IsNullOrWhiteSpace(txtEndTime.Text))
            {
                query = query.Where(h => h.create_time.Date <= Convert.ToDateTime(txtEndTime.Text));
            }

            totalCount = query.Count();

            return(query.OrderByDescending(ptr => ptr.create_time)
                   .AsEnumerable()
                   .Zip(Utils.Infinite(1), (prt, no) => new { prt, no }).Select(pprt => new BondTransaction
            {
                index = pprt.no,
                income = pprt.prt.income,
                occurTime = pprt.prt.create_time.ToString("yyyy-MM-dd HH:mm"),
                remark = pprt.prt.remark,
                user = string.IsNullOrEmpty(pprt.prt.dt_users.real_name) ? pprt.prt.dt_users.user_name : pprt.prt.dt_users.real_name,
                project = pprt.prt.li_projects.title,
                category = pprt.prt.li_projects.dt_article_category.title
            }).AsQueryable());
        }
示例#25
0
 private static void HandleUserLoginMsg(int userId)
 {
     var context = new Agp2pDataContext();
     var user = context.dt_users.Single(u => u.id == userId);
     var hongbaos = user.li_activity_transactions.Where(
         t =>
             t.activity_type == (int)Agp2pEnums.ActivityTransactionActivityTypeEnum.HongBao &&
             t.status == (int)Agp2pEnums.ActivityTransactionStatusEnum.Acting).AsEnumerable()
             .Select(a => new HongBao(a)).ToList();
     hongbaos.ForEach(h =>
     {
         if (h.GetDeadline() < DateTime.Now.Date)
         {
             // 奖券已过期,标记为失效
             // var invested = h.GetInvested(); TODO 将投资金额转移到未过期的红包
             h.SetInvested(null);
             h.Cancel();
         }
     });
     context.SubmitChanges();
 }
示例#26
0
        protected List <Dictionary <string, string> > get_inviter_bonus_ranking_list() // 当月被推荐人的投资总额排名
        {
            var context = new Agp2pDataContext();
            var now     = DateTime.Now;

            return(context.li_invitations.GroupBy(inv => inv.dt_users1, inv => inv.dt_users)
                   .ToDictionary(g => g.Key, g => g.SelectMany(u => u.li_project_transactions.Where(
                                                                   ptr =>
                                                                   ptr.create_time.Year == now.Year && ptr.create_time.Month == now.Month &&
                                                                   ptr.type == (int)Agp2pEnums.ProjectTransactionTypeEnum.Invest &&
                                                                   ptr.status == (int)Agp2pEnums.ProjectTransactionStatusEnum.Success)
                                                               .Select(ptr => ptr.principal))
                                 .Sum())
                   .OrderByDescending(d => d.Value)
                   .Take(10)
                   .Select(pair => new Dictionary <string, string>
            {
                { "inviter", Utils.GetUserNameHidden(pair.Key.user_name) },
                { "inviteesInvestmentSum", pair.Value.ToString("c") }
            }).ToList());
        }
        private static void DoCheckOverTimePaid(TimerMsg.Type timerType, bool onTime)
        {
            if (timerType != TimerMsg.Type.AutoRepayTimer)
            {
                return;
            }

            var db       = new Agp2pDataContext();
            var overTime =
                db.li_repayment_tasks.Where(
                    r => r.status == (int)Agp2pEnums.RepaymentStatusEnum.Unpaid && DateTime.Now > r.should_repay_time)
                .ToList();

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

            overTime.ForEach(o => o.status = (int)Agp2pEnums.RepaymentStatusEnum.OverTime);
            db.SubmitChanges();
        }
示例#28
0
        private List <RankItem> QueryRankUser()
        {
            var context = new Agp2pDataContext();
            var option  = new DataLoadOptions();

            option.LoadWith <dt_users>(u => u.li_project_transactions);
            option.LoadWith <dt_users>(u => u.li_invitations1);
            option.LoadWith <dt_users>(u => u.li_wallets);
            context.LoadOptions = option;

            // 限制当前管理员对会员的查询
            var canAccessGroups = context.li_user_group_access_keys.Where(k => k.owner_manager == GetAdminInfo().id).Select(k => k.user_group).ToArray();
            var users           = context.dt_users.Where(w => !canAccessGroups.Any() || canAccessGroups.Contains(w.group_id))
                                  .Where(u => u.user_name.Contains(txtKeywords.Text) || u.real_name.Contains(txtKeywords.Text) || u.mobile.Contains(txtKeywords.Text))
                                  .Where(u => 0 < u.li_invitations1.Count || 0 < u.li_wallets.total_investment)
                                  .ToList();
            var startTime = string.IsNullOrWhiteSpace(txtStartTime.Text) ? (DateTime?)null : Convert.ToDateTime(txtStartTime.Text);
            var endTime   = string.IsNullOrWhiteSpace(txtEndTime.Text) ? (DateTime?)null : Convert.ToDateTime(txtEndTime.Text);

            return(users.Select(u => new RankItem(u, startTime, endTime)).Where(r => r.InvestmentSum > 0 || r.InviteeCount > 0 || r.InviteeInvestmentSum > 0).ToList());
        }
示例#29
0
        /// <summary>
        /// 债权转让
        /// </summary>
        /// <param name="msg"></param>
        private static void CreditAssignment(CreditAssignmentRespMsg msg)
        {
            try
            {
                //检查请求处理结果
                if (msg.CheckResult())
                {
                    //检查签名
                    if (msg.CheckSignature())
                    {
#if !DEBUG
                        //同步返回平台不做处理
                        if (msg.Result.Equals("00001")) return;
#endif

                        Agp2pDataContext context = new Agp2pDataContext();
                        //查找对应的债权交易流水
                        var trans =
                            context.li_project_transactions.SingleOrDefault(p => p.no_order == msg.OriginalRequestId);
                        if (trans != null)
                        {
                            TransactionFacade.BuyClaim(context,
                                trans.li_claims_invested.OrderByDescending(c => c.createTime)
                                    .First(c => c.status == (int)Agp2pEnums.ClaimStatusEnum.NeedTransfer)
                                    .id, (int)msg.UserIdIdentity,
                                Utils.StrToDecimal(msg.AssignmentSum, 0));
                            msg.HasHandle = true;
                        }
                        else
                        {
                            msg.Remarks = "没有找到平台项目,项目编号为:" + msg.ProjectCode;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                msg.Remarks = "内部错误:" + ex.Message;
            }
        }
示例#30
0
        /// <summary>
        /// 新手标第一期自动返10元(停用)
        /// </summary>
        /// <param name="timerName"></param>
        /// <param name="onTime"></param>
        private static void HandleTimerMsg(TimerMsg.Type timerName, bool onTime)
        {
            if (timerName != TimerMsg.Type.AutoRepayTimer)
            {
                return;
            }

            var context         = new Agp2pDataContext();
            var shouldRepayTask = context.li_repayment_tasks.Where(
                t =>
                t.only_repay_to != null &&
                (t.status == (int)Agp2pEnums.RepaymentStatusEnum.Unpaid || t.status == (int)Agp2pEnums.RepaymentStatusEnum.OverTime) &&
                t.should_repay_time.Date <= DateTime.Today).ToList();

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

            shouldRepayTask.ForEach(ta => context.ExecuteRepaymentTask(ta.id));
            context.AppendAdminLogAndSave("AutoRepay", "新手体验标自动还款:" + string.Join(", ", shouldRepayTask.Select(t => t.dt_users.user_name).ToArray()));
        }