石墨消解仪后端服务
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.

92 lines
3.6 KiB

3 months ago
3 months ago
  1. package com.iflytop.gd.app.service;
  2. import com.iflytop.gd.app.core.device.DeviceState;
  3. import com.iflytop.gd.app.core.device.HeatModuleState;
  4. import com.iflytop.gd.app.core.device.SolutionContainerState;
  5. import com.iflytop.gd.app.model.bo.DeviceInitializationData;
  6. import com.iflytop.gd.app.model.entity.Container;
  7. import com.iflytop.gd.common.enums.ContainerCode;
  8. import com.iflytop.gd.common.enums.ContainerType;
  9. import com.iflytop.gd.common.enums.HeatModuleCode;
  10. import com.iflytop.gd.hardware.comm.can.A8kCanBusService;
  11. import com.iflytop.gd.hardware.exception.HardwareException;
  12. import com.iflytop.gd.hardware.type.MId;
  13. import com.iflytop.gd.hardware.type.RegIndex;
  14. import com.opencsv.CSVReader;
  15. import jakarta.annotation.PostConstruct;
  16. import lombok.RequiredArgsConstructor;
  17. import lombok.extern.slf4j.Slf4j;
  18. import org.springframework.stereotype.Service;
  19. import java.io.FileReader;
  20. import java.nio.file.Paths;
  21. import java.util.List;
  22. @Slf4j
  23. @Service
  24. @RequiredArgsConstructor
  25. public class DeviceInitService {
  26. private final ContainerService containerService;
  27. private final DeviceStateService deviceStateService;
  28. private final A8kCanBusService canBusService;
  29. @PostConstruct
  30. public void init() {
  31. new Thread(() -> {
  32. try {
  33. initDeviceState();
  34. initDeviceSetData();
  35. deviceStateService.setInitComplete(true);
  36. } catch (Exception ignored) {
  37. }
  38. }).start();
  39. }
  40. public void initDeviceSetData() {
  41. if (deviceStateService.getDeviceState().isVirtual() || deviceStateService.getDeviceState().isInitComplete()) {
  42. return;
  43. }
  44. try {
  45. Thread.sleep(2000);
  46. String filePath = Paths.get("src", "main", "resources", "init", "zapp_sub_module_reg_initial_value.csv").toString();
  47. CSVReader reader = new CSVReader(new FileReader(filePath));
  48. reader.readNext();
  49. String[] line;
  50. while ((line = reader.readNext()) != null) {
  51. DeviceInitializationData data = new DeviceInitializationData();
  52. data.setId(Integer.parseInt(line[0]));
  53. data.setMid(line[1]);
  54. data.setRegIndex(line[2]);
  55. data.setRegInitVal(Integer.parseInt(line[3]));
  56. sendToDevice(data);
  57. }
  58. reader.close();
  59. } catch (Exception e) {
  60. log.error("设备初始化失败", e);
  61. initDeviceSetData();
  62. }
  63. }
  64. public void sendToDevice(DeviceInitializationData data) throws HardwareException {
  65. canBusService.moduleSetReg(MId.valueOf(data.getMid()), RegIndex.valueOf(data.getRegIndex()), data.getRegInitVal());
  66. }
  67. public void initDeviceState() {
  68. DeviceState deviceState = deviceStateService.getDeviceState();
  69. List<HeatModuleState> heatArea = deviceState.getHeatModule();
  70. for (HeatModuleCode code : HeatModuleCode.values()) {
  71. heatArea.add(new HeatModuleState(code));
  72. }
  73. List<Container> containerList = containerService.getList();
  74. List<SolutionContainerState> solutionBucket = deviceState.getSolutionModule().getSolutionContainer();
  75. for (Container container : containerList) {
  76. if (container.getType() == 0) {
  77. solutionBucket.add(new SolutionContainerState(container.getId(), ContainerCode.valueOf(container.getCode()), ContainerType.solution));
  78. } else {
  79. solutionBucket.add(new SolutionContainerState(container.getId(), ContainerCode.valueOf(container.getCode()), ContainerType.neutralization));
  80. }
  81. }
  82. }
  83. }