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