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