Browse Source

调整设备状态推送逻辑

master
白凤吉 2 months ago
parent
commit
0bd15ff02f
  1. 2
      src/main/java/com/iflytop/gd/GraphiteDigesterServiceApplication.java
  2. 36
      src/main/java/com/iflytop/gd/app/command/selftest/TrayOutCommand.java
  3. 13
      src/main/java/com/iflytop/gd/app/core/aspect/DeviceStateChangeAspect.java
  4. 18
      src/main/java/com/iflytop/gd/app/model/bo/status/device/DeviceState.java
  5. 8
      src/main/java/com/iflytop/gd/app/model/bo/status/device/DoorState.java
  6. 8
      src/main/java/com/iflytop/gd/app/model/bo/status/device/GantryArmState.java
  7. 8
      src/main/java/com/iflytop/gd/app/model/bo/status/device/HeatModuleState.java
  8. 8
      src/main/java/com/iflytop/gd/app/model/bo/status/device/SolutionContainerState.java
  9. 8
      src/main/java/com/iflytop/gd/app/model/bo/status/device/SolutionModuleState.java
  10. 3
      src/main/java/com/iflytop/gd/app/service/crafts/CraftsStepService.java
  11. 10
      src/main/java/com/iflytop/gd/app/service/device/DeviceInitService.java
  12. 2
      src/main/java/com/iflytop/gd/app/service/device/DeviceStateService.java

2
src/main/java/com/iflytop/gd/GraphiteDigesterServiceApplication.java

@ -17,7 +17,7 @@ public class GraphiteDigesterServiceApplication {
SpringApplication app = new SpringApplication(GraphiteDigesterServiceApplication.class);
app.addInitializers(ctx -> {
try {
Thread.sleep(5_000);
Thread.sleep(0);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}

36
src/main/java/com/iflytop/gd/app/command/selftest/TrayOutCommand.java

@ -0,0 +1,36 @@
package com.iflytop.gd.app.command.selftest;
import com.iflytop.gd.app.core.BaseCommandHandler;
import com.iflytop.gd.app.model.dto.CmdDTO;
import com.iflytop.gd.app.service.device.SelfTestService;
import com.iflytop.gd.app.service.device.module.SolutionModuleService;
import com.iflytop.gd.common.annotation.CommandMapping;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.util.concurrent.CompletableFuture;
/**
* 移除一个托盘
*/
@Slf4j
@Component
@RequiredArgsConstructor
@CommandMapping("tray_out")//业务指令注解
public class TrayOutCommand extends BaseCommandHandler {
private final SolutionModuleService solutionModuleService;
private final SelfTestService selfTestService;
@Override
public CompletableFuture<Void> handle(CmdDTO cmdDTO) {
//TODO 通过传感器获取一个有托盘的加热模块顺序按照1-6
return runAsync(() -> {
//如果没开门则开门
//拆下拍子
//将托盘移动至加液模块
});
}
}

13
src/main/java/com/iflytop/gd/app/core/aspect/DeviceStateChangeAspect.java

@ -23,22 +23,13 @@ public class DeviceStateChangeAspect {
private final DeviceStateService deviceStateService;
private final Lock lock = new ReentrantLock();
private Object beforeValue;
@Before("execution(* com.iflytop.gd.app.model.bo.status..set*(..))")
public void beforeSetMethod(JoinPoint joinPoint) {
lock.lock();
try {
Object[] methodArgs = joinPoint.getArgs();
if (methodArgs != null && methodArgs.length > 0) {
beforeValue = methodArgs[0];
}
} catch (Exception e) {
log.error("处理状态变更前的值失败", e);
}
}
@After("execution(* com.iflytop.gd.app.model.bo.status..set*(..))")
@After("execution(* com.iflytop.gd.app.model.bo.status.device.*.set*(..))")
public void afterSetMethod(JoinPoint joinPoint) {
try {
String className = joinPoint.getSignature().getDeclaringType().getName(); // 获取类名
@ -47,7 +38,7 @@ public class DeviceStateChangeAspect {
if (methodArgs != null && methodArgs.length > 0) {
// 保存修改后的值
Object afterValue = methodArgs[0];
log.info("设备状态发生改变,类型{}.{} ,from {} to {}", className, methodName, beforeValue, afterValue);
log.info("设备状态发生改变,类型{}.{}({})", className, methodName, afterValue);
webSocketService.push(WebSocketMessageType.STATUS, deviceStateService.getDeviceState());
}
} catch (Exception e) {

18
src/main/java/com/iflytop/gd/app/model/bo/status/device/DeviceState.java

@ -1,27 +1,35 @@
package com.iflytop.gd.app.model.bo.status.device;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.iflytop.gd.app.model.entity.Tasks;
import com.iflytop.gd.app.model.entity.User;
import com.iflytop.gd.common.enums.HeatModuleCode;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
@Schema(description = "当前设备")
@Data
@Component
@Scope("prototype")
@RequiredArgsConstructor
@JsonIgnoreProperties(value = {"advisors", "frozen", "preFiltered", "proxyTargetClass", "targetSource", "exposeProxy", "advisorCount", "proxiedInterfaces", "targetClass"})
public class DeviceState {
@Schema(description = "门状态")
private final DoorState door = new DoorState();
private final DoorState door;
@Schema(description = "龙门架机械臂状态")
private final GantryArmState gantryArm = new GantryArmState();
private final GantryArmState gantryArm;
@Schema(description = "加液模块属性")
private final SolutionModuleState solutionModule = new SolutionModuleState();
private final SolutionModuleState solutionModule;
@Schema(description = "加热模块属性")
private final List<HeatModuleState> heatModule = new ArrayList<>();
private List<HeatModuleState> heatModule = new ArrayList<>();
@Schema(description = "托盘")
private final List<TrayState> tray = new ArrayList<>();
private List<TrayState> tray = new ArrayList<>();
@Schema(description = "虚拟模式,true为虚拟")
private boolean virtual = false;
@Schema(description = "初始化状态,true初始化完毕")

8
src/main/java/com/iflytop/gd/app/model/bo/status/device/DoorState.java

@ -1,10 +1,18 @@
package com.iflytop.gd.app.model.bo.status.device;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
@Schema(description = "门")
@Data
@Component
@Scope("prototype")
@RequiredArgsConstructor
@JsonIgnoreProperties(value = {"advisors", "frozen", "preFiltered", "proxyTargetClass", "targetSource", "exposeProxy", "advisorCount", "proxiedInterfaces", "targetClass"})
public class DoorState {
@Schema(description = "是否开门,true为开启状态,false为关闭状态")
private boolean open = false;

8
src/main/java/com/iflytop/gd/app/model/bo/status/device/GantryArmState.java

@ -1,10 +1,18 @@
package com.iflytop.gd.app.model.bo.status.device;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
@Schema(description = "龙门架机械臂")
@Data
@Component
@Scope("prototype")
@RequiredArgsConstructor
@JsonIgnoreProperties(value = {"advisors", "frozen", "preFiltered", "proxyTargetClass", "targetSource", "exposeProxy", "advisorCount", "proxiedInterfaces", "targetClass"})
public class GantryArmState {
@Schema(description = "是否空闲,true为空闲,false为占用")
private boolean idle = true;

8
src/main/java/com/iflytop/gd/app/model/bo/status/device/HeatModuleState.java

@ -1,11 +1,19 @@
package com.iflytop.gd.app.model.bo.status.device;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.iflytop.gd.common.enums.HeatModuleCode;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
@Schema(description = "加热模块")
@Data
@Component
@Scope("prototype")
@RequiredArgsConstructor
@JsonIgnoreProperties(value = {"advisors", "frozen", "preFiltered", "proxyTargetClass", "targetSource", "exposeProxy", "advisorCount", "proxiedInterfaces", "targetClass"})
public class HeatModuleState {
@Schema(description = "加热模块code")
private HeatModuleCode moduleCode;

8
src/main/java/com/iflytop/gd/app/model/bo/status/device/SolutionContainerState.java

@ -1,12 +1,20 @@
package com.iflytop.gd.app.model.bo.status.device;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.iflytop.gd.common.enums.ContainerCode;
import com.iflytop.gd.common.enums.ContainerType;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
@Schema(description = "溶液容器")
@Data
@Component
@Scope("prototype")
@RequiredArgsConstructor
@JsonIgnoreProperties(value = {"advisors", "frozen", "preFiltered", "proxyTargetClass", "targetSource", "exposeProxy", "advisorCount", "proxiedInterfaces", "targetClass"})
public class SolutionContainerState {
@Schema(description = "容器数据id")
private Long id;

8
src/main/java/com/iflytop/gd/app/model/bo/status/device/SolutionModuleState.java

@ -1,13 +1,21 @@
package com.iflytop.gd.app.model.bo.status.device;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
@Schema(description = "加液模块")
@Data
@Component
@Scope("prototype")
@RequiredArgsConstructor
@JsonIgnoreProperties(value = {"advisors", "frozen", "preFiltered", "proxyTargetClass", "targetSource", "exposeProxy", "advisorCount", "proxiedInterfaces", "targetClass"})
public class SolutionModuleState {
@Schema(description = "是否空闲,true为空闲,false为占用")
private boolean idle = true;

3
src/main/java/com/iflytop/gd/app/service/crafts/CraftsStepService.java

@ -65,6 +65,7 @@ public class CraftsStepService {
*/
private boolean addLiquid(String heatId, JSONObject params) throws Exception {
HeatModuleCode heatModuleCode = HeatModuleCode.valueOf(heatId);
//TODO 判断加液区是否有托盘如果没有托盘的话判断加热区是否有托盘然后将其移动至加液区
moveToSolutionModule(heatModuleCode);
JSONArray tubeSolList = params.getJSONArray("tubeSolList");
for (int i = 0; i < tubeSolList.size(); i++) {
@ -94,7 +95,7 @@ public class CraftsStepService {
*/
private boolean shaking(String heatId, JSONObject params) throws Exception {
HeatModuleCode heatModuleCode = HeatModuleCode.valueOf(heatId);
if (deviceStateService.getDeviceState().getSolutionModule().getTrayStatus() == 0) {
if (deviceStateService.getDeviceState().getSolutionModule().getTrayStatus() == 0) {//TODO 实际应该从传感器获取托盘状态
moveToSolutionModule(heatModuleCode);
}
Integer second = params.getInt("second");

10
src/main/java/com/iflytop/gd/app/service/device/DeviceInitService.java

@ -31,6 +31,7 @@ import com.iflytop.gd.hardware.type.StepMotor.StepMotorMId;
import jakarta.annotation.PostConstruct;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.stereotype.Service;
import java.util.List;
@ -51,12 +52,13 @@ public class DeviceInitService {
private final ActionOvertimeConstant actionOvertimeConstant;
private final OutputIOCtrlDriver outputIOCtrlDriver;
private final DeviceParamConfigService deviceParamConfigService;
private final ObjectProvider<HeatModuleState> heatModuleStateProvider;
private final ObjectProvider<SolutionContainerState> solutionContainerStateProvider;
@PostConstruct
public void init() {
new Thread(() -> {
try {
Thread.sleep(3000);
CompletableFuture.runAsync(() -> {
try {
tricolorLightDriver.open(MId.TriColorLight, TricolorLightDriver.Color.BLUE);
@ -157,16 +159,16 @@ public class DeviceInitService {
DeviceState deviceState = deviceStateService.getDeviceState();
List<HeatModuleState> heatArea = deviceState.getHeatModule();
for (HeatModuleCode code : HeatModuleCode.values()) {
heatArea.add(new HeatModuleState(code));
heatArea.add(heatModuleStateProvider.getObject(code));
}
List<Container> containerList = containerService.getList();
List<SolutionContainerState> solutionBucket = deviceState.getSolutionModule().getSolutionContainer();
for (Container container : containerList) {
if (container.getType() == 0) {
solutionBucket.add(new SolutionContainerState(container.getId(), ContainerCode.valueOf(container.getCode()), ContainerType.solution));
solutionBucket.add(solutionContainerStateProvider.getObject(container.getId(), ContainerCode.valueOf(container.getCode()), ContainerType.solution));
} else {
solutionBucket.add(new SolutionContainerState(container.getId(), ContainerCode.valueOf(container.getCode()), ContainerType.neutralization));
solutionBucket.add(solutionContainerStateProvider.getObject(container.getId(), ContainerCode.valueOf(container.getCode()), ContainerType.neutralization));
}
}
}

2
src/main/java/com/iflytop/gd/app/service/device/DeviceStateService.java

@ -15,7 +15,7 @@ import java.util.concurrent.atomic.AtomicReference;
@RequiredArgsConstructor
public class DeviceStateService {
@Getter
private final DeviceState deviceState = new DeviceState();
private final DeviceState deviceState;
@Getter
private final AtomicReference<CommandMutexState> commandMutexState = new AtomicReference<>(new CommandMutexState());

Loading…
Cancel
Save