/// <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)); }
/// <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; }
/// <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); }