using System;
using System.Linq;
using OpenAuth.Repository.Core;
using OpenAuth.Repository.Domain;
using OpenAuth.Repository.Interface;
namespace OpenAuth.App
{
///
/// 业务层基类,UnitWork用于事务操作,Repository用于普通的数据库操作
/// 如用户管理:Class UserManagerApp:BaseApp
///
///
public class BaseApp where T:Entity
{
///
/// 用于事务操作
///
/// The unit work.
public IUnitWork UnitWork { get; set; }
///
/// 用于普通的数据库操作
///
/// The repository.
public IRepository Repository { get; set; }
///
/// 按id批量删除
///
///
public void Delete(string[] ids)
{
Repository.Delete(u => ids.Contains(u.Id));
}
public T Get(string id)
{
return Repository.FindSingle(u => u.Id == id);
}
///
/// 如果一个类有层级结构(树状),则修改该节点时,要修改该节点的所有子节点
/// //修改对象的级联ID,生成类似XXX.XXX.X.XX
///
/// U必须是一个继承TreeEntity的结构
///
public void ChangeModuleCascade(U entity) where U:TreeEntity
{
string cascadeId;
int currentCascadeId = 1; //当前结点的级联节点最后一位
var sameLevels = UnitWork.Find(o => o.ParentId == entity.ParentId && o.Id != entity.Id);
foreach (var obj in sameLevels)
{
int objCascadeId = int.Parse(obj.CascadeId.TrimEnd('.').Split('.').Last());
if (currentCascadeId <= objCascadeId) currentCascadeId = objCascadeId + 1;
}
if (!string.IsNullOrEmpty(entity.ParentId))
{
var parentOrg = UnitWork.FindSingle(o => o.Id == entity.ParentId);
if (parentOrg != null)
{
cascadeId = parentOrg.CascadeId + currentCascadeId + ".";
entity.ParentName = parentOrg.Name;
}
else
{
throw new Exception("未能找到该组织的父节点信息");
}
}
else
{
cascadeId = ".0." + currentCascadeId + ".";
entity.ParentName = "根节点";
}
entity.CascadeId = cascadeId;
}
}
}