Browse Source

feat:暂停工艺 恢复工艺

master
白凤吉 1 week ago
parent
commit
9b93e3d9c2
  1. 6
      src/main/java/com/iflytop/colortitration/app/controller/CraftsController.java
  2. 52
      src/main/java/com/iflytop/colortitration/common/service/CraftsService.java

6
src/main/java/com/iflytop/colortitration/app/controller/CraftsController.java

@ -1,5 +1,6 @@
package com.iflytop.colortitration.app.controller;
import com.iflytop.colortitration.app.core.crafts.CraftsDispatcher;
import com.iflytop.colortitration.app.model.dto.SetCraftsDTO;
import com.iflytop.colortitration.common.model.entity.Crafts;
import com.iflytop.colortitration.common.result.Result;
@ -23,6 +24,7 @@ import java.util.Arrays;
@Validated
public class CraftsController {
private final CraftsService craftsService;
private final CraftsDispatcher craftsDispatcher;
@Operation(summary = "添加新工艺")
@PostMapping("")
@ -68,14 +70,14 @@ public class CraftsController {
@Operation(summary = "暂停执行工艺")
@PostMapping("/pause")
public Result<?> pauseCrafts() {
craftsService.pause();
craftsDispatcher.pause();
return Result.success();
}
@Operation(summary = "恢复执行工艺")
@PostMapping("/resume")
public Result<?> resumeCrafts() {
craftsService.resume();
craftsDispatcher.resume();
return Result.success();
}

52
src/main/java/com/iflytop/colortitration/common/service/CraftsService.java

@ -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();
}
}
}
Loading…
Cancel
Save