old_flsystem/PCRobot/PCWechat/Enterprise/WechatEnterpriseBase.cs

399 lines
15 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;
}
}
}