コード例 #1
0
        /// <summary>
        /// 单个新增推送消息
        /// </summary>
        /// <returns></returns>
        public async Task <int> InsertProcessAsync(PushSendProcessDomainModel domainModel)
        {
            if (domainModel == null)
            {
                return(0);
            }
            domainModel.Id = _idGenerator.GenerateId();
            PushSendProcess entity = _mapper.Map <PushSendProcess>(domainModel);

            entity.CreateAt = entity.UpdateAt = DateTimeHelper.GetNow();
            return(await _repository.InsertAsync(entity));
        }
コード例 #2
0
ファイル: SendProcessLogic.cs プロジェクト: corecsharp/push
        /// <summary>
        /// 推送消息之后执行DB操作
        /// </summary>
        /// <param name="senderRet">发送记录</param>
        /// <param name="sendProcessDto">推送消息</param>
        /// <param name="rzTokenBrandDto">注册信息</param>
        /// <param name="rzTokenBrandDetailDto">注册明细</param>
        /// <param name="channelDto">通道</param>
        /// <param name="requestTime">执行时间</param>
        public void SendMsgToDB(SenderRet senderRet, SendProcessDto sendProcessDto, DeviceChannelDto deviceChannelDto, int requestTime)
        {
            if (!senderRet.IsSuccess)
            {
                //发送失败的逻辑
                DateTime sendTime = DateTime.Now.AddSeconds((sendProcessDto.EndTime - DateTimeHelper.GetNow()).TotalSeconds / 2);
                if (sendProcessDto.TokenBrandId.HasValue)
                {
                    int row = _pushSendProcessService.WriteBackProcessByIdAsync(sendProcessDto.Id, sendTime).Result;
                }
                else
                {
                    //重新制造RzTokenBrandId有值的推送信息
                    SendProcessDto newSendProcess = sendProcessDto;
                    newSendProcess.Id           = 0;
                    newSendProcess.TokenBrandId = deviceChannelDto.Id;
                    newSendProcess.SendTime     = sendTime;
                    newSendProcess.IsUsed       = false;
                    newSendProcess.DelayTimes   = newSendProcess.DelayTimes + 1;
                    PushSendProcessDomainModel pushSendProcessDomainModel = _mapper.Map <PushSendProcessDomainModel>(newSendProcess);
                    int row = _pushSendProcessService.InsertProcessAsync(pushSendProcessDomainModel).Result;
                }
            }
            else if (sendProcessDto.TokenBrandId.HasValue)
            {
                //发送成功并且RzTokenBrandId不为空,直接删掉待发送的数据
                int row = _pushSendProcessService.DeleteProcessByIdAsync(sendProcessDto.Id).Result;
            }
            //无论发送成功与否,都要插入历史记录
            ProcessHistoryDto processHistoryDto = _mapper.Map <ProcessHistoryDto>(sendProcessDto);

            processHistoryDto.Id       = 0;
            processHistoryDto.SendTime = DateTimeHelper.GetNow();
            if (senderRet.IsSuccess)
            {
                processHistoryDto.SendStatus = (int)SendStatusEnum.Success;
            }
            else
            {
                processHistoryDto.SendStatus = (int)SendStatusEnum.Failure;
                processHistoryDto.ErrorType  = (int)ErrorTypeEnum.PushPlatform;
            }
            processHistoryDto.ChannelId   = deviceChannelDto.ChannelId;
            processHistoryDto.BrandId     = deviceChannelDto.BrandId;
            processHistoryDto.RequestTime = requestTime;
            processHistoryDto.ReturnSign  = senderRet.Sign;
            processHistoryDto.Remark      = senderRet.Code;
            AddProcessHistoryDomainModel model = _mapper.Map <AddProcessHistoryDomainModel>(processHistoryDto);
            int res = _pushProcessHistoryService.InsertProcessHistoryAsync(model).Result;
        }
コード例 #3
0
ファイル: SendMsgService.cs プロジェクト: corecsharp/push
        /// <summary>
        /// 轮询推送消息
        /// </summary>
        /// <param name="processId"></param>
        /// <param name="ret"></param>
        /// <returns></returns>
        public ErrCode SendMsg(long processId, out string ret)
        {
            ret = "";
            int rows = _pushSendProcessService.UpdateProcessUseStatusByIdAsync(processId, DateTimeHelper.GetNow().AddMinutes(2)).Result;

            if (rows == 0)
            {
                ret = "已被其他机器处理";
                return(ErrCode.PermissionDenied);
            }

            PushSendProcessDomainModel pushSendProcessDomainModel = _pushSendProcessService.GetProcessByIdAsync(processId).Result;
            SendProcessDto             process = _mapper.Map <SendProcessDto>(pushSendProcessDomainModel);
            var classify = ClassifyProcess(process);

            try {
                bool flag = false;
                switch (classify)
                {
                case 1:
                    flag = _timeOutHandler.Handle(process, out ret);
                    break;

                case 2:
                    flag = _retryTimesOverHandler.Handle(process, out ret);
                    break;

                case 3:
                    flag = _sendHandler.Handle(process, out ret);
                    break;

                default:
                    ret = "该分类处理没有实现";
                    break;
                }
                if (!flag)
                {
                    return(ErrCode.Failure);
                }
            }
            catch (Exception ex)
            {
                //LogHelper.Error.Write("SendProcess", ex);
                ret = ex.StackTrace + "\r\n" + ex.Message;
                return(ErrCode.Failure);
            }

            return(ErrCode.Sucess);
        }