uj5u.com熱心網友回復:
沒做空值判斷,有屬性為null了。uj5u.com熱心網友回復:
public void receive(UserAudioProgress audioProgress) {
log.debug("收到音頻行程訊息:" + audioProgress);
// 1.統計更新播放量
String playKey = CommonConstants.CacheKey.REDIS_COUNT_AUDIO_PLAY + audioProgress.getBizId() + ":"
+ audioProgress.getCreateUserId();
/*
* 如果今日該用戶沒有播放過這個音頻,那么存放這個播放key,并設定失效時間為今天23:59:59,并回傳null,更新播放量 如果有值說明已經統計過 存放的value必須為string型別,否則會出錯
*/
String playVal = redisService.getAndSet(playKey, "1", DateUtil.endOfDay(new Date()));
if (StrUtil.isBlank(playVal)) {
// 播放量+1
audioInfoService.updatePlayNum(audioProgress.getBizId());
}
// 2.保存學習進度
// 查詢是否已存在該用戶對該音頻的觀看進度
QueryWrapper<UserAudioProgress> qw = new QueryWrapper<>();
qw.eq("BIZ_ID", audioProgress.getBizId());
qw.eq("CREATE_USER_ID", audioProgress.getCreateUserId());
UserAudioProgress oldEntity = userAudioProgressService.getOne(qw);
boolean notNull = ObjectUtil.isNotNull(oldEntity);
boolean hasNewProgress = true; // 存在新的進度
if (notNull) {
/*
* 若該進度已存在,判斷進度大小,進度大于已保存的資料才繼續插入音頻進度,防止之前因服務 器掛掉或其他網路原因而未被消費掉的資訊污染資料,同時也可以保證資料冪等性
*/
oldEntity.setPreEndTime(audioProgress.getPreEndTime());
oldEntity.setModifyUserId(audioProgress.getCreateUserId());
oldEntity.setModifyDate(new Date());
hasNewProgress = audioProgress.getTotalTime() > oldEntity.getTotalTime();
if (hasNewProgress) {
oldEntity.setTotalTime(audioProgress.getTotalTime());
oldEntity.setProgress(audioProgress.getProgress());
}
if (oldEntity.getProgress().doubleValue()>=CommonConstants.STANDARD_PROGRESS){
oldEntity.setIsFinish(SysParamsEnum.STATUS_YES.getCode());
}
userAudioProgressService.update(oldEntity,
new QueryWrapper<UserAudioProgress>().eq("UUID", oldEntity.getUuid()));
} else {
if (audioProgress.getProgress().doubleValue()>=CommonConstants.STANDARD_PROGRESS){
audioProgress.setIsFinish(SysParamsEnum.STATUS_YES.getCode());
}
// 若無進度則是第一次觀看,保存進度
userAudioProgressService.save(audioProgress);
}
// 3.記錄用戶歷史記錄
AudioInfo audioInfo = userHistory(notNull ? oldEntity : audioProgress);
// 4.記錄用戶學分
// 有新進度要更新學分
if (hasNewProgress) {
saveCredit(audioProgress, audioInfo);
}
}大佬可以幫我看下哪里沒有做空值判斷嗎
uj5u.com熱心網友回復:
在你這段代碼里,哪個部分是有給MQ送信和收信的處理的(也就是先定位到送信收信的處理位置)?感覺像是你的方法被框架用反射的方式呼叫,在送收信處理時,你這邊沒能正常的收到message,所以框架自動轉換為你的message型別(類似于restfulTemplate轉換response)就拋出空指標例外了
你可以用try catch來跟蹤排查一下,看看是哪段處理出問題了
uj5u.com熱心網友回復:
要看上層接收訊息事件的代碼,估計那個地方錯,導致這個方法呼叫不成功。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/251038.html
標籤:Java EE
