using MoreLinq; using YLErp.BLL; namespace YLErp.Modules.ClientModule { /// /// 山证金衍 客户预警 /// public class ClientWarningService : ClientBaseService { public ClientWarningService(OptUserInfo userInfo) : base(userInfo) { } public ClientWarningService(ClientBaseService baseService) : base(baseService) { } public string CheckedClient() { var query = DbContext.client.Where(x => x.ProcessStatus == "已开户" && x.isWarning != true); var clientdutys = (from duty in DbContext.clientduty.Where(x => x.ApprovalOrder < 1) join client in query on duty.ClientId equals client.id select duty).ToList(); var clients = query.ToList(); var expireDate = valuedateBLL.ValueDate; var dueDate = valuedateBLL.ValueDate.AddMonths(3); if (clients.Where(x => x.LicenseValidTime < expireDate || x.EvaluateExpireDate < expireDate).Any() || clientdutys.Where(x => x.IdCardEffectiveDate < expireDate || x.AuthorizeEffectiveEndDate < expireDate).Any()) { return "已到期"; } else if (clients.Where(x => x.LicenseValidTime <= dueDate || x.EvaluateExpireDate <= dueDate).Any() || clientdutys.Where(x => x.IdCardEffectiveDate <= dueDate || x.AuthorizeEffectiveEndDate <= dueDate).Any()) { return "即将到期"; } else { return "无异常"; } } public List GetExpiresWarning(ExpireWarningReq req) { var list = new List(); var dueDate = valuedateBLL.ValueDate.AddMonths(3); var query1 = DbContext.client.Where(x => x.ProcessStatus == "已开户"); if (!string.IsNullOrWhiteSpace(req.Number)) { query1 = query1.Where(x => x.Number.Contains(req.Number)); } if (!string.IsNullOrWhiteSpace(req.Name)) { query1 = query1.Where(x => x.Name.Contains(req.Name)); } var query2 = from duty in DbContext.clientduty.Where(x => x.ApprovalOrder < 1) join client in query1 on duty.ClientId equals client.id select duty; var clients = query1.ToList(); var clientdutys = query2.ToList(); var ids1 = clients.Where(x => x.LicenseValidTime <= dueDate || x.EvaluateExpireDate <= dueDate).Select(x => x.id).ToList(); var ids2 = clientdutys.Where(x => x.IdCardEffectiveDate <= dueDate || x.AuthorizeEffectiveEndDate <= dueDate).Select(x => x.ClientId??0).ToList(); ids1.AddRange(ids2); var ids= ids1.Distinct().ToList(); clients = clients.Where(x => ids.Contains(x.id)).ToList(); var datelast = new DateTime(3000, 12, 31); foreach (var c in clients) { var e = new ExpireWarning { LicenseValidTime = c.LicenseValidTime }; e.LicenseValidTimeStr = e.LicenseValidTime == datelast ? "长期有效" : e.LicenseValidTime?.ToString("yyyy-MM-dd"); e.EvaluateExpireDate = c.EvaluateExpireDate; e.EvaluateExpireDateStr = e.EvaluateExpireDate == datelast ? "长期有效" : e.EvaluateExpireDate?.ToString("yyyy-MM-dd"); var dutys = clientdutys.Where(x => x.ClientId == c.id); if (dutys.Any()) { e.IdCardEffectiveDate = dutys.Where(x => x.IdCardEffectiveDate != null).OrderBy(x => x.IdCardEffectiveDate).FirstOrDefault()?.IdCardEffectiveDate; e.IdCardEffectiveDateStr = e.IdCardEffectiveDate == datelast ? "长期有效" : e.IdCardEffectiveDate?.ToString("yyyy-MM-dd"); e.AuthorizeEffectiveEndDate = dutys.Where(x => x.AuthorizeEffectiveEndDate != null).OrderBy(x => x.AuthorizeEffectiveEndDate).FirstOrDefault()?.AuthorizeEffectiveEndDate; e.AuthorizeEffectiveEndDateStr = e.AuthorizeEffectiveEndDate == datelast ? "长期有效" : e.AuthorizeEffectiveEndDate?.ToString("yyyy-MM-dd"); } e.EvaluateDate = c.EvaluateDate; e.EvaluateDateStr = e.EvaluateDate?.ToString("yyyy-MM-dd"); e.isWarning = c.isWarning ?? false; e.id = c.id; e.EncryptId = c.EncryptId; e.Number = c.Number; e.Name = c.Name; list.Add(e); } if (ids.Any()) { if (req.StartExpireDate != null && req.EndExpireDate != null) { list = list.Where(x => (x.LicenseValidTime >= req.StartExpireDate && x.LicenseValidTime <= req.EndExpireDate) || (x.EvaluateExpireDate >= req.StartExpireDate && x.EvaluateExpireDate <= req.EndExpireDate) || (x.IdCardEffectiveDate >= req.StartExpireDate && x.IdCardEffectiveDate <= req.EndExpireDate) || (x.AuthorizeEffectiveEndDate >= req.StartExpireDate && x.AuthorizeEffectiveEndDate <= req.EndExpireDate)).ToList(); } else { if (req.StartExpireDate != null) { list = list.Where(x => x.LicenseValidTime >= req.StartExpireDate || x.EvaluateExpireDate >= req.StartExpireDate || x.IdCardEffectiveDate >= req.StartExpireDate || x.AuthorizeEffectiveEndDate >= req.StartExpireDate).ToList(); } if (req.EndExpireDate != null) { list = list.Where(x => x.LicenseValidTime <= req.EndExpireDate || x.EvaluateExpireDate <= req.EndExpireDate || x.IdCardEffectiveDate <= req.EndExpireDate || x.AuthorizeEffectiveEndDate <= req.EndExpireDate).ToList(); } } } return list; } public void UpdateWarning(int id) { var client = DbContext.client.Find(id); if (client != null) { client.isWarning = client.isWarning != true; _ = DbContext.SaveChanges(); } } public ExpireWarningStatus GetExpireStatus() { var expires = GetExpiresWarning(new ExpireWarningReq()); var ret = new ExpireWarningStatus { status = "无异常", isExpire = 0, isDue = 0, isExpire_all = 0, isDue_all = 0 }; if (expires.Count() > 0) { var expirelist = expires.Where(x => x.LicenseValidTime < ret.ExpireDate || x.EvaluateExpireDate < ret.ExpireDate || x.IdCardEffectiveDate < ret.ExpireDate || x.AuthorizeEffectiveEndDate < ret.ExpireDate).ToList(); var duelist = expires; if (expirelist.Count() > 0) { var expireids = expirelist.Select(x => x.id).ToList(); duelist = duelist.Where(x => !expireids.Contains(x.id)).ToList(); ret.status = "已到期"; ret.isExpire_all = expirelist.Count(); if (expirelist.Where(x => x.isWarning == true).Count() > 0) { ret.isExpire = expirelist.Where(x => x.isWarning != true).Count(); } else { ret.isExpire = ret.isExpire_all; } } if (duelist.Count() > 0) { ret.status = ret.status == "已到期" ? "已到期" : "即将到期"; ret.isDue_all = duelist.Count(); if (duelist.Where(x => x.isWarning == true).Count() > 0) { ret.isDue = duelist.Where(x => x.isWarning != true).Count(); } else { ret.isDue = ret.isDue_all; } } } return ret; } } public class ExpireWarning { public int id { get; set; } /// /// 加密主键 /// public string? EncryptId { get; set; } public string? Number { get; set; } public string? Name { get; set; } public DateTime? LicenseValidTime { get; set; } public string? LicenseValidTimeStr { get; set; } public DateTime? EvaluateDate { get; set; } public string? EvaluateDateStr { get; set; } public DateTime? EvaluateExpireDate { get; set; } public string? EvaluateExpireDateStr { get; set; } public DateTime? IdCardEffectiveDate { get; set; } public string? IdCardEffectiveDateStr { get; set; } public DateTime? AuthorizeEffectiveEndDate { get; set; } public string? AuthorizeEffectiveEndDateStr { get; set; } public bool isWarning { get; set; } } public class ExpireWarningReq { public string? Number { get; set; } public string? Name { get; set; } public DateTime? StartExpireDate { get; set; } public DateTime? EndExpireDate { get; set; } } public class ExpireWarningStatus { public DateTime ExpireDate { get { return valuedateBLL.ValueDate; } } public DateTime DueDate { get { return valuedateBLL.ValueDate.AddMonths(3); } } public string? status { get; set; } public int? isExpire { get; set; } public int? isDue { get; set; } public int? isExpire_all { get; set; } public int? isDue_all { get; set; } } }