From 1d6460ecbf346c3df2dc302c84d65bf2d51ff9b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E5=87=A4=E5=90=89?= Date: Fri, 28 Feb 2025 15:25:13 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E5=AE=9E=E7=8E=B0=E5=8F=AF=E7=BC=96?= =?UTF-8?q?=E8=BE=91=E7=9A=84=E8=AE=BE=E5=A4=87=E6=8E=A7=E5=88=B6=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gd/device/controller/DeviceCtrlController.java | 33 +++++++-------- .../qyft/gd/device/model/bo/DeviceCtrlFuncCMD.java | 6 ++- .../qyft/gd/device/model/form/CtrlFuncForm.java | 8 ++-- .../qyft/gd/device/service/ICtrlFuncService.java | 2 +- .../device/service/impl/CtrlFuncServiceImpl.java | 47 ++++++++++++---------- src/main/java/com/qyft/gd/service/CMDService.java | 7 ++-- .../java/com/qyft/gd/system/config/WebConfig.java | 16 ++++++++ 7 files changed, 71 insertions(+), 48 deletions(-) create mode 100644 src/main/java/com/qyft/gd/system/config/WebConfig.java diff --git a/src/main/java/com/qyft/gd/device/controller/DeviceCtrlController.java b/src/main/java/com/qyft/gd/device/controller/DeviceCtrlController.java index b59e013..0f78616 100644 --- a/src/main/java/com/qyft/gd/device/controller/DeviceCtrlController.java +++ b/src/main/java/com/qyft/gd/device/controller/DeviceCtrlController.java @@ -1,11 +1,9 @@ package com.qyft.gd.device.controller; import com.qyft.gd.device.model.bo.DeviceCtrlFuncCMD; -import com.qyft.gd.device.model.bo.DeviceStatus; import com.qyft.gd.device.model.entity.CtrlFunc; import com.qyft.gd.device.model.form.CtrlFuncForm; import com.qyft.gd.device.model.vo.DeviceCtrlFuncVO; -import com.qyft.gd.device.service.DeviceStatusService; import com.qyft.gd.device.service.ICtrlFuncService; import com.qyft.gd.system.common.result.Result; import com.qyft.gd.system.common.result.ResultCode; @@ -43,7 +41,7 @@ public class DeviceCtrlController { @Operation(summary = "根据id获取设备控制方法与步骤") @GetMapping("/ctrl/{id}") public Result getById(@PathVariable Long id) { - DeviceCtrlFuncVO ctrlFuncVO = ctrlFuncService.findById(id); + DeviceCtrlFuncVO ctrlFuncVO = ctrlFuncService.findVOById(id); return Result.success(ctrlFuncVO); } @@ -52,12 +50,12 @@ public class DeviceCtrlController { public Result addCtrlFunc(@RequestBody CtrlFuncForm ctrlFuncForm) { long count = ctrlFuncService.countFuncCmdByFuncCmd(ctrlFuncForm.getFuncCmd()); if (count > 0) { - boolean isSuccess = ctrlFuncService.addCtrlFunc(ctrlFuncForm); - if (isSuccess) { - return Result.success(); - } - } else { return Result.failed(ResultCode.DATA_ALREADY_EXISTS); + + } + boolean isSuccess = ctrlFuncService.addCtrlFunc(ctrlFuncForm); + if (isSuccess) { + return Result.success(); } return Result.failed(); } @@ -65,15 +63,19 @@ public class DeviceCtrlController { @Operation(summary = "更新设备控制方法与步骤") @PutMapping("/ctrl/{id}") public Result updateCtrlFunc(@PathVariable Long id, @RequestBody CtrlFuncForm ctrlFuncForm) { - long count = ctrlFuncService.countFuncCmdByFuncCmd(ctrlFuncForm.getFuncCmd()); - if (count > 0) { - boolean isSuccess = ctrlFuncService.updateCtrlFunc(id, ctrlFuncForm); - if (isSuccess) { - return Result.success(); + CtrlFunc currentCtrlFunc = ctrlFuncService.getById(id); + if (currentCtrlFunc != null && !currentCtrlFunc.getFuncCmd().equals(ctrlFuncForm.getFuncCmd())) { + //改了指令需要判断指令是否重复 + long count = ctrlFuncService.countFuncCmdByFuncCmd(ctrlFuncForm.getFuncCmd()); + if (count > 0) { + return Result.failed(ResultCode.DATA_ALREADY_EXISTS); } - } else { - return Result.failed(ResultCode.DATA_ALREADY_EXISTS); } + boolean isSuccess = ctrlFuncService.updateCtrlFunc(id, ctrlFuncForm); + if (isSuccess) { + return Result.success(); + } + return Result.failed(); } @@ -88,5 +90,4 @@ public class DeviceCtrlController { } - } diff --git a/src/main/java/com/qyft/gd/device/model/bo/DeviceCtrlFuncCMD.java b/src/main/java/com/qyft/gd/device/model/bo/DeviceCtrlFuncCMD.java index 2a30bba..7fa7d56 100644 --- a/src/main/java/com/qyft/gd/device/model/bo/DeviceCtrlFuncCMD.java +++ b/src/main/java/com/qyft/gd/device/model/bo/DeviceCtrlFuncCMD.java @@ -9,9 +9,10 @@ import lombok.EqualsAndHashCode; @Data public class DeviceCtrlFuncCMD { - public DeviceCtrlFuncCMD(String name, String deviceCmd) { + public DeviceCtrlFuncCMD(String name, String deviceCmd, String params) { this.name = name; this.deviceCmd = deviceCmd; + this.params = params; } @Schema(description = "指令名称") @@ -20,4 +21,7 @@ public class DeviceCtrlFuncCMD { @Schema(description = "设备指令") private String deviceCmd; + @Schema(description = "参数") + private String params; + } diff --git a/src/main/java/com/qyft/gd/device/model/form/CtrlFuncForm.java b/src/main/java/com/qyft/gd/device/model/form/CtrlFuncForm.java index cd9f979..88e7ff6 100644 --- a/src/main/java/com/qyft/gd/device/model/form/CtrlFuncForm.java +++ b/src/main/java/com/qyft/gd/device/model/form/CtrlFuncForm.java @@ -5,9 +5,10 @@ import lombok.Data; import lombok.EqualsAndHashCode; import java.util.List; +import java.util.Map; @EqualsAndHashCode(callSuper = false) -@Schema(description = "获取所有设备控制方法表单") +@Schema(description = "设备控制方法表单") @Data public class CtrlFuncForm { @@ -23,14 +24,11 @@ public class CtrlFuncForm { @Data public static class CtrlFuncStepForm { - @Schema(description = "控制方法的id") - private Long funcId; - @Schema(description = "设备指令") private String deviceCmd; @Schema(description = "设备指令的参数,为null则动态传入") - private String params; + private Map params; } diff --git a/src/main/java/com/qyft/gd/device/service/ICtrlFuncService.java b/src/main/java/com/qyft/gd/device/service/ICtrlFuncService.java index 42045bb..859038e 100644 --- a/src/main/java/com/qyft/gd/device/service/ICtrlFuncService.java +++ b/src/main/java/com/qyft/gd/device/service/ICtrlFuncService.java @@ -15,7 +15,7 @@ public interface ICtrlFuncService extends IService { List findAll(); - DeviceCtrlFuncVO findById(Long id); + DeviceCtrlFuncVO findVOById(Long id); long countFuncCmdByFuncCmd(String funcCmd); diff --git a/src/main/java/com/qyft/gd/device/service/impl/CtrlFuncServiceImpl.java b/src/main/java/com/qyft/gd/device/service/impl/CtrlFuncServiceImpl.java index 226d951..893714c 100644 --- a/src/main/java/com/qyft/gd/device/service/impl/CtrlFuncServiceImpl.java +++ b/src/main/java/com/qyft/gd/device/service/impl/CtrlFuncServiceImpl.java @@ -1,5 +1,6 @@ package com.qyft.gd.device.service.impl; +import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.qyft.gd.device.mapper.CtrlFuncMapper; @@ -27,22 +28,22 @@ public class CtrlFuncServiceImpl extends ServiceImpl i private static final List ctrlFuncDeviceCMDList = new ArrayList<>(); static { - ctrlFuncDeviceCMDList.add(new DeviceCtrlFuncCMD("开门", "openDoor")); - ctrlFuncDeviceCMDList.add(new DeviceCtrlFuncCMD("关门", "closeDoor")); - ctrlFuncDeviceCMDList.add(new DeviceCtrlFuncCMD("导轨机械臂运动到指定点位", "moveRailArmToPoint")); - ctrlFuncDeviceCMDList.add(new DeviceCtrlFuncCMD("导轨机械臂相对运动", "moveRailArmRelative")); - ctrlFuncDeviceCMDList.add(new DeviceCtrlFuncCMD("导轨机械臂移至指定加热区上方", "moveToHeatArea")); - ctrlFuncDeviceCMDList.add(new DeviceCtrlFuncCMD("导轨机械臂移至加液区上方", "moveToActionArea")); - ctrlFuncDeviceCMDList.add(new DeviceCtrlFuncCMD("打开导轨机械臂夹爪", "openClaw")); - ctrlFuncDeviceCMDList.add(new DeviceCtrlFuncCMD("收合导轨机械臂夹爪", "closeClaw")); - ctrlFuncDeviceCMDList.add(new DeviceCtrlFuncCMD("指定加热区开始加热", "startHeating")); - ctrlFuncDeviceCMDList.add(new DeviceCtrlFuncCMD("指定加热区停止加热", "stopHeating")); - ctrlFuncDeviceCMDList.add(new DeviceCtrlFuncCMD("指定加热区抬起托盘", "raiseTray")); - ctrlFuncDeviceCMDList.add(new DeviceCtrlFuncCMD("指定加热区放下托盘", "lowerTray")); - ctrlFuncDeviceCMDList.add(new DeviceCtrlFuncCMD("依次添加溶液", "addLiquid")); - ctrlFuncDeviceCMDList.add(new DeviceCtrlFuncCMD("开始摇匀", "startShaking")); - ctrlFuncDeviceCMDList.add(new DeviceCtrlFuncCMD("停止摇匀", "stopShaking")); - ctrlFuncDeviceCMDList.add(new DeviceCtrlFuncCMD("拍照", "takePhoto")); + ctrlFuncDeviceCMDList.add(new DeviceCtrlFuncCMD("开门", "openDoor", "{}")); + ctrlFuncDeviceCMDList.add(new DeviceCtrlFuncCMD("关门", "closeDoor", "{}")); + ctrlFuncDeviceCMDList.add(new DeviceCtrlFuncCMD("导轨机械臂运动到指定点位", "moveRailArmToPoint", "{\"x\":0,\"y\":0,\"z\":0}")); + ctrlFuncDeviceCMDList.add(new DeviceCtrlFuncCMD("导轨机械臂相对运动", "moveRailArmRelative", "{\"x\":0,\"y\":0,\"z\":0}")); + ctrlFuncDeviceCMDList.add(new DeviceCtrlFuncCMD("导轨机械臂移至指定加热区上方", "moveToHeatArea", "{\"heatId\":2}")); + ctrlFuncDeviceCMDList.add(new DeviceCtrlFuncCMD("导轨机械臂移至加液区上方", "moveToActionArea", "{}")); + ctrlFuncDeviceCMDList.add(new DeviceCtrlFuncCMD("打开导轨机械臂夹爪", "openClaw", "{}")); + ctrlFuncDeviceCMDList.add(new DeviceCtrlFuncCMD("收合导轨机械臂夹爪", "closeClaw", "{}")); + ctrlFuncDeviceCMDList.add(new DeviceCtrlFuncCMD("指定加热区开始加热", "startHeating", "{\"heatId\":2}")); + ctrlFuncDeviceCMDList.add(new DeviceCtrlFuncCMD("指定加热区停止加热", "stopHeating", "{\"heatId\":2}")); + ctrlFuncDeviceCMDList.add(new DeviceCtrlFuncCMD("指定加热区抬起托盘", "raiseTray", "{\"heatId\":2}")); + ctrlFuncDeviceCMDList.add(new DeviceCtrlFuncCMD("指定加热区放下托盘", "lowerTray", "{\"heatId\":2}")); + ctrlFuncDeviceCMDList.add(new DeviceCtrlFuncCMD("依次添加溶液", "addLiquid", "{\"tubeSolList\":[{\"tubeNum\":1,\"solId\":15,\"volume\":20}]}")); + ctrlFuncDeviceCMDList.add(new DeviceCtrlFuncCMD("开始摇匀", "startShaking", "{}")); + ctrlFuncDeviceCMDList.add(new DeviceCtrlFuncCMD("停止摇匀", "stopShaking", "{}")); + ctrlFuncDeviceCMDList.add(new DeviceCtrlFuncCMD("拍照", "takePhoto", "{}")); } @Override @@ -56,7 +57,7 @@ public class CtrlFuncServiceImpl extends ServiceImpl i } @Override - public DeviceCtrlFuncVO findById(Long id) { + public DeviceCtrlFuncVO findVOById(Long id) { CtrlFunc ctrlFunc = this.getById(id); List ctrlFuncStepList = ctrlFuncStepService.selectListByFuncCmd(ctrlFunc.getFuncCmd()); DeviceCtrlFuncVO ctrlFuncVO = new DeviceCtrlFuncVO(); @@ -78,7 +79,7 @@ public class CtrlFuncServiceImpl extends ServiceImpl i ctrlFunc.setFuncCmd(ctrlFuncForm.getFuncCmd()); ctrlFunc.setName(ctrlFuncForm.getName()); if (this.save(ctrlFunc)) { - return saveCtrlFunc(ctrlFuncForm, ctrlFunc); + return reSaveCtrlFunc(ctrlFuncForm, ctrlFunc); } return false; } @@ -90,7 +91,7 @@ public class CtrlFuncServiceImpl extends ServiceImpl i ctrlFunc.setFuncCmd(ctrlFuncForm.getFuncCmd()); ctrlFunc.setName(ctrlFuncForm.getName()); if (this.updateById(ctrlFunc)) { - return saveCtrlFunc(ctrlFuncForm, ctrlFunc); + return reSaveCtrlFunc(ctrlFuncForm, ctrlFunc); } } return false; @@ -102,19 +103,21 @@ public class CtrlFuncServiceImpl extends ServiceImpl i .map(Long::parseLong) .collect(Collectors.toList()); for (Long id : ids) { - ctrlFuncStepService.remove(new LambdaQueryWrapper().eq(CtrlFuncStep::getFuncCmd, id)); + String funcCmd = this.getById(id).getFuncCmd(); + ctrlFuncStepService.remove(new LambdaQueryWrapper().eq(CtrlFuncStep::getFuncCmd, funcCmd)); } return this.removeByIds(ids); } - private boolean saveCtrlFunc(CtrlFuncForm ctrlFuncForm, CtrlFunc ctrlFunc) { + private boolean reSaveCtrlFunc(CtrlFuncForm ctrlFuncForm, CtrlFunc ctrlFunc) { + ctrlFuncStepService.remove(new LambdaQueryWrapper().eq(CtrlFuncStep::getFuncCmd, ctrlFunc.getFuncCmd())); List ctrlFuncStepFormList = ctrlFuncForm.getCtrlFuncStepList(); List ctrlFuncStepList = ctrlFuncStepFormList.stream() .map(ctrlFuncStepForm -> { CtrlFuncStep ctrlFuncStep = new CtrlFuncStep(); ctrlFuncStep.setFuncCmd(ctrlFunc.getFuncCmd()); ctrlFuncStep.setDeviceCmd(ctrlFuncStepForm.getDeviceCmd()); - ctrlFuncStep.setParams(ctrlFuncStepForm.getParams()); + ctrlFuncStep.setParams(JSONUtil.toJsonStr(ctrlFuncStepForm.getParams())); return ctrlFuncStep; }).toList(); return ctrlFuncStepService.saveBatch(ctrlFuncStepList); diff --git a/src/main/java/com/qyft/gd/service/CMDService.java b/src/main/java/com/qyft/gd/service/CMDService.java index 5a44a9e..6fcbaec 100644 --- a/src/main/java/com/qyft/gd/service/CMDService.java +++ b/src/main/java/com/qyft/gd/service/CMDService.java @@ -45,7 +45,7 @@ public class CMDService { int index = 0; for (CtrlFuncStep ctrlFuncStep : ctrlFuncStepList) { - Map params = null; + Map params; if (ctrlFuncStep.getParams() == null) { // 如果没有参数定义,使用传入的参数 try { params = (Map) paramsList.get(index); @@ -57,14 +57,15 @@ public class CMDService { return; } index++; // 移动到下一个参数 + }else{//如果有参数定义,使用参数定义 + params = JSONUtil.toBean(ctrlFuncStep.getParams(), Map.class); } - String deviceCmd = ctrlFuncStep.getDeviceCmd(); Method method = getMethodByName(deviceCmd); if (method != null) { boolean success = (boolean) method.invoke(deviceCtrlService, params); if (!success) { - log.error("指令执行错误,执行{}返回false: {}", deviceCmd, JSONUtil.toJsonStr(cmdForm)); + log.error("指令执行错误,执行设备指令{}时返回false: {}", deviceCmd, JSONUtil.toJsonStr(cmdForm)); executionResult.setStatus(CMDResultCode.FAILURE.getCode()); executionResult.setMessage(CMDResultCode.FAILURE.getMsg()); webSocketService.pushMsg(WebSocketMessageType.CMD, executionResult); diff --git a/src/main/java/com/qyft/gd/system/config/WebConfig.java b/src/main/java/com/qyft/gd/system/config/WebConfig.java new file mode 100644 index 0000000..a01ff7d --- /dev/null +++ b/src/main/java/com/qyft/gd/system/config/WebConfig.java @@ -0,0 +1,16 @@ +package com.qyft.gd.system.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.CorsRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +@Configuration +public class WebConfig implements WebMvcConfigurer { + @Override + public void addCorsMappings(CorsRegistry registry) { + registry.addMapping("/api/**") + .allowedOrigins("*") + .allowedMethods("GET", "POST", "PUT", "DELETE") + .allowedHeaders("*"); + } +} \ No newline at end of file