| | |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 同一份问卷的保存锁:按「任务+患者+子任务」加锁, |
| | | * 前端重复点击 / 并发请求进来时串行执行,避免同一份问卷被写两遍。 |
| | | * 注意:只是串行化,不阻止再次保存——问卷仍然允许修改后再保存(走更新逻辑)。 |
| | | */ |
| | | private static final java.util.concurrent.ConcurrentHashMap<String, Object> SAVE_LOCKS = |
| | | new java.util.concurrent.ConcurrentHashMap<>(); |
| | | |
| | | @Override |
| | | public Integer saveQuestionDetail(ServiceSubTaskCacheReq serviceSubTaskCacheReq, Long flag) { |
| | | String lockKey = serviceSubTaskCacheReq.getParam1() + "_" |
| | | + serviceSubTaskCacheReq.getParam2() + "_" |
| | | + serviceSubTaskCacheReq.getParam6(); |
| | | Object lock = SAVE_LOCKS.computeIfAbsent(lockKey, k -> new Object()); |
| | | if (SAVE_LOCKS.size() > 20000) { |
| | | SAVE_LOCKS.clear(); |
| | | } |
| | | synchronized (lock) { |
| | | return doSaveQuestionDetail(serviceSubTaskCacheReq, flag); |
| | | } |
| | | } |
| | | |
| | | private Integer doSaveQuestionDetail(ServiceSubTaskCacheReq serviceSubTaskCacheReq, Long flag) { |
| | | Long tid = Long.valueOf(serviceSubTaskCacheReq.getParam1()); |
| | | Long pid = Long.valueOf(serviceSubTaskCacheReq.getParam2()); |
| | | Long subid = Long.valueOf(serviceSubTaskCacheReq.getParam6()); |