石墨消解仪后端服务
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

106 lines
5.3 KiB

package com.iflytop.gd.app.service;
import com.iflytop.gd.app.core.device.HeatModuleState;
import com.iflytop.gd.common.cmd.CommandFuture;
import com.iflytop.gd.common.cmd.DeviceCommandBundle;
import com.iflytop.gd.common.cmd.DeviceCommandGenerator;
import com.iflytop.gd.common.enums.HeatModuleCode;
import com.iflytop.gd.common.enums.data.DevicePositionCode;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;
/**
* 临时方法 以后应该会废弃
*/
@Slf4j
@Service
@RequiredArgsConstructor
public class DeviceCommandTempUtilService {
private final DeviceCommandService deviceCommandService;
private final DevicePositionService devicePositionService;
private final DeviceStateService deviceStateService;
private List<HeatModuleCode> moveTrayHeatModuleAvoidUpStateList = Collections.synchronizedList(new ArrayList<>());
/**
* 抬升
* 临时移动托盘的时候,加热模块升降避让
* 该方法会恢复之前升起的状态
*/
public void moveTrayHeatModuleAvoidUp(String cmdId, String cmdCode, HeatModuleCode targetHeatModuleCode) throws Exception {
double trayLift = devicePositionService.getPosition(DevicePositionCode.trayLift).getDistance(); //托盘升降抬升距离
List<CommandFuture> futuresList = new ArrayList<>();
for (HeatModuleCode heatModuleCode : moveTrayHeatModuleAvoidUpStateList) {
DeviceCommandBundle deviceCommand = getHeaterMotorMoveDeviceCommand(heatModuleCode, trayLift);
CommandFuture deviceCommandFuture = deviceCommandService.sendCommand(cmdId, cmdCode, deviceCommand);
futuresList.add(deviceCommandFuture);
}
if(targetHeatModuleCode != null) {
DeviceCommandBundle deviceCommand = getHeaterMotorMoveDeviceCommand(targetHeatModuleCode, trayLift);
CommandFuture deviceCommandFuture = deviceCommandService.sendCommand(cmdId, cmdCode, deviceCommand);
futuresList.add(deviceCommandFuture);
}
commandWait(futuresList.toArray(new CommandFuture[0]));
for (HeatModuleCode heatModuleCode : moveTrayHeatModuleAvoidUpStateList) {
deviceStateService.setHeatModuleStateTrayUp(heatModuleCode, 1);//加热模块托盘升降状态
}
}
/**
* 下降
* 临时移动托盘的时候,加热模块升降避让
* 该方法会下降所有升起的加热模块并且记录
*/
public void moveTrayHeatModuleAvoidDown(String cmdId, String cmdCode, HeatModuleCode targetHeatModuleCode) throws Exception {
moveTrayHeatModuleAvoidUpStateList.clear();
List<HeatModuleState> heatModuleStateList = deviceStateService.getDeviceState().getHeatModule();
double trayLower = devicePositionService.getPosition(DevicePositionCode.trayLower).getDistance(); //获取加热位下降托盘位置
List<CommandFuture> futuresList = new ArrayList<>();
for (HeatModuleState heatModuleState : heatModuleStateList) {
if (heatModuleState.getTrayUp() == 1) {
HeatModuleCode heatModuleCode = heatModuleState.getModuleCode();
DeviceCommandBundle deviceCommand = getHeaterMotorMoveDeviceCommand(heatModuleCode, trayLower);
CommandFuture deviceCommandFuture = deviceCommandService.sendCommand(cmdId, cmdCode, deviceCommand);
moveTrayHeatModuleAvoidUpStateList.add(heatModuleCode);
futuresList.add(deviceCommandFuture);
}
}
if(targetHeatModuleCode != null) {
DeviceCommandBundle deviceCommand = getHeaterMotorMoveDeviceCommand(targetHeatModuleCode, trayLower);
CommandFuture deviceCommandFuture = deviceCommandService.sendCommand(cmdId, cmdCode, deviceCommand);
futuresList.add(deviceCommandFuture);
}
commandWait(futuresList.toArray(new CommandFuture[0]));
for (HeatModuleCode heatModuleCode : moveTrayHeatModuleAvoidUpStateList) {
deviceStateService.setHeatModuleStateTrayUp(heatModuleCode, 0);//加热模块托盘升降状态
}
}
public DeviceCommandBundle getHeaterMotorMoveDeviceCommand(HeatModuleCode heatModuleCode, Double position) {
return switch (heatModuleCode) {
case heat_module_01 -> DeviceCommandGenerator.heaterMotor1Move(position);
case heat_module_02 -> DeviceCommandGenerator.heaterMotor2Move(position);
case heat_module_03 -> DeviceCommandGenerator.heaterMotor3Move(position);
case heat_module_04 -> DeviceCommandGenerator.heaterMotor4Move(position);
case heat_module_05 -> DeviceCommandGenerator.heaterMotor5Move(position);
case heat_module_06 -> DeviceCommandGenerator.heaterMotor6Move(position);
};
}
protected void commandWait(CommandFuture... futures) throws Exception {
CompletableFuture<?>[] responseFutures = Arrays.stream(futures)
.map(CommandFuture::getResponseFuture)
.toArray(CompletableFuture[]::new);
CompletableFuture.allOf(responseFutures)
.get(120, TimeUnit.SECONDS);
}
}