public void PublishFoodSendToWeChat(string shopId, string msg, int type) { List <string> userList = null; WeChatSendMsgContext weChatSendMsgContext = new WeChatSendMsgContext(); if (type == 0) { //查询门店需要发送时间 userList = Service.GetIQueryable <F_UserInfo>().Where(a => a.ShopInfoId == shopId) .Select(a => a.WeCharUserId).ToList(); if (userList.Count == 0) { return; } var token = WeChatOperation.GetToken(EnumWeChatAppType.Food); //查询当前门店今天的订单用户发送 var joinUser = string.Join("|", userList); weChatSendMsgContext.title = "点餐提醒"; weChatSendMsgContext.btntxt = "点餐"; weChatSendMsgContext.url = "/ClientFood/Order"; weChatSendMsgContext.description = "<div class=\"gray\">" + DateTime.Now.ToString("yyyy-MM-dd") + "</div> <div class=\"normal\">" + msg + "</div>"; if (WeChatOperation.SendMsg(token, joinUser, EnumWeChatAppType.Food, weChatSendMsgContext)) { loger.LogInformation("发送成功!"); } else { loger.LogInformation("发送失败!"); } } else if (type == 1) { //查询点过餐品的成员信息 var q = from a in Service.GetIQueryable <F_Order>() join b in Service.GetIQueryable <F_OrderInfo>() on a.OrderCode equals b.OrderCode join c in Service.GetIQueryable <F_PublishFood>() on b.PublishFoodId equals c.Id join d in Service.GetIQueryable <F_UserInfo>() on a.UserInfoId equals d.Id where c.ShopInfoId == shopId && a.CreateTime >= DateTime.Now.Date && a.CreateTime < DateTime.Now.Date.AddDays(1) && a.Status != 4 select d.WeCharUserId; userList = q.ToList(); if (userList.Count == 0) { return; } var token = WeChatOperation.GetToken(EnumWeChatAppType.Food); var joinUser = string.Join("|", userList); weChatSendMsgContext.title = "取餐提醒"; weChatSendMsgContext.btntxt = "取餐详情"; weChatSendMsgContext.url = "/ClientFood/ScanCode?day=" + DateTime.Now.ToString("yyyy-MM-dd"); weChatSendMsgContext.description = "<div class=\"gray\">" + DateTime.Now.ToString("yyyy-MM-dd") + "</div> <div class=\"normal\">" + msg + "</div>"; if (WeChatOperation.SendMsg(token, joinUser, EnumWeChatAppType.Food, weChatSendMsgContext)) { loger.LogInformation("发送成功!"); } else { loger.LogInformation("发送失败!"); } } else if (type == 2) { //查询部门 var q = from a in Service.GetIQueryable <F_Order>() join b in Service.GetIQueryable <F_OrderInfo>() on a.OrderCode equals b.OrderCode join c in Service.GetIQueryable <F_PublishFood>() on b.PublishFoodId equals c.Id join d in Service.GetIQueryable <F_UserInfo>() on a.UserInfoId equals d.Id join e in Service.GetIQueryable <Base_DepartmentRelation>() on d.FullDepartment equals e.Department into de from e in de.DefaultIfEmpty() where c.ShopInfoId == shopId && a.CreateTime >= DateTime.Now.Date && a.CreateTime < DateTime.Now.Date.AddDays(1) && a.Status != 4 select new { d.WeCharUserId, e.OldDepartment, d.FullDepartment, d.UserName, c.FoodName, a.TakeFoodName, a.TakeFoodCode }; var queryList = q.ToList(); if (queryList.Count == 0) { return; } var token = WeChatOperation.GetToken(EnumWeChatAppType.Food); //根据部门发送 queryList.GroupBy(a => a.OldDepartment ?? a.FullDepartment).ForEach(a => { //随机抽取一个,哈哈哈 var randMan = a.FirstOrDefault()?.TakeFoodName; weChatSendMsgContext.title = "取餐提醒"; weChatSendMsgContext.btntxt = "取餐详情"; weChatSendMsgContext.url = "/ClientFood/ScanCode?day=" + DateTime.Now.ToString("yyyy-MM-dd"); //var foodList = a.Select(c => c.UserName + "-" + c.FoodName).ToList(); //var foodName = string.Join(",", foodList); var foodList = a.GroupBy(c => c.FoodName).Select(c => c.Key + "*" + c.Count()); var foodName = string.Join(",", foodList); weChatSendMsgContext.description = "<div class=\"gray\">" + DateTime.Now.ToString("yyyy-MM-dd") + "</div>" + "<div>您已被随机抽取为本部门领餐:</div>" + "<div class=\"normal\">部门名称:" + a.Key + "</div>" + "<div class=\"normal\">取餐码: A" + a.FirstOrDefault()?.TakeFoodCode + " </div>" + "<div class=\"highlight\">共 " + a.ToList().Count + " 份</div>" + "<div>菜品名称:" + foodName + "</div>"; if (WeChatOperation.SendMsg(token, a.FirstOrDefault(b => b.UserName == randMan)?.WeCharUserId, EnumWeChatAppType.Food, weChatSendMsgContext)) { loger.LogInformation("发送成功!"); } else { loger.LogInformation("发送失败!"); } //发送部门其他人员 var joinList = a.Where(c => c.UserName != randMan).Select(c => c.WeCharUserId).ToList(); if (joinList.Count > 0) { var joinUser = string.Join("|", joinList); weChatSendMsgContext.url = "/ClientFood/ScanCode?day=" + DateTime.Now.ToString("yyyy-MM-dd"); weChatSendMsgContext.description = "<div class=\"gray\">" + DateTime.Now.ToString("yyyy-MM-dd") + "</div> <div class=\"normal\">已随机抽取您部门的 " + randMan + " 取餐</div>"; if (WeChatOperation.SendMsg(token, joinUser, EnumWeChatAppType.Food, weChatSendMsgContext)) { loger.LogInformation("发送成功!"); } else { loger.LogInformation("发送失败!"); } } }); } }
/// <summary> /// 发送企业微信消息 /// </summary> /// <param name="token">token</param> /// <param name="userList">指定接收消息的成员,成员ID列表(多个接收者用‘|’分隔,最多支持1000个)。特殊情况:指定为”@all”,则向该企业应用的全部成员发送</param> /// <param name="agentid">企业应用的id,整型。企业内部开发,可在应用的设置页面查看</param> /// <param name="msgContent">消息内容,最长不超过2048个字节,超过将截断(支持id转译)</param> /// <returns></returns> public static bool SendMsg(string token, string userList, EnumWeChatAppType app, WeChatSendMsgContext weChatSendMsgContext) { try { WeChatSendMsg weChatSendMsg = new WeChatSendMsg(); weChatSendMsgContext.url = autoInfoList.FirstOrDefault(a => a.AppId == (int)app)?.Url + weChatSendMsgContext.url; Dictionary <string, object> dic = new Dictionary <string, object> { { "touser", userList }, { "msgtype", "textcard" }, { "agentid", autoInfoList.FirstOrDefault(a => a.AppId == (int)app)?.AgentId }, { "textcard", weChatSendMsgContext } }; string url = SendMssage + "?access_token=" + token; string resultJson = HttpHelper.PostData(url, dic, contentType: ContentType.Json); WeChatSendMsgResult weChatSendMsgResult = resultJson.ToObject <WeChatSendMsgResult>(); if (weChatSendMsgResult.errcode != "0") { LogHelper.WriteLog_LocalTxt(resultJson); logger?.LogWarning(resultJson); return(false); } return(true); } catch (Exception e) { LogHelper.WriteLog_LocalTxt(e.Message); return(false); } }