예제 #1
0
        /// <summary>
        /// 增加开放平台帐号信息
        /// </summary>
        /// <param name="tenantId"></param>
        /// <param name="info"></param>
        /// <param name="isSaveMultiTenant"></param>
        public string Add(int tenantId, AppAccountInfo info, bool isSaveMultiTenant = true)
        {
            ArgumentHelper.AssertIsTrue(tenantId > 0, "TenantId is 0");
            ArgumentHelper.AssertIsTrue(info != null, "AppAccountInfo is null");
            ArgumentHelper.AssertIsTrue(info.TenantId > 0, "AppAccountInfo.TenantId is 0");
            ArgumentHelper.AssertNotNullOrEmpty(info.Name, "AppAccountInfo.AppAccountName is null or empty");
            ArgumentHelper.AssertNotNullOrEmpty(info.AppId, "AppAccountInfo.AppId is null or empty");
            ArgumentHelper.AssertNotNullOrEmpty(info.AppSecret, "AppAccountInfo.AppSecret is null or empty");

            AppAccountDao.Insert(info);

            if (isSaveMultiTenant && info.TenantId > 1)
            {
                try
                {
                    AppAccountDao.SaveMultiTenant(info);
                }
                catch (Exception ex)
                {
                    AppConnectLogHelper.Error("保存多租赁信息出错,AppAccountId=" + info.AppAccountId, ex);
                }
            }

            return(info.AppAccountId);
        }
예제 #2
0
        public ActionResult AuthorizeForMsg(string redirect_url, int tenant_id = 0, string appaccount_id = "", int type = 12, int app_id = 100)
        {
            try
            {
                if (string.IsNullOrWhiteSpace(redirect_url))
                {
                    return(Redirect(AppConnectHostConfig.Cache[0] + HostConst.Error + "?message=回调地址无效"));
                }

                InitIdentity();

                //获取sign
                var signQuery = ProviderGateway.AppUserAccountProvider.GetSginQuery(_AccountAppId, _AccountOpenId, app_id);

                var url = Infrastructure.Helper.UrlHelper.AddQuery(redirect_url, signQuery);
                AppConnectLogHelper.DebugFormat("AuthorizeAuthorizeForMsg---最终跳转URL:{0},_AccountAppId{1},_AccountOpenId{2},app_id{3}", url, _AccountAppId, _AccountOpenId, app_id);
                return(Redirect(url));
                //  return Redirect(Infrastructure.Helper.UrlHelper.AddQuery(redirect_url, signQuery));
            }
            catch (Exception ex)
            {
                AppConnectLogHelper.ErrorFormat("AuthorizeForMsg异常:{0}", Newtonsoft.Json.JsonConvert.SerializeObject(ex));
                throw;
            }
        }
예제 #3
0
        private bool DispatcherService(bool boot)
        {
            bool succeed = true;
            IConsumerPipeline instance = ConsumerPipeline.Instance;

            foreach (var consumer in instance.GetConsumer())
            {
                try
                {
                    if (boot)
                    {
                        consumer.ActiveService();
                    }
                    else
                    {
                        consumer.UnActiveService();
                    }
                }
                catch (Exception ex)
                {
                    AppConnectLogHelper.Error("appconnect 消息队列" + consumer.GetType().Name + " failed in Dispatch " + Newtonsoft.Json.JsonConvert.SerializeObject(ex));
                    succeed = false;
                }
            }
            return(succeed);
        }
        public string ExportExcelTemplate()
        {
            var tenantId = ApplicationContext.Current.TenantId;
            var userId   = ApplicationContext.Current.UserId;
            var path     = string.Empty;

            try
            {
                //设置Excel表头
                var templateData = AppAccountService.Instance.GetTemplateStream(tenantId, userId);
                if (templateData.Length == 0)
                {
                    //error
                    AppConnectLogHelper.Error("生成模板失败,文件数据流为null");
                    return(path);
                }
                var dfsItem = new DfsItem("AppConnectFile", "人员信息模板表.xls", templateData, tenantId);
                var dfsPath = Dfs.Store(dfsItem);
                path = Dfs.ToDownloadUrl(dfsPath.ToString(), UrlSignDomain.Tms, userId);

                ApplicationContext.Current.Put(Const.BeisenContextXHasException, ExceptionType.UrlRedirect);
                ApplicationContext.Current.Put(Const.BeisenContextXExResultModel, new ResultModel {
                    code = "302", message = "url redirect", param = path
                });
            }
            catch (Exception ex)
            {
                AppConnectLogHelper.Error("生成模板失败", ex);
            }
            return(path);
        }
예제 #5
0
        /// <summary>
        /// 根据NodeType和Key从远程配置中读取配置信息
        /// </summary>
        /// <typeparam name="T">返回值的类型</typeparam>
        /// <param name="nodeType">节点类型</param>
        /// <param name="key">节点的Key</param>
        /// <returns>节点的Value</returns>
        public static T GetAppconnectConfigInfo <T>(string nodeType, string key)
        {
            if (appconnectConfigInfo.Count <= 0 || !appconnectConfigInfo.ContainsKey(nodeType))
            {
                AppConnectLogHelper.Error(string.Format("为获取到远程配置信息AppconnectConfig,NodeType{0}", nodeType));
                return(default(T));
            }
            if (!appconnectConfigInfo[nodeType].ContainsKey(key))
            {
                AppConnectLogHelper.Error(string.Format("为获取到远程配置信息AppconnectConfig,NodeType{0}, Key:{1}", nodeType, key));
                return(default(T));
            }
            Add    item = appconnectConfigInfo[nodeType][key];
            object res;

            switch (typeof(T).ToString())
            {
            case "System.String":
                res = item.Value;
                break;

            case "System.Int32":
                res = int.Parse(item.Value);
                break;

            case "System.Boolean":
                res = Convert.ToBoolean(item.Value);
                break;

            default:
                res = item.Value;
                break;
            }
            return((T)(res));
        }
예제 #6
0
        public JsonResult _Bind(string batch, int type, string username, string password = "", string captcha = "")
        {
            try
            {
                var result = ProviderGateway.AppUserAccountProvider.Bind(CookieHelper.GetCookie().OpenIds, batch, (ServiceInterface.Model.Enum.AppUserAccountType)type, username, password, captcha);
                AppConnectLogHelper.Debug("Bind返回值DEBUG" + JsonConvert.SerializeObject(result));
                return(Json(new WebApiResult <WebApiBindResult>
                {
                    Code = result.Result,
                    Message = result.Message,
                    Data = new WebApiBindResult
                    {
                        NeedCaptcha = result.NeedCaptcha,
                        RedirectUrl = result.RedirectUrl
                    }
                }));
            }
            catch (System.Exception ex)
            {
                AppConnectLogHelper.Error("_Bind异常信息" + ex.Message + "EX:", ex);

                return(Json(new WebApiResult <WebApiBindResult>
                {
                    Code = 417,
                    Message = ex.Message,
                    Data = new WebApiBindResult()
                }));
            }
        }
예제 #7
0
        protected void Application_Error(object sender, EventArgs e)
        {
            if (Context != null && Context.AllErrors != null)
            {
                var url = Context.Request.Url.ToString();

                //var text = new StringBuilder();
                //text.Append("Request.Browser.MajorVersion:"+Request.Browser.MajorVersion);
                //text.AppendLine();
                //text.Append("Request.Browser.Platform:" + Request.Browser.Platform);
                //text.AppendLine();
                //text.Append("Request.UserHostAddress:" + Request.UserHostAddress);
                //text.AppendLine();
                //text.Append("Request.Url:" + Request.Url);
                //text.AppendLine();
                //text.Append("Request.UrlReferrer:" + Request.UrlReferrer);
                //text.AppendLine();
                //text.Append("Request.UserAgent:" + Request.UserAgent);
                //text.AppendLine();
                //text.Append("Request.UserHostAddress:" + Request.UserHostAddress);
                //text.AppendLine();
                //text.Append("Request.UserHostName :" + Request.UserHostName);
                //text.AppendLine();
                //text.Append("Request.UserLanguages :" + Request.UserLanguages);
                //AppConnectLogHelper.Error(string.Format("[TestLog][{0}]", text.ToString()));

                foreach (var error in Context.AllErrors)
                {
                    AppConnectLogHelper.Error(string.Format("[Application_Error][{0}]", url), error);
                }
            }
        }
예제 #8
0
        public ApiResult Send([FromUri] int tenant_id, [FromUri] int user_id, [FromBody] MessageArgument message)
        {
            var messageInfo = new MessageInfo();

            messageInfo.TenantId        = tenant_id;
            messageInfo.FromUser        = user_id;
            messageInfo.ToUser          = message.to_user;
            messageInfo.ToOpenId        = message.to_openid;
            messageInfo.AppAccountId    = ProviderGateway.AppAccountProvider.GetAppAccountId(tenant_id, message.appaccount_id, message.tag);
            messageInfo.TemplateIdShort = message.template_id_short;
            messageInfo.TemplateId      = message.template_id;
            messageInfo.Content         = new MessageContent();
            messageInfo.Content.Url     = message.content.url;
            messageInfo.Content.Title   = message.content.title;
            messageInfo.Content.Detail  = new List <MessageContentDetail>();
            foreach (var detail in message.content.detail)
            {
                messageInfo.Content.Detail.Add(new MessageContentDetail {
                    Key = detail.key, Text = detail.text, Value = detail.value
                });
            }
            messageInfo.ContentJson = SerializeHelper.Serialize(messageInfo.Content);
            AppConnectLogHelper.Debug("Send接收到租户:" + tenant_id + "开始发送消息,消息内容:" + Newtonsoft.Json.JsonConvert.SerializeObject(messageInfo));
            var batchId = ProviderGateway.MessageProvider.Send(messageInfo);

            return(new Models.MessageSendResult {
                BatchId = batchId
            });
        }
예제 #9
0
        /// <summary>
        /// 创建provider实例
        /// </summary>
        /// <typeparam name="TProvider"></typeparam>
        /// <returns></returns>
        public static TProvider GetProvider <TProvider>() where TProvider : class
        {
            try
            {
                string typeName = typeof(TProvider).FullName;

                AppConnectProvider providerConfig = GetProviderConfig(typeName);

                if (!Repositories.ContainsKey(providerConfig.TypeName))
                {
                    Type providerType = Type.GetType(providerConfig.TypeName);
                    if (providerType == null)
                    {
                        throw new ArgumentException(typeName, typeName + " provider is null ");
                    }
                    var bindingFlags = BindingFlags.Static | BindingFlags.Public | BindingFlags.GetProperty;
                    var provider     = providerType.InvokeMember("Instance", bindingFlags, null, null, null) as TProvider;
                    //var provider = Activator.CreateInstance(providerType) as TProvider;
                    Repositories[providerConfig.TypeName] = provider;
                    return(provider);
                }
                return(Repositories[providerConfig.TypeName] as TProvider);
            }
            catch (Exception ex)
            {
                AppConnectLogHelper.Error("创建provider实例出错", ex);
                return(null);
            }
        }
예제 #10
0
        /// <summary>
        /// 校验用户名是否存在
        /// </summary>
        /// <param name="userName"></param>
        /// <returns></returns>
        public bool CheckUserNameExist(string userName)
        {
            try
            {
                // var provider = PlatformServiceFactory<IAccountProvider>.Instance();
                var provider = AccountService.Instance;
                if (provider == null)
                {
                    AppConnectLogHelper.Error(new ESBServiceNotFoundException("UserFramework ESB Service Is null"));
                    return(false);
                }

                var args = new LoginNameCheckNotTakenArgs
                {
                    LoginName = userName
                };

                var result = provider.CheckLoginNameNotTaken(args);

                return(!result.Ok);
            }
            catch (System.Exception ex)
            {
                AppConnectLogHelper.Error(ex.Message, new UserOperateException(string.Format("校验UserName失败,接口:AccountService.Instance.CheckLoginNameNotTaken,参数:userName:{0}", userName), ex));
                return(false);
            }
        }
예제 #11
0
        protected string GetOpenId(AppAccountInfo appAccount, string code)
        {
            var extend = new Dictionary <string, string>
            {
                { TemplateConst.ExtendCode, code },
                { TemplateConst.ExtendToken, ProviderGateway.TokenProvider.GetToken(appAccount) }
            };

            var requestTemplate = new DefaultApiTemplate(appAccount, TemplateConst.GetOpenId, extend);
            //TODO:这块会出现空引用需要加一下判断
            var openId = requestTemplate.GetResponse()[TemplateConst.OpenId];

            if (string.IsNullOrWhiteSpace(openId))
            {
                var message = string.Format("未获取到OpenId:tenantId={0},appAccountId={1},code={2}", appAccount.TenantId, appAccount.Id, code);
                AppConnectLogHelper.Error(message);
                throw new SDKResultException(message);
            }

            var cookie = CookieHelper.GetCookie();

            if (cookie.OpenIds == null)
            {
                cookie.OpenIds = new Dictionary <string, string>();
            }
            cookie.OpenIds.Add(appAccount.AppId, openId);
            CookieHelper.SetCookie(cookie);

            return(openId);
        }
예제 #12
0
        /// <summary>
        /// 根据userId获取员工信息
        /// </summary>
        /// <param name="tenantId"></param>
        /// <param name="userId"></param>
        /// <returns></returns>
        public StaffDto GetByTenantIdAndUserId(int tenantId, int userId)
        {
            var args = new StaffsGetByIdsArgs
            {
                TenantId = tenantId,
                UserIds  = new int[] { userId }
            };
            var options = QueryOptions.Default;

            options.IgnoreOperator = true;
            try
            {
                var provider = Beisen.UserFramework.Service.StaffService.Instance;
                //   var provider = PlatformServiceFactory<UserFramework.ESB.ServiceInterface.IStaffProvider>.Instance();
                if (provider == null)
                {
                    AppConnectLogHelper.Error(new ESBServiceNotFoundException("UserFramework ESB Service Is null"));
                    return(null);
                }
                var result = provider.GetStaffByIds(args, options);
                if (result.Code != 200)
                {
                    throw new UserOperateException(string.Format("Code:{0},Message:{1}", result.Code, result.Message));
                }
                return(result.Total > 0 ? result.Items[0] : null);
            }
            catch (System.Exception ex)
            {
                AppConnectLogHelper.Error(ex.Message, new UserOperateException(string.Format("根据租户id和userid获取用户信息失败,接口:StaffService.Instance.GetStaffByIds,参数:tenantId {0},userId {1}",
                                                                                             tenantId, userId), ex));
                return(null);
            }
        }
예제 #13
0
        public Dictionary <string, StaffDto> GetUserByEmail(int tenantId, int userId, IEnumerable <string> emailList)
        {
            var result = new Dictionary <string, StaffDto>();

            if (!emailList.Any())
            {
                return(result);
            }
            var provider = StaffService.Instance;

            if (provider != null)
            {
                var res = provider.GetStaffsByEmails(new StaffsGetByEmailsArgs()
                {
                    TenantId   = tenantId,
                    OperatorId = userId,
                    Emails     = emailList.ToArray()
                }).Items;
                if (res != null && res.Any())
                {
                    foreach (var data in res)
                    {
                        result.AddOrUpdate(data.Email, data);
                    }
                }
            }
            else
            {
                AppConnectLogHelper.Error("UserFramework接口实例化失败");
                throw new Exception("UserFramework接口实例化失败");
            }
            return(result);
        }
예제 #14
0
        public byte[] GetTemplateStream(int tenantId, int userId)
        {
            try
            {
                //构造excel数据
                var workbook = new HSSFWorkbook();
                var sheet    = workbook.CreateSheet("人员信息表");
                sheet.AddMergedRegion(new CellRangeAddress(0, 0, 0, 26));
                sheet.SetColumnWidth(0, 30 * 256);
                sheet.SetColumnWidth(1, 30 * 256);
                sheet.SetColumnWidth(2, 30 * 256);
                IRow warningRow = sheet.CreateRow(0);
                warningRow.CreateCell(0).SetCellValue("注意:邮箱与手机必须有一个不为空,否则会导入失败;(从第三行开始导入数据)");

                IRow titleRow = sheet.CreateRow(1);
                titleRow.CreateCell(0).SetCellValue("姓名");
                titleRow.CreateCell(1).SetCellValue("邮箱");
                titleRow.CreateCell(2).SetCellValue("手机");
                using (var ms = new MemoryStream())
                {
                    workbook.Write(ms);
                    return(ms.GetBuffer());
                }
            }
            catch (Exception ex)
            {
                AppConnectLogHelper.ErrorFormat("调用GetTemplateStream获取模板数据流报错:{0}", ex.Message);
                return(new byte[] { });
            }
        }
예제 #15
0
        private static ObjectData IsExistLogin(int tenantId, AppUserAccountInfo appUserAccountInfo)
        {
            ApplicationContext.Current.ApplicationName = AppUserConstants.MetaName;
            ApplicationContext.Current.TenantId        = tenantId;
            ApplicationContext.Current.UserId          = appUserAccountInfo.UserId;
            ObjectData objectData = new ObjectData();
            var        filter     = new BooleanFilter()
                                    .Must(new TermFilter(AppUserConstants.AppUser_AppId, appUserAccountInfo.AppId))
                                    .Must(new TermFilter(AppUserConstants.AppUser_OpenId, appUserAccountInfo.OpenId));
            // .Must(new TermFilter(AppUserConstants.AppUser_UserId, appUserAccountInfo.UserId));
            var result = CloudDataHelper.GetEntityAllList("AppConnect.AppUser", tenantId, filter).ToList();

            if (result != null && result.Count > 0)
            {
                if (result.Count > 1)
                {
                    AppConnectLogHelper.Error("AppId下面的OpenId个数大于一个!appUserAccountInfo:" + JsonConvert.SerializeObject(appUserAccountInfo));
                    objectData = null;
                }
                else
                {
                    objectData = result.First();
                }
            }
            else
            {
                objectData = null;
            }
            return(objectData);
        }
예제 #16
0
        public MessageSendResult Send(AppAccountInfo appAccount, MessageInfo message)
        {
            var result = new MessageSendResult();

            if (appAccount == null)
            {
                appAccount = ProviderGateway.AppAccountProvider.Get(message.AppAccountId);
            }
            var token = ProviderGateway.TokenProvider.GetToken(appAccount);

            if (string.IsNullOrWhiteSpace(message.ToOpenId))
            {
                var appUsers  = ProviderGateway.AppUserAccountProvider.GetListByUserId(message.TenantId, message.ToUser.Split('|'), appAccount.AppId);
                var toOpenIds = new List <string>();
                foreach (var appUser in appUsers)
                {
                    toOpenIds.Add(appUser.OpenId);
                }
                message.ToOpenId = string.Join("|", toOpenIds);
            }

            var description = new StringBuilder();

            foreach (var detail in message.Content.Detail)
            {
                if (string.IsNullOrWhiteSpace(detail.Text))
                {
                    description.AppendFormat("{0}\n", detail.Value);
                }
                else
                {
                    description.AppendFormat("{0}:{1}\n", detail.Text, detail.Value);
                }
            }
            var picUrl = MediaDataHelper.GetPicUrl(message.ProductId, appAccount.Type.ToString());

            AppConnectLogHelper.DebugFormat("调用企业微信发送消息:Token{0};ToOpenId{1}; AgentId{2} ContentUrl{3}, ContentTitle{4}, description:{5}, pic:{6},tenantId:{7}", token, message.ToOpenId, appAccount.AgentId, message.Content.Url, message.Content.Title, description.ToString(), picUrl, appAccount.TenantId);

            if (string.IsNullOrEmpty(message.Content.Url))
            {
                message.Content.Url = AppConnectHostConfig.Cache[0] + string.Format("/Common/Error?title={0}&message={1}", HttpUtility.UrlEncode("友情提醒"), HttpUtility.UrlEncode("抱歉,此消息暂不支持在此查看,请在电脑浏览器中查看"));
            }
            WorkMessageSendResult sendResult = new WorkMessageSendResult();

            sendResult = WeChatSDK.Work.Message.SendNews(token, message.ToOpenId, Convert.ToInt32(appAccount.AgentId), message.Content.Title, description.ToString(), message.Content.Url, picUrl);
            if (sendResult.ErrCode == 0)
            {
                result.State = MessageState.Success;
                AppConnectLogHelper.DebugFormat("企业微信发送消息成功{0}", JsonConvert.SerializeObject(sendResult));
            }
            else
            {
                result.State = MessageState.Failed;
                AppConnectLogHelper.ErrorFormat("企业微信发送消息失败,errorCode:{0},errorMsg:{1},tenantId:{2},userId:{3}", sendResult.ErrCode, sendResult.ErrMsg, appAccount.TenantId, message.ToOpenId);
            }

            result.ErrMsg = SerializeHelper.Serialize(sendResult);
            return(result);
        }
예제 #17
0
 public ApiResult Unbind(int tenant_id, int user_id, string ids)
 {
     AppConnectLogHelper.Debug("ids------------1111" + ids);
     ProviderGateway.AppUserAccountProvider.UnBind(tenant_id, user_id, ids);
     return(new ApiResult {
         ErrCode = 0
     });
 }
        public override MessageResult OnMessage(MessageContext context)
        {
            if (context == null)
            {
                AppConnectLogHelper.Error("AppConnect context is null , process finished");
                return(Ack());
            }

            try
            {
                #region 处理前的校验
                if (context.Data == null)//消息体为空
                {
                    AppConnectLogHelper.Error("AppConnect context.Data is null , process finished");
                    return(Ack());
                }
                var messageFiledList = Convert.ToString(context.Data).Trim('\"').Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries);
                if (messageFiledList == null || messageFiledList.Count() < 3)
                {
                    AppConnectLogHelper.Error("处理消息时 消息结构不完整 , process finished");
                    return(Ack());
                }
                AccountStaffMessage empMessage = new AccountStaffMessage
                {
                    TenantId   = Convert.ToInt32(messageFiledList[0]),
                    NotifyType = (AccountNotifyType)(Convert.ToInt32(messageFiledList[1])),
                    UserId     = Convert.ToInt32(messageFiledList[2])
                };
                AppConnectLogHelper.Debug("Account Staff的消息" + JsonConvert.SerializeObject(empMessage));
                #endregion

                switch (empMessage.NotifyType)
                {
                //account账号停用,离职,删除
                case AccountNotifyType.DisableUserStatus:
                case AccountNotifyType.DisableStaffStatus:
                case AccountNotifyType.DeleteStaff:
                    //AppConnectLogHelper.Error("分发rbmq 未使用ActionBlock方法作为缓冲");
                    //var provider = new DimissionRecordExcuter(empMessage);
                    //provider.Excute();
                    AppConnectLogHelper.Error("分发rbmq 使用本地的ActionBlock方法作为缓冲");
                    if (!_asyncHandleQueue.Post(new DimissionRecordExcuter(empMessage)))
                    {
                        return(Reject());
                    }
                    break;

                default:
                    AppConnectLogHelper.Debug("AppConnect MessageHandler 未订阅的消息类型  .  Json :" + JsonConvert.SerializeObject(empMessage));
                    break;
                }
            }
            catch (Exception ex)
            {
                AppConnectLogHelper.Error("AppConnect MessageHandler 处理出现异常  .  Json :" + JsonConvert.SerializeObject(ex));
            }
            return(Ack());
        }
        /// <summary>
        /// 获取二维码图片
        /// </summary>
        /// <param name="tenantId"></param>
        /// <param name="appAccountId"></param>
        /// <param name="type"></param>
        /// <param name="code"></param>
        /// <param name="size"></param>
        /// <returns></returns>
        public byte[] GenerateQrCodePicture(int tenantId, string appAccountId, int type, string code, int size)
        {
            ArgumentHelper.AssertNotNullOrEmpty(code, "code is null or empty");
            AppConnectLogHelper.DebugFormat("调用GenerateQrCodePicture方法:tenantId:{0},code:{1}", tenantId, code);
            var scanUrl = UrlHelper.AddParameter(AppConnectHostConfig.Cache[0] + HostConst.QrCodeScanLogin, "code", code);

            AppConnectLogHelper.DebugFormat("scanUrl:{0}", scanUrl);
            return(QrCodeHelper.Generate(scanUrl, size));
        }
예제 #20
0
        public static string SendEmail(int tenantId, string emailSubject, string fromUser, string toUsers, string body, bool isBodyHtml = true, EmailType emailType = EmailType.Normal)
        {
            Beisen.BeisenUser.BeisenTenant beisenTenant = null;
            if (tenantId != 0)
            {
                beisenTenant = BeisenUser.ServiceImp.BeisenUserGateway.BeisenTenantProvider.GetTenantById(tenantId);
            }

            var smsMailProvider = PlatformServiceFactory <ISMSMailProvider> .Instance();

            if (smsMailProvider == null)
            {
                AppConnectLogHelper.Error("SMSMailProvider实例化错误");
                return(string.Empty);
            }
            var batch = new MailBatch
            {
                SystemId   = _systemId,
                TenantId   = beisenTenant != null ? beisenTenant.ID : 0,
                EMailType  = emailType,
                TenantName = beisenTenant != null ? beisenTenant.Name : "北森"
            };

            var to = new MailAddressCollection();

            to.Add(new MailAddress(toUsers, toUsers));

            var msg = new MailMessage
            {
                From = new MailAddress(_virtualFromEmail, "iTalent"),
                To   = to,
                //ReplyTo = new MailAddressCollection()
                //{
                //    new MailAddress()
                //    {
                //        DisplayName = "iTalent",
                //        Address = _virtualFromEmail
                //    }
                //},
                Subject    = emailSubject,
                Body       = body,
                IsBodyHtml = isBodyHtml,
                Priority   = MailPriority.Normal
            };

            batch.MailMessages.Add(msg);

            var result = smsMailProvider.Mail_SendMailByBatch(batch);

            if (Enum.IsDefined(typeof(RequestStatus), result))
            {
                AppConnectLogHelper.Error(string.Format("发送邮件失败:result={0},toUsers={1}", result, string.Join("|", toUsers)));
                return(string.Empty);
            }
            return(result);
        }
예제 #21
0
        private static void AddCloudData(int tenantId, List <AppUserAccountInfo> appUserAccountInfos, ref string message)
        {
            try
            {
                message += string.Format("租户:{0} 开始处理数据\r\n", tenantId);
                BeisenUserDao.SetContext(tenantId);
                //先删除该租户数据
                List <string> delObjectIds = new List <string>();
                var           multiDataDic = GetMultiTenantData(tenantId);
                foreach (var item in multiDataDic)
                {
                    if (!delObjectIds.Contains(Convert.ToString(item.ID)))
                    {
                        delObjectIds.Add(Convert.ToString(item.ID));
                    }
                }
                CloudDataHelper.Delete("AppConnect.AppUser", tenantId, delObjectIds.ToArray());

                message += string.Format("租户:{0} 开始删除{1}条数据\r\n", tenantId, delObjectIds.Count);

                var metaObject = CloudDataHelper.GetMetaObject(tenantId, "AppConnect.AppUser");
                List <ObjectData> objectDatas = new List <ObjectData>();
                foreach (var appUserAccountInfo in appUserAccountInfos)
                {
                    ObjectData objectData = new ObjectData(metaObject);
                    objectData.ID                 = Guid.NewGuid();
                    objectData.CreatedBy          = appUserAccountInfo.UserId;
                    objectData.CreatedTime        = appUserAccountInfo.CreateTime;
                    objectData.ModifiedBy         = appUserAccountInfo.UserId;
                    objectData.ModifiedTime       = appUserAccountInfo.ModifyTime;
                    objectData["StdIsDeleted"]    = false;
                    objectData["TenantId"]        = appUserAccountInfo.TenantId;
                    objectData["UserId"]          = appUserAccountInfo.UserId;
                    objectData["UserEmail"]       = appUserAccountInfo.BeisenAccount;
                    objectData["State"]           = appUserAccountInfo.StateNotEnum;
                    objectData["ActivateTime"]    = appUserAccountInfo.CreateTime;
                    objectData["OpenId"]          = appUserAccountInfo.OpenId;
                    objectData["AppId"]           = appUserAccountInfo.AppId;
                    objectData["SqlId"]           = appUserAccountInfo.Id;
                    objectData["LoginType"]       = appUserAccountInfo.TypeNotEnum;
                    objectData["SqlId"]           = appUserAccountInfo.Id;
                    objectData["MasterAccountId"] = appUserAccountInfo.MasterAccountId;
                    objectDatas.Add(objectData);
                }
                CloudDataHelper.Add(metaObject, objectDatas);
                message += string.Format("租户:{0} 处理完毕,共处理{1}条数据 \r\n", tenantId, objectDatas.Count);
            }
            catch (Exception ex)
            {
                message += string.Format("租户:{0} 修复数据失败!\r\n", tenantId);
                AppConnectLogHelper.ErrorFormat(message, ex);
                Froms.MessageBox.Show(ex.Message);
            }
        }
예제 #22
0
 protected void Application_Error(object sender, EventArgs e)
 {
     if (Context != null && Context.AllErrors != null)
     {
         var url = Context.Request.Url.ToString();
         foreach (var error in Context.AllErrors)
         {
             AppConnectLogHelper.Error(string.Format("[Application_Error][{0}]", url), error);
         }
     }
 }
예제 #23
0
 /// <summary>
 /// 记录请求日志
 /// </summary>
 /// <param name="url"></param>
 /// <param name="method"></param>
 /// <param name="body"></param>
 /// <param name="response"></param>
 /// <param name="message"></param>
 internal static void Add(string url, string method, string body, string response, string message = null)
 {
     try
     {
         RequestLogDao.Insert(url, method, body, response, message);
     }
     catch (Exception ex)
     {
         AppConnectLogHelper.Error("记录请求日志错误", ex);
     }
 }
예제 #24
0
 public static int GetSecurityByUserName(string userName)
 {
     try
     {
         return(BeisenUserGateway.UserSecurityProvider.GetSecurityByUserName(userName));
     }
     catch (Exception ex)
     {
         AppConnectLogHelper.Error(string.Format("BeisenUserProxy.GetUserEmail error:userName={0},message:{1}", userName, ex.Message));
         throw;
     }
 }
예제 #25
0
 public static int GetTenantId(int userId)
 {
     try
     {
         return(UserLiteProvider.Instance.GetUserLiteByID(userId).TenantID);
     }
     catch (Exception ex)
     {
         AppConnectLogHelper.Error(string.Format("BeisenUserProxy.GetTenantId error:userid={0},message:{1}", userId, ex.Message));
         throw;
     }
 }
예제 #26
0
 public static List <UserLite> GetUserLiteByUserIds(int tenantId, List <int> userIds)
 {
     try
     {
         return(UserLiteProvider.Instance.GetUserLiteByUserIds(tenantId, userIds));
     }
     catch (Exception ex)
     {
         AppConnectLogHelper.Error(string.Format("BeisenUserProxy.GetUserLiteByUserIds error:tenantId={0},userid={1},message:{2}", tenantId, string.Join(",", userIds), ex.Message));
         throw;
     }
 }
예제 #27
0
        public ActionResult Image(string code, int size = 320, int tenant_id = 0, string appaccount_id = "", int type = 12)
        {
            ArgumentHelper.AssertNotNullOrEmpty(code, "code is null or empty");
            AppConnectLogHelper.DebugFormat("调用Image方法:code:{0}", code);
            var file = ProviderGateway.QrCodeLoginProvider.GenerateQrCodePicture(tenant_id, appaccount_id, type, code, size);

            if (file == null || file.Length <= 0)
            {
                AppConnectLogHelper.Error("file stream is null");
            }
            return(File(file, "image/png"));
        }
예제 #28
0
 public static int ValidateByEmail(string email, string password)
 {
     try
     {
         return(BeisenUserGateway.UserSecurityProvider.ValidateByEmai(email, password, false));
     }
     catch (Exception ex)
     {
         AppConnectLogHelper.Error(string.Format("BeisenUserProxy.ValidateByEmail error:email={0},message:{1}", email, ex.Message));
         throw;
     }
 }
예제 #29
0
        /// <summary>
        /// 创建员工
        /// </summary>
        /// <returns></returns>
        public int CreateStaff(RegisterUserInfo info, int operatorId = 0)
        {
            var args = new StaffCreateArgs
            {
                TenantId = info.TenantId,
                Origin   = (int)RegisterOriginState.WeChat,
                Staff    = new Staff
                {
                    Email        = info.Email,
                    Name         = info.Name,
                    Mobile       = info.Mobile,
                    WorkPhone    = info.WorkPhone,
                    Position     = info.Position,
                    Hobbies      = info.DepartmentName,
                    EmployedDate = DateTime.Now
                },
                Account = new Account
                {
                    UserName      = info.RegisterType == 1 ? null : info.Email,
                    Password      = info.Password,
                    BindingMobile = info.RegisterType == 1 ? info.Mobile : null
                },
                OperatorId = 0
            };
            var options = StaffCreateOptions.CreateAccountAndActivate;

            options.IgnoreOperator     = operatorId == 0;
            options.UseVirtualUserName = info.RegisterType == 1;
            try
            {
                var provider = Beisen.UserFramework.Service.StaffService.Instance;
                //   var provider = PlatformServiceFactory<UserFramework.ESB.ServiceInterface.IStaffProvider>.Instance();
                if (provider == null)
                {
                    AppConnectLogHelper.Error(new ESBServiceNotFoundException("UserFramework ESB Service Is null"));
                    return(0);
                }

                var result = provider.CreateStaff(args, options);
                if (!result.Ok)
                {
                    throw new UserOperateException(string.Format("Message:{0}", result.Error.Message));
                }
                return(result.State);
            }
            catch (System.Exception ex)
            {
                AppConnectLogHelper.Error(ex.Message, new UserOperateException("创建员工失败,接口:StaffService.Instance.CreateStaff", ex));
                return(0);
            }
        }
예제 #30
0
        /// <summary>
        /// 发送ISV手机验证码(只有发送验证码可用,发送其他短信不要用此接口)
        /// </summary>
        public bool SendISVMobileValCode(int tenantId, string isv, string channelId, string content, string toPhone, SMSType type, string templateMessageText)
        {
            if (string.IsNullOrEmpty(channelId))
            {
                AppConnectLogHelper.Error(new SMSSendException("短信通道未配置"));
                return(false);
            }

            var smsInvokeProvider = PlatformServiceFactory <ISMSMailProvider> .Instance();

            if (smsInvokeProvider == null)
            {
                AppConnectLogHelper.Error(new ESBServiceNotFoundException("SMS ESB Service Is null"));
                return(false);
            }

            var smsBatch      = new SMSBatch();
            var shortMessages = new List <ShortMessage>()
            {
                new ShortMessage()
                {
                    PhoneNumber         = toPhone,
                    MessageText         = content,
                    TemplateMessageText = templateMessageText
                }
            };

            var messageCollection = new MessageCollection(shortMessages.ToArray());

            smsBatch.SystemId = channelId;
            if (tenantId == 0)
            {
                tenantId = 2;
            }
            smsBatch.TenantId      = tenantId;
            smsBatch.TenantName    = "ISV业务短信";
            smsBatch.ShortMessages = messageCollection;
            smsBatch.UserId        = 0;
            ArgumentHelper.IsValid(smsBatch, true);

            var  sendInfo  = smsInvokeProvider.SMS_SendSMSByTime(smsBatch);
            bool isSuccess = CheckResult(sendInfo);

            if (isSuccess)
            {
                return(true);
            }
            AppConnectLogHelper.Error("短信发送失败:" + sendInfo);
            return(false);
        }