sunpengfei
2025-08-07 177aa6f1c4601e4fb34aff04c4e328c98b489888
FlexJobApi.User.Application/Menus/Commands/SaveMenuButtonCommandHandler.cs
@@ -26,44 +26,29 @@
        {
            var parent = await rep.FirstOrDefaultAsync(it => it.Id == request.ParentId);
            if (parent == null) throw Oops.Oh(EnumErrorCodeType.s404, "上级菜单");
            if (request.Id.HasValue)
            {
                var entity = await rep.FirstOrDefaultAsync(it => it.Id == request.Id);
                if (entity == null) throw Oops.Oh(EnumErrorCodeType.s404, "该菜单");
                if (entity.ParentId != request.ParentId) throw Oops.Oh(EnumErrorCodeType.s410, "上级Id");
                request.Adapt(entity);
                if (await CheckExist(entity)) throw Oops.Oh(EnumErrorCodeType.s406, "菜单编号");
                await rep.UpdateAsync(entity);
                return entity.Id;
            }
            else
            {
                var entity = new Menu();
                entity.Path = $"{parent.Path}{parent.Code}/";
                entity.Type = EnumMenuType.Button;
                entity.VisitLevel = parent.VisitLevel;
                request.Adapt(entity);
                if (await CheckExist(entity)) throw Oops.Oh(EnumErrorCodeType.s406, "菜单编号");
                await rep.InsertAsync(entity);
                return entity.Id;
            }
        }
        /// <summary>
        /// 校验菜单是否重复
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        private async Task<bool> CheckExist(Menu entity)
        {
            return await rep.AsQueryable().AsNoTracking()
                .AnyAsync(it =>
                    it.ParentId == entity.ParentId
                    && it.Type == entity.Type
                    && it.Group == entity.Group
                    && it.Location == entity.Location
                    && it.Code == entity.Code
                    && it.Id != entity.Id);
            return await request.SaveData<Menu, SaveMenuButtonCommand>(
                it =>
                    it.ParentId == request.ParentId
                    && it.Type == EnumMenuType.Button
                    && it.Group == request.Group
                    && it.Location == request.Location
                    && it.Code == request.Code
                    && it.Id != request.Id,
                (entity) =>
                {
                    if (request.Id.HasValue)
                    {
                        if (entity.ParentId != request.ParentId) throw Oops.Oh(EnumErrorCodeType.s410, "上级Id");
                    }
                    else
                    {
                        entity.Path = $"{parent.Path}{parent.Code}/";
                        entity.Type = EnumMenuType.Button;
                        entity.VisitLevel = parent.VisitLevel;
                    }
                    request.Adapt(entity);
                },
                cancellationToken);
        }
    }
}