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[] { }); } }
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; } }
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); }
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); } }
/// <summary> /// 批量获取元数据对象 /// </summary> /// <param name="tenantId"></param> /// <param name="metaObjectNames"></param> /// <returns></returns> public static Dictionary <string, MetaObject> GetMetaObjects(int tenantId, params string[] metaObjectNames) { Dictionary <string, MetaObject> dic = new Dictionary <string, MetaObject>(); foreach (var metaObjectName in metaObjectNames) { try { dic.Add(metaObjectName, MetaObjectProvider.GetObjectMeta(metaObjectName, tenantId)); } catch (Exception ex) { AppConnectLogHelper.ErrorFormat("批量获取元数据对象出现了问题,出错对象名为}"); } } return(dic); }
private static void AddCLoud(int tenantId, List <AppUserAccountInfo> appUserAccountInfos, ref string message) { try { BeisenUserDao.SetContext(tenantId); message += string.Format("租户:{0} 开始处理\r\n", tenantId); var metaObject = CloudDataHelper.GetMetaObject(tenantId, "AppConnect.AppUser"); List <ObjectData> objectDatas = new List <ObjectData>(); var appUserAccountInfos_tenantId = appUserAccountInfos.Where(w => w.TenantId == tenantId).ToList(); if (appUserAccountInfos_tenantId != null && appUserAccountInfos_tenantId.Count > 0) { appUserAccountInfos_tenantId.ForEach(appUserAccountInfo => { ObjectData objectData = new ObjectData(metaObject); objectData.ID = Guid.NewGuid(); objectData.CreatedBy = appUserAccountInfo.UserId; objectData.CreatedTime = DateTime.Now; objectData.ModifiedBy = appUserAccountInfo.UserId; objectData.ModifiedTime = DateTime.Now; objectData["StdIsDeleted"] = false; objectData["TenantId"] = appUserAccountInfo.TenantId; objectData["UserId"] = appUserAccountInfo.UserId; objectData["UserEmail"] = appUserAccountInfo.BeisenAccount; objectData["State"] = appUserAccountInfo.StateNotEnum; objectData["ActivateTime"] = DateTime.Now; 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} 处理完毕,共处理{objectDatas.Count}条数据 \r\n", tenantId); } catch (Exception ex) { message += string.Format("租户:{0} 修复数据失败!\r\n", tenantId); AppConnectLogHelper.ErrorFormat(message, ex); Froms.MessageBox.Show(ex.Message); } }
public ApiResult SendMessage([FromUri] int tenant_id, [FromUri] int user_id, [FromBody] MessageArgumentForTita message) { Models.MessageSendResult resultMessage = new Models.MessageSendResult(); var messageInfo = new MessageInfo(); try { VaildMessageType(tenant_id, user_id, message); messageInfo.TenantId = tenant_id; messageInfo.FromUser = user_id; messageInfo.ToUser = message.receiverId; messageInfo.ProductId = message.productId; messageInfo.MessageTypeList = SpliceMessageType(message.messageType); 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); resultMessage.BatchId = batchId; resultMessage.ErrCode = 0; resultMessage.ErrMsg = "企业消息发送成功!"; AppConnectLogHelper.DebugFormat("租户:{0},接收人:{1},产品:{2},消息:{3}发送成功!", messageInfo.TenantId, messageInfo.ToUser, messageInfo.ProductId, JsonConvert.SerializeObject(messageInfo.Content)); } catch (System.Exception ex) { resultMessage.ErrCode = 500; resultMessage.ErrMsg = string.Format("调用企业发送消息失败:{0}", ex.Message); AppConnectLogHelper.ErrorFormat("企业消息发送消息异常:{0}", Newtonsoft.Json.JsonConvert.SerializeObject(ex)); } //调用ISV消息发送 try { AppConnectLogHelper.Debug("开始发送ISV消息"); var requestUrl = string.Format("{0}/Api/ISVApi/SendMessage?tenant_id={1}&user_id={2}", AppConnectHostConfig.Cache[0], tenant_id, user_id); string resultStr = HttpClientHelper.HttpPost(requestUrl, message); var resultModel = JsonConvert.DeserializeObject <ApiResultModel>(resultStr); if (resultModel.Code != 0) { resultMessage.ErrCode = 500; resultMessage.ErrMsg = "ISV消息发送失败!"; AppConnectLogHelper.Error("调用ISV 发送消息api失败"); } AppConnectLogHelper.Debug("调用ISV 发送消息api成功"); } catch (Exception ex) { resultMessage.ErrCode = 500; resultMessage.ErrMsg = string.Format("调用ISV发送消息失败:{0}", ex.Message); AppConnectLogHelper.ErrorFormat("发送消息异常:{0}", JsonConvert.SerializeObject(ex)); } AppConnectLogHelper.DebugFormat("SendMessageResult:{0}", JsonConvert.SerializeObject(resultMessage)); return(resultMessage); }
internal void BatchHandleExcelData(int tenantId, int userId, ISheet staffSheet, string appId, bool isAsync) { List <AppUserAccountInfo> appUserAccountInfoList = new List <AppUserAccountInfo>(); Dictionary <string, string> emailDic = new Dictionary <string, string>(); Dictionary <string, string> mobileDic = new Dictionary <string, string>(); //将excel数据 转换成datatable,接着转换成Dictionary var dataTable = ExcelService.Instance.ExcelToDataTable(staffSheet); for (int i = 0; i < dataTable.Rows.Count; i++) { var openId = Convert.ToString(dataTable.Rows[i][0]); var email = Convert.ToString(dataTable.Rows[i][1]); var mobile = Convert.ToString(dataTable.Rows[i][2]); if (!string.IsNullOrEmpty(email)) { emailDic.Add(email, openId); } else { if (!string.IsNullOrEmpty(mobile)) { mobileDic.Add(mobile, openId); } else { continue; } } } IEnumerable <string> emailList = emailDic.Select(t => t.Key); IEnumerable <string> mobileList = mobileDic.Select(t => t.Key); var emailResult = GetUserByEmail(tenantId, userId, emailList); var mobileResult = GetUserByMobile(tenantId, userId, mobileList); foreach (var emailItem in emailResult) { AppUserAccountInfo userInfo = new AppUserAccountInfo() { AppId = appId, OpenId = emailDic[emailItem.Key], TenantId = emailItem.Value.TenantId, UserId = emailItem.Value.UserId, BeisenAccount = emailItem.Value.Email, Type = AppUserAccountType.Batch, State = AppUserAccountState.Activated, CreateTime = DateTime.Now, ModifyTime = DateTime.Now, ActivateTime = DateTime.Now }; appUserAccountInfoList.Add(userInfo); } foreach (var mobileItem in mobileResult) { AppUserAccountInfo userInfo = new AppUserAccountInfo() { AppId = appId, OpenId = mobileDic[mobileItem.Key], TenantId = mobileItem.Value.TenantId, UserId = mobileItem.Value.UserId, BeisenAccount = mobileItem.Value.Mobile, Type = AppUserAccountType.Batch, State = AppUserAccountState.Activated, CreateTime = DateTime.Now, ModifyTime = DateTime.Now, ActivateTime = DateTime.Now }; appUserAccountInfoList.Add(userInfo); } foreach (var user in appUserAccountInfoList) { var rest = ProviderGateway.AppUserAccountProvider.AddOrUpdate(tenantId, user); if (rest <= 0) { AppConnectLogHelper.ErrorFormat("执行AddOrUpdate失败:tenantId:{0},userInfo:{1}", tenantId, Newtonsoft.Json.JsonConvert.SerializeObject(user)); } } if (isAsync) { TitaMessageHelper.SendMessage(tenantId, userId, "导入数据成功"); } }
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.TemplateId)) { if (string.IsNullOrWhiteSpace(message.TemplateIdShort)) { result.State = MessageState.Failed; result.ErrMsg = "模板为空"; return(result); } //跟据数据库中对应关系获取id var templateId = ProviderGateway.TemplateMappingProvider.GetTemplateId(appAccount.AppId, message.TemplateIdShort); //不存在增加模板 if (string.IsNullOrWhiteSpace(templateId)) { var template = Template.AddTemplate(token, message.TemplateIdShort); if (template.ErrCode != 0) { result.State = MessageState.Failed; result.ErrMsg = SerializeHelper.Serialize(template); return(result); } message.TemplateId = template.TemplateId; ProviderGateway.TemplateMappingProvider.Add( new TemplateMappingInfo { AppId = appAccount.AppId, TemplateIdShort = message.TemplateIdShort, TemplateId = template.TemplateId, CreateBy = message.FromUser }); } else { message.TemplateId = templateId; } } if (string.IsNullOrWhiteSpace(message.ToOpenId)) { var appUser = ProviderGateway.AppUserAccountProvider.GetByUserId(message.TenantId, Convert.ToInt32(message.ToUser), appAccount.AppId); if (appUser == null) { result.State = MessageState.Failed; result.ErrMsg = "用户未绑定"; return(result); } message.ToOpenId = appUser.OpenId; } var jsondata = new StringBuilder(); jsondata.Append("{"); foreach (var detail in message.Content.Detail) { jsondata.Append("\"" + detail.Key + "\":{\"value\":\"" + detail.Value + "\"},"); } jsondata.Remove(jsondata.Length - 1, 1); jsondata.Append("}"); 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}", token, message.ToOpenId, appAccount.AgentId, message.Content.Url, message.Content.Title, jsondata.ToString(), picUrl); if (string.IsNullOrEmpty(message.Content.Url)) { message.Content.Url = AppConnectHostConfig.Cache[0] + string.Format("/Common/Error?title={0}&message={1}", HttpUtility.UrlEncode("友情提醒"), HttpUtility.UrlEncode("抱歉,此消息暂不支持在此查看,请在电脑浏览器中查看")); } var sendResult = Template.SendTemplateMessageForJson(token, message.ToOpenId, message.TemplateId, "", message.Content.Url, jsondata.ToString()); if (sendResult.ErrCode != 0) { result.State = MessageState.Failed; result.ErrMsg = SerializeHelper.Serialize(sendResult); AppConnectLogHelper.ErrorFormat("企业微信发送消息失败,errorCode:{0},errorMsg:{1}", sendResult.ErrCode, sendResult.ErrMsg); return(result); } result.State = MessageState.Success; result.MessageId = sendResult.MsgId.ToString(); result.ErrMsg = SerializeHelper.Serialize(sendResult); return(result); }
public void OnActionExecuting(ActionExecutingContext filterContext) { //Log 信息 try { var tenant_id = filterContext.ActionParameters["tenant_id"]; var appaccount_id = filterContext.ActionParameters["appaccount_id"]; var app_id = filterContext.ActionParameters["app_id"]; var redirect_url = filterContext.ActionParameters["redirect_url"]; var logMsg = string.Format("TenantId:{0},Appaccont_Id:{1},App_Id:{2},Redirect_Url:{3};", tenant_id, appaccount_id, app_id, redirect_url); AppConnectLogHelper.Debug(logMsg); var cookie = CookieHelper.GetCookie(); if (cookie != null) { var jsonstr = SerializeHelper.Serialize(cookie); var logMsg1 = string.Format("TenantId:{0},Appaccont_Id:{1},App_Id:{2},Redirect_Url:{3};Cookie{4}", tenant_id, appaccount_id, app_id, redirect_url, jsonstr); AppConnectLogHelper.Debug(logMsg1); } else { var logMsg2 = string.Format("Cookie为空: TenantId:{0},Appaccont_Id:{1},App_Id:{2},Redirect_Url:{3};", tenant_id, appaccount_id, app_id, redirect_url); AppConnectLogHelper.Debug(logMsg2); } } catch (System.Exception ex) { } try { // 临时处理北森cloud应用身份失效情况,暂时直接跳错误页,后续再寻找解决方案 var controllerName = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName.ToLower(); var actionName = filterContext.ActionDescriptor.ActionName.ToLower(); var appType = filterContext.HttpContext.Request["app_type"]; if (controllerName == "user" && actionName == "authorize" && !string.IsNullOrWhiteSpace(appType)) { filterContext.Result = new RedirectResult(AppConnectHostConfig.Cache[0] + HostConst.Error + "?message=您的身份已失效,请重新进入应用"); return; } var attributes = filterContext.ActionDescriptor.GetCustomAttributes(false); bool isVerifyAccount = false; foreach (var attribute in attributes) { var attributeFullName = attribute.ToString(); if (attributeFullName == "Beisen.AppConnect.Infrastructure.Attribute.AccountIdentityAttribute") { isVerifyAccount = true; } } if (isVerifyAccount) { //用于开发调试 //var appId = "wxdcfd8d067c353bed"; //var openId = "oeJYSwIG_y0WoXyPiGMSC66B-Gd4"; //var cookieDev = CookieHelper.GetCookie(); //if (cookieDev.OpenIds == null || !cookieDev.OpenIds.ContainsKey(appId)) //{ // if (cookieDev.OpenIds == null) // { // cookieDev.OpenIds = new System.Collections.Generic.Dictionary<string, string>(); // } // cookieDev.OpenIds.Add(appId, openId); // CookieHelper.SetCookie(cookieDev); // filterContext.Result = new RedirectResult(filterContext.HttpContext.Request.RawUrl); // return; //} //var tenantId = ConvertToInt(filterContext.HttpContext.Request["tenant_id"]); //var appAccountId = filterContext.HttpContext.Request["appaccount_id"]; var type = ConvertHelper.ToInt(filterContext.HttpContext.Request["type"]); var cookie = CookieHelper.GetCookie(); string redirectUrl = null; //获取登录状态,当有值且为0时是PC登录 var loginType = filterContext.HttpContext.Request.QueryString["login_type"]; AppConnectLogHelper.DebugFormat("loginType:{0},url:{1}", loginType, filterContext.HttpContext.Request.RawUrl); if (!string.IsNullOrEmpty(loginType) && loginType == "0")//PC登录 { redirectUrl = ProviderGateway.AuthorizeProvider.GetAuthorizeUrl(RuntimeContext.AppAccountId, filterContext.HttpContext.Request.RawUrl, type == 0 ? 12 : type, cookie, loginType); } else { redirectUrl = ProviderGateway.AuthorizeProvider.GetAuthorizeUrl(RuntimeContext.AppAccountId, filterContext.HttpContext.Request.RawUrl, type == 0 ? 12 : type, cookie);//移动端 } if (redirectUrl != null) { filterContext.Result = new RedirectResult(redirectUrl); return; } if (controllerName == "account" && actionName == "home") { //var tenantId = filterContext.HttpContext.Request["tenant_id"]; //var inviteUserId = filterContext.HttpContext.Request["inviteuser_id"]; //var isvId = filterContext.HttpContext.Request["isv_id"]; //var url = filterContext.HttpContext.Request["redirect_url"]; redirectUrl = ProviderGateway.AuthorizeProvider.GetIdentityUrl(RuntimeContext.AppAccountId, filterContext.HttpContext.Request.RawUrl, type == 0 ? 12 : type, cookie, ServiceInterface.Model.Enum.CallbackContentState.RegisterBind); } else { redirectUrl = ProviderGateway.AuthorizeProvider.GetIdentityUrl(RuntimeContext.AppAccountId, filterContext.HttpContext.Request.RawUrl, type == 0 ? 12 : type, cookie); } if (redirectUrl != null) { filterContext.Result = new RedirectResult(redirectUrl); return; } CookieHelper.SetCookie(cookie); } } catch (Exception ex) { AppConnectLogHelper.ErrorFormat("Filter执行异常:{0}", Newtonsoft.Json.JsonConvert.SerializeObject(ex)); throw; } }