public SyncResult SyncOrgToWeChat(DateTime LastSyncTime)
        {
            SyncResult sr = new SyncResult();

            try
            {
                LoadOrgToken();
                this.RWL.AcquireWriterLock(-1);

                if (string.IsNullOrEmpty(AccessToken))
                {
                    sr.Success = false;
                    sr.ErrMsg  = "获取Token错误";
                    return(sr);
                }
                string companyId = Organization.Company.ObjectID;

                this.LogWriter.Write("微信组织同步开始...");
                DataTable userRelation = GetWechatUserRelation();
                SyncOrg(LastSyncTime, companyId, 1, userRelation, ref sr);
                //完整同步时执行
                if (LastSyncTime == DateTime.MinValue)
                {
                    this.LogWriter.Write("H3中删除的用户,在企业微信中一起删除");
                    #region H3中删除的用户,在企业微信中一起删除;
                    string    sql = "SELECT * FROM C_H3_Wechat_OrgSync WHERE code NOT IN (SELECT code FROM OT_User where state=1)";
                    DataTable dt  = OThinker.H3.Controllers.AppUtility.Engine.EngineConfig.CommandFactory.CreateCommand().ExecuteDataTable(sql);
                    foreach (DataRow row in dt.Rows)
                    {
                        if (DeleteWeChatUser(row["code"] + string.Empty))
                        {
                            sr.delete_User_Success_Num++;
                        }
                    }
                    #endregion
                }
                return(sr);
            }
            catch (Exception ex)
            {
                this.LogWriter.Write(ex.ToString());
                sr.Success = false;
                sr.ErrMsg  = "Exception:" + ex.ToString();
                return(sr);
            }
            finally
            {
                this.RWL.ReleaseWriterLock();
            }
        }
        /// <summary>
        /// 同步微信的组织
        /// </summary>
        /// <param name="SourceUnits"></param>
        /// <param name="ParentID"></param>
        /// <param name="WeChatParent"></param>
        /// <returns></returns>
        private bool SyncOrg(DateTime LastSyncTime, string ParentID, int WeChatParent, DataTable dtUserRelation, ref SyncResult syncResult)
        {
            LoadOrgToken();

            var childList = Organization.GetChildUnits(ParentID, UnitType.OrganizationUnit, false, State.Active);
            var ChildList = childList.OrderBy(a => a.SortKey);

            #region  用户同步
            // 同步用户
            OThinker.Organization.Unit[] users = Organization.GetChildUnits(ParentID, UnitType.User, false, State.Unspecified).OrderBy(a => a.SortKey).ToArray();
            if (users != null)
            {
                foreach (OThinker.Organization.User user in users)
                {
                    if (string.IsNullOrEmpty(user.WeChatAccount) &&
                        string.IsNullOrEmpty(user.Email) &&
                        string.IsNullOrEmpty(user.Mobile))
                    {
                        continue;
                    }
                    //1.增量同步且用户的修改时间少于上次的同步时间,不做增量同步
                    if (LastSyncTime != DateTime.MinValue && user.ModifiedTime < LastSyncTime)
                    {
                        continue;
                    }
                    this.LogWriter.Write("微信用户同步,Code=" + user.Code + ",Name=" + user.Name + ",Mobile=" + user.Mobile + ",WeChatParent=" + WeChatParent);
                    if (NotSyncToWechatUserCodes.Replace("'", "").Split(',').Contains(user.Code))
                    {
                        this.LogWriter.Write("微信用户同步跳过,存在于不同步配置中,Code=" + user.Code + ",Name=" + user.Name + ",Mobile=" + user.Mobile + ",WeChatParent=" + WeChatParent);
                        continue;
                    }
                    var wxuser = GetWeChatUser(user.Code);
                    if (wxuser.errcode != "0")//0表示正常返回
                    {
                        //H3禁用或者离职:不用同步到微信
                        if (user.State == State.Inactive || user.ServiceState == UserServiceState.Dismissed)
                        {
                        }
                        else
                        {
                            if (user.Appellation != null && user.Appellation.Contains("金融专员"))
                            {
                                this.LogWriter.Write("微信用户同步跳过:金融专员不做处理");
                                //金融专员不做处理:
                                //金融专员有CAP账号,又有263邮箱,会导致手机号码重复;
                                //所以不同步
                            }
                            else
                            {
                                // 不存在,
                                if (CreateWeChatUser(user, WeChatParent))
                                {
                                    DataRow[] rows = dtUserRelation.Select("CODE='" + user.Code + "'");
                                    if (rows.Length == 0)
                                    {
                                        InsertToWechatUserRelation(user.Code, user.Name, user.Mobile);
                                    }
                                    syncResult.create_User_Success_Num++;
                                }
                                else
                                {
                                    syncResult.create_User_Fail_Num++;
                                }
                            }
                        }
                    }
                    else//微信存在此用户
                    {
                        //微信中有这个用户,但是H3中是禁用或者离职状态的,删除企业微信
                        //如果是金融专员,删除:保证一个人有一个号码;
                        if (user.State == State.Inactive || user.ServiceState == UserServiceState.Dismissed ||
                            (user.Appellation != null && user.Appellation.Contains("金融专员")))
                        {
                            this.LogWriter.Write("微信用户删除:禁用/离职/金融专员");
                            if (DeleteWeChatUser(user.Code))
                            {
                                syncResult.delete_User_Success_Num++;
                            }
                            else
                            {
                                syncResult.delete_User_Fail_Num++;
                            }
                        }
                        else
                        {
                            #region 手机号码被修改了
                            //手机号码被修改了
                            if (user.Mobile != wxuser.mobile)
                            {
                                this.LogWriter.Write($"微信用户手机号码不一致,微信{wxuser.mobile},H3{user.Mobile}");
                                //这块删除逻辑有问题,先注释;
                                //DataTable dtTel = OThinker.H3.Controllers.AppUtility.Engine.EngineConfig.CommandFactory.CreateCommand().ExecuteDataTable("SELECT * FROM C_H3_Wechat_OrgSync WHERE tel='" + user.Mobile + "'");
                                //if (dtTel != null && dtTel.Rows.Count > 0)//此修改的手机号码有用户在使用,先删除此用户;
                                //{
                                //    foreach (DataRow row in dtTel.Rows)
                                //    {
                                //        var wxuserCF = GetWeChatUser(row["code"] + string.Empty);
                                //        if (DeleteWeChatUser(wxuserCF.userid))
                                //        {
                                //            syncResult.delete_User_Success_Num++;
                                //        }
                                //    }
                                //}

                                //微信认证后,默认会绑定微信对应的手机号码,会修改掉原系统中的手机号,导致2个系统的手机号不一致
                                //此时下面的删除逻辑会有问题,故注释;

                                //手机号码被修改了,但是此被激活了,需要先删除此用户,然后再同步
                                //if (wxuser.status == 1)
                                //{
                                //    this.LogWriter.Write($"微信用户删除:手机号码修改且已激活,原{wxuser.mobile},现{user.Mobile}");
                                //    if (DeleteWeChatUser(wxuser.userid))
                                //    {
                                //        syncResult.delete_User_Success_Num++;
                                //    }
                                //    this.LogWriter.Write($"微信用户删除后创建:手机号码修改且已激活,原{wxuser.mobile},现{user.Mobile}");
                                //    if (CreateWeChatUser(user, WeChatParent))
                                //    {
                                //        syncResult.create_User_Success_Num++;
                                //        InsertToWechatUserRelation(user.Code, user.Name, user.Mobile);
                                //    }
                                //    else
                                //    {
                                //        syncResult.create_User_Fail_Num++;
                                //    }
                                //    continue;
                                //}
                            }
                            #endregion

                            #region 手机号码没有被修改
                            //手机号码没有被修改
                            if (UpdateWeChatUser(user, WeChatParent))
                            {
                                //判断中间表是否有数据,有数据就更新,没有数据就插入
                                DataRow[] rows = dtUserRelation.Select("CODE='" + user.Code + "'");
                                if (rows.Length == 0)
                                {
                                    InsertToWechatUserRelation(user.Code, user.Name, user.Mobile);
                                }
                                else
                                {
                                    if (user.Mobile != wxuser.mobile)
                                    {
                                        //手机号码修改了才去Update中间表;
                                        string sqlUpdate = "UPDATE C_H3_Wechat_OrgSync SET name='" + user.Name + "',tel='" + user.Mobile + "' WHERE code='" + user.Code + "'";
                                        int    n         = OThinker.H3.Controllers.AppUtility.Engine.EngineConfig.CommandFactory.CreateCommand().ExecuteNonQuery(sqlUpdate);
                                        this.LogWriter.Write("Update C_H3_Wechat_OrgSync表,Code:" + user.Code + ",Name:" + user.Name + ",Tel:" + user.Mobile + ",受影响行数:" + n);
                                    }
                                }
                                syncResult.update_User_Success_Num++;
                            }
                            else
                            {
                                syncResult.update_User_Fail_Num++;
                            }
                            #endregion
                        }
                    }
                }
            }
            #endregion

            #region OU同步
            foreach (OThinker.Organization.OrganizationUnit sourceUnit in ChildList)
            {
                this.LogWriter.Write("微信OU同步,ID=" + sourceUnit.ObjectID + ",Name=" + sourceUnit.Name + ",WeChatParent=" + WeChatParent + ",WeChatID=" + sourceUnit.WeChatID);

                // 同步当前组织
                WeChatOrg_New org = this.GetWeChatOrgByParentId(WeChatParent, sourceUnit.WeChatID);
                if (org != null)
                {
                    // 已存在
                    if (sourceUnit.WeChatID != org.id)
                    {
                        sourceUnit.WeChatID = org.id;
                        Organization.UpdateUnit(OThinker.Organization.User.AdministratorID, sourceUnit);
                    }

                    //更新组织顺序
                    if (sourceUnit.SortKey != 5000 - sourceUnit.SortKey)
                    {
                        org.order    = 5000 - sourceUnit.SortKey;
                        org.parentid = WeChatParent;
                        org.name     = sourceUnit.Name;
                        if (UpdateWeChatOrg(org))
                        {
                            syncResult.update_OU_Success_Num++;
                        }
                        else
                        {
                            syncResult.update_OU_Fail_Num++;
                        }
                    }
                }
                else
                {// 不存在
                    org = CreateWeChatOrg(sourceUnit.WeChatID, sourceUnit.Name, WeChatParent, 5000 - sourceUnit.SortKey);
                    if (org.id != 0)
                    {
                        sourceUnit.WeChatID = org.id;
                        Organization.UpdateUnit(OThinker.Organization.User.AdministratorID, sourceUnit);
                    }
                    if (org.errcode == "0")
                    {
                        syncResult.create_OU_Success_Num++;
                    }
                    else
                    {
                        syncResult.create_OU_Fail_Num++;
                    }
                }

                // 递归同步子结构
                SyncOrg(LastSyncTime, sourceUnit.ObjectID, sourceUnit.WeChatID, dtUserRelation, ref syncResult);
            }
            #endregion

            return(true);
        }