using System.Collections.Generic;
|
using System.IO;
|
using System.Linq;
|
|
namespace IStation.DAL
|
{
|
/// <summary>
|
/// 带ID的文件辅助类
|
/// </summary>
|
public class FileIdHelper<T> where T : Entity.BaseEntity
|
{
|
#region Get
|
|
/// <summary>
|
/// 查询全部
|
/// </summary>
|
public static List<T> GetAll(string path)
|
{
|
if (string.IsNullOrEmpty(path))
|
return default;
|
var fileName = FileHelper.GetFilePath<T>(path);
|
var list = FileHelper.GetFileObject<List<T>>(fileName);
|
return list;
|
}
|
|
/// <summary>
|
/// 根据 ID查询
|
/// </summary>
|
public static T GetByID(string path, long ID)
|
{
|
var list = GetAll(path);
|
if (list == null || list.Count < 1)
|
return default;
|
return list.Find(t => t.ID == ID);
|
}
|
|
/// <summary>
|
/// 根据 ID集合查询
|
/// </summary>
|
public static IEnumerable<T> GetByIds(string path, IEnumerable<long> Ids)
|
{
|
if (Ids == null || Ids.Count() < 1)
|
return default;
|
var list = GetAll(path);
|
return list?.Where(x => Ids.Contains(x.ID));
|
}
|
|
/// <summary>
|
/// 查询最近一条
|
/// </summary>
|
public static T GetLatest(string path)
|
{
|
var list = GetAll(path);
|
if (list == null || list.Count < 1)
|
return default;
|
return list.Last();
|
}
|
|
#endregion
|
|
#region Insert
|
|
/// <summary>
|
/// 插入
|
/// </summary>
|
public static long Insert(string path, T t)
|
{
|
if (string.IsNullOrEmpty(path))
|
return default;
|
if (t == null)
|
return default;
|
if (t.ID <= 0)
|
{
|
t.ID = SnowflakeIdHelper.NextId();
|
}
|
var fileName = FileHelper.GetFilePath<T>(path);
|
var list = FileHelper.GetFileObject<List<T>>(fileName) ?? new List<T>();
|
list.Add(t);
|
FileHelper.SaveObjectFile(fileName, list);
|
return t.ID;
|
}
|
|
/// <summary>
|
/// 插入
|
/// </summary>
|
public static long Insert(string path, IEnumerable<T> srcList, T t)
|
{
|
if (string.IsNullOrEmpty(path))
|
return default;
|
if (t == null)
|
return default;
|
if (t.ID <= 0)
|
{
|
t.ID = SnowflakeIdHelper.NextId();
|
}
|
var fileName = FileHelper.GetFilePath<T>(path);
|
var list = new List<T>();
|
if (srcList != null && srcList.Count() > 0)
|
{
|
list.AddRange(srcList);
|
}
|
list.Add(t);
|
FileHelper.SaveObjectFile(fileName, list);
|
return t.ID;
|
}
|
|
/// <summary>
|
/// 插入并返回
|
/// </summary>
|
public static T InsertR(string path, T t)
|
{
|
if (string.IsNullOrEmpty(path))
|
return default;
|
if (t == null)
|
return default;
|
if (t.ID <= 0)
|
{
|
t.ID = SnowflakeIdHelper.NextId();
|
}
|
var fileName = FileHelper.GetFilePath<T>(path);
|
var list = FileHelper.GetFileObject<List<T>>(fileName) ?? new List<T>();
|
list.Add(t);
|
FileHelper.SaveObjectFile(fileName, list);
|
return t;
|
}
|
|
/// <summary>
|
/// 插入并返回
|
/// </summary>
|
public static T InsertR(string path, IEnumerable<T> srcList, T t)
|
{
|
if (string.IsNullOrEmpty(path))
|
return default;
|
if (t == null)
|
return default;
|
if (t.ID <= 0)
|
{
|
t.ID = SnowflakeIdHelper.NextId();
|
}
|
var fileName = FileHelper.GetFilePath<T>(path);
|
var list = new List<T>();
|
if (srcList != null && srcList.Count() > 0)
|
{
|
list.AddRange(srcList);
|
}
|
list.Add(t);
|
FileHelper.SaveObjectFile(fileName, list);
|
return t;
|
}
|
|
/// <summary>
|
/// 批量插入
|
/// </summary>
|
public static bool Inserts(string path, IEnumerable<T> list)
|
{
|
if (string.IsNullOrEmpty(path))
|
return default;
|
if (list == null || list.Count() < 1)
|
return default;
|
var fileName = FileHelper.GetFilePath<T>(path);
|
var srcList = FileHelper.GetFileObject<List<T>>(fileName) ?? new List<T>();
|
var list_Ids = list.ToList();
|
list_Ids.ForEach(x =>
|
{
|
if (x.ID <= 0)
|
{
|
x.ID = SnowflakeIdHelper.NextId();
|
}
|
});
|
srcList.AddRange(list_Ids);
|
FileHelper.SaveObjectFile(fileName, srcList);
|
return true;
|
}
|
|
/// <summary>
|
/// 批量插入
|
/// </summary>
|
public static bool Inserts(string path, IEnumerable<T> srcList, IEnumerable<T> newList)
|
{
|
if (string.IsNullOrEmpty(path))
|
return default;
|
if (newList == null || newList.Count() < 1)
|
return default;
|
var list = new List<T>();
|
if (srcList != null && srcList.Count() > 0)
|
list.AddRange(srcList);
|
var newList1 = newList.ToList();
|
newList1.ForEach(x =>
|
{
|
if (x.ID <= 0)
|
{
|
x.ID = SnowflakeIdHelper.NextId();
|
}
|
});
|
list.AddRange(newList1);
|
var fileName = FileHelper.GetFilePath<T>(path);
|
FileHelper.SaveObjectFile(fileName, list);
|
return true;
|
}
|
|
/// <summary>
|
/// 批量插入并返回
|
/// </summary>
|
public static List<T> InsertRs(string path, IEnumerable<T> list)
|
{
|
if (string.IsNullOrEmpty(path))
|
return default;
|
if (list == null || list.Count() < 1)
|
return default;
|
var fileName = FileHelper.GetFilePath<T>(path);
|
var srcList = FileHelper.GetFileObject<List<T>>(fileName) ?? new List<T>();
|
var newList = list.ToList();
|
newList.ForEach(x =>
|
{
|
if (x.ID <= 0)
|
{
|
x.ID = SnowflakeIdHelper.NextId();
|
}
|
});
|
srcList.AddRange(newList);
|
FileHelper.SaveObjectFile(fileName, srcList);
|
return newList.ToList();
|
}
|
|
/// <summary>
|
/// 批量插入并返回
|
/// </summary>
|
public static List<T> InsertRs(string path, IEnumerable<T> srcList, IEnumerable<T> newList)
|
{
|
if (string.IsNullOrEmpty(path))
|
return default;
|
if (newList == null || newList.Count() < 1)
|
return default;
|
var list = new List<T>();
|
if (srcList != null && srcList.Count() > 0)
|
list.AddRange(srcList);
|
var newList1 = newList.ToList();
|
newList1.ForEach(x =>
|
{
|
if (x.ID <= 0)
|
{
|
x.ID = SnowflakeIdHelper.NextId();
|
}
|
});
|
list.AddRange(newList1);
|
var fileName = FileHelper.GetFilePath<T>(path);
|
FileHelper.SaveObjectFile(fileName, list);
|
return newList1.ToList();
|
}
|
|
#endregion
|
|
#region Update
|
/// <summary>
|
/// 更新
|
/// </summary>
|
public static bool Update(string path, T t)
|
{
|
if (string.IsNullOrEmpty(path))
|
return default;
|
if (t == null)
|
return default;
|
var fileName = FileHelper.GetFilePath<T>(path);
|
var list = FileHelper.GetFileObject<List<T>>(fileName);
|
if (list == null || list.Count < 1)
|
return default;
|
var src = list.Find(x => x.ID == t.ID);
|
if (src == null)
|
return default;
|
t.Map(src);
|
FileHelper.SaveObjectFile(fileName, list);
|
return true;
|
}
|
|
/// <summary>
|
/// 批量更新
|
/// </summary>
|
public static bool Updates(string path, IEnumerable<T> list)
|
{
|
if (string.IsNullOrEmpty(path))
|
return default;
|
if (list == null || list.Count() < 1)
|
return default;
|
var fileName = FileHelper.GetFilePath<T>(path);
|
var srcList = FileHelper.GetFileObject<List<T>>(fileName);
|
if (srcList == null || srcList.Count < 1)
|
return default;
|
foreach (var t in list)
|
{
|
var src = srcList.Find(x => x.ID == t.ID);
|
if (src == null)
|
return default;
|
t.Map(src);
|
}
|
FileHelper.SaveObjectFile(fileName, srcList);
|
return true;
|
}
|
#endregion
|
|
#region Cover
|
/// <summary>
|
/// 覆盖
|
/// </summary>
|
public static long Cover(string path, T t)
|
{
|
if (string.IsNullOrEmpty(path))
|
return default;
|
if (t == null)
|
return default;
|
if (t.ID < 1)
|
t.ID = SnowflakeIdHelper.NextId();
|
var fileName = FileHelper.GetFilePath<T>(path);
|
var list = new List<T>
|
{
|
t
|
};
|
FileHelper.SaveObjectFile(fileName, list);
|
return t.ID;
|
}
|
|
/// <summary>
|
/// 覆盖并返回
|
/// </summary>
|
public static T CoverR(string path, T t)
|
{
|
if (string.IsNullOrEmpty(path))
|
return default;
|
if (t == null)
|
return default;
|
if (t.ID < 1)
|
t.ID = SnowflakeIdHelper.NextId();
|
var fileName = FileHelper.GetFilePath<T>(path);
|
var list = new List<T>
|
{
|
t
|
};
|
FileHelper.SaveObjectFile(fileName, list);
|
return t;
|
}
|
|
/// <summary>
|
/// 批量覆盖
|
/// </summary>
|
public static bool Covers(string path, IEnumerable<T> list)
|
{
|
if (string.IsNullOrEmpty(path))
|
return default;
|
if (list == null || list.Count() < 1)
|
return default;
|
var fileName = FileHelper.GetFilePath<T>(path);
|
foreach (var t in list)
|
{
|
if (t.ID < 1)
|
t.ID = SnowflakeIdHelper.NextId();
|
}
|
FileHelper.SaveObjectFile(fileName, list);
|
return true;
|
}
|
|
/// <summary>
|
/// 批量覆盖并返回
|
/// </summary>
|
public static List<T> CoversR(string path, IEnumerable<T> list)
|
{
|
if (string.IsNullOrEmpty(path))
|
return default;
|
if (list == null || list.Count() < 1)
|
return default;
|
var fileName = FileHelper.GetFilePath<T>(path);
|
foreach (var t in list)
|
{
|
if (t.ID < 1)
|
t.ID = SnowflakeIdHelper.NextId();
|
}
|
FileHelper.SaveObjectFile(fileName, list);
|
return list.ToList();
|
}
|
#endregion
|
|
#region Delete
|
/// <summary>
|
/// 根据 ID删除
|
/// </summary>
|
public static bool DeleteByID(string path, long ID)
|
{
|
if (string.IsNullOrEmpty(path))
|
return false;
|
var fileName = FileHelper.GetFilePath<T>(path);
|
var list = FileHelper.GetFileObject<List<T>>(fileName);
|
if (list == null || list.Count < 1)
|
return false;
|
var item = list.Find(t => t.ID == ID);
|
if (item == null)
|
return false;
|
list.Remove(item);
|
if (list.Count < 1)
|
File.Delete(fileName);
|
else
|
FileHelper.SaveObjectFile(fileName, list);
|
return true;
|
}
|
|
/// <summary>
|
/// 根据 ID集合删除
|
/// </summary>
|
public static bool DeleteByIds(string path, IEnumerable<long> Ids)
|
{
|
if (string.IsNullOrEmpty(path))
|
return false;
|
if (Ids == null || Ids.Count() < 1)
|
return false;
|
var fileName = FileHelper.GetFilePath<T>(path);
|
var list = FileHelper.GetFileObject<List<T>>(fileName);
|
if (list == null || list.Count < 1)
|
return false;
|
list.RemoveAll(x => Ids.Contains(x.ID));
|
if (list.Count < 1)
|
File.Delete(fileName);
|
else
|
FileHelper.SaveObjectFile(fileName, list);
|
return true;
|
}
|
|
/// <summary>
|
/// 删除全部
|
/// </summary>
|
public static bool DeleteAll(string path)
|
{
|
if (string.IsNullOrEmpty(path))
|
return false;
|
var fileName = FileHelper.GetFilePath<T>(path);
|
if (File.Exists(fileName))
|
File.Delete(fileName);
|
return true;
|
}
|
|
#endregion
|
|
#region Exist
|
|
/// <summary>
|
/// 是否存在
|
/// </summary>
|
public static bool IsExist(string path)
|
{
|
if (string.IsNullOrEmpty(path))
|
return false;
|
var fileName = FileHelper.GetFilePath<T>(path);
|
if (!File.Exists(fileName))
|
return false;
|
var all = GetAll(path);
|
if (all == null || all.Count < 1)
|
return false;
|
return true;
|
}
|
|
#endregion
|
}
|
}
|