Esempio n. 1
0
 /// <summary>
 /// 处理数据传给DB
 /// 将消息一拆为n个消息
 /// </summary>
 /// <param name="model"></param>
 private void HandleMsgToDB(object model)
 {
     //var _logger = _loggerFactory.CreateLogger<MsgService>();
     using (var scope = SherlockEngine.Current.CreateScope())
     {
         try
         {
             string         serialNO       = Guid.NewGuid().ToString();//同一条消息进行拆解
             SendMsgRequest sendMsgRequest = (SendMsgRequest)model;
             //将推送消息推送消息中心
             PushMessageToMessageCenter(sendMsgRequest);
             //拆分数据
             //获取设备和通道
             IPushTokenBrandService          pushTokenBrandService        = scope.ServiceProvider.GetService(typeof(IPushTokenBrandService)) as IPushTokenBrandService;
             List <DeviceChannelDomainModel> deviceChannelDomainModelList = pushTokenBrandService.GetDeviceChannelListAsync(sendMsgRequest.Token, sendMsgRequest.AppId).Result;
             List <DeviceChannelDto>         deviceChannelList            = _mapper.Map <List <DeviceChannelDto> >(deviceChannelDomainModelList);
             //未获取到,接收的消息直接进历史表,标记为账号登出
             if (deviceChannelList == null || deviceChannelList.Count == 0)
             {
                 //直接入历史表,标记错误
                 SendProcessDto sendProcessDto = SendMsgToSendProcess(sendMsgRequest, serialNO);
                 sendProcessDto.Token = sendMsgRequest.Token;
                 ISendProcessLogic sendProcessLogic = scope.ServiceProvider.GetService(typeof(ISendProcessLogic)) as ISendProcessLogic;
                 sendProcessLogic.RecordErrorProcess(sendProcessDto, ErrorTypeEnum.Logout, string.Empty);
                 return;
             }
             //获取到,根据设备Token拆分数据
             List <SendProcessDto> sendProcessDtoList = new List <SendProcessDto>();
             foreach (var item in deviceChannelList)
             {
                 SendProcessDto sendProcessDto = SendMsgToSendProcess(sendMsgRequest, serialNO);
                 sendProcessDto.Token = sendMsgRequest.Token;
                 //将获取到的TokenBrandId(核心),BrandId,ChannelId,DeviceToken 赋给对象,可做到新老接口兼容
                 //老接口发送数据时,可根据TokenBrandId直接找到需要发送的ChannelId和DeviceToken
                 //新接口发送数据时,通过ChannelId,DeviceToken 发送数据
                 sendProcessDto.TokenBrandId = item.Id;
                 sendProcessDto.BrandId      = item.BrandId;
                 sendProcessDto.ChannelId    = item.ChannelId;
                 sendProcessDto.DeviceToken  = item.DeviceToken;
                 sendProcessDtoList.Add(sendProcessDto);
             }
             IMapper mapper = scope.ServiceProvider.GetService(typeof(IMapper)) as IMapper;
             List <PushSendProcessDomainModel> domainList             = mapper.Map <List <PushSendProcessDomainModel> >(sendProcessDtoList);
             IPushSendProcessService           pushSendProcessService = scope.ServiceProvider.GetService(typeof(IPushSendProcessService)) as IPushSendProcessService;
             int rows = pushSendProcessService.InsertProcessListAsync(domainList).Result;
         }
         catch (Exception ex)
         {
             //_logger.LogError(ex.Message.ToString());
             //LogHelper.Error.Write("HandleMsgToDB", ex);
         }
         finally
         {
             _semaphore.Release();
             //LogHelper.Info.Write("HandleMsgToDB", "信号量释放之前使用的数量:" + count);
         }
     }
 }
Esempio n. 2
0
        public bool Handle(SendProcessDto process, out string retMsg)
        {
            retMsg = string.Empty;
            //判断RzTokenBrandId是否为空
            if (process.TokenBrandId.HasValue)
            {
                DeviceChannelDomainModel deviceChannelDomainModel = _pushTokenBrandService.GetDeviceChannelListByTokenBrandIdAsync(process.TokenBrandId.Value).Result;
                DeviceChannelDto         deviceChannelDto         = _mapper.Map <DeviceChannelDto>(deviceChannelDomainModel);
                if (deviceChannelDomainModel != null)
                {
                    //如果存在RzTokenBrandId
                    _sendProcessLogic.SendNewProcess(process, deviceChannelDto, out retMsg);
                    return(true);
                }
                //如果不存在RzTokenBrandId,执行下面操作
            }

            List <DeviceChannelDomainModel> deviceChannelList = _pushTokenBrandService.GetDeviceChannelListAsync(process.Token, process.AppId).Result;

            if (deviceChannelList == null || deviceChannelList.Count == 0)
            {
                _sendProcessLogic.RecordErrorProcess(process, ErrorTypeEnum.Logout, retMsg);
            }
            else
            {
                foreach (var item in deviceChannelList)
                {
                    DeviceChannelDto deviceChannelDto = _mapper.Map <DeviceChannelDto>(item);
                    _sendProcessLogic.SendNewProcess(process, deviceChannelDto, out retMsg);
                }
            }
            //发送成功删除数据
            var i = _pushSendProcessService.DeleteProcessByIdAsync(process.Id).Result;

            return(true);
        }