/// <summary> /// 通过appId和channelId更新批次号 /// </summary> /// <param name="domainModel"></param> /// <returns></returns> public async Task <int> UpdateBatchNOByAppIdAndChannelIdAsync(BatchProcessParmsDomainModel domainModel) { var sql = "UPDATE push_send_process SET batch_no=@BatchNO,batch_expire_time=@ExpireTime " + "WHERE push_send_process.id IN ( " + "SELECT id FROM ( " + "SELECT id, (CASE delay_times WHEN 0 THEN 100 ELSE delay_times END) DT " + "FROM push_send_process " + "WHERE start_time<=@TimeNow AND (batch_no IS NULL OR batch_expire_time<=@TimeNow) AND app_id=@AppId AND channel_id=@ChannelId " + "ORDER BY DT DESC,priority_level,start_time " + "LIMIT @TopNum ) T ) " + "AND brand_id IS NOT NULL AND channel_id IS NOT NULL AND device_token IS NOT NULL "; return(await Context.GetConnection().ExecuteAsync(sql, domainModel)); }
/// <summary> /// 从Process表取出待发送的BatchNO /// </summary> /// <param name="retMsg"></param> /// <returns></returns> public string GetProcessBatchNO(out string retMsg) { retMsg = ""; try { var timeNow = DateTimeHelper.GetNow(); PushSendProcessAppChannelDomainModel pushSendProcessAppChannelDomainModel = _pushSendProcessService.GetAppIdAndChannelIdAsync(timeNow).Result; //AppChannelDto appChannelDto = _mapper.Map<AppChannelDto>(pushSendProcessAppChannelDomainModel); //获取第一条推送消息的AppId和ChannelId,如果没有,返回批次号为空 if (pushSendProcessAppChannelDomainModel == null) { return(string.Empty); } Guid batchNO = Guid.NewGuid(); var expireTime = timeNow.AddMinutes(3); //获取通道 ChannelDto channelDto; if (!_channelLogic.CheckChannel(pushSendProcessAppChannelDomainModel.ChannelId, out channelDto, out retMsg)) { return(string.Empty); } int topNum = channelDto.PushNum.HasValue ? channelDto.PushNum.Value : 200;//可以从配置中获取数据,默认给200 BatchProcessParmsDomainModel batchProcessParmsDomainModel = new BatchProcessParmsDomainModel { TopNum = topNum, AppId = pushSendProcessAppChannelDomainModel.AppId, ChannelId = pushSendProcessAppChannelDomainModel.ChannelId, BatchNo = batchNO, TimeNow = timeNow, ExpireTime = expireTime }; var updateNum = _pushSendProcessService.UpdateBatchNOByAppIdAndChannelIdAsync(batchProcessParmsDomainModel).Result; if (updateNum == 0) { return(string.Empty); } return(batchNO.ToString()); } catch (Exception ex) { retMsg = ex.StackTrace + "\r\n" + ex.Message; return(null); } }
public async Task <int> UpdateBatchNOByAppIdAndChannelIdAsync(BatchProcessParmsDomainModel domainModel) { return(await _pushSendProcessRepository.UpdateBatchNOByAppIdAndChannelIdAsync(domainModel)); }