20 changed files with 215 additions and 125 deletions
-
2src/main/java/com/iflytop/colortitration/app/command/control/pipeline/PipelineCleanStartCommand.java
-
2src/main/java/com/iflytop/colortitration/app/command/control/pipeline/PipelineCleanStopCommand.java
-
2src/main/java/com/iflytop/colortitration/app/command/control/pipeline/PipelineDrainStartCommand.java
-
2src/main/java/com/iflytop/colortitration/app/command/control/pipeline/PipelineDrainStopCommand.java
-
2src/main/java/com/iflytop/colortitration/app/command/control/pipeline/PipelinePreFillStartCommand.java
-
2src/main/java/com/iflytop/colortitration/app/command/control/pipeline/PipelinePreFillStopCommand.java
-
2src/main/java/com/iflytop/colortitration/app/command/control/solution/SolutionAddCommand.java
-
2src/main/java/com/iflytop/colortitration/app/command/control/solution/SolutionStopCommand.java
-
5src/main/java/com/iflytop/colortitration/app/common/enums/AddSolutionType.java
-
5src/main/java/com/iflytop/colortitration/app/common/enums/TubeCurrentLocal.java
-
14src/main/java/com/iflytop/colortitration/app/controller/CraftsController.java
-
29src/main/java/com/iflytop/colortitration/app/core/crafts/CraftsContext.java
-
87src/main/java/com/iflytop/colortitration/app/core/crafts/CraftsDispatcher.java
-
100src/main/java/com/iflytop/colortitration/app/core/crafts/CraftsExecutionService.java
-
10src/main/java/com/iflytop/colortitration/app/core/crafts/CraftsStep.java
-
6src/main/java/com/iflytop/colortitration/app/model/dto/CommandDTO.java
-
18src/main/java/com/iflytop/colortitration/app/service/module/TitrationModuleService.java
-
2src/main/java/com/iflytop/colortitration/common/model/entity/Container.java
-
4src/main/java/com/iflytop/colortitration/common/service/CraftsService.java
@ -0,0 +1,5 @@ |
|||
package com.iflytop.colortitration.app.common.enums; |
|||
|
|||
public enum AddSolutionType { |
|||
fixed,segmented,titration |
|||
} |
@ -0,0 +1,5 @@ |
|||
package com.iflytop.colortitration.app.common.enums; |
|||
|
|||
public enum TubeCurrentLocal { |
|||
TRAY, TITRATION, HEAT |
|||
} |
@ -0,0 +1,100 @@ |
|||
package com.iflytop.colortitration.app.core.crafts; |
|||
|
|||
import cn.hutool.json.JSONObject; |
|||
import cn.hutool.json.JSONUtil; |
|||
import com.iflytop.colortitration.app.common.enums.AddSolutionType; |
|||
import com.iflytop.colortitration.app.common.utils.CommandUtil; |
|||
import com.iflytop.colortitration.app.core.command.CommandFuture; |
|||
import com.iflytop.colortitration.app.service.DeviceCommandService; |
|||
import com.iflytop.colortitration.app.service.module.TitrationModuleService; |
|||
import lombok.RequiredArgsConstructor; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.springframework.stereotype.Service; |
|||
|
|||
import java.util.List; |
|||
|
|||
/** |
|||
* 工艺步骤执行服务 |
|||
*/ |
|||
@Slf4j |
|||
@Service |
|||
@RequiredArgsConstructor |
|||
public class CraftsExecutionService { |
|||
private final DeviceCommandService deviceCommandService; |
|||
private final TitrationModuleService titrationModuleService; |
|||
|
|||
/** |
|||
* 执行工艺步骤,直接从 CraftsContext 中获取步骤 |
|||
*/ |
|||
public boolean executeStep(CraftsContext craftsContext) throws Exception { |
|||
craftsContext.setCurrentCommandCount(0); |
|||
List<CraftsStep> craftsStepList = JSONUtil.parseArray(craftsContext.getCrafts().getSteps()).toList(CraftsStep.class); |
|||
for (CraftsStep craftsStep : craftsStepList) { |
|||
String method = craftsStep.getMethod(); |
|||
JSONObject params = craftsStep.getParams(); |
|||
return switch (method) { |
|||
case "addSolution" -> addSolution(craftsContext, params); |
|||
case "heat" -> heat(craftsContext, params); |
|||
case "addMagnet" -> addMagnet(craftsContext, params); |
|||
case "waiting" -> waiting(craftsContext, params); |
|||
default -> true; |
|||
}; |
|||
} |
|||
return true; |
|||
} |
|||
|
|||
private boolean addSolution(CraftsContext craftsContext, JSONObject params) throws Exception { |
|||
moveToTitration();//移动至滴定 |
|||
//TODO 调用相机判断滴定位是否存在试管 |
|||
Long solutionId = params.getLong("solutionId");//使用的溶液id |
|||
Double amount = params.getDouble("amount");//加液量 |
|||
Long colorId = params.getLong("colorId");//终点颜色 |
|||
String type = params.getStr("type");//加液方式 |
|||
AddSolutionType addSolutionType = AddSolutionType.valueOf(type); |
|||
Integer waitTime = params.getInt("waitTime");//加液后等待时长 |
|||
Double maxAmount = params.getDouble("maxAmount");//滴定最大体积 |
|||
Boolean stirFlag = params.getBool("stirFlag");//是否搅拌 |
|||
if(AddSolutionType.fixed.equals(addSolutionType)){//定量加液 |
|||
titrationModuleService.addSolutionStart(craftsContext.getCurrentTitrationModuleCode(), solutionId, amount); |
|||
}else if(AddSolutionType.segmented.equals(addSolutionType)){//分段加液 |
|||
|
|||
}else if(AddSolutionType.titration.equals(addSolutionType)){//滴定加液 |
|||
|
|||
} |
|||
return true; |
|||
} |
|||
|
|||
private boolean heat(CraftsContext craftsContext, JSONObject params) { |
|||
moveToHeat();//移动至加热 |
|||
//TODO 调用传感器判断加热位是否存在试管 |
|||
|
|||
return true; |
|||
} |
|||
|
|||
private boolean addMagnet(CraftsContext craftsContext, JSONObject params) { |
|||
return true; |
|||
} |
|||
|
|||
private boolean waiting(CraftsContext craftsContext, JSONObject params) { |
|||
return true; |
|||
} |
|||
//移动至滴定 |
|||
private void moveToTitration(){ |
|||
//动态分配使用的模块 |
|||
} |
|||
//移动至加热 |
|||
private void moveToHeat(){ |
|||
//动态分配使用的模块 |
|||
} |
|||
|
|||
private void wait(CraftsContext craftsContext, CommandFuture... futures) throws Exception { |
|||
wait(craftsContext, null, futures); |
|||
} |
|||
|
|||
private void wait(CraftsContext craftsContext, Long timeout, CommandFuture... futures) throws Exception { |
|||
CommandUtil.wait(timeout, futures); |
|||
craftsContext.incrementCurrentCommandCount(); |
|||
craftsContext.incrementHistoryCommandCount(); |
|||
} |
|||
|
|||
} |
@ -0,0 +1,10 @@ |
|||
package com.iflytop.colortitration.app.core.crafts; |
|||
|
|||
import cn.hutool.json.JSONObject; |
|||
import lombok.Data; |
|||
|
|||
@Data |
|||
public class CraftsStep { |
|||
private String method; |
|||
private JSONObject params; |
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue