using System; using System.Collections.Generic; using System.Linq; using System.Text; using Edu.Common.Enum; using Edu.Model.Entity.System; using Edu.Model.ViewModel.System; using Edu.Repository.System; using VT.FW.DB; using Aliyun.Net.SDK.Core; namespace Edu.Module.System { public class MsgLogModule { /// <summary> /// 短信记录仓储层对象 /// </summary> private readonly RB_Msg_LogRepository msgLogRepository = new RB_Msg_LogRepository(); /// <summary> /// 短信配置仓储层对象 /// </summary> private readonly RB_Msg_BaseRepository msgBaseRepository = new RB_Msg_BaseRepository(); /// <summary> /// 短信模板配置仓储层对象 /// </summary> private readonly RB_Msg_BaseTemplateRepository msgBaseTemplateRepository = new RB_Msg_BaseTemplateRepository(); /// <summary> /// 系统消息记录仓储层对象 /// </summary> private readonly RB_System_LogRepository systemLogRepository = new RB_System_LogRepository(); #region 短信记录 /// <summary> /// 获取发送短信记录信息 /// </summary> /// <param name="query">查询条件</param> /// <returns></returns> public List<RB_Msg_Log_ViewModel> GetPageListRepository(int pageIndex, int pageSize, out long rowsCount, Model.ViewModel.System.RB_Msg_Log_ViewModel query) { return msgLogRepository.GetPageListRepository(pageIndex, pageSize, out rowsCount, query); } #endregion #region 短信配置 /// <summary> /// 获取短信配置列表 /// </summary> /// <param name="query"></param> /// <returns></returns> public List<RB_Msg_Base_Function_ViewModel> GetMsgBaseListModule(RB_Msg_Base_Function_ViewModel query) { return msgBaseRepository.GetListRepository(query); } /// <summary> /// 获取短信配置列表 /// </summary> /// <param name="pageIndex"></param> /// <param name="pageSize"></param> /// <param name="rowsCount"></param> /// <param name="query"></param> /// <returns></returns> public List<RB_Msg_Base_Function_ViewModel> GetMsgBasePageListModule(int pageIndex, int pageSize, out long rowsCount, RB_Msg_Base_Function_ViewModel query) { return msgBaseRepository.GetPageListRepository(pageIndex, pageSize, out rowsCount, query); } /// <summary> /// 新增修改 短信配置 /// </summary> /// <param name="model"></param> /// <returns></returns> public bool SetMsgBaseModule(RB_Msg_Base model) { if (model.ID > 0) { Dictionary<string, object> fileds = new Dictionary<string, object>() { { nameof(RB_Msg_Base.CreateDate),model.CreateDate}, { nameof(RB_Msg_Base.CreateBy),model.CreateBy}, { nameof(RB_Msg_Base.StoreType),model.StoreType}, { nameof(RB_Msg_Base.MsgConfigure),model.MsgConfigure} }; return msgBaseRepository.Update(fileds, new WhereHelper(nameof(RB_Msg_Base.ID), model.ID)); } else { var newId = msgBaseRepository.Insert(model); return newId > 0; } } /// <summary> /// 根据短信配置编号获取短信配置详细信息 /// </summary> /// <param name="ClassId"></param> /// <returns></returns> public RB_Msg_Base_Function_ViewModel GetMsgBaseModule(object ClassId) { return msgBaseRepository.GetEntity<RB_Msg_Base_Function_ViewModel>(ClassId); } /// <summary> /// 删除短信配置 /// </summary> /// <param name="ClassId"></param> /// <returns></returns> public bool RemoveMsgBaseModule(object ID) { Dictionary<string, object> fileds = new Dictionary<string, object>() { { nameof(RB_Msg_Base.Status),(int)DateStateEnum.Delete}, }; return msgBaseRepository.Update(fileds, new WhereHelper(nameof(RB_Msg_Base.ID), ID)); } #endregion #region 短信模板配置 /// <summary> /// 获取短信模板配置列表 /// </summary> /// <param name="query"></param> /// <returns></returns> public List<RB_Msg_BaseTemplate_ViewModel> GetMsgBaseTemplateListModule(RB_Msg_BaseTemplate_ViewModel query) { return msgBaseTemplateRepository.GetListRepository(query); } /// <summary> /// 获取短信模板配置分页列表 /// </summary> /// <param name="pageIndex"></param> /// <param name="pageSize"></param> /// <param name="rowsCount"></param> /// <param name="query"></param> /// <returns></returns> public List<RB_Msg_BaseTemplate_ViewModel> GetMsgBaseTemplatePageListModule(int pageIndex, int pageSize, out long rowsCount, RB_Msg_BaseTemplate_ViewModel query) { return msgBaseTemplateRepository.GetPageListRepository(pageIndex, pageSize, out rowsCount, query); } /// <summary> /// 新增修改 短信模板配置 /// </summary> /// <param name="model"></param> /// <returns></returns> public bool SetMsgBaseTemplateModule(RB_Msg_BaseTemplate_ViewModel model) { if (model.ID > 0) { Dictionary<string, object> fileds = new Dictionary<string, object>() { { nameof(RB_Msg_BaseTemplate_ViewModel.CreateDate),model.CreateDate}, { nameof(RB_Msg_BaseTemplate_ViewModel.CreateBy),model.CreateBy}, { nameof(RB_Msg_BaseTemplate_ViewModel.TemplateStaus),model.TemplateStaus}, { nameof(RB_Msg_BaseTemplate_ViewModel.TemplateId),model.TemplateId}, { nameof(RB_Msg_BaseTemplate_ViewModel.StoreType),model.StoreType}, { nameof(RB_Msg_BaseTemplate_ViewModel.Sign),model.Sign}, { nameof(RB_Msg_BaseTemplate_ViewModel.BaseTemplateType),model.BaseTemplateType} }; return msgBaseTemplateRepository.Update(fileds, new WhereHelper(nameof(RB_Msg_BaseTemplate_ViewModel.ID), model.ID)); } else { var newId = msgBaseTemplateRepository.Insert(model); return newId > 0; } } /// <summary> /// 根据短信模板配置编号获取短信配置详细信息 /// </summary> /// <param name="ClassId"></param> /// <returns></returns> public RB_Msg_BaseTemplate_ViewModel GetMsgBaseTemplateModule(object ClassId) { return msgBaseTemplateRepository.GetEntity<RB_Msg_BaseTemplate_ViewModel>(ClassId); } /// <summary> /// 删除短信模板配置 /// </summary> /// <param name="ClassId"></param> /// <returns></returns> public bool RemoveMsgBaseTemplateModule(object ID) { Dictionary<string, object> fileds = new Dictionary<string, object>() { { nameof(RB_Msg_BaseTemplate_ViewModel.TemplateStaus),(int)DateStateEnum.Delete}, }; return msgBaseTemplateRepository.Update(fileds, new WhereHelper(nameof(RB_Msg_BaseTemplate_ViewModel.ID), ID)); } #endregion #region 发送短信统一方法 public void SendMsg(object PhoneMessage, Common.Enum.System.BaseTemplateTypeEnum BaseTemplateType, RB_Msg_Log msgLogModel) { //查询当前集团的短信基础配置 var msgBaseList = msgBaseRepository.GetListRepository(new RB_Msg_Base_Function_ViewModel { Group_Id = msgLogModel.Group_Id }); //查询当前下面是否有模板 var allMsgBaseTemplateList = msgBaseTemplateRepository.GetListRepository(new RB_Msg_BaseTemplate_ViewModel { BaseTemplateType = BaseTemplateType, Group_Id = msgLogModel.Group_Id }).Where(x => x.TemplateStaus == 0); if (msgBaseList != null && msgBaseList.Any() && allMsgBaseTemplateList != null && allMsgBaseTemplateList.Any()) { RB_Msg_Base_Function_ViewModel model = new RB_Msg_Base_Function_ViewModel(); // msgBaseList.OrderBy(x => x.ID).FirstOrDefault(); if (allMsgBaseTemplateList.Where(x => x.BaseTemplateType == BaseTemplateType).GroupBy(x => x.StoreType).Count() > 1) { model = msgBaseList.OrderBy(x => x.ID).FirstOrDefault(); } else { model = msgBaseList.Where(x => x.StoreType == allMsgBaseTemplateList.FirstOrDefault().StoreType).FirstOrDefault(); } if (model != null && model.ID > 0) { if (!string.IsNullOrWhiteSpace(model.MsgConfigure)) { msgLogModel.StoreType = model.StoreType; msgLogModel.MsgConfigure = model.MsgConfigure; int id = msgLogRepository.Insert(msgLogModel); model.MsgBase = Common.Plugin.JsonHelper.DeserializeObject<RB_Msg_Base_ViewModel>(model.MsgConfigure); var msgBaseTemplateList = allMsgBaseTemplateList.Where(x => x.BaseTemplateType == BaseTemplateType); if (!string.IsNullOrWhiteSpace(model.MsgBase.AccessKeyId) && !string.IsNullOrWhiteSpace(model.MsgBase.AccessSecret) && !string.IsNullOrWhiteSpace(model.MsgBase.Domain) && !string.IsNullOrWhiteSpace(model.MsgBase.RegionId)) { if (msgBaseTemplateList != null && msgBaseTemplateList.Any(x => x.TemplateStaus == 0)) { var msgBaseTemplateModel = msgBaseTemplateList.Where(x => x.TemplateStaus == 0).FirstOrDefault(); if (Common.Config.IsSendMsg == 1) { ThirdCore.Message.SMSService.SendMsg(msgLogModel.ReceiverPhone, PhoneMessage, msgBaseTemplateModel.TemplateId, msgBaseTemplateModel.Sign, model.MsgBase.Domain, model.MsgBase.AccessKeyId, model.MsgBase.AccessSecret, model.MsgBase.RegionId, id.ToString()); } } } } } } // ThirdCore.Message.SMSService.SendMsg("13551132417", PhoneMessage, "SMS_201722097", "印象之旅", "dysmsapi.aliyuncs.com", "LTAIwE7l9dImZSa3", "j47Ajn0d0WzUCIX8Biyj3P2r8QDltI", "cn-hangzhou"); } /// <summary> /// 更新消息发送状态 /// </summary> public void UpdateMsgSendStatus() { var list = msgLogRepository.GetListRepository(new RB_Msg_Log { SendStatus = Common.Enum.System.MsgSendStatusEnum.InReceipt }); foreach (var item in list.GroupBy(x => new { x.ReceiverPhone, x.StoreType, x.MsgConfigure, CreateDate = x.CreateDate.ToString("yyyyMMdd") })) { if (item.Key.StoreType == Common.Enum.Public.StoreTypeEnum.Alicloud) { try { RB_Msg_Base_ViewModel msgBase = new RB_Msg_Base_ViewModel(); if (!string.IsNullOrWhiteSpace(item.Key.MsgConfigure)) { msgBase = Common.Plugin.JsonHelper.DeserializeObject<RB_Msg_Base_ViewModel>(item.Key.MsgConfigure); } Aliyun.Acs.Dysmsapi.Model.V20170525.QuerySendDetailsResponse querySendDetailsResponse = Edu.ThirdCore.Message.MessageCore.QuerySendDetails(item.Key.ReceiverPhone, DateTime.Now.ToString("yyyyMMdd"), "", msgBase.Domain, msgBase.AccessKeyId, msgBase.AccessSecret, msgBase.RegionId); if (querySendDetailsResponse.Code == "OK") { if (querySendDetailsResponse.SmsSendDetailDTOs != null && querySendDetailsResponse.SmsSendDetailDTOs.Any()) { foreach (var modelSmsSendDetailDTO in querySendDetailsResponse.SmsSendDetailDTOs) { int sendStatus = 1; if (modelSmsSendDetailDTO != null && !string.IsNullOrWhiteSpace(modelSmsSendDetailDTO.OutId)) { sendStatus = (int)(modelSmsSendDetailDTO.SendStatus ?? 1); } if (sendStatus > 1) { Dictionary<string, object> fileds = new Dictionary<string, object>() { { nameof(RB_Msg_Log.SendStatus),sendStatus} }; msgLogRepository.Update(fileds, new WhereHelper(nameof(RB_Msg_Log.ID), Convert.ToInt32(modelSmsSendDetailDTO.OutId))); } } } } } catch (Exception ex) { Common.Plugin.LogHelper.Write(ex, "UpdateMsgSendStatus"); } } } } public bool SendCode(string code, Common.Enum.System.BaseTemplateTypeEnum BaseTemplateType, RB_Msg_Log msgLogModel) { bool flag = false; //查询当前集团的短信基础配置 var msgBaseList = msgBaseRepository.GetListRepository(new RB_Msg_Base_Function_ViewModel { Group_Id = msgLogModel.Group_Id }); //查询当前下面是否有模板 var allMsgBaseTemplateList = msgBaseTemplateRepository.GetListRepository(new RB_Msg_BaseTemplate_ViewModel { BaseTemplateType = BaseTemplateType, Group_Id = msgLogModel.Group_Id }).Where(x => x.TemplateStaus == 0); if (msgBaseList != null && msgBaseList.Any() && allMsgBaseTemplateList != null && allMsgBaseTemplateList.Any()) { RB_Msg_Base_Function_ViewModel model = new RB_Msg_Base_Function_ViewModel(); // msgBaseList.OrderBy(x => x.ID).FirstOrDefault(); if (allMsgBaseTemplateList.Where(x => x.BaseTemplateType == BaseTemplateType).GroupBy(x => x.StoreType).Count() > 1) { model = msgBaseList.OrderBy(x => x.ID).FirstOrDefault(); } else { model = msgBaseList.Where(x => x.StoreType == allMsgBaseTemplateList.FirstOrDefault().StoreType).FirstOrDefault(); } if (model != null && model.ID > 0) { if (!string.IsNullOrWhiteSpace(model.MsgConfigure)) { msgLogModel.StoreType = model.StoreType; msgLogModel.MsgConfigure = model.MsgConfigure; int id = msgLogRepository.Insert(msgLogModel); model.MsgBase = Common.Plugin.JsonHelper.DeserializeObject<RB_Msg_Base_ViewModel>(model.MsgConfigure); var msgBaseTemplateList = allMsgBaseTemplateList.Where(x => x.BaseTemplateType == BaseTemplateType); if (!string.IsNullOrWhiteSpace(model.MsgBase.AccessKeyId) && !string.IsNullOrWhiteSpace(model.MsgBase.AccessSecret) && !string.IsNullOrWhiteSpace(model.MsgBase.Domain) && !string.IsNullOrWhiteSpace(model.MsgBase.RegionId)) { if (msgBaseTemplateList != null && msgBaseTemplateList.Any(x => x.TemplateStaus == 0)) { var msgBaseTemplateModel = msgBaseTemplateList.Where(x => x.TemplateStaus == 0).FirstOrDefault(); if (Common.Config.IsSendMsg == 1) { ThirdCore.Message.SMSService.SendCode(msgLogModel.ReceiverPhone, code, msgBaseTemplateModel.TemplateId, msgBaseTemplateModel.Sign, model.MsgBase.Domain, model.MsgBase.AccessKeyId, model.MsgBase.AccessSecret, model.MsgBase.RegionId, id.ToString()); flag = true; } } } } } } return flag; } #endregion #region 系统消息 /// <summary> /// 获取发送系统消息记录信息 /// </summary> /// <param name="query">查询条件</param> /// <returns></returns> public List<RB_System_Log_ViewModel> GetSystemLogListRepository(RB_System_Log_ViewModel query) { return systemLogRepository.GetListRepository(query); } /// <summary> /// 获取发送系统消息记录信息 /// </summary> /// <param name="query">查询条件</param> /// <returns></returns> public List<RB_System_Log_ViewModel> GetSystemLogPageListRepository(int pageIndex, int pageSize, out long rowsCount, RB_System_Log_ViewModel query) { return systemLogRepository.GetPageListRepository(pageIndex, pageSize, out rowsCount, query); } #endregion } }