节点在线、应用在线、配置在线使用令牌查询
大石头 authored at 2021-12-16 19:49:30
2.41 KiB
Stardust
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using NewLife;
using NewLife.Cube;
using NewLife.Cube.Extensions;
using NewLife.Web;
using Stardust.Data.Nodes;
using XCode.Membership;

namespace Stardust.Web.Areas.Nodes.Controllers;

/// <summary>产品版本管理。产品发布版本,一个版本包含多个面向不同.NET运行时的包</summary>
[Menu(42)]
[NodesArea]
public class ProductReleaseController : EntityController<ProductRelease>
{
    static ProductReleaseController()
    {
        LogOnChange = true;

        ListFields.RemoveCreateField().RemoveRemarkField();

        var list = ListFields;
        list.Clear();
        var allows = new[] { "Id", "Version", "ProductCode", "Enable", "Force", "Channel", "Remark", "CreateTime", "UpdateTime" };
        foreach (var item in allows)
        {
            list.AddListField(item);
        }

        {
            var df = ListFields.AddListField("Packages", "Remark");
            df.DisplayName = "发布包";
            df.Header = "发布包";
            df.Url = "ProductPackage?releaseId={Id}";
            df.Target = "_frame";
        }

        {
            var df = ListFields.AddListField("Log", "UpdateTime");
            df.DisplayName = "审计日志";
            df.Header = "审计日志";
            df.Url = "/Admin/Log?category=产品版本&linkId={Id}";
            df.Target = "_frame";
        }
    }

    /// <summary>高级搜索。按条件分页查询</summary>
    /// <param name="p">分页参数</param>
    /// <returns>实体列表</returns>
    protected override IEnumerable<ProductRelease> Search(Pager p)
    {
        var version = p["version"];
        var productCode = p["productCode"];
        var enable = p["enable"]?.ToBoolean();
        var force = p["force"]?.ToBoolean();
        var channel = (NodeChannels)p["channel"].ToInt();
        var start = p["dtStart"].ToDateTime();
        var end = p["dtEnd"].ToDateTime();
        var key = p["q"];

        if (channel <= 0) channel = (NodeChannels)(-1);

        return ProductRelease.Search(productCode, force, channel, enable, start, end, key, p);
    }

    protected override Int32 OnDelete(ProductRelease entity)
    {
        // 删除关联的所有发布包
        var packages = ProductPackage.FindAllByReleaseId(entity.Id);
        foreach (var pkg in packages)
        {
            pkg.Delete();
        }

        return base.OnDelete(entity);
    }
}