sunpengfei
2025-08-07 d4c8b251c5fa8de97b9236352eb03afb759ec3fe
FlexJobApi.Application/Dictionaries/Commands/DictionaryDataCommandHandler.cs
@@ -1,7 +1,12 @@
using FlexJobApi.Core;
using Furion.DatabaseAccessor;
using Furion.FriendlyException;
using Mapster;
using MediatR;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
@@ -11,25 +16,56 @@
    /// <summary>
    /// 数据字典命令处理器
    /// </summary>
    public class DictionaryDataCommandHandler :
    public class DictionaryDataCommandHandler(
            IRepository<DictionaryData> rep,
            IRepository<DictionaryCategory> repDictionaryCategory
        ) :
        IRequestHandler<SaveDictionaryDataCommand, Guid>,
        IRequestHandler<SetDictionaryDataIsDisabledCommand, int>
    {
        private readonly IRepository<DictionaryData> rep = rep;
        private readonly IRepository<DictionaryCategory> repDictionaryCategory = repDictionaryCategory;
        /// <summary>
        /// 保存数据字典
        /// </summary>
        /// <param name="request"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public Task<Guid> Handle(SaveDictionaryDataCommand request, CancellationToken cancellationToken)
        public async Task<Guid> Handle(SaveDictionaryDataCommand request, CancellationToken cancellationToken)
        {
            return request.SaveData<DictionaryData, SaveDictionaryDataCommand>(
                (q, e, r) => q.Any(it =>
            var category = await repDictionaryCategory
                .Where(it => it.Id == request.CategoryId || it.Code == request.CategoryCode)
                .Select(it => new
                {
                    it.Id,
                    it.Code
                })
                .FirstOrDefaultAsync();
            if (category == null) throw Oops.Oh(EnumErrorCodeType.s404, "数据字典类别");
            request.CategoryId = category.Id;
            if (!request.Code.StartsWith($"{category.Code}-")) throw Oops.Oh(EnumErrorCodeType.s400, "编号开头需要包含类别编号-");
            return await request.SaveData<DictionaryData, SaveDictionaryDataCommand>(
                null,
                it =>
                    it.CategoryId == request.CategoryId
                    && it.ParentId == request.ParentId
                    && it.Code == request.Code
                    && it.Content == request.Content), cancellationToken);
                    && it.Id != request.Id,
                (entity) =>
                {
                    entity.Path = DbUtils.GetTreeDataPath<DictionaryData>(request.ParentId, cancellationToken).Result;
                    if (request.Id.HasValue)
                    {
                        if (entity.Code != request.Code) throw Oops.Oh(EnumErrorCodeType.s400, "编号不可修改");
                        DbUtils.UpdateTreeDataChildrenPath<DictionaryData>(
                           $"{entity.Path}/{entity.Code}/",
                           $"{entity.Path}/{request.Code}/",
                           cancellationToken).Wait();
                    }
                    request.Adapt(entity);
                },
                cancellationToken);
        }
        /// <summary>
@@ -40,7 +76,7 @@
        /// <returns></returns>
        public Task<int> Handle(SetDictionaryDataIsDisabledCommand request, CancellationToken cancellationToken)
        {
            return request.SetIsDisable<DictionaryData>(cancellationToken: cancellationToken);
            return request.SetIsDisabled<DictionaryData>(cancellationToken: cancellationToken);
        }
    }
}