sunpengfei
2025-08-19 e94d90fd7d2ec6fcb41fb6aa6fc28e3f9d39ba95
FlexJobApi.FlexJobServer.Application/Tasks/Commands/TaskInfoCommandHandler.cs
@@ -21,7 +21,8 @@
        ) :
        IRequestHandler<SaveTaskInfoCommand, Guid>,
        IRequestHandler<SetTaskInfoReleaseStatusCommand, int>,
        IRequestHandler<SetTaskInfoRecommendStatusCommand, int>
        IRequestHandler<SetTaskInfoRecommendStatusCommand, int>,
        IRequestHandler<DeleteTaskInfoCommand, int>
    {
        private readonly IRepository<TaskInfo> rep = rep;
@@ -40,7 +41,7 @@
            return await request.SaveData<TaskInfo, SaveTaskInfoCommand>(
                 q =>
                 {
                     q = TaskInfoRepository.GetQueryable(rep)
                     q = TaskInfoRepository.GetQueryable(rep, false)
                          .Include(it => it.Benefits)
                          .Include(it => it.CredentialLimits);
                     return q;
@@ -56,6 +57,7 @@
                         entity.RecommendStatus = EnumTaskRecommendStatus.No;
                         BuildCode(entity).Wait();
                     }
                     request.Adapt(entity);
                     entity.Benefits = request.Benefits
                         .Select(it => new TaskInfoBenefit
                         {
@@ -68,7 +70,6 @@
                             TypeCode = it
                         })
                         .ToList();
                     request.Adapt(entity);
                 },
                 cancellationToken);
        }
@@ -81,7 +82,7 @@
        /// <returns></returns>
        public async Task<int> Handle(SetTaskInfoReleaseStatusCommand request, CancellationToken cancellationToken)
        {
            var entities = await TaskInfoRepository.GetQueryable(rep)
            var entities = await TaskInfoRepository.GetQueryable(rep, false)
                .Where(it => request.Ids.Contains(it.Id))
                .ToListAsync();
            foreach (var entity in entities)
@@ -100,17 +101,44 @@
        /// <returns></returns>
        public async Task<int> Handle(SetTaskInfoRecommendStatusCommand request, CancellationToken cancellationToken)
        {
            var entities = await TaskInfoRepository.GetQueryable(rep)
                .Where(it => request.Ids.Contains(it.Id))
            var entities = await TaskInfoRepository.GetQueryable(rep, false)
                .Where(it => request.Ids.Contains(it.Id) && it.RecommendStatus != request.RecommendStatus)
                .ToListAsync();
            foreach (var entity in entities)
            if (entities.IsNotNull())
            {
                entity.RecommendStatus = request.RecommendStatus;
                foreach (var entity in entities)
                {
                    entity.RecommendStatus = request.RecommendStatus;
                    if (entity.RecommendStatus == EnumTaskRecommendStatus.Yes)
                    {
                        entity.RecommendTime = DateTime.Now;
                    }
                }
                await rep.UpdateAsync(entities);
            }
            await rep.UpdateAsync(entities);
            return entities.Count;
        }
        /// <summary>
        /// 删除任务
        /// </summary>
        /// <param name="request"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public Task<int> Handle(DeleteTaskInfoCommand request, CancellationToken cancellationToken)
        {
            return request.DeleteData<TaskInfo>(
                q =>
                {
                    q = TaskInfoRepository.GetQueryable(rep, false);
                    if (q.AsNoTracking().Any(it => request.Ids.Contains(it.Id) && it.Status == EnumTaskStatus.Complete))
                    {
                        throw Oops.Oh(EnumErrorCodeType.s510, "已安排的任务无法删除");
                    }
                    return q;
                }, cancellationToken);
        }
        private async Task BuildCode(TaskInfo entity)
        {
            entity.Code = $"{DateTime.Now:yyyyMMddHHmm}{new Random(IDGen.NextID().GetHashCode()).Next(1000, 9999)}";