コード例 #1
0
        /// <summary>
        /// 同步一个企业号下面所有的Aapp信息到平台中
        /// </summary>
        /// <param name="accountManageId"></param>
        /// <param name="accessToken"></param>
        /// <param name="wxAppList"></param>
        /// <param name="appList"></param>
        /// <param name="isSyncMenu"></param>
        /// <returns></returns>
        public void SyncWechatApps(int accountManageId, string accessToken, List <GetAppList_AppInfo> wxAppList, List <SysWechatConfig> appList, bool isSyncMenu)
        {
            int rootMenuParentId = 0;

            SysMenu model = _sysMenuServiceEx.Repository.Entities.Where(p => p.ParentID == 0 && p.AccountManageId == accountManageId && p.MenuName != "System Admin").FirstOrDefault();

            if (model != null)
            {
                rootMenuParentId = model.Id;
            }


            // 遍历平台已有的App
            foreach (var sysWechatConfig in appList)
            {
                var wxAppId = sysWechatConfig.WeixinAppId;
                var wxApp   = wxAppList.FirstOrDefault(x => x.agentid == wxAppId);

                // 删除
                if (wxApp == null)
                {
                    sysWechatConfig.IsDeleted = true;
                    Repository.Update(sysWechatConfig, new List <string> {
                        "IsDeleted"
                    });

                    _sysMenuServiceEx.Repository.SqlExcute("update sysmenu set isdeleted=1 where appid=" + sysWechatConfig.Id.ToString()); //删除导航,正常应该还要删除权限映射
                }
                // 更新
                else
                {
                    // 目前需要更新的只有App名
                    sysWechatConfig.AppName = wxApp.name;
                    Repository.Update(sysWechatConfig, new List <string> {
                        "AppName"
                    });
                }

                //// 初始化时使用
                //if (sysWechatConfig.WeixinAppId != "0")
                //{
                //    _sysMenuServiceEx.InitAppSysMenu(rootMenuParentId, sysWechatConfig.Id, sysWechatConfig.AppName, accountManageId);
                //}
            }


            var configSrc = WeChatCommonService.lstSysWeChatConfig.Find(a => a.AccountManageId == accountManageId && a.WeixinCorpId != null);

            log.Debug("开始同步企业号应用:{0}", accountManageId);

            // 在平台中不存在的情况
            foreach (var wxApp in wxAppList)
            {
                var obj = appList.Find(x => x.WeixinAppId == wxApp.agentid);

                // 追加
                if (obj == null || obj.Id == 0)
                {
                    var config = new SysWechatConfig
                    {
                        // 这两项需要在在编辑页面填写(从微信服务器后台拷贝而来)
                        WeixinToken          = "",
                        WeixinEncodingAESKey = "",
                        AccountManageId      = accountManageId,
                        // CorpId应该存于主表AccountManage中,所以此处不赋值
                        WeixinCorpId     = configSrc.WeixinCorpId,
                        WeixinCorpSecret = configSrc.WeixinCorpSecret,
                        IsCorp           = true,
                        AppName          = wxApp.name,
                        WeixinAppId      = wxApp.agentid,
                    };

                    log.Debug("开始同步新应用:{0} {1}", config.AppName, config.WeixinAppId);

                    Repository.Insert(config);

                    // 添加默认的后台管理菜单SysMenu
                    _sysMenuServiceEx.InitAppSysMenu(rootMenuParentId, config.Id, config.AppName, accountManageId);

                    // 从App服务器同步微信端菜单
                    SyncWeixinMenu(accessToken, int.Parse(config.WeixinAppId), config.Id);

                    log.Debug("同步新应用结束:{0} {1}", config.AppName, config.WeixinAppId);
                }
                else
                {
                    obj.WeixinCorpId     = configSrc.WeixinCorpId;
                    obj.WeixinCorpSecret = configSrc.WeixinCorpSecret;
                    if (obj.IsDeleted == true)                                                                                         // 以前删除过的,恢复
                    {
                        _sysMenuServiceEx.Repository.SqlExcute("update sysmenu set isdeleted=0 where appid=" + obj.Id.ToString());     //恢复导航

                        if (isSyncMenu)                                                                                                //同步菜单
                        {
                            _categoryService.Repository.SqlExcute("update category set isdeleted=1 where appid=" + obj.Id.ToString()); //恢复导航
                                                                                                                                       // 从App服务器同步微信端菜单
                            SyncWeixinMenu(accessToken, int.Parse(obj.WeixinAppId), obj.Id);
                        }
                        else
                        {
                            _categoryService.Repository.SqlExcute("update category set isdeleted=0 where appid=" + obj.Id.ToString()); //恢复导航
                        }
                    }
                    obj.IsDeleted = false;
                    Repository.Update(configSrc);
                }
            }

            // 其他相关处理
            // 刷新cache数据AppList
            WeChatCommonService.ClearCache(3);
            // 刷新cache数据Category:微信菜单
            CommonService.RemoveCategoryFromCache();

            // TODO:目前同步微信端菜单仅仅是对新加的App。对于管理平台已存在的App,暂时不去同步,否则页面效率会更加低下。理论上来说,菜单的添加都应该在管理平台来做,而不是微信后台
        }