public async Task <Result <string> > PrevAutoPush([FromBody] WxAutoPushShow item) { if (!string.IsNullOrEmpty(item.OpenID)) { return(await wxAutoPushHelper.AutoRespond(item, item.OpenID)); } else { if (string.IsNullOrEmpty(item.PrevNick)) { return(new Result <string> { Message = "请输入要预览的微信用户昵称!" }); } // 用户信息 var wxUser = await repo.FirstOrDefaultAsync <WxUserInfo>(x => x.NickName == item.PrevNick && x.IsSubscribe == 1); if (wxUser == null) { return(new Result <string> { Message = "昵称对应的微信用户不存在!" }); } return(await wxAutoPushHelper.AutoRespond(item, wxUser.OpenId)); } }
/// <summary> /// 构造自动推送消息 /// </summary> /// <param name="push"></param> /// <param name="baseMsg"></param> /// <param name="apMsgType"></param> /// <returns></returns> private async Task <PubKfBaseMsg> GetAutoPushMsg(WxAutoPushShow push, PubKfBaseMsg baseMsg, Enum_ApMsgType apMsgType) { switch (apMsgType) { // 文本(昵称)和红包消息需要单独发送 case Enum_ApMsgType.Image: baseMsg = new PubKfImgMsg { image = new PubKfImgContent { media_id = push.MediaId } }; break; case Enum_ApMsgType.Voice: baseMsg = new PubKfVoiceMsg { voice = new PubKfVoiceContent { media_id = push.MediaId } }; break; case Enum_ApMsgType.Video: baseMsg = new PubKfVideoMsg { video = new PubKfVideoContent { media_id = push.MediaId, thumb_media_id = push.VideoThumbMediaId, title = push.VideoTitle, description = push.VideoDescription } }; break; case Enum_ApMsgType.News: baseMsg = new PubKfMpNewsMsg { mpnews = new PubKfMpnewsContent { media_id = push.MediaId } }; break; case Enum_ApMsgType.BackNews: var lstArts = await wxAutoConvertHelper.GetAutoPushBackNews(push); baseMsg = new PubKfNewsMsg { news = new PubKfNewsContent { articles = lstArts } }; break; default: break; } return(baseMsg); }
public async Task <Result <string> > SaveAutoPush([FromBody] WxAutoPushShow item) { try { // 多图文 if (item.LstSelArtIds != null && item.LstSelArtIds.Count > 0) { item.ArtIds = string.Join(",", item.LstSelArtIds); } // 性别 if (item.LstSelSex != null && item.LstSelSex.Count > 0) { item.PushingSex = string.Join(",", item.LstSelSex); } // 视频 if (item.ContentType == Enum_ApMsgType.Video.ToString()) { var vedio = await repo.FirstOrDefaultAsync <WxMediaShow>(x => x.MediaId == item.MediaId); if (vedio != null) { item.VideoTitle = vedio.Title; item.VideoDescription = vedio.Introduction; } } var dtNow = DateTime.Now; var user = currentUser.UserName; if (!item.CreateTime.HasValue) { item.Creater = user; item.CreateTime = dtNow; } item.Updater = user; item.UpdateTime = dtNow; await repo.SaveAsync(item); return(new Result <string> { IsSucc = true, Message = "保存自动推送配置成功!" }); } catch (Exception ex) { logHelper.Error("SaveAutoPush:保存自动推送配置失败:" + ex.Message + " " + ex.StackTrace); } return(new Result <string> { Message = "保存自动推送配置失败!" }); }
/// <summary> /// 发送红包消息(定时推送) /// </summary> /// <param name="item"></param> /// <param name="openId"></param> /// <returns></returns> public async Task <Result <string> > SendAutoPushRedPack(WxAutoPushShow item, string openId) { // 判断红包个数 var sendCount = repo.SqlQuerySingle <int>(" SELECT COUNT(1) FROM WxAutoPushDetail WHERE AutoId = @Id ", new { Id = item.Id }); if (sendCount >= item.RedCount) { return(new Result <string> { Message = "很抱歉,你来晚了,红包已经发送完毕!" }); } // 判断用户是否领取过 var exist = await repo.FirstOrDefaultAsync <WxAutoPushDetail>(x => x.PushId == item.Id && x.Opend == openId); if (exist != null) { return(new Result <string> { Message = "你已经领取过了,请勿重复领取,把机会留给没有参与的用户!" }); } // 发送红包 var redRes = RedpackApi.SendPack(openId, item.RedAmount, item.RedAct, item.RedWish, item.RedWish, ""); logHelper.Debug("SendPack:发送红包结果:" + ComHelper.JsonSerialize(redRes)); if (redRes.IsSucc) { //红包发送成功 var autoHis = await SaveAutoPushHis(item.Id, openId); logHelper.Debug("SendPack:发送红包成功:" + autoHis.JsonSerialize()); return(new Result <string> { IsSucc = true, Message = "发送红包成功!" }); } else { var msg = "红包发送失败:" + redRes.err_code + " " + redRes.err_code_des; logHelper.Error("SendPack:" + msg); return(new Result <string> { Message = msg }); } }
/// <summary> /// 后台图文转换成客服图文消息(定时推送) /// </summary> /// <param name="item"></param> /// <returns></returns> public async Task <List <PubKfArticle> > GetAutoPushBackNews(WxAutoPushShow item) { var lstArts = new List <PubKfArticle>(); if (!string.IsNullOrEmpty(item.ArtIds)) { // 选定的图文ids item.LstSelArtIds = item.ArtIds.StrSplitList().Select(x => Convert.ToInt64(x)).ToList(); if (item.LstSelArtIds != null && item.LstSelArtIds.Count > 0) { // 最终发送的图文列表 var lstBackAftNews = new List <WxBackNewsShow>(); // 选定的图文列表 var lstBackNews = await repo.QueryAsync <WxBackNewsShow>(x => x.IsDel == 0 && item.LstSelArtIds.Contains(x.Id)); if (item.IsMul == 0) { // 随机图文 var temp = ComHelper.GetRandomVal(lstBackNews); lstBackAftNews.Add(temp); } else { // 多图文 lstBackAftNews = lstBackNews; } // 转换图文 foreach (var news in lstBackAftNews) { var temp = new PubKfArticle(); temp.title = news.Name; temp.description = news.SecondName; temp.url = ComHelper.UpdImgAbsPath(WebRoot, news.ArticleUrl); temp.picurl = ComHelper.UpdImgAbsPath(WebRoot, news.ImgUrlVir); lstArts.Add(temp); } } } return(lstArts); }
/// <summary> /// 推送消息 /// </summary> /// <param name="push"></param> /// <param name="lstWxUser"></param> /// <returns></returns> private async Task PushMsgToUser(WxAutoPushShow push, List <WxUserInfo> lstWxUser) { // 构造消息 var baseMsg = new PubKfBaseMsg(); var apMsgType = ComHelper.GetEnumValueByStr <Enum_ApMsgType>(push.ContentType); // 构造自动推送消息 baseMsg = await GetAutoPushMsg(push, baseMsg, apMsgType); logHelper.Debug("AutoPushJob:即将发送的消息为:" + baseMsg.JsonSerializeNoNull()); // 遍历发送客服消息 foreach (var user in lstWxUser) { try { await SendAutoPushMsg(push, baseMsg, apMsgType, user); } catch (Exception ex) { logHelper.Error("AutoPushJob:发送消息给用户失败:" + user.OpenId + " " + ex.Message + " " + ex.StackTrace); } } }
/// <summary> /// 定时推送消息 /// </summary> /// <param name="push"></param> /// <param name="baseMsg"></param> /// <param name="apMsgType"></param> /// <param name="user"></param> /// <returns></returns> private async Task SendAutoPushMsg(WxAutoPushShow push, PubKfBaseMsg baseMsg, Enum_ApMsgType apMsgType, WxUserInfo user) { // 文本消息 昵称赋值 if (apMsgType == Enum_ApMsgType.Text) { var txt = push.TextContent.Replace("{nickname}", user.NickName); baseMsg = new PubKfTextMsg { text = new PubKfTextContent { content = txt } }; } // 红包单独发送 if (apMsgType == Enum_ApMsgType.RedBag) { var apiRes = await wxAutoConvertHelper.SendAutoPushRedPack(push, user.OpenId); logHelper.Debug("AutoPushJob:发送红包用户:" + user.OpenId + " 结果:" + apiRes); } else { // 非红包消息发送 var apiRes = PubKfApi.SendMsg(baseMsg, user.OpenId); if (apiRes.IsSuss) { await wxAutoConvertHelper.SaveAutoPushHis(push.Id, user.OpenId); } else { logHelper.Error("AutoPushJob:发送消息给" + user.OpenId + "失败:" + apiRes.errcode + " " + apiRes.errmsg); } logHelper.Debug("AutoPushJob:发送消息用户:" + user.OpenId + " 结果:" + apiRes.JsonSerialize()); } }
public async Task <Result <string> > UpdAutoPush([FromBody] WxAutoPushShow item) { try { item.IsDel = 1 - item.IsDel; item.Updater = currentUser.UserName; item.UpdateTime = DateTime.Now; await repo.UpdateAsync(item, new List <string> { "IsDel", "Updater", "UpdateTime" }); return(new Result <string> { IsSucc = true, Message = "更新自动推送状态成功!" }); } catch (Exception ex) { logHelper.Error("UpdAutoPush:更新自动推送状态失败:" + ex.Message + " " + ex.StackTrace); } return(new Result <string> { Message = "更新自动推送状态失败!" }); }
/// <summary> /// 定时推送(客服消息) /// </summary> /// <param name="item"></param> /// <param name="openId"></param> /// <returns></returns> public async Task <Result <string> > AutoRespond(WxAutoPushShow item, string openId) { try { // 自动推送类型 var type = ComHelper.GetEnumValueByStr <Enum_ApMsgType>(item.ContentType); // 发送客服消息预览 var apiRes = new PubApiResult(); switch (type) { case Enum_ApMsgType.Text: item.TextContent = item.TextContent.Replace("{nickname}", string.Empty); apiRes = PubKfApi.SendTextMsg(openId, item.TextContent); break; case Enum_ApMsgType.Image: apiRes = PubKfApi.SendImageMsg(openId, item.MediaId); break; case Enum_ApMsgType.Voice: apiRes = PubKfApi.SendVoiceMsg(openId, item.MediaId); break; case Enum_ApMsgType.News: apiRes = PubKfApi.SendMpNewsMsg(openId, item.MediaId); break; case Enum_ApMsgType.Video: apiRes = PubKfApi.SendVideoMsg(openId, item.MediaId, item.VideoThumbMediaId, item.VideoTitle, item.VideoDescription); break; case Enum_ApMsgType.BackNews: var lstArts = await wxAutoConvertHelper.GetAutoPushBackNews(item); apiRes = PubKfApi.SendNewsMsg(openId, lstArts); break; case Enum_ApMsgType.RedBag: return(await wxAutoConvertHelper.SendAutoPushRedPack(item, openId)); default: break; } logHelper.Debug("PrevKeyword:预览返回结果:" + ComHelper.JsonSerialize(apiRes)); if (!apiRes.IsSuss) { var msg = "预览出错:" + apiRes.errcode + " " + apiRes.errmsg; logHelper.Error("PrevKeyword:" + msg); return(new Result <string> { Message = msg }); } return(new Result <string> { IsSucc = true, Message = "发送预览消息成功!" }); } catch (Exception ex) { logHelper.Error("PrevKeyword:发送预览消息失败:" + ex.Message + " " + ex.StackTrace); } return(new Result <string> { Message = "发送预览消息失败!" }); }