Files
zszq-trs/YLErpDAL/Modules/ClientModule/ClientWarningService.cs
T
2025-04-11 09:36:49 +08:00

262 lines
9.9 KiB
C#

using MoreLinq;
using YLErp.BLL;
namespace YLErp.Modules.ClientModule
{
/// <summary>
/// 山证金衍 客户预警
/// </summary>
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<ExpireWarning> GetExpiresWarning(ExpireWarningReq req)
{
var list = new List<ExpireWarning>();
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; }
/// <summary>
/// 加密主键
/// </summary>
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; }
}
}