namespace YLErp.Web.Models { public class AssetUnitModel { /// /// 簿记账户组包含的簿记账户和已有的资产账户合并取交集 /// public static IEnumerable IntersectAssetUnits(IEnumerable assetGroupIds, IEnumerable reqAssetUnitIds, IEnumerable userAssetUnitIds = null) { //首先合并所有的簿记账户ID,如果用户关联的资产账户为空集合直接返回 //重点逻辑:任何一个传入的条件集合成立,则不能返回空集合,应返回一个0值的集合保证过滤条件生效 var assetFlag = 0; IEnumerable 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(); } 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 }; } /// /// 获取簿记账户组选项数据 /// public static List GetAllAssetUnitGroupItem() { return DataCacheProvider.GetAssetUnitGroupDataSource().AsQueryable().Select(s => new SelectItem { Text = s.Name, Value = s.id.ToString() }).ToList(); } } }