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>微信用户。å˜å‚¨å¾®ä¿¡ç”¨æˆ·çš„OpenIdã€UnionId基本信æ¯</summary>
public partial class 微信用户 : Entity<微信用户>
{
#region 对象æ“作
static 微信用户()
{
// 过滤器
Meta.Modules.Add<TimeModule>();
Meta.Modules.Add<IPModule>();
// å•对象缓å˜
var sc = Meta.SingleCache;
sc.FindSlaveKeyMethod = k =>
{
var arr = k.Split(',');
if (arr.Length == 2)
return Find(_.AppId == arr[0] & _.OpenId == arr[1]);
return null;
};
sc.GetSlaveKeyMethod = e => $"{e.AppId},{e.OpenId}";
}
/// <summary>éªŒè¯æ•°æ®ï¼Œé€šè¿‡æŠ›å‡ºå¼‚å¸¸çš„æ–¹å¼æç¤ºéªŒè¯å¤±è´¥ã€‚</summary>
/// <param name="isNew">æ˜¯å¦æ’å…¥</param>
public override void Valid(Boolean isNew)
{
// å¦‚æžœæ²¡æœ‰è„æ•°æ®ï¼Œåˆ™ä¸éœ€è¦è¿›è¡Œä»»ä½•处ç†
if (!HasDirty) return;
// 建议先调用基类方法,基类方法会åšä¸€äº›ç»Ÿä¸€å¤„ç†
base.Valid(isNew);
// 在新æ’å…¥æ•°æ®æˆ–è€…ä¿®æ”¹äº†æŒ‡å®šå—æ®µæ—¶è¿›è¡Œä¿®æ£
if (AppId.IsNullOrEmpty()) throw new ArgumentNullException(nameof(AppId), "AppIdä¸èƒ½ä¸ºç©º");
if (OpenId.IsNullOrEmpty()) throw new ArgumentNullException(nameof(OpenId), "OpenIdä¸èƒ½ä¸ºç©º");
}
/// <summary>å·²é‡è½½ã€‚显示å‹å¥½çš„åç§°</summary>
/// <returns></returns>
public override String ToString() => OpenId;
#endregion
#region 扩展属性
#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å’ŒOpenId查找</summary>
/// <param name="appid">AppId</param>
/// <param name="openid">OpenId</param>
/// <returns>实体对象</returns>
public static 微信用户 FindByOpenId(String appid, String openid)
{
if (appid.IsNullOrEmpty() || openid.IsNullOrEmpty()) return null;
// å•对象缓å˜
return Meta.SingleCache.GetItemWithSlaveKey($"{appid},{openid}") as 微信用户;
}
/// <summary>æ ¹æ®UnionId查找所有用户</summary>
/// <param name="unionid">UnionId</param>
/// <returns>实体列表</returns>
public static IList<微信用户> FindAllByUnionId(String unionid)
{
if (unionid.IsNullOrEmpty()) return new List<微信用户>();
return FindAll(_.UnionId == unionid);
}
/// <summary>æ ¹æ®AppId查找所有用户</summary>
/// <param name="appid">AppId</param>
/// <returns>实体列表</returns>
public static IList<微信用户> FindAllByAppId(String appid)
{
if (appid.IsNullOrEmpty()) return new List<微信用户>();
return FindAll(_.AppId == appid);
}
#endregion
#region 高级查询
/// <summary>高级查询</summary>
/// <param name="appid">微信AppId</param>
/// <param name="openid">用户OpenId</param>
/// <param name="unionid">用户UnionId</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 openid, String unionid, DateTime start, DateTime end, String key, PageParameter page)
{
var exp = new WhereExpression();
if (!appid.IsNullOrEmpty()) exp &= _.AppId == appid;
if (!openid.IsNullOrEmpty()) exp &= _.OpenId == openid;
if (!unionid.IsNullOrEmpty()) exp &= _.UnionId == unionid;
exp &= _.CreateTime.Between(start, end);
if (!key.IsNullOrEmpty()) exp &= _.OpenId.Contains(key) | _.UnionId.Contains(key) | _.Remark.Contains(key);
return FindAll(exp, page);
}
#endregion
#region 业务æ“作
/// <summary>åŒæ¥ç”¨æˆ·ä¿¡æ¯ï¼ˆä»Žå¾®ä¿¡API获å–åŽæ›´æ–°ï¼‰</summary>
/// <param name="appid">AppId</param>
/// <param name="openid">OpenId</param>
/// <param name="unionid">UnionId</param>
/// <returns></returns>
public static 微信用户 Sync(String appid, String openid, String unionid = null)
{
var user = FindByOpenId(appid, openid) ?? new 微信用户
{
AppId = appid,
OpenId = openid
};
// æ›´æ–° UnionId
if (!unionid.IsNullOrEmpty())
user.UnionId = unionid;
user.Save();
return user;
}
#endregion
}
/// <summary>微信用户接å£</summary>
public partial interface I微信用户
{
#region 属性
/// <summary>ç¼–å·</summary>
Int32 Id { get; set; }
/// <summary>微信AppId</summary>
String AppId { get; set; }
/// <summary>用户OpenId</summary>
String OpenId { get; set; }
/// <summary>用户UnionId。åŒä¸€å¾®ä¿¡å¼€æ”¾å¹³å°ä¸‹çš„ä¸åŒåº”用,用户的UnionId是相åŒçš„</summary>
String UnionId { get; set; }
/// <summary>创建时间</summary>
DateTime CreateTime { get; set; }
/// <summary>æ›´æ–°æ—¶é—´</summary>
DateTime UpdateTime { get; set; }
/// <summary>备注</summary>
String Remark { get; set; }
#endregion
}
|