old_flsystem/PCRobot/PCWechat/Enterprise/WechatEnterpriseBase.cs

399 lines
15 KiB
C#
Raw Normal View History

2022-09-20 03:10:29 +00:00
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using PCRobot.Entitys.Enterprise;
using PCRobot.Utils;
namespace PCRobot.PCWechat.Enterprise
{
/// <summary>
/// 企业微信基类
/// </summary>
public abstract class WechatEnterpriseBase : WechatBase
{
/// <summary>
/// 是否初始化
/// </summary>
internal static bool IsQYInstall { get; set; }
public WechatEnterpriseBase(WechatUser User) : base(User) { }
/// <summary>
/// 获取会话ID
/// </summary>
/// <param name="username"></param>
/// <returns></returns>
public string GetConversationId(string username)
{
var conversation_id = username;
if (!username.StartsWith("R:"))
conversation_id = $"S:{User.Wxid}_{username}";
return conversation_id;
}
#region
/// <summary>
/// 发送目录
/// </summary>
/// <param name="username">接收者的微信</param>
/// <param name="dirPath">目录路径</param>
/// <returns></returns>
public abstract void SendDirectory(string username, string dirPath);
///// <summary>
///// 发送小程序
///// </summary>
///// <param name="toUsername">接收者的账号</param>
///// <param name="appUsername">小程序账号(xxxx@app)</param>
///// <param name="appId">小程序id</param>
///// <param name="appName">小程序名称</param>
///// <param name="appicon">小程序图片地址</param>
///// <param name="title">小程序标题</param>
///// <param name="page_path">小程序指定的路径</param>
///// <param name="file_id">cdn文件id</param>
///// <param name="aes_key">cdnkey</param>
///// <param name="md5">md5</param>
///// <param name="size">大小</param>
///// <exception cref="Exception"></exception>
//public abstract void SendProgramMessage(string username, string appUsername, string appId, string appName,
// string appicon, string title, string page_path);
/// <summary>
/// 发送视频号
/// </summary>
/// <param name="username">接收者的账号</param>
/// <param name="avatar">头像</param>
/// <param name="cover_url"></param>
/// <param name="desc">描述</param>
/// <param name="feed_type">类型</param>
/// <param name="nickname">标题</param>
/// <param name="thumb_url"></param>
/// <param name="url"></param>
/// <param name="extras">附加</param>
/// <exception cref="Exception"></exception>
public abstract void SendVideoHao(string username, string avatar, string cover_url, string desc, int feed_type,
string nickname, string thumb_url, string url, string extras);
/// <summary>
/// 转让群主
/// </summary>
public abstract void TransRoom(string username, string user_id);
/// <summary>
/// 开启关闭群邀请确认
/// </summary>
/// <param name="username"></param>
/// <param name="status">true开启,flase关闭</param>
public abstract void OnOffRoomInvite(string username, bool status);
/// <summary>
/// 开启关闭修改群名
/// </summary>
/// <param name="username"></param>
/// <param name="status">true开启,flase关闭</param>
public abstract void OnOffRoomModNick(string username, bool status);
#endregion
#region
/// <summary>
/// 邀请用户进群
/// </summary>
/// <param name="groupid">群ID</param>
/// <param name="usernames">邀请的用户账号集</param>
/// <returns></returns>
public abstract void InviteMemberToGroup(string groupid, string[] usernames);
/// <summary>
/// 申请添加群成员为好友
/// </summary>
/// <param name="groupid">用户所在群ID</param>
/// <param name="username">要加的用户账号(该用户一定要在群里)</param>
/// <param name="verify">验证消息</param>
/// <returns></returns>
public abstract void AddGroupMemberToFriend(string groupid, string username, string corp_id, string verify);
#endregion
#region
/// <summary>
/// 修改内/外部好友描述
/// </summary>
/// <param name="username">要修改的user_id</param>
/// <param name="desc">好友描述信息</param>
/// <returns></returns>
public abstract void ModifyFriendDesc(string username, string desc);
/// <summary>
/// 修改外部联系人手机号列表
/// </summary>
/// <param name="username">要修改的user_id</param>
/// <param name="phone_list">手机号列表最多5个</param>
/// <returns></returns>
public abstract void ModifyFriendPhone(string username, string[] phone_list);
/// <summary>
/// 修改外部联系人公司名称
/// </summary>
/// <param name="username">要修改的user_id</param>
/// <param name="company">公司名称</param>
/// <returns></returns>
public abstract void ModifyExternalFriendCompanyNick(string username, string company);
/// <summary>
/// 通过手机号查询微信信息
/// </summary>
/// <param name="search">搜索的内容</param>
/// <returns></returns>
public abstract Task<FriendInfoHandlerEnterprise> SearchContactMobile(string search);
/// <summary>
/// 添加搜索到的微信用户
/// </summary>
/// <param name="username">通过查询获取到的账号</param>
/// <param name="openid">搜索到的openid</param>
/// <param name="wx_ticket">搜索到的wx_ticket</param>
/// <param name="verify">验证消息</param>
/// <returns></returns>
public abstract void AddRoutineSearchContact(string username, string openid, string wx_ticket, string verify);
/// <summary>
/// 添加搜索到的企业用户
/// </summary>
/// <param name="username">通过查询获取到的账号</param>
/// <param name="corp_id">公司id</param>
/// <param name="verify">验证信息</param>
/// <exception cref="Exception"></exception>
public abstract void AddEnterpriseSearchContact(string username, string corp_id, string verify);
/// <summary>
/// 添加名片为联系人
/// </summary>
/// <param name="username"></param>
/// <param name="corp_id"></param>
/// <param name="from_user_id"></param>
/// <param name="verify"></param>
/// <exception cref="Exception"></exception>
public abstract void AddCardFriendContact(string username, string corp_id, string from_user_id, string verify);
/// <summary>
/// 添加删除的联系人
/// </summary>
/// <param name="username"></param>
/// <param name="corp_id"></param>
/// <param name="verify"></param>
/// <exception cref="Exception"></exception>
public abstract void AddDelFriendContact(string username, string corp_id, string verify);
///// <summary>
///// 删除好友
///// </summary>
///// <param name="username"></param>
///// <param name="corp_id"></param>
///// <exception cref="Exception"></exception>
//public abstract void DeleteFriend(string username, string corp_id);
///// <summary>
///// 接受好友申请
///// </summary>
///// <param name="username">用户账号</param>
///// <param name="corp_id">公司id</param>
///// <exception cref="Exception"></exception>
//public abstract Task<bool> AcceptFriend(string username, string corp_id);
/// <summary>
/// 创建空外部群
/// </summary>
/// <param name="usernames"></param>
/// <exception cref="Exception"></exception>
public abstract Task<CreateGroupInfo> CreateExternalGroup();
#endregion
#region
///// <summary>
///// 获取内部好友类表
///// </summary>
///// <returns></returns>
//public abstract Task<Dictionary<string, FriendBase>> GetInnerFirends();
/// <summary>
/// 获取外部好友列表
/// </summary>
/// <returns></returns>
public abstract Task<Dictionary<string, WorkFriendInfo>> GetExternalFirends();
///// <summary>
///// 获取自己的二维码
///// </summary>
///// <returns></returns>
///// <exception cref="Exception"></exception>
//public abstract Task<QrImageInfo> GetOwnQrImage();
/// <summary>
/// 刷新登录二维码
/// </summary>
/// <exception cref="Exception"></exception>
public abstract void FlushLoginQrImage();
/// <summary>
/// 解散群
/// </summary>
/// <param name="GroupId">群号</param>
/// <exception cref="Exception"></exception>
public abstract void DissolveGroup(string GroupId);
/// <summary>
/// Cdn下载
/// </summary>
/// <param name="url">回复中的cdn地址</param>
/// <param name="auth_key">回复中的auth_key</param>
/// <param name="aes_key">回复中的aes_key</param>
/// <param name="size">回复中的size</param>
/// <param name="save_path">保存文件完整路径</param>
/// <exception cref="Exception"></exception>
public abstract Task<string> CdnDown(string url, string auth_key, string aes_key, int size,
FileSuffixType fileSuffixType);
/// <summary>
/// Cdn下载
/// </summary>
/// <param name="url">回复中的cdn地址</param>
/// <param name="auth_key">回复中的auth_key</param>
/// <param name="aes_key">回复中的aes_key</param>
/// <param name="size">回复中的size</param>
/// <param name="fileName">文件名带后缀</param>
/// <returns></returns>
/// <exception cref="Exception"></exception>
public abstract Task<string> CdnDown(string url, string auth_key, string aes_key, int size, string fileName);
/// <summary>
/// C2cCdn下载
/// </summary>
/// <param name="aes_key">回复中的aes_key</param>
/// <param name="file_id">回复中的file_id</param>
/// <param name="file_size">回复中的file_size</param>
/// <param name="file_type">回复中的file_type</param>
/// <param name="save_path">保存文件完整路径</param>
/// <exception cref="Exception"></exception>
public abstract Task<string> C2cCdnDown(string aes_key, string file_id, int file_size, QyCdnFileType file_type,
FileSuffixType fileSuffixType);
/// <summary>
/// BigCdn下载
/// </summary>
/// <param name="file_path"></param>
/// <param name="file_type"></param>
/// <returns></returns>
/// <exception cref="Exception"></exception>
public abstract Task<string> BigCdnDown(string file_path, string file_type);
/// <summary>
/// 获取Cdn通过文件上传
/// </summary>
/// <param name="file_path">文件路径</param>
/// <param name="file_type">文件类型</param>
/// <returns></returns>
/// <exception cref="Exception"></exception>
public abstract Task<FileC2cCdnInfo> GetCdnByUpLoadFile(string file_path, int file_type);
#endregion
public string FindNick(string wxid)
{
try
{
if (string.IsNullOrWhiteSpace(wxid)) return string.Empty;
if (wxid.IsQun())//为群账号,就获取群昵称
{
if (!User.WorkGroups.ContainsKey(wxid))
{
var ggi = this.GetGroupInfos().Result;//获取群信息
if (ggi != null && ggi.Count != 0)
{
if (ggi.ContainsKey(wxid))
return (ggi[wxid] as WorkGroupInfo).GroupNick;
}
}
if (User.WorkGroups.ContainsKey(wxid))
{
if (string.IsNullOrWhiteSpace(User.WorkGroups[wxid].GroupNick))
{
var ggi = this.GetGroupInfos().Result;//获取群信息
if (ggi != null && ggi.Count != 0)
{
if (ggi.ContainsKey(wxid))
return (ggi[wxid] as WorkGroupInfo).GroupNick;
}
}
return User.WorkGroups[wxid].GroupNick;
}
}
else
{
if (!User.Friends.ContainsKey(wxid))
{
var friend = GetFriendInfo(wxid).Result;
if (friend != null)
return (friend as WorkFriendInfo).username;
}
if (User.WorkFriends.ContainsKey(wxid))
return User.WorkFriends[wxid].username;
}
}
catch (Exception ex)
{ }
return string.Empty;
}
/// <summary>
/// 获取群成员昵称
/// </summary>
/// <param name="group">群号</param>
/// <param name="wxid">需要查找的用户账号</param>
/// <returns></returns>
public string FindNick(string group, string wxid)
{
try
{
if (string.IsNullOrWhiteSpace(wxid)) return string.Empty;
if (User.WorkFriends.ContainsKey(wxid))//如果好友列表中存在就直接读取
return User.WorkFriends[wxid].nickname;
else
{
if (string.IsNullOrWhiteSpace(group)) return string.Empty;
if (!User.WorkGroups.ContainsKey(group))
{
var gInfo = this.GetGroupMemberInfo(group).Result;
if (gInfo != null)
return (gInfo as WorkGroupInfo).GroupNick;
}
if (User.WorkGroups.ContainsKey(group))
{
var friendDic = User.WorkGroups[group].friends;
if (friendDic != null)
{
var ftmp = friendDic.FirstOrDefault(f => f.user_id == wxid);
if (ftmp != null)
return ftmp.nickname;
}
}
}
}
catch (Exception ex)
{ }
return string.Empty;
}
}
}