1、创建锁
RLock lock = redissonClient.getLock("LOCK_UPDATE_STATUS_PATH:"+matchId);
2、判断锁是否在使用
if (!lock.tryLock()) {
log.info("未获取到修改状态的锁:" + matchId);
return;
}
3、使用并释放锁
try {
//更改平台状态
List<RetrievalPlan> dbExist = retrievalPlanMapper.jobPlans(matchId);
int updateCount = 0;
switch (planActionEnum){
case CONFRIM:
updateCount = dayProcessMapper.settlementConfirm(matchId,userName);
Assert.isTrue(dbExist.size() == updateCount, "状态发生变化,请刷新后重新操作");
break;
case CONFIRM_REJECT:
{
//删除剩余代收
retrievalPlanMapper.deleteTodoList(matchId);
sscFlowMapper.deleteVirtualSsc(matchId);
dayProcessMapper.settlementReject(matchId,userName);
break;
}
case REVIEW_CONFIRM:
updateCount = dayProcessMapper.reviewConfirm(matchId,userName);
Assert.isTrue(dbExist.size() == updateCount, "状态发生变化,请刷新后重新操作");
break;
case REVIEW_REJECT:
updateCount = dayProcessMapper.reviewReject(matchId,userName);
Assert.isTrue(dbExist.size() == updateCount, "状态发生变化,请刷新后重新操作");
break;
}
if (planActionEnum == PlanActionEnum.REVIEW_REJECT || planActionEnum == PlanActionEnum.CONFIRM_REJECT) {
sscFlowMapper.clearMatchStatus(matchId);
}
} finally {
if(lock.isLocked()){
lock.unlock();
}
}