Browse Source

feat:开始预充指令、停止预充指令

master
白凤吉 6 days ago
parent
commit
68be746491
  1. 2
      src/main/java/com/iflytop/handacid/app/command/control/SolutionAddStartCommand.java
  2. 63
      src/main/java/com/iflytop/handacid/app/command/control/SolutionPreFillStartCommand.java
  3. 55
      src/main/java/com/iflytop/handacid/app/command/control/SolutionPreFillStopCommand.java
  4. 12
      src/main/java/com/iflytop/handacid/app/service/ChannelCtrlService.java

2
src/main/java/com/iflytop/handacid/app/command/control/SolutionAddStartCommand.java

@ -68,7 +68,6 @@ public class SolutionAddStartCommand extends BaseCommandHandler {
JSONObject jsonObject = jsonArray.getJSONObject(i);
String channelCodeStr = jsonObject.getStr("channelCode");
ChannelCode channelCode = ChannelCode.valueOf(channelCodeStr);
Double volume = jsonObject.getDouble("volume");
DeviceCommand deviceCommand = channelCtrlService.getPumpMoveByCommandByChannel(channelCode, volume);
commandFutureList.add(deviceCommandService.sendCommand(deviceCommand));
@ -82,7 +81,6 @@ public class SolutionAddStartCommand extends BaseCommandHandler {
JSONObject jsonObject = jsonArray.getJSONObject(i);
String channelCodeStr = jsonObject.getStr("channelCode");
ChannelCode channelCode = ChannelCode.valueOf(channelCodeStr);
deviceState.getChannelStateMap().get(channelCode).setStateCode(ChannelStateCode.ADD);
Double volume = jsonObject.getDouble("volume");
DeviceCommand deviceCommand = channelCtrlService.getPumpMoveByCommandByChannel(channelCode, volume);
commandFutureList.add(deviceCommandService.sendCommand(deviceCommand));

63
src/main/java/com/iflytop/handacid/app/command/control/SolutionPreFillStartCommand.java

@ -0,0 +1,63 @@
package com.iflytop.handacid.app.command.control;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import com.iflytop.handacid.app.common.annotation.CommandMapping;
import com.iflytop.handacid.app.common.enums.ChannelCode;
import com.iflytop.handacid.app.common.enums.ChannelStateCode;
import com.iflytop.handacid.app.common.utils.CommandUtil;
import com.iflytop.handacid.app.core.command.BaseCommandHandler;
import com.iflytop.handacid.app.core.command.CommandFuture;
import com.iflytop.handacid.app.core.command.DeviceCommand;
import com.iflytop.handacid.app.core.state.DeviceState;
import com.iflytop.handacid.app.model.dto.CommandDTO;
import com.iflytop.handacid.app.service.ChannelCtrlService;
import com.iflytop.handacid.app.service.DeviceCommandService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CompletableFuture;
/**
* 开始预充
*/
@Slf4j
@Component
@RequiredArgsConstructor
@CommandMapping("solution_pre_fill_start")
public class SolutionPreFillStartCommand extends BaseCommandHandler {
private final DeviceCommandService deviceCommandService;
private final ChannelCtrlService channelCtrlService;
private final DeviceState deviceState;
@Override
public CompletableFuture<Void> handle(CommandDTO commandDTO) {
JSONArray jsonArray = commandDTO.getJSONArrayParam("channelArray");
List<ChannelCode> channelCodeList = new ArrayList<>();
for (int i = 0; i < jsonArray.size(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
String channelCodeStr = jsonObject.getStr("channelCode");
if (channelCodeStr == null) {
throw new IllegalArgumentException("参数 channelCode 不能为空");
}
}
return runAsync(() -> {
for (ChannelCode channelCode : channelCodeList) {
deviceState.getChannelStateMap().get(channelCode).setStateCode(ChannelStateCode.PRE);
}
List<CommandFuture> commandFutureList = new ArrayList<>();
for (int i = 0; i < jsonArray.size(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
String channelCodeStr = jsonObject.getStr("channelCode");
ChannelCode channelCode = ChannelCode.valueOf(channelCodeStr);
DeviceCommand deviceCommand = channelCtrlService.getPumpForwardRotateCommandByChannel(channelCode);
commandFutureList.add(deviceCommandService.sendCommand(deviceCommand));
}
CommandUtil.wait(commandFutureList);
});
}
}

55
src/main/java/com/iflytop/handacid/app/command/control/SolutionPreFillStopCommand.java

@ -0,0 +1,55 @@
package com.iflytop.handacid.app.command.control;
import com.iflytop.handacid.app.common.annotation.CommandMapping;
import com.iflytop.handacid.app.common.enums.ChannelStateCode;
import com.iflytop.handacid.app.common.utils.CommandUtil;
import com.iflytop.handacid.app.core.command.BaseCommandHandler;
import com.iflytop.handacid.app.core.command.CommandFuture;
import com.iflytop.handacid.app.core.command.DeviceCommand;
import com.iflytop.handacid.app.core.state.ChannelState;
import com.iflytop.handacid.app.core.state.DeviceState;
import com.iflytop.handacid.app.model.dto.CommandDTO;
import com.iflytop.handacid.app.service.ChannelCtrlService;
import com.iflytop.handacid.app.service.DeviceCommandService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CompletableFuture;
/**
* 停止预充
*/
@Slf4j
@Component
@RequiredArgsConstructor
@CommandMapping("solution_pre_fill_stop")
public class SolutionPreFillStopCommand extends BaseCommandHandler {
private final DeviceCommandService deviceCommandService;
private final ChannelCtrlService channelCtrlService;
private final DeviceState deviceState;
@Override
public CompletableFuture<Void> handle(CommandDTO commandDTO) {
return runAsync(() -> {
List<ChannelState> channelCodeList = deviceState.filterChannelStatesByState(ChannelStateCode.PRE);
deviceState.setSolutionAddStop(true);
try {
List<CommandFuture> commandFutureList = new ArrayList<>();
for (ChannelState channelState : channelCodeList) {
DeviceCommand deviceCommand = channelCtrlService.getPumpStopCommandByChannel(channelState.getChannelCode());
commandFutureList.add(deviceCommandService.sendCommand(deviceCommand));
}
CommandUtil.wait(commandFutureList);
} finally {
for (ChannelState channelCode : channelCodeList) {
channelCode.setStateCode(ChannelStateCode.IDLE);
}
}
});
}
}

12
src/main/java/com/iflytop/handacid/app/service/ChannelCtrlService.java

@ -33,6 +33,18 @@ public class ChannelCtrlService {
}
/**
* 根据通道code获取泵正转指令
*/
public DeviceCommand getPumpForwardRotateCommandByChannel(ChannelCode channelCode) {
return switch (channelCode) {
case CHANNEL_1 -> DeviceCommandGenerator.pump1ForwardRotate();
case CHANNEL_2 -> DeviceCommandGenerator.pump2ForwardRotate();
case CHANNEL_3 -> DeviceCommandGenerator.pump3ForwardRotate();
case CHANNEL_4 -> DeviceCommandGenerator.pump4ForwardRotate();
};
}
/**
* 根据通道code获取停止泵指令
*/
public DeviceCommand getPumpStopCommandByChannel(ChannelCode channelCode) {

Loading…
Cancel
Save