Files
zszq-trs/YLErpWeb/Models/AssetUnitModel.cs
T
2024-05-09 14:06:26 +08:00

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();
}
}
}