示例#1
0
        public void TestEventRecordUtils()
        {
            using (var ts = new TransactionScope())
            {
                var context = new Agp2pDataContext();
                var user    = context.dt_users.Single(u => u.user_name == UserA);

                var now = DateTime.Now;
                context.MarkEventOccurNotSave(user.id, Agp2pEnums.EventRecordTypeEnum.IdcardChecking, now.AddHours(-1));
                context.MarkEventOccurNotSave(user.id, Agp2pEnums.EventRecordTypeEnum.IdcardChecking, now.AddHours(-2));
                context.MarkEventOccurNotSave(user.id, Agp2pEnums.EventRecordTypeEnum.IdcardChecking, now.AddHours(-3));

                context.MarkEventOccurNotSave(user.id, Agp2pEnums.EventRecordTypeEnum.IdcardChecking, now.AddDays(-1).AddHours(-1));
                context.MarkEventOccurNotSave(user.id, Agp2pEnums.EventRecordTypeEnum.IdcardChecking, now.AddDays(-1).AddHours(-2));
                context.MarkEventOccurNotSave(user.id, Agp2pEnums.EventRecordTypeEnum.IdcardChecking, now.AddDays(-1).AddHours(-3));

                context.SubmitChanges();

                Assert.AreEqual(3, context.QueryEventTimesDuring(user.id, Agp2pEnums.EventRecordTypeEnum.IdcardChecking, TimeSpan.FromDays(1)));
                Assert.AreEqual(6, context.QueryEventTimesDuring(user.id, Agp2pEnums.EventRecordTypeEnum.IdcardChecking, TimeSpan.FromDays(2)));

                ts.Dispose();
            }
        }
示例#2
0
        private static void HandleTimerMessage(TimerMsg.Type timerType, bool onTime)
        {
            if (timerType != TimerMsg.Type.AutoRepayTimer)
            {
                return;
            }

            // 安广融合借款人还款提醒:您的借款项目【{project}】第 {termNumber} 期{remainDays}天后将到期,本期应还本金 {principal} 加利息 {interest} 共计 {total}。
            var context        = new Agp2pDataContext();
            var willRepayTasks =
                context.li_repayment_tasks.Where(
                    t =>
                    (t.should_repay_time.Date == DateTime.Today.AddDays(3) || t.should_repay_time.Date == DateTime.Today.AddDays(1)) &&
                    t.status == (int)Agp2pEnums.RepaymentStatusEnum.Unpaid).ToList();

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

            var smsTemplate = context.dt_sms_template.SingleOrDefault(te => te.call_index == "loaner_repay_hint")?.content;

            if (smsTemplate == null)
            {
                context.AppendAdminLogAndSave("LoanerRepayHint", "找不到还款提醒模板: loaner_repay_hint");
                smsTemplate = "您的借款项目【{project}】第 {termNumber} 期{remainDays}天后将到期,本期应还本金 {principal} 加利息 {interest} 共计 {total}。";
            }

            willRepayTasks.ForEach(task =>
            {
                var loaner = task.li_projects.li_risks.li_loaners.dt_users;
                if (string.IsNullOrEmpty(loaner.mobile))
                {
                    return;
                }

                // 判断一天内有没有发送过短信
                var alreadySend = 1 <= context.QueryEventTimesDuring(loaner.id, Agp2pEnums.EventRecordTypeEnum.LoanerRepaymentRemind, TimeSpan.FromDays(1), task.id.ToString());
                if (alreadySend)
                {
                    return;
                }

                var smsContent = smsTemplate
                                 .Replace("{remainDays}", (task.should_repay_time.Date - DateTime.Today).TotalDays.ToString("n0"))
                                 .Replace("{project}", task.li_projects.title)
                                 .Replace("{termNumber}", task.term.ToString())
                                 .Replace("{principal}", task.repay_principal.ToString("c"))
                                 .Replace("{interest}", task.repay_interest.ToString("c"))
                                 .Replace("{total}", (task.repay_principal + task.repay_interest).ToString("c"));

                try
                {
                    var errorMsg = string.Empty;
                    if (!SMSHelper.SendTemplateSms(loaner.mobile, smsContent, out errorMsg))
                    {
                        context.AppendAdminLogAndSave("LoanerRepayHint",
                                                      $"发送还款提醒失败:{errorMsg}(借款人ID:{loaner.user_name},项目名称:{task.li_projects.title})");
                    }
                    else
                    {
                        context.MarkEventOccurNotSave(loaner.id, Agp2pEnums.EventRecordTypeEnum.LoanerRepaymentRemind, DateTime.Now, task.id.ToString());
                        context.SubmitChanges();
                    }
                }
                catch (Exception ex)
                {
                    context.AppendAdminLogAndSave("LoanerRepayHint",
                                                  $"发送还款提醒失败:{ex.GetSimpleCrashInfo()}(借款人ID:{loaner.user_name},项目名称:{task.li_projects.title})");
                }
            });
        }