void SendMessage(Guid msgId, Guid appId, Guid userId, DateTime?endTime, ShareRedMessageDTO content) { //给邀请人发送系统消息 //调用消息中心发消息 //定义消息内容 MobileMessageDTO messageDTO = new MobileMessageDTO(); messageDTO.MessageType = JAP.BaseApp.MessageCenter.Deploy.Enum.MessageType.BUSI_MSG; messageDTO.AppId = appId.ToString().ToLower(); messageDTO.BasicContentDTO = new BasicContentDTO(); messageDTO.BasicContentDTO.Code = "AdDividend";//"BTPShareRedEnvelope"; messageDTO.ProductType = JAP.BaseApp.MessageCenter.Deploy.Enum.ProductType.BTP; messageDTO.ProductSecondType = 3;//新红包 DataContractJsonSerializer json = new DataContractJsonSerializer(content.GetType()); string szJson = ""; //序列化 using (MemoryStream stream = new MemoryStream()) { json.WriteObject(stream, content); szJson = Encoding.UTF8.GetString(stream.ToArray()); } messageDTO.BasicContentDTO.Content = szJson.Replace("\"", "\\\""); //messageDTO.Content = szJson.Replace("\"", "\\\""); ; if (endTime != null) { messageDTO.EndTime = (DateTime)endTime; } //接收人邀请人Id string strRelation = "["; strRelation += "\"" + userId.ToString() + "\","; strRelation = strRelation.Substring(0, strRelation.Length - 1); strRelation += "]"; messageDTO.UserIds = strRelation; try { Jinher.AMP.BTP.TPS.MessageCenter.Instance.AddMessage(messageDTO); JAP.Common.Loging.LogHelper.Info("红包消息内容:" + userId.ToString() + ":" + ":" + messageDTO.AppId.ToString() + ":" + messageDTO.BasicContentDTO.Content); } catch (Exception ex) { JAP.Common.Loging.LogHelper.Error("Error_LogKey:RedEnvelopesProcessor.SendMessage:BaseApp.MessageCenter.ISV.Facade.PublishMobileMessageFacade.AddMessage", ex); } }
/// <summary> /// 发送众筹红包 /// </summary> public void SendCfRedEnvelopeExt() { int pageIndex = 0; int pageSize = 500; DateTime today = DateTime.Now.Date; ContextSession session = ContextFactory.CurrentThreadContext; bool isContinue = true; do { var userDividents = (from s in CfDividend.ObjectSet() where s.SettlementDate < today && s.State == 0 group s by s.UserId into g select g ).OrderBy(a => a.Key).Take(pageSize).Skip(pageIndex) .ToDictionary(x => x.Key, y => y.ToList()); foreach (Guid userId in userDividents.Keys) { StringBuilder strDescription = new StringBuilder(50); foreach (CfDividend userDivident in userDividents[userId]) { userDivident.State = 1; userDivident.EntityState = System.Data.EntityState.Modified; strDescription.Append(userDivident.AppName); strDescription.Append(" 持股"); strDescription.Append(userDivident.ShareCount); strDescription.Append("股 获得分红"); strDescription.Append(userDivident.Gold); strDescription.Append("个金币").Append(","); } strDescription.Remove(strDescription.Length - 1, 1); var goldNum = userDividents[userId].Sum(x => x.Gold); UserRedEnvelope redEnvelope = UserRedEnvelope.CreateUserRedEnvelope(); redEnvelope.EntityState = System.Data.EntityState.Added; redEnvelope.AppId = userDividents[userId][0].AppId; redEnvelope.Content = CustomConfig.SaleShare.DividentContent; redEnvelope.Description = strDescription.ToString(); double dueDateAdd = CustomConfig.CrowdfundingConfig.DividentDue; redEnvelope.DueDate = DateTime.Now.AddHours(dueDateAdd); redEnvelope.GoldCount = goldNum; redEnvelope.UserId = userId; redEnvelope.RedEnvelopeType = 1; session.SaveObject(redEnvelope); ShareRedMessageDTO contentCDTO = new ShareRedMessageDTO(); contentCDTO.message = redEnvelope.Content; contentCDTO.userName = redEnvelope.Content; contentCDTO.msgId = redEnvelope.Id; contentCDTO.url = string.Format("{0}ShareRedEnvelope/ShareRedEnvelopesDetail?msgId={1}", CustomConfig.BtpDomain, redEnvelope.Id); double dueMessDateAdd = CustomConfig.CrowdfundingConfig.DividentMessageDue; SendMessage(redEnvelope.Id, redEnvelope.AppId, redEnvelope.UserId, DateTime.Now.AddHours(dueMessDateAdd), contentCDTO); } try { session.SaveChanges(); if (userDividents.Count < pageSize) { isContinue = false; } LogHelper.Info(string.Format("发送众筹红包Job处理了CfDividend表{0}条记录", userDividents.Count)); } catch (Exception ex) { LogHelper.Error("发送众筹红包Job服务异常。", ex); isContinue = false; } }while (isContinue); }
/// <summary> /// 发送红包 /// </summary> public void SendRedEnvelopeExt() { int pageIndex = 0; int pageSize = 500; DateTime today = DateTime.Now.Date; ContextSession session = ContextFactory.CurrentThreadContext; bool isContinue = true; do { var userDividents = (from s in ShareDividendDetail.ObjectSet() where s.SettlementDate < today && s.State == 0 group s by s.UserId into g select g ).OrderBy(a => a.Key).Take(pageSize).Skip(pageIndex) .ToDictionary(x => x.Key, y => y.ToList()); foreach (Guid userId in userDividents.Keys) { StringBuilder strDescription = new StringBuilder(50); foreach (ShareDividendDetail userDivident in userDividents[userId]) { userDivident.State = 1; userDivident.EntityState = System.Data.EntityState.Modified; strDescription.Append(userDivident.Description).Append(","); } strDescription.Remove(strDescription.Length - 1, 1); var goldNum = userDividents[userId].Sum(x => x.Money); UserRedEnvelope redEnvelope = UserRedEnvelope.CreateUserRedEnvelope(); redEnvelope.EntityState = System.Data.EntityState.Added; redEnvelope.AppId = userDividents[userId][0].AppId; redEnvelope.Content = CustomConfig.SaleShare.DividentContent; redEnvelope.Description = strDescription.ToString(); double dueDateAdd = 24; double.TryParse(CustomConfig.SaleShare.DividentDue, out dueDateAdd); redEnvelope.DueDate = DateTime.Now.AddHours(dueDateAdd); redEnvelope.GoldCount = goldNum; redEnvelope.UserId = userId; redEnvelope.RoleType = userDividents[userId][0].RoleType; ShareRedMessageDTO contentCDTO = new ShareRedMessageDTO(); contentCDTO.message = redEnvelope.Content; contentCDTO.userName = redEnvelope.Content; contentCDTO.msgId = redEnvelope.Id; contentCDTO.url = string.Format("{0}ShareRedEnvelope/ShareRedEnvelopesDetail?msgId={1}", CustomConfig.BtpDomain, redEnvelope.Id); double dueMessDateAdd = 48; double.TryParse(CustomConfig.SaleShare.DividentMessageDue, out dueMessDateAdd); if (userDividents[userId][0].RoleType == 2) { try { List <Guid> userIds = Jinher.AMP.BTP.TPS.EBCSV.Instance.GetUserIdsByOrgIdAndCode(userId, "ReceiveRed"); int msgCount = 0; foreach (Guid id in userIds) { SendMessage(redEnvelope.Id, redEnvelope.AppId, id, DateTime.Now.AddHours(dueMessDateAdd), contentCDTO); //最多选择20个代领者 msgCount += 1; if (msgCount > 20) { break; } } } catch (Exception ex) { LogHelper.Error("发送红包Job服务异常:EBC.ISV.Facade.OrganizationQueryFacade。", ex); continue; } } else { SendMessage(redEnvelope.Id, redEnvelope.AppId, redEnvelope.UserId, DateTime.Now.AddHours(dueMessDateAdd), contentCDTO); } session.SaveObject(redEnvelope); } try { session.SaveChanges(); if (userDividents.Count < pageSize) { isContinue = false; } LogHelper.Info(string.Format("发送红包Job处理了ShareDividendDetail表{0}条记录", userDividents.Count)); } catch (Exception ex) { LogHelper.Error("发送红包Job服务异常。", ex); isContinue = false; } }while (isContinue); }