69 lines
2.6 KiB
C#
69 lines
2.6 KiB
C#
namespace YLErp.Web.Models
|
|
{
|
|
public class AssetUnitModel
|
|
{
|
|
/// <summary>
|
|
/// 簿记账户组包含的簿记账户和已有的资产账户合并取交集
|
|
/// </summary>
|
|
public static IEnumerable<int> IntersectAssetUnits(IEnumerable<int> assetGroupIds,
|
|
IEnumerable<int> reqAssetUnitIds, IEnumerable<int> userAssetUnitIds = null)
|
|
|
|
{
|
|
//首先合并所有的簿记账户ID,如果用户关联的资产账户为空集合直接返回
|
|
//重点逻辑:任何一个传入的条件集合成立,则不能返回空集合,应返回一个0值的集合保证过滤条件生效
|
|
|
|
var assetFlag = 0;
|
|
|
|
IEnumerable<int> assetunitIds = null;
|
|
|
|
if (reqAssetUnitIds != null && reqAssetUnitIds.Any(n => n > 0))
|
|
{
|
|
assetFlag = 1;
|
|
assetunitIds = reqAssetUnitIds;
|
|
if (userAssetUnitIds == null)
|
|
{
|
|
assetunitIds = reqAssetUnitIds.Where(n => n > 0).ToArray();
|
|
}
|
|
else if (userAssetUnitIds.Any(n => n > 0))
|
|
{
|
|
assetFlag |= 2;
|
|
assetunitIds = userAssetUnitIds.Intersect(reqAssetUnitIds).Where(n => n > 0).ToArray();
|
|
}
|
|
}
|
|
else if (userAssetUnitIds != null) //传空集合表明请求用户没有绑定任何簿记
|
|
{
|
|
assetFlag |= 2;
|
|
assetunitIds = userAssetUnitIds;
|
|
}
|
|
|
|
//然后将合并后的簿记账户ID和簿记账户组合并
|
|
|
|
if (assetGroupIds == null || !assetGroupIds.Any(n => n >= 0))
|
|
{
|
|
return assetFlag > 0 ? (assetunitIds.Any(n => n > 0) ? assetunitIds : new[] { 0 }) : Enumerable.Empty<int>();
|
|
}
|
|
|
|
var groupAssetIds = DataCacheProvider.GetAssetUnitDataSource().AsQueryable()
|
|
.Where(x => assetGroupIds.Contains(x.GroupId)).Select(x => x.id).ToArray();
|
|
|
|
if (assetFlag > 0)
|
|
{
|
|
assetunitIds = groupAssetIds.Intersect(assetunitIds).ToArray();
|
|
}
|
|
else
|
|
{
|
|
assetunitIds = groupAssetIds;
|
|
}
|
|
|
|
return assetunitIds.Any(n => n > 0) ? assetunitIds : new[] { 0 };
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取簿记账户组选项数据
|
|
/// </summary>
|
|
public static List<SelectItem> GetAllAssetUnitGroupItem()
|
|
{
|
|
return DataCacheProvider.GetAssetUnitGroupDataSource().AsQueryable().Select(s => new SelectItem { Text = s.Name, Value = s.id.ToString() }).ToList();
|
|
}
|
|
}
|
|
} |