/// <summary> /// 医生端接受消息模板 /// </summary> /// <param name="wecharSendMessage"></param> /// <returns></returns> public SendTemplate DoctorWecharTemplate(WecharSendMessage wecharSendMessage, string EvaluateLevel, string WarningTime) { SendTemplate sendTemplate = new SendTemplate(); sendTemplate.ToUser = wecharSendMessage.ToUser; sendTemplate.TemplateId = wecharSendMessage.TemplateId; sendTemplate.BackUrl = Commons.WecharWeb + "?link=order-detail&consultNumber=" + wecharSendMessage.ConsultNumber; sendTemplate.FirstMessage = wecharSendMessage.FirstMessage; YaeherConsultation yaeherConsultation = JsonHelper.FromJson <YaeherConsultation>(wecharSendMessage.ConsultJson); switch (wecharSendMessage.OperationType) { case "AddConsultation": // 咨询者发起咨询 sendTemplate.Keyword1 = wecharSendMessage.ConsultantName; sendTemplate.Keyword2 = yaeherConsultation.CreatedOn.ToString("yyyy-MM-dd HH:mm"); sendTemplate.Keyword3 = "用户提交了一个关于" + yaeherConsultation.IIInessType + "问题的咨询"; sendTemplate.MessageRemark = "请您及时回复"; sendTemplate.MessageType = "Notice"; //发送短信 break; case "Inquiry": // 咨询者追问 sendTemplate.Keyword1 = wecharSendMessage.ConsultantName; sendTemplate.Keyword2 = yaeherConsultation.CreatedOn.ToString("yyyy-MM-dd HH:mm"); sendTemplate.Keyword3 = "用户提交了一个关于" + yaeherConsultation.IIInessType + "问题的追问"; sendTemplate.MessageRemark = "请您及时回复"; sendTemplate.MessageType = "Question"; //发送短信 break; case "Evaluation": //咨询评分 sendTemplate.BackUrl = Commons.WecharWeb + "evaluate-detail?typeEvaluate=3&consultNumber=" + wecharSendMessage.ConsultNumber + "&rShow=no"; sendTemplate.Keyword1 = wecharSendMessage.ConsultantName; sendTemplate.Keyword2 = "评价:" + EvaluateLevel; sendTemplate.MessageRemark = "点击消息可查看评价详情"; break; case "WarningRemind": // 咨询预警 sendTemplate.FirstMessage = "您有一个咨询超过" + WarningTime + "未处理"; sendTemplate.Keyword1 = wecharSendMessage.ConsultantName + "用户提交了一个关于" + yaeherConsultation.IIInessType + "问题的咨询"; sendTemplate.Keyword2 = yaeherConsultation.CreatedOn.ToString("yyyy-MM-dd HH:mm"); sendTemplate.MessageRemark = "请您及时回复"; break; case "PatientReturn": //咨询退单 sendTemplate.Keyword1 = wecharSendMessage.ConsultantName; sendTemplate.Keyword2 = "用户主动退单"; sendTemplate.Keyword3 = yaeherConsultation.RefundTime.ToString("yyyy-MM-dd HH:mm"); sendTemplate.MessageRemark = "温馨提示:及时回复可避免用户主动退单"; break; case "QualityReturn": //质控退单 sendTemplate.Keyword1 = wecharSendMessage.ConsultantName; sendTemplate.Keyword2 = "质控审核退单"; sendTemplate.Keyword3 = yaeherConsultation.RefundTime.ToString("yyyy-MM-dd HH:mm"); sendTemplate.MessageRemark = "温馨提示:严格遵守怡禾操作规范有助于减少质控退单"; break; } return(sendTemplate); }
/// <summary> /// 咨询者接受消息模板 /// </summary> /// <param name="sendTemplate"></param> /// <returns></returns> public SendTemplate ConsultantWecharTemplate(WecharSendMessage wecharSendMessage, string Inquiry) { SendTemplate sendTemplate = new SendTemplate(); sendTemplate.ToUser = wecharSendMessage.ToUser; sendTemplate.TemplateId = wecharSendMessage.TemplateId; sendTemplate.BackUrl = Commons.WecharWeb + "?link=record-detail&consultNumber=" + wecharSendMessage.ConsultNumber; sendTemplate.FirstMessage = wecharSendMessage.FirstMessage; YaeherConsultation yaeherConsultation = JsonHelper.FromJson <YaeherConsultation>(wecharSendMessage.ConsultJson); #region 2019-1-8 修改 switch (wecharSendMessage.OperationType) { case "ReplayConsultant": // 回复订单 sendTemplate.Keyword1 = "您提交的关于" + yaeherConsultation.IIInessType + "的咨询"; sendTemplate.Keyword2 = "请点击查看回复详情"; sendTemplate.Keyword3 = wecharSendMessage.DoctorName; break; case "RemindInquiry": // 追问提醒 sendTemplate.FirstMessage = "您的追问期限还剩" + Inquiry + ",请尽快追问"; sendTemplate.Keyword1 = "您提交的关于" + yaeherConsultation.IIInessType + "的咨询"; sendTemplate.Keyword2 = "追问过期时间为:" + yaeherConsultation.Completetime.ToString("yyyy-MM-dd HH:mm"); sendTemplate.Keyword3 = wecharSendMessage.DoctorName; sendTemplate.MessageRemark = "请点击详情对医生进行追问"; break; case "RemindEvaluation": // 评价提醒 sendTemplate.Keyword1 = yaeherConsultation.PatientName; sendTemplate.Keyword2 = yaeherConsultation.DoctorName; sendTemplate.MessageRemark = "请点击详情对医生进行评价"; break; case "Systemreturn": // 系统退单 sendTemplate.Keyword1 = wecharSendMessage.DoctorName; sendTemplate.Keyword2 = "医生未能及时回复"; sendTemplate.Keyword3 = DateTime.Now.ToString("yyyy-MM-dd HH:mm"); sendTemplate.MessageRemark = "您可以继续选择其他医生咨询"; break; case "DoctorReturn": // 医生退单 sendTemplate.Keyword1 = wecharSendMessage.DoctorName; sendTemplate.Keyword2 = "医生主动退单"; sendTemplate.Keyword3 = DateTime.Now.ToString("yyyy-MM-dd HH:mm"); sendTemplate.MessageRemark = "退单原因请查看详情"; break; } #endregion return(sendTemplate); }
public async Task <WecharSendMessage> UpdateWecharSendMessage(WecharSendMessage WecharSendMessageInfo) { return(await _repository.UpdateAsync(WecharSendMessageInfo)); }
public async Task <WecharSendMessage> CreateWecharSendMessage(SendMessageInfo sendMessageInfo) { var YaeherConsultationInfo = await _YaeherConsultationrepository.FirstOrDefaultAsync(a => a.ConsultNumber == sendMessageInfo.ConsultNumber); // 咨询人 var ConsultantUserInfo = await _YaeherUserrepository.FirstOrDefaultAsync(a => a.Id == YaeherConsultationInfo.ConsultantID); var DoctorInfo = await _YaeherDoctorrepository.FirstOrDefaultAsync(a => a.Id == YaeherConsultationInfo.DoctorID); // 医生 var DoctorUserInfo = await _YaeherUserrepository.FirstOrDefaultAsync(a => a.Id == DoctorInfo.UserID); // 查询微信模板ID WecharSendMessage wecharSendMessage = new WecharSendMessage(); // 查询当前模板ID var YaeherMessageInfo = await _YaeherMessageTemplaterepository.FirstOrDefaultAsync(a => a.TemplateCode == sendMessageInfo.TemplateCode); wecharSendMessage.TemplateId = YaeherMessageInfo.TemplateId; // 是否自动发送 bool SendState = bool.Parse(_SystemParameterrepository.GetAll().Where(a => a.SystemCode == "WecharSendState").FirstOrDefault().Code); // 查询消息模板内容 var SendMessageList = _SendMessagerepository.GetAll().Where(a => a.TemplateCode == sendMessageInfo.TemplateCode && a.OperationType == sendMessageInfo.OperationType); try { if (SendMessageList.Count() > 0) { SendWechaMessage sendWechaMessage = new SendWechaMessage(); SendMsmHelper sendMsmHelper = new SendMsmHelper(); List <WecharSendMessage> WecharSendMessageList = new List <WecharSendMessage>(); using (var unitOfWork = _unitOfWorkManager.Begin()) { var IsDoctor = false; string MessageType = string.Empty; foreach (var SendMessageInfo in SendMessageList) { WecharSendMessage wecharMessage = new WecharSendMessage(); wecharMessage.ConsultNumber = sendMessageInfo.ConsultNumber; wecharMessage.TemplateCode = sendMessageInfo.TemplateCode; wecharMessage.OperationType = sendMessageInfo.OperationType; wecharMessage.ConsultantName = YaeherConsultationInfo.PatientName; // 修改为患者用户名 wecharMessage.DoctorName = YaeherConsultationInfo.DoctorName; wecharMessage.ConsultJson = JsonHelper.ToJson(YaeherConsultationInfo); wecharMessage.BackUrl = SendMessageInfo.BackUrl; wecharMessage.FirstMessage = SendMessageInfo.FirstMessage; // 查询标语 wecharMessage.Keyword1 = SendMessageInfo.Keyword1; // 称呼人 wecharMessage.Keyword2 = SendMessageInfo.Keyword2; // 时间 wecharMessage.Keyword3 = SendMessageInfo.Keyword3; // 内容 wecharMessage.MessageRemark = SendMessageInfo.MessageRemark; // 备注 wecharMessage.TemplateId = YaeherMessageInfo.TemplateId; // 将对应信息转为发送模板 SendTemplate WecharTemplate = new SendTemplate(); switch (SendMessageInfo.Recipient) { case "Patient": // 接受人为咨询者 wecharMessage.ToUser = ConsultantUserInfo.WecharOpenID; WecharTemplate = sendWechaMessage.ConsultantWecharTemplate(wecharMessage, sendMessageInfo.Inquiry); // 赋值咨询者信息 break; case "Doctor": // 接受人为医生 wecharMessage.ToUser = DoctorUserInfo.WecharOpenID; IsDoctor = true; WecharTemplate = sendWechaMessage.DoctorWecharTemplate(wecharMessage, sendMessageInfo.EvaluateLevel, sendMessageInfo.WarningTime); // 赋值医生信息 MessageType = WecharTemplate.MessageType; break; } // 将对应信息转为发送实际内容 wecharMessage.WecharData = sendWechaMessage.WecharContent(WecharTemplate); #region // 执行微信消息发送 TemplateModel templateModel = new TemplateModel(); if (SendState) // 是否实时发送 { var TokenInfo = _systemTokenService.SystemTokenList("Wechar").Result; templateModel = sendWechaMessage.SendWecharMessage(wecharMessage.WecharData, TokenInfo.access_token).Result; } if (templateModel.errcode == "error" || !SendState) { #region 增加重试机制 HangFireJob WecharhangFireJob = new HangFireJob(); WecharhangFireJob.JobName = "微信定时服务"; WecharhangFireJob.JobCode = "WechaMessageSend"; WecharhangFireJob.BusinessID = Commons.GetCurrentTimeStepNumber(); //int.Parse(new RandomCode().GenerateCheckCodeNum(5)); WecharhangFireJob.BusinessCode = sendMessageInfo.ConsultNumber; Random rd = new Random(); int Seconds = rd.Next(1, 5); WecharhangFireJob.JobRunTime = DateTime.Now.AddSeconds(Seconds); // 随机时间 WecharhangFireJob.JobSates = "Open"; WecharhangFireJob.CallbackUrl = Commons.AdminIp + "api/SendWechar/"; WecharhangFireJob.JobParameter = wecharMessage.WecharData; // 将需要发送的内容整理好 HangfireScheduleJob job = new HangfireScheduleJob(); JobModel model = new JobModel(); model.CallbackUrl = WecharhangFireJob.CallbackUrl; //回调URL model.queues = "adminqueue"; model.CallbackContent = JsonHelper.ToJson(WecharhangFireJob); //回调参数 model.Timespan = WecharhangFireJob.JobRunTime; //运行时间 var returnjobid = job.Schedule(model); if (returnjobid.IndexOf("error") < 0) { WecharhangFireJob.JobRunID = returnjobid; } WecharhangFireJob = await _HangFireJobrepository.InsertAsync(WecharhangFireJob); templateModel.msgid = WecharhangFireJob.BusinessID.ToString(); templateModel.errmsg = "Undo"; #endregion if (templateModel.errcode == "error") { #region 将错误日志存起来 YaeherOperList yaeherOperList = new YaeherOperList(); yaeherOperList.CreatedOn = DateTime.Now; yaeherOperList.OperExplain = JsonHelper.ToJson(sendMessageInfo); yaeherOperList.OperContent = "error:" + templateModel.errmsg; yaeherOperList.OperType = "发送消息异常测试备用:" + sendMessageInfo.OperationType; await _YaeherOperListrepository.InsertAsync(yaeherOperList); #endregion } } wecharMessage.MsgID = templateModel.msgid; wecharMessage.Status = templateModel.errmsg; wecharMessage.MsgType = wecharMessage.MsgType; WecharSendMessageList.Add(wecharMessage); #endregion } #region 发送短信 if (IsDoctor) { YaeherSendMsm yaeherSendMsm = new YaeherSendMsm(); yaeherSendMsm.PhoneNumbers = DoctorUserInfo.PhoneNumber == null? DoctorInfo.PhoneNumber : DoctorUserInfo.PhoneNumber; // 医生电话 yaeherSendMsm.MessageType = MessageType; // 短信类型 yaeherSendMsm.TemplateParam = "{\"remark\":\"" + sendMessageInfo.ConsultNumber + "\"}"; // 提示短信内容 // 发送短信 并存储记录 if (yaeherSendMsm.PhoneNumbers != null && yaeherSendMsm.MessageType != null) { var SendMessage = sendMsmHelper.SendMsm(yaeherSendMsm); // 发送短信 YaeherMessageRemind MessageRemind = new YaeherMessageRemind(); MessageRemind.UserID = 0; MessageRemind.UserName = "******"; MessageRemind.PhoneNumber = yaeherSendMsm.PhoneNumbers; MessageRemind.MessageType = yaeherSendMsm.MessageType; MessageRemind.Message = SendMessage.ToString(); //将发送短信消息存起来 MessageRemind.VerificationCode = ""; MessageRemind.Message = yaeherSendMsm.TemplateParam; MessageRemind.CreatedBy = 0; MessageRemind.CreatedOn = DateTime.Now; MessageRemind.EffectiveLength = 0; MessageRemind.EffectiveTime = DateTime.Now; await _MessageRemindrepository.InsertAsync(MessageRemind); } } #endregion #region 将发微信的消息记录 if (WecharSendMessageList.Count > 0) { foreach (var wecharMessage in WecharSendMessageList) { await _repository.InsertAsync(wecharMessage); } } #endregion #region 增加有效用户访问记录 暂时关掉获取有效访问量 //YaeherOperList yaeherOperList = new YaeherOperList(); //yaeherOperList.CreatedOn = DateTime.Now; //yaeherOperList.OperExplain = "ConsultNumber:"+ sendMessageInfo.ConsultNumber; //yaeherOperList.OperContent = JsonHelper.ToJson(ConsultantUserInfo); //yaeherOperList.OperType = "发送消息成功"; //await _YaeherOperListrepository.InsertAsync(yaeherOperList); #endregion unitOfWork.Complete(); } } } catch (Exception ex) { #region 增加有效用户访问记录 YaeherOperList yaeherOperList = new YaeherOperList(); yaeherOperList.CreatedOn = DateTime.Now; yaeherOperList.OperExplain = JsonHelper.ToJson(sendMessageInfo); yaeherOperList.OperContent = "error:" + ex.ToString(); yaeherOperList.OperType = "发送消息异常:" + sendMessageInfo.OperationType; await _YaeherOperListrepository.InsertAsync(yaeherOperList); #endregion } return(wecharSendMessage); }