From 3909fe23c5ef8ba6fcbc589ce6ee80691fd61b99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=A2=A6=E8=BF=9C?= <1063331231@qq.com> Date: Thu, 31 Jul 2025 20:43:25 +0800 Subject: [PATCH] =?UTF-8?q?=E9=80=9A=E9=81=93=E5=8A=A0=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../handacid/app/controller/AuditRecordController.java | 14 ++++++++++++++ .../handacid/app/controller/ReceiveRecordController.java | 13 +++++++++++++ .../app/core/listener/BleGamepadEventListener.java | 4 ++-- .../com/iflytop/handacid/app/core/state/DeviceState.java | 6 ++++-- .../iflytop/handacid/app/service/ChannelCtrlService.java | 7 ++++--- .../iflytop/handacid/app/service/DeviceInitService.java | 8 ++++---- 6 files changed, 41 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/iflytop/handacid/app/controller/AuditRecordController.java b/src/main/java/com/iflytop/handacid/app/controller/AuditRecordController.java index 61ac55c..c5bfc4a 100644 --- a/src/main/java/com/iflytop/handacid/app/controller/AuditRecordController.java +++ b/src/main/java/com/iflytop/handacid/app/controller/AuditRecordController.java @@ -117,6 +117,20 @@ public class AuditRecordController { String fileName = "审计记录_" + System.currentTimeMillis() + ".xlsx"; // 尝试保存到U盘 String filePath = usbPath + File.separator + fileName; + log.info("导出审计记录到:" + filePath); + // 显式创建文件 + File file = new File(filePath); + if (file.exists()) { + file.delete(); + } + try { + if (!file.createNewFile()) { + return Result.failed("文件创建失败"); + } + } catch (IOException e) { + log.error(e.getMessage()); + return Result.failed("导出失败" + e.getMessage()); + } try (FileOutputStream fileOut = new FileOutputStream(filePath)) { workbook.write(fileOut); workbook.close(); diff --git a/src/main/java/com/iflytop/handacid/app/controller/ReceiveRecordController.java b/src/main/java/com/iflytop/handacid/app/controller/ReceiveRecordController.java index 1a70744..ecc5f2a 100644 --- a/src/main/java/com/iflytop/handacid/app/controller/ReceiveRecordController.java +++ b/src/main/java/com/iflytop/handacid/app/controller/ReceiveRecordController.java @@ -116,6 +116,19 @@ public class ReceiveRecordController { String fileName = "领取记录_" + System.currentTimeMillis() + ".xlsx"; // 尝试保存到U盘 String filePath = usbPath + File.separator + fileName; + File file = new File(filePath); + if (file.exists()) { + file.delete(); + } + try { + if (!file.createNewFile()) { + return Result.failed("文件创建失败"); + } + } catch (IOException e) { + log.error(e.getMessage()); + return Result.failed("导出失败" + e.getMessage()); + } + log.info("导出领取记录到:" + filePath); try (FileOutputStream fileOut = new FileOutputStream(filePath)) { workbook.write(fileOut); workbook.close(); diff --git a/src/main/java/com/iflytop/handacid/app/core/listener/BleGamepadEventListener.java b/src/main/java/com/iflytop/handacid/app/core/listener/BleGamepadEventListener.java index c8659eb..e1b4410 100644 --- a/src/main/java/com/iflytop/handacid/app/core/listener/BleGamepadEventListener.java +++ b/src/main/java/com/iflytop/handacid/app/core/listener/BleGamepadEventListener.java @@ -50,9 +50,9 @@ public class BleGamepadEventListener { } else if (CmdId.event_ble_gamepad_liquid_acid_prefilling.equals(cmdId)) { log.info("蓝牙手柄 预充按钮 按下"); if (deviceState.isSolutionPreFillStart()) { - channelCtrlService.solutionPreFillStart(); - } else { channelCtrlService.solutionPreFillStop(); + } else { + channelCtrlService.solutionPreFillStart(); } } else if (CmdId.event_ble_gamepad_connected.equals(cmdId)) { log.info("蓝牙手柄 连接成功"); diff --git a/src/main/java/com/iflytop/handacid/app/core/state/DeviceState.java b/src/main/java/com/iflytop/handacid/app/core/state/DeviceState.java index 9093a7d..01cc040 100644 --- a/src/main/java/com/iflytop/handacid/app/core/state/DeviceState.java +++ b/src/main/java/com/iflytop/handacid/app/core/state/DeviceState.java @@ -52,7 +52,9 @@ public class DeviceState { */ public synchronized JSONObject toJSON() { JSONObject json = new JSONObject(); - json.putOnce("channelState", new ArrayList<>(channelStateMap.values())); + List channelList = new ArrayList<>(channelStateMap.values()); + channelList.sort(Comparator.comparingInt(a -> a.getChannelCode().ordinal())); + json.putOnce("channelState", channelList); json.putOnce("mode", mode); json.putOnce("delay", delay); json.putOnce("virtual", virtual); @@ -106,7 +108,7 @@ public class DeviceState { */ public boolean isSolutionPreFillStart() { return channelStateMap.values().stream() - .anyMatch(cs -> cs.getStateCode() == ChannelStateCode.ADD); + .anyMatch(cs -> cs.getStateCode() == ChannelStateCode.PRE); } /** diff --git a/src/main/java/com/iflytop/handacid/app/service/ChannelCtrlService.java b/src/main/java/com/iflytop/handacid/app/service/ChannelCtrlService.java index dcbb6f0..cb53c73 100644 --- a/src/main/java/com/iflytop/handacid/app/service/ChannelCtrlService.java +++ b/src/main/java/com/iflytop/handacid/app/service/ChannelCtrlService.java @@ -53,8 +53,8 @@ public class ChannelCtrlService { CommandUtil.wait(currentPositionCommandFuture); Double currentPosition = currentPositionCommandFuture.getResponseResult().getJSONObject("data").getDouble("position"); channelState.setPumpPositionCache(currentPosition); - - Formulation formulation = formulationService.getOne(new LambdaQueryWrapper().eq(Formulation::getSolutionId, channelState.getSolutionId())); + Formulation formulation = formulationService.getOne(new LambdaQueryWrapper().eq(Formulation::getSolutionId, channelState.getSolutionId()) + .eq(Formulation::getConcentration, channelState.getConcentration()).eq(Formulation::getVolume, channelState.getTargetVolume()).last("limit 1")); DeviceCommand deviceCommand = getPumpMoveByCommandByChannel(channelState.getChannelCode(), formulation.getRevolutions()); commandFutureList.add(deviceCommandService.sendCommand(deviceCommand)); AuditRecord auditRecord = new AuditRecord(deviceState.getCurrentUser().getId(), deviceState.getCurrentUser().getNickname(), channelState.getSolutionId(), @@ -75,7 +75,8 @@ public class ChannelCtrlService { } else if (SolutionAddMode.CLICK.equals(deviceState.getMode())) {//点动模式 List commandFutureList = new ArrayList<>(); for (ChannelState channelState : channelStateList) { - Formulation formulation = formulationService.getOne(new LambdaQueryWrapper().eq(Formulation::getSolutionId, channelState.getSolutionId())); + Formulation formulation = formulationService.getOne(new LambdaQueryWrapper().eq(Formulation::getSolutionId, channelState.getSolutionId()) + .eq(Formulation::getConcentration, channelState.getConcentration()).eq(Formulation::getVolume, channelState.getTargetVolume()).last("limit 1")); DeviceCommand deviceCommand = getPumpMoveByCommandByChannel(channelState.getChannelCode(), formulation.getRevolutions()); commandFutureList.add(deviceCommandService.sendCommand(deviceCommand)); AuditRecord auditRecord = new AuditRecord(deviceState.getCurrentUser().getId(), deviceState.getCurrentUser().getNickname(), channelState.getSolutionId(), diff --git a/src/main/java/com/iflytop/handacid/app/service/DeviceInitService.java b/src/main/java/com/iflytop/handacid/app/service/DeviceInitService.java index 145e823..510ce39 100644 --- a/src/main/java/com/iflytop/handacid/app/service/DeviceInitService.java +++ b/src/main/java/com/iflytop/handacid/app/service/DeviceInitService.java @@ -98,16 +98,16 @@ public class DeviceInitService { */ public void initDeviceState() { log.info("初始化 initDeviceState"); - for (ChannelCode code : ChannelCode.values()) { + List channels = channelService.list(new LambdaQueryWrapper<>(new Channel()).orderByAsc(Channel::getId)); + for (Channel channel : channels) { //初始化通道 - Channel channel = channelService.getOne(new LambdaQueryWrapper<>(new Channel()).eq(Channel::getCode, code)); - ChannelState channelState = channelStateObjectProvider.getObject(code, channel.getConcentration(), channel.getTargetVolume(), channel.getReceivedVolume(), channel.getCurrentVolume()); + ChannelState channelState = channelStateObjectProvider.getObject(channel.getCode(), channel.getConcentration(), channel.getTargetVolume(), channel.getReceivedVolume(), channel.getCurrentVolume()); Solution solution = solutionService.getById(channel.getSolutionId()); if (solution != null) { channelState.setSolutionId(solution.getId()); channelState.setSolutionName(solution.getName()); } - deviceState.getChannelStateMap().put(code, channelState); + deviceState.getChannelStateMap().put(channel.getCode(), channelState); } deviceState.setMode(SolutionAddMode.valueOf(systemConfigService.getValueByKeyToString(SystemConfigKey.SOLUTION_ADD_MODE))); deviceState.setDelay(systemConfigService.getValueByKeyToInteger(SystemConfigKey.SOLUTION_ADD_DELAY));