|
|
@@ -1,6 +1,8 @@
|
|
|
package com.nb.im.listener;
|
|
|
|
|
|
+import cn.hutool.core.collection.CollectionUtil;
|
|
|
import cn.hutool.json.JSONUtil;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
|
|
import com.nb.im.entity.ImRoomEntity;
|
|
|
import com.nb.im.enums.ImStatusEnum;
|
|
|
@@ -13,12 +15,15 @@ import org.springframework.context.annotation.Configuration;
|
|
|
import org.springframework.context.event.EventListener;
|
|
|
import org.springframework.scheduling.annotation.Async;
|
|
|
import org.springframework.transaction.annotation.Isolation;
|
|
|
+import org.springframework.transaction.annotation.Propagation;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import java.time.LocalDateTime;
|
|
|
import java.time.ZoneId;
|
|
|
import java.time.temporal.ChronoUnit;
|
|
|
import java.util.Date;
|
|
|
+import java.util.List;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
* @author lifang
|
|
|
@@ -51,6 +56,7 @@ public class MonitorStatusListener {
|
|
|
|
|
|
@EventListener
|
|
|
@Async
|
|
|
+ @Transactional(propagation= Propagation.SUPPORTS)
|
|
|
public void monitorReset(ClinicRestartEvent event){
|
|
|
synchronized (event.getPatientId()){
|
|
|
log.info("临床重启事件监听,{}", JSONUtil.toJsonStr(event));
|
|
|
@@ -58,15 +64,23 @@ public class MonitorStatusListener {
|
|
|
//两小时前的时间
|
|
|
LocalDateTime dateTime = LocalDateTime.now().plus(-2, ChronoUnit.HOURS);
|
|
|
Date date = Date.from(dateTime.atZone(ZoneId.systemDefault()).toInstant());
|
|
|
- //临床结束未满两小时的进行处理
|
|
|
- roomService.update(new UpdateWrapper<ImRoomEntity>()
|
|
|
- .lambda()
|
|
|
- .eq(ImRoomEntity::getPatientId,patientId)
|
|
|
- .in(ImRoomEntity::getStatus, ImStatusEnum.WAITING,ImStatusEnum.SUCCESS)
|
|
|
- .eq(ImRoomEntity::getMonitorFinished,true)
|
|
|
- .gt(ImRoomEntity::getMonitorFinishedTime,date)
|
|
|
- .set(ImRoomEntity::getMonitorFinished,false)
|
|
|
- );
|
|
|
+ List<ImRoomEntity> rooms = roomService.list(new LambdaQueryWrapper<ImRoomEntity>()
|
|
|
+ .eq(ImRoomEntity::getPatientId, patientId)
|
|
|
+ .in(ImRoomEntity::getStatus, ImStatusEnum.WAITING, ImStatusEnum.SUCCESS)
|
|
|
+ .eq(ImRoomEntity::getMonitorFinished, true)
|
|
|
+ .gt(ImRoomEntity::getMonitorFinishedTime, date));
|
|
|
+ if(CollectionUtil.isNotEmpty(rooms)){
|
|
|
+ //临床结束未满两小时的进行处理
|
|
|
+ roomService.updateBatchById( rooms
|
|
|
+ .stream()
|
|
|
+ .map(room->{
|
|
|
+ ImRoomEntity roomEntity = new ImRoomEntity();
|
|
|
+ roomEntity.setId(room.getId());
|
|
|
+ roomEntity.setMonitorFinished(false);
|
|
|
+ return roomEntity;
|
|
|
+ })
|
|
|
+ .collect(Collectors.toList()));
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|