sunpengfei
2025-08-08 32288af3e5f12bc48d8360114c872fde5d9ff4a8
FlexJobApi.Core/Utils/ResourceUtils/ResourceUtils.cs
@@ -187,7 +187,7 @@
                }
            }
            var resources = await SaveResourcesAsync(models, traceId, rep);
            var resources = await SaveResourcesAsync(models, rep);
            DynamicControllersHotPlug(resources, provider);
@@ -201,7 +201,7 @@
        /// <param name="traceId"></param>
        /// <param name="rep"></param>
        /// <returns></returns>
        private static async Task<List<Resource>> SaveResourcesAsync(List<ResourceModel> models, string traceId, IRepository<Resource> rep = null)
        private static async Task<List<Resource>> SaveResourcesAsync(List<ResourceModel> models, IRepository<Resource> rep = null)
        {
            rep = rep ?? Db.GetRepository<Resource>();
            var resources = await rep.AsQueryable()
@@ -213,22 +213,33 @@
                if (resource == null)
                {
                    resource = new Resource();
                    resource.Id = IDGen.NextID();
                    resource.CreatedTime = DateTimeOffset.Now;
                    model.Adapt(resource);
                    await rep.InsertAsync(resource);
                    resources.Add(resource);
                }
                else
                {
                    model.Adapt(resource);
                    await rep.UpdateAsync(resource);
                    var resourceBakModel = new ResourceModel();
                    resource.Adapt(resourceBakModel);
                    resourceBakModel.TraceId = model.TraceId;
                    resourceBakModel.DynamicAssemblyName = model.DynamicAssemblyName;
                    if (resourceBakModel.ToJson() != model.ToJson())
                    {
                        model.Adapt(resource);
                        resource.UpdatedTime = DateTimeOffset.Now;
                        await rep.UpdateAsync(resource);
                    }
                }
            }
            var expiredResources = resources.Where(it => it.TraceId != traceId).ToList();
            var expiredResources = resources.Where(it => !models.Any(m => m.Route == it.Route && m.Method == it.Method)).ToList();
            foreach (var expiredResource in expiredResources)
            {
                expiredResource.IsExpired = true;
                await rep.UpdateAsync(expiredResource);
                //expiredResource.IsExpired = true;
                //await rep.UpdateAsync(expiredResource);
                await rep.DeleteAsync(expiredResource);
            }
            return resources.Where(it => !it.IsExpired).ToList();