using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Xml;
using Edu.Cache.WeChat;
using Edu.Common.Plugin;
using Edu.Model.ViewModel.WeChat;
using Edu.Module.QYWeChat;
using Edu.ThirdCore.QYWinXin;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json.Linq;

namespace Edu.WebApi.Controllers.QYWeChat
{
    /// <summary>
    /// 企业微信回调接口
    /// </summary>
    [Route("api/[controller]/[action]")]
    public class QYWeChatCallBackController : ControllerBase
    {
        /// <summary>
        /// 企业微信处理类对象
        /// </summary>
        private readonly QYWeChatModule weChatModule = new QYWeChatModule();
        /// <summary>
        /// 客户处理类
        /// </summary>
        //private readonly QYCustomerModule customerModule = new QYCustomerModule();

        #region 欢迎语管理

        /// <summary>
        /// 欢迎语回调
        /// </summary>
        [HttpGet]
        public string WeChatReceiveCustomerAdd(int groupId,string msg_signature,string timestamp,string nonce,string echostr) {
            //首先获取配置
            var model = weChatModule.GetWeChatConfigModel(new RB_WeChat_Config_ViewModel() { Group_Id = groupId });
            if (model == null || model.Id == 0 || model.Enable !=1) { return ""; }

            Tencent.WXBizMsgCrypt wxcpt = new Tencent.WXBizMsgCrypt(model.Token, model.Encoding_Aes_Key, model.WX_CorpId);
            string sVerifyMsgSig = msg_signature;
            string sVerifyTimeStamp = timestamp;
            string sVerifyNonce = nonce;
            string sVerifyEchoStr = echostr;
            int ret = 0;
            string sEchoStr = "";
            ret = wxcpt.VerifyURL(sVerifyMsgSig, sVerifyTimeStamp, sVerifyNonce, sVerifyEchoStr, ref sEchoStr);
            if (ret != 0)
            {
                LogHelper.Write("验证Url失败:" + ret);
                return "";
            }

            return sEchoStr;
        }

        /// <summary>
        /// 欢迎语回调
        /// </summary>
        [HttpPost]
        public string WeChatReceiveCustomerAdd(int groupId,string msg_signature,string timestamp, string nonce)
        {
            //首先获取配置
            var configmodel = weChatModule.GetWeChatConfigModel(new RB_WeChat_Config_ViewModel() { Group_Id = groupId }).RefMapperTo<RB_WeChat_Config_ViewModel>();
            if (configmodel == null || configmodel.Id == 0 || configmodel.Enable != 1) { return ""; }

            string sReqMsgSig = msg_signature;
            string sReqTimeStamp = timestamp;
            string sReqNonce = nonce;
            #region Post请求的密文数据
            Request.EnableBuffering();
            string responseData = "";
            using (var reader = new StreamReader(Request.Body, encoding: System.Text.Encoding.UTF8))
            {
                var body = reader.ReadToEndAsync();
                responseData = body.Result;
                Request.Body.Position = 0;
            }
            #endregion

            #region 解码参数
            string sReqData = responseData;
            string sMsg = "";  // 解析之后的明文
            Tencent.WXBizMsgCrypt wxcpt = new Tencent.WXBizMsgCrypt(configmodel.Token, configmodel.Encoding_Aes_Key, configmodel.WX_CorpId);
            int ret = wxcpt.DecryptMsg(sReqMsgSig, sReqTimeStamp, sReqNonce, sReqData, ref sMsg);
            if (ret != 0)
            {
                LogHelper.Write("解密失败:" + ret);
                return "";
            }
            LogHelper.Write(sMsg);
            // ret==0表示解密成功,sMsg表示解密之后的明文xml串
            // TODO: 对明文的处理
            // For example:
            XmlDocument doc = new XmlDocument();
            doc.LoadXml(sMsg);
            XmlNode root = doc.FirstChild;
            string ToUserName = root["ToUserName"].InnerText;
            string FromUserName = root["FromUserName"].InnerText;
            string MsgType = root["MsgType"].InnerText;
            string Event = root["Event"].InnerText;
            string ChangeType = root["ChangeType"].InnerText;
            string UserID = root["UserID"].InnerText;
            string ExternalUserID = root["ExternalUserID"].InnerText;
            string State = root["State"]?.InnerText ?? "";
            string WelcomeCode = root["WelcomeCode"]?.InnerText ?? "";
            #endregion
            
            //处理新添加客人事件
            if (!string.IsNullOrEmpty(WelcomeCode) && MsgType == "event" && Event == "change_external_contact" && ChangeType == "add_external_contact")
            {
                #region 正常推送
                //获取token
                string token = GetContactToken(groupId, configmodel);
                if (string.IsNullOrEmpty(token)) { return ""; }
                //根据WXUserId  获取对应系统用户
                var empModel = weChatModule.GetUserInfoForWeiXinWorkUserId(groupId, UserID);

                if (!string.IsNullOrEmpty(State) && State.Contains("ChannelId="))
                {
                    try
                    {
                        //从渠道码进来的
                        int ChannelId = Convert.ToInt32(State.Split("=")[1]);
                        if (ChannelId > 0)
                        {
                            var channelModel = weChatModule.GetWeChatChannelForBackUp(ChannelId);
                            if (channelModel == null) { return ""; }

                            var ContactModel = QYWeiXinHelper.GetExternalContactInfo(token, ExternalUserID);
                            if (ContactModel.errcode != Senparc.Weixin.ReturnCode_Work.请求成功)
                            {
                                LogHelper.Write("获取客户信息失败:" + ContactModel.errmsg);
                            }

                            #region 推送欢迎语
                            RB_WeChat_Welcomes_ViewModel welcomeModel = new RB_WeChat_Welcomes_ViewModel();
                            DateTime NowDate = DateTime.Now;
                            DateTime NowDay = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd"));
                            string NowDateStr = DateTime.Now.ToString("yyyy-MM-dd");
                            bool IsChannelWelcome = false;
                            if (channelModel.WelcomeEnable == 1)
                            {
                                if (channelModel.WelcomeSpecialEnable == 1)
                                {
                                    var swlist = channelModel.WelcomeSpecialList.Where(x => x.StartDate <= NowDay && x.EndDate >= NowDay && Convert.ToDateTime(NowDateStr + " " + x.StartHours) <= NowDate && Convert.ToDateTime(NowDateStr + " " + x.EndHours) >= NowDate).ToList();
                                    if (swlist.Any())
                                    {
                                        var swmodel = swlist.FirstOrDefault();
                                        welcomeModel.Type = string.IsNullOrEmpty(swmodel.MediumIds) ? 1 : 2;
                                        welcomeModel.Content = swmodel.Content;
                                        welcomeModel.MediumIds = swmodel.MediumIds;
                                        welcomeModel.MediumList = swmodel.MediumList;
                                    }
                                }
                                if (welcomeModel.Type == 0 && channelModel.WelcomeWeekEnable == 1)
                                {
                                    //查询正常周期配置
                                    string weekNum = "," + (int)DateTime.Now.DayOfWeek + ",";
                                    var wlist = channelModel.WelcomeWeekList.Where(x => ("," + x.Weeks + ",").Contains(weekNum) && Convert.ToDateTime(NowDateStr + " " + x.StartHours) <= NowDate && Convert.ToDateTime(NowDateStr + " " + x.EndHours) >= NowDate).ToList();
                                    if (wlist.Any())
                                    {
                                        var swmodel = wlist.FirstOrDefault();
                                        welcomeModel.Type = string.IsNullOrEmpty(swmodel.MediumIds) ? 1 : 2;
                                        welcomeModel.Content = swmodel.Content;
                                        welcomeModel.MediumIds = swmodel.MediumIds;
                                        welcomeModel.MediumList = swmodel.MediumList;
                                    }
                                }
                                if (welcomeModel.Type == 0)
                                {
                                    var swlist = channelModel.WelcomeList;
                                    if (swlist.Any())
                                    {
                                        var swmodel = swlist.FirstOrDefault();
                                        welcomeModel.Type = string.IsNullOrEmpty(swmodel.MediumIds) ? 1 : 2;
                                        welcomeModel.Content = swmodel.Content;
                                        welcomeModel.MediumIds = swmodel.MediumIds;
                                        welcomeModel.MediumList = swmodel.MediumList;
                                    }
                                }

                                if (welcomeModel.Type > 0)
                                {
                                    IsChannelWelcome = true;
                                    //推送欢迎语
                                    if (welcomeModel.Content.Contains("##客户名称##"))
                                    {
                                        //替换客户名称
                                        string ContactName = ContactModel?.external_contact?.name ?? "";
                                        welcomeModel.Content = welcomeModel.Content.Replace("##客户名称##", ContactName);
                                    }
                                    if (welcomeModel.Content.Contains("##员工姓名##"))
                                    {
                                        //替换员工姓名
                                        welcomeModel.Content = welcomeModel.Content.Replace("##员工姓名##", empModel.EmployeeName);
                                    }
                                    if (welcomeModel.Content.Contains("##员工别名##"))
                                    {
                                        //替换客户名称
                                        var MemberModel = QYWeiXinHelper.GetMember_V2(token, UserID);
                                        string Alias = MemberModel?.alias ?? "";

                                        welcomeModel.Content = welcomeModel.Content.Replace("##员工别名##", Alias);
                                    }
                                    //开始状态欢迎语  掉推送接口
                                    string RMsg = weChatModule.SendNewCustomerWelcome(token, WelcomeCode, welcomeModel);
                                    //处理消息
                                    if (!string.IsNullOrEmpty(RMsg))
                                    {
                                        JObject parms = JObject.Parse(RMsg);
                                        int errcode = parms.GetInt("errcode");
                                        if (errcode != 0)
                                        {
                                            string errmsg = parms.GetStringValue("errmsg");
                                            LogHelper.Write("推送欢迎语失败:" + errmsg);
                                        }
                                    }
                                }
                            }
                            if (!IsChannelWelcome)
                            {
                                //获取欢迎语列表  使用通用配置的欢迎语
                                var WelcomeList = weChatModule.GetWeChatWelcomesList(new RB_WeChat_Welcomes_ViewModel() { Group_Id = groupId, UserId = empModel.Id });
                                if (WelcomeList.Any())
                                {
                                    if (WelcomeList.Where(x => x.UserIds != "-1").Any())
                                    {
                                        WelcomeList = WelcomeList.Where(x => x.UserIds != "-1").ToList();//优先使用配置人员的  再使用通用的
                                    }
                                    //多个欢迎语  默认取最新的
                                    welcomeModel = WelcomeList.FirstOrDefault();
                                    if (welcomeModel.Content.Contains("##客户名称##"))
                                    {
                                        //替换客户名称
                                        string ContactName = ContactModel?.external_contact?.name ?? "";

                                        welcomeModel.Content = welcomeModel.Content.Replace("##客户名称##", ContactName);
                                    }
                                    if (welcomeModel.Content.Contains("##员工姓名##"))
                                    {
                                        //替换员工姓名
                                        welcomeModel.Content = welcomeModel.Content.Replace("##员工姓名##", empModel.EmployeeName);
                                    }
                                    if (welcomeModel.Content.Contains("##员工别名##"))
                                    {
                                        //替换客户名称
                                        var MemberModel = QYWeiXinHelper.GetMember_V2(token, UserID);
                                        string Alias = MemberModel?.alias ?? "";

                                        welcomeModel.Content = welcomeModel.Content.Replace("##员工别名##", Alias);
                                    }
                                    //开始状态欢迎语  掉推送接口
                                    string RMsg = weChatModule.SendNewCustomerWelcome(token, WelcomeCode, welcomeModel);
                                    //处理消息
                                    if (!string.IsNullOrEmpty(RMsg))
                                    {
                                        JObject parms = JObject.Parse(RMsg);
                                        int errcode = parms.GetInt("errcode");
                                        if (errcode != 0)
                                        {
                                            string errmsg = parms.GetStringValue("errmsg");
                                            LogHelper.Write("推送欢迎语失败:" + errmsg);
                                        }
                                    }
                                }
                            }
                            #endregion

                            #region 给客户打标签
                            if (channelModel.LabelList != null && channelModel.LabelList.Any())
                            {
                                var lmsg = QYWeiXinHelper.SetUserCoustmerLable(token, UserID, ExternalUserID, channelModel.LabelList);
                                if (lmsg.errcode != Senparc.Weixin.ReturnCode_Work.请求成功) {
                                    LogHelper.Write("记录客户标记失败:" + lmsg.errmsg);
                                }
                            }
                            #endregion

                            #region 添加客户记录

                            weChatModule.AddWeChatClientRecord(new RB_WeChat_ChannelRecord_ViewModel()
                            {
                                Id = 0,
                                ChannelId = ChannelId,
                                CreateBy = 1,
                                CreateTime = DateTime.Now,
                                CustomerNum = 0,
                                EmpId = (empModel?.Id ?? 0),
                                ExternalUserId = ExternalUserID,
                                CustomerName = ContactModel?.external_contact?.name ?? "",
                                Group_Id = channelModel.Group_Id,
                                Status = 0,
                                Type = 1,
                                UpdateBy = 1,
                                UpdateTime = DateTime.Now,
                                WorkEmpId = UserID
                            });
                            #endregion

                            #region 添加人员限制
                            bool IsLimit = false;
                            //人员添加记录
                            if (channelModel.EmpAddLimit == 1 && channelModel.LimitList.Any())
                            {
                                var limitModel = channelModel.LimitList.Where(x => x.EmpId == (empModel?.Id ?? -1)).FirstOrDefault();
                                if (limitModel != null)
                                {
                                    limitModel.ClientNum++;
                                    weChatModule.UpdateWeChatLimitClientNum(limitModel);
                                    if (limitModel.LimitNum > 0 && limitModel.LimitNum <= limitModel.ClientNum)
                                    {
                                        IsLimit = true;//已经添加满了
                                    }
                                }
                            }

                            //如果人员已添加满  需更新渠道码 重新定义用户
                            if (IsLimit)
                            {
                                var Rmsg = weChatModule.UpdateContactWayForQYWeiXin(channelModel, configmodel, true);
                                if (Rmsg.errcode != Senparc.Weixin.ReturnCode_Work.请求成功)
                                {
                                    LogHelper.Write("添加客户回调(" + channelModel.Id + ")更新渠道码失败," + Rmsg.errmsg);
                                }
                            }
                            #endregion
                        }
                    }
                    catch (Exception ex)
                    {
                        LogHelper.Write(ex, "WeChatReceiveCustomerAdd");
                    }                    
                }
                else
                {
                    #region 正常的添加客户好友
                    if (empModel == null) { return ""; }
                    //获取欢迎语列表
                    var WelcomeList = weChatModule.GetWeChatWelcomesList(new RB_WeChat_Welcomes_ViewModel() { Group_Id = groupId, UserId = empModel.Id });
                    if (WelcomeList.Any())
                    {
                        if (WelcomeList.Where(x => x.UserIds != "-1").Any())
                        {
                            WelcomeList = WelcomeList.Where(x => x.UserIds != "-1").ToList();//优先使用配置人员的  再使用通用的
                        }
                        //多个欢迎语  默认取最新的
                        var welcomeModel = WelcomeList.FirstOrDefault();
                        if (welcomeModel.Content.Contains("##客户名称##"))
                        {
                            //替换客户名称
                            var ContactModel = QYWeiXinHelper.GetExternalContactInfo(token, ExternalUserID);
                            string ContactName = ContactModel?.external_contact?.name ?? "";

                            welcomeModel.Content = welcomeModel.Content.Replace("##客户名称##", ContactName);
                        }
                        if (welcomeModel.Content.Contains("##员工姓名##"))
                        {
                            //替换员工姓名
                            welcomeModel.Content = welcomeModel.Content.Replace("##员工姓名##", empModel.EmployeeName);
                        }
                        if (welcomeModel.Content.Contains("##员工别名##"))
                        {
                            //替换客户名称
                            var MemberModel = QYWeiXinHelper.GetMember_V2(token, UserID);
                            string Alias = MemberModel?.alias ?? "";

                            welcomeModel.Content = welcomeModel.Content.Replace("##员工别名##", Alias);
                        }
                        //开始状态欢迎语  掉推送接口
                        string RMsg = weChatModule.SendNewCustomerWelcome(token, WelcomeCode, welcomeModel);
                        //处理消息
                        if (!string.IsNullOrEmpty(RMsg))
                        {
                            JObject parms = JObject.Parse(RMsg);
                            int errcode = parms.GetInt("errcode");
                            if (errcode != 0)
                            {
                                string errmsg = parms.GetStringValue("errmsg");
                                LogHelper.Write("推送欢迎语失败:" + errmsg);
                            }
                        }
                    }
                    #endregion
                }
                #endregion
            }
            //成员删除外部联系人时 / 成员被外部联系人删除时
            else if (MsgType == "event" && Event == "change_external_contact" && (ChangeType == "del_external_contact" || ChangeType == "del_follow_user"))
            {
                int ChannelId = 0;
                if (!string.IsNullOrEmpty(State) && State.Contains("ChannelId="))
                {
                    ChannelId = Convert.ToInt32(State.Split("=")[1]);
                }
                else
                {
                    //根据员工 + 客人的企业微信Id 获取新增记录
                    var recordModel = weChatModule.GeetWeChatClientRecord(groupId, UserID, ExternalUserID);
                    ChannelId = recordModel?.ChannelId ?? 0;
                }

                //根据WXUserId  获取对应系统用户
                var empModel = weChatModule.GetUserInfoForWeiXinWorkUserId(groupId, UserID);
                //获取token
                string token = GetContactToken(groupId, configmodel);
                if (string.IsNullOrEmpty(token)) { return ""; }
                var ContactModel = QYWeiXinHelper.GetExternalContactInfo(token, ExternalUserID);
                if (ContactModel.errcode != Senparc.Weixin.ReturnCode_Work.请求成功)
                {
                    LogHelper.Write("获取客户信息失败:" + ContactModel.errmsg);
                }
                weChatModule.AddWeChatClientRecord(new RB_WeChat_ChannelRecord_ViewModel()
                {
                    Id = 0,
                    ChannelId = ChannelId,
                    CreateBy = 1,
                    CreateTime = DateTime.Now,
                    CustomerNum = 0,
                    EmpId = (empModel?.Id ?? 0),
                    ExternalUserId = ExternalUserID,
                    CustomerName = ContactModel?.external_contact?.name ?? "",
                    Group_Id = groupId,
                    Status = 0,
                    Type = ChangeType == "del_external_contact" ? 3 : 2,
                    UpdateBy = 1,
                    UpdateTime = DateTime.Now,
                    WorkEmpId = UserID
                });

                //更新客户信息  好友状态为待添加
                //if (ChangeType == "del_external_contact") {
                //    System.Threading.Tasks.Task.Run(() => customerModule.UpdateCustomerFriendStateForBack(UserID, ExternalUserID, groupId));
                //}
            }

            //任务记录客户明细信息
            //if (MsgType == "event" && Event == "change_external_contact" && ChangeType == "add_external_contact")
            //{
            //    System.Threading.Tasks.Task.Run(() => customerModule.AddCustomerInfoForBack(UserID, ExternalUserID, State, groupId));
            //}

            //客户交替失败事件
            //if (MsgType == "event" && Event == "change_external_contact" && ChangeType == "transfer_fail") { 
                
            //}
            return "";
        }

        /// <summary>
        /// 获取外部联系人token
        /// </summary>
        /// <param name="Group_Id"></param>
        /// <param name="configmodel"></param>
        /// <returns></returns>
        private string GetContactToken(int Group_Id, RB_WeChat_Config_ViewModel configmodel)
        {
            string token = WeChatReidsCache.GetToken(Cache.CacheKey.QYWeChat_EmpToken_Key + Group_Id);
            if (string.IsNullOrEmpty(token))
            {
                var TelToken = QYWeiXinHelper.GetToken(configmodel.WX_CorpId, configmodel.Contact_Secret);
                if (TelToken.errcode == Senparc.Weixin.ReturnCode_Work.请求成功)
                {
                    WeChatReidsCache.TokenSet(Cache.CacheKey.QYWeChat_EmpToken_Key + Group_Id, TelToken.access_token, TelToken.expires_in - 1);
                    token = TelToken.access_token;
                }
                else
                {
                    LogHelper.Write("token获取失败," + TelToken.errmsg);
                    return "";
                }
            }
            return token;
        }

        /// <summary>
        /// 测试推送
        /// </summary>
        /// <returns></returns>
        public string WeChatReceiveCustomerAddTest(int groupId)
        {
            //首先获取配置
            var configmodel = weChatModule.GetWeChatConfigModel(new RB_WeChat_Config_ViewModel() { Group_Id = groupId }).RefMapperTo<RB_WeChat_Config_ViewModel>();
            if (configmodel == null) { return ""; }

            string sMsg = "<xml><ToUserName><![CDATA[ww2f612caf0cc698a0]]></ToUserName><FromUserName><![CDATA[sys]]></FromUserName><CreateTime>1629442351</CreateTime><MsgType><![CDATA[event]]></MsgType><Event><![CDATA[change_external_contact]]></Event><ChangeType><![CDATA[add_external_contact]]></ChangeType><UserID><![CDATA[JinCiDianErYi]]></UserID><ExternalUserID><![CDATA[wmLiGADQAAipPmemFEirDdBD_ThZfEJw]]></ExternalUserID><State><![CDATA[ChannelId=20]]></State><WelcomeCode><![CDATA[UEMbBgD5JDrADeE_-uLY20YZDWAZPsVHj7eYL1R_Xfg]]></WelcomeCode></xml>";

            #region 解码参数
            // ret==0表示解密成功,sMsg表示解密之后的明文xml串
            // TODO: 对明文的处理
            // For example:
            XmlDocument doc = new XmlDocument();
            doc.LoadXml(sMsg);
            XmlNode root = doc.FirstChild;
            string ToUserName = root["ToUserName"].InnerText;
            string FromUserName = root["FromUserName"].InnerText;
            string MsgType = root["MsgType"].InnerText;
            string Event = root["Event"].InnerText;
            string ChangeType = root["ChangeType"].InnerText;
            string UserID = root["UserID"].InnerText;
            string ExternalUserID = root["ExternalUserID"].InnerText;
            string State = root["State"]?.InnerText ?? "";
            string WelcomeCode = root["WelcomeCode"]?.InnerText ?? "";
            #endregion

            #region 欢迎语
            //处理新添加客人事件  add_half_external_contact(这个事件需注意)
            //if (!string.IsNullOrEmpty(WelcomeCode) && MsgType == "event" && Event == "change_external_contact" && ChangeType == "add_external_contact")
            //{
            //    #region 正常推送
            //    //获取token
            //    string token = GetContactToken(groupId, configmodel);
            //    if (string.IsNullOrEmpty(token)) { return ""; }
            //    //根据WXUserId  获取对应系统用户
            //    var empModel = weChatModule.GetUserInfoForWeiXinWorkUserId(groupId, UserID);

            //    if (!string.IsNullOrEmpty(State) && State.Contains("ChannelId="))
            //    {
            //        try
            //        {
            //            //从渠道码进来的
            //            int ChannelId = Convert.ToInt32(State.Split("=")[1]);
            //            if (ChannelId > 0)
            //            {
            //                var channelModel = weChatModule.GetWeChatChannelForBackUp(ChannelId);
            //                if (channelModel == null) { return ""; }

            //                var ContactModel = QYWeiXinHelper.GetExternalContactInfo(token, ExternalUserID);
            //                if (ContactModel.errcode != Senparc.Weixin.ReturnCode_Work.请求成功)
            //                {
            //                    LogHelper.Write("获取客户信息失败:" + ContactModel.errmsg);
            //                }

            //                #region 推送欢迎语
            //                RB_WeChat_Welcomes_ViewModel welcomeModel = new RB_WeChat_Welcomes_ViewModel();
            //                DateTime NowDate = DateTime.Now;
            //                DateTime NowDay = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd"));
            //                string NowDateStr = DateTime.Now.ToString("yyyy-MM-dd");
            //                bool IsChannelWelcome = false;
            //                if (channelModel.WelcomeEnable == 1)
            //                {
            //                    if (channelModel.WelcomeSpecialEnable == 1)
            //                    {
            //                        var swlist = channelModel.WelcomeSpecialList.Where(x => x.StartDate <= NowDay && x.EndDate >= NowDay && Convert.ToDateTime(NowDateStr + " " + x.StartHours) <= NowDate && Convert.ToDateTime(NowDateStr + " " + x.EndHours) >= NowDate).ToList();
            //                        if (swlist.Any())
            //                        {
            //                            var swmodel = swlist.FirstOrDefault();
            //                            welcomeModel.Type = string.IsNullOrEmpty(swmodel.MediumIds) ? 1 : 2;
            //                            welcomeModel.Content = swmodel.Content;
            //                            welcomeModel.MediumIds = swmodel.MediumIds;
            //                            welcomeModel.MediumList = swmodel.MediumList;
            //                        }
            //                    }
            //                    if (welcomeModel.Type == 0 && channelModel.WelcomeWeekEnable == 1)
            //                    {
            //                        //查询正常周期配置
            //                        string weekNum = "," + (int)DateTime.Now.DayOfWeek + ",";
            //                        var wlist = channelModel.WelcomeWeekList.Where(x => ("," + x.Weeks + ",").Contains(weekNum) && Convert.ToDateTime(NowDateStr + " " + x.StartHours) <= NowDate && Convert.ToDateTime(NowDateStr + " " + x.EndHours) >= NowDate).ToList();
            //                        if (wlist.Any())
            //                        {
            //                            var swmodel = wlist.FirstOrDefault();
            //                            welcomeModel.Type = string.IsNullOrEmpty(swmodel.MediumIds) ? 1 : 2;
            //                            welcomeModel.Content = swmodel.Content;
            //                            welcomeModel.MediumIds = swmodel.MediumIds;
            //                            welcomeModel.MediumList = swmodel.MediumList;
            //                        }
            //                    }
            //                    if (welcomeModel.Type == 0)
            //                    {
            //                        var swlist = channelModel.WelcomeList;
            //                        if (swlist.Any())
            //                        {
            //                            var swmodel = swlist.FirstOrDefault();
            //                            welcomeModel.Type = string.IsNullOrEmpty(swmodel.MediumIds) ? 1 : 2;
            //                            welcomeModel.Content = swmodel.Content;
            //                            welcomeModel.MediumIds = swmodel.MediumIds;
            //                            welcomeModel.MediumList = swmodel.MediumList;
            //                        }
            //                    }

            //                    if (welcomeModel.Type > 0)
            //                    {
            //                        IsChannelWelcome = true;
            //                        //推送欢迎语
            //                        if (welcomeModel.Content.Contains("##客户名称##"))
            //                        {
            //                            //替换客户名称
            //                            string ContactName = ContactModel?.external_contact?.name ?? "";
            //                            welcomeModel.Content = welcomeModel.Content.Replace("##客户名称##", ContactName);
            //                        }
            //                        //开始状态欢迎语  掉推送接口
            //                        string RMsg = weChatModule.SendNewCustomerWelcome(token, WelcomeCode, welcomeModel);
            //                        //处理消息
            //                        if (!string.IsNullOrEmpty(RMsg))
            //                        {
            //                            JObject parms = JObject.Parse(RMsg);
            //                            int errcode = parms.GetInt("errcode");
            //                            if (errcode != 0)
            //                            {
            //                                string errmsg = parms.GetStringValue("errmsg");
            //                                LogHelper.Write("推送欢迎语失败:" + errmsg);
            //                            }
            //                        }
            //                    }
            //                }
            //                if (!IsChannelWelcome)
            //                {
            //                    //获取欢迎语列表  使用通用配置的欢迎语
            //                    var WelcomeList = weChatModule.GetWeChatWelcomesList(new RB_WeChat_Welcomes_ViewModel() { Group_Id = groupId, UserId = empModel.Id });
            //                    if (WelcomeList.Any())
            //                    {
            //                        if (WelcomeList.Where(x => x.UserIds != "-1").Any())
            //                        {
            //                            WelcomeList = WelcomeList.Where(x => x.UserIds != "-1").ToList();//优先使用配置人员的  再使用通用的
            //                        }
            //                        //多个欢迎语  默认取最新的
            //                        welcomeModel = WelcomeList.FirstOrDefault();
            //                        if (welcomeModel.Content.Contains("##客户名称##"))
            //                        {
            //                            //替换客户名称
            //                            string ContactName = ContactModel?.external_contact?.name ?? "";

            //                            welcomeModel.Content = welcomeModel.Content.Replace("##客户名称##", ContactName);
            //                        }
            //                        //开始状态欢迎语  掉推送接口
            //                        string RMsg = weChatModule.SendNewCustomerWelcome(token, WelcomeCode, welcomeModel);
            //                        //处理消息
            //                        if (!string.IsNullOrEmpty(RMsg))
            //                        {
            //                            JObject parms = JObject.Parse(RMsg);
            //                            int errcode = parms.GetInt("errcode");
            //                            if (errcode != 0)
            //                            {
            //                                string errmsg = parms.GetStringValue("errmsg");
            //                                LogHelper.Write("推送欢迎语失败:" + errmsg);
            //                            }
            //                        }
            //                    }
            //                }
            //                #endregion

            //                #region 给客户打标签
            //                if (channelModel.LabelList != null && channelModel.LabelList.Any())
            //                {
            //                    var lmsg = QYWeiXinHelper.SetUserCoustmerLable(token, UserID, ExternalUserID, channelModel.LabelList);
            //                    if (lmsg.errcode != Senparc.Weixin.ReturnCode_Work.请求成功)
            //                    {
            //                        LogHelper.Write("记录客户标记失败:" + lmsg.errmsg);
            //                    }
            //                }
            //                #endregion

            //                #region 添加客户记录

            //                weChatModule.AddWeChatClientRecord(new RB_WeChat_ChannelRecord_ViewModel()
            //                {
            //                    Id = 0,
            //                    ChannelId = ChannelId,
            //                    CreateBy = 1,
            //                    CreateTime = DateTime.Now,
            //                    CustomerNum = 0,
            //                    EmpId = (empModel?.Id ?? 0),
            //                    ExternalUserId = ExternalUserID,
            //                    CustomerName = ContactModel?.external_contact?.name ?? "",
            //                    Group_Id = channelModel.Group_Id,
            //                    Status = 0,
            //                    Type = 1,
            //                    UpdateBy = 1,
            //                    UpdateTime = DateTime.Now,
            //                    WorkEmpId = UserID
            //                });
            //                #endregion

            //                #region 添加人员限制
            //                bool IsLimit = false;
            //                //人员添加记录
            //                if (channelModel.EmpAddLimit == 1 && channelModel.LimitList.Any())
            //                {
            //                    var limitModel = channelModel.LimitList.Where(x => x.EmpId == (empModel?.Id ?? -1)).FirstOrDefault();
            //                    if (limitModel != null)
            //                    {
            //                        limitModel.ClientNum++;
            //                        weChatModule.UpdateWeChatLimitClientNum(limitModel);
            //                        if (limitModel.LimitNum > 0 && limitModel.LimitNum <= limitModel.ClientNum)
            //                        {
            //                            IsLimit = true;//已经添加满了
            //                        }
            //                    }
            //                }

            //                //如果人员已添加满  需更新渠道码 重新定义用户
            //                if (IsLimit)
            //                {
            //                    var Rmsg = weChatModule.UpdateContactWayForQYWeiXin(channelModel, configmodel, true);
            //                    if (Rmsg.errcode != Senparc.Weixin.ReturnCode_Work.请求成功)
            //                    {
            //                        LogHelper.Write("添加客户回调(" + channelModel.Id + ")更新渠道码失败," + Rmsg.errmsg);
            //                    }
            //                }
            //                #endregion
            //            }
            //        }
            //        catch (Exception ex)
            //        {
            //            LogHelper.Write(ex, "WeChatReceiveCustomerAdd");
            //        }
            //    }
            //    else
            //    {
            //        #region 正常的添加客户好友
            //        if (empModel == null) { return ""; }
            //        //获取欢迎语列表
            //        var WelcomeList = weChatModule.GetWeChatWelcomesList(new RB_WeChat_Welcomes_ViewModel() { Group_Id = groupId, UserId = empModel.Id });
            //        if (WelcomeList.Any())
            //        {
            //            if (WelcomeList.Where(x => x.UserIds != "-1").Any())
            //            {
            //                WelcomeList = WelcomeList.Where(x => x.UserIds != "-1").ToList();//优先使用配置人员的  再使用通用的
            //            }
            //            //多个欢迎语  默认取最新的
            //            var welcomeModel = WelcomeList.FirstOrDefault();
            //            if (welcomeModel.Content.Contains("##客户名称##"))
            //            {
            //                //替换客户名称
            //                var ContactModel = QYWeiXinHelper.GetExternalContactInfo(token, ExternalUserID);
            //                string ContactName = ContactModel?.external_contact?.name ?? "";

            //                welcomeModel.Content = welcomeModel.Content.Replace("##客户名称##", ContactName);
            //            }
            //            //开始状态欢迎语  掉推送接口
            //            string RMsg = weChatModule.SendNewCustomerWelcome(token, WelcomeCode, welcomeModel);
            //            //处理消息
            //            if (!string.IsNullOrEmpty(RMsg))
            //            {
            //                JObject parms = JObject.Parse(RMsg);
            //                int errcode = parms.GetInt("errcode");
            //                if (errcode != 0)
            //                {
            //                    string errmsg = parms.GetStringValue("errmsg");
            //                    LogHelper.Write("推送欢迎语失败:" + errmsg);
            //                }
            //            }
            //        }
            //        #endregion
            //    }
            //    #endregion
            //}
            ////成员删除外部联系人时 / 成员被外部联系人删除时
            //else if (MsgType == "event" && Event == "change_external_contact" && (ChangeType == "del_external_contact" || ChangeType == "del_follow_user"))
            //{
            //    int ChannelId = 0;
            //    if (!string.IsNullOrEmpty(State) && State.Contains("ChannelId="))
            //    {
            //        ChannelId = Convert.ToInt32(State.Split("=")[1]);
            //    }
            //    else
            //    {
            //        //根据员工 + 客人的企业微信Id 获取新增记录
            //        var recordModel = weChatModule.GeetWeChatClientRecord(groupId, UserID, ExternalUserID);
            //        ChannelId = recordModel?.ChannelId ?? 0;
            //    }

            //    //根据WXUserId  获取对应系统用户
            //    var empModel = weChatModule.GetUserInfoForWeiXinWorkUserId(groupId, UserID);
            //    //获取token
            //    string token = GetContactToken(groupId, configmodel);
            //    if (string.IsNullOrEmpty(token)) { return ""; }
            //    var ContactModel = QYWeiXinHelper.GetExternalContactInfo(token, ExternalUserID);
            //    if (ContactModel.errcode != Senparc.Weixin.ReturnCode_Work.请求成功)
            //    {
            //        LogHelper.Write("获取客户信息失败:" + ContactModel.errmsg);
            //    }
            //    weChatModule.AddWeChatClientRecord(new RB_WeChat_ChannelRecord_ViewModel()
            //    {
            //        Id = 0,
            //        ChannelId = ChannelId,
            //        CreateBy = 1,
            //        CreateTime = DateTime.Now,
            //        CustomerNum = 0,
            //        EmpId = (empModel?.Id ?? 0),
            //        ExternalUserId = ExternalUserID,
            //        CustomerName = ContactModel?.external_contact?.name ?? "",
            //        Group_Id = groupId,
            //        Status = 0,
            //        Type = ChangeType == "del_external_contact" ? 3 : 2,
            //        UpdateBy = 1,
            //        UpdateTime = DateTime.Now,
            //        WorkEmpId = UserID
            //    });
            //}
            #endregion

            //任务记录客户明细信息
            //if (MsgType == "event" && Event == "change_external_contact" && ChangeType == "add_external_contact")
            //{
            //    System.Threading.Tasks.Task.Run(() => customerModule.AddCustomerInfoForBack(UserID, ExternalUserID, State, groupId));
            //}
            return "";
        }

        #endregion
    }
}