增加初始化类文件
xiyunfei authored at 2026-02-27 00:31:51
6.12 KiB
NewLife.WeChat
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Runtime.Serialization;
using System.Xml.Serialization;
using NewLife;
using NewLife.Data;
using NewLife.Log;
using XCode;
using XCode.Cache;
using XCode.Membership;

namespace NewLife.WeChat.Entities;

/// <summary>微信配置。存储微信应用的AppId和AppSecret等配置信息</summary>
public partial class 微信配置 : Entity<微信配置>
{
    #region 对象操作
    static 微信配置()
    {
        // 过滤器
        Meta.Modules.Add<TimeModule>();
        Meta.Modules.Add<IPModule>();

        // 单对象缓存
        var sc = Meta.SingleCache;
        sc.FindSlaveKeyMethod = k => Find(_.AppId == k);
        sc.GetSlaveKeyMethod = e => e.AppId;
    }

    /// <summary>验证数据,通过抛出异常的方式提示验证失败。</summary>
    /// <param name="isNew">是否插入</param>
    public override void Valid(Boolean isNew)
    {
        // 如果没有脏数据,则不需要进行任何处理
        if (!HasDirty) return;

        // 建议先调用基类方法,基类方法会做一些统一处理
        base.Valid(isNew);

        // 在新插入数据或者修改了指定字段时进行修正
        if (AppName.IsNullOrEmpty()) throw new ArgumentNullException(nameof(AppName), "应用名称不能为空");
        if (AppId.IsNullOrEmpty()) throw new ArgumentNullException(nameof(AppId), "AppId不能为空");
        if (AppSecret.IsNullOrEmpty()) throw new ArgumentNullException(nameof(AppSecret), "AppSecret不能为空");

        // 默认启用
        if (isNew && !Dirtys[nameof(IsEnabled)]) IsEnabled = true;
    }

    /// <summary>已重载。显示友好的名称</summary>
    /// <returns></returns>
    public override String ToString() => AppName;
    #endregion

    #region 扩展属性
    /// <summary>应用分类文本</summary>
    [XmlIgnore, IgnoreDataMember]
    public String AppCategoryText => AppCategory switch
    {
        1 => "公众号",
        2 => "小程序",
        3 => "APP",
        _ => "未知"
    };
    #endregion

    #region 扩展查询
    /// <summary>根据编号查找</summary>
    /// <param name="id">编号</param>
    /// <returns>实体对象</returns>
    public static 微信配置 FindById(Int32 id)
    {
        if (id <= 0) return null;

        // 单对象缓存
        return Meta.SingleCache[id];
    }

    /// <summary>根据AppId查找</summary>
    /// <param name="appid">AppId</param>
    /// <returns>实体对象</returns>
    public static 微信配置 FindByAppId(String appid)
    {
        if (appid.IsNullOrEmpty()) return null;

        // 单对象缓存
        return Meta.SingleCache.GetItemWithSlaveKey(appid) as 微信配置;
    }

    /// <summary>查询所有启用的配置</summary>
    /// <returns>实体列表</returns>
    public static IList<微信配置> FindAllEnabled()
    {
        return FindAll(_.IsEnabled == true);
    }

    /// <summary>根据租户查询配置</summary>
    /// <param name="tenantid">租户编号</param>
    /// <returns>实体列表</returns>
    public static IList<微信配置> FindAllByTenant(Int32 tenantid)
    {
        return FindAll(_.TenantId == tenantid & _.IsEnabled == true);
    }

    /// <summary>根据应用分类查询配置</summary>
    /// <param name="category">应用分类</param>
    /// <returns>实体列表</returns>
    public static IList<微信配置> FindAllByCategory(Int32 category)
    {
        return FindAll(_.AppCategory == category & _.IsEnabled == true);
    }
    #endregion

    #region 高级查询
    /// <summary>高级查询</summary>
    /// <param name="appid">微信AppId</param>
    /// <param name="appname">应用名称</param>
    /// <param name="category">应用分类</param>
    /// <param name="tenantid">租户编号</param>
    /// <param name="enabled">是否启用</param>
    /// <param name="start">创建时间开始</param>
    /// <param name="end">创建时间结束</param>
    /// <param name="key">关键字</param>
    /// <param name="page">分页参数信息。可携带统计和数据权限扩展查询等信息</param>
    /// <returns>实体列表</returns>
    public static IList<微信配置> Search(String appid, String appname, Int32? category, Int32? tenantid, Boolean? enabled, DateTime start, DateTime end, String key, PageParameter page)
    {
        var exp = new WhereExpression();

        if (!appid.IsNullOrEmpty()) exp &= _.AppId == appid;
        if (!appname.IsNullOrEmpty()) exp &= _.AppName.Contains(appname);
        if (category != null) exp &= _.AppCategory == category;
        if (tenantid != null) exp &= _.TenantId == tenantid;
        if (enabled != null) exp &= _.IsEnabled == enabled;
        exp &= _.CreateTime.Between(start, end);
        if (!key.IsNullOrEmpty()) exp &= _.AppId.Contains(key) | _.AppName.Contains(key) | _.Remark.Contains(key);

        return FindAll(exp, page);
    }
    #endregion

    #region 业务操作
    #endregion
}

/// <summary>微信配置接口</summary>
public partial interface I微信配置
{
    #region 属性
    /// <summary>编号</summary>
    Int32 Id { get; set; }

    /// <summary>应用名称</summary>
    String AppName { get; set; }

    /// <summary>微信AppId</summary>
    String AppId { get; set; }

    /// <summary>微信AppSecret</summary>
    String AppSecret { get; set; }

    /// <summary>应用类型。公众号/小程序/企业微信</summary>
    String AppType { get; set; }

    /// <summary>应用分类。1=公众号,2=小程序,3=APP</summary>
    Int32 AppCategory { get; set; }

    /// <summary>租户编号。用于多租户场景的数据隔离</summary>
    Int32 TenantId { get; set; }

    /// <summary>是否启用</summary>
    Boolean IsEnabled { get; set; }

    /// <summary>消息校验Token</summary>
    String Token { get; set; }

    /// <summary>消息加解密密钥</summary>
    String EncodingAESKey { get; set; }

    /// <summary>创建时间</summary>
    DateTime CreateTime { get; set; }

    /// <summary>æ›´æ–°æ—¶é—´</summary>
    DateTime UpdateTime { get; set; }

    /// <summary>备注</summary>
    String Remark { get; set; }
    #endregion
}