2016-04-21 15:48:38 +08:00
|
|
|
|
using System;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Linq.Expressions;
|
|
|
|
|
using OpenAuth.Domain.Interface;
|
|
|
|
|
|
|
|
|
|
namespace OpenAuth.Domain.Service
|
|
|
|
|
{
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 领域服务
|
|
|
|
|
/// <para>进出库管理服务</para>
|
|
|
|
|
/// </summary>
|
|
|
|
|
public class StockManagerService
|
|
|
|
|
{
|
|
|
|
|
private IStockRepository _repository;
|
|
|
|
|
private IOrgRepository _orgRepository;
|
2016-10-17 00:20:55 +08:00
|
|
|
|
private AuthoriseFactory _factory;
|
2016-04-21 15:48:38 +08:00
|
|
|
|
|
|
|
|
|
public StockManagerService(IStockRepository repository,
|
2016-10-17 00:20:55 +08:00
|
|
|
|
IOrgRepository orgRepository, AuthoriseFactory service)
|
2016-04-21 15:48:38 +08:00
|
|
|
|
{
|
|
|
|
|
_repository = repository;
|
|
|
|
|
_orgRepository = orgRepository;
|
2016-10-17 00:20:55 +08:00
|
|
|
|
_factory = service;
|
2016-04-21 15:48:38 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 根据部门ID得到进出库信息
|
|
|
|
|
/// </summary>
|
2017-10-11 16:19:34 +08:00
|
|
|
|
public dynamic Load(string username, string orgId, int pageindex, int pagesize)
|
2016-04-21 15:48:38 +08:00
|
|
|
|
{
|
|
|
|
|
|
2016-10-17 00:20:55 +08:00
|
|
|
|
var service = _factory.Create(username);
|
|
|
|
|
if (service.Orgs.Count == 0) //用户没有任何可见机构
|
2016-04-21 15:48:38 +08:00
|
|
|
|
{
|
|
|
|
|
return new
|
|
|
|
|
{
|
|
|
|
|
total = 0,
|
2016-10-17 15:04:30 +08:00
|
|
|
|
records = 0,
|
|
|
|
|
page = pageindex
|
2016-04-21 15:48:38 +08:00
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
2016-10-17 00:20:55 +08:00
|
|
|
|
var orgIds = service.Orgs.Select(u => u.Id).ToArray(); //用户可访问的机构ID
|
2016-04-21 15:48:38 +08:00
|
|
|
|
|
2016-09-05 20:07:10 +08:00
|
|
|
|
var orgs = _orgRepository.GetSubOrgs(orgId) //点击的节点与用户可访问的机构合并
|
2016-04-21 15:48:38 +08:00
|
|
|
|
.Where(u => orgIds.Contains(u.Id))
|
|
|
|
|
.Select(u => u.Id).ToArray();
|
|
|
|
|
|
2016-10-17 00:20:55 +08:00
|
|
|
|
var keys = service.Resources.Select(r => r.Key); //用户可访问的资源的KEY列表
|
2016-04-21 15:48:38 +08:00
|
|
|
|
|
2017-10-11 16:19:34 +08:00
|
|
|
|
Expression<Func<Stock, bool>> exp = u => u.OrgId != null &&orgs.Contains(u.OrgId) && (u.Viewable == "" || keys.Contains(u.Viewable));
|
2016-04-21 15:48:38 +08:00
|
|
|
|
var stocks = _repository.Find(pageindex, pagesize, "", exp);
|
|
|
|
|
int total = _repository.GetCount(exp);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return new
|
|
|
|
|
{
|
2016-10-17 15:04:30 +08:00
|
|
|
|
records = total,
|
|
|
|
|
total = (int)Math.Ceiling((double)total / pagesize),
|
|
|
|
|
rows = stocks,
|
|
|
|
|
page = pageindex
|
2016-04-21 15:48:38 +08:00
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
2017-10-11 16:19:34 +08:00
|
|
|
|
public Stock Find(string id)
|
2016-04-21 15:48:38 +08:00
|
|
|
|
{
|
|
|
|
|
var stock = _repository.FindSingle(u => u.Id == id);
|
|
|
|
|
if (stock == null) return new Stock();
|
|
|
|
|
|
|
|
|
|
return stock;
|
|
|
|
|
}
|
|
|
|
|
|
2017-10-11 16:19:34 +08:00
|
|
|
|
public void Delete(string[] id)
|
2016-04-21 15:48:38 +08:00
|
|
|
|
{
|
2016-10-17 15:04:30 +08:00
|
|
|
|
_repository.Delete(u =>id.Contains(u.Id));
|
2016-04-21 15:48:38 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void AddOrUpdate(Stock stock)
|
|
|
|
|
{
|
|
|
|
|
|
2017-10-11 16:19:34 +08:00
|
|
|
|
if (string.IsNullOrEmpty(stock.Id))
|
2016-04-21 15:48:38 +08:00
|
|
|
|
{
|
|
|
|
|
_repository.Add(stock);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
_repository.Update(stock);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|