OpenAuth.Net/OpenAuth.App/OrgManagerApp.cs
2015-11-06 00:27:08 +08:00

124 lines
3.9 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using OpenAuth.Domain;
using OpenAuth.Domain.Interface;
using System;
using System.Collections.Generic;
using System.Linq;
namespace OpenAuth.App
{
public class OrgManagerApp
{
private IOrgRepository _repository;
public OrgManagerApp(IOrgRepository repository)
{
_repository = repository;
}
public IEnumerable<Org> GetAll()
{
return _repository.LoadOrgs();
}
/// <summary>
/// 部门的直接子部门
/// <para>TODO:可以根据用户的喜好决定选择LoadAllChildren或LoadDirectChildren</para>
/// </summary>
/// <param name="orgId">The org unique identifier.</param>
/// <returns>IEnumerable{Org}.</returns>
public IEnumerable<Org> LoadDirectChildren(int orgId)
{
return _repository.Find(u => u.ParentId == orgId);
}
/// <summary>
/// 得到部门的所有子部门
/// <para>如果orgId为0表示取得所有部门</para>
/// </summary>
public IEnumerable<Org> LoadAllChildren(int orgId)
{
string cascadeId = "0.";
if (orgId != 0)
{
var org = _repository.FindSingle(u => u.Id == orgId);
if (org == null)
throw new Exception("未能找到指定对象信息");
cascadeId = org.CascadeId;
}
return _repository.Find(u => u.CascadeId.Contains(cascadeId) && u.Id != orgId);
}
/// <summary>
/// 添加部门
/// </summary>
/// <param name="org">The org.</param>
/// <returns>System.Int32.</returns>
/// <exception cref="System.Exception">未能找到该组织的父节点信息</exception>
public int AddOrg(Org org)
{
string cascadeId;
int currentCascadeId = GetMaxCascadeId(org.ParentId);
if (org.ParentId != 0)
{
var parentOrg = _repository.FindSingle(o => o.Id == org.ParentId);
if (parentOrg != null)
{
cascadeId = parentOrg.CascadeId + "." + currentCascadeId;
org.ParentName = parentOrg.Name;
}
else
{
throw new Exception("未能找到该组织的父节点信息");
}
}
else
{
cascadeId = "0." + currentCascadeId;
org.ParentName = "";
}
org.CascadeId = cascadeId;
org.CreateTime = DateTime.Now;
_repository.Add(org);
_repository.Save();
return org.Id;
}
public void ModifyOrg(Org org)
{
_repository.Update(u =>u.Id == org.Id,org);
}
/// <summary>
/// 删除指定ID的部门及其所有子部门
/// </summary>
public void DelOrg(int id)
{
var delOrg = _repository.FindSingle(u => u.Id == id);
if (delOrg == null) return;
_repository.Delete(u => u.CascadeId.Contains(delOrg.CascadeId));
}
#region
//根据同一级中最大的语义ID
private int GetMaxCascadeId(int parentId)
{
int currentCascadeId = 1;
var maxCascadeIdOrg = _repository.Find(o => o.ParentId == parentId)
.OrderByDescending(o => o.CascadeId).FirstOrDefault();
if (maxCascadeIdOrg != null)
{
var cascades = maxCascadeIdOrg.CascadeId.Split('.');
currentCascadeId = int.Parse(cascades[cascades.Length - 1]) + 1;
}
return currentCascadeId;
}
#endregion
}
}