|
|
@ -10,14 +10,10 @@ import com.iflytop.colortitration.app.core.state.TubeState; |
|
|
|
import com.iflytop.colortitration.app.model.dto.SetCraftsDTO; |
|
|
|
import com.iflytop.colortitration.common.mapper.CraftsMapper; |
|
|
|
import com.iflytop.colortitration.common.model.entity.Crafts; |
|
|
|
import lombok.Getter; |
|
|
|
import lombok.RequiredArgsConstructor; |
|
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
|
|
|
|
import java.util.concurrent.locks.Condition; |
|
|
|
import java.util.concurrent.locks.ReentrantLock; |
|
|
|
|
|
|
|
/** |
|
|
|
* 工艺接口服务 |
|
|
|
*/ |
|
|
@ -27,10 +23,6 @@ import java.util.concurrent.locks.ReentrantLock; |
|
|
|
public class CraftsService extends ServiceImpl<CraftsMapper, Crafts> { |
|
|
|
private final CraftsDispatcher craftsDispatcher; |
|
|
|
private final DeviceState deviceState; |
|
|
|
private final ReentrantLock lock = new ReentrantLock(true); |
|
|
|
private final Condition condition = lock.newCondition(); |
|
|
|
@Getter |
|
|
|
private volatile boolean paused = false; |
|
|
|
|
|
|
|
public Crafts findByName(String name) { |
|
|
|
return this.getOne(new LambdaQueryWrapper<>(new Crafts()).eq(Crafts::getName, name)); |
|
|
@ -57,48 +49,4 @@ public class CraftsService extends ServiceImpl<CraftsMapper, Crafts> { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 暂停所有自动滴定任务 |
|
|
|
*/ |
|
|
|
public void pause() { |
|
|
|
lock.lock(); |
|
|
|
try { |
|
|
|
paused = true; |
|
|
|
log.info("Titration paused"); |
|
|
|
} finally { |
|
|
|
lock.unlock(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 恢复所有自动滴定任务 |
|
|
|
*/ |
|
|
|
public void resume() { |
|
|
|
lock.lock(); |
|
|
|
try { |
|
|
|
paused = false; |
|
|
|
condition.signalAll(); |
|
|
|
log.info("Titration resumed"); |
|
|
|
} finally { |
|
|
|
lock.unlock(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 在各处理步骤前调用,以挂起当前线程直到恢复 |
|
|
|
* |
|
|
|
* @throws InterruptedException 如果线程被中断 |
|
|
|
*/ |
|
|
|
public void pauseIfNeeded() throws InterruptedException { |
|
|
|
lock.lock(); |
|
|
|
try { |
|
|
|
while (paused) { |
|
|
|
log.debug("Titration is paused, waiting..."); |
|
|
|
condition.await(); |
|
|
|
} |
|
|
|
} finally { |
|
|
|
lock.unlock(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
} |