sunpengfei
2025-08-06 744ce126fd5dc3a0448719832d1e9667e44d30b5
FlexJobApi.User.Application/Menus/Commands/SaveMenuButtonCommandHandler.cs
@@ -24,39 +24,31 @@
        /// <inheritdoc/>
        public async Task<Guid> Handle(SaveMenuButtonCommand request, CancellationToken cancellationToken)
        {
            if (request.Id.HasValue)
            {
                var entity = await rep.FirstOrDefaultAsync(it => it.Id == it.Id);
                if (entity.ParentId != request.ParentId) throw Oops.Oh(EnumErrorCodeType.s410, "上级Id");
                request.Adapt(entity);
                if (await CheckExist(entity)) throw Oops.Oh(EnumErrorCodeType.s405, "菜单编号");
                await rep.UpdateAsync(entity);
                return entity.Id;
            }
            else
            {
                var entity = new Menu();
                request.Adapt(entity);
                if (await CheckExist(entity)) throw Oops.Oh(EnumErrorCodeType.s405, "菜单编号");
                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.Group == entity.Group
                    && it.Location == entity.Location
                    && it.Code == entity.Code
                    && it.Id != entity.Id);
            var parent = await rep.FirstOrDefaultAsync(it => it.Id == request.ParentId);
            if (parent == null) throw Oops.Oh(EnumErrorCodeType.s404, "上级菜单");
            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);
        }
    }
}